@@ -75,6 +75,7 @@ OBJECTS_APP := \ | |||
$(JUCE_OBJDIR)/jucer_Main_f8488f5b.o \ | |||
$(JUCE_OBJDIR)/jucer_MainWindow_1e163aeb.o \ | |||
$(JUCE_OBJDIR)/jucer_OpenDocumentManager_4c72d210.o \ | |||
$(JUCE_OBJDIR)/jucer_LicenseController_9abff0cf.o \ | |||
$(JUCE_OBJDIR)/projucer_CompileEngineClient_542e6b2d.o \ | |||
$(JUCE_OBJDIR)/projucer_CompileEngineServer_a5a32aa5.o \ | |||
$(JUCE_OBJDIR)/jucer_SourceCodeEditor_461f5487.o \ | |||
@@ -177,6 +178,11 @@ $(JUCE_OBJDIR)/jucer_OpenDocumentManager_4c72d210.o: ../../Source/Application/ju | |||
@echo "Compiling jucer_OpenDocumentManager.cpp" | |||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<" | |||
$(JUCE_OBJDIR)/jucer_LicenseController_9abff0cf.o: ../../Source/Licenses/jucer_LicenseController.cpp | |||
-$(V_AT)mkdir -p $(JUCE_OBJDIR) | |||
@echo "Compiling jucer_LicenseController.cpp" | |||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<" | |||
$(JUCE_OBJDIR)/projucer_CompileEngineClient_542e6b2d.o: ../../Source/LiveBuildEngine/projucer_CompileEngineClient.cpp | |||
-$(V_AT)mkdir -p $(JUCE_OBJDIR) | |||
@echo "Compiling projucer_CompileEngineClient.cpp" | |||
@@ -33,6 +33,7 @@ | |||
95B44E6C74B1DED31DBE37EB = {isa = PBXBuildFile; fileRef = 8C52A3DDA62A746AA7A68535; }; | |||
AA9D0B8E23F3D87A23DE9F8A = {isa = PBXBuildFile; fileRef = 9069981E414A631B036CC9AC; }; | |||
244BA1BDA5FAA465EA3F9C6D = {isa = PBXBuildFile; fileRef = 2247EE920DF0610CAF9F4513; }; | |||
6FD0752A5CADCF60D79FDBB7 = {isa = PBXBuildFile; fileRef = 51CBE59779A36D1B80B26974; }; | |||
85B5E65F8DD80938BFBDCE61 = {isa = PBXBuildFile; fileRef = A1333F975410DD3DBBE2841F; }; | |||
D805169E01D7F90B01C11769 = {isa = PBXBuildFile; fileRef = 635290DEB1D564927D7A450C; }; | |||
FCE6F604C00039A32649CB69 = {isa = PBXBuildFile; fileRef = 2E680E2C65684A4272AE079A; }; | |||
@@ -111,9 +112,9 @@ | |||
1729AEDC34001C31B8CC357C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_FileHelpers.cpp"; path = "../../Source/Utility/jucer_FileHelpers.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
188D03A4247F4BC0539F5C49 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_Colours.h"; path = "../../Source/Utility/jucer_Colours.h"; sourceTree = "SOURCE_ROOT"; }; | |||
18D9EBA1DAE45EEF81FD5C8F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_MainConsoleAppTemplate.cpp"; path = "../../Source/BinaryData/jucer_MainConsoleAppTemplate.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
1A8E24245E48C7C4DB0164E6 = {isa = PBXFileReference; lastKnownFileType = image.png; name = projectIconAndroid.png; path = ../../Source/BinaryData/projectIconAndroid.png; sourceTree = "SOURCE_ROOT"; }; | |||
1AF7EFBE4961C7B6C834BF54 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PresetIDs.h"; path = "../../Source/Utility/jucer_PresetIDs.h"; sourceTree = "SOURCE_ROOT"; }; | |||
1C216FE9B7A5209C5CCF2517 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_PaintElement.cpp"; path = "../../Source/ComponentEditor/paintelements/jucer_PaintElement.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
1C73D7591E63E8018E279716 = {isa = PBXFileReference; lastKnownFileType = file.svg; name = "export_android.svg"; path = "../../Source/BinaryData/export_android.svg"; sourceTree = "SOURCE_ROOT"; }; | |||
1C81C5501BE7F2C912250711 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_GlobalPreferences.h"; path = "../../Source/Application/jucer_GlobalPreferences.h"; sourceTree = "SOURCE_ROOT"; }; | |||
1D3D6A19A60F0B03DE2F1C14 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PaintElementPath.h"; path = "../../Source/ComponentEditor/paintelements/jucer_PaintElementPath.h"; sourceTree = "SOURCE_ROOT"; }; | |||
1D99EA99F946D665FE583414 = {isa = PBXFileReference; lastKnownFileType = file.svg; name = "wizard_Highlight.svg"; path = "../../Source/BinaryData/wizard_Highlight.svg"; sourceTree = "SOURCE_ROOT"; }; | |||
@@ -138,8 +139,8 @@ | |||
2EEB1C074162F363C6599282 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_CommandLine.h"; path = "../../Source/Application/jucer_CommandLine.h"; sourceTree = "SOURCE_ROOT"; }; | |||
301592EBAC0FFF6F5B268E99 = {isa = PBXFileReference; lastKnownFileType = image.png; name = "background_tile.png"; path = "../../Source/BinaryData/background_tile.png"; sourceTree = "SOURCE_ROOT"; }; | |||
313BC56B30B05119686B1E99 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "projucer_ProjectBuildInfo.h"; path = "../../Source/LiveBuildEngine/projucer_ProjectBuildInfo.h"; sourceTree = "SOURCE_ROOT"; }; | |||
32C81E19D3D68B9DDF870FE9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectTab.h"; path = "../../Source/Project/jucer_ProjectTab.h"; sourceTree = "SOURCE_ROOT"; }; | |||
3514E78B58A08F4C98F54C5A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComponentLayoutPanel.h"; path = "../../Source/ComponentEditor/ui/jucer_ComponentLayoutPanel.h"; sourceTree = "SOURCE_ROOT"; }; | |||
353E622BE257074B5589199D = {isa = PBXFileReference; lastKnownFileType = image.png; name = projectIconCodeblocks.png; path = ../../Source/BinaryData/projectIconCodeblocks.png; sourceTree = "SOURCE_ROOT"; }; | |||
358DA8CCDC8FA5B0D62D6CA3 = {isa = PBXFileReference; lastKnownFileType = file.svg; name = "wizard_Openfile.svg"; path = "../../Source/BinaryData/wizard_Openfile.svg"; sourceTree = "SOURCE_ROOT"; }; | |||
35A36102EAD2D2620EE99E7E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_FilePathPropertyComponent.h"; path = "../../Source/Utility/jucer_FilePathPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
35CB48D497F35BF3F6998F5D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectExporter.h"; path = "../../Source/Project Saving/jucer_ProjectExporter.h"; sourceTree = "SOURCE_ROOT"; }; | |||
@@ -150,7 +151,6 @@ | |||
3C95FA2AA91EBA19ADDD5C29 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectWizard_Animated.h"; path = "../../Source/Wizards/jucer_ProjectWizard_Animated.h"; sourceTree = "SOURCE_ROOT"; }; | |||
3E03B7C7A19E63A724EB79F4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ButtonDocument.cpp"; path = "../../Source/ComponentEditor/documents/jucer_ButtonDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
3F00C034B140193B3754969B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ImageResourceProperty.h"; path = "../../Source/ComponentEditor/paintelements/jucer_ImageResourceProperty.h"; sourceTree = "SOURCE_ROOT"; }; | |||
3F4EEDF4AA7C37DC6A1B14B5 = {isa = PBXFileReference; lastKnownFileType = image.png; name = projectIconXcode.png; path = ../../Source/BinaryData/projectIconXcode.png; sourceTree = "SOURCE_ROOT"; }; | |||
3F9D4C7F6E5779D4E4AE655D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComponentLayout.h"; path = "../../Source/ComponentEditor/jucer_ComponentLayout.h"; sourceTree = "SOURCE_ROOT"; }; | |||
400E4C67ABCDDB1D49EBB85E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_TabbedComponentHandler.h"; path = "../../Source/ComponentEditor/components/jucer_TabbedComponentHandler.h"; sourceTree = "SOURCE_ROOT"; }; | |||
4073A12E196BDDADE211E19F = {isa = PBXFileReference; lastKnownFileType = text.txt; name = "projucer_EULA.txt"; path = "../../Source/BinaryData/projucer_EULA.txt"; sourceTree = "SOURCE_ROOT"; }; | |||
@@ -160,6 +160,7 @@ | |||
43C068B8D98821C09492AB29 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "projucer_ActivityListComponent.h"; path = "../../Source/LiveBuildEngine/projucer_ActivityListComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
441CFEA771BAA50E187342E9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_AppearanceSettings.cpp"; path = "../../Source/Application/jucer_AppearanceSettings.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
468BFFBE4DA7835DD40C5FE8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_AnimatedComponentTemplate.cpp"; path = "../../Source/BinaryData/jucer_AnimatedComponentTemplate.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
46CDD8C3C86FD61741B88A69 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_LiveBuildTab.h"; path = "../../Source/Project/jucer_LiveBuildTab.h"; sourceTree = "SOURCE_ROOT"; }; | |||
471C7B0A8B92320AF0C80839 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectWizard_StaticLibrary.h"; path = "../../Source/Wizards/jucer_ProjectWizard_StaticLibrary.h"; sourceTree = "SOURCE_ROOT"; }; | |||
472F9A90F685220D730EBF6C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = BinaryData.cpp; path = ../../JuceLibraryCode/BinaryData.cpp; sourceTree = "SOURCE_ROOT"; }; | |||
47B49049B85EED74D29C9906 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectTree_File.h"; path = "../../Source/Project/jucer_ProjectTree_File.h"; sourceTree = "SOURCE_ROOT"; }; | |||
@@ -178,11 +179,13 @@ | |||
50498FF6EA3901CBD58223B3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ObjectTypes.h"; path = "../../Source/ComponentEditor/jucer_ObjectTypes.h"; sourceTree = "SOURCE_ROOT"; }; | |||
5091B14CC87C6238CF044258 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ElementSiblingComponent.h"; path = "../../Source/ComponentEditor/paintelements/jucer_ElementSiblingComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
515FF6E74826E3E3F7273621 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_Icons.h"; path = "../../Source/Utility/jucer_Icons.h"; sourceTree = "SOURCE_ROOT"; }; | |||
51CBE59779A36D1B80B26974 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_LicenseController.cpp"; path = "../../Source/Licenses/jucer_LicenseController.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
53151B683E11F420203E61C2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_NewCppFileTemplate.h"; path = "../../Source/BinaryData/jucer_NewCppFileTemplate.h"; sourceTree = "SOURCE_ROOT"; }; | |||
5432B7B9B2CF2EAEC8B66D5C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_UtilityFunctions.h"; path = "../../Source/ComponentEditor/jucer_UtilityFunctions.h"; sourceTree = "SOURCE_ROOT"; }; | |||
546593F6EA70EABF708772FE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_TranslationToolComponent.h"; path = "../../Source/Utility/jucer_TranslationToolComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
553725A0E3A391651ED1731E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_FileHelpers.h"; path = "../../Source/Utility/jucer_FileHelpers.h"; sourceTree = "SOURCE_ROOT"; }; | |||
563091B0916AD9AAA36C7DC5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_OpenDocumentManager.h"; path = "../../Source/Application/jucer_OpenDocumentManager.h"; sourceTree = "SOURCE_ROOT"; }; | |||
56C3CA379E90628CCB5BC37C = {isa = PBXFileReference; lastKnownFileType = file.svg; name = "export_visualStudio.svg"; path = "../../Source/BinaryData/export_visualStudio.svg"; sourceTree = "SOURCE_ROOT"; }; | |||
576A92E1E0D8F453EC0FEB34 = {isa = PBXFileReference; lastKnownFileType = file.bat; name = gradlew.bat; path = ../../Source/BinaryData/gradle/gradlew.bat; sourceTree = "SOURCE_ROOT"; }; | |||
576D62C0C9C1BA4B7A514721 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PositionPropertyBase.h"; path = "../../Source/ComponentEditor/properties/jucer_PositionPropertyBase.h"; sourceTree = "SOURCE_ROOT"; }; | |||
58139D8D454051C59E77609B = {isa = PBXFileReference; lastKnownFileType = file.nib; name = RecentFilesMenuTemplate.nib; path = ../../Source/BinaryData/RecentFilesMenuTemplate.nib; sourceTree = "SOURCE_ROOT"; }; | |||
@@ -191,6 +194,7 @@ | |||
5A75806B34E4EA6598A6024A = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; | |||
5C7636E577B8DBB1D3133022 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "projucer_ActivityList.h"; path = "../../Source/LiveBuildEngine/projucer_ActivityList.h"; sourceTree = "SOURCE_ROOT"; }; | |||
5D9E7814B713670624F0028F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComponentTypeHandler.h"; path = "../../Source/ComponentEditor/components/jucer_ComponentTypeHandler.h"; sourceTree = "SOURCE_ROOT"; }; | |||
5F1C141139AA646EABD72145 = {isa = PBXFileReference; lastKnownFileType = file.svg; name = "juce-logo-with-text.svg"; path = "../../Source/BinaryData/juce-logo-with-text.svg"; sourceTree = "SOURCE_ROOT"; }; | |||
5F6584B675E30761521A9F42 = {isa = PBXFileReference; lastKnownFileType = file.xml; name = "colourscheme_light.xml"; path = "../../Source/BinaryData/colourscheme_light.xml"; sourceTree = "SOURCE_ROOT"; }; | |||
61BE37E2B26C25056D9E8FE2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_NewComponentTemplate.cpp"; path = "../../Source/BinaryData/jucer_NewComponentTemplate.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
631983AA62673015F8D7453B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_StoredSettings.cpp"; path = "../../Source/Utility/jucer_StoredSettings.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
@@ -201,10 +205,11 @@ | |||
662C76394C5D1B56766FAFD9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ComponentDocument.cpp"; path = "../../Source/ComponentEditor/documents/jucer_ComponentDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
6678E9B3EEACAD47F438B264 = {isa = PBXFileReference; lastKnownFileType = file.nib; name = RecentFilesMenuTemplate.nib; path = RecentFilesMenuTemplate.nib; sourceTree = "SOURCE_ROOT"; }; | |||
66B49F08C5EC3E4974825FF8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PaintRoutine.h"; path = "../../Source/ComponentEditor/jucer_PaintRoutine.h"; sourceTree = "SOURCE_ROOT"; }; | |||
66DEA1923FE5B9A614C7E9DC = {isa = PBXFileReference; lastKnownFileType = file.svg; name = "huckleberry_icon.svg"; path = "../../Source/BinaryData/huckleberry_icon.svg"; sourceTree = "SOURCE_ROOT"; }; | |||
69555CEFC6ED613AA3949298 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_data_structures"; path = "../../../../modules/juce_data_structures"; sourceTree = "SOURCE_ROOT"; }; | |||
6A337C69A928E3CE79C55457 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComponentChoiceProperty.h"; path = "../../Source/ComponentEditor/properties/jucer_ComponentChoiceProperty.h"; sourceTree = "SOURCE_ROOT"; }; | |||
6AC88EFC247C225CC5C11A43 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_BinaryResources.h"; path = "../../Source/ComponentEditor/jucer_BinaryResources.h"; sourceTree = "SOURCE_ROOT"; }; | |||
6AEF2E6130619AE550A5FCA7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_EulaDialogue.h"; path = "../../Source/Application/jucer_EulaDialogue.h"; sourceTree = "SOURCE_ROOT"; }; | |||
6DA8A2AEF943230FF7DB510B = {isa = PBXFileReference; lastKnownFileType = file.svg; name = "export_linux.svg"; path = "../../Source/BinaryData/export_linux.svg"; sourceTree = "SOURCE_ROOT"; }; | |||
6E6140969908E7619F858740 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_CommonHeaders.h"; path = "../../Source/Application/jucer_CommonHeaders.h"; sourceTree = "SOURCE_ROOT"; }; | |||
6E7353DFEA8825B515049ABB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectExport_Android.h"; path = "../../Source/Project Saving/jucer_ProjectExport_Android.h"; sourceTree = "SOURCE_ROOT"; }; | |||
714267352CE5C4357ADBC231 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_StartPageComponent.h"; path = "../../Source/Wizards/jucer_StartPageComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
@@ -215,6 +220,7 @@ | |||
786BAF436828865F45314440 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PaintElement.h"; path = "../../Source/ComponentEditor/paintelements/jucer_PaintElement.h"; sourceTree = "SOURCE_ROOT"; }; | |||
78CA0E0F336229E2E2F111B0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_SourceCodeEditor.h"; path = "../../Source/Code Editor/jucer_SourceCodeEditor.h"; sourceTree = "SOURCE_ROOT"; }; | |||
78D0DBC4798FF040FDB90F6D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_GeneratedCode.cpp"; path = "../../Source/ComponentEditor/jucer_GeneratedCode.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
790F6302B9A0620F23F8A6C1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_LicenseThread.h"; path = "../../Source/Licenses/jucer_LicenseThread.h"; sourceTree = "SOURCE_ROOT"; }; | |||
79E58813D1B414AF49DD9598 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_LiveBuildCodeEditor.h"; path = "../../Source/Code Editor/jucer_LiveBuildCodeEditor.h"; sourceTree = "SOURCE_ROOT"; }; | |||
7A3E96D22F1C9EB4C739834F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PointComponent.h"; path = "../../Source/ComponentEditor/paintelements/jucer_PointComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
7A7158A25E07A54D6AA6EBAB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_gui_extra.mm"; path = "../../JuceLibraryCode/juce_gui_extra.mm"; sourceTree = "SOURCE_ROOT"; }; | |||
@@ -235,10 +241,11 @@ | |||
8702F43110E4CCA5E5F827F5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppConfig.h; path = ../../JuceLibraryCode/AppConfig.h; sourceTree = "SOURCE_ROOT"; }; | |||
87414819D9DE343EA28E0AAD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ProjucerLookAndFeel.cpp"; path = "../../Source/Utility/jucer_ProjucerLookAndFeel.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
8A825FDDC00DD253F44D2C3A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectWizard_AudioApp.h"; path = "../../Source/Wizards/jucer_ProjectWizard_AudioApp.h"; sourceTree = "SOURCE_ROOT"; }; | |||
8BBD620A595D883BE34D60D6 = {isa = PBXFileReference; lastKnownFileType = image.png; name = projectIconLinuxMakefile.png; path = ../../Source/BinaryData/projectIconLinuxMakefile.png; sourceTree = "SOURCE_ROOT"; }; | |||
8BD8E9DA627D6EF9BA10FB9E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_NewProjectWizardComponent.h"; path = "../../Source/Wizards/jucer_NewProjectWizardComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
8C281F2F8EA3AD614ADF7955 = {isa = PBXFileReference; lastKnownFileType = text.html; name = offlinepage.html; path = ../../Source/BinaryData/offlinepage.html; sourceTree = "SOURCE_ROOT"; }; | |||
8C52A3DDA62A746AA7A68535 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_Main.cpp"; path = "../../Source/Application/jucer_Main.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
8C67B567CF362A163D24B3B1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_TranslationHelpers.h"; path = "../../Source/Utility/jucer_TranslationHelpers.h"; sourceTree = "SOURCE_ROOT"; }; | |||
8DBD2FBBC7B523D1F8AF1E54 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_HeaderComponent.h"; path = "../../Source/Project/jucer_HeaderComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
8F30A53C7FE4BC65171FB3E2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_JucerDocument.h"; path = "../../Source/ComponentEditor/jucer_JucerDocument.h"; sourceTree = "SOURCE_ROOT"; }; | |||
8F7BE18698ADCEF51CDE4A5C = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; }; | |||
8F8BF1A7130D858E0A239F9E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ConfigTree_Base.h"; path = "../../Source/Project/jucer_ConfigTree_Base.h"; sourceTree = "SOURCE_ROOT"; }; | |||
@@ -253,6 +260,7 @@ | |||
9683B04CA3BD7F73E8236FE2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ContentCompTemplate.cpp"; path = "../../Source/BinaryData/jucer_ContentCompTemplate.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
974B862C51DA9A16CBBB3A29 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectExport_XCode.h"; path = "../../Source/Project Saving/jucer_ProjectExport_XCode.h"; sourceTree = "SOURCE_ROOT"; }; | |||
97E75A598791645465FEDCE1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_EditingPanelBase.h"; path = "../../Source/ComponentEditor/ui/jucer_EditingPanelBase.h"; sourceTree = "SOURCE_ROOT"; }; | |||
98E6D61BFF7D85F0E00F0FBF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_LicenseWebview.h"; path = "../../Source/Licenses/jucer_LicenseWebview.h"; sourceTree = "SOURCE_ROOT"; }; | |||
98F42686D9DAC974F2514217 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_EditingPanelBase.cpp"; path = "../../Source/ComponentEditor/ui/jucer_EditingPanelBase.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
996E472B82A75531875A5E38 = {isa = PBXFileReference; lastKnownFileType = file; name = LICENSE; path = ../../Source/BinaryData/gradle/LICENSE; sourceTree = "SOURCE_ROOT"; }; | |||
9992E6950C64322A11E39ADF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectWizard_DLL.h"; path = "../../Source/Wizards/jucer_ProjectWizard_DLL.h"; sourceTree = "SOURCE_ROOT"; }; | |||
@@ -271,10 +279,10 @@ | |||
A085174413736ACC8D7D42A2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectWizard_openGL.h"; path = "../../Source/Wizards/jucer_ProjectWizard_openGL.h"; sourceTree = "SOURCE_ROOT"; }; | |||
A0951828C3BF47FA7E1E52F8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ViewportHandler.h"; path = "../../Source/ComponentEditor/components/jucer_ViewportHandler.h"; sourceTree = "SOURCE_ROOT"; }; | |||
A1333F975410DD3DBBE2841F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "projucer_CompileEngineClient.cpp"; path = "../../Source/LiveBuildEngine/projucer_CompileEngineClient.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
A32FE0EBE29FABE58E664E67 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_AboutWindowComponent.h"; path = "../../Source/Utility/jucer_AboutWindowComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
A44A774EFC020D3D046A9249 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectWizard_Console.h"; path = "../../Source/Wizards/jucer_ProjectWizard_Console.h"; sourceTree = "SOURCE_ROOT"; }; | |||
A4D275622A4B115AABE190A4 = {isa = PBXFileReference; lastKnownFileType = file.svg; name = "wizard_OpenGL.svg"; path = "../../Source/BinaryData/wizard_OpenGL.svg"; sourceTree = "SOURCE_ROOT"; }; | |||
A69024A225F2AC31F17B1314 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_NewFileWizard.cpp"; path = "../../Source/Wizards/jucer_NewFileWizard.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
A73878536863FB25753A98E7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjucerLicenses.h"; path = "../../Source/Application/jucer_ProjucerLicenses.h"; sourceTree = "SOURCE_ROOT"; }; | |||
A973D33C0CE829AD293E035B = {isa = PBXFileReference; lastKnownFileType = file.svg; name = "projucer_login_bg.svg"; path = "../../Source/BinaryData/projucer_login_bg.svg"; sourceTree = "SOURCE_ROOT"; }; | |||
AA1C44E89D792DDC4867B2C8 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_cryptography"; path = "../../../../modules/juce_cryptography"; sourceTree = "SOURCE_ROOT"; }; | |||
AA8EED79F095953D2B5923B8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComponentColourProperty.h"; path = "../../Source/ComponentEditor/properties/jucer_ComponentColourProperty.h"; sourceTree = "SOURCE_ROOT"; }; | |||
@@ -287,14 +295,17 @@ | |||
B0D2198D1261755918CD454D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_SVGPathDataComponent.h"; path = "../../Source/Utility/jucer_SVGPathDataComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
B15E33E7342F6EB4F95C9B1D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_PaintRoutineEditor.cpp"; path = "../../Source/ComponentEditor/ui/jucer_PaintRoutineEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
B1963F0D8C0046E54FD9E023 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ColouredElement.h"; path = "../../Source/ComponentEditor/paintelements/jucer_ColouredElement.h"; sourceTree = "SOURCE_ROOT"; }; | |||
B3FA8ADA3F66D5EE0C0E5CBE = {isa = PBXFileReference; lastKnownFileType = file.svg; name = "export_xcode.svg"; path = "../../Source/BinaryData/export_xcode.svg"; sourceTree = "SOURCE_ROOT"; }; | |||
B483D960309FAFC193F9CDA2 = {isa = PBXFileReference; lastKnownFileType = image.png; name = "juce_icon.png"; path = "../../Source/BinaryData/juce_icon.png"; sourceTree = "SOURCE_ROOT"; }; | |||
B5CB69026BC4E8F439355CDC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "projucer_SourceCodeRange.h"; path = "../../Source/LiveBuildEngine/projucer_SourceCodeRange.h"; sourceTree = "SOURCE_ROOT"; }; | |||
B6F2905330EA5C560D527209 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_graphics"; path = "../../../../modules/juce_graphics"; sourceTree = "SOURCE_ROOT"; }; | |||
B7307A82D9EB1EDBA91EE43D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_DownloadCompileEngineThread.h"; path = "../../Source/Application/jucer_DownloadCompileEngineThread.h"; sourceTree = "SOURCE_ROOT"; }; | |||
B73B25AD624B88B29EA0589C = {isa = PBXFileReference; lastKnownFileType = file.svg; name = "export_codeBlocks.svg"; path = "../../Source/BinaryData/export_codeBlocks.svg"; sourceTree = "SOURCE_ROOT"; }; | |||
B741170E45D74F30B7D5CDDF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComponentNameProperty.h"; path = "../../Source/ComponentEditor/components/jucer_ComponentNameProperty.h"; sourceTree = "SOURCE_ROOT"; }; | |||
B8385E9A644BD3CD94876448 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectType.h"; path = "../../Source/Project/jucer_ProjectType.h"; sourceTree = "SOURCE_ROOT"; }; | |||
BA159A3B7D129771F5C15EA3 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_core"; path = "../../../../modules/juce_core"; sourceTree = "SOURCE_ROOT"; }; | |||
BAC43B20E14A340CCF14119C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_Project.cpp"; path = "../../Source/Project/jucer_Project.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
BB187CD608EB6368B29EC335 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_LicenseController.h"; path = "../../Source/Licenses/jucer_LicenseController.h"; sourceTree = "SOURCE_ROOT"; }; | |||
BB9C1E6E54A16F795908C469 = {isa = PBXFileReference; lastKnownFileType = file.svg; name = "background_logo.svg"; path = "../../Source/BinaryData/background_logo.svg"; sourceTree = "SOURCE_ROOT"; }; | |||
BCB819DDDD2AC13632CA502F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjucerLookAndFeel.h"; path = "../../Source/Utility/jucer_ProjucerLookAndFeel.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"; }; | |||
@@ -346,9 +357,7 @@ | |||
E4BD4C43370651B49F75855B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_MainTemplate_SimpleWindow.cpp"; path = "../../Source/BinaryData/jucer_MainTemplate_SimpleWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
E5D6C36496F5BC84D7213BE8 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; | |||
E60E28D1B7491047DEA236AE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectContentComponent.h"; path = "../../Source/Project/jucer_ProjectContentComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
E63F54CF8D5D922A319C6962 = {isa = PBXFileReference; lastKnownFileType = image.png; name = projectIconXcodeIOS.png; path = ../../Source/BinaryData/projectIconXcodeIOS.png; sourceTree = "SOURCE_ROOT"; }; | |||
E65A820D34BF39478B7C5925 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_DocumentEditorComponent.h"; path = "../../Source/Application/jucer_DocumentEditorComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
E80E921407164C1E664A88F4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_LoginForm.h"; path = "../../Source/Application/jucer_LoginForm.h"; sourceTree = "SOURCE_ROOT"; }; | |||
E96597BBC6A98255B51B94DC = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; }; | |||
E983E6DDE3318B872EBE347F = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudioKit.framework; path = System/Library/Frameworks/CoreAudioKit.framework; sourceTree = SDKROOT; }; | |||
EB71BA07D6F667E69721E577 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_GradientPointComponent.h"; path = "../../Source/ComponentEditor/paintelements/jucer_GradientPointComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
@@ -358,7 +367,6 @@ | |||
F03E2BDD36E6F4F53AB767A8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_Headers.h"; path = "../../Source/jucer_Headers.h"; sourceTree = "SOURCE_ROOT"; }; | |||
F18AE75F1831D13FF53A8CCC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PaintElementRectangle.h"; path = "../../Source/ComponentEditor/paintelements/jucer_PaintElementRectangle.h"; sourceTree = "SOURCE_ROOT"; }; | |||
F4B63624DBF543082235F821 = {isa = PBXFileReference; lastKnownFileType = file.svg; name = "wizard_GUI.svg"; path = "../../Source/BinaryData/wizard_GUI.svg"; sourceTree = "SOURCE_ROOT"; }; | |||
F4B6EB1967E9E1D9AAA683B0 = {isa = PBXFileReference; lastKnownFileType = image.png; name = projectIconVisualStudio.png; path = ../../Source/BinaryData/projectIconVisualStudio.png; sourceTree = "SOURCE_ROOT"; }; | |||
F5885B5AAF46864D562D5B83 = {isa = PBXFileReference; lastKnownFileType = file.svg; name = "wizard_AudioPlugin.svg"; path = "../../Source/BinaryData/wizard_AudioPlugin.svg"; sourceTree = "SOURCE_ROOT"; }; | |||
F59077841FC17DD07060A2A9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_TextEditorHandler.h"; path = "../../Source/ComponentEditor/components/jucer_TextEditorHandler.h"; sourceTree = "SOURCE_ROOT"; }; | |||
F6D3F208B6EE2A50CE1F0A18 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_JucerCommandIDs.h"; path = "../../Source/ComponentEditor/ui/jucer_JucerCommandIDs.h"; sourceTree = "SOURCE_ROOT"; }; | |||
@@ -387,18 +395,20 @@ | |||
E65A820D34BF39478B7C5925, | |||
11EB44786085029106099D01, | |||
B7307A82D9EB1EDBA91EE43D, | |||
6AEF2E6130619AE550A5FCA7, | |||
D526C38D581425949BA0E4AC, | |||
84DE44680C9D37CDDCD127FF, | |||
1C81C5501BE7F2C912250711, | |||
F03E2BDD36E6F4F53AB767A8, | |||
E80E921407164C1E664A88F4, | |||
8C52A3DDA62A746AA7A68535, | |||
9069981E414A631B036CC9AC, | |||
2CD34A70B4032C0426F7AA10, | |||
2247EE920DF0610CAF9F4513, | |||
563091B0916AD9AAA36C7DC5, | |||
A73878536863FB25753A98E7, ); name = Application; sourceTree = "<group>"; }; | |||
563091B0916AD9AAA36C7DC5, ); name = Application; sourceTree = "<group>"; }; | |||
DD016058D39CAFA2C86BAF40 = {isa = PBXGroup; children = ( | |||
51CBE59779A36D1B80B26974, | |||
BB187CD608EB6368B29EC335, | |||
790F6302B9A0620F23F8A6C1, | |||
98E6D61BFF7D85F0E00F0FBF, ); name = Licenses; sourceTree = "<group>"; }; | |||
82B98DB2654A087911E8157F = {isa = PBXGroup; children = ( | |||
5C7636E577B8DBB1D3133022, | |||
43C068B8D98821C09492AB29, | |||
@@ -525,6 +535,8 @@ | |||
DCBB17488227A2CA7D3D3947, | |||
0C2AD2FC0C196F440C3FF994, | |||
C7B47372A9D5970E3D9A5400, | |||
8DBD2FBBC7B523D1F8AF1E54, | |||
46CDD8C3C86FD61741B88A69, | |||
F797071D88542C813CF7222A, | |||
7211101FFA28400ADBB1D47A, | |||
AFEBD8423B07599B1DE175A3, | |||
@@ -532,6 +544,7 @@ | |||
BF3CEF080FA013E2778DCE90, | |||
86E468DE6556BB2AD76A3D80, | |||
E60E28D1B7491047DEA236AE, | |||
32C81E19D3D68B9DDF870FE9, | |||
375AFDF06A908D89DEC5205F, | |||
47B49049B85EED74D29C9906, | |||
4F6365A0D2D51337151D85C3, | |||
@@ -550,6 +563,7 @@ | |||
D10D51A0A2D63F38B4D86A60, | |||
C9616830BB2474066AC8C910, ); name = "Project Saving"; sourceTree = "<group>"; }; | |||
6580E53C420AA794542CC8D7 = {isa = PBXGroup; children = ( | |||
A32FE0EBE29FABE58E664E67, | |||
9B9CAD20E1243B4351B4C8D8, | |||
914ADDB50ED7365F08BA91F9, | |||
DF78EF6242D82F912534A277, | |||
@@ -630,13 +644,15 @@ | |||
301592EBAC0FFF6F5B268E99, | |||
41105E536155E394E54BDD35, | |||
5F6584B675E30761521A9F42, | |||
1C73D7591E63E8018E279716, | |||
B73B25AD624B88B29EA0589C, | |||
6DA8A2AEF943230FF7DB510B, | |||
56C3CA379E90628CCB5BC37C, | |||
B3FA8ADA3F66D5EE0C0E5CBE, | |||
66DEA1923FE5B9A614C7E9DC, | |||
5F1C141139AA646EABD72145, | |||
B483D960309FAFC193F9CDA2, | |||
1A8E24245E48C7C4DB0164E6, | |||
353E622BE257074B5589199D, | |||
8BBD620A595D883BE34D60D6, | |||
F4B6EB1967E9E1D9AAA683B0, | |||
3F4EEDF4AA7C37DC6A1B14B5, | |||
E63F54CF8D5D922A319C6962, | |||
8C281F2F8EA3AD614ADF7955, | |||
4073A12E196BDDADE211E19F, | |||
A973D33C0CE829AD293E035B, | |||
58139D8D454051C59E77609B, | |||
@@ -652,6 +668,7 @@ | |||
0DB0A9E30EEDDEA720BC5A03, ); name = BinaryData; sourceTree = "<group>"; }; | |||
D3109994DA6AD871BE85C4E2 = {isa = PBXGroup; children = ( | |||
48618F36B2E3C15A7B0F63AC, | |||
DD016058D39CAFA2C86BAF40, | |||
82B98DB2654A087911E8157F, | |||
142DEF17A4C953926833D7F8, | |||
78FDC751FE3D97F79839DBC6, | |||
@@ -824,6 +841,7 @@ | |||
95B44E6C74B1DED31DBE37EB, | |||
AA9D0B8E23F3D87A23DE9F8A, | |||
244BA1BDA5FAA465EA3F9C6D, | |||
6FD0752A5CADCF60D79FDBB7, | |||
85B5E65F8DD80938BFBDCE61, | |||
D805169E01D7F90B01C11769, | |||
FCE6F604C00039A32649CB69, | |||
@@ -21,18 +21,23 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Application", "Application" | |||
..\..\Source\Application\jucer_DocumentEditorComponent.h = ..\..\Source\Application\jucer_DocumentEditorComponent.h | |||
..\..\Source\Application\jucer_DownloadCompileEngineThread.cpp = ..\..\Source\Application\jucer_DownloadCompileEngineThread.cpp | |||
..\..\Source\Application\jucer_DownloadCompileEngineThread.h = ..\..\Source\Application\jucer_DownloadCompileEngineThread.h | |||
..\..\Source\Application\jucer_EulaDialogue.h = ..\..\Source\Application\jucer_EulaDialogue.h | |||
..\..\Source\Application\jucer_FilePreviewComponent.h = ..\..\Source\Application\jucer_FilePreviewComponent.h | |||
..\..\Source\Application\jucer_GlobalPreferences.cpp = ..\..\Source\Application\jucer_GlobalPreferences.cpp | |||
..\..\Source\Application\jucer_GlobalPreferences.h = ..\..\Source\Application\jucer_GlobalPreferences.h | |||
..\..\Source\jucer_Headers.h = ..\..\Source\jucer_Headers.h | |||
..\..\Source\Application\jucer_LoginForm.h = ..\..\Source\Application\jucer_LoginForm.h | |||
..\..\Source\Application\jucer_Main.cpp = ..\..\Source\Application\jucer_Main.cpp | |||
..\..\Source\Application\jucer_MainWindow.cpp = ..\..\Source\Application\jucer_MainWindow.cpp | |||
..\..\Source\Application\jucer_MainWindow.h = ..\..\Source\Application\jucer_MainWindow.h | |||
..\..\Source\Application\jucer_OpenDocumentManager.cpp = ..\..\Source\Application\jucer_OpenDocumentManager.cpp | |||
..\..\Source\Application\jucer_OpenDocumentManager.h = ..\..\Source\Application\jucer_OpenDocumentManager.h | |||
..\..\Source\Application\jucer_ProjucerLicenses.h = ..\..\Source\Application\jucer_ProjucerLicenses.h | |||
EndProjectSection | |||
EndProject | |||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Licenses", "Licenses", "{4E60B2C4-39B6-816D-3086-B7B7D0429F8B}" | |||
ProjectSection(SolutionItems) = preProject | |||
..\..\Source\Licenses\jucer_LicenseController.cpp = ..\..\Source\Licenses\jucer_LicenseController.cpp | |||
..\..\Source\Licenses\jucer_LicenseController.h = ..\..\Source\Licenses\jucer_LicenseController.h | |||
..\..\Source\Licenses\jucer_LicenseThread.h = ..\..\Source\Licenses\jucer_LicenseThread.h | |||
..\..\Source\Licenses\jucer_LicenseWebview.h = ..\..\Source\Licenses\jucer_LicenseWebview.h | |||
EndProjectSection | |||
EndProject | |||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "LiveBuildEngine", "LiveBuildEngine", "{EBA3ED3D-C402-E9A8-36C3-CA4001D9E324}" | |||
@@ -181,6 +186,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Project", "Project", "{BA1A | |||
..\..\Source\Project\jucer_DependencyPathPropertyComponent.cpp = ..\..\Source\Project\jucer_DependencyPathPropertyComponent.cpp | |||
..\..\Source\Project\jucer_DependencyPathPropertyComponent.h = ..\..\Source\Project\jucer_DependencyPathPropertyComponent.h | |||
..\..\Source\Project\jucer_GroupInformationComponent.h = ..\..\Source\Project\jucer_GroupInformationComponent.h | |||
..\..\Source\Project\jucer_HeaderComponent.h = ..\..\Source\Project\jucer_HeaderComponent.h | |||
..\..\Source\Project\jucer_LiveBuildTab.h = ..\..\Source\Project\jucer_LiveBuildTab.h | |||
..\..\Source\Project\jucer_Module.cpp = ..\..\Source\Project\jucer_Module.cpp | |||
..\..\Source\Project\jucer_Module.h = ..\..\Source\Project\jucer_Module.h | |||
..\..\Source\Project\jucer_ModulesPanel.h = ..\..\Source\Project\jucer_ModulesPanel.h | |||
@@ -188,6 +195,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Project", "Project", "{BA1A | |||
..\..\Source\Project\jucer_Project.h = ..\..\Source\Project\jucer_Project.h | |||
..\..\Source\Project\jucer_ProjectContentComponent.cpp = ..\..\Source\Project\jucer_ProjectContentComponent.cpp | |||
..\..\Source\Project\jucer_ProjectContentComponent.h = ..\..\Source\Project\jucer_ProjectContentComponent.h | |||
..\..\Source\Project\jucer_ProjectTab.h = ..\..\Source\Project\jucer_ProjectTab.h | |||
..\..\Source\Project\jucer_ProjectTree_Base.h = ..\..\Source\Project\jucer_ProjectTree_Base.h | |||
..\..\Source\Project\jucer_ProjectTree_File.h = ..\..\Source\Project\jucer_ProjectTree_File.h | |||
..\..\Source\Project\jucer_ProjectTree_Group.h = ..\..\Source\Project\jucer_ProjectTree_Group.h | |||
@@ -212,6 +220,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Project Saving", "Project S | |||
EndProject | |||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Utility", "Utility", "{5B44064B-7712-DA97-5DC7-473A1921D600}" | |||
ProjectSection(SolutionItems) = preProject | |||
..\..\Source\Utility\jucer_AboutWindowComponent.h = ..\..\Source\Utility\jucer_AboutWindowComponent.h | |||
..\..\Source\Utility\jucer_CodeHelpers.cpp = ..\..\Source\Utility\jucer_CodeHelpers.cpp | |||
..\..\Source\Utility\jucer_CodeHelpers.h = ..\..\Source\Utility\jucer_CodeHelpers.h | |||
..\..\Source\Utility\jucer_ColourPropertyComponent.h = ..\..\Source\Utility\jucer_ColourPropertyComponent.h | |||
@@ -269,13 +278,15 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "BinaryData", "BinaryData", | |||
..\..\Source\BinaryData\background_tile.png = ..\..\Source\BinaryData\background_tile.png | |||
..\..\Source\BinaryData\colourscheme_dark.xml = ..\..\Source\BinaryData\colourscheme_dark.xml | |||
..\..\Source\BinaryData\colourscheme_light.xml = ..\..\Source\BinaryData\colourscheme_light.xml | |||
..\..\Source\BinaryData\export_android.svg = ..\..\Source\BinaryData\export_android.svg | |||
..\..\Source\BinaryData\export_codeBlocks.svg = ..\..\Source\BinaryData\export_codeBlocks.svg | |||
..\..\Source\BinaryData\export_linux.svg = ..\..\Source\BinaryData\export_linux.svg | |||
..\..\Source\BinaryData\export_visualStudio.svg = ..\..\Source\BinaryData\export_visualStudio.svg | |||
..\..\Source\BinaryData\export_xcode.svg = ..\..\Source\BinaryData\export_xcode.svg | |||
..\..\Source\BinaryData\huckleberry_icon.svg = ..\..\Source\BinaryData\huckleberry_icon.svg | |||
..\..\Source\BinaryData\juce-logo-with-text.svg = ..\..\Source\BinaryData\juce-logo-with-text.svg | |||
..\..\Source\BinaryData\juce_icon.png = ..\..\Source\BinaryData\juce_icon.png | |||
..\..\Source\BinaryData\projectIconAndroid.png = ..\..\Source\BinaryData\projectIconAndroid.png | |||
..\..\Source\BinaryData\projectIconCodeblocks.png = ..\..\Source\BinaryData\projectIconCodeblocks.png | |||
..\..\Source\BinaryData\projectIconLinuxMakefile.png = ..\..\Source\BinaryData\projectIconLinuxMakefile.png | |||
..\..\Source\BinaryData\projectIconVisualStudio.png = ..\..\Source\BinaryData\projectIconVisualStudio.png | |||
..\..\Source\BinaryData\projectIconXcode.png = ..\..\Source\BinaryData\projectIconXcode.png | |||
..\..\Source\BinaryData\projectIconXcodeIOS.png = ..\..\Source\BinaryData\projectIconXcodeIOS.png | |||
..\..\Source\BinaryData\offlinepage.html = ..\..\Source\BinaryData\offlinepage.html | |||
..\..\Source\BinaryData\projucer_EULA.txt = ..\..\Source\BinaryData\projucer_EULA.txt | |||
..\..\Source\BinaryData\projucer_login_bg.svg = ..\..\Source\BinaryData\projucer_login_bg.svg | |||
..\..\Source\BinaryData\RecentFilesMenuTemplate.nib = ..\..\Source\BinaryData\RecentFilesMenuTemplate.nib | |||
@@ -1153,6 +1164,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "lookandfeel", "lookandfeel" | |||
..\..\..\..\modules\juce_gui_basics\lookandfeel\juce_LookAndFeel_V2.h = ..\..\..\..\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.cpp | |||
..\..\..\..\modules\juce_gui_basics\lookandfeel\juce_LookAndFeel_V3.h = ..\..\..\..\modules\juce_gui_basics\lookandfeel\juce_LookAndFeel_V3.h | |||
..\..\..\..\modules\juce_gui_basics\lookandfeel\juce_LookAndFeel_V4.cpp = ..\..\..\..\modules\juce_gui_basics\lookandfeel\juce_LookAndFeel_V4.cpp | |||
..\..\..\..\modules\juce_gui_basics\lookandfeel\juce_LookAndFeel_V4.h = ..\..\..\..\modules\juce_gui_basics\lookandfeel\juce_LookAndFeel_V4.h | |||
EndProjectSection | |||
EndProject | |||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "menus", "menus", "{806CB070-E860-0A3A-CDA1-F6AEA5A961F1}" | |||
@@ -1171,6 +1184,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "misc", "misc", "{55DD5543-1 | |||
..\..\..\..\modules\juce_gui_basics\misc\juce_BubbleComponent.h = ..\..\..\..\modules\juce_gui_basics\misc\juce_BubbleComponent.h | |||
..\..\..\..\modules\juce_gui_basics\misc\juce_DropShadower.cpp = ..\..\..\..\modules\juce_gui_basics\misc\juce_DropShadower.cpp | |||
..\..\..\..\modules\juce_gui_basics\misc\juce_DropShadower.h = ..\..\..\..\modules\juce_gui_basics\misc\juce_DropShadower.h | |||
..\..\..\..\modules\juce_gui_basics\misc\juce_JUCESplashScreen.cpp = ..\..\..\..\modules\juce_gui_basics\misc\juce_JUCESplashScreen.cpp | |||
..\..\..\..\modules\juce_gui_basics\misc\juce_JUCESplashScreen.h = ..\..\..\..\modules\juce_gui_basics\misc\juce_JUCESplashScreen.h | |||
EndProjectSection | |||
EndProject | |||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "mouse", "mouse", "{4F197470-F555-0160-9A03-5DC709BDF137}" | |||
@@ -1419,6 +1434,7 @@ Global | |||
EndGlobalSection | |||
GlobalSection(NestedProjects) = preSolution | |||
{81738168-23C9-FF46-BEF6-32B612C5E761} = {A5163566-3141-5B06-2ADC-EA7195B43BF8} | |||
{4E60B2C4-39B6-816D-3086-B7B7D0429F8B} = {A5163566-3141-5B06-2ADC-EA7195B43BF8} | |||
{EBA3ED3D-C402-E9A8-36C3-CA4001D9E324} = {A5163566-3141-5B06-2ADC-EA7195B43BF8} | |||
{B62C4FBD-6BD9-F377-D62F-3E9A18CD3987} = {A5163566-3141-5B06-2ADC-EA7195B43BF8} | |||
{ACC8A441-666B-A8E7-83DE-012EE12384F0} = {05138349-80A0-D2ED-8D0D-E28C52612E86} | |||
@@ -147,6 +147,7 @@ | |||
<ClCompile Include="..\..\Source\Application\jucer_Main.cpp"/> | |||
<ClCompile Include="..\..\Source\Application\jucer_MainWindow.cpp"/> | |||
<ClCompile Include="..\..\Source\Application\jucer_OpenDocumentManager.cpp"/> | |||
<ClCompile Include="..\..\Source\Licenses\jucer_LicenseController.cpp"/> | |||
<ClCompile Include="..\..\Source\LiveBuildEngine\projucer_CompileEngineClient.cpp"/> | |||
<ClCompile Include="..\..\Source\LiveBuildEngine\projucer_CompileEngineServer.cpp"/> | |||
<ClCompile Include="..\..\Source\Code Editor\jucer_SourceCodeEditor.cpp"/> | |||
@@ -21,18 +21,23 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Application", "Application" | |||
..\..\Source\Application\jucer_DocumentEditorComponent.h = ..\..\Source\Application\jucer_DocumentEditorComponent.h | |||
..\..\Source\Application\jucer_DownloadCompileEngineThread.cpp = ..\..\Source\Application\jucer_DownloadCompileEngineThread.cpp | |||
..\..\Source\Application\jucer_DownloadCompileEngineThread.h = ..\..\Source\Application\jucer_DownloadCompileEngineThread.h | |||
..\..\Source\Application\jucer_EulaDialogue.h = ..\..\Source\Application\jucer_EulaDialogue.h | |||
..\..\Source\Application\jucer_FilePreviewComponent.h = ..\..\Source\Application\jucer_FilePreviewComponent.h | |||
..\..\Source\Application\jucer_GlobalPreferences.cpp = ..\..\Source\Application\jucer_GlobalPreferences.cpp | |||
..\..\Source\Application\jucer_GlobalPreferences.h = ..\..\Source\Application\jucer_GlobalPreferences.h | |||
..\..\Source\jucer_Headers.h = ..\..\Source\jucer_Headers.h | |||
..\..\Source\Application\jucer_LoginForm.h = ..\..\Source\Application\jucer_LoginForm.h | |||
..\..\Source\Application\jucer_Main.cpp = ..\..\Source\Application\jucer_Main.cpp | |||
..\..\Source\Application\jucer_MainWindow.cpp = ..\..\Source\Application\jucer_MainWindow.cpp | |||
..\..\Source\Application\jucer_MainWindow.h = ..\..\Source\Application\jucer_MainWindow.h | |||
..\..\Source\Application\jucer_OpenDocumentManager.cpp = ..\..\Source\Application\jucer_OpenDocumentManager.cpp | |||
..\..\Source\Application\jucer_OpenDocumentManager.h = ..\..\Source\Application\jucer_OpenDocumentManager.h | |||
..\..\Source\Application\jucer_ProjucerLicenses.h = ..\..\Source\Application\jucer_ProjucerLicenses.h | |||
EndProjectSection | |||
EndProject | |||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Licenses", "Licenses", "{4E60B2C4-39B6-816D-3086-B7B7D0429F8B}" | |||
ProjectSection(SolutionItems) = preProject | |||
..\..\Source\Licenses\jucer_LicenseController.cpp = ..\..\Source\Licenses\jucer_LicenseController.cpp | |||
..\..\Source\Licenses\jucer_LicenseController.h = ..\..\Source\Licenses\jucer_LicenseController.h | |||
..\..\Source\Licenses\jucer_LicenseThread.h = ..\..\Source\Licenses\jucer_LicenseThread.h | |||
..\..\Source\Licenses\jucer_LicenseWebview.h = ..\..\Source\Licenses\jucer_LicenseWebview.h | |||
EndProjectSection | |||
EndProject | |||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "LiveBuildEngine", "LiveBuildEngine", "{EBA3ED3D-C402-E9A8-36C3-CA4001D9E324}" | |||
@@ -181,6 +186,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Project", "Project", "{BA1A | |||
..\..\Source\Project\jucer_DependencyPathPropertyComponent.cpp = ..\..\Source\Project\jucer_DependencyPathPropertyComponent.cpp | |||
..\..\Source\Project\jucer_DependencyPathPropertyComponent.h = ..\..\Source\Project\jucer_DependencyPathPropertyComponent.h | |||
..\..\Source\Project\jucer_GroupInformationComponent.h = ..\..\Source\Project\jucer_GroupInformationComponent.h | |||
..\..\Source\Project\jucer_HeaderComponent.h = ..\..\Source\Project\jucer_HeaderComponent.h | |||
..\..\Source\Project\jucer_LiveBuildTab.h = ..\..\Source\Project\jucer_LiveBuildTab.h | |||
..\..\Source\Project\jucer_Module.cpp = ..\..\Source\Project\jucer_Module.cpp | |||
..\..\Source\Project\jucer_Module.h = ..\..\Source\Project\jucer_Module.h | |||
..\..\Source\Project\jucer_ModulesPanel.h = ..\..\Source\Project\jucer_ModulesPanel.h | |||
@@ -188,6 +195,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Project", "Project", "{BA1A | |||
..\..\Source\Project\jucer_Project.h = ..\..\Source\Project\jucer_Project.h | |||
..\..\Source\Project\jucer_ProjectContentComponent.cpp = ..\..\Source\Project\jucer_ProjectContentComponent.cpp | |||
..\..\Source\Project\jucer_ProjectContentComponent.h = ..\..\Source\Project\jucer_ProjectContentComponent.h | |||
..\..\Source\Project\jucer_ProjectTab.h = ..\..\Source\Project\jucer_ProjectTab.h | |||
..\..\Source\Project\jucer_ProjectTree_Base.h = ..\..\Source\Project\jucer_ProjectTree_Base.h | |||
..\..\Source\Project\jucer_ProjectTree_File.h = ..\..\Source\Project\jucer_ProjectTree_File.h | |||
..\..\Source\Project\jucer_ProjectTree_Group.h = ..\..\Source\Project\jucer_ProjectTree_Group.h | |||
@@ -212,6 +220,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Project Saving", "Project S | |||
EndProject | |||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Utility", "Utility", "{5B44064B-7712-DA97-5DC7-473A1921D600}" | |||
ProjectSection(SolutionItems) = preProject | |||
..\..\Source\Utility\jucer_AboutWindowComponent.h = ..\..\Source\Utility\jucer_AboutWindowComponent.h | |||
..\..\Source\Utility\jucer_CodeHelpers.cpp = ..\..\Source\Utility\jucer_CodeHelpers.cpp | |||
..\..\Source\Utility\jucer_CodeHelpers.h = ..\..\Source\Utility\jucer_CodeHelpers.h | |||
..\..\Source\Utility\jucer_ColourPropertyComponent.h = ..\..\Source\Utility\jucer_ColourPropertyComponent.h | |||
@@ -269,13 +278,15 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "BinaryData", "BinaryData", | |||
..\..\Source\BinaryData\background_tile.png = ..\..\Source\BinaryData\background_tile.png | |||
..\..\Source\BinaryData\colourscheme_dark.xml = ..\..\Source\BinaryData\colourscheme_dark.xml | |||
..\..\Source\BinaryData\colourscheme_light.xml = ..\..\Source\BinaryData\colourscheme_light.xml | |||
..\..\Source\BinaryData\export_android.svg = ..\..\Source\BinaryData\export_android.svg | |||
..\..\Source\BinaryData\export_codeBlocks.svg = ..\..\Source\BinaryData\export_codeBlocks.svg | |||
..\..\Source\BinaryData\export_linux.svg = ..\..\Source\BinaryData\export_linux.svg | |||
..\..\Source\BinaryData\export_visualStudio.svg = ..\..\Source\BinaryData\export_visualStudio.svg | |||
..\..\Source\BinaryData\export_xcode.svg = ..\..\Source\BinaryData\export_xcode.svg | |||
..\..\Source\BinaryData\huckleberry_icon.svg = ..\..\Source\BinaryData\huckleberry_icon.svg | |||
..\..\Source\BinaryData\juce-logo-with-text.svg = ..\..\Source\BinaryData\juce-logo-with-text.svg | |||
..\..\Source\BinaryData\juce_icon.png = ..\..\Source\BinaryData\juce_icon.png | |||
..\..\Source\BinaryData\projectIconAndroid.png = ..\..\Source\BinaryData\projectIconAndroid.png | |||
..\..\Source\BinaryData\projectIconCodeblocks.png = ..\..\Source\BinaryData\projectIconCodeblocks.png | |||
..\..\Source\BinaryData\projectIconLinuxMakefile.png = ..\..\Source\BinaryData\projectIconLinuxMakefile.png | |||
..\..\Source\BinaryData\projectIconVisualStudio.png = ..\..\Source\BinaryData\projectIconVisualStudio.png | |||
..\..\Source\BinaryData\projectIconXcode.png = ..\..\Source\BinaryData\projectIconXcode.png | |||
..\..\Source\BinaryData\projectIconXcodeIOS.png = ..\..\Source\BinaryData\projectIconXcodeIOS.png | |||
..\..\Source\BinaryData\offlinepage.html = ..\..\Source\BinaryData\offlinepage.html | |||
..\..\Source\BinaryData\projucer_EULA.txt = ..\..\Source\BinaryData\projucer_EULA.txt | |||
..\..\Source\BinaryData\projucer_login_bg.svg = ..\..\Source\BinaryData\projucer_login_bg.svg | |||
..\..\Source\BinaryData\RecentFilesMenuTemplate.nib = ..\..\Source\BinaryData\RecentFilesMenuTemplate.nib | |||
@@ -1153,6 +1164,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "lookandfeel", "lookandfeel" | |||
..\..\..\..\modules\juce_gui_basics\lookandfeel\juce_LookAndFeel_V2.h = ..\..\..\..\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.cpp | |||
..\..\..\..\modules\juce_gui_basics\lookandfeel\juce_LookAndFeel_V3.h = ..\..\..\..\modules\juce_gui_basics\lookandfeel\juce_LookAndFeel_V3.h | |||
..\..\..\..\modules\juce_gui_basics\lookandfeel\juce_LookAndFeel_V4.cpp = ..\..\..\..\modules\juce_gui_basics\lookandfeel\juce_LookAndFeel_V4.cpp | |||
..\..\..\..\modules\juce_gui_basics\lookandfeel\juce_LookAndFeel_V4.h = ..\..\..\..\modules\juce_gui_basics\lookandfeel\juce_LookAndFeel_V4.h | |||
EndProjectSection | |||
EndProject | |||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "menus", "menus", "{806CB070-E860-0A3A-CDA1-F6AEA5A961F1}" | |||
@@ -1171,6 +1184,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "misc", "misc", "{55DD5543-1 | |||
..\..\..\..\modules\juce_gui_basics\misc\juce_BubbleComponent.h = ..\..\..\..\modules\juce_gui_basics\misc\juce_BubbleComponent.h | |||
..\..\..\..\modules\juce_gui_basics\misc\juce_DropShadower.cpp = ..\..\..\..\modules\juce_gui_basics\misc\juce_DropShadower.cpp | |||
..\..\..\..\modules\juce_gui_basics\misc\juce_DropShadower.h = ..\..\..\..\modules\juce_gui_basics\misc\juce_DropShadower.h | |||
..\..\..\..\modules\juce_gui_basics\misc\juce_JUCESplashScreen.cpp = ..\..\..\..\modules\juce_gui_basics\misc\juce_JUCESplashScreen.cpp | |||
..\..\..\..\modules\juce_gui_basics\misc\juce_JUCESplashScreen.h = ..\..\..\..\modules\juce_gui_basics\misc\juce_JUCESplashScreen.h | |||
EndProjectSection | |||
EndProject | |||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "mouse", "mouse", "{4F197470-F555-0160-9A03-5DC709BDF137}" | |||
@@ -1419,6 +1434,7 @@ Global | |||
EndGlobalSection | |||
GlobalSection(NestedProjects) = preSolution | |||
{81738168-23C9-FF46-BEF6-32B612C5E761} = {A5163566-3141-5B06-2ADC-EA7195B43BF8} | |||
{4E60B2C4-39B6-816D-3086-B7B7D0429F8B} = {A5163566-3141-5B06-2ADC-EA7195B43BF8} | |||
{EBA3ED3D-C402-E9A8-36C3-CA4001D9E324} = {A5163566-3141-5B06-2ADC-EA7195B43BF8} | |||
{B62C4FBD-6BD9-F377-D62F-3E9A18CD3987} = {A5163566-3141-5B06-2ADC-EA7195B43BF8} | |||
{ACC8A441-666B-A8E7-83DE-012EE12384F0} = {05138349-80A0-D2ED-8D0D-E28C52612E86} | |||
@@ -147,6 +147,7 @@ | |||
<ClCompile Include="..\..\Source\Application\jucer_Main.cpp"/> | |||
<ClCompile Include="..\..\Source\Application\jucer_MainWindow.cpp"/> | |||
<ClCompile Include="..\..\Source\Application\jucer_OpenDocumentManager.cpp"/> | |||
<ClCompile Include="..\..\Source\Licenses\jucer_LicenseController.cpp"/> | |||
<ClCompile Include="..\..\Source\LiveBuildEngine\projucer_CompileEngineClient.cpp"/> | |||
<ClCompile Include="..\..\Source\LiveBuildEngine\projucer_CompileEngineServer.cpp"/> | |||
<ClCompile Include="..\..\Source\Code Editor\jucer_SourceCodeEditor.cpp"/> | |||
@@ -21,18 +21,23 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Application", "Application" | |||
..\..\Source\Application\jucer_DocumentEditorComponent.h = ..\..\Source\Application\jucer_DocumentEditorComponent.h | |||
..\..\Source\Application\jucer_DownloadCompileEngineThread.cpp = ..\..\Source\Application\jucer_DownloadCompileEngineThread.cpp | |||
..\..\Source\Application\jucer_DownloadCompileEngineThread.h = ..\..\Source\Application\jucer_DownloadCompileEngineThread.h | |||
..\..\Source\Application\jucer_EulaDialogue.h = ..\..\Source\Application\jucer_EulaDialogue.h | |||
..\..\Source\Application\jucer_FilePreviewComponent.h = ..\..\Source\Application\jucer_FilePreviewComponent.h | |||
..\..\Source\Application\jucer_GlobalPreferences.cpp = ..\..\Source\Application\jucer_GlobalPreferences.cpp | |||
..\..\Source\Application\jucer_GlobalPreferences.h = ..\..\Source\Application\jucer_GlobalPreferences.h | |||
..\..\Source\jucer_Headers.h = ..\..\Source\jucer_Headers.h | |||
..\..\Source\Application\jucer_LoginForm.h = ..\..\Source\Application\jucer_LoginForm.h | |||
..\..\Source\Application\jucer_Main.cpp = ..\..\Source\Application\jucer_Main.cpp | |||
..\..\Source\Application\jucer_MainWindow.cpp = ..\..\Source\Application\jucer_MainWindow.cpp | |||
..\..\Source\Application\jucer_MainWindow.h = ..\..\Source\Application\jucer_MainWindow.h | |||
..\..\Source\Application\jucer_OpenDocumentManager.cpp = ..\..\Source\Application\jucer_OpenDocumentManager.cpp | |||
..\..\Source\Application\jucer_OpenDocumentManager.h = ..\..\Source\Application\jucer_OpenDocumentManager.h | |||
..\..\Source\Application\jucer_ProjucerLicenses.h = ..\..\Source\Application\jucer_ProjucerLicenses.h | |||
EndProjectSection | |||
EndProject | |||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Licenses", "Licenses", "{4E60B2C4-39B6-816D-3086-B7B7D0429F8B}" | |||
ProjectSection(SolutionItems) = preProject | |||
..\..\Source\Licenses\jucer_LicenseController.cpp = ..\..\Source\Licenses\jucer_LicenseController.cpp | |||
..\..\Source\Licenses\jucer_LicenseController.h = ..\..\Source\Licenses\jucer_LicenseController.h | |||
..\..\Source\Licenses\jucer_LicenseThread.h = ..\..\Source\Licenses\jucer_LicenseThread.h | |||
..\..\Source\Licenses\jucer_LicenseWebview.h = ..\..\Source\Licenses\jucer_LicenseWebview.h | |||
EndProjectSection | |||
EndProject | |||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "LiveBuildEngine", "LiveBuildEngine", "{EBA3ED3D-C402-E9A8-36C3-CA4001D9E324}" | |||
@@ -181,6 +186,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Project", "Project", "{BA1A | |||
..\..\Source\Project\jucer_DependencyPathPropertyComponent.cpp = ..\..\Source\Project\jucer_DependencyPathPropertyComponent.cpp | |||
..\..\Source\Project\jucer_DependencyPathPropertyComponent.h = ..\..\Source\Project\jucer_DependencyPathPropertyComponent.h | |||
..\..\Source\Project\jucer_GroupInformationComponent.h = ..\..\Source\Project\jucer_GroupInformationComponent.h | |||
..\..\Source\Project\jucer_HeaderComponent.h = ..\..\Source\Project\jucer_HeaderComponent.h | |||
..\..\Source\Project\jucer_LiveBuildTab.h = ..\..\Source\Project\jucer_LiveBuildTab.h | |||
..\..\Source\Project\jucer_Module.cpp = ..\..\Source\Project\jucer_Module.cpp | |||
..\..\Source\Project\jucer_Module.h = ..\..\Source\Project\jucer_Module.h | |||
..\..\Source\Project\jucer_ModulesPanel.h = ..\..\Source\Project\jucer_ModulesPanel.h | |||
@@ -188,6 +195,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Project", "Project", "{BA1A | |||
..\..\Source\Project\jucer_Project.h = ..\..\Source\Project\jucer_Project.h | |||
..\..\Source\Project\jucer_ProjectContentComponent.cpp = ..\..\Source\Project\jucer_ProjectContentComponent.cpp | |||
..\..\Source\Project\jucer_ProjectContentComponent.h = ..\..\Source\Project\jucer_ProjectContentComponent.h | |||
..\..\Source\Project\jucer_ProjectTab.h = ..\..\Source\Project\jucer_ProjectTab.h | |||
..\..\Source\Project\jucer_ProjectTree_Base.h = ..\..\Source\Project\jucer_ProjectTree_Base.h | |||
..\..\Source\Project\jucer_ProjectTree_File.h = ..\..\Source\Project\jucer_ProjectTree_File.h | |||
..\..\Source\Project\jucer_ProjectTree_Group.h = ..\..\Source\Project\jucer_ProjectTree_Group.h | |||
@@ -212,6 +220,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Project Saving", "Project S | |||
EndProject | |||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Utility", "Utility", "{5B44064B-7712-DA97-5DC7-473A1921D600}" | |||
ProjectSection(SolutionItems) = preProject | |||
..\..\Source\Utility\jucer_AboutWindowComponent.h = ..\..\Source\Utility\jucer_AboutWindowComponent.h | |||
..\..\Source\Utility\jucer_CodeHelpers.cpp = ..\..\Source\Utility\jucer_CodeHelpers.cpp | |||
..\..\Source\Utility\jucer_CodeHelpers.h = ..\..\Source\Utility\jucer_CodeHelpers.h | |||
..\..\Source\Utility\jucer_ColourPropertyComponent.h = ..\..\Source\Utility\jucer_ColourPropertyComponent.h | |||
@@ -269,13 +278,15 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "BinaryData", "BinaryData", | |||
..\..\Source\BinaryData\background_tile.png = ..\..\Source\BinaryData\background_tile.png | |||
..\..\Source\BinaryData\colourscheme_dark.xml = ..\..\Source\BinaryData\colourscheme_dark.xml | |||
..\..\Source\BinaryData\colourscheme_light.xml = ..\..\Source\BinaryData\colourscheme_light.xml | |||
..\..\Source\BinaryData\export_android.svg = ..\..\Source\BinaryData\export_android.svg | |||
..\..\Source\BinaryData\export_codeBlocks.svg = ..\..\Source\BinaryData\export_codeBlocks.svg | |||
..\..\Source\BinaryData\export_linux.svg = ..\..\Source\BinaryData\export_linux.svg | |||
..\..\Source\BinaryData\export_visualStudio.svg = ..\..\Source\BinaryData\export_visualStudio.svg | |||
..\..\Source\BinaryData\export_xcode.svg = ..\..\Source\BinaryData\export_xcode.svg | |||
..\..\Source\BinaryData\huckleberry_icon.svg = ..\..\Source\BinaryData\huckleberry_icon.svg | |||
..\..\Source\BinaryData\juce-logo-with-text.svg = ..\..\Source\BinaryData\juce-logo-with-text.svg | |||
..\..\Source\BinaryData\juce_icon.png = ..\..\Source\BinaryData\juce_icon.png | |||
..\..\Source\BinaryData\projectIconAndroid.png = ..\..\Source\BinaryData\projectIconAndroid.png | |||
..\..\Source\BinaryData\projectIconCodeblocks.png = ..\..\Source\BinaryData\projectIconCodeblocks.png | |||
..\..\Source\BinaryData\projectIconLinuxMakefile.png = ..\..\Source\BinaryData\projectIconLinuxMakefile.png | |||
..\..\Source\BinaryData\projectIconVisualStudio.png = ..\..\Source\BinaryData\projectIconVisualStudio.png | |||
..\..\Source\BinaryData\projectIconXcode.png = ..\..\Source\BinaryData\projectIconXcode.png | |||
..\..\Source\BinaryData\projectIconXcodeIOS.png = ..\..\Source\BinaryData\projectIconXcodeIOS.png | |||
..\..\Source\BinaryData\offlinepage.html = ..\..\Source\BinaryData\offlinepage.html | |||
..\..\Source\BinaryData\projucer_EULA.txt = ..\..\Source\BinaryData\projucer_EULA.txt | |||
..\..\Source\BinaryData\projucer_login_bg.svg = ..\..\Source\BinaryData\projucer_login_bg.svg | |||
..\..\Source\BinaryData\RecentFilesMenuTemplate.nib = ..\..\Source\BinaryData\RecentFilesMenuTemplate.nib | |||
@@ -1153,6 +1164,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "lookandfeel", "lookandfeel" | |||
..\..\..\..\modules\juce_gui_basics\lookandfeel\juce_LookAndFeel_V2.h = ..\..\..\..\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.cpp | |||
..\..\..\..\modules\juce_gui_basics\lookandfeel\juce_LookAndFeel_V3.h = ..\..\..\..\modules\juce_gui_basics\lookandfeel\juce_LookAndFeel_V3.h | |||
..\..\..\..\modules\juce_gui_basics\lookandfeel\juce_LookAndFeel_V4.cpp = ..\..\..\..\modules\juce_gui_basics\lookandfeel\juce_LookAndFeel_V4.cpp | |||
..\..\..\..\modules\juce_gui_basics\lookandfeel\juce_LookAndFeel_V4.h = ..\..\..\..\modules\juce_gui_basics\lookandfeel\juce_LookAndFeel_V4.h | |||
EndProjectSection | |||
EndProject | |||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "menus", "menus", "{806CB070-E860-0A3A-CDA1-F6AEA5A961F1}" | |||
@@ -1171,6 +1184,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "misc", "misc", "{55DD5543-1 | |||
..\..\..\..\modules\juce_gui_basics\misc\juce_BubbleComponent.h = ..\..\..\..\modules\juce_gui_basics\misc\juce_BubbleComponent.h | |||
..\..\..\..\modules\juce_gui_basics\misc\juce_DropShadower.cpp = ..\..\..\..\modules\juce_gui_basics\misc\juce_DropShadower.cpp | |||
..\..\..\..\modules\juce_gui_basics\misc\juce_DropShadower.h = ..\..\..\..\modules\juce_gui_basics\misc\juce_DropShadower.h | |||
..\..\..\..\modules\juce_gui_basics\misc\juce_JUCESplashScreen.cpp = ..\..\..\..\modules\juce_gui_basics\misc\juce_JUCESplashScreen.cpp | |||
..\..\..\..\modules\juce_gui_basics\misc\juce_JUCESplashScreen.h = ..\..\..\..\modules\juce_gui_basics\misc\juce_JUCESplashScreen.h | |||
EndProjectSection | |||
EndProject | |||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "mouse", "mouse", "{4F197470-F555-0160-9A03-5DC709BDF137}" | |||
@@ -1419,6 +1434,7 @@ Global | |||
EndGlobalSection | |||
GlobalSection(NestedProjects) = preSolution | |||
{81738168-23C9-FF46-BEF6-32B612C5E761} = {A5163566-3141-5B06-2ADC-EA7195B43BF8} | |||
{4E60B2C4-39B6-816D-3086-B7B7D0429F8B} = {A5163566-3141-5B06-2ADC-EA7195B43BF8} | |||
{EBA3ED3D-C402-E9A8-36C3-CA4001D9E324} = {A5163566-3141-5B06-2ADC-EA7195B43BF8} | |||
{B62C4FBD-6BD9-F377-D62F-3E9A18CD3987} = {A5163566-3141-5B06-2ADC-EA7195B43BF8} | |||
{ACC8A441-666B-A8E7-83DE-012EE12384F0} = {05138349-80A0-D2ED-8D0D-E28C52612E86} | |||
@@ -147,6 +147,7 @@ | |||
<ClCompile Include="..\..\Source\Application\jucer_Main.cpp"/> | |||
<ClCompile Include="..\..\Source\Application\jucer_MainWindow.cpp"/> | |||
<ClCompile Include="..\..\Source\Application\jucer_OpenDocumentManager.cpp"/> | |||
<ClCompile Include="..\..\Source\Licenses\jucer_LicenseController.cpp"/> | |||
<ClCompile Include="..\..\Source\LiveBuildEngine\projucer_CompileEngineClient.cpp"/> | |||
<ClCompile Include="..\..\Source\LiveBuildEngine\projucer_CompileEngineServer.cpp"/> | |||
<ClCompile Include="..\..\Source\Code Editor\jucer_SourceCodeEditor.cpp"/> | |||
@@ -16,7 +16,25 @@ | |||
//============================================================================== | |||
// [BEGIN_USER_CODE_SECTION] | |||
// (You can add your own code in this section, and the Projucer will not overwrite it) | |||
/* | |||
============================================================================== | |||
In accordance with the terms of the JUCE 5 End-Use License Agreement, the | |||
JUCE Code in SECTION A cannot be removed, changed or otherwise rendered | |||
ineffective unless you have a JUCE Indie or Pro license, or are using JUCE | |||
under the GPL v3 license. | |||
End User License Agreement: www.juce.com/juce-5-licence | |||
If you are using a GPL v3 license then you can set JUCER_ENABLE_GPL_MODE to | |||
1 to use the Projucer without online license validation. | |||
============================================================================== | |||
*/ | |||
// BEGIN SECTION A | |||
#define JUCER_ENABLE_GPL_MODE 0 | |||
// BEGIN SECTION A | |||
// [END_USER_CODE_SECTION] | |||
@@ -95,26 +95,32 @@ namespace BinaryData | |||
extern const char* colourscheme_light_xml; | |||
const int colourscheme_light_xmlSize = 1050; | |||
extern const char* juce_icon_png; | |||
const int juce_icon_pngSize = 45854; | |||
extern const char* export_android_svg; | |||
const int export_android_svgSize = 3586; | |||
extern const char* export_codeBlocks_svg; | |||
const int export_codeBlocks_svgSize = 1726; | |||
extern const char* projectIconAndroid_png; | |||
const int projectIconAndroid_pngSize = 8150; | |||
extern const char* export_linux_svg; | |||
const int export_linux_svgSize = 28184; | |||
extern const char* projectIconCodeblocks_png; | |||
const int projectIconCodeblocks_pngSize = 11917; | |||
extern const char* export_visualStudio_svg; | |||
const int export_visualStudio_svgSize = 1706; | |||
extern const char* projectIconLinuxMakefile_png; | |||
const int projectIconLinuxMakefile_pngSize = 16444; | |||
extern const char* export_xcode_svg; | |||
const int export_xcode_svgSize = 12295; | |||
extern const char* projectIconVisualStudio_png; | |||
const int projectIconVisualStudio_pngSize = 7194; | |||
extern const char* huckleberry_icon_svg; | |||
const int huckleberry_icon_svgSize = 3375; | |||
extern const char* projectIconXcode_png; | |||
const int projectIconXcode_pngSize = 18281; | |||
extern const char* jucelogowithtext_svg; | |||
const int jucelogowithtext_svgSize = 5312; | |||
extern const char* juce_icon_png; | |||
const int juce_icon_pngSize = 45854; | |||
extern const char* projectIconXcodeIOS_png; | |||
const int projectIconXcodeIOS_pngSize = 18111; | |||
extern const char* offlinepage_html; | |||
const int offlinepage_htmlSize = 1155; | |||
extern const char* projucer_EULA_txt; | |||
const int projucer_EULA_txtSize = 14394; | |||
@@ -126,40 +132,40 @@ namespace BinaryData | |||
const int RecentFilesMenuTemplate_nibSize = 2842; | |||
extern const char* wizard_AnimatedApp_svg; | |||
const int wizard_AnimatedApp_svgSize = 2963; | |||
const int wizard_AnimatedApp_svgSize = 5978; | |||
extern const char* wizard_AudioApp_svg; | |||
const int wizard_AudioApp_svgSize = 9802; | |||
const int wizard_AudioApp_svgSize = 17791; | |||
extern const char* wizard_AudioPlugin_svg; | |||
const int wizard_AudioPlugin_svgSize = 10809; | |||
const int wizard_AudioPlugin_svgSize = 21296; | |||
extern const char* wizard_ConsoleApp_svg; | |||
const int wizard_ConsoleApp_svgSize = 1204; | |||
const int wizard_ConsoleApp_svgSize = 3249; | |||
extern const char* wizard_DLL_svg; | |||
const int wizard_DLL_svgSize = 3588; | |||
const int wizard_DLL_svgSize = 7503; | |||
extern const char* wizard_GUI_svg; | |||
const int wizard_GUI_svgSize = 3448; | |||
const int wizard_GUI_svgSize = 6528; | |||
extern const char* wizard_Highlight_svg; | |||
const int wizard_Highlight_svgSize = 638; | |||
const int wizard_Highlight_svgSize = 1798; | |||
extern const char* wizard_Openfile_svg; | |||
const int wizard_Openfile_svgSize = 686; | |||
const int wizard_Openfile_svgSize = 1859; | |||
extern const char* wizard_OpenGL_svg; | |||
const int wizard_OpenGL_svgSize = 2497; | |||
const int wizard_OpenGL_svgSize = 4551; | |||
extern const char* wizard_StaticLibrary_svg; | |||
const int wizard_StaticLibrary_svgSize = 3563; | |||
const int wizard_StaticLibrary_svgSize = 7488; | |||
// Points to the start of a list of resource names. | |||
extern const char* namedResourceList[]; | |||
// Number of elements in the namedResourceList array. | |||
const int namedResourceListSize = 49; | |||
const int namedResourceListSize = 51; | |||
// 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). | |||
@@ -2,7 +2,8 @@ | |||
<JUCERPROJECT id="M70qfTRRk" name="Projucer" projectType="guiapp" juceFolder="../../juce" | |||
jucerVersion="4.3.1" version="4.3.1" bundleIdentifier="com.juce.theprojucer" | |||
defines="" includeBinaryInAppConfig="1"> | |||
defines="" includeBinaryInAppConfig="1" displaySplashScreen="1" | |||
reportAppUsage="1" useDarkSplashScreen="1" splashScreenColour="Dark"> | |||
<EXPORTFORMATS> | |||
<XCODE_MAC targetFolder="Builds/MacOSX" vstFolder="~/SDKs/vstsdk2.4" rtasFolder="~/SDKs/PT_80_SDK" | |||
documentExtensions=".jucer" objCExtraSuffix="zkVtji" bigIcon="OCyr5F" | |||
@@ -133,8 +134,6 @@ | |||
resource="0" file="Source/Application/jucer_DownloadCompileEngineThread.cpp"/> | |||
<FILE id="J37kAi" name="jucer_DownloadCompileEngineThread.h" compile="0" | |||
resource="0" file="Source/Application/jucer_DownloadCompileEngineThread.h"/> | |||
<FILE id="Sm7ufE" name="jucer_EulaDialogue.h" compile="0" resource="0" | |||
file="Source/Application/jucer_EulaDialogue.h"/> | |||
<FILE id="eo4r70" name="jucer_FilePreviewComponent.h" compile="0" resource="0" | |||
file="Source/Application/jucer_FilePreviewComponent.h"/> | |||
<FILE id="Hq3STq" name="jucer_GlobalPreferences.cpp" compile="1" resource="0" | |||
@@ -142,8 +141,6 @@ | |||
<FILE id="Ym81lY" name="jucer_GlobalPreferences.h" compile="0" resource="0" | |||
file="Source/Application/jucer_GlobalPreferences.h"/> | |||
<FILE id="YVE38f" name="jucer_Headers.h" compile="0" resource="0" file="Source/jucer_Headers.h"/> | |||
<FILE id="VuO6hn" name="jucer_LoginForm.h" compile="0" resource="0" | |||
file="Source/Application/jucer_LoginForm.h"/> | |||
<FILE id="eMFQFu" name="jucer_Main.cpp" compile="1" resource="0" file="Source/Application/jucer_Main.cpp"/> | |||
<FILE id="WuEh1e" name="jucer_MainWindow.cpp" compile="1" resource="0" | |||
file="Source/Application/jucer_MainWindow.cpp"/> | |||
@@ -153,8 +150,16 @@ | |||
resource="0" file="Source/Application/jucer_OpenDocumentManager.cpp"/> | |||
<FILE id="mrJkuR" name="jucer_OpenDocumentManager.h" compile="0" resource="0" | |||
file="Source/Application/jucer_OpenDocumentManager.h"/> | |||
<FILE id="VmPZje" name="jucer_ProjucerLicenses.h" compile="0" resource="0" | |||
file="Source/Application/jucer_ProjucerLicenses.h"/> | |||
</GROUP> | |||
<GROUP id="{E8AAD96C-9F82-4ED5-DE3C-7D6A690CE3C0}" name="Licenses"> | |||
<FILE id="PEEKIP" name="jucer_LicenseController.cpp" compile="1" resource="0" | |||
file="Source/Licenses/jucer_LicenseController.cpp"/> | |||
<FILE id="ORiiLF" name="jucer_LicenseController.h" compile="0" resource="0" | |||
file="Source/Licenses/jucer_LicenseController.h"/> | |||
<FILE id="l4297P" name="jucer_LicenseThread.h" compile="0" resource="0" | |||
file="Source/Licenses/jucer_LicenseThread.h"/> | |||
<FILE id="gmAZud" name="jucer_LicenseWebview.h" compile="0" resource="0" | |||
file="Source/Licenses/jucer_LicenseWebview.h"/> | |||
</GROUP> | |||
<GROUP id="{A65BCF7B-73A3-98A3-C8A2-B18CC3915EEB}" name="LiveBuildEngine"> | |||
<FILE id="cIHH4c" name="projucer_ActivityList.h" compile="0" resource="0" | |||
@@ -397,6 +402,10 @@ | |||
resource="0" file="Source/Project/jucer_DependencyPathPropertyComponent.h"/> | |||
<FILE id="CfdjmB" name="jucer_GroupInformationComponent.h" compile="0" | |||
resource="0" file="Source/Project/jucer_GroupInformationComponent.h"/> | |||
<FILE id="mJZ99l" name="jucer_HeaderComponent.h" compile="0" resource="0" | |||
file="Source/Project/jucer_HeaderComponent.h"/> | |||
<FILE id="bSxp8e" name="jucer_LiveBuildTab.h" compile="0" resource="0" | |||
file="Source/Project/jucer_LiveBuildTab.h"/> | |||
<FILE id="OumwSU" name="jucer_Module.cpp" compile="1" resource="0" | |||
file="Source/Project/jucer_Module.cpp"/> | |||
<FILE id="oCEwKP" name="jucer_Module.h" compile="0" resource="0" file="Source/Project/jucer_Module.h"/> | |||
@@ -409,6 +418,8 @@ | |||
resource="0" file="Source/Project/jucer_ProjectContentComponent.cpp"/> | |||
<FILE id="xDGBxS" name="jucer_ProjectContentComponent.h" compile="0" | |||
resource="0" file="Source/Project/jucer_ProjectContentComponent.h"/> | |||
<FILE id="cxtd6V" name="jucer_ProjectTab.h" compile="0" resource="0" | |||
file="Source/Project/jucer_ProjectTab.h"/> | |||
<FILE id="JsTOtf" name="jucer_ProjectTree_Base.h" compile="0" resource="0" | |||
file="Source/Project/jucer_ProjectTree_Base.h"/> | |||
<FILE id="PnZpGT" name="jucer_ProjectTree_File.h" compile="0" resource="0" | |||
@@ -445,6 +456,8 @@ | |||
file="Source/Project Saving/jucer_ResourceFile.h"/> | |||
</GROUP> | |||
<GROUP id="{58EB50D9-0F01-AF9B-087B-93DB283A339D}" name="Utility"> | |||
<FILE id="yhZzRW" name="jucer_AboutWindowComponent.h" compile="0" resource="0" | |||
file="Source/Utility/jucer_AboutWindowComponent.h"/> | |||
<FILE id="TX2oGI" name="jucer_CodeHelpers.cpp" compile="1" resource="0" | |||
file="Source/Utility/jucer_CodeHelpers.cpp"/> | |||
<FILE id="mpDJct" name="jucer_CodeHelpers.h" compile="0" resource="0" | |||
@@ -452,8 +465,6 @@ | |||
<FILE id="ZZK5JV" name="jucer_ColourPropertyComponent.h" compile="0" | |||
resource="0" file="Source/Utility/jucer_ColourPropertyComponent.h"/> | |||
<FILE id="Y5kN1C" name="jucer_Colours.h" compile="0" resource="0" file="Source/Utility/jucer_Colours.h"/> | |||
<FILE id="D0zsDL" name="jucer_DialogLookAndFeel.h" compile="0" resource="0" | |||
file="Source/Utility/jucer_DialogLookAndFeel.h"/> | |||
<FILE id="Wmahr3" name="jucer_FileHelpers.cpp" compile="1" resource="0" | |||
file="Source/Utility/jucer_FileHelpers.cpp"/> | |||
<FILE id="UhuxIZ" name="jucer_FileHelpers.h" compile="0" resource="0" | |||
@@ -595,42 +606,46 @@ | |||
file="Source/BinaryData/colourscheme_dark.xml"/> | |||
<FILE id="cVh68s" name="colourscheme_light.xml" compile="0" resource="1" | |||
file="Source/BinaryData/colourscheme_light.xml"/> | |||
<FILE id="Fz1SOT" name="export_android.svg" compile="0" resource="1" | |||
file="Source/BinaryData/export_android.svg"/> | |||
<FILE id="SpRMuQ" name="export_codeBlocks.svg" compile="0" resource="1" | |||
file="Source/BinaryData/export_codeBlocks.svg"/> | |||
<FILE id="BVt92A" name="export_linux.svg" compile="0" resource="1" | |||
file="Source/BinaryData/export_linux.svg"/> | |||
<FILE id="qpiWQ6" name="export_visualStudio.svg" compile="0" resource="1" | |||
file="Source/BinaryData/export_visualStudio.svg"/> | |||
<FILE id="CvcwoL" name="export_xcode.svg" compile="0" resource="1" | |||
file="Source/BinaryData/export_xcode.svg"/> | |||
<FILE id="qgV7C2" name="huckleberry_icon.svg" compile="0" resource="1" | |||
file="Source/BinaryData/huckleberry_icon.svg"/> | |||
<FILE id="ifg9Ly" name="juce-logo-with-text.svg" compile="0" resource="1" | |||
file="Source/BinaryData/juce-logo-with-text.svg"/> | |||
<FILE id="OCyr5F" name="juce_icon.png" compile="0" resource="1" file="Source/BinaryData/juce_icon.png"/> | |||
<FILE id="pBWoUz" name="projectIconAndroid.png" compile="0" resource="1" | |||
file="Source/BinaryData/projectIconAndroid.png"/> | |||
<FILE id="sfyVGu" name="projectIconCodeblocks.png" compile="0" resource="1" | |||
file="Source/BinaryData/projectIconCodeblocks.png"/> | |||
<FILE id="E0ZZDs" name="projectIconLinuxMakefile.png" compile="0" resource="1" | |||
file="Source/BinaryData/projectIconLinuxMakefile.png"/> | |||
<FILE id="FpXyT2" name="projectIconVisualStudio.png" compile="0" resource="1" | |||
file="Source/BinaryData/projectIconVisualStudio.png"/> | |||
<FILE id="FoXOPN" name="projectIconXcode.png" compile="0" resource="1" | |||
file="Source/BinaryData/projectIconXcode.png"/> | |||
<FILE id="I21x5A" name="projectIconXcodeIOS.png" compile="0" resource="1" | |||
file="Source/BinaryData/projectIconXcodeIOS.png"/> | |||
<FILE id="ceQNwo" name="offlinepage.html" compile="0" resource="1" | |||
file="Source/BinaryData/offlinepage.html"/> | |||
<FILE id="NxFmxY" name="projucer_EULA.txt" compile="0" resource="1" | |||
file="Source/BinaryData/projucer_EULA.txt"/> | |||
<FILE id="r2M1IP" name="projucer_login_bg.svg" compile="0" resource="1" | |||
file="Source/BinaryData/projucer_login_bg.svg"/> | |||
<FILE id="eO1a1G" name="RecentFilesMenuTemplate.nib" compile="0" resource="1" | |||
file="Source/BinaryData/RecentFilesMenuTemplate.nib"/> | |||
<FILE id="EEn2LB" name="wizard_AnimatedApp.svg" compile="0" resource="1" | |||
<FILE id="BAM2qw" name="wizard_AnimatedApp.svg" compile="0" resource="1" | |||
file="Source/BinaryData/wizard_AnimatedApp.svg"/> | |||
<FILE id="M2yQ4m" name="wizard_AudioApp.svg" compile="0" resource="1" | |||
<FILE id="pQDKOo" name="wizard_AudioApp.svg" compile="0" resource="1" | |||
file="Source/BinaryData/wizard_AudioApp.svg"/> | |||
<FILE id="hRzV8g" name="wizard_AudioPlugin.svg" compile="0" resource="1" | |||
<FILE id="UpyweT" name="wizard_AudioPlugin.svg" compile="0" resource="1" | |||
file="Source/BinaryData/wizard_AudioPlugin.svg"/> | |||
<FILE id="meg5oy" name="wizard_ConsoleApp.svg" compile="0" resource="1" | |||
<FILE id="k3qydx" name="wizard_ConsoleApp.svg" compile="0" resource="1" | |||
file="Source/BinaryData/wizard_ConsoleApp.svg"/> | |||
<FILE id="u62PSp" name="wizard_DLL.svg" compile="0" resource="1" file="Source/BinaryData/wizard_DLL.svg"/> | |||
<FILE id="L1FJYY" name="wizard_GUI.svg" compile="0" resource="1" file="Source/BinaryData/wizard_GUI.svg"/> | |||
<FILE id="gP9mUi" name="wizard_Highlight.svg" compile="0" resource="1" | |||
<FILE id="tlwd3x" name="wizard_DLL.svg" compile="0" resource="1" file="Source/BinaryData/wizard_DLL.svg"/> | |||
<FILE id="EcLntP" name="wizard_GUI.svg" compile="0" resource="1" file="Source/BinaryData/wizard_GUI.svg"/> | |||
<FILE id="ax6ifQ" name="wizard_Highlight.svg" compile="0" resource="1" | |||
file="Source/BinaryData/wizard_Highlight.svg"/> | |||
<FILE id="j6OMeN" name="wizard_Openfile.svg" compile="0" resource="1" | |||
<FILE id="orrYHS" name="wizard_Openfile.svg" compile="0" resource="1" | |||
file="Source/BinaryData/wizard_Openfile.svg"/> | |||
<FILE id="ON6Zo4" name="wizard_OpenGL.svg" compile="0" resource="1" | |||
<FILE id="FNfi75" name="wizard_OpenGL.svg" compile="0" resource="1" | |||
file="Source/BinaryData/wizard_OpenGL.svg"/> | |||
<FILE id="pZRxYj" name="wizard_StaticLibrary.svg" compile="0" resource="1" | |||
<FILE id="GiO1GY" name="wizard_StaticLibrary.svg" compile="0" resource="1" | |||
file="Source/BinaryData/wizard_StaticLibrary.svg"/> | |||
</GROUP> | |||
</MAINGROUP> | |||
@@ -27,35 +27,6 @@ | |||
#include "jucer_AppearanceSettings.h" | |||
#include "jucer_GlobalPreferences.h" | |||
namespace AppearanceColours | |||
{ | |||
struct ColourInfo | |||
{ | |||
const char* name; | |||
int colourID; | |||
bool mustBeOpaque; | |||
bool applyToEditorOnly; | |||
}; | |||
static const ColourInfo colours[] = | |||
{ | |||
{ "Main Window Bkgd", mainBackgroundColourId, true, false }, | |||
{ "Treeview Highlight", TreeView::selectedItemBackgroundColourId, false, false }, | |||
{ "Code Background", CodeEditorComponent::backgroundColourId, true, false }, | |||
{ "Line Number Bkgd", CodeEditorComponent::lineNumberBackgroundId, false, false }, | |||
{ "Line Numbers", CodeEditorComponent::lineNumberTextId, false, false }, | |||
{ "Plain Text", CodeEditorComponent::defaultTextColourId, false, false }, | |||
{ "Selected Text Bkgd", CodeEditorComponent::highlightColourId, false, false }, | |||
{ "Caret", CaretComponent::caretColourId, false, true } | |||
}; | |||
enum | |||
{ | |||
numColours = sizeof (AppearanceColours::colours) / sizeof (AppearanceColours::colours[0]) | |||
}; | |||
} | |||
//============================================================================== | |||
AppearanceSettings::AppearanceSettings (bool updateAppWhenChanged) | |||
: settings ("COLOUR_SCHEME") | |||
@@ -64,9 +35,6 @@ AppearanceSettings::AppearanceSettings (bool updateAppWhenChanged) | |||
{ | |||
ProjucerLookAndFeel lf; | |||
for (int i = 0; i < AppearanceColours::numColours; ++i) | |||
getColourValue (AppearanceColours::colours[i].name) = lf.findColour (AppearanceColours::colours[i].colourID).toString(); | |||
CodeDocument doc; | |||
CPlusPlusCodeTokeniser tokeniser; | |||
CodeEditorComponent editor (doc, &tokeniser); | |||
@@ -195,28 +163,9 @@ StringArray AppearanceSettings::getColourNames() const | |||
void AppearanceSettings::updateColourScheme() | |||
{ | |||
applyToLookAndFeel (LookAndFeel::getDefaultLookAndFeel()); | |||
ProjucerApplication::getApp().mainWindowList.sendLookAndFeelChange(); | |||
} | |||
void AppearanceSettings::applyToLookAndFeel (LookAndFeel& lf) const | |||
{ | |||
for (int i = 0; i < AppearanceColours::numColours; ++i) | |||
{ | |||
Colour col; | |||
if (getColour (AppearanceColours::colours[i].name, col)) | |||
{ | |||
if (AppearanceColours::colours[i].mustBeOpaque) | |||
col = Colours::white.overlaidWith (col); | |||
if (! AppearanceColours::colours[i].applyToEditorOnly) | |||
lf.setColour (AppearanceColours::colours[i].colourID, col); | |||
} | |||
} | |||
lf.setColour (ScrollBar::thumbColourId, lf.findColour (mainBackgroundColourId).contrasting().withAlpha (0.13f)); | |||
} | |||
void AppearanceSettings::applyToCodeEditor (CodeEditorComponent& editor) const | |||
{ | |||
CodeEditorComponent::ColourScheme cs (editor.getColourScheme()); | |||
@@ -230,16 +179,6 @@ void AppearanceSettings::applyToCodeEditor (CodeEditorComponent& editor) const | |||
editor.setColourScheme (cs); | |||
editor.setFont (getCodeFont()); | |||
for (int i = 0; i < AppearanceColours::numColours; ++i) | |||
{ | |||
if (AppearanceColours::colours[i].applyToEditorOnly) | |||
{ | |||
Colour col; | |||
if (getColour (AppearanceColours::colours[i].name, col)) | |||
editor.setColour (AppearanceColours::colours[i].colourID, col); | |||
} | |||
} | |||
editor.setColour (ScrollBar::thumbColourId, editor.findColour (CodeEditorComponent::backgroundColourId) | |||
.contrasting() | |||
.withAlpha (0.13f)); | |||
@@ -64,8 +64,6 @@ private: | |||
static void writeDefaultSchemeFile (const String& xml, const String& name); | |||
void applyToLookAndFeel (LookAndFeel&) const; | |||
void valueTreePropertyChanged (ValueTree&, const Identifier&) override { updateColourScheme(); } | |||
void valueTreeChildAdded (ValueTree&, ValueTree&) override { updateColourScheme(); } | |||
void valueTreeChildRemoved (ValueTree&, ValueTree&, int) override { updateColourScheme(); } | |||
@@ -104,12 +104,6 @@ void ProjucerApplication::initialise (const String& commandLine) | |||
openDocumentManager.registerType (new ProjucerAppClasses::LiveBuildCodeEditorDocument::Type(), 2); | |||
if (! checkEULA()) | |||
{ | |||
quit(); | |||
return; | |||
} | |||
childProcessCache = new ChildProcessCache(); | |||
initCommandManager(); | |||
@@ -125,9 +119,11 @@ void ProjucerApplication::initialise (const String& commandLine) | |||
void ProjucerApplication::initialiseBasics() | |||
{ | |||
LookAndFeel::setDefaultLookAndFeel (&lookAndFeel); | |||
settings = new StoredSettings(); | |||
ImageCache::setCacheTimeout (30 * 1000); | |||
icons = new Icons(); | |||
tooltipWindow.setMillisecondsBeforeTipAppears (1200); | |||
} | |||
bool ProjucerApplication::initialiseLogger (const char* filePrefix) | |||
@@ -151,7 +147,9 @@ bool ProjucerApplication::initialiseLogger (const char* filePrefix) | |||
void ProjucerApplication::handleAsyncUpdate() | |||
{ | |||
initialiseWindows (getCommandLineParameters()); | |||
licenseController = new LicenseController; | |||
licenseController->addLicenseStatusChangedCallback (this); | |||
licenseStateChanged (licenseController->getState()); | |||
#if JUCE_MAC | |||
PopupMenu extraAppleMenuItems; | |||
@@ -163,8 +161,6 @@ void ProjucerApplication::handleAsyncUpdate() | |||
#endif | |||
versionChecker = new LatestVersionChecker(); | |||
showLoginFormAsyncIfNotTriedRecently(); | |||
} | |||
void ProjucerApplication::initialiseWindows (const String& commandLine) | |||
@@ -192,6 +188,13 @@ void ProjucerApplication::shutdown() | |||
globalPreferencesWindow = nullptr; | |||
utf8Window = nullptr; | |||
svgPathWindow = nullptr; | |||
aboutWindow = nullptr; | |||
if (licenseController != nullptr) | |||
{ | |||
licenseController->removeLicenseStatusChangedCallback (this); | |||
licenseController = nullptr; | |||
} | |||
mainWindowList.forceCloseAllWindows(); | |||
openDocumentManager.clear(); | |||
@@ -247,6 +250,27 @@ void ProjucerApplication::systemRequestedQuit() | |||
} | |||
} | |||
//============================================================================== | |||
void ProjucerApplication::licenseStateChanged (const LicenseState& state) | |||
{ | |||
if (state.type != LicenseState::Type::notLoggedIn | |||
&& state.type != LicenseState::Type::noLicenseChosenYet) | |||
{ | |||
initialiseWindows (getCommandLineParameters()); | |||
} | |||
} | |||
void ProjucerApplication::doLogout() | |||
{ | |||
if (licenseController != nullptr) | |||
{ | |||
const LicenseState& state = licenseController->getState(); | |||
if (state.type != LicenseState::Type::notLoggedIn && closeAllMainWindows()) | |||
licenseController->logout(); | |||
} | |||
} | |||
//============================================================================== | |||
String ProjucerApplication::getVersionDescription() const | |||
{ | |||
@@ -337,9 +361,13 @@ void ProjucerApplication::createFileMenu (PopupMenu& menu) | |||
menu.addCommandItem (commandManager, CommandIDs::openInIDE); | |||
menu.addCommandItem (commandManager, CommandIDs::saveAndOpenInIDE); | |||
menu.addSeparator(); | |||
#if ! JUCER_ENABLE_GPL_MODE | |||
menu.addCommandItem (commandManager, CommandIDs::loginLogout); | |||
#endif | |||
#if ! JUCE_MAC | |||
menu.addCommandItem (commandManager, CommandIDs::showAboutWindow); | |||
menu.addCommandItem (commandManager, CommandIDs::showGlobalPreferences); | |||
menu.addSeparator(); | |||
menu.addCommandItem (commandManager, StandardApplicationCommandIDs::quit); | |||
@@ -366,18 +394,21 @@ void ProjucerApplication::createEditMenu (PopupMenu& menu) | |||
void ProjucerApplication::createViewMenu (PopupMenu& menu) | |||
{ | |||
menu.addCommandItem (commandManager, CommandIDs::showFilePanel); | |||
menu.addCommandItem (commandManager, CommandIDs::showConfigPanel); | |||
menu.addCommandItem (commandManager, CommandIDs::showBuildTab); | |||
menu.addCommandItem (commandManager, CommandIDs::showProjectSettings); | |||
menu.addCommandItem (commandManager, CommandIDs::showProjectModules); | |||
menu.addCommandItem (commandManager, CommandIDs::showProjectTab); | |||
menu.addCommandItem (commandManager, CommandIDs::showBuildTab); | |||
menu.addCommandItem (commandManager, CommandIDs::showFileExplorerPanel); | |||
menu.addCommandItem (commandManager, CommandIDs::showModulesPanel); | |||
menu.addCommandItem (commandManager, CommandIDs::showExportersPanel); | |||
menu.addCommandItem (commandManager, CommandIDs::showExporterSettings); | |||
menu.addSeparator(); | |||
createColourSchemeItems (menu); | |||
} | |||
void ProjucerApplication::createBuildMenu (PopupMenu& menu) | |||
{ | |||
menu.addCommandItem (commandManager, CommandIDs::enableBuild); | |||
menu.addCommandItem (commandManager, CommandIDs::toggleBuildEnabled); | |||
menu.addCommandItem (commandManager, CommandIDs::toggleContinuousBuild); | |||
menu.addCommandItem (commandManager, CommandIDs::buildNow); | |||
@@ -395,17 +426,12 @@ void ProjucerApplication::createBuildMenu (PopupMenu& menu) | |||
void ProjucerApplication::createColourSchemeItems (PopupMenu& menu) | |||
{ | |||
const StringArray presetSchemes (settings->appearance.getPresetSchemes()); | |||
PopupMenu colourSchemes; | |||
colourSchemes.addItem (colourSchemeBaseID + 0, "Dark"); | |||
colourSchemes.addItem (colourSchemeBaseID + 1, "Grey"); | |||
colourSchemes.addItem (colourSchemeBaseID + 2, "Light"); | |||
if (presetSchemes.size() > 0) | |||
{ | |||
PopupMenu schemes; | |||
for (int i = 0; i < presetSchemes.size(); ++i) | |||
schemes.addItem (colourSchemeBaseID + i, presetSchemes[i]); | |||
menu.addSubMenu ("Colour Scheme", schemes); | |||
} | |||
menu.addSubMenu ("Colour Scheme", colourSchemes); | |||
} | |||
void ProjucerApplication::createWindowMenu (PopupMenu& menu) | |||
@@ -439,6 +465,8 @@ void ProjucerApplication::createToolsMenu (PopupMenu& menu) | |||
void ProjucerApplication::createExtraAppleMenuItems (PopupMenu& menu) | |||
{ | |||
menu.addCommandItem (commandManager, CommandIDs::showAboutWindow); | |||
menu.addSeparator(); | |||
menu.addCommandItem (commandManager, CommandIDs::showGlobalPreferences); | |||
} | |||
@@ -456,9 +484,33 @@ void ProjucerApplication::handleMainMenuCommand (int menuItemID) | |||
else | |||
jassertfalse; | |||
} | |||
else if (menuItemID >= colourSchemeBaseID && menuItemID < colourSchemeBaseID + 200) | |||
else if (menuItemID >= colourSchemeBaseID && menuItemID < colourSchemeBaseID + 3) | |||
{ | |||
settings->appearance.selectPresetScheme (menuItemID - colourSchemeBaseID); | |||
auto& appearanceSettings = getAppSettings().appearance; | |||
if (menuItemID == colourSchemeBaseID) | |||
{ | |||
lookAndFeel.setColourScheme (LookAndFeel_V4::getDarkColourScheme()); | |||
appearanceSettings.selectPresetScheme (0); | |||
} | |||
else if (menuItemID == colourSchemeBaseID + 1) | |||
{ | |||
lookAndFeel.setColourScheme (LookAndFeel_V4::getGreyColourScheme()); | |||
appearanceSettings.selectPresetScheme (0); | |||
} | |||
else if (menuItemID == colourSchemeBaseID + 2) | |||
{ | |||
lookAndFeel.setColourScheme (LookAndFeel_V4::getLightColourScheme()); | |||
appearanceSettings.selectPresetScheme (1); | |||
} | |||
lookAndFeel.setupColours(); | |||
mainWindowList.sendLookAndFeelChange(); | |||
if (utf8Window != nullptr) utf8Window->sendLookAndFeelChange(); | |||
if (svgPathWindow != nullptr) svgPathWindow->sendLookAndFeelChange(); | |||
if (globalPreferencesWindow != nullptr) globalPreferencesWindow->sendLookAndFeelChange(); | |||
if (aboutWindow != nullptr) aboutWindow->sendLookAndFeelChange(); | |||
} | |||
else | |||
{ | |||
@@ -478,6 +530,7 @@ void ProjucerApplication::getAllCommands (Array <CommandID>& commands) | |||
CommandIDs::showGlobalPreferences, | |||
CommandIDs::showUTF8Tool, | |||
CommandIDs::showSVGPathTool, | |||
CommandIDs::showAboutWindow, | |||
CommandIDs::loginLogout }; | |||
commands.addArray (ids, numElementsInArray (ids)); | |||
@@ -517,15 +570,30 @@ void ProjucerApplication::getCommandInfo (CommandID commandID, ApplicationComman | |||
break; | |||
case CommandIDs::showSVGPathTool: | |||
result.setInfo ("SVG Path Helper", "Shows the SVG->Path data conversion utility", CommandCategories::general, 0); | |||
result.setInfo ("SVG Path Converter", "Shows the SVG->Path data conversion utility", CommandCategories::general, 0); | |||
break; | |||
case CommandIDs::showAboutWindow: | |||
result.setInfo ("About Projucer", "Shows the Projucer's 'About' page.", CommandCategories::general, 0); | |||
break; | |||
case CommandIDs::loginLogout: | |||
result.setInfo (ProjucerLicenses::getInstance()->isLoggedIn() | |||
? String ("Sign out ") + ProjucerLicenses::getInstance()->getLoginName() | |||
: String ("Sign in..."), | |||
"Log out of your JUCE account", CommandCategories::general, 0); | |||
result.setActive (ProjucerLicenses::getInstance()->isDLLPresent()); | |||
{ | |||
bool isLoggedIn = false; | |||
String username; | |||
if (licenseController != nullptr) | |||
{ | |||
const LicenseState state = licenseController->getState(); | |||
isLoggedIn = (state.type != LicenseState::Type::notLoggedIn && state.type != LicenseState::Type::GPL); | |||
username = state.username; | |||
} | |||
result.setInfo (isLoggedIn | |||
? String ("Sign out ") + username + "..." | |||
: String ("Sign in..."), | |||
"Log out of your JUCE account", CommandCategories::general, 0); | |||
} | |||
break; | |||
default: | |||
@@ -545,7 +613,8 @@ bool ProjucerApplication::perform (const InvocationInfo& info) | |||
case CommandIDs::showUTF8Tool: showUTF8ToolWindow(); break; | |||
case CommandIDs::showSVGPathTool: showSVGPathDataToolWindow(); break; | |||
case CommandIDs::showGlobalPreferences: AppearanceSettings::showGlobalPreferences (globalPreferencesWindow); break; | |||
case CommandIDs::loginLogout: loginOrLogout(); break; | |||
case CommandIDs::showAboutWindow: showAboutWindow(); break; | |||
case CommandIDs::loginLogout: doLogout(); break; | |||
default: return JUCEApplication::perform (info); | |||
} | |||
@@ -596,7 +665,7 @@ void ProjucerApplication::showUTF8ToolWindow() | |||
else | |||
new FloatingToolWindow ("UTF-8 String Literal Converter", | |||
"utf8WindowPos", | |||
new UTF8Component(), utf8Window, | |||
new UTF8Component(), utf8Window, true, | |||
500, 500, 300, 300, 1000, 1000); | |||
} | |||
@@ -607,10 +676,21 @@ void ProjucerApplication::showSVGPathDataToolWindow() | |||
else | |||
new FloatingToolWindow ("SVG Path Converter", | |||
"svgPathWindowPos", | |||
new SVGPathDataComponent(), svgPathWindow, | |||
new SVGPathDataComponent(), svgPathWindow, true, | |||
500, 500, 300, 300, 1000, 1000); | |||
} | |||
void ProjucerApplication::showAboutWindow() | |||
{ | |||
if (aboutWindow != nullptr) | |||
aboutWindow->toFront (true); | |||
else | |||
new FloatingToolWindow ("", | |||
"aboutWindowPos", | |||
new AboutWindowComponent(), aboutWindow, false, | |||
500, 300, 500, 300, 500, 300); | |||
} | |||
//============================================================================== | |||
struct FileWithTime | |||
{ | |||
@@ -650,54 +730,6 @@ void ProjucerApplication::deleteLogger() | |||
logger = nullptr; | |||
} | |||
struct LiveBuildConfigItem : public ConfigTreeItemTypes::ConfigTreeItemBase | |||
{ | |||
LiveBuildConfigItem (Project& p) : project (p) {} | |||
bool isMissing() override { return false; } | |||
bool canBeSelected() const override { return true; } | |||
bool mightContainSubItems() override { return false; } | |||
String getUniqueName() const override { return "live_build_settings"; } | |||
String getRenamingName() const override { return getDisplayName(); } | |||
String getDisplayName() const override { return "Live Build Settings"; } | |||
void setName (const String&) override {} | |||
Icon getIcon() const override { return Icon (getIcons().config, getContrastingColour (Colours::green, 0.5f)); } | |||
void showDocument() override { showSettingsPage (new SettingsComp (project)); } | |||
void itemOpennessChanged (bool) override {} | |||
Project& project; | |||
//============================================================================== | |||
struct SettingsComp : public Component | |||
{ | |||
SettingsComp (Project& p) | |||
{ | |||
addAndMakeVisible (&group); | |||
PropertyListBuilder props; | |||
LiveBuildProjectSettings::getLiveSettings (p, props); | |||
group.setProperties (props); | |||
group.setName ("Live Build Settings"); | |||
parentSizeChanged(); | |||
} | |||
void parentSizeChanged() override { updateSize (*this, group); } | |||
ConfigTreeItemTypes::PropertyGroupComponent group; | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SettingsComp) | |||
}; | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (LiveBuildConfigItem) | |||
}; | |||
void ProjucerApplication::addLiveBuildConfigItem (Project& project, TreeViewItem& parent) | |||
{ | |||
parent.addSubItem (new LiveBuildConfigItem (project)); | |||
} | |||
PropertiesFile::Options ProjucerApplication::getPropertyFileOptionsFor (const String& filename) | |||
{ | |||
PropertiesFile::Options options; | |||
@@ -713,63 +745,6 @@ PropertiesFile::Options ProjucerApplication::getPropertyFileOptionsFor (const St | |||
return options; | |||
} | |||
void ProjucerApplication::hideLoginForm() | |||
{ | |||
jassert (MessageManager::getInstance()->isThisTheMessageThread()); | |||
loginForm = nullptr; | |||
} | |||
void ProjucerApplication::showLoginForm() | |||
{ | |||
if (ProjucerLicenses::getInstance()->isDLLPresent()) | |||
{ | |||
jassert (MessageManager::getInstance()->isThisTheMessageThread()); | |||
if (loginForm != nullptr) | |||
return; | |||
DialogWindow::LaunchOptions lo; | |||
lo.dialogTitle = "Log-in to Projucer"; | |||
lo.dialogBackgroundColour = Colour (0xffdddddd); | |||
lo.content.setOwned (loginForm = new LoginForm()); | |||
lo.escapeKeyTriggersCloseButton = true; | |||
lo.componentToCentreAround = nullptr; | |||
lo.escapeKeyTriggersCloseButton = true; | |||
lo.resizable = false; | |||
lo.useBottomRightCornerResizer = false; | |||
lo.useNativeTitleBar = true; | |||
lo.launchAsync(); | |||
getGlobalProperties().setValue ("lastLoginAttemptTime", | |||
(int) (Time::getCurrentTime().toMilliseconds() / 1000)); | |||
} | |||
} | |||
void ProjucerApplication::showLoginFormAsyncIfNotTriedRecently() | |||
{ | |||
if (ProjucerLicenses::getInstance()->isDLLPresent()) | |||
{ | |||
Time lastLoginAttempt (getGlobalProperties().getValue ("lastLoginAttemptTime").getIntValue() * (int64) 1000); | |||
if (Time::getCurrentTime().getDayOfMonth() != lastLoginAttempt.getDayOfMonth()) | |||
startTimer (1000); | |||
} | |||
else | |||
{ | |||
getGlobalProperties().removeValue ("lastLoginAttemptTime"); | |||
} | |||
} | |||
void ProjucerApplication::timerCallback() | |||
{ | |||
stopTimer(); | |||
if (! ProjucerLicenses::getInstance()->isLoggedIn()) | |||
showLoginForm(); | |||
} | |||
void ProjucerApplication::updateAllBuildTabs() | |||
{ | |||
for (int i = 0; i < mainWindowList.windows.size(); ++i) | |||
@@ -777,55 +752,6 @@ void ProjucerApplication::updateAllBuildTabs() | |||
p->rebuildProjectTabs(); | |||
} | |||
//============================================================================== | |||
void ProjucerApplication::loginOrLogout() | |||
{ | |||
ProjucerLicenses& status = *ProjucerLicenses::getInstance(); | |||
if (status.isLoggedIn()) | |||
status.logout(); | |||
else | |||
showLoginForm(); | |||
updateAllBuildTabs(); | |||
} | |||
bool ProjucerApplication::checkEULA() | |||
{ | |||
if (currentEULAHasBeenAcceptedPreviously() | |||
|| ! ProjucerLicenses::getInstance()->isDLLPresent()) | |||
return true; | |||
ScopedPointer<AlertWindow> eulaDialogue (new EULADialogue()); | |||
bool hasBeenAccepted = (eulaDialogue->runModalLoop() == EULADialogue::accepted); | |||
setCurrentEULAAccepted (hasBeenAccepted); | |||
return hasBeenAccepted; | |||
} | |||
bool ProjucerApplication::currentEULAHasBeenAcceptedPreviously() const | |||
{ | |||
return getGlobalProperties().getValue (getEULAChecksumProperty()).getIntValue() != 0; | |||
} | |||
String ProjucerApplication::getEULAChecksumProperty() const | |||
{ | |||
return "eulaChecksum_" + MD5 (BinaryData::projucer_EULA_txt, | |||
BinaryData::projucer_EULA_txtSize).toHexString(); | |||
} | |||
void ProjucerApplication::setCurrentEULAAccepted (bool hasBeenAccepted) const | |||
{ | |||
const String checksum (getEULAChecksumProperty()); | |||
auto& globals = getGlobalProperties(); | |||
if (hasBeenAccepted) | |||
globals.setValue (checksum, 1); | |||
else | |||
globals.removeValue (checksum); | |||
globals.saveIfNeeded(); | |||
} | |||
void ProjucerApplication::initCommandManager() | |||
{ | |||
commandManager = new ApplicationCommandManager(); | |||
@@ -29,12 +29,14 @@ | |||
#include "jucer_AutoUpdater.h" | |||
#include "../Code Editor/jucer_SourceCodeEditor.h" | |||
#include "../Utility/jucer_ProjucerLookAndFeel.h" | |||
#include "../Licenses/jucer_LicenseController.h" | |||
struct ChildProcessCache; | |||
//============================================================================== | |||
class ProjucerApplication : public JUCEApplication, | |||
private Timer, | |||
private AsyncUpdater | |||
private AsyncUpdater, | |||
private LicenseController::StateChangedCallback | |||
{ | |||
public: | |||
ProjucerApplication(); | |||
@@ -94,14 +96,17 @@ public: | |||
void showUTF8ToolWindow(); | |||
void showSVGPathDataToolWindow(); | |||
void addLiveBuildConfigItem (Project&, TreeViewItem&); | |||
void showAboutWindow(); | |||
void showLoginForm(); | |||
void hideLoginForm(); | |||
void showLoginWindow(); | |||
void updateAllBuildTabs(); | |||
LatestVersionChecker* createVersionChecker() const; | |||
//============================================================================== | |||
void licenseStateChanged (const LicenseState&) override; | |||
void doLogout(); | |||
//============================================================================== | |||
ProjucerLookAndFeel lookAndFeel; | |||
@@ -115,17 +120,18 @@ public: | |||
OpenDocumentManager openDocumentManager; | |||
ScopedPointer<ApplicationCommandManager> commandManager; | |||
ScopedPointer<Component> appearanceEditorWindow, globalPreferencesWindow, utf8Window, svgPathWindow; | |||
ScopedPointer<Component> appearanceEditorWindow, globalPreferencesWindow, utf8Window, svgPathWindow, aboutWindow; | |||
ScopedPointer<FileLogger> logger; | |||
bool isRunningCommandLine; | |||
ScopedPointer<ChildProcessCache> childProcessCache; | |||
ScopedPointer<LicenseController> licenseController; | |||
private: | |||
void* server = nullptr; | |||
Component* loginForm = nullptr; | |||
ScopedPointer<LatestVersionChecker> versionChecker; | |||
TooltipWindow tooltipWindow; | |||
void loginOrLogout(); | |||
@@ -134,8 +140,6 @@ private: | |||
String getEULAChecksumProperty() const; | |||
void setCurrentEULAAccepted (bool hasBeenAccepted) const; | |||
void showLoginFormAsyncIfNotTriedRecently(); | |||
void timerCallback() override; | |||
void handleAsyncUpdate() override; | |||
void initCommandManager(); | |||
}; |
@@ -247,8 +247,6 @@ public: | |||
titleLabel->setFont (Font (15.00f, Font::bold)); | |||
titleLabel->setJustificationType (Justification::centredLeft); | |||
titleLabel->setEditable (false, false, false); | |||
titleLabel->setColour (TextEditor::textColourId, Colours::black); | |||
titleLabel->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); | |||
addAndMakeVisible (contentLabel = new Label ("Content Label", | |||
TRANS ("A new version of \"123\" is available - would you like to download it?") | |||
@@ -256,8 +254,6 @@ public: | |||
contentLabel->setFont (Font (15.00f, Font::plain)); | |||
contentLabel->setJustificationType (Justification::topLeft); | |||
contentLabel->setEditable (false, false, false); | |||
contentLabel->setColour (TextEditor::textColourId, Colours::black); | |||
contentLabel->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); | |||
addAndMakeVisible (okButton = new TextButton ("OK Button")); | |||
okButton->setButtonText (TRANS(hasOverwriteButton ? "Choose Another Folder..." : "OK")); | |||
@@ -266,14 +262,13 @@ public: | |||
addAndMakeVisible (cancelButton = new TextButton ("Cancel Button")); | |||
cancelButton->setButtonText (TRANS("Cancel")); | |||
cancelButton->addListener (this); | |||
cancelButton->setColour (TextButton::buttonColourId, findColour (secondaryButtonBackgroundColourId)); | |||
addAndMakeVisible (changeLogLabel = new Label ("Change Log Label", | |||
TRANS("Release Notes:"))); | |||
changeLogLabel->setFont (Font (15.00f, Font::plain)); | |||
changeLogLabel->setJustificationType (Justification::topLeft); | |||
changeLogLabel->setEditable (false, false, false); | |||
changeLogLabel->setColour (TextEditor::textColourId, Colours::black); | |||
changeLogLabel->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); | |||
addAndMakeVisible (changeLog = new TextEditor ("Change Log")); | |||
changeLog->setMultiLine (true); | |||
@@ -291,15 +286,11 @@ public: | |||
overwriteLabel->setFont (Font (15.00f, Font::plain)); | |||
overwriteLabel->setJustificationType (Justification::topLeft); | |||
overwriteLabel->setEditable (false, false, false); | |||
overwriteLabel->setColour (TextEditor::textColourId, Colours::black); | |||
overwriteLabel->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); | |||
addAndMakeVisible (overwritePath = new Label ("Overwrite Path", overwriteFolderPath)); | |||
overwritePath->setFont (Font (15.00f, Font::bold)); | |||
overwritePath->setJustificationType (Justification::topLeft); | |||
overwritePath->setEditable (false, false, false); | |||
overwritePath->setColour (TextEditor::textColourId, Colours::black); | |||
overwritePath->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); | |||
addAndMakeVisible (overwriteButton = new TextButton ("Overwrite Button")); | |||
overwriteButton->setButtonText (TRANS("Overwrite")); | |||
@@ -328,8 +319,8 @@ public: | |||
void paint (Graphics& g) override | |||
{ | |||
g.fillAll (Colours::lightgrey); | |||
g.setColour (Colours::black); | |||
g.fillAll (findColour (backgroundColourId)); | |||
g.setColour (findColour (defaultTextColourId)); | |||
if (juceIcon != nullptr) | |||
juceIcon->drawWithin (g, Rectangle<float> (20, 17, 64, 64), | |||
@@ -382,7 +373,7 @@ public: | |||
DialogWindow::LaunchOptions lo; | |||
lo.dialogTitle = TRANS ("Download \"123\" version 456?").replace ("456", version.toString()) | |||
.replace ("123", productName); | |||
lo.dialogBackgroundColour = Colours::lightgrey; | |||
lo.dialogBackgroundColour = userDialog->findColour (backgroundColourId); | |||
lo.content = userDialog; | |||
lo.componentToCentreAround = nullptr; | |||
lo.escapeKeyTriggersCloseButton = true; | |||
@@ -29,61 +29,64 @@ namespace CommandIDs | |||
{ | |||
enum | |||
{ | |||
newProject = 0x200010, | |||
open = 0x200020, | |||
closeDocument = 0x200030, | |||
saveDocument = 0x200040, | |||
saveDocumentAs = 0x200041, | |||
closeProject = 0x200051, | |||
saveProject = 0x200060, | |||
saveAll = 0x200080, | |||
openInIDE = 0x200072, | |||
saveAndOpenInIDE = 0x200073, | |||
createNewExporter = 0x20007d, | |||
showUTF8Tool = 0x200076, | |||
showGlobalPreferences = 0x200077, | |||
showConfigPanel = 0x200074, | |||
showFilePanel = 0x200078, | |||
showTranslationTool = 0x200079, | |||
showProjectSettings = 0x20007a, | |||
showProjectModules = 0x20007b, | |||
showSVGPathTool = 0x20007c, | |||
closeWindow = 0x201001, | |||
closeAllDocuments = 0x201000, | |||
goToPreviousDoc = 0x201002, | |||
goToNextDoc = 0x201003, | |||
goToCounterpart = 0x201004, | |||
deleteSelectedItem = 0x201005, | |||
showFindPanel = 0x2010a0, | |||
findSelection = 0x2010a1, | |||
findNext = 0x2010a2, | |||
findPrevious = 0x2010a3, | |||
showBuildTab = 0x410001, | |||
cleanAll = 0x410010, | |||
enableBuild = 0x410011, | |||
showWarnings = 0x410012, | |||
reinstantiateComp = 0x410013, | |||
launchApp = 0x410014, | |||
killApp = 0x410015, | |||
buildNow = 0x41001a, | |||
toggleContinuousBuild = 0x41001b, | |||
enableSnapToGrid = 0x410016, | |||
zoomIn = 0x410017, | |||
zoomOut = 0x410018, | |||
zoomNormal = 0x410019, | |||
spaceBarDrag = 0x4100a1, | |||
nextError = 0x4100b1, | |||
prevError = 0x4100b2, | |||
loginLogout = 0x4100c1, | |||
newProject = 0x300000, | |||
open = 0x300001, | |||
closeDocument = 0x300002, | |||
saveDocument = 0x300003, | |||
saveDocumentAs = 0x300004, | |||
closeProject = 0x300010, | |||
saveProject = 0x300011, | |||
saveAll = 0x300012, | |||
openInIDE = 0x300013, | |||
saveAndOpenInIDE = 0x300014, | |||
createNewExporter = 0x300015, | |||
showUTF8Tool = 0x300020, | |||
showGlobalPreferences = 0x300021, | |||
showTranslationTool = 0x300022, | |||
showSVGPathTool = 0x300023, | |||
showAboutWindow = 0x300024, | |||
showProjectSettings = 0x300030, | |||
showProjectTab = 0x300031, | |||
showBuildTab = 0x300032, | |||
showFileExplorerPanel = 0x300033, | |||
showModulesPanel = 0x300034, | |||
showExportersPanel = 0x300035, | |||
showExporterSettings = 0x300036, | |||
closeWindow = 0x300040, | |||
closeAllDocuments = 0x300041, | |||
goToPreviousDoc = 0x300042, | |||
goToNextDoc = 0x300043, | |||
goToCounterpart = 0x300044, | |||
deleteSelectedItem = 0x300045, | |||
showFindPanel = 0x300050, | |||
findSelection = 0x300051, | |||
findNext = 0x300052, | |||
findPrevious = 0x300053, | |||
cleanAll = 0x300060, | |||
toggleBuildEnabled = 0x300061, | |||
showWarnings = 0x300062, | |||
reinstantiateComp = 0x300063, | |||
launchApp = 0x300064, | |||
killApp = 0x300065, | |||
buildNow = 0x300066, | |||
toggleContinuousBuild = 0x300067, | |||
enableSnapToGrid = 0x300070, | |||
zoomIn = 0x300071, | |||
zoomOut = 0x300072, | |||
zoomNormal = 0x300073, | |||
spaceBarDrag = 0x300074, | |||
nextError = 0x300080, | |||
prevError = 0x300081, | |||
loginLogout = 0x300090, | |||
lastCommandIDEntry | |||
}; | |||
@@ -69,5 +69,22 @@ const char* const componentItemDragType = "Components"; | |||
enum ColourIds | |||
{ | |||
mainBackgroundColourId = 0x2340000, | |||
backgroundColourId = 0x2340000, | |||
secondaryBackgroundColourId = 0x2340001, | |||
defaultTextColourId = 0x2340002, | |||
widgetTextColourId = 0x2340003, | |||
defaultButtonBackgroundColourId = 0x2340004, | |||
secondaryButtonBackgroundColourId = 0x2340005, | |||
userButtonBackgroundColourId = 0x2340006, | |||
defaultIconColourId = 0x2340007, | |||
treeIconColourId = 0x2340008, | |||
defaultHighlightColourId = 0x2340009, | |||
defaultHighlightedTextColourId = 0x234000a, | |||
codeEditorLineNumberColourId = 0x234000b, | |||
activeTabIconColourId = 0x234000c, | |||
inactiveTabBackgroundColourId = 0x234000d, | |||
inactiveTabIconColourId = 0x234000e, | |||
contentHeaderBackgroundColourId = 0x234000f, | |||
widgetBackgroundColourId = 0x2340010, | |||
secondaryWidgetBackgroundColourId = 0x2340011, | |||
}; |
@@ -55,6 +55,4 @@ bool DocumentEditorComponent::documentAboutToClose (OpenDocumentManager::Documen | |||
void DocumentEditorComponent::setEditedState (bool /*hasBeenEdited*/) | |||
{ | |||
if (ProjectContentComponent* pcc = findParentComponentOfClass<ProjectContentComponent>()) | |||
pcc->updateMainWindowTitle(); | |||
} |
@@ -1,76 +0,0 @@ | |||
/* | |||
============================================================================== | |||
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. | |||
============================================================================== | |||
*/ | |||
#pragma once | |||
class EULADialogue : public AlertWindow | |||
{ | |||
public: | |||
EULADialogue() | |||
: AlertWindow ("End User Licence Agreement", | |||
"Please accept the End User Licence Agreement to run the Projucer.", | |||
AlertWindow::NoIcon, | |||
nullptr) | |||
{ | |||
setColour (AlertWindow::backgroundColourId, ProjucerDialogLookAndFeel::getBackgroundColour()); | |||
setColour (AlertWindow::textColourId, ProjucerDialogLookAndFeel::getBrightButtonColour()); | |||
setLookAndFeel (&lookAndFeel); | |||
addButton ("Accept", EULADialogue::accepted); | |||
addButton ("Decline", EULADialogue::declined); | |||
addCustomComponent (&component); | |||
} | |||
enum EULADialogueResult | |||
{ | |||
accepted, | |||
declined | |||
}; | |||
private: | |||
struct EULADialogueComponent : public Component | |||
{ | |||
EULADialogueComponent() | |||
{ | |||
setSize (700, 550); | |||
editor.setSize (getWidth(), getHeight() - 50); | |||
editor.setReadOnly (true); | |||
editor.setCaretVisible (false); | |||
editor.setMultiLine (true, true); | |||
editor.setScrollbarsShown (true); | |||
editor.setFont (Font (Font::getDefaultMonospacedFontName(), 13.0f, Font::plain)); | |||
editor.setText (String (BinaryData::projucer_EULA_txt)); | |||
addAndMakeVisible (editor); | |||
} | |||
TextEditor editor; | |||
}; | |||
EULADialogueComponent component; | |||
ProjucerDialogLookAndFeel lookAndFeel; | |||
}; |
@@ -41,7 +41,7 @@ public: | |||
void paint (Graphics& g) override | |||
{ | |||
ProjucerLookAndFeel::fillWithBackgroundTexture (*this, g); | |||
g.fillAll (findColour (backgroundColourId)); | |||
if (drawable != nullptr) | |||
{ | |||
@@ -70,7 +70,7 @@ public: | |||
} | |||
g.setFont (Font (14.0f, Font::bold)); | |||
g.setColour (findColour (mainBackgroundColourId).contrasting()); | |||
g.setColour (findColour (defaultTextColourId)); | |||
g.drawMultiLineText (facts.joinIntoString ("\n"), 10, 15, getWidth() - 16); | |||
} | |||
@@ -61,7 +61,7 @@ void PathSettingsTab::textPropertyComponentChanged (TextPropertyComponent* textP | |||
Identifier keyName = getKeyForPropertyComponent (textPropertyComponent); | |||
Colour textColour = getAppSettings().isGlobalPathValid (File::getCurrentWorkingDirectory(), keyName, textPropertyComponent->getText()) | |||
? Colours::black | |||
? findColour (widgetTextColourId) | |||
: Colours::red; | |||
textPropertyComponent->setColour (TextPropertyComponent::textColourId, textColour); | |||
@@ -116,10 +116,10 @@ struct AppearanceEditor | |||
void paint (Graphics& g) override | |||
{ | |||
g.fillAll (Colours::darkgrey); | |||
g.fillAll (findColour (backgroundColourId)); | |||
g.setFont (14.0f); | |||
g.setColour (Colours::white); | |||
g.setColour (findColour (defaultTextColourId)); | |||
g.drawFittedText ("Scanning for fonts..", getLocalBounds(), Justification::centred, 2); | |||
const int size = 30; | |||
@@ -174,11 +174,6 @@ struct AppearanceEditor | |||
rebuildProperties(); | |||
addAndMakeVisible (panel); | |||
loadButton.setColour (TextButton::buttonColourId, Colours::lightgrey.withAlpha (0.5f)); | |||
saveButton.setColour (TextButton::buttonColourId, Colours::lightgrey.withAlpha (0.5f)); | |||
loadButton.setColour (TextButton::textColourOffId, Colours::white); | |||
saveButton.setColour (TextButton::textColourOffId, Colours::white); | |||
addAndMakeVisible (loadButton); | |||
addAndMakeVisible (saveButton); | |||
@@ -325,7 +320,7 @@ void AppearanceSettings::showGlobalPreferences (ScopedPointer<Component>& ownerP | |||
new FloatingToolWindow ("Preferences", | |||
"globalPreferencesEditorPos", | |||
new GlobalPreferencesComponent, | |||
ownerPointer, | |||
ownerPointer, false, | |||
500, 500, 500, 500, 500, 500); | |||
} | |||
@@ -370,5 +365,5 @@ GlobalPreferencesComponent::GlobalPreferencesComponent() | |||
preferenceTabs.add (new AppearanceSettingsTab); | |||
for (GlobalPreferencesTab** tab = preferenceTabs.begin(); tab != preferenceTabs.end(); ++tab) | |||
addTab ((*tab)->getName(), findColour(mainBackgroundColourId, true), (*tab)->getContent(), true); | |||
addTab ((*tab)->getName(), findColour (backgroundColourId, true), (*tab)->getContent(), true); | |||
} |
@@ -1,313 +0,0 @@ | |||
/* | |||
============================================================================== | |||
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. | |||
============================================================================== | |||
*/ | |||
#pragma once | |||
class LoginForm : public Component, | |||
private ButtonListener, | |||
private TextEditor::Listener, | |||
private ProjucerLicenses::LoginCallback | |||
{ | |||
public: | |||
LoginForm() | |||
: cancelButton (TRANS("Cancel")), | |||
loginButton (TRANS("Login")), | |||
registerButton (TRANS("Register")), | |||
userIDEditor ("User ID text editor"), | |||
passwordEditor ("Password TextEditor", juce_wchar (0x2022)), | |||
userIDLabel ("User-ID Label", TRANS("Username")), | |||
passwordLabel ("Password Label", TRANS("Password")), | |||
errorLabel ("Error Label", String()), | |||
rememberLoginCheckbox (TRANS("Remember login")), | |||
forgotPasswordButton (TRANS("Forgotten your password?"), | |||
URL ("https://auth.roli.com/forgot-password?referer=projucer")), | |||
rememberLogin (true) | |||
{ | |||
setLookAndFeel (&lookAndFeel); | |||
ScopedPointer<XmlElement> svg (XmlDocument::parse (BinaryData::projucer_login_bg_svg)); | |||
backgroundImage = Drawable::createFromSVG (*svg); | |||
initialiseTextField (passwordEditor, passwordLabel); | |||
addAndMakeVisible (passwordEditor); | |||
initialiseTextField (userIDEditor, userIDLabel); | |||
addAndMakeVisible (userIDEditor); | |||
String userName = ProjucerLicenses::getInstance()->getLoginName(); | |||
userIDEditor.setText (userName.isEmpty() ? getLastUserName() : userName); | |||
initialiseLabel (errorLabel, Font::plain, ProjucerDialogLookAndFeel::getErrorTextColour()); | |||
addChildComponent (errorLabel); | |||
addChildComponent (spinner); | |||
rememberLoginCheckbox.setColour (ToggleButton::textColourId, Colours::white); | |||
rememberLoginCheckbox.setColour (TextEditor::focusedOutlineColourId, Colours::transparentBlack); | |||
rememberLoginCheckbox.setToggleState (rememberLogin, dontSendNotification); | |||
addAndMakeVisible (rememberLoginCheckbox); | |||
rememberLoginCheckbox.addListener (this); | |||
forgotPasswordButton.setColour (HyperlinkButton::textColourId, Colours::white); | |||
forgotPasswordButton.setFont (ProjucerDialogLookAndFeel::getDialogFont().withHeight (lookAndFeel.labelFontSize), false, Justification::topLeft); | |||
addAndMakeVisible (forgotPasswordButton); | |||
initialiseButton (loginButton, KeyPress::returnKey); | |||
addAndMakeVisible (loginButton); | |||
initialiseButton (registerButton); | |||
addAndMakeVisible (registerButton); | |||
initialiseButton (cancelButton, KeyPress::escapeKey); | |||
addAndMakeVisible (cancelButton); | |||
cancelButton.getProperties().set ("isSecondaryButton", true); | |||
centreWithSize (425, 685); | |||
} | |||
~LoginForm() | |||
{ | |||
ProjucerApplication::getApp().hideLoginForm(); | |||
} | |||
//============================================================================== | |||
void paint (Graphics& g) override | |||
{ | |||
g.fillAll (Colour (0xff4d4d4d)); | |||
g.setColour (Colours::black); | |||
backgroundImage->drawWithin (g, getLocalBounds().toFloat(), RectanglePlacement::centred, 1.0f); | |||
} | |||
void resized() override | |||
{ | |||
const int xMargin = 81; | |||
const int yMargin = 132; | |||
const int labelHeight = 24; | |||
const int textFieldHeight = 33; | |||
Rectangle<int> r = getLocalBounds().reduced (xMargin, yMargin); | |||
r.setWidth (r.getWidth() + 1); | |||
Point<int> labelOffset = Point<int> (-6, 4); | |||
userIDLabel.setBounds (r.removeFromTop (labelHeight) + labelOffset); | |||
userIDEditor.setBounds (r.removeFromTop (textFieldHeight)); | |||
passwordLabel.setBounds (r.removeFromTop (labelHeight) + labelOffset); | |||
passwordEditor.setBounds (r.removeFromTop (textFieldHeight)); | |||
r.removeFromTop (6); | |||
rememberLoginCheckbox.setBounds (r.removeFromTop (labelHeight) + Point<int> (-4, 0)); | |||
r.removeFromTop (8); | |||
errorLabel.setBounds (r.removeFromTop (43).withTrimmedLeft (15)); | |||
spinner.setBounds (errorLabel.getBounds().withSizeKeepingCentre (20, 20) + Point<int> (-7, -10)); | |||
const int buttonHeight = 40; | |||
const int buttonMargin = 13; | |||
loginButton.setBounds (r.removeFromTop (buttonHeight)); | |||
r.removeFromTop (buttonMargin); | |||
registerButton.setBounds (r.withHeight (buttonHeight).removeFromLeft ((r.getWidth() - buttonMargin) / 2)); | |||
cancelButton.setBounds (r.withHeight (buttonHeight).removeFromRight ((r.getWidth() - buttonMargin) / 2)); | |||
r.removeFromTop (45); | |||
forgotPasswordButton.setBounds (r.withHeight (labelHeight) + Point<int> (-2, 0)); | |||
} | |||
private: | |||
//============================================================================== | |||
struct Spinner : public Component, | |||
private Timer | |||
{ | |||
Spinner() | |||
{ | |||
setInterceptsMouseClicks (false, false); | |||
} | |||
void paint (Graphics& g) override | |||
{ | |||
getLookAndFeel().drawSpinningWaitAnimation (g, Colours::white, 0, 0, getWidth(), getHeight()); | |||
startTimer (50); | |||
} | |||
void timerCallback() override | |||
{ | |||
if (isVisible()) | |||
repaint(); | |||
else | |||
stopTimer(); | |||
} | |||
}; | |||
//============================================================================== | |||
void initialiseTextField (TextEditor& textField, Label& associatedLabel) | |||
{ | |||
textField.setColour (TextEditor::focusedOutlineColourId, Colours::transparentWhite); | |||
textField.setColour (TextEditor::highlightColourId, ProjucerDialogLookAndFeel::getErrorTextColour()); | |||
textField.setFont (ProjucerDialogLookAndFeel::getDialogFont().withHeight (17)); | |||
textField.addListener (this); | |||
associatedLabel.setColour (Label::textColourId, Colours::white); | |||
addAndMakeVisible (associatedLabel); | |||
} | |||
void initialiseButton (TextButton& button, const int associatedKeyPress = 0) | |||
{ | |||
if (associatedKeyPress != 0) | |||
button.addShortcut (KeyPress (associatedKeyPress)); | |||
button.addListener (this); | |||
} | |||
void initialiseLabel (Label& label, Font::FontStyleFlags fontFlags, Colour textColour) | |||
{ | |||
label.setFont (Font (15.0f, fontFlags)); | |||
label.setJustificationType (Justification::topLeft); | |||
label.setColour (Label::textColourId, textColour); | |||
} | |||
//============================================================================== | |||
void buttonClicked (Button* button) override | |||
{ | |||
if (button == &cancelButton) cancelButtonClicked(); | |||
if (button == &loginButton) loginButtonClicked(); | |||
if (button == ®isterButton) registerButtonClicked(); | |||
if (button == &rememberLoginCheckbox) rememberLoginCheckboxClicked(); | |||
} | |||
void cancelButtonClicked() | |||
{ | |||
if (DialogWindow* parentDialog = findParentComponentOfClass<DialogWindow>()) | |||
parentDialog->exitModalState (-1); | |||
} | |||
void loginButtonClicked() | |||
{ | |||
loginName = userIDEditor.getText(); | |||
getGlobalProperties().setValue ("lastUserName", loginName); | |||
password = passwordEditor.getText(); | |||
if (! isValidEmail (loginName) || password.isEmpty()) | |||
{ | |||
handleInvalidLogin(); | |||
return; | |||
} | |||
loginButton.setEnabled (false); | |||
cancelButton.setEnabled (false); | |||
registerButton.setEnabled (false); | |||
errorLabel.setVisible (false); | |||
spinner.setVisible (true); | |||
ProjucerLicenses::getInstance()->login (loginName, password, rememberLogin, this); | |||
} | |||
void registerButtonClicked() | |||
{ | |||
URL (getServerURL() + "projucer_trial").launchInDefaultBrowser(); | |||
} | |||
void textEditorReturnKeyPressed (TextEditor&) override | |||
{ | |||
loginButtonClicked(); | |||
} | |||
void rememberLoginCheckboxClicked() | |||
{ | |||
rememberLogin = rememberLoginCheckbox.getToggleState(); | |||
} | |||
String getLastUserName() const | |||
{ | |||
return getGlobalProperties().getValue ("lastUserName"); | |||
} | |||
void handleInvalidLogin() | |||
{ | |||
if (!isValidEmail (loginName)) | |||
loginError (TRANS ("Please enter a valid e-mail address"), true); | |||
if (password.isEmpty()) | |||
loginError (TRANS ("Please specify a valid password"), false); | |||
} | |||
bool isValidEmail (const String& email) | |||
{ | |||
return email.isNotEmpty(); | |||
} | |||
void loginError (const String& errorMessage, bool hiliteUserID) override | |||
{ | |||
spinner.setVisible (false); | |||
errorLabel.setText (errorMessage, dontSendNotification); | |||
errorLabel.setVisible (true); | |||
TextEditor& field = hiliteUserID ? userIDEditor : passwordEditor; | |||
field.setColour (TextEditor::focusedOutlineColourId, Colour (0x84F08080)); | |||
field.toFront (true); | |||
loginButton.setEnabled (true); | |||
cancelButton.setEnabled (true); | |||
registerButton.setEnabled (true); | |||
ProjucerApplication::getApp().updateAllBuildTabs(); | |||
} | |||
void loginSuccess (const String& username, const String& apiKey) override | |||
{ | |||
ignoreUnused (username, apiKey); | |||
spinner.setVisible (false); | |||
if (DialogWindow* parentDialog = findParentComponentOfClass<DialogWindow>()) | |||
{ | |||
parentDialog->exitModalState (0); | |||
ProjucerApplication::getApp().updateAllBuildTabs(); | |||
if (ProjucerLicenses::getInstance()->hasFreeToUseLicense()) | |||
{ | |||
AlertWindow::showMessageBoxAsync (AlertWindow::InfoIcon, | |||
"Free to use license info", | |||
"The free-to-use license expires on 31st January 2017 Midnight GMT"); | |||
} | |||
} | |||
} | |||
TextButton cancelButton, loginButton, registerButton; | |||
TextEditor userIDEditor, passwordEditor; | |||
Label userIDLabel, passwordLabel, errorLabel; | |||
ToggleButton rememberLoginCheckbox; | |||
HyperlinkButton forgotPasswordButton; | |||
Spinner spinner; | |||
String loginName, password; | |||
bool rememberLogin; | |||
ScopedPointer<Drawable> backgroundImage; | |||
ProjucerDialogLookAndFeel lookAndFeel; | |||
static String getServerURL() { return "https://my.roli.com/"; } | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (LoginForm) | |||
}; |
@@ -31,8 +31,8 @@ | |||
#include "../Project/jucer_TreeItemTypes.h" | |||
#include "../Utility/jucer_UTF8Component.h" | |||
#include "../Utility/jucer_SVGPathDataComponent.h" | |||
#include "../Utility/jucer_AboutWindowComponent.h" | |||
#include "../Utility/jucer_FloatingToolWindow.h" | |||
#include "../Utility/jucer_DialogLookAndFeel.h" | |||
#include "../LiveBuildEngine/projucer_MessageIDs.h" | |||
#include "../LiveBuildEngine/projucer_CppHelpers.h" | |||
@@ -47,8 +47,7 @@ | |||
#include "../LiveBuildEngine/projucer_ComponentListComp.h" | |||
#include "../LiveBuildEngine/projucer_CompileEngineServer.h" | |||
#include "jucer_ProjucerLicenses.h" | |||
juce_ImplementSingleton (ProjucerLicenses); | |||
juce_ImplementSingleton (CompileEngineDLL); | |||
struct ProjucerAppClasses | |||
{ | |||
@@ -56,8 +55,6 @@ struct ProjucerAppClasses | |||
#include "../LiveBuildEngine/projucer_ErrorListComponent.h" | |||
}; | |||
#include "jucer_LoginForm.h" | |||
#include "jucer_EulaDialogue.h" | |||
#include "jucer_CommandLine.h" | |||
#include "../Project/jucer_ProjectContentComponent.cpp" | |||
@@ -34,7 +34,8 @@ | |||
//============================================================================== | |||
MainWindow::MainWindow() | |||
: DocumentWindow (ProjucerApplication::getApp().getApplicationName(), | |||
Colour::greyLevel (0.6f), | |||
ProjucerApplication::getApp().lookAndFeel.getCurrentColourScheme() | |||
.getUIColour (LookAndFeel_V4::ColourScheme::UIColour::windowBackground), | |||
DocumentWindow::allButtons, | |||
false) | |||
{ | |||
@@ -160,7 +161,6 @@ void MainWindow::setProject (Project* newProject) | |||
createProjectContentCompIfNeeded(); | |||
getProjectContentComponent()->setProject (newProject); | |||
currentProject = newProject; | |||
getProjectContentComponent()->updateMainWindowTitle(); | |||
ProjucerApplication::getCommandManager().commandStatusChanged(); | |||
} | |||
@@ -301,26 +301,6 @@ void MainWindow::activeWindowStatusChanged() | |||
} | |||
} | |||
void MainWindow::updateTitle (const String& documentName) | |||
{ | |||
String name (ProjucerApplication::getApp().getApplicationName()); | |||
if (currentProject != nullptr) | |||
{ | |||
String projectName (currentProject->getDocumentTitle()); | |||
if (currentProject->getFile().getFileNameWithoutExtension() != projectName) | |||
projectName = currentProject->getFile().getFileName(); | |||
name << " - " << projectName; | |||
} | |||
if (documentName.isNotEmpty()) | |||
name << " - " << documentName; | |||
setName (name); | |||
} | |||
void MainWindow::showNewProjectWizard() | |||
{ | |||
jassert (currentProject == nullptr); | |||
@@ -445,7 +425,7 @@ void MainWindowList::openDocument (OpenDocumentManager::Document* doc, bool grab | |||
} | |||
} | |||
getOrCreateFrontmostWindow()->getProjectContentComponent()->showDocument (doc, grabFocus); | |||
getFrontmostWindow()->getProjectContentComponent()->showDocument (doc, grabFocus); | |||
} | |||
bool MainWindowList::openFile (const File& file) | |||
@@ -473,7 +453,7 @@ bool MainWindowList::openFile (const File& file) | |||
} | |||
if (file.exists()) | |||
return getOrCreateFrontmostWindow()->openFile (file); | |||
return getFrontmostWindow()->openFile (file); | |||
return false; | |||
} | |||
@@ -487,14 +467,19 @@ MainWindow* MainWindowList::createNewMainWindow() | |||
return w; | |||
} | |||
MainWindow* MainWindowList::getOrCreateFrontmostWindow() | |||
MainWindow* MainWindowList::getFrontmostWindow (bool createIfNotFound) | |||
{ | |||
if (windows.size() == 0) | |||
{ | |||
MainWindow* w = createNewMainWindow(); | |||
avoidSuperimposedWindows (w); | |||
w->makeVisible(); | |||
return w; | |||
if (createIfNotFound) | |||
{ | |||
MainWindow* w = createNewMainWindow(); | |||
avoidSuperimposedWindows (w); | |||
w->makeVisible(); | |||
return w; | |||
} | |||
return nullptr; | |||
} | |||
for (int i = Desktop::getInstance().getNumComponents(); --i >= 0;) | |||
@@ -522,13 +507,6 @@ MainWindow* MainWindowList::getOrCreateEmptyWindow() | |||
return createNewMainWindow(); | |||
} | |||
void MainWindowList::updateAllWindowTitles() | |||
{ | |||
for (int i = 0; i < windows.size(); ++i) | |||
if (ProjectContentComponent* pc = windows.getUnchecked(i)->getProjectContentComponent()) | |||
pc->updateMainWindowTitle(); | |||
} | |||
void MainWindowList::avoidSuperimposedWindows (MainWindow* const mw) | |||
{ | |||
for (int i = windows.size(); --i >= 0;) | |||
@@ -62,8 +62,6 @@ public: | |||
void activeWindowStatusChanged() override; | |||
void updateTitle (const String& documentName); | |||
ProjectContentComponent* getProjectContentComponent() const; | |||
//============================================================================== | |||
@@ -98,7 +96,7 @@ public: | |||
bool openFile (const File& file); | |||
MainWindow* createNewMainWindow(); | |||
MainWindow* getOrCreateFrontmostWindow(); | |||
MainWindow* getFrontmostWindow (bool createIfNotFound = true); | |||
MainWindow* getOrCreateEmptyWindow(); | |||
Project* getFrontmostProject(); | |||
@@ -106,8 +104,6 @@ public: | |||
void reopenLastProjects(); | |||
void saveCurrentlyOpenProjectList(); | |||
void updateAllWindowTitles(); | |||
void avoidSuperimposedWindows (MainWindow*); | |||
void sendLookAndFeelChange(); | |||
@@ -262,7 +262,6 @@ bool OpenDocumentManager::saveAll() | |||
if (! documents.getUnchecked (i)->save()) | |||
return false; | |||
ProjucerApplication::getApp().mainWindowList.updateAllWindowTitles(); | |||
ProjucerApplication::getCommandManager().commandStatusChanged(); | |||
} | |||
@@ -1,138 +0,0 @@ | |||
/* | |||
============================================================================== | |||
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. | |||
============================================================================== | |||
*/ | |||
#pragma once | |||
//============================================================================== | |||
struct ProjucerLicenses : private DeletedAtShutdown | |||
{ | |||
ProjucerLicenses() | |||
{ | |||
dll.initialise (crashCallback, quitCallback, false); | |||
} | |||
juce_DeclareSingleton (ProjucerLicenses, false) | |||
//============================================================================== | |||
struct LoginCallback | |||
{ | |||
virtual ~LoginCallback() {} | |||
// always called on message thread | |||
virtual void loginError (const String& errorMessage, bool hiliteUserID) = 0; | |||
virtual void loginSuccess (const String& username, const String& apiKey) = 0; | |||
}; | |||
// Log the user in. This will return immedietely | |||
void login (const String& userLoginName, const String& userPassword, | |||
bool remainLoggedIn, LoginCallback* callback) | |||
{ | |||
if (dll.isLoaded()) | |||
{ | |||
jassert (callback != nullptr); | |||
jassert (MessageManager::getInstance()->isThisTheMessageThread()); | |||
userCallback = callback; | |||
dll.projucer_login (userLoginName.toRawUTF8(), userPassword.toRawUTF8(), | |||
remainLoggedIn, staticCallbackFunction, this); | |||
} | |||
else | |||
{ | |||
callback->loginError ("The Projucer DLL is missing", false); | |||
} | |||
} | |||
// Log the user out. Only call on the message thread! | |||
void logout() | |||
{ | |||
jassert (MessageManager::getInstance()->isThisTheMessageThread()); | |||
if (dll.isLoaded()) | |||
dll.projucer_logout(); | |||
} | |||
bool isLoggedIn() const noexcept | |||
{ | |||
return dll.isLoaded() && dll.projucer_isLoggedIn(); | |||
} | |||
String getLoginName() const noexcept | |||
{ | |||
if (dll.isLoaded()) | |||
{ | |||
char name[256] = { 0 }; | |||
dll.projucer_getLoginName (name); | |||
return String::fromUTF8 (name); | |||
} | |||
return {}; | |||
} | |||
bool isDLLPresent() const | |||
{ | |||
return dll.isLoaded(); | |||
} | |||
bool hasLiveCodingLicence() const | |||
{ | |||
return isDLLPresent() && dll.projucer_hasLiveCodingLicence(); | |||
} | |||
bool hasFreeToUseLicense() const | |||
{ | |||
return isDLLPresent() && dll.projucer_hasLicense ("ProjucerFreeToUse"); | |||
} | |||
bool retryLoadDll() | |||
{ | |||
dll.tryLoadDll(); | |||
return dll.isLoaded(); | |||
} | |||
private: | |||
CompileEngineDLL dll; | |||
LoginCallback* userCallback = nullptr; | |||
void callbackFunction (const char* errorMessage, const char* username, const char* apiKey) | |||
{ | |||
jassert (userCallback != nullptr); | |||
if (userCallback != nullptr) | |||
{ | |||
if (errorMessage != nullptr) | |||
userCallback->loginError (String::fromUTF8 (errorMessage), false); | |||
else | |||
userCallback->loginSuccess (String::fromUTF8 (username), String::fromUTF8 (apiKey)); | |||
} | |||
} | |||
static void staticCallbackFunction (void* userInfo, const char* errorMessage, const char* username, const char* apiKey) | |||
{ | |||
static_cast<ProjucerLicenses*> (userInfo)->callbackFunction (errorMessage, username, apiKey); | |||
} | |||
static void crashCallback (const char*) {} | |||
static void quitCallback() {} | |||
}; |
@@ -0,0 +1,21 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<svg width="19px" height="23px" viewBox="0 0 19 23" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> | |||
<!-- Generator: Sketch 43.1 (39012) - http://www.bohemiancoding.com/sketch --> | |||
<title>androd</title> | |||
<desc>Created with Sketch.</desc> | |||
<defs></defs> | |||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> | |||
<g id="Artboard" transform="translate(-71.000000, -8.000000)" fill-rule="nonzero"> | |||
<g id="android" transform="translate(67.000000, 6.000000)"> | |||
<g id="androd" transform="translate(4.149701, 2.592000)"> | |||
<path d="M12.0887784,1.906092 L13.1751916,0.325404 C13.2397006,0.231444 13.2236407,0.108108 13.1392994,0.049788 C13.0550659,-0.008208 12.9342395,0.020466 12.8702156,0.114534 L11.7411198,1.75662 C10.9970299,1.462914 10.1707545,1.29924 9.29985629,1.29924 C8.42895808,1.29924 7.60246707,1.462752 6.85843114,1.75662 L5.72949701,0.11448 C5.66477246,0.02052 5.54416168,-0.008262 5.45987425,0.049734 C5.37558683,0.107892 5.35958084,0.231282 5.42408982,0.32535 L6.51088024,1.906038 C4.78293413,2.711502 3.57116766,4.242078 3.41676647,6.028398 L15.1822994,6.028398 C15.0284371,4.242078 13.8166168,2.711556 12.0887784,1.906092" id="Shape" fill="#9FBF3B"></path> | |||
<path d="M6.84194012,4.397652 C6.48231737,4.397652 6.19092216,4.105674 6.19092216,3.745386 C6.19092216,3.385152 6.48215569,3.093066 6.84194012,3.093066 C7.20129341,3.093066 7.49258084,3.385044 7.49258084,3.745386 C7.49263473,4.10562 7.20129341,4.397652 6.84194012,4.397652" id="Shape" fill="#FFFFFF"></path> | |||
<path d="M11.7571796,4.397652 C11.3978263,4.397652 11.106485,4.105674 11.106485,3.745386 C11.106485,3.385044 11.3978263,3.093066 11.7571796,3.093066 C12.1169102,3.093066 12.4081437,3.385152 12.4081437,3.745386 C12.4081437,4.10562 12.1168024,4.397652 11.7571796,4.397652" id="Shape" fill="#FFFFFF"></path> | |||
<path d="M2.66135928,13.478292 C2.66135928,14.204592 2.07371856,14.793408 1.34881437,14.793408 L1.34881437,14.793408 C0.623964072,14.793408 0.0363233533,14.204592 0.0363233533,13.478292 L0.0363233533,8.15886 C0.0363233533,7.43256 0.623964072,6.843744 1.34881437,6.843744 L1.34881437,6.843744 C2.07371856,6.843744 2.66135928,7.43256 2.66135928,8.15886 L2.66135928,13.478292 Z" id="Shape" fill="#9FBF3B"></path> | |||
<path d="M3.4165509,6.884406 L3.4165509,16.491816 C3.4165509,17.06238 3.87819162,17.524998 4.44777844,17.524998 L5.66752096,17.524998 L5.66752096,20.481174 C5.66752096,21.207528 6.25510778,21.79629 6.98001198,21.79629 C7.70491617,21.79629 8.29255689,21.207528 8.29255689,20.481174 L8.29255689,17.524998 L10.3065629,17.524998 L10.3065629,20.481174 C10.3065629,21.207528 10.8940958,21.79629 11.6190539,21.79629 C12.344012,21.79629 12.9315449,21.207528 12.9315449,20.481174 L12.9315449,17.524998 L14.1512874,17.524998 C14.7208743,17.524998 15.1826228,17.06265 15.1826228,16.491816 L15.1826228,6.884406 L3.4165509,6.884406 Z" id="Shape" fill="#9FBF3B"></path> | |||
<path d="M15.9377605,13.478292 C15.9377605,14.204592 16.5253473,14.793408 17.2502515,14.793408 L17.2502515,14.793408 C17.9751018,14.793408 18.5627425,14.204592 18.5627425,13.478292 L18.5627425,8.15886 C18.5627425,7.43256 17.9751018,6.843744 17.2502515,6.843744 L17.2502515,6.843744 C16.5253473,6.843744 15.9377605,7.43256 15.9377605,8.15886 L15.9377605,13.478292 Z" id="Shape" fill="#9FBF3B"></path> | |||
</g> | |||
</g> | |||
</g> | |||
</g> | |||
</svg> |
@@ -0,0 +1,17 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> | |||
<!-- Generator: Sketch 43.1 (39012) - http://www.bohemiancoding.com/sketch --> | |||
<title>Group</title> | |||
<desc>Created with Sketch.</desc> | |||
<defs></defs> | |||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> | |||
<g id="Artboard" transform="translate(-33.000000, -4.000000)"> | |||
<g id="Group" transform="translate(33.000000, 4.000000)"> | |||
<polygon id="Rectangle-5-Copy-4" fill="#FD3535" points="7.36842105 -1.87919855e-13 9.47368421 4.21052632 9.47368421 9.47368421 4.21052632 9.47368421 6.83692868e-14 7.36842105 3.55271368e-15 -1.67409946e-14"></polygon> | |||
<polygon id="Rectangle-5-Copy-5" fill="#6AC300" transform="translate(15.263158, 4.736842) scale(-1, 1) translate(-15.263158, -4.736842) " points="17.8947368 -1.87919855e-13 20 4.21052632 20 9.47368421 14.7368421 9.47368421 10.5263158 7.36842105 10.5263158 -1.67409946e-14"></polygon> | |||
<polygon id="Rectangle-5-Copy-7" fill="#EBBF20" transform="translate(4.736842, 15.263158) scale(1, -1) translate(-4.736842, -15.263158) " points="7.36842105 10.5263158 9.47368421 14.7368421 9.47368421 20 4.21052632 20 6.83692868e-14 17.8947368 3.55271368e-15 10.5263158"></polygon> | |||
<polygon id="Rectangle-5-Copy-6" fill="#1F6CE9" transform="translate(15.263158, 15.263158) scale(-1, -1) translate(-15.263158, -15.263158) " points="17.8947368 10.5263158 20 14.7368421 20 20 14.7368421 20 10.5263158 17.8947368 10.5263158 10.5263158"></polygon> | |||
</g> | |||
</g> | |||
</g> | |||
</svg> |
@@ -0,0 +1,51 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<svg width="63px" height="75px" viewBox="0 0 63 75" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> | |||
<!-- Generator: Sketch 43.1 (39012) - http://www.bohemiancoding.com/sketch --> | |||
<title>Android</title> | |||
<desc>Created with Sketch.</desc> | |||
<defs></defs> | |||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> | |||
<g id="Artboard" transform="translate(-115.000000, -15.000000)" fill-rule="nonzero"> | |||
<g id="Android" transform="translate(115.000000, 15.000000)"> | |||
<path d="M46.1535022,26.1203623 C46.9768865,27.8918861 47.8751239,29.6135078 48.6735572,31.3850316 C50.2205216,34.8033239 51.3932204,38.3962736 51.8922412,42.1139784 C52.391262,45.8316832 52.1667026,49.6741432 50.9940038,53.2171908 C49.6715987,57.2343081 47.2014459,60.8023067 44.1324681,63.7465293 C40.5145674,67.2147237 35.8986252,69.8844849 30.8834663,70.0840932 C27.6148802,70.2088484 24.3712451,69.28566 21.5018756,67.7636466 C19.0816248,66.4911436 16.8609823,64.7944729 15.0894586,62.6985856 C13.3179348,60.6026983 12.0204807,58.1075944 11.3967048,55.4378333 C10.6481736,52.1442961 10.9974881,48.6511506 12.1202849,45.4823687 C12.9187182,43.2118241 14.116368,41.0909858 14.9896544,38.8453923 C15.9128428,36.3752394 16.4368147,33.7553803 17.6843666,31.4099826 C18.8071634,29.2891443 20.478883,27.4926695 21.3771204,25.272027 C21.9010922,23.9496219 22.1506026,22.5274127 22.4749661,21.1301545 C22.8242807,19.7328963 23.2983504,18.3605892 24.2464899,17.2627434 C25.3692867,15.9652894 27.0659573,15.2666603 28.787579,15.067052 C30.4842497,14.8674437 32.2308224,15.1419051 33.902542,15.5161707 C35.2498981,15.8155832 36.5473522,16.1898488 37.8448062,16.6639185 C38.9426519,17.0631351 40.0404976,17.5122538 40.9886371,18.1859319 C42.2860912,19.1091203 43.2841327,20.4065744 44.0576149,21.8038326 C44.8310972,23.2010907 45.5047752,24.6732021 46.1535022,26.1203623" id="path29670-2" fill="#020204"></path> | |||
<path d="M32.3071772,70.3379664 C33.6794843,70.4128195 35.0517915,70.5625257 36.3991476,70.7621341 C37.5967974,70.9367913 38.7694963,71.1863017 39.9671462,71.4607632 C41.813523,71.9098819 43.6349489,72.4837558 45.5312279,72.5336578 C46.0302487,72.5586089 46.5292694,72.5336578 47.0282902,72.4089026 C47.527311,72.3090985 47.9764297,72.1094902 48.3756463,71.7851267 C48.9495202,71.3110569 49.3237858,70.6124278 49.4734921,69.8888477 C49.6231983,69.1652676 49.5233941,68.3917853 49.3237858,67.6931563 C48.8996182,66.270947 47.9764297,65.0483461 47.2278985,63.7758431 C46.8037309,63.052263 46.4045142,62.2787808 45.9304445,61.5801517 C45.4563748,60.8815226 44.8825009,60.2078445 44.1838718,59.7587258 C43.1858302,59.1099988 41.9632293,58.9103905 40.7905304,59.0351457 C39.6178316,59.1599009 38.4950348,59.5840685 37.4470912,60.1080404 C35.9749799,60.8565715 34.6026728,61.9045152 33.8042395,63.3516754 C33.5297781,63.8506962 33.3301698,64.3996191 33.0806594,64.9235909 C32.8561,65.4475627 32.5566875,65.9715346 32.1574709,66.3707512 C31.7083522,66.8198699 31.1344783,67.1442334 30.6604086,67.5933521 C30.4358492,67.8179114 30.2362409,68.0674218 30.1114857,68.3668343 C29.9867305,68.6662468 29.9617795,69.0155613 30.0615836,69.3149738 C30.1364368,69.5145821 30.2611919,69.7141904 30.4358492,69.8389456 C30.6105065,69.9886518 30.8101148,70.088456 31.0097231,70.1633091 C31.4338908,70.2880643 31.8830095,70.3130154 32.3071772,70.3379664" id="path29676-3" fill="#020204"></path> | |||
<path d="M27.9409416,70.2361543 C26.7931938,70.2611053 25.6703971,70.4607136 24.5476003,70.710224 C23.4747056,70.9347834 22.401811,71.1842938 21.3538673,71.4587552 C19.5573925,71.9328249 17.7858687,72.4817478 15.9394918,72.5316499 C15.4654221,72.5316499 14.9664013,72.5066988 14.4923316,72.4068947 C14.0182618,72.3070905 13.5691431,72.1074822 13.1699265,71.8080697 C12.5960526,71.334 12.221787,70.6603219 12.0720808,69.9117908 C11.9223745,69.1632596 12.0221787,68.4147284 12.221787,67.7160993 C12.6459547,66.2938901 13.5441921,65.0712892 14.2927233,63.7987862 C14.7168909,63.0752061 15.0911565,62.3017238 15.5402752,61.6030947 C15.9893939,60.9044656 16.5383168,60.2307876 17.2618969,59.7567179 C18.2100364,59.1329419 19.4076863,58.9083825 20.5554341,59.0331377 C21.7031819,59.1578929 22.8010276,59.5571095 23.7990692,60.1060324 C25.2212784,60.8795146 26.5187324,61.9524093 27.3421167,63.3496675 C27.9159906,64.322758 28.2653052,65.4455548 28.9389832,66.3687432 C29.3132488,66.867764 29.7623675,67.2919317 30.06178,67.8159035 C30.2114862,68.0903649 30.3112904,68.3648263 30.3611924,68.6891898 C30.3861435,68.9886023 30.3112904,69.3129658 30.1615841,69.5624762 C30.0368289,69.7371335 29.8871227,69.8618887 29.7124654,69.9616928 C29.5378081,70.061497 29.3381998,70.1363501 29.1385915,70.1613012 C28.7643259,70.2361543 28.3401583,70.2361543 27.9409416,70.2361543" id="path29676-7-1" fill="#020204"></path> | |||
<path d="M21.3925244,22.15769 C21.2428181,20.211509 21.2677692,18.290279 21.192916,16.3440979 C21.1180629,14.47277 20.9434057,12.6263931 21.0182588,10.7550652 C21.0931119,8.85878618 21.3925244,6.93755617 22.2408597,5.24088552 C23.089195,3.54421486 24.4615022,2.09705459 26.1332218,1.19881718 C27.7051373,0.350481853 29.5265631,-0.0237837335 31.2980869,0.0011673056 C33.7183377,0.0261183447 36.1635395,0.749698478 38.1097206,2.17190771 C39.3323215,3.07014511 40.3802651,4.21789291 41.2036494,5.49039591 C41.9022785,6.58824163 42.4512014,7.7858915 42.7755649,9.03344346 C43.474194,11.6034005 43.2995367,14.2981127 43.4492429,16.9678739 C43.5739981,19.4879288 43.9732147,22.0079838 43.8484595,24.5280387 C43.8235085,25.0769616 43.7486554,25.6258845 43.524096,26.1249052 C43.2745856,26.598975 42.875369,26.9981916 42.4262503,27.247702 C41.9521806,27.5221634 41.4531598,27.6718697 40.9042369,27.7467228 C39.8562933,27.9213801 38.7833986,27.7966249 37.7105039,27.896429 C36.1635395,28.0461352 34.6914282,28.6200091 33.1694148,28.8445685 C31.347989,29.1190299 29.476661,28.9194216 27.6552352,28.8445685 C26.906704,28.8196175 26.1831239,28.7946664 25.4345927,28.7198133 C24.7110126,28.6200091 23.9624814,28.4453519 23.3137544,28.0960373 C22.9145377,27.871478 22.5402722,27.5970165 22.2408597,27.272653 C21.9414472,26.9233385 21.7168879,26.5241219 21.5921327,26.0750032 C21.4174754,25.4013251 21.5172796,24.727647 21.5172796,24.029018 C21.5172796,23.405242 21.4424264,22.781466 21.3925244,22.15769" id="path28712-2" fill="#020204"></path> | |||
<path d="M24.4857731,22.0829382 C24.2362627,22.4073017 24.0616054,22.8065184 23.9618013,23.205735 C23.8619971,23.6049516 23.812095,24.0291193 23.812095,24.453287 C23.787144,25.3016223 23.8370461,26.1499576 23.6124867,26.9483909 C23.3879274,27.8216772 22.8390045,28.5702084 22.3150327,29.2937885 C21.4167953,30.5662915 20.5185579,31.8637456 20.0694392,33.3358569 C19.7949777,34.2340943 19.7201246,35.1822338 19.8199288,36.1303733 C18.8218872,37.6024846 17.9486009,39.1744 17.2250207,40.8211686 C16.127175,43.2913215 15.3786438,45.9361316 15.1041824,48.6308438 C14.7798189,51.924381 15.2039866,55.3426734 16.5014406,58.3867001 C17.4495801,60.5823916 18.8468383,62.6034257 20.6682641,64.1753412 C21.5914526,64.9737744 22.6144452,65.6474525 23.7122909,66.1963754 C27.5048488,68.0677033 32.1956442,68.0677033 35.9383,66.0716202 C37.8844811,65.0236765 39.5312497,63.5016631 41.1281162,61.9796498 C42.0762557,61.0564613 43.0243951,60.1083218 43.7729263,58.9855251 C45.1701845,56.8397357 45.6692053,54.2448276 45.9686178,51.6998216 C46.4925896,47.2585367 46.5175406,42.5427903 44.5713596,38.525673 C43.8976815,37.1284148 42.9994441,35.8559118 41.9265494,34.7580661 C41.652088,32.8118851 41.0782141,30.9156061 40.2548298,29.1440823 C39.6560049,27.8466283 38.9324247,26.6240274 38.3835019,25.3265733 C38.1589425,24.8026015 37.9593342,24.2536786 37.7098238,23.7297068 C37.4603134,23.205735 37.160901,22.7067142 36.7367333,22.3074976 C36.3125656,21.908281 35.7636428,21.6088685 35.2147199,21.4092602 C34.640846,21.2346029 34.0669721,21.1347988 33.4681472,21.1098477 C32.2704973,21.0599456 31.0977985,21.2096519 29.9001486,21.1597498 C28.9520091,21.1098477 28.0038696,20.9601415 27.0557301,21.0100436 C26.5816604,21.0349946 26.1075906,21.1347988 25.6584719,21.309456 C25.2093532,21.4841133 24.7851856,21.7086727 24.4857731,22.0829382" id="path29719-5" fill="#FDFDFB"></path> | |||
<path d="M25.1049189,11.0038778 C24.6558002,11.0288289 24.2316326,11.2284372 23.9072691,11.5278496 C23.5829056,11.8272621 23.3583462,12.2264787 23.20864,12.6506464 C22.9341785,13.4989817 22.9840806,14.4221702 23.0589337,15.2954566 C23.1088358,16.0938898 23.1836889,16.9172741 23.4831014,17.6658053 C23.6328076,18.0400709 23.857367,18.3893854 24.1318284,18.6887979 C24.4062898,18.9882103 24.7805554,19.1878187 25.154821,19.2876228 C25.5290866,19.387427 25.9033522,19.3624759 26.2776178,19.2377207 C26.6269323,19.1129655 26.9762469,18.9133572 27.2257573,18.6638468 C27.6249739,18.2895812 27.8744843,17.7656094 28.0491416,17.2416376 C28.1988478,16.7176658 28.2487499,16.1437919 28.2487499,15.594869 C28.2487499,14.8962399 28.1489457,14.2225619 27.9243864,13.5488838 C27.699827,12.9001568 27.3754635,12.2763808 26.8764427,11.77736 C26.6518834,11.5278496 26.3774219,11.3282413 26.0780095,11.1785351 C25.778597,11.0787309 25.4542335,10.9789268 25.1049189,11.0038778" id="path28795-9-5" fill="#FDFDFB"></path> | |||
<path d="M32.7547573,11.5576557 C32.0561282,12.0317255 31.4822543,12.7054035 31.2077928,13.5038368 C30.8584783,14.5018783 30.9832335,15.6246751 31.332548,16.6227167 C31.6818626,17.6457093 32.2806875,18.6187998 33.1789249,19.2425758 C33.6280436,19.5419882 34.1520155,19.7665476 34.6759873,19.8164497 C35.2249101,19.8913028 35.773833,19.7914986 36.2479027,19.5419882 C36.8467277,19.2425758 37.2708953,18.6936529 37.5703078,18.094828 C37.8447692,17.496003 37.9695244,16.822325 37.9944755,16.173598 C38.0443776,15.3252626 37.9695244,14.4769273 37.695063,13.678494 C37.3956505,12.8052077 36.8467277,12.0067744 36.0732455,11.5077536 C35.6989799,11.2582433 35.2498612,11.083586 34.8007425,11.0336839 C34.3516238,10.9588308 33.877554,11.0087329 33.4533864,11.1833901 C33.1789249,11.2831943 32.9543656,11.4079495 32.7547573,11.5576557" id="path28795-3" fill="#FDFDFB"></path> | |||
<g id="g28965-1" transform="translate(33.000000, 13.000000)" fill="#020204"> | |||
<path d="M1.79647481,0.0998041564 C1.54696442,0.124755195 1.27250299,0.199608313 1.04794364,0.349314547 C0.82338429,0.499020782 0.648727016,0.673678056 0.499020782,0.898237407 C0.199608313,1.32240507 0.0748531173,1.84637689 0.0499020782,2.37034871 C0.0249510391,2.76956534 0.0748531173,3.16878196 0.199608313,3.51809651 C0.324363508,3.8923621 0.54892286,4.24167665 0.848335329,4.49118704 C1.1477478,4.74069743 1.54696442,4.89040366 1.94618105,4.9153547 C2.34539767,4.94030574 2.7446143,4.81555055 3.09392885,4.59099119 C3.36839028,4.41633392 3.56799859,4.16682353 3.71770482,3.86741106 C3.86741106,3.59294963 3.96721522,3.26858612 3.99216625,2.94422261 C4.06701937,2.39529975 3.99216625,1.79647481 3.71770482,1.29745403 C3.46819443,0.798433251 3.01907573,0.374265586 2.49510391,0.174657274 C2.27054456,0.124755195 2.02103417,0.0748531173 1.79647481,0.0998041564" id="path28879-6"></path> | |||
</g> | |||
<g id="g29497-8" transform="translate(24.000000, 14.000000)" fill="#020204"> | |||
<path d="M0.224559352,1.42220923 C0.124755195,1.97113209 0.124755195,2.56995703 0.324363508,3.09392885 C0.449118704,3.44324339 0.673678056,3.7676069 0.923188446,4.04206833 C1.09784572,4.21672561 1.27250299,4.39138288 1.49706235,4.49118704 C1.7216217,4.59099119 1.97113209,4.64089327 2.22064248,4.59099119 C2.44520183,4.54108912 2.64481014,4.39138288 2.76956534,4.21672561 C2.91927157,4.04206833 2.99412469,3.81750898 3.06897781,3.61790067 C3.26858612,2.96917365 3.24363508,2.27054456 3.04402677,1.64676858 C2.89432053,1.17269884 2.66976118,0.723580134 2.2954956,0.424167665 C2.12083832,0.27446143 1.92123001,0.149706235 1.67171962,0.0998041564 C1.44716027,0.0499020782 1.19764988,0.0499020782 0.998041564,0.149706235 C0.773482212,0.249510391 0.573873899,0.449118704 0.474069743,0.698629095 C0.349314547,0.923188446 0.27446143,1.17269884 0.224559352,1.42220923" id="path29453-9"></path> | |||
</g> | |||
<g id="g29634-9" transform="translate(22.999845, 16.000000)"> | |||
<path d="M0,5.72292607 C0.0249510391,5.79777918 0.0499020782,5.8726323 0.0748531173,5.92253438 C0.149706235,6.02233853 0.249510391,6.12214269 0.349314547,6.19699581 C0.449118704,6.27184893 0.573873899,6.34670204 0.673678056,6.39660412 C1.24755195,6.77086971 1.7216217,7.26989049 2.14578936,7.81881335 C2.71966326,8.54239348 3.21868404,9.36577777 3.96721522,9.88974959 C4.49118704,10.2640152 5.13991405,10.4885745 5.78864107,10.5384766 C6.56212328,10.6133297 7.31065445,10.4885745 8.05918563,10.2640152 C8.73286368,10.0644069 9.40654174,9.78994544 10.0053667,9.41567985 C11.1531145,8.71705076 12.101254,7.66910712 13.373757,7.19503737 C13.6482184,7.09523322 13.9476309,7.0203801 14.1971412,6.8956249 C14.4716027,6.77086971 14.7211131,6.57126139 14.8458683,6.321751 C14.9706235,6.07224061 14.9706235,5.77282814 14.9955745,5.49836671 C15.0454766,5.19895424 15.1452807,4.89954178 15.1951828,4.60012931 C15.2450849,4.30071684 15.2450849,3.97635333 15.1203297,3.7018919 C15.0205255,3.47733255 14.8209172,3.30267527 14.5963579,3.17792008 C14.3717985,3.05316488 14.1222881,3.0032628 13.8727777,3.0032628 C13.373757,2.97831177 12.8747362,3.10306696 12.3757154,3.15296904 C11.7269884,3.20287112 11.0533103,3.128018 10.3796323,3.15296904 C9.55624797,3.17792008 8.73286368,3.35257735 7.90947939,3.40247943 C6.96133991,3.45238151 6.03815146,3.30267527 5.09001198,3.2527732 C4.69079535,3.22782216 4.26662769,3.22782216 3.86741106,3.30267527 C3.46819443,3.37752839 3.06897781,3.50228359 2.7446143,3.75179398 C2.42025079,3.97635333 2.14578936,4.2757658 1.84637689,4.55022723 C1.69667066,4.67498242 1.54696442,4.79973762 1.34735611,4.87459074 C1.1477478,4.94944385 0.973090525,5.02429697 0.773482212,4.99934593 C0.673678056,4.99934593 0.573873899,4.97439489 0.474069743,4.99934593 C0.424167665,5.02429697 0.349314547,5.04924801 0.324363508,5.09915009 C0.299412469,5.14905217 0.249510391,5.19895424 0.199608313,5.24885632 C0.124755195,5.44846464 0.0499020782,5.57321983 0,5.72292607" id="path28461-2" fill="#FFB510"></path> | |||
<g id="path27476-7-8" transform="translate(0.000000, 3.000000)" fill="#604405"> | |||
<path d="M1.52201338,1.32240507 C1.19764988,1.52201338 0.873286368,1.74657274 0.54892286,1.97113209 C0.374265586,2.09588728 0.224559352,2.22064248 0.124755195,2.39529975 C0.0748531173,2.52005495 0.0499020782,2.66976118 0.0499020782,2.81946742 L0.0499020782,3.24363508 C0.0249510391,3.34343924 0,3.44324339 0,3.54304755 C0,3.59294963 0,3.64285171 0.0249510391,3.69275379 C0.0499020782,3.74265586 0.0499020782,3.79255794 0.0998041564,3.81750898 C0.149706235,3.86741106 0.199608313,3.8923621 0.249510391,3.91731314 C0.299412469,3.94226418 0.374265586,3.94226418 0.424167665,3.96721522 C0.723580134,4.04206833 0.973090525,4.21672561 1.19764988,4.41633392 C1.42220923,4.61594223 1.62181754,4.84050158 1.84637689,5.0401099 C2.47015287,5.56408172 3.3184882,5.76369003 4.14187249,5.78864107 C4.96525678,5.81359211 5.76369003,5.63893484 6.56212328,5.46427756 C7.18589926,5.31457133 7.80967524,5.16486509 8.40850017,4.96525678 C9.33168862,4.61594223 10.180024,4.11692145 10.9285551,3.46819443 C11.2529186,3.16878196 11.5772821,2.84441846 11.9515477,2.6198591 C12.2759112,2.42025079 12.6501768,2.27054456 12.9994914,2.07093624 C13.0244424,2.04598521 13.0493934,2.04598521 13.0992955,2.02103417 C13.1242466,1.99608313 13.1491976,1.97113209 13.1741486,1.94618105 C13.1990997,1.89627897 13.1990997,1.82142585 13.1741486,1.77152378 C13.1491976,1.7216217 13.1242466,1.67171962 13.0743445,1.62181754 C13.0244424,1.57191546 12.9745403,1.52201338 12.9246383,1.47211131 C12.5753237,1.17269884 12.0763029,1.04794364 11.6271842,1.0229926 C11.1531145,0.998041564 10.6790447,1.0229926 10.229926,0.923188446 C9.80575836,0.848335329 9.3815907,0.698629095 8.95742303,0.54892286 C8.50830433,0.399216625 8.05918563,0.299412469 7.61006692,0.224559352 C6.53717224,0.0499020782 5.43932652,0.0748531173 4.36643184,0.299412469 C3.36839028,0.424167665 2.39529975,0.798433251 1.52201338,1.32240507" id="Shape"></path> | |||
</g> | |||
<path d="M1.99608313,2.36612373 C1.52201338,2.69048723 1.07289468,3.08970386 0.723580134,3.53882256 C0.523971821,3.78833295 0.324363508,4.08774542 0.224559352,4.38715789 C0.149706235,4.63666828 0.124755195,4.88617867 0.0499020782,5.1606401 C0.0249510391,5.26044426 0,5.36024842 0,5.46005257 C0,5.50995465 0,5.55985673 0.0249510391,5.60975881 C0.0499020782,5.65966089 0.0748531173,5.70956296 0.0998041564,5.734514 C0.149706235,5.78441608 0.224559352,5.83431816 0.324363508,5.83431816 C0.399216625,5.8592692 0.474069743,5.8592692 0.573873899,5.8592692 C0.948139486,5.90917128 1.27250299,6.08382855 1.57191546,6.28343686 C1.87132793,6.48304518 2.14578936,6.73255557 2.47015287,6.93216388 C3.14383093,7.35633154 3.96721522,7.55593986 4.76564847,7.5808909 C5.56408172,7.60584193 6.38746601,7.48108674 7.16094822,7.3313805 C7.7847242,7.20662531 8.40850017,7.05691907 9.00732511,6.83235972 C9.93051356,6.48304518 10.7538978,5.90917128 11.5273801,5.33529738 C11.8766946,5.06083595 12.2260092,4.78637452 12.5503727,4.48696205 C12.6501768,4.38715789 12.774932,4.2624027 12.8747362,4.18754958 C12.9994914,4.08774542 13.1242466,4.01289231 13.2739528,3.96299023 C13.4985121,3.88813711 13.7230715,3.91308815 13.9476309,3.96299023 C14.1222881,3.98794127 14.2969454,4.03784334 14.4716027,4.01289231 C14.5464558,4.01289231 14.6462599,3.98794127 14.7211131,3.96299023 C14.7959662,3.93803919 14.8708193,3.88813711 14.9207214,3.81328399 C14.9955745,3.71347984 15.0205255,3.61367568 15.0205255,3.48892048 C15.0205255,3.36416529 14.9955745,3.26436113 14.9207214,3.16455698 C14.7959662,2.96494866 14.5963579,2.84019347 14.3967496,2.74038931 C14.1222881,2.61563412 13.7979246,2.540781 13.4985121,2.46592788 C12.5753237,2.24136853 11.6521353,1.91700502 10.8037999,1.46788632 C10.3796323,1.24332697 9.9554646,1.01876761 9.53129693,0.794208262 C9.10712927,0.56964891 8.65801057,0.345089558 8.18394082,0.195383324 C7.13599718,-0.128980184 5.98824938,-0.029176028 4.94030574,0.345089558 C3.84246002,0.719355145 2.79451638,1.44293528 1.99608313,2.36612373 L1.99608313,2.36612373" id="path27476-4" fill="#FFB510"></path> | |||
</g> | |||
<path d="M47.3006272,37.3384927 C48.8226406,38.5610936 49.7707801,40.4074705 50.0701925,42.3287005 C50.2947519,43.8257629 50.1450456,45.3727273 49.8206821,46.8448386 C49.4963186,48.3169499 48.9473958,49.7641102 48.448375,51.1863194 C48.2487667,51.7601933 48.0242073,52.3340672 47.9493542,52.9328922 C47.8745011,53.5317171 47.9244032,54.1804441 48.1988646,54.7044159 C48.5232281,55.3032409 49.1470041,55.7274085 49.8206821,55.9270168 C50.4694091,56.1266252 51.1929893,56.1266252 51.8417163,55.9519679 C52.5153944,55.7773106 53.1391703,55.4529471 53.6631421,55.0537305 C55.0354493,53.9808358 55.8588336,52.3340672 56.1831971,50.6124455 C56.5075606,48.8908238 56.3578544,47.1193 56.0584419,45.4226294 C55.6592253,43.0772317 54.9605962,40.7817361 54.0873098,38.5860447 C53.4385828,36.9642271 52.6900516,35.3673606 51.642108,33.9701024 C50.6191154,32.5977953 49.3216613,31.4500475 48.3236198,30.0777403 C47.6249907,29.1046498 47.0760678,28.0567062 46.2277325,27.2083708 C45.8035648,26.7842032 45.3294951,26.4348886 44.7556212,26.2103293 C44.2066983,25.9857699 43.5829224,25.9358679 43.0090485,26.0855741 C42.2605173,26.3101334 41.6367413,26.8840073 41.3123778,27.6075875 C40.9880143,28.3311676 40.9381122,29.1296009 41.0628674,29.9030831 C41.2375247,30.9011246 41.6866434,31.8243131 42.1856642,32.6975994 C42.7595381,33.67069 43.4332161,34.6188295 44.3065025,35.3673606 C45.254642,36.0909408 46.3774387,36.5899615 47.3006272,37.3384927" id="path29705-5-0" fill="#020204"></path> | |||
<g id="g17048" transform="translate(41.000000, 52.000000)" fill="#FFB510"> | |||
<path d="M21.707404,11.6022332 C21.5327467,12.0264008 21.3081874,12.4256175 21.0087749,12.774932 C20.3600479,13.5484142 19.4368595,14.072386 18.538622,14.5215048 C16.9916576,15.319938 15.3947911,15.9936161 13.9476309,16.9417555 C12.9745403,17.5655315 12.0763029,18.3140627 11.2279676,19.1124959 C10.5043875,19.811125 9.8307094,20.5347052 9.03227615,21.1085791 C8.20889186,21.707404 7.28570342,22.1315717 6.28766185,22.2812779 C5.09001198,22.4559352 3.84246002,22.2313758 2.71966326,21.7323551 C1.94618105,21.3830405 1.17269884,20.9089708 0.723580134,20.1853906 C0.27446143,19.4618105 0.174657274,18.5635731 0.174657274,17.7152378 C0.174657274,16.1932244 0.449118704,14.696162 0.723580134,13.1990997 C0.948139486,11.9515477 1.1477478,10.7039958 1.29745403,9.45644382 C1.54696442,7.18589926 1.54696442,4.86545262 1.37230715,2.59490807 C1.34735611,2.22064248 1.32240507,1.82142585 1.37230715,1.44716027 C1.42220923,1.07289468 1.5968665,0.698629095 1.87132793,0.449118704 C2.14578936,0.224559352 2.49510391,0.124755195 2.84441846,0.0998041564 C3.193733,0.0748531173 3.54304755,0.124755195 3.8923621,0.199608313 C4.71574639,0.324363508 5.56408172,0.424167665 6.36251497,0.623775977 C6.86153575,0.748531173 7.36055653,0.948139486 7.88452835,1.07289468 C8.73286368,1.29745403 9.63110109,1.42220923 10.5043875,1.32240507 C11.4525269,1.22260092 12.3507644,0.848335329 13.2989038,0.873286368 C13.6981205,0.873286368 14.072386,0.948139486 14.4466516,1.07289468 C14.8209172,1.19764988 15.1951828,1.37230715 15.4696442,1.64676858 C15.6692526,1.87132793 15.8189588,2.12083832 15.943714,2.42025079 C16.1183713,2.84441846 16.1932244,3.29353716 16.2431264,3.71770482 C16.2680775,4.11692145 16.2680775,4.51613808 16.3429306,4.9153547 C16.4676858,5.56408172 16.7920493,6.13795562 17.216217,6.6369764 C17.6403846,7.13599718 18.1394054,7.56016485 18.6384262,7.98433251 C19.137447,8.40850017 19.6364678,8.83266784 20.1853906,9.18198239 C20.434901,9.35663966 20.7093624,9.50634589 20.9339218,9.70595421 C21.1834322,9.90556252 21.3830405,10.1051708 21.5327467,10.3796323 C21.7323551,10.7538978 21.8072082,11.2030166 21.707404,11.6022332 L21.707404,11.6022332" id="path14296-0"></path> | |||
</g> | |||
<g id="path28767-9-3" opacity="0.25" transform="translate(20.000000, 28.000000)" fill="#7C7C7C"> | |||
<path d="M1.1477478,0.399216625 C1.12279676,0.0499020782 0.598824938,-0.0249510391 0.374265586,0.174657274 C0.174657274,0.324363508 -2.65065747e-15,0.848335329 0.174657274,1.04794364 C0.424167665,1.37230715 1.17269884,0.898237407 1.1477478,0.399216625 Z" id="Shape"></path> | |||
</g> | |||
<g id="g14884-8" transform="translate(46.000000, 50.000000)" fill="#020204"> | |||
<path d="M9.03227615,2.24559352 C8.932472,1.97113209 8.75781472,1.7216217 8.53325537,1.52201338 C8.30869602,1.32240507 8.05918563,1.17269884 7.7847242,1.04794364 C7.23580134,0.82338429 6.66192744,0.723580134 6.08805354,0.623775977 C5.53913068,0.523971821 5.01515886,0.399216625 4.466236,0.299412469 C3.8923621,0.199608313 3.3184882,0.149706235 2.7446143,0.27446143 C2.24559352,0.374265586 1.79647481,0.648727016 1.42220923,0.973090525 C1.04794364,1.29745403 0.773482212,1.74657274 0.54892286,2.19569144 C0.174657274,2.99412469 0.0748531173,3.91731314 0.124755195,4.79059951 C0.174657274,5.43932652 0.349314547,6.11300458 0.773482212,6.61202536 C1.12279676,7.01124199 1.62181754,7.26075238 2.12083832,7.41045861 C2.99412469,7.659969 3.96721522,7.659969 4.84050158,7.36055653 C6.28766185,6.88648679 7.56016485,5.91339627 8.40850017,4.66584431 C8.6829616,4.26662769 8.932472,3.81750898 9.05722719,3.3184882 C9.15703135,2.99412469 9.15703135,2.59490807 9.03227615,2.24559352" id="path29714-5-4"></path> | |||
</g> | |||
<g id="g15037-4" transform="translate(9.000000, 27.000000)" fill="#020204"> | |||
<path d="M10.0303177,2.6198591 C9.30673758,3.51809651 8.60810849,4.41633392 7.88452835,5.31457133 C7.01124199,6.41241705 6.11300458,7.51026277 5.53913068,8.78276576 C5.0401099,9.88061148 4.81555055,11.0782614 4.466236,12.2260092 C4.09197041,13.5484142 3.56799859,14.8209172 2.96917365,16.0435181 C2.42025079,17.1912659 1.84637689,18.3140627 1.24755195,19.4119084 C0.82338429,20.2352927 0.374265586,21.058677 0.224559352,21.9569144 C0.0998041564,22.6804945 0.174657274,23.4040747 0.349314547,24.1276548 C0.523971821,24.8262839 0.82338429,25.499962 1.1477478,26.148689 C2.56995703,28.9182543 4.69079535,31.288603 7.18589926,33.1100289 C8.33364706,33.9334132 7.06114406,32.1618894 8.33364706,32.7357633 C9.03227615,33.0601268 9.75585629,33.3345882 10.5293385,33.3595393 C10.9036041,33.3595393 11.3028207,33.3096372 11.6521353,33.159931 C12.0014498,33.0102247 12.3258133,32.7607143 12.5254216,32.4363508 C12.774932,32.0371342 12.8747362,31.5630645 12.8248341,31.0889947 C12.774932,30.614925 12.6002747,30.1658063 12.3507644,29.7665896 C11.7519394,28.7934991 10.8037999,28.069919 9.90556252,27.3712899 C7.95938147,25.8492765 8.55820641,26.7475139 6.73678056,25.0757943 C6.23775977,24.6017245 5.71378795,24.1027038 5.36447341,23.5038788 C5.01515886,22.9300049 4.84050158,22.2563269 4.69079535,21.5826488 C4.3414808,19.761223 4.44128496,17.8150419 5.06506094,16.0684692 C5.31457133,15.3698401 5.63893484,14.7211131 5.9383473,14.072386 C6.48727016,12.9246383 6.98629095,11.7519394 7.68492004,10.7039958 C8.55820641,9.40654174 9.75585629,8.28374498 10.4794364,6.88648679 C11.0782614,5.71378795 11.3277717,4.36643184 11.5772821,3.06897781 C11.7519394,2.07093624 11.9265967,1.04794364 12.101254,0.0249510391 C11.4026249,0.898237407 10.7039958,1.77152378 10.0303177,2.6198591 Z" id="path14967-1-0"></path> | |||
</g> | |||
<g id="Group" transform="translate(0.000000, 51.000000)" fill="#FFB510"> | |||
<g id="g14180-6" transform="translate(0.000000, -0.000000)"> | |||
<path d="M10.3796323,0.174657274 C10.7788489,-1.26496036e-14 11.2279676,-0.0249510391 11.6521353,0.0499020782 C12.0763029,0.124755195 12.4755195,0.299412469 12.8248341,0.54892286 C13.5484142,1.0229926 14.072386,1.74657274 14.5714068,2.44520183 C15.7441057,4.04206833 16.8669024,5.68883691 17.864944,7.38550757 C18.6883283,8.75781472 19.4368595,10.204975 20.40995,11.502429 C21.033726,12.3507644 21.7323551,13.1242466 22.356131,13.9725819 C22.979907,14.8209172 23.5288299,15.7441057 23.8032913,16.7421472 C24.1526058,18.0645523 24.0278506,19.5117126 23.4040747,20.7343135 C22.954956,21.5826488 22.2812779,22.33118 21.4578936,22.8052497 C20.6345093,23.2793195 19.6614188,23.5537809 18.7132793,23.5288299 C17.1912659,23.4789278 15.7940077,22.7054456 14.3717985,22.1565227 C11.477478,21.0087749 8.33364706,20.6345093 5.36447341,19.7362719 C4.44128496,19.4618105 3.54304755,19.137447 2.6198591,18.8879366 C2.22064248,18.7631814 1.79647481,18.6883283 1.39725819,18.48872 C0.998041564,18.3140627 0.648727016,18.0645523 0.424167665,17.6902867 C0.249510391,17.4158253 0.199608313,17.0665107 0.199608313,16.7421472 C0.199608313,16.4177837 0.27446143,16.0934202 0.399216625,15.7690567 C0.623775977,15.1452807 0.973090525,14.5963579 1.22260092,13.9725819 C1.62181754,12.9745403 1.69667066,11.8766946 1.64676858,10.8037999 C1.5968665,9.73090525 1.42220923,8.6829616 1.34735611,7.61006692 C1.32240507,7.13599718 1.29745403,6.6369764 1.39725819,6.1878577 C1.49706235,5.73873899 1.69667066,5.26466925 2.04598521,4.9153547 C2.37034871,4.61594223 2.79451638,4.41633392 3.21868404,4.3414808 C3.64285171,4.24167665 4.09197041,4.24167665 4.54108912,4.26662769 C4.99020782,4.26662769 5.41437548,4.29157872 5.86349419,4.26662769 C6.31261289,4.24167665 6.73678056,4.14187249 7.13599718,3.91731314 C7.51026277,3.71770482 7.80967524,3.39334132 8.03423459,3.06897781 C8.25879394,2.7446143 8.48335329,2.37034871 8.6829616,1.99608313 C8.88256992,1.62181754 9.10712927,1.27250299 9.35663966,0.948139486 C9.60615005,0.623775977 9.98041564,0.324363508 10.3796323,0.174657274" id="path4635-1"></path> | |||
</g> | |||
</g> | |||
</g> | |||
</g> | |||
</g> | |||
</svg> |
@@ -0,0 +1,19 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> | |||
<!-- Generator: Sketch 43.1 (39012) - http://www.bohemiancoding.com/sketch --> | |||
<title>Visual Studio</title> | |||
<desc>Created with Sketch.</desc> | |||
<defs></defs> | |||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> | |||
<g id="Artboard" transform="translate(-77.000000, -43.000000)"> | |||
<g id="Visual-Studio" transform="translate(76.000000, 41.000000)"> | |||
<polygon id="Rectangle" fill="#68217A" points="1 7 3 6 3 18 1 17"></polygon> | |||
<polygon id="Rectangle-2" fill="#541D66" transform="translate(5.607051, 10.000000) rotate(-330.000000) translate(-5.607051, -10.000000) " points="1.34927858 7.83942379 7.86482304 8.6964746 9.86482304 12.1605762 2.84927858 10.4375"></polygon> | |||
<polygon id="Rectangle-3" fill="#541D66" points="3 15 8 10 8 14 3 18"></polygon> | |||
<polygon id="Rectangle-2-Copy" fill="#68217A" transform="translate(12.000000, 16.000000) rotate(-330.000000) translate(-12.000000, -16.000000) " points="5.53589838 12.8038476 15.4641016 14 18.4641016 19.1961524 7.53589838 16.2679492"></polygon> | |||
<polygon id="Rectangle-2-Copy-2" fill="#68217A" transform="translate(12.433013, 8.250000) rotate(-330.000000) translate(-12.433013, -8.250000) " points="9.46891109 11.9820508 12.3971143 1.05384758 15.3971143 6.25 11.4689111 15.4461524"></polygon> | |||
<polygon id="Rectangle-4" fill="#541D66" points="16 2 21 4 21 20 16 22"></polygon> | |||
</g> | |||
</g> | |||
</g> | |||
</svg> |
@@ -0,0 +1,29 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<svg width="33px" height="32px" viewBox="0 0 33 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> | |||
<!-- Generator: Sketch 43.1 (39012) - http://www.bohemiancoding.com/sketch --> | |||
<title>Group 2</title> | |||
<desc>Created with Sketch.</desc> | |||
<defs></defs> | |||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> | |||
<g id="Artboard" transform="translate(-28.000000, -50.000000)"> | |||
<g id="Group-2" transform="translate(28.000000, 50.000000)"> | |||
<g id="folder" transform="translate(0.000000, 5.000000)"> | |||
<polygon id="Rectangle-5" fill="#457EFD" points="0 4 27 0 30 21 3 25"></polygon> | |||
<path d="M19.9232759,13.0294985 C20.1413793,12.8123894 20.1034483,12.6519174 19.9517241,12.4725664 C19.3543103,11.7646018 18.7758621,11.0566372 18.1784483,10.3486726 C16.5189655,8.35693215 14.85,6.35575221 13.1905172,4.35457227 C13.0577586,4.19410029 12.9439655,3.97699115 12.9060345,3.76932153 C12.8396552,3.36342183 13.1146552,2.99528024 13.512931,2.83480826 C13.9396552,2.67433628 14.3094828,2.78761062 14.6698276,3.21238938 C16.3008621,5.15693215 17.9413793,7.10147493 19.5724138,9.0460177 C19.9612069,9.50855457 20.3594828,9.97109145 20.7672414,10.4525074 C20.9758621,10.2353982 20.9474138,10.0749263 20.7956897,9.89557522 C20.1413793,9.12153392 19.487069,8.3380531 18.8327586,7.5640118 C17.5146552,5.99705015 16.2060345,4.4300885 14.8784483,2.8820059 C14.3474138,2.26843658 13.5413793,2.23067847 12.9534483,2.74041298 C12.375,3.24070796 12.3465517,3.94867257 12.887069,4.59056047 C14.9353448,7.05427729 16.9836207,9.50855457 19.0318966,11.9722714 C19.3258621,12.3309735 19.6198276,12.6707965 19.9232759,13.0294985 Z" id="Shape" fill="#235EE1" fill-rule="nonzero"></path> | |||
<path d="M13.3801724,9.05545723 C13.3137931,9.00825959 13.237931,8.94218289 13.1525862,8.90442478 C12.4982759,8.65899705 11.8439655,8.43244838 11.1896552,8.18702065 C10.9810345,8.11150442 10.8862069,8.18702065 10.8103448,8.36637168 C9.61551724,11.2926254 8.42068966,14.2094395 7.22586207,17.1356932 C7.13103448,17.3528024 7.19741379,17.4566372 7.39655172,17.5321534 C8.01293103,17.7775811 8.62931034,18.0135693 9.2362069,18.2873156 C9.56810345,18.4383481 9.70086207,18.3628319 9.82413793,18.0324484 C10.962069,15.1345133 12.1189655,12.2460177 13.2663793,9.35752212 C13.2948276,9.29144543 13.3232759,9.19705015 13.3801724,9.05545723 Z" id="Shape" fill="#FFFFFF" fill-rule="nonzero"></path> | |||
<path d="M19.6293103,13.1050147 C19.1551724,12.5103245 18.7189655,12.019469 18.3586207,11.4908555 C18.0362069,11 17.6758621,10.7451327 17.0784483,10.9905605 C16.9362069,11.0471976 16.775,11.0471976 16.6232759,11.0660767 C15.3525862,11.2831858 14.0913793,11.500295 12.8206897,11.7174041 C12.6215517,11.7551622 12.4508621,11.8023599 12.3655172,12.0383481 C12.1189655,12.7368732 11.8534483,13.4259587 11.5974138,14.1244838 C11.5689655,14.2 11.5689655,14.2943953 11.55,14.4265487 C14.2525862,13.9923304 16.8887931,13.5581121 19.6293103,13.1050147 Z" id="Shape" fill="#FFFFFF" fill-rule="nonzero"></path> | |||
<path d="M8.97068966,12.2648968 C7.41551724,12.519764 5.9362069,12.7557522 4.40948276,13.0011799 C4.5137931,13.7091445 4.62758621,14.379351 4.70344828,15.0589971 C4.74137931,15.3516224 4.86465517,15.3893805 5.13017241,15.3516224 C5.90775862,15.2289086 6.69482759,15.1250737 7.48189655,15.0306785 C7.71896552,15.0023599 7.87068966,14.9079646 7.96551724,14.6908555 C8.25,14.0112094 8.55344828,13.3315634 8.84741379,12.6519174 C8.89482759,12.5386431 8.9137931,12.4442478 8.97068966,12.2648968 Z" id="Shape" fill="#FFFFFF" fill-rule="nonzero"></path> | |||
<path d="M25.6413793,18.1551622 C24.712069,17.5887906 23.7922414,17.0318584 22.787069,16.4277286 C22.825,16.6070796 22.8060345,16.8147493 22.9008621,16.9185841 C23.0810345,17.1168142 23.2991379,17.2867257 23.5362069,17.4094395 C23.8586207,17.5887906 24.2,17.7115044 24.5318966,17.8719764 C25.0155172,18.1079646 25.3663793,18.4477876 25.3663793,19.0330383 C25.3663793,19.1274336 25.4137931,19.2218289 25.4517241,19.3256637 C25.5086207,19.2973451 25.5275862,19.2879056 25.5465517,19.2784661 C25.575,19.2501475 25.5939655,19.2218289 25.612931,19.1935103 C26.1818966,18.3533923 26.2198276,17.4283186 25.9732759,16.4843658 C25.6982759,15.4271386 25.2051724,14.5115044 24.1715517,13.9828909 C23.887069,13.8412979 23.7068966,13.9640118 23.4982759,14.1056047 C23.2801724,14.2566372 23.1568966,14.4359882 23.2137931,14.7569322 C23.3655172,14.6625369 23.4982759,14.5964602 23.5931034,14.5020649 C23.8301724,14.2566372 24.0482759,14.3132743 24.3137931,14.4831858 C25.3568966,15.2100295 26.0112069,17.0412979 25.6413793,18.1551622 Z" id="Shape" fill="#235EE1" fill-rule="nonzero"></path> | |||
<path d="M6.57155172,22.1103245 C6.60948276,22.1292035 6.64741379,22.1480826 6.68534483,22.1575221 C7.62413793,20.9870206 8.57241379,19.8165192 9.53017241,18.6176991 C9.38793103,18.5421829 9.30258621,18.4855457 9.20775862,18.4477876 C8.60086207,18.2023599 7.99396552,17.9758112 7.39655172,17.720944 C7.11206897,17.5982301 7.02672414,17.6831858 7.00775862,17.9758112 C6.93189655,18.7687316 6.83706897,19.5616519 6.75172414,20.3640118 C6.68534483,20.9492625 6.62844828,21.5345133 6.57155172,22.1103245 Z" id="Shape" fill="#FFFFFF" fill-rule="nonzero"></path> | |||
<path d="M12.687931,5.83657817 C12.137931,5.89321534 11.7775862,6.11976401 11.5689655,6.60117994 C11.4267241,6.95044248 11.2939655,7.29970501 11.1327586,7.63952802 C11.037931,7.83775811 11.0663793,7.96047198 11.2939655,8.0359882 C11.9293103,8.25309735 12.5646552,8.48908555 13.1905172,8.73451327 C13.4181034,8.81946903 13.512931,8.7439528 13.5982759,8.54572271 C13.7405172,8.18702065 13.9017241,7.82831858 14.0534483,7.46961652 C14.2525862,6.98820059 14.1672414,6.58230088 13.7310345,6.29911504 C13.4181034,6.10088496 13.0387931,5.98761062 12.687931,5.83657817 Z" id="Shape" fill="#FFFFFF" fill-rule="nonzero"></path> | |||
<path d="M23.8112069,12.3498525 C24.6077586,12.2460177 25.3948276,12.1421829 26.1724138,12.019469 C26.2387931,12.0100295 26.3241379,11.840118 26.3146552,11.7646018 C26.2198276,11.1415929 26.1060345,10.5091445 25.9732759,9.89557522 C25.9543103,9.80117994 25.7931034,9.66902655 25.6982759,9.66902655 C25.3,9.69734513 24.9017241,9.7539823 24.5034483,9.820059 C24.3043103,9.84837758 24.162069,9.94277286 24.2758621,10.2259587 C24.6362069,10.1787611 25.0060345,10.1221239 25.3758621,10.0938053 C25.4612069,10.0843658 25.6224138,10.159882 25.6318966,10.2165192 C25.7362069,10.6884956 25.812069,11.179351 25.9068966,11.679646 C25.2905172,11.7646018 24.712069,11.840118 24.1431034,11.9156342 C23.9344828,11.9439528 23.7448276,11.9911504 23.8112069,12.3498525 Z" id="Shape" fill="#235EE1" fill-rule="nonzero"></path> | |||
<path d="M19.9232759,13.0294985 C19.6198276,12.6707965 19.3258621,12.3309735 19.0318966,11.9722714 C16.9836207,9.50855457 14.9353448,7.05427729 12.887069,4.59056047 C12.3465517,3.94867257 12.375,3.25014749 12.9534483,2.74041298 C13.5508621,2.22123894 14.3568966,2.25899705 14.8784483,2.8820059 C16.2060345,4.4300885 17.5146552,6.00648968 18.8327586,7.5640118 C19.487069,8.3380531 20.1318966,9.12153392 20.7956897,9.89557522 C20.9474138,10.0749263 20.9853448,10.2353982 20.7672414,10.4525074 C20.3594828,9.97109145 19.9612069,9.50855457 19.5724138,9.0460177 C17.9413793,7.10147493 16.3008621,5.15693215 14.6698276,3.21238938 C14.3094828,2.78761062 13.9396552,2.66489676 13.512931,2.83480826 C13.1051724,2.99528024 12.8396552,3.36342183 12.9060345,3.76932153 C12.9344828,3.97699115 13.0482759,4.19410029 13.1905172,4.35457227 C14.85,6.35575221 16.5094828,8.34749263 18.1784483,10.3486726 C18.7663793,11.0566372 19.3543103,11.7646018 19.9517241,12.4725664 C20.1034483,12.6519174 20.1508621,12.8123894 19.9232759,13.0294985 Z" id="Shape" fill="#FFFFFF" fill-rule="nonzero"></path> | |||
<path d="M25.6413793,18.1551622 C26.0112069,17.0412979 25.3568966,15.2100295 24.3137931,14.5020649 C24.0577586,14.3227139 23.8396552,14.2755162 23.5931034,14.520944 C23.4982759,14.6153392 23.3655172,14.6719764 23.2137931,14.7758112 C23.1568966,14.4454277 23.2801724,14.2755162 23.4982759,14.1244838 C23.7068966,13.9734513 23.887069,13.860177 24.1715517,14.0017699 C25.2051724,14.5303835 25.6982759,15.4460177 25.9732759,16.5032448 C26.2198276,17.4471976 26.1818966,18.3722714 25.612931,19.2123894 C25.5939655,19.240708 25.575,19.2690265 25.5465517,19.2973451 C25.5275862,19.3162242 25.5086207,19.3162242 25.4517241,19.3445428 C25.4232759,19.240708 25.3663793,19.1463127 25.3663793,19.0519174 C25.3663793,18.4666667 25.0155172,18.1268437 24.5318966,17.8908555 C24.2,17.7303835 23.8491379,17.6076696 23.5362069,17.4283186 C23.2991379,17.2961652 23.0715517,17.1356932 22.9008621,16.9374631 C22.8060345,16.8336283 22.825,16.6259587 22.787069,16.4466077 C23.7922414,17.0318584 24.712069,17.5887906 25.6413793,18.1551622 Z" id="Shape" fill="#FFFFFF" fill-rule="nonzero"></path> | |||
<path d="M23.8112069,12.3498525 C23.7353448,11.9911504 23.9344828,11.9439528 24.1431034,11.9156342 C24.712069,11.840118 25.2810345,11.7646018 25.9068966,11.679646 C25.812069,11.179351 25.7362069,10.6979351 25.6318966,10.2165192 C25.6224138,10.159882 25.4612069,10.0843658 25.3758621,10.0938053 C25.0060345,10.1221239 24.6362069,10.1787611 24.2758621,10.2259587 C24.1715517,9.93333333 24.3137931,9.84837758 24.5034483,9.820059 C24.9017241,9.76342183 25.3,9.69734513 25.6982759,9.66902655 C25.7931034,9.65958702 25.9543103,9.80117994 25.9732759,9.89557522 C26.1060345,10.5185841 26.2198276,11.1415929 26.3146552,11.7646018 C26.3241379,11.840118 26.2293103,12.0100295 26.1724138,12.019469 C25.3948276,12.1421829 24.6172414,12.2365782 23.8112069,12.3498525 Z" id="Shape" fill="#FFFFFF" fill-rule="nonzero"></path> | |||
</g> | |||
<path d="M24.3232759,13.3569322 C23.687931,13.1681416 23.0810345,12.9982301 22.4836207,12.8283186 C22.2655172,12.7622419 22.3034483,12.6300885 22.3508621,12.4696165 C22.7017241,11.2330383 23.0431034,9.99646018 23.4034483,8.76932153 C23.7448276,7.60825959 23.9724138,6.42831858 23.8681034,5.220059 C23.7922414,4.35162242 23.6689655,3.5020649 23.0905172,2.76578171 C22.55,2.07669617 21.8198276,1.80294985 21.0043103,1.69911504 C19.8,1.53864307 18.6051724,1.55752212 17.3439655,1.66135693 C17.4672414,1.55752212 17.5715517,1.43480826 17.7043103,1.34041298 C18.6241379,0.689085546 19.6862069,0.396460177 20.7767241,0.226548673 C23.0525862,-0.132153392 25.2525862,0.207669617 27.4051724,0.943952802 C28.1543103,1.19882006 28.7801724,1.63303835 29.3301724,2.18053097 C29.8517241,2.69970501 30.4396552,2.80353982 31.0844828,2.53923304 C31.4827586,2.36932153 31.8241379,2.4259587 32.2034483,2.55811209 C33.1137931,2.87905605 33.1137931,2.86961652 32.8387931,3.80412979 C32.5922414,4.62536873 32.3456897,5.44660767 32.1086207,6.27728614 C32.0327586,6.53215339 31.9284483,6.6359882 31.6534483,6.54159292 C31.4543103,6.4660767 31.2456897,6.40943953 31.037069,6.38112094 C30.5913793,6.31504425 30.2689655,6.0979351 30.0034483,5.72035398 C29.5767241,5.14454277 28.9318966,5.19174041 28.3155172,5.25781711 C27.3862069,5.36165192 26.7887931,5.8619469 26.437931,6.74926254 C25.6508621,8.72212389 25.0724138,10.7610619 24.5034483,12.8 C24.4465517,12.9699115 24.3896552,13.139823 24.3232759,13.3569322 Z" id="Shape" fill="#D2D2D2" fill-rule="nonzero"></path> | |||
<path d="M18.4913793,31.9150442 C17.1163793,31.9056047 16.2155172,31.0182891 16.262931,29.7250737 C16.2724138,29.5079646 16.3387931,29.2814159 16.4146552,29.0737463 C18.2068966,23.9858407 20.0086207,18.9073746 21.8103448,13.8289086 C22.0189655,13.2247788 21.8862069,13.2058997 22.6163793,13.4135693 C23.0146552,13.5268437 23.412931,13.6495575 23.8112069,13.7439528 C24.1051724,13.8100295 24.1810345,13.9327434 24.1051724,14.2348083 C23.7258621,15.7923304 23.375,17.3498525 23.0051724,18.9073746 C22.1043103,22.6548673 21.2034483,26.4117994 20.2931034,30.159292 C20.2077586,30.5085546 20.0655172,30.8578171 19.8853448,31.1693215 C19.5724138,31.6884956 19.0887931,31.9622419 18.4913793,31.9150442 Z" id="Shape" fill="#000000" fill-rule="nonzero"></path> | |||
</g> | |||
</g> | |||
</g> | |||
</svg> |
@@ -0,0 +1,50 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<!-- Generator: Adobe Illustrator 21.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> | |||
<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 169.7 205.2" style="enable-background:new 0 0 169.7 205.2;" xml:space="preserve"> | |||
<style type="text/css"> | |||
.st0{fill:#A65A95;} | |||
.st1{fill:#001946;} | |||
</style> | |||
<g> | |||
<g> | |||
<path class="st0" d="M45.2,167.8c-3,0-5.4-1.1-7.8-4.3l3.6-3.1c1.6,2.1,2.7,2.7,4.2,2.7c2.6,0,4.4-2,4.4-5v-17.2h5V158 | |||
C54.6,163.9,50.7,167.8,45.2,167.8z"/> | |||
<path class="st0" d="M70.7,167.8c-5.8,0-10.8-4.2-10.8-11.2v-15.8h5v15.6c0,4.1,2.4,6.7,5.8,6.7c3.4,0,5.8-2.6,5.8-6.7v-15.6h5 | |||
v15.8C81.5,163.5,76.5,167.8,70.7,167.8z"/> | |||
<path class="st0" d="M99,167.8c-7.6,0-13.9-6.1-13.9-13.6c0-7.6,6.3-13.6,13.9-13.6c3.4,0,6.3,1.2,9.1,3.4l-2.9,3.6 | |||
c-2.6-1.8-4.1-2.4-6.2-2.4c-4.8,0-8.8,3.9-8.8,9c0,5,3.9,9,8.8,9c2,0,3.6-0.6,6.1-2.4l3,3.7C104.6,167,102,167.8,99,167.8z"/> | |||
<path class="st0" d="M111.3,167.4v-26.6h16.6v4.5h-11.6v6.4h11.2v4.5h-11.2v6.7h11.6v4.5H111.3z"/> | |||
</g> | |||
<g> | |||
<circle class="st1" cx="84.9" cy="74.9" r="37.4"/> | |||
<circle class="st0" cx="84.9" cy="74.9" r="28"/> | |||
<circle class="st1" cx="84.9" cy="67.9" r="2.1"/> | |||
<circle class="st1" cx="91.4" cy="72.6" r="2.1"/> | |||
<circle class="st1" cx="88.9" cy="80.3" r="2.1"/> | |||
<circle class="st1" cx="80.8" cy="80.3" r="2.1"/> | |||
<circle class="st1" cx="78.3" cy="72.6" r="2.1"/> | |||
</g> | |||
<g> | |||
<path class="st1" d="M48.2,131.7v-4.6h-4.3v4.6h-2V121h2v4.3h4.3V121h2v10.8H48.2z"/> | |||
<path class="st1" d="M56.7,131.7v-0.5c-0.5,0.4-1.3,0.7-2.1,0.7c-1.9,0-3.2-1.3-3.2-3.4v-5h2v4.8c0,1.2,0.7,1.8,1.7,1.8 | |||
c1,0,1.7-0.7,1.7-1.8v-4.8h2v8.3H56.7z"/> | |||
<path class="st1" d="M63.8,131.9c-2.4,0-4.3-1.9-4.3-4.3c0-2.4,1.9-4.3,4.3-4.3c1.1,0,2.1,0.4,3.3,1.5l-1.3,1.2 | |||
c-0.7-0.7-1.3-1-2-1c-1.3,0-2.3,1.1-2.3,2.5c0,1.3,1,2.5,2.3,2.5c0.6,0,1.3-0.2,2-0.9l1.3,1.2C66,131.5,65,131.9,63.8,131.9z"/> | |||
<path class="st1" d="M73.8,131.7l-3.9-3.9v3.9h-2v-11.3h2v6.8l3.6-3.7h2.5l-3.9,4l4.3,4.3H73.8z"/> | |||
<path class="st1" d="M77.1,131.7v-11.3h2v11.3H77.1z"/> | |||
<path class="st1" d="M88.6,128.4h-6.2c0.1,1,1.1,1.7,2.1,1.7c0.7,0,1.5-0.3,2.3-1.1l1.3,1.2c-1.1,1.2-2.3,1.7-3.6,1.7 | |||
c-2.4,0-4.3-1.9-4.3-4.3c0-2.4,1.9-4.3,4.3-4.3c2.4,0,4.1,1.9,4.1,4.2C88.7,127.9,88.6,128.4,88.6,128.4z M84.5,125.1 | |||
c-1,0-1.9,0.6-2.1,1.5h4.1C86.3,125.8,85.5,125.1,84.5,125.1z"/> | |||
<path class="st1" d="M93.9,131.9c-0.9,0-1.7-0.3-2.3-0.8v0.6h-2v-11.3h2v3.7c0.6-0.5,1.4-0.8,2.3-0.8c2.3,0,4.2,1.9,4.2,4.3 | |||
C98.1,129.9,96.2,131.9,93.9,131.9z M93.9,125.1c-1.3,0-2.2,1.1-2.2,2.5c0,1.4,1,2.5,2.2,2.5c1.3,0,2.2-1.1,2.2-2.5 | |||
C96.2,126.2,95.2,125.1,93.9,125.1z"/> | |||
<path class="st1" d="M107.4,128.4h-6.2c0.1,1,1.1,1.7,2.1,1.7c0.7,0,1.5-0.3,2.3-1.1l1.3,1.2c-1.1,1.2-2.3,1.7-3.6,1.7 | |||
c-2.4,0-4.3-1.9-4.3-4.3c0-2.4,1.9-4.3,4.3-4.3c2.4,0,4.1,1.9,4.1,4.2C107.5,127.9,107.4,128.4,107.4,128.4z M103.3,125.1 | |||
c-1,0-1.9,0.6-2.1,1.5h4.1C105.1,125.8,104.3,125.1,103.3,125.1z"/> | |||
<path class="st1" d="M110.4,127.8v3.9h-2v-8.3h2v0.8c0.7-0.6,1.4-0.9,2.6-1v1.8C111,125.4,110.4,126.6,110.4,127.8z"/> | |||
<path class="st1" d="M116,127.8v3.9h-2v-8.3h2v0.8c0.7-0.6,1.4-0.9,2.6-1v1.8C116.6,125.4,116,126.6,116,127.8z"/> | |||
<path class="st1" d="M122.2,134.6h-2.1l2.2-4.2l-3.4-6.9h2.1l2.4,4.8l2.3-4.8h2.2L122.2,134.6z"/> | |||
</g> | |||
</g> | |||
</svg> |
@@ -0,0 +1,143 @@ | |||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
<svg | |||
xmlns:dc="http://purl.org/dc/elements/1.1/" | |||
xmlns:cc="http://creativecommons.org/ns#" | |||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||
xmlns:svg="http://www.w3.org/2000/svg" | |||
xmlns="http://www.w3.org/2000/svg" | |||
xmlns:xlink="http://www.w3.org/1999/xlink" | |||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
id="Layer_1" | |||
width="113.4" | |||
height="35.9" | |||
viewBox="0 0 113.4 35.9" | |||
version="1.1" | |||
inkscape:version="0.91 r13725" | |||
sodipodi:docname="juce-logo-with-text.svg"> | |||
<metadata | |||
id="metadata35"> | |||
<rdf:RDF> | |||
<cc:Work | |||
rdf:about=""> | |||
<dc:format>image/svg+xml</dc:format> | |||
<dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
<dc:title /> | |||
</cc:Work> | |||
</rdf:RDF> | |||
</metadata> | |||
<sodipodi:namedview | |||
pagecolor="#ffffff" | |||
bordercolor="#666666" | |||
borderopacity="1" | |||
objecttolerance="10" | |||
gridtolerance="10" | |||
guidetolerance="10" | |||
inkscape:pageopacity="0" | |||
inkscape:pageshadow="2" | |||
inkscape:window-width="1920" | |||
inkscape:window-height="1029" | |||
id="namedview33" | |||
showgrid="false" | |||
inkscape:zoom="9.3827159" | |||
inkscape:cx="26.137564" | |||
inkscape:cy="37.52419" | |||
inkscape:window-x="0" | |||
inkscape:window-y="0" | |||
inkscape:window-maximized="1" | |||
inkscape:current-layer="Layer_1" /> | |||
<style | |||
id="style3"><![CDATA[ | |||
.st0{clip-path:url(#SVGID_2_);fill:#A65A95;} | |||
.st1{clip-path:url(#SVGID_2_);fill:#E67E3C;} | |||
.st2{clip-path:url(#SVGID_2_);fill:#E73E51;} | |||
.st3{clip-path:url(#SVGID_2_);fill:#F0E049;} | |||
.st4{clip-path:url(#SVGID_2_);fill:#F19F53;} | |||
.st5{clip-path:url(#SVGID_2_);fill:#F5BD47;} | |||
.st6{clip-path:url(#SVGID_2_);fill:#288DC1;} | |||
.st7{clip-path:url(#SVGID_2_);fill:#FFFFFF;} | |||
.st8{clip-path:url(#SVGID_2_);fill:#9CB6D3;} | |||
.st9{clip-path:url(#SVGID_2_);fill:#6CC04A;} | |||
]]></style> | |||
<defs | |||
id="defs5"> | |||
<path | |||
id="SVGID_1_" | |||
d="M0 0h113.4v35.9H0z" /> | |||
</defs> | |||
<clipPath | |||
id="SVGID_2_"> | |||
<use | |||
xlink:href="#SVGID_1_" | |||
overflow="visible" | |||
id="use9" /> | |||
</clipPath> | |||
<path | |||
class="st9" | |||
d="M5.2 5.2c7-7 18.4-7 25.4 0s7 18.4 0 25.4-18.4 7-25.4 0c-6.9-7-6.9-18.4 0-25.4" | |||
id="path11" | |||
clip-path="url(#SVGID_2_)" | |||
style="fill:#6cc04a;fill-opacity:1" /> | |||
<path | |||
class="st7" | |||
d="m 29.8,29.8 c 6.5,-6.5 6.5,-17.2 0,-23.7 -6.5,-6.5 -17.2,-6.5 -23.7,0 -6.5,6.5 -6.5,17.2 0,23.7 6.5,6.5 17.1,6.5 23.7,0" | |||
id="path13" | |||
clip-path="url(#SVGID_2_)" | |||
inkscape:connector-curvature="0" | |||
style="fill:#ffffff" /> | |||
<path | |||
class="st8" | |||
d="M28.4 27.5c.4.4 1.1.4 1.5 0l.1-.1c1.8-2.2 2.9-4.9 3.2-7.7 0-.3-.1-.6-.3-.9-.2-.2-.5-.4-.8-.4H19.9c-.2 0-.3.2-.1.4l8.6 8.7z" | |||
id="path15" | |||
clip-path="url(#SVGID_2_)" | |||
style="fill:#9cb6d3;fill-opacity:1" /> | |||
<path | |||
class="st0" | |||
d="M8.3 28.4c-.2.2-.3.5-.3.8 0 .3.2.6.4.8 2.2 1.8 4.9 2.9 7.7 3.2.3 0 .7-.1.9-.3.2-.2.3-.5.3-.8V19.9c0-.2-.2-.3-.4-.1l-8.6 8.6z" | |||
id="path17" | |||
clip-path="url(#SVGID_2_)" | |||
style="fill:#a65a95;fill-opacity:1" /> | |||
<path | |||
class="st6" | |||
d="M18.9 33c.2.2.5.3.9.3 2.8-.3 5.5-1.4 7.7-3.2l.1-.1c.4-.4.4-1.1 0-1.5l-8.7-8.7c-.1-.1-.4 0-.4.1v12.2c0 .4.2.7.4.9" | |||
id="path19" | |||
clip-path="url(#SVGID_2_)" | |||
style="fill:#288dc1;fill-opacity:1" /> | |||
<path | |||
class="st1" | |||
d="M7.5 8.3c-.5-.4-1.1-.4-1.6 0l-.1.1c-1.8 2.2-2.9 4.9-3.2 7.7 0 .3.1.6.3.8.2.2.5.4.8.4H16c.2 0 .3-.2.1-.4L7.5 8.3z" | |||
id="path21" | |||
clip-path="url(#SVGID_2_)" | |||
style="fill:#e67e3c;fill-opacity:1" /> | |||
<path | |||
class="st2" | |||
d="M2.9 18.8c-.2.2-.3.5-.3.9.3 2.8 1.4 5.5 3.2 7.7.2.3.5.4.8.4.3 0 .6-.1.8-.3l8.6-8.6c.1-.1 0-.4-.1-.4H3.7c-.3 0-.6.1-.8.3" | |||
id="path23" | |||
clip-path="url(#SVGID_2_)" | |||
style="fill:#e73e51;fill-opacity:1" /> | |||
<path | |||
class="st3" | |||
d="M32.9 17c.2-.2.3-.5.3-.9-.3-2.8-1.4-5.5-3.2-7.7-.2-.2-.5-.4-.8-.4-.3 0-.6.1-.8.3L19.7 17c-.1.1 0 .4.1.4H32c.4-.1.7-.2.9-.4" | |||
id="path25" | |||
clip-path="url(#SVGID_2_)" | |||
style="fill:#f0e049;fill-opacity:1" /> | |||
<path | |||
class="st5" | |||
d="M18.9 16.1l8.6-8.6c.2-.2.4-.5.3-.8 0-.3-.2-.6-.4-.8-2.2-1.8-4.9-2.9-7.7-3.2-.3 0-.7.1-.9.3-.2.2-.3.5-.3.8V16c0 .2.3.3.4.1" | |||
id="path27" | |||
clip-path="url(#SVGID_2_)" | |||
style="fill:#f5bd47;fill-opacity:1" /> | |||
<path | |||
class="st4" | |||
d="M17.3 3.7c0-.3-.1-.6-.4-.8-.2-.2-.5-.3-.9-.3-2.7.4-5.4 1.5-7.6 3.2l-.1.1c-.2.2-.3.5-.3.9 0 .2.1.5.3.7l8.6 8.6c.1.1.4 0 .4-.2V3.7z" | |||
id="path29" | |||
clip-path="url(#SVGID_2_)" | |||
style="fill:#f19f53;fill-opacity:1" /> | |||
<path | |||
class="st7" | |||
d="M45.3 29.3c-2.4 0-4.4-.9-6.1-3.2l2.4-2c1.2 1.5 2.3 2.1 3.7 2.1 2.6 0 4.3-1.9 4.3-4.9V6.8h3.3v14.5c0 4.8-3.1 8-7.6 8M66 29.3c-4.8 0-8.8-3.5-8.8-9.3V6.8h3.3v13c0 3.9 2.3 6.4 5.6 6.4s5.6-2.5 5.6-6.4v-13H75V20c-.2 5.8-4.3 9.3-9 9.3M89.2 29.3c-6.3 0-11.4-5.1-11.4-11.4 0-6.3 5.2-11.4 11.4-11.4 2.8 0 5.3 1 7.2 2.6l-1.9 2.4c-2-1.4-3.4-1.9-5.2-1.9-4.5 0-8.1 3.6-8.1 8.3 0 4.7 3.6 8.3 8.1 8.3 1.8 0 3.3-.6 5.2-1.9l2 2.4c-2.5 2-4.7 2.6-7.3 2.6M100 29V6.8h13.4v3h-10.1v6.5h9.7v3h-9.7v6.8h10.1V29z" | |||
id="path31" | |||
clip-path="url(#SVGID_2_)" | |||
style="fill:#ffffff;fill-opacity:1" /> | |||
</svg> |
@@ -0,0 +1,42 @@ | |||
<html> | |||
<head> | |||
<meta http-equiv="X-UA-Compatible" content="IE=11"> | |||
<style> | |||
body { | |||
background-color: #f1f1f1; | |||
color: #101010; | |||
font-family: Helvetica, Arial, sans-serif; | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
} | |||
.button { | |||
display: block; | |||
padding: 15px 20px 16px; | |||
width: 200px; | |||
border: 1px solid #c8c9cb; | |||
border-radius: 6px; | |||
margin: auto; | |||
cursor: pointer; | |||
font-size: 20px; | |||
margin-top: 30px; | |||
color: inherit; | |||
text-decoration: none; | |||
} | |||
#offline { | |||
display: block; | |||
text-align: center; | |||
} | |||
</style> | |||
</head> | |||
<body> | |||
<div id='offline'> | |||
<h1>No internet connection</h1> | |||
<p>You appear to be offline. An internet connection is required to login to the Projucer.</p> | |||
<p>If you want to use JUCE under the GPL without signing-in, you can enable the pre-processor macro JUCER_ENABLE_GPL_MODE=1 and recompile the Projucer yourself.</p> | |||
<a class='button' href='__URL_PLACEHOLDER__'>Try again</a> | |||
</div> | |||
</body> | |||
</html> |
@@ -1,15 +1,15 @@ | |||
IMPORTANT NOTICE: PLEASE READ CAREFULLY BEFORE INSTALLING THE SOFTWARE: | |||
This licence agreement (Licence) is a legal agreement between you (Licensee or you) and Raw Material Software Limited (Licensor, us or we) for: | |||
This license agreement (License) is a legal agreement between you (Licensee or you) and Raw Material Software Limited (Licensor, us or we) for: | |||
- The Projucer software and the associated media and, save where expressly specified through subsequent licence terms notified to you in writing, any and all new releases, derivatives of and updates thereto supplied by us to you for a period of one (1) month from the date of your installation of the software (the Software); | |||
- The Projucer software and the associated media and, save where expressly specified through subsequent license terms notified to you in writing, any and all new releases, derivatives of and updates thereto supplied by us to you for a period of one (1) month from the date of your installation of the software (the Software); | |||
- printed materials and online and electronic documentation (Documentation). | |||
The Software is comprised of numerous components that may be licensed under separate licence terms. The Software is a collective work of the Licensor and we licence the use of the Software and Documentation to you on the basis of this Licence and any applicable licence terms for any third party software components which make up the Software. Where you deal with a copy of any software component independent from the Software, you must remove all our trade marks, trade dress and logos from that copy. | |||
The Software is comprised of numerous components that may be licensed under separate license terms. The Software is a collective work of the Licensor and we license the use of the Software and Documentation to you on the basis of this License and any applicable license terms for any third party software components which make up the Software. Where you deal with a copy of any software component independent from the Software, you must remove all our trade marks, trade dress and logos from that copy. | |||
We do not sell the Software or Documentation to you. We and/or our licensors remain the owners of the Software and Documentation at all times. If you are accepting the terms of this Licence on behalf of a company or other legal entity, you represent and warrant that you have the authority to bind that company or other legal entity to the terms of this Licence and, in such event, "you" and "Licensee" will refer to that company or other legal entity. | |||
We do not sell the Software or Documentation to you. We and/or our licensors remain the owners of the Software and Documentation at all times. If you are accepting the terms of this License on behalf of a company or other legal entity, you represent and warrant that you have the authority to bind that company or other legal entity to the terms of this License and, in such event, "you" and "Licensee" will refer to that company or other legal entity. | |||
The Software may be downloaded from the Licensor website - www.juce.com - (the "Website"). | |||
@@ -22,21 +22,21 @@ IMPORTANT NOTICE TO ALL USERS: | |||
- IF YOU DO NOT AGREE TO THE TERMS OF THIS LICENCE, WE WILL NOT LICENSE THE SOFTWARE AND DOCUMENTATION TO YOU AND YOU MUST DISCONTINUE THE INSTALLATION PROCESS. | |||
You should print a copy of this Licence for future reference. | |||
You should print a copy of this License for future reference. | |||
1. Grant and scope of licence | |||
1. Grant and scope of license | |||
1.1. In consideration of you agreeing to abide by the terms of this Licence the Licensor hereby grants to you a non-exclusive, non-transferable licence to use the Software and the Documentation on the terms of this Licence. | |||
1.1. In consideration of you agreeing to abide by the terms of this License the Licensor hereby grants to you a non-exclusive, non-transferable license to use the Software and the Documentation on the terms of this License. | |||
1.2. You may: | |||
(a) install and use the Software for your internal business purposes on one central processing unit (CPU) per single user licence granted through this Licence; | |||
(a) install and use the Software for your internal business purposes on one central processing unit (CPU) per single user license granted through this License; | |||
(b) provided it is used on only one computer at any one time, transfer the Software from one computer to another; | |||
(c) provided you comply with the provisions in clause 2, make a single copy of the Software for back-up purposes, provided that you reproduce on it all copyright and other proprietary notices that are on the original copy of the Software; | |||
(d) receive and use any free supplementary software code or update of the Software incorporating "patches", corrections of errors and software updates as may be provided by the Licensor from time to time; | |||
(e) use any Documentation in support of the use permitted under condition 1.2 and make a single copy of the Documentation as is reasonably necessary for its lawful use. | |||
2. Restrictions | |||
Except as expressly set out in this Licence or as permitted by any local law, you undertake: | |||
Except as expressly set out in this License or as permitted by any local law, you undertake: | |||
(a) not, in whole or in part, to copy the Software or Documentation except where such copying is incidental to normal use of the Software or where it is necessary for the purpose of back-up or operational security; | |||
(b) not to rent, lease, sub-license, loan, translate, merge, adapt, vary or modify the Software or Documentation; | |||
(c) not to make alterations to, or modifications of, the whole or any part of the Software nor permit the Software or any part of it to be combined with, or become incorporated in, any other programs; | |||
@@ -47,34 +47,34 @@ You should print a copy of this Licence for future reference. | |||
(e) to keep all copies of the Software secure and to maintain accurate and up-to-date records of the number and locations of all copies of the Software; | |||
(f) not to provide, or otherwise make available, the Software in any form, in whole or in part (including, but not limited to, program listings, object and source program listings, object code and source code) to any person other than your employees without prior written consent from us; | |||
(g) to comply with all applicable technology control or export laws and regulations. | |||
(h) to supervise and control use of the Software and ensure that the Software is used by your employees and representatives in accordance with the terms of this Licence; | |||
(h) to supervise and control use of the Software and ensure that the Software is used by your employees and representatives in accordance with the terms of this License; | |||
(i) not to charge or otherwise deal in the Software or any part or interest therein except as expressly provided herein; | |||
(j) not to use the Software for any illegal or immoral purposes; | |||
(k) not otherwise use, copy, transfer or distribute the Software or part of it, except as expressly permitted by this Licence, in any manner which is inconsistent with this Licence. | |||
(k) not otherwise use, copy, transfer or distribute the Software or part of it, except as expressly permitted by this License, in any manner which is inconsistent with this License. | |||
3. Fee | |||
3.1. You may install and use a limited version of the Software (Demo Mode). | |||
3.2. Where you have purchased the JUCE 4 software on or after 1 November 2015 you shall be entitled to use the Software for free subject to your continued payment of the JUCE 4 software licence fee and the JUCE 4 licence terms. | |||
3.2. Where you have purchased the JUCE 4 software on or after 1 November 2015 you shall be entitled to use the Software for free subject to your continued payment of the JUCE 4 software license fee and the JUCE 4 license terms. | |||
3.3. Save as set out above, your right to use the Software shall be subject to payment of the Projucer Software licence fee. | |||
3.3. Save as set out above, your right to use the Software shall be subject to payment of the Projucer Software license fee. | |||
3.4. Where you have purchased a perpetual licence you agree to pay the licence fee as notified to you on the Website at the time you purchase the Licence. | |||
3.4. Where you have purchased a perpetual license you agree to pay the license fee as notified to you on the Website at the time you purchase the License. | |||
3.5. Where you have purchased an educational licence the fee shall be the fee as notified to you on the Website at the time you purchase the Licence and shall be payable for each academic year from the first day of the first full calendar month after the grant of the Licence and thereafter on the anniversary of that initial payment date. | |||
3.5. Where you have purchased an educational license the fee shall be the fee as notified to you on the Website at the time you purchase the License and shall be payable for each academic year from the first day of the first full calendar month after the grant of the License and thereafter on the anniversary of that initial payment date. | |||
4. Intellectual property rights | |||
4.1. You acknowledge that all intellectual property rights in the Software and the Documentation and all copies thereof throughout the world belong to us, that rights in the Software are licensed (not sold) to you, and that you have no rights in, or to, the Software or the Documentation other than the right to use them in accordance with the terms of this Licence. | |||
4.1. You acknowledge that all intellectual property rights in the Software and the Documentation and all copies thereof throughout the world belong to us, that rights in the Software are licensed (not sold) to you, and that you have no rights in, or to, the Software or the Documentation other than the right to use them in accordance with the terms of this License. | |||
4.2. You acknowledge that you have no right to have access to the Software in source code form or in unlocked coding or with comments. | |||
4.3. The Software may contain certain third party licensed materials and our licensors may act to protect their rights in the event of any violation of this Licence. | |||
4.3. The Software may contain certain third party licensed materials and our licensors may act to protect their rights in the event of any violation of this License. | |||
5. Limited warranty | |||
5.1. We warrant that, save as already set out above in relation to component parts of the Software, we own the Software and have the right to convey this Licence. | |||
5.1. We warrant that, save as already set out above in relation to component parts of the Software, we own the Software and have the right to convey this License. | |||
5.2. We shall have no obligation to provide support and maintenance services to you. You may participate in our online support forum in accordance with our forum policies in place from time to time. | |||
@@ -86,7 +86,7 @@ You should print a copy of this Licence for future reference. | |||
6.2. Without prejudice to clause 5.4 below, you acknowledge that the Software is not designed or intended for use with on-line control equipment in hazardous environments requiring fail safe performance, such as in the operation of nuclear facilities, aircraft navigation, communication, or control systems, direct life support machines, weapons systems, or other uses in which failure of the Software could lead directly to death, personal injury or severe physical or environmental damage. | |||
6.3. Neither the Licensor nor its parent company, subsidiaries or employees shall in any circumstances whatsoever be liable to you, whether in contract, tort (including negligence), breach of statutory duty, or otherwise, arising under or in connection with this Licence for any indirect, consequential or special loss or damage, including but not limited to, for: | |||
6.3. Neither the Licensor nor its parent company, subsidiaries or employees shall in any circumstances whatsoever be liable to you, whether in contract, tort (including negligence), breach of statutory duty, or otherwise, arising under or in connection with this License for any indirect, consequential or special loss or damage, including but not limited to, for: | |||
(a) loss of profits, sales, business, or revenue; | |||
(b) business interruption; | |||
(c) loss of anticipated savings; | |||
@@ -95,14 +95,14 @@ You should print a copy of this Licence for future reference. | |||
(f) any indirect or consequential loss or damage; or | |||
(g) any computer failure or malfunction, corruption to or loss of data or files, or any and all other commercial damage or loss. | |||
6.4. Nothing in this Licence shall limit or exclude our liability for: | |||
6.4. Nothing in this License shall limit or exclude our liability for: | |||
(a) death or personal injury resulting from our negligence; | |||
(b) fraud or fraudulent misrepresentation; | |||
(c) any other liability that cannot be excluded or limited by English law. | |||
6.5. This Licence sets out the full extent of our obligations and liabilities in respect of the supply of the Software and Documentation. Except as expressly stated in this Licence, there are no conditions, warranties, representations or other terms, express or implied, that are binding on us. Any condition, warranty, representation or other term concerning the supply of the Software and Documentation which might otherwise be implied into, or incorporated in, this Licence whether by statute, common law or otherwise, is excluded to the fullest extent permitted by law. | |||
6.5. This License sets out the full extent of our obligations and liabilities in respect of the supply of the Software and Documentation. Except as expressly stated in this License, there are no conditions, warranties, representations or other terms, express or implied, that are binding on us. Any condition, warranty, representation or other term concerning the supply of the Software and Documentation which might otherwise be implied into, or incorporated in, this License whether by statute, common law or otherwise, is excluded to the fullest extent permitted by law. | |||
6.6. Subject to clause 5.2 and 5.3, our maximum aggregate liability under or in connection with this Licence whether in contract, tort (including negligence) or otherwise, shall in all circumstances be limited to a sum equal to $49. | |||
6.6. Subject to clause 5.2 and 5.3, our maximum aggregate liability under or in connection with this License whether in contract, tort (including negligence) or otherwise, shall in all circumstances be limited to a sum equal to $49. | |||
6.7. You agree to indemnify, defend and hold us and our licensors, partners, affiliates, contractors, officers, directors, employees and agents harmless from any claims, costs and expenses (including legal expenses) arising directly or indirectly from your use, handling or operation of the Software otherwise than in accordance with this Agreement. | |||
@@ -110,16 +110,16 @@ You should print a copy of this Licence for future reference. | |||
7. Termination | |||
7.1. We may terminate this Licence immediately by written notice to you if you commit a material or persistent breach of this Licence which you fail to remedy (if remediable) within 14 days after the service of written notice requiring you to do so. | |||
7.1. We may terminate this License immediately by written notice to you if you commit a material or persistent breach of this License which you fail to remedy (if remediable) within 14 days after the service of written notice requiring you to do so. | |||
7.2. Upon termination for any reason: | |||
(a) all rights granted to you under this Licence shall cease; | |||
(b) you must cease all activities authorised by this Licence; | |||
(a) all rights granted to you under this License shall cease; | |||
(b) you must cease all activities authorised by this License; | |||
(c) you must immediately delete or remove the Software from all computer equipment in your possession and immediately destroy or return to us (at our option) all copies of the Software then in your possession, custody or control and, in the case of destruction, certify to us that you have done so. | |||
8. Communications between us | |||
8.1. If you wish to contact us in writing, or if any condition in this Licence requires you to give us notice in writing, you can send this to us by e-mail or by pre-paid post to us at support@juce.com. We will confirm receipt of this by contacting you in writing, normally by e-mail. | |||
8.1. If you wish to contact us in writing, or if any condition in this License requires you to give us notice in writing, you can send this to us by e-mail or by pre-paid post to us at support@juce.com. We will confirm receipt of this by contacting you in writing, normally by e-mail. | |||
8.2. If we have to contact you or give you notice in writing, we will do so by e-mail or by pre-paid post to the address you provide to us in your order for the Software. | |||
@@ -129,14 +129,14 @@ You should print a copy of this Licence for future reference. | |||
10. Other important terms | |||
10.1. We may transfer our rights and obligations under this Licence to another organisation, but this will not affect your rights or our obligations under this Licence. | |||
10.1. We may transfer our rights and obligations under this License to another organisation, but this will not affect your rights or our obligations under this License. | |||
10.2. You may only transfer your rights or your obligations under this Licence to another person if we agree in writing. | |||
10.2. You may only transfer your rights or your obligations under this License to another person if we agree in writing. | |||
10.3. This Licence and any document expressly referred to in it constitutes the entire agreement between you and us. You acknowledge that you have not relied on any statement, promise or representation made or given by or on behalf of us which is not set out in this Licence or any document expressly referred to in it. | |||
10.3. This License and any document expressly referred to in it constitutes the entire agreement between you and us. You acknowledge that you have not relied on any statement, promise or representation made or given by or on behalf of us which is not set out in this License or any document expressly referred to in it. | |||
10.4. If we fail to insist that you perform any of your obligations under this Licence, or if we do not enforce our rights against you, or if we delay in doing so, that will not mean that we have waived our rights against you and will not mean that you do not have to comply with those obligations. If we do waive a default by you, we will only do so in writing, and that will not mean that we will automatically waive any later default by you. | |||
10.4. If we fail to insist that you perform any of your obligations under this License, or if we do not enforce our rights against you, or if we delay in doing so, that will not mean that we have waived our rights against you and will not mean that you do not have to comply with those obligations. If we do waive a default by you, we will only do so in writing, and that will not mean that we will automatically waive any later default by you. | |||
10.5. Each of the conditions of this Licence operates separately. If any court or competent authority decides that any of them are unlawful or unenforceable, the remaining conditions will remain in full force and effect. | |||
10.5. Each of the conditions of this License operates separately. If any court or competent authority decides that any of them are unlawful or unenforceable, the remaining conditions will remain in full force and effect. | |||
10.6. Please note that this Licence, its subject matter and its formation, are governed by English law. You and we both agree to that the courts of England and Wales will have exclusive jurisdiction. | |||
10.6. Please note that this License, its subject matter and its formation, are governed by English law. You and we both agree to that the courts of England and Wales will have exclusive jurisdiction. |
@@ -1,45 +1,175 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> | |||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> | |||
<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 136.9 114.8" enable-background="new 0 0 136.9 114.8" xml:space="preserve"> | |||
<g id="Layer_1_18_"> | |||
<rect x="16.3" y="10.9" fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" width="103.6" height="67.5"/> | |||
</g> | |||
<rect x="16.3" y="10.9" fill="none" stroke="#F29300" stroke-width="1.3469" stroke-miterlimit="10" width="103.6" height="2.4"/> | |||
<circle fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" cx="80.3" cy="45" r="20.8"/> | |||
<g> | |||
<g> | |||
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M97.8,40.1c0.9,3.2,0,8-2.1,8.3 | |||
c-2,0.2-10.5-2.2-14.8-3.6c2.9-3.4,8.9-10,10.8-10.8C93.5,33.2,96.9,36.9,97.8,40.1z"/> | |||
</g> | |||
<g> | |||
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M93.3,57.7c-2.3,2.4-7,4-8.2,2.4 | |||
c-1.2-1.6-3.4-10.2-4.3-14.6c4.4,0.8,13.1,2.8,14.7,4C97.2,50.5,95.6,55.3,93.3,57.7z"/> | |||
</g> | |||
<g> | |||
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M75.7,62.6c-3.2-0.8-7-4.1-6.1-6 | |||
c0.8-1.9,7.2-8,10.5-11.1c1.5,4.3,4.1,12.7,3.9,14.8C83.9,62.4,79,63.4,75.7,62.6z"/> | |||
</g> | |||
<g> | |||
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M62.9,49.9c-0.9-3.2,0-8,2.1-8.3 | |||
c2-0.2,10.5,2.2,14.8,3.6c-2.9,3.4-8.9,10-10.8,10.8C67.2,56.8,63.8,53.1,62.9,49.9z"/> | |||
</g> | |||
<g> | |||
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M67.4,32.3c2.3-2.4,7-4,8.2-2.4 | |||
c1.2,1.6,3.4,10.2,4.3,14.6c-4.4-0.8-13.1-2.8-14.7-4C63.5,39.4,65.1,34.7,67.4,32.3z"/> | |||
</g> | |||
<g> | |||
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M84.8,27.4c3.2,0.8,7,4.1,6.1,6 | |||
c-0.8,1.9-7.2,8-10.5,11.1c-1.5-4.3-4.1-12.7-3.9-14.8C76.7,27.6,81.6,26.6,84.8,27.4z"/> | |||
</g> | |||
</g> | |||
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M130,114.8H6.9c-3.8,0-6.9-3.1-6.9-6.9V6.9 | |||
C0,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"/> | |||
<path opacity="0.8" fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M62.6,61.4 | |||
c-9.1-9.1-9.1-23.7,0-32.8"/> | |||
<path opacity="0.5" fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M55.9,57.3 | |||
c-4.7-7.4-4.7-16.9-0.1-24.4"/> | |||
<line opacity="0.7" fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" x1="57.7" y1="41.5" x2="37.8" y2="41.5"/> | |||
<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"/> | |||
</svg> | |||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> | |||
<svg | |||
xmlns:dc="http://purl.org/dc/elements/1.1/" | |||
xmlns:cc="http://creativecommons.org/ns#" | |||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||
xmlns:svg="http://www.w3.org/2000/svg" | |||
xmlns="http://www.w3.org/2000/svg" | |||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
version="1.1" | |||
id="Layer_1" | |||
x="0px" | |||
y="0px" | |||
viewBox="0 0 136.9 114.8" | |||
enable-background="new 0 0 136.9 114.8" | |||
xml:space="preserve" | |||
inkscape:version="0.91 r13725" | |||
sodipodi:docname="wizard_AnimatedApp.svg"><metadata | |||
id="metadata50"><rdf:RDF><cc:Work | |||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs | |||
id="defs48" /><sodipodi:namedview | |||
pagecolor="#ffffff" | |||
bordercolor="#666666" | |||
borderopacity="1" | |||
objecttolerance="10" | |||
gridtolerance="10" | |||
guidetolerance="10" | |||
inkscape:pageopacity="0" | |||
inkscape:pageshadow="2" | |||
inkscape:window-width="1680" | |||
inkscape:window-height="1001" | |||
id="namedview46" | |||
showgrid="false" | |||
inkscape:zoom="5.6568543" | |||
inkscape:cx="85.414924" | |||
inkscape:cy="49.441529" | |||
inkscape:window-x="0" | |||
inkscape:window-y="1" | |||
inkscape:window-maximized="1" | |||
inkscape:current-layer="Layer_1" /><g | |||
id="Layer_1_18_" | |||
style="stroke:#a45c94;stroke-opacity:1"><rect | |||
x="16.3" | |||
y="10.9" | |||
stroke-miterlimit="10" | |||
width="103.6" | |||
height="67.5" | |||
id="rect4" | |||
stroke-width="1.3469" | |||
stroke="#a45c94" | |||
fill="none" | |||
style="stroke:#a45c94;stroke-opacity:1" /></g><rect | |||
x="16.3" | |||
y="10.9" | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.3469" | |||
stroke-miterlimit="10" | |||
width="103.6" | |||
height="2.4" | |||
id="rect6" | |||
style="stroke:#a45c9f;stroke-opacity:0.94117647" /><circle | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.3469" | |||
stroke-miterlimit="10" | |||
cx="80.3" | |||
cy="45" | |||
r="20.8" | |||
id="circle8" | |||
style="stroke:#a45c94;stroke-opacity:1" /><g | |||
id="g10" | |||
style="stroke:#a45c94;stroke-opacity:1"><g | |||
id="g12" | |||
style="stroke:#a45c94;stroke-opacity:1"><path | |||
stroke-miterlimit="10" | |||
d="M97.8,40.1c0.9,3.2,0,8-2.1,8.3 c-2,0.2-10.5-2.2-14.8-3.6c2.9-3.4,8.9-10,10.8-10.8C93.5,33.2,96.9,36.9,97.8,40.1z" | |||
id="path14" | |||
stroke-width="1.3469" | |||
stroke="#a45c94" | |||
fill="none" | |||
style="stroke:#a45c94;stroke-opacity:1" /></g><g | |||
id="g16" | |||
style="stroke:#a45c94;stroke-opacity:1"><path | |||
stroke-miterlimit="10" | |||
d="M93.3,57.7c-2.3,2.4-7,4-8.2,2.4 c-1.2-1.6-3.4-10.2-4.3-14.6c4.4,0.8,13.1,2.8,14.7,4C97.2,50.5,95.6,55.3,93.3,57.7z" | |||
id="path18" | |||
stroke-width="1.3469" | |||
stroke="#a45c94" | |||
fill="none" | |||
style="stroke:#a45c94;stroke-opacity:1" /></g><g | |||
id="g20" | |||
style="stroke:#a45c94;stroke-opacity:1"><path | |||
stroke-miterlimit="10" | |||
d="M75.7,62.6c-3.2-0.8-7-4.1-6.1-6 c0.8-1.9,7.2-8,10.5-11.1c1.5,4.3,4.1,12.7,3.9,14.8C83.9,62.4,79,63.4,75.7,62.6z" | |||
id="path22" | |||
stroke-width="1.3469" | |||
stroke="#a45c94" | |||
fill="none" | |||
style="stroke:#a45c94;stroke-opacity:1" /></g><g | |||
id="g24" | |||
style="stroke:#a45c94;stroke-opacity:1"><path | |||
stroke-miterlimit="10" | |||
d="M62.9,49.9c-0.9-3.2,0-8,2.1-8.3 c2-0.2,10.5,2.2,14.8,3.6c-2.9,3.4-8.9,10-10.8,10.8C67.2,56.8,63.8,53.1,62.9,49.9z" | |||
id="path26" | |||
stroke-width="1.3469" | |||
stroke="#a45c94" | |||
fill="none" | |||
style="stroke:#a45c94;stroke-opacity:1" /></g><g | |||
id="g28" | |||
style="stroke:#a45c94;stroke-opacity:1"><path | |||
stroke-miterlimit="10" | |||
d="M67.4,32.3c2.3-2.4,7-4,8.2-2.4 c1.2,1.6,3.4,10.2,4.3,14.6c-4.4-0.8-13.1-2.8-14.7-4C63.5,39.4,65.1,34.7,67.4,32.3z" | |||
id="path30" | |||
stroke-width="1.3469" | |||
stroke="#a45c94" | |||
fill="none" | |||
style="stroke:#a45c94;stroke-opacity:1" /></g><g | |||
id="g32" | |||
style="stroke:#a45c94;stroke-opacity:1"><path | |||
stroke-miterlimit="10" | |||
d="M84.8,27.4c3.2,0.8,7,4.1,6.1,6 c-0.8,1.9-7.2,8-10.5,11.1c-1.5-4.3-4.1-12.7-3.9-14.8C76.7,27.6,81.6,26.6,84.8,27.4z" | |||
id="path34" | |||
stroke-width="1.3469" | |||
stroke="#a45c94" | |||
fill="none" | |||
style="stroke:#a45c94;stroke-opacity:1" /></g></g><path | |||
stroke-miterlimit="10" | |||
d="M130,114.8H6.9c-3.8,0-6.9-3.1-6.9-6.9V6.9 C0,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" | |||
id="path36" | |||
stroke-width="1.3469" | |||
stroke="#a45c94" | |||
fill="none" | |||
style="stroke:#a45c94;stroke-opacity:1" /><path | |||
opacity="0.8" | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.3469" | |||
stroke-miterlimit="10" | |||
d="M62.6,61.4 c-9.1-9.1-9.1-23.7,0-32.8" | |||
id="path38" | |||
style="stroke:#a45c94;stroke-opacity:1" /><path | |||
opacity="0.5" | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.3469" | |||
stroke-miterlimit="10" | |||
d="M55.9,57.3 c-4.7-7.4-4.7-16.9-0.1-24.4" | |||
id="path40" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
opacity="0.7" | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.3469" | |||
stroke-miterlimit="10" | |||
x1="57.7" | |||
y1="41.5" | |||
x2="37.8" | |||
y2="41.5" | |||
id="line42" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
opacity="0.7" | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.3469" | |||
stroke-miterlimit="10" | |||
x1="57.7" | |||
y1="48.4" | |||
x2="34.2" | |||
y2="48.4" | |||
id="line44" | |||
style="stroke:#a45c94;stroke-opacity:0.94117647" /></svg> |
@@ -1,72 +1,752 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> | |||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> | |||
<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 136.9 114.8" enable-background="new 0 0 136.9 114.8" xml:space="preserve"> | |||
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M130,114.8H6.9c-3.8,0-6.9-3.1-6.9-6.9V6.9 | |||
C0,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"/> | |||
<rect x="16.5" y="10.9" fill="none" stroke="#F29300" stroke-width="1.3412" stroke-miterlimit="10" width="102.7" height="2.4"/> | |||
<rect x="16.5" y="10.9" fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" width="102.9" height="67.5"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="17.1" y1="43.8" x2="17.1" y2="44.5"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="18.8" y1="43.6" x2="18.8" y2="44.7"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="20.4" y1="43.8" x2="20.4" y2="44.5"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="22.1" y1="43.6" x2="22.1" y2="44.7"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="23.8" y1="43.1" x2="23.8" y2="45.2"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="25.4" y1="42.3" x2="25.4" y2="46"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="27.1" y1="43.9" x2="27.1" y2="44.4"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="28.8" y1="43.3" x2="28.8" y2="45"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="30.4" y1="29.3" x2="30.4" y2="59"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="32.1" y1="40.9" x2="32.1" y2="47.4"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="33.8" y1="42.7" x2="33.8" y2="45.6"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="35.4" y1="36.6" x2="35.4" y2="51.7"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="37.1" y1="33.3" x2="37.1" y2="55.1"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="38.8" y1="42.6" x2="38.8" y2="45.7"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="40.4" y1="37.4" x2="40.4" y2="50.9"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="42.1" y1="27.4" x2="42.1" y2="60.9"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="43.8" y1="39.3" x2="43.8" y2="49"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="45.4" y1="41.1" x2="45.4" y2="47.2"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="47.1" y1="42.6" x2="47.1" y2="45.7"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="48.8" y1="36.2" x2="48.8" y2="52.1"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="50.4" y1="42.5" x2="50.4" y2="45.9"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="52.1" y1="39.3" x2="52.1" y2="49"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="53.8" y1="34.8" x2="53.8" y2="53.5"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="55.4" y1="42.2" x2="55.4" y2="46.1"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="57.1" y1="41" x2="57.1" y2="47.3"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="58.8" y1="35.4" x2="58.8" y2="53"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="60.4" y1="32.6" x2="60.4" y2="55.8"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="62.1" y1="37.4" x2="62.1" y2="50.9"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="63.8" y1="38.1" x2="63.8" y2="50.2"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="65.4" y1="42.2" x2="65.4" y2="46.1"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="67.1" y1="38.9" x2="67.1" y2="49.4"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="68.8" y1="43.6" x2="68.8" y2="44.7"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="70.4" y1="41.4" x2="70.4" y2="47"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="72.1" y1="39" x2="72.1" y2="49.3"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="73.8" y1="40.9" x2="73.8" y2="47.5"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="75.4" y1="40.6" x2="75.4" y2="47.8"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="77.1" y1="38.4" x2="77.1" y2="49.9"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="78.8" y1="42" x2="78.8" y2="46.3"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="80.4" y1="42.2" x2="80.4" y2="46.1"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="82.1" y1="43.6" x2="82.1" y2="44.7"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="83.8" y1="42.6" x2="83.8" y2="45.7"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="85.4" y1="43.3" x2="85.4" y2="45"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="87.1" y1="39.9" x2="87.1" y2="48.4"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="88.8" y1="42.9" x2="88.8" y2="45.4"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="90.4" y1="43.6" x2="90.4" y2="44.7"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="92.1" y1="43.6" x2="92.1" y2="44.7"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="93.8" y1="42.7" x2="93.8" y2="45.6"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="95.4" y1="41.1" x2="95.4" y2="47.2"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="97.1" y1="42.7" x2="97.1" y2="45.6"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="98.8" y1="43.6" x2="98.8" y2="44.7"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="100.4" y1="43.1" x2="100.4" y2="45.2"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="102.1" y1="43.6" x2="102.1" y2="44.7"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="103.8" y1="42" x2="103.8" y2="46.3"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="105.4" y1="43.6" x2="105.4" y2="44.7"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="107.1" y1="43.8" x2="107.1" y2="44.5"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="108.8" y1="43.6" x2="108.8" y2="44.7"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="110.4" y1="43.6" x2="110.4" y2="44.7"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="112.1" y1="42.6" x2="112.1" y2="45.7"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="113.8" y1="43.1" x2="113.8" y2="45.2"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="115.4" y1="43.6" x2="115.4" y2="44.7"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="117.1" y1="43.8" x2="117.1" y2="44.5"/> | |||
<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"/> | |||
</svg> | |||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> | |||
<svg | |||
xmlns:dc="http://purl.org/dc/elements/1.1/" | |||
xmlns:cc="http://creativecommons.org/ns#" | |||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||
xmlns:svg="http://www.w3.org/2000/svg" | |||
xmlns="http://www.w3.org/2000/svg" | |||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
version="1.1" | |||
id="Layer_1" | |||
x="0px" | |||
y="0px" | |||
viewBox="0 0 136.9 114.8" | |||
enable-background="new 0 0 136.9 114.8" | |||
xml:space="preserve" | |||
inkscape:version="0.91 r13725" | |||
sodipodi:docname="wizard_AudioApp.svg"><metadata | |||
id="metadata137"><rdf:RDF><cc:Work | |||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs | |||
id="defs135" /><sodipodi:namedview | |||
pagecolor="#ffffff" | |||
bordercolor="#666666" | |||
borderopacity="1" | |||
objecttolerance="10" | |||
gridtolerance="10" | |||
guidetolerance="10" | |||
inkscape:pageopacity="0" | |||
inkscape:pageshadow="2" | |||
inkscape:window-width="1680" | |||
inkscape:window-height="1001" | |||
id="namedview133" | |||
showgrid="false" | |||
inkscape:zoom="4.1114981" | |||
inkscape:cx="45.83412" | |||
inkscape:cy="47.98031" | |||
inkscape:window-x="0" | |||
inkscape:window-y="1" | |||
inkscape:window-maximized="1" | |||
inkscape:current-layer="Layer_1" /><path | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.3469" | |||
stroke-miterlimit="10" | |||
d="M130,114.8H6.9c-3.8,0-6.9-3.1-6.9-6.9V6.9 C0,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" | |||
id="path3" | |||
style="fill:none;fill-opacity:1;stroke:#a45c94;stroke-opacity:1" /><rect | |||
x="16.5" | |||
y="10.9" | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.3412" | |||
stroke-miterlimit="10" | |||
width="102.7" | |||
height="2.4" | |||
id="rect5" | |||
style="stroke:#a45c94;stroke-opacity:1" /><rect | |||
x="16.5" | |||
y="10.9" | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.3469" | |||
stroke-miterlimit="10" | |||
width="102.9" | |||
height="67.5" | |||
id="rect7" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="17.1" | |||
y1="43.8" | |||
x2="17.1" | |||
y2="44.5" | |||
id="line9" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="18.8" | |||
y1="43.6" | |||
x2="18.8" | |||
y2="44.7" | |||
id="line11" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="20.4" | |||
y1="43.8" | |||
x2="20.4" | |||
y2="44.5" | |||
id="line13" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="22.1" | |||
y1="43.6" | |||
x2="22.1" | |||
y2="44.7" | |||
id="line15" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="23.8" | |||
y1="43.1" | |||
x2="23.8" | |||
y2="45.2" | |||
id="line17" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="25.4" | |||
y1="42.3" | |||
x2="25.4" | |||
y2="46" | |||
id="line19" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="27.1" | |||
y1="43.9" | |||
x2="27.1" | |||
y2="44.4" | |||
id="line21" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="28.8" | |||
y1="43.3" | |||
x2="28.8" | |||
y2="45" | |||
id="line23" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="30.4" | |||
y1="29.3" | |||
x2="30.4" | |||
y2="59" | |||
id="line25" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="32.1" | |||
y1="40.9" | |||
x2="32.1" | |||
y2="47.4" | |||
id="line27" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="33.8" | |||
y1="42.7" | |||
x2="33.8" | |||
y2="45.6" | |||
id="line29" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="35.4" | |||
y1="36.6" | |||
x2="35.4" | |||
y2="51.7" | |||
id="line31" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="37.1" | |||
y1="33.3" | |||
x2="37.1" | |||
y2="55.1" | |||
id="line33" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="38.8" | |||
y1="42.6" | |||
x2="38.8" | |||
y2="45.7" | |||
id="line35" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="40.4" | |||
y1="37.4" | |||
x2="40.4" | |||
y2="50.9" | |||
id="line37" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="42.1" | |||
y1="27.4" | |||
x2="42.1" | |||
y2="60.9" | |||
id="line39" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="43.8" | |||
y1="39.3" | |||
x2="43.8" | |||
y2="49" | |||
id="line41" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="45.4" | |||
y1="41.1" | |||
x2="45.4" | |||
y2="47.2" | |||
id="line43" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="47.1" | |||
y1="42.6" | |||
x2="47.1" | |||
y2="45.7" | |||
id="line45" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="48.8" | |||
y1="36.2" | |||
x2="48.8" | |||
y2="52.1" | |||
id="line47" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="50.4" | |||
y1="42.5" | |||
x2="50.4" | |||
y2="45.9" | |||
id="line49" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="52.1" | |||
y1="39.3" | |||
x2="52.1" | |||
y2="49" | |||
id="line51" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="53.8" | |||
y1="34.8" | |||
x2="53.8" | |||
y2="53.5" | |||
id="line53" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="55.4" | |||
y1="42.2" | |||
x2="55.4" | |||
y2="46.1" | |||
id="line55" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="57.1" | |||
y1="41" | |||
x2="57.1" | |||
y2="47.3" | |||
id="line57" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="58.8" | |||
y1="35.4" | |||
x2="58.8" | |||
y2="53" | |||
id="line59" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="60.4" | |||
y1="32.6" | |||
x2="60.4" | |||
y2="55.8" | |||
id="line61" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="62.1" | |||
y1="37.4" | |||
x2="62.1" | |||
y2="50.9" | |||
id="line63" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="63.8" | |||
y1="38.1" | |||
x2="63.8" | |||
y2="50.2" | |||
id="line65" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="65.4" | |||
y1="42.2" | |||
x2="65.4" | |||
y2="46.1" | |||
id="line67" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="67.1" | |||
y1="38.9" | |||
x2="67.1" | |||
y2="49.4" | |||
id="line69" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="68.8" | |||
y1="43.6" | |||
x2="68.8" | |||
y2="44.7" | |||
id="line71" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="70.4" | |||
y1="41.4" | |||
x2="70.4" | |||
y2="47" | |||
id="line73" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="72.1" | |||
y1="39" | |||
x2="72.1" | |||
y2="49.3" | |||
id="line75" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="73.8" | |||
y1="40.9" | |||
x2="73.8" | |||
y2="47.5" | |||
id="line77" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="75.4" | |||
y1="40.6" | |||
x2="75.4" | |||
y2="47.8" | |||
id="line79" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="77.1" | |||
y1="38.4" | |||
x2="77.1" | |||
y2="49.9" | |||
id="line81" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="78.8" | |||
y1="42" | |||
x2="78.8" | |||
y2="46.3" | |||
id="line83" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="80.4" | |||
y1="42.2" | |||
x2="80.4" | |||
y2="46.1" | |||
id="line85" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="82.1" | |||
y1="43.6" | |||
x2="82.1" | |||
y2="44.7" | |||
id="line87" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="83.8" | |||
y1="42.6" | |||
x2="83.8" | |||
y2="45.7" | |||
id="line89" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="85.4" | |||
y1="43.3" | |||
x2="85.4" | |||
y2="45" | |||
id="line91" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="87.1" | |||
y1="39.9" | |||
x2="87.1" | |||
y2="48.4" | |||
id="line93" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="88.8" | |||
y1="42.9" | |||
x2="88.8" | |||
y2="45.4" | |||
id="line95" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="90.4" | |||
y1="43.6" | |||
x2="90.4" | |||
y2="44.7" | |||
id="line97" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="92.1" | |||
y1="43.6" | |||
x2="92.1" | |||
y2="44.7" | |||
id="line99" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="93.8" | |||
y1="42.7" | |||
x2="93.8" | |||
y2="45.6" | |||
id="line101" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="95.4" | |||
y1="41.1" | |||
x2="95.4" | |||
y2="47.2" | |||
id="line103" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="97.1" | |||
y1="42.7" | |||
x2="97.1" | |||
y2="45.6" | |||
id="line105" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="98.8" | |||
y1="43.6" | |||
x2="98.8" | |||
y2="44.7" | |||
id="line107" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="100.4" | |||
y1="43.1" | |||
x2="100.4" | |||
y2="45.2" | |||
id="line109" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="102.1" | |||
y1="43.6" | |||
x2="102.1" | |||
y2="44.7" | |||
id="line111" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="103.8" | |||
y1="42" | |||
x2="103.8" | |||
y2="46.3" | |||
id="line113" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="105.4" | |||
y1="43.6" | |||
x2="105.4" | |||
y2="44.7" | |||
id="line115" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="107.1" | |||
y1="43.8" | |||
x2="107.1" | |||
y2="44.5" | |||
id="line117" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="108.8" | |||
y1="43.6" | |||
x2="108.8" | |||
y2="44.7" | |||
id="line119" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="110.4" | |||
y1="43.6" | |||
x2="110.4" | |||
y2="44.7" | |||
id="line121" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="112.1" | |||
y1="42.6" | |||
x2="112.1" | |||
y2="45.7" | |||
id="line123" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="113.8" | |||
y1="43.1" | |||
x2="113.8" | |||
y2="45.2" | |||
id="line125" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="115.4" | |||
y1="43.6" | |||
x2="115.4" | |||
y2="44.7" | |||
id="line127" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="117.1" | |||
y1="43.8" | |||
x2="117.1" | |||
y2="44.5" | |||
id="line129" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="118.8" | |||
y1="43.8" | |||
x2="118.8" | |||
y2="44.5" | |||
id="line131" | |||
style="stroke:#a45c94;stroke-opacity:1" /></svg> |
@@ -1,109 +1,854 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> | |||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> | |||
<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 136.9 114.8" enable-background="new 0 0 136.9 114.8" xml:space="preserve"> | |||
<g id="Layer_1_23_"> | |||
<rect x="16.3" y="10.9" fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" width="103.6" height="67.5"/> | |||
</g> | |||
<rect x="16.3" y="10.9" fill="none" stroke="#F29300" stroke-width="1.3469" stroke-miterlimit="10" width="103.6" height="2.4"/> | |||
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M130,114.8H6.9c-3.8,0-6.9-3.1-6.9-6.9V6.9 | |||
C0,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"/> | |||
<g id="Layer_1_8_"> | |||
<rect x="35.7" y="23.6" fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" width="64.4" height="42.3"/> | |||
</g> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="36" y1="44.1" x2="36" y2="44.6"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="37.1" y1="44" x2="37.1" y2="44.7"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="38.1" y1="44.1" x2="38.1" y2="44.6"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="39.2" y1="44" x2="39.2" y2="44.7"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="40.2" y1="43.7" x2="40.2" y2="45"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="41.3" y1="43.2" x2="41.3" y2="45.5"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="42.3" y1="44.2" x2="42.3" y2="44.5"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="43.3" y1="43.8" x2="43.3" y2="44.9"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="44.4" y1="35.1" x2="44.4" y2="53.6"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="45.4" y1="42.3" x2="45.4" y2="46.4"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="46.5" y1="43.4" x2="46.5" y2="45.3"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="47.5" y1="39.6" x2="47.5" y2="49.1"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="48.6" y1="37.5" x2="48.6" y2="51.2"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="49.6" y1="43.4" x2="49.6" y2="45.3"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="50.6" y1="40.1" x2="50.6" y2="48.6"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="51.7" y1="33.9" x2="51.7" y2="54.9"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="52.7" y1="41.3" x2="52.7" y2="47.4"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="53.8" y1="42.5" x2="53.8" y2="46.3"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="54.8" y1="43.4" x2="54.8" y2="45.3"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="55.9" y1="39.4" x2="55.9" y2="49.3"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="56.9" y1="43.3" x2="56.9" y2="45.4"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="57.9" y1="41.3" x2="57.9" y2="47.4"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="59" y1="38.5" x2="59" y2="50.2"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="60" y1="43.1" x2="60" y2="45.6"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="61.1" y1="42.4" x2="61.1" y2="46.3"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="62.1" y1="38.8" x2="62.1" y2="49.9"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="63.2" y1="37.1" x2="63.2" y2="51.6"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="64.2" y1="40.1" x2="64.2" y2="48.6"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="65.2" y1="40.6" x2="65.2" y2="48.1"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="66.3" y1="43.1" x2="66.3" y2="45.6"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="67.3" y1="41.1" x2="67.3" y2="47.6"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="68.4" y1="44" x2="68.4" y2="44.7"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="69.4" y1="42.6" x2="69.4" y2="46.1"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="70.5" y1="41.1" x2="70.5" y2="47.6"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="71.5" y1="42.3" x2="71.5" y2="46.4"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="72.5" y1="42.1" x2="72.5" y2="46.6"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="73.6" y1="40.8" x2="73.6" y2="47.9"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="74.6" y1="43" x2="74.6" y2="45.7"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="75.7" y1="43.1" x2="75.7" y2="45.6"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="76.7" y1="44" x2="76.7" y2="44.7"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="77.8" y1="43.4" x2="77.8" y2="45.3"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="78.8" y1="43.8" x2="78.8" y2="44.9"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="79.9" y1="41.7" x2="79.9" y2="47"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="80.9" y1="43.6" x2="80.9" y2="45.2"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="81.9" y1="44" x2="81.9" y2="44.7"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="83" y1="44" x2="83" y2="44.7"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="84" y1="43.4" x2="84" y2="45.3"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="85.1" y1="42.5" x2="85.1" y2="46.3"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="86.1" y1="43.5" x2="86.1" y2="45.2"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="87.2" y1="44" x2="87.2" y2="44.7"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="88.2" y1="43.7" x2="88.2" y2="45"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="89.2" y1="44" x2="89.2" y2="44.7"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="90.3" y1="43" x2="90.3" y2="45.7"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="91.3" y1="44" x2="91.3" y2="44.7"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="92.4" y1="44.2" x2="92.4" y2="44.6"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="93.4" y1="44" x2="93.4" y2="44.7"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="94.5" y1="44" x2="94.5" y2="44.7"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="95.5" y1="43.4" x2="95.5" y2="45.3"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="96.5" y1="43.7" x2="96.5" y2="45"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="97.6" y1="44" x2="97.6" y2="44.7"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="98.6" y1="44.2" x2="98.6" y2="44.6"/> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="99.7" y1="44.2" x2="99.7" y2="44.6"/> | |||
<g> | |||
<g> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-miterlimit="10" x1="16.3" y1="35.1" x2="35.8" y2="35.1"/> | |||
<g> | |||
<circle fill="#F29300" cx="35.7" cy="35.1" r="1.7"/> | |||
</g> | |||
</g> | |||
</g> | |||
<g> | |||
<g> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-miterlimit="10" x1="16.3" y1="54.4" x2="35.8" y2="54.4"/> | |||
<g> | |||
<circle fill="#F29300" cx="35.7" cy="54.4" r="1.7"/> | |||
</g> | |||
</g> | |||
</g> | |||
<g> | |||
<g> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-miterlimit="10" x1="119.7" y1="54.4" x2="100.2" y2="54.4"/> | |||
<g> | |||
<circle fill="#F29300" cx="100.3" cy="54.4" r="1.7"/> | |||
</g> | |||
</g> | |||
</g> | |||
<g> | |||
<g> | |||
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-miterlimit="10" x1="119.7" y1="35.1" x2="100.2" y2="35.1"/> | |||
<g> | |||
<circle fill="#F29300" cx="100.3" cy="35.1" r="1.7"/> | |||
</g> | |||
</g> | |||
</g> | |||
</svg> | |||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> | |||
<svg | |||
xmlns:dc="http://purl.org/dc/elements/1.1/" | |||
xmlns:cc="http://creativecommons.org/ns#" | |||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||
xmlns:svg="http://www.w3.org/2000/svg" | |||
xmlns="http://www.w3.org/2000/svg" | |||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
version="1.1" | |||
id="Layer_1" | |||
x="0px" | |||
y="0px" | |||
viewBox="0 0 136.9 114.8" | |||
enable-background="new 0 0 136.9 114.8" | |||
xml:space="preserve" | |||
inkscape:version="0.91 r13725" | |||
sodipodi:docname="wizard_AudioPlugin.svg"><metadata | |||
id="metadata181"><rdf:RDF><cc:Work | |||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs | |||
id="defs179" /><sodipodi:namedview | |||
pagecolor="#ffffff" | |||
bordercolor="#666666" | |||
borderopacity="1" | |||
objecttolerance="10" | |||
gridtolerance="10" | |||
guidetolerance="10" | |||
inkscape:pageopacity="0" | |||
inkscape:pageshadow="2" | |||
inkscape:window-width="1680" | |||
inkscape:window-height="1001" | |||
id="namedview177" | |||
showgrid="false" | |||
inkscape:zoom="8.2229963" | |||
inkscape:cx="67.455426" | |||
inkscape:cy="64.924074" | |||
inkscape:window-x="0" | |||
inkscape:window-y="1" | |||
inkscape:window-maximized="1" | |||
inkscape:current-layer="Layer_1" /><g | |||
id="Layer_1_23_" | |||
style="stroke:#a45c94;stroke-opacity:1"><rect | |||
x="16.3" | |||
y="10.9" | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.3469" | |||
stroke-miterlimit="10" | |||
width="103.6" | |||
height="67.5" | |||
id="rect4" | |||
style="stroke:#a45c94;stroke-opacity:1" /></g><rect | |||
x="16.3" | |||
y="10.9" | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.3469" | |||
stroke-miterlimit="10" | |||
width="103.6" | |||
height="2.4" | |||
id="rect6" | |||
style="stroke:#a45c94;stroke-opacity:1" /><path | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.3469" | |||
stroke-miterlimit="10" | |||
d="M130,114.8H6.9c-3.8,0-6.9-3.1-6.9-6.9V6.9 C0,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" | |||
id="path8" | |||
style="stroke:#a45c94;stroke-opacity:1" /><g | |||
id="Layer_1_8_" | |||
style="stroke:#a45c94;stroke-opacity:1"><rect | |||
x="35.7" | |||
y="23.6" | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.3469" | |||
stroke-miterlimit="10" | |||
width="64.4" | |||
height="42.3" | |||
id="rect11" | |||
style="stroke:#a45c94;stroke-opacity:1" /></g><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="36" | |||
y1="44.1" | |||
x2="36" | |||
y2="44.6" | |||
id="line13" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="37.1" | |||
y1="44" | |||
x2="37.1" | |||
y2="44.7" | |||
id="line15" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="38.1" | |||
y1="44.1" | |||
x2="38.1" | |||
y2="44.6" | |||
id="line17" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="39.2" | |||
y1="44" | |||
x2="39.2" | |||
y2="44.7" | |||
id="line19" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="40.2" | |||
y1="43.7" | |||
x2="40.2" | |||
y2="45" | |||
id="line21" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="41.3" | |||
y1="43.2" | |||
x2="41.3" | |||
y2="45.5" | |||
id="line23" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="42.3" | |||
y1="44.2" | |||
x2="42.3" | |||
y2="44.5" | |||
id="line25" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="43.3" | |||
y1="43.8" | |||
x2="43.3" | |||
y2="44.9" | |||
id="line27" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="44.4" | |||
y1="35.1" | |||
x2="44.4" | |||
y2="53.6" | |||
id="line29" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="45.4" | |||
y1="42.3" | |||
x2="45.4" | |||
y2="46.4" | |||
id="line31" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="46.5" | |||
y1="43.4" | |||
x2="46.5" | |||
y2="45.3" | |||
id="line33" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="47.5" | |||
y1="39.6" | |||
x2="47.5" | |||
y2="49.1" | |||
id="line35" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="48.6" | |||
y1="37.5" | |||
x2="48.6" | |||
y2="51.2" | |||
id="line37" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="49.6" | |||
y1="43.4" | |||
x2="49.6" | |||
y2="45.3" | |||
id="line39" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="50.6" | |||
y1="40.1" | |||
x2="50.6" | |||
y2="48.6" | |||
id="line41" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="51.7" | |||
y1="33.9" | |||
x2="51.7" | |||
y2="54.9" | |||
id="line43" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="52.7" | |||
y1="41.3" | |||
x2="52.7" | |||
y2="47.4" | |||
id="line45" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="53.8" | |||
y1="42.5" | |||
x2="53.8" | |||
y2="46.3" | |||
id="line47" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="54.8" | |||
y1="43.4" | |||
x2="54.8" | |||
y2="45.3" | |||
id="line49" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="55.9" | |||
y1="39.4" | |||
x2="55.9" | |||
y2="49.3" | |||
id="line51" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="56.9" | |||
y1="43.3" | |||
x2="56.9" | |||
y2="45.4" | |||
id="line53" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="57.9" | |||
y1="41.3" | |||
x2="57.9" | |||
y2="47.4" | |||
id="line55" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="59" | |||
y1="38.5" | |||
x2="59" | |||
y2="50.2" | |||
id="line57" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="60" | |||
y1="43.1" | |||
x2="60" | |||
y2="45.6" | |||
id="line59" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="61.1" | |||
y1="42.4" | |||
x2="61.1" | |||
y2="46.3" | |||
id="line61" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="62.1" | |||
y1="38.8" | |||
x2="62.1" | |||
y2="49.9" | |||
id="line63" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="63.2" | |||
y1="37.1" | |||
x2="63.2" | |||
y2="51.6" | |||
id="line65" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="64.2" | |||
y1="40.1" | |||
x2="64.2" | |||
y2="48.6" | |||
id="line67" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="65.2" | |||
y1="40.6" | |||
x2="65.2" | |||
y2="48.1" | |||
id="line69" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="66.3" | |||
y1="43.1" | |||
x2="66.3" | |||
y2="45.6" | |||
id="line71" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="67.3" | |||
y1="41.1" | |||
x2="67.3" | |||
y2="47.6" | |||
id="line73" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="68.4" | |||
y1="44" | |||
x2="68.4" | |||
y2="44.7" | |||
id="line75" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="69.4" | |||
y1="42.6" | |||
x2="69.4" | |||
y2="46.1" | |||
id="line77" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="70.5" | |||
y1="41.1" | |||
x2="70.5" | |||
y2="47.6" | |||
id="line79" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="71.5" | |||
y1="42.3" | |||
x2="71.5" | |||
y2="46.4" | |||
id="line81" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="72.5" | |||
y1="42.1" | |||
x2="72.5" | |||
y2="46.6" | |||
id="line83" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="73.6" | |||
y1="40.8" | |||
x2="73.6" | |||
y2="47.9" | |||
id="line85" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="74.6" | |||
y1="43" | |||
x2="74.6" | |||
y2="45.7" | |||
id="line87" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="75.7" | |||
y1="43.1" | |||
x2="75.7" | |||
y2="45.6" | |||
id="line89" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="76.7" | |||
y1="44" | |||
x2="76.7" | |||
y2="44.7" | |||
id="line91" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="77.8" | |||
y1="43.4" | |||
x2="77.8" | |||
y2="45.3" | |||
id="line93" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="78.8" | |||
y1="43.8" | |||
x2="78.8" | |||
y2="44.9" | |||
id="line95" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="79.9" | |||
y1="41.7" | |||
x2="79.9" | |||
y2="47" | |||
id="line97" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="80.9" | |||
y1="43.6" | |||
x2="80.9" | |||
y2="45.2" | |||
id="line99" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="81.9" | |||
y1="44" | |||
x2="81.9" | |||
y2="44.7" | |||
id="line101" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="83" | |||
y1="44" | |||
x2="83" | |||
y2="44.7" | |||
id="line103" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="84" | |||
y1="43.4" | |||
x2="84" | |||
y2="45.3" | |||
id="line105" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="85.1" | |||
y1="42.5" | |||
x2="85.1" | |||
y2="46.3" | |||
id="line107" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="86.1" | |||
y1="43.5" | |||
x2="86.1" | |||
y2="45.2" | |||
id="line109" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="87.2" | |||
y1="44" | |||
x2="87.2" | |||
y2="44.7" | |||
id="line111" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="88.2" | |||
y1="43.7" | |||
x2="88.2" | |||
y2="45" | |||
id="line113" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="89.2" | |||
y1="44" | |||
x2="89.2" | |||
y2="44.7" | |||
id="line115" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="90.3" | |||
y1="43" | |||
x2="90.3" | |||
y2="45.7" | |||
id="line117" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="91.3" | |||
y1="44" | |||
x2="91.3" | |||
y2="44.7" | |||
id="line119" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="92.4" | |||
y1="44.2" | |||
x2="92.4" | |||
y2="44.6" | |||
id="line121" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="93.4" | |||
y1="44" | |||
x2="93.4" | |||
y2="44.7" | |||
id="line123" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="94.5" | |||
y1="44" | |||
x2="94.5" | |||
y2="44.7" | |||
id="line125" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="95.5" | |||
y1="43.4" | |||
x2="95.5" | |||
y2="45.3" | |||
id="line127" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="96.5" | |||
y1="43.7" | |||
x2="96.5" | |||
y2="45" | |||
id="line129" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="97.6" | |||
y1="44" | |||
x2="97.6" | |||
y2="44.7" | |||
id="line131" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="98.6" | |||
y1="44.2" | |||
x2="98.6" | |||
y2="44.6" | |||
id="line133" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-linecap="round" | |||
stroke-miterlimit="10" | |||
x1="99.7" | |||
y1="44.2" | |||
x2="99.7" | |||
y2="44.6" | |||
id="line135" | |||
style="stroke:#a45c94;stroke-opacity:1" /><g | |||
id="g137" | |||
style="stroke:#a45c94;stroke-opacity:1;fill:#a45c94;fill-opacity:1"><g | |||
id="g139" | |||
style="stroke:#a45c94;stroke-opacity:1;fill:#a45c94;fill-opacity:1"><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-miterlimit="10" | |||
x1="16.3" | |||
y1="35.1" | |||
x2="35.8" | |||
y2="35.1" | |||
id="line141" | |||
style="stroke:#a45c94;stroke-opacity:1;fill:#a45c94;fill-opacity:1" /><g | |||
id="g143" | |||
style="stroke:#a45c94;stroke-opacity:1;fill:#a45c94;fill-opacity:1"><circle | |||
fill="#a45c94" | |||
cx="35.7" | |||
cy="35.1" | |||
r="1.7" | |||
id="circle145" | |||
style="stroke:#a45c94;stroke-opacity:1;fill:#a45c94;fill-opacity:1" /></g></g></g><g | |||
id="g147" | |||
style="stroke:#a45c94;stroke-opacity:1;fill:#a45c94;fill-opacity:1"><g | |||
id="g149" | |||
style="stroke:#a45c94;stroke-opacity:1;fill:#a45c94;fill-opacity:1"><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-miterlimit="10" | |||
x1="16.3" | |||
y1="54.4" | |||
x2="35.8" | |||
y2="54.4" | |||
id="line151" | |||
style="stroke:#a45c94;stroke-opacity:1;fill:#a45c94;fill-opacity:1" /><g | |||
id="g153" | |||
style="stroke:#a45c94;stroke-opacity:1;fill:#a45c94;fill-opacity:1"><circle | |||
fill="#a45c94" | |||
cx="35.7" | |||
cy="54.4" | |||
r="1.7" | |||
id="circle155" | |||
style="stroke:#a45c94;stroke-opacity:1;fill:#a45c94;fill-opacity:1" /></g></g></g><g | |||
id="g157" | |||
style="stroke:#a45c94;stroke-opacity:1;fill:#a45c94;fill-opacity:1"><g | |||
id="g159" | |||
style="stroke:#a45c94;stroke-opacity:1;fill:#a45c94;fill-opacity:1"><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-miterlimit="10" | |||
x1="119.7" | |||
y1="54.4" | |||
x2="100.2" | |||
y2="54.4" | |||
id="line161" | |||
style="stroke:#a45c94;stroke-opacity:1;fill:#a45c94;fill-opacity:1" /><g | |||
id="g163" | |||
style="stroke:#a45c94;stroke-opacity:1;fill:#a45c94;fill-opacity:1"><circle | |||
fill="#a45c94" | |||
cx="100.3" | |||
cy="54.4" | |||
r="1.7" | |||
id="circle165" | |||
style="stroke:#a45c94;stroke-opacity:1;fill:#a45c94;fill-opacity:1" /></g></g></g><g | |||
id="g167" | |||
style="stroke:#a45c94;stroke-opacity:1;fill:#a45c94;fill-opacity:1"><g | |||
id="g169" | |||
style="stroke:#a45c94;stroke-opacity:1;fill:#a45c94;fill-opacity:1"><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.5" | |||
stroke-miterlimit="10" | |||
x1="119.7" | |||
y1="35.1" | |||
x2="100.2" | |||
y2="35.1" | |||
id="line171" | |||
style="stroke:#a45c94;stroke-opacity:1;fill:#a45c94;fill-opacity:1" /><g | |||
id="g173" | |||
style="stroke:#a45c94;stroke-opacity:1;fill:#a45c94;fill-opacity:1"><circle | |||
fill="#a45c94" | |||
cx="100.3" | |||
cy="35.1" | |||
r="1.7" | |||
id="circle175" | |||
style="stroke:#a45c94;stroke-opacity:1;fill:#a45c94;fill-opacity:1" /></g></g></g></svg> |
@@ -1,21 +1,85 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> | |||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> | |||
<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 136.9 114.8" enable-background="new 0 0 136.9 114.8" xml:space="preserve"> | |||
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M130,114.8H6.9c-3.8,0-6.9-3.1-6.9-6.9V6.9 | |||
C0,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"/> | |||
<g id="Layer_1_22_"> | |||
<rect x="16.3" y="10.9" fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" width="102.9" height="67.5"/> | |||
</g> | |||
<g id="Layer_3_3_"> | |||
<g opacity="0.8"> | |||
<path fill="#F29300" d="M40.6,28.3l-14.4-6.6v-2.3l17.3,7.8v2.1l-17.3,7.8v-2.3L40.6,28.3z"/> | |||
<path fill="#F29300" d="M62,39.5v1.7H45v-1.7H62z"/> | |||
</g> | |||
<g> | |||
<path fill="#F29300" d="M40.6,28.3l-14.4-6.6v-2.3l17.3,7.8v2.1l-17.3,7.8v-2.3L40.6,28.3z"/> | |||
<path fill="#F29300" d="M62,39.5v1.7H45v-1.7H62z"/> | |||
</g> | |||
</g> | |||
</svg> | |||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> | |||
<svg | |||
xmlns:dc="http://purl.org/dc/elements/1.1/" | |||
xmlns:cc="http://creativecommons.org/ns#" | |||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||
xmlns:svg="http://www.w3.org/2000/svg" | |||
xmlns="http://www.w3.org/2000/svg" | |||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
version="1.1" | |||
id="Layer_1" | |||
x="0px" | |||
y="0px" | |||
viewBox="0 0 136.9 114.8" | |||
enable-background="new 0 0 136.9 114.8" | |||
xml:space="preserve" | |||
inkscape:version="0.91 r13725" | |||
sodipodi:docname="wizard_ConsoleApp.svg"><metadata | |||
id="metadata25"><rdf:RDF><cc:Work | |||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs | |||
id="defs23" /><sodipodi:namedview | |||
pagecolor="#ffffff" | |||
bordercolor="#666666" | |||
borderopacity="1" | |||
objecttolerance="10" | |||
gridtolerance="10" | |||
guidetolerance="10" | |||
inkscape:pageopacity="0" | |||
inkscape:pageshadow="2" | |||
inkscape:window-width="1680" | |||
inkscape:window-height="1001" | |||
id="namedview21" | |||
showgrid="false" | |||
inkscape:zoom="2.0557491" | |||
inkscape:cx="68.449997" | |||
inkscape:cy="57.400002" | |||
inkscape:window-x="0" | |||
inkscape:window-y="1" | |||
inkscape:window-maximized="1" | |||
inkscape:current-layer="Layer_1" /><path | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.3469" | |||
stroke-miterlimit="10" | |||
d="M130,114.8H6.9c-3.8,0-6.9-3.1-6.9-6.9V6.9 C0,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" | |||
id="path3" | |||
style="stroke:#a45c94;stroke-opacity:1" /><g | |||
id="Layer_1_22_" | |||
style="stroke:#a45c94;stroke-opacity:1"><rect | |||
x="16.3" | |||
y="10.9" | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.3469" | |||
stroke-miterlimit="10" | |||
width="102.9" | |||
height="67.5" | |||
id="rect6" | |||
style="stroke:#a45c94;stroke-opacity:1" /></g><g | |||
id="Layer_3_3_" | |||
style="stroke:#a45c94;stroke-opacity:1;fill:#a45c94;fill-opacity:1"><g | |||
opacity="0.8" | |||
id="g9" | |||
style="stroke:#a45c94;stroke-opacity:1;fill:#a45c94;fill-opacity:1"><path | |||
fill="#a45c94" | |||
d="M40.6,28.3l-14.4-6.6v-2.3l17.3,7.8v2.1l-17.3,7.8v-2.3L40.6,28.3z" | |||
id="path11" | |||
style="stroke:#a45c94;stroke-opacity:1;fill:#a45c94;fill-opacity:1" /><path | |||
fill="#a45c94" | |||
d="M62,39.5v1.7H45v-1.7H62z" | |||
id="path13" | |||
style="stroke:#a45c94;stroke-opacity:1;fill:#a45c94;fill-opacity:1" /></g><g | |||
id="g15" | |||
style="stroke:#a45c94;stroke-opacity:1;fill:#a45c94;fill-opacity:1"><path | |||
fill="#a45c94" | |||
d="M40.6,28.3l-14.4-6.6v-2.3l17.3,7.8v2.1l-17.3,7.8v-2.3L40.6,28.3z" | |||
id="path17" | |||
style="stroke:#a45c94;stroke-opacity:1;fill:#a45c94;fill-opacity:1" /><path | |||
fill="#a45c94" | |||
d="M62,39.5v1.7H45v-1.7H62z" | |||
id="path19" | |||
style="stroke:#a45c94;stroke-opacity:1;fill:#a45c94;fill-opacity:1" /></g></g></svg> |
@@ -1,41 +1,269 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> | |||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> | |||
<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 136.9 114.8" enable-background="new 0 0 136.9 114.8" xml:space="preserve"> | |||
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M130,114.9H6.9c-3.8,0-6.9-3.1-6.9-6.9V7 | |||
c0-3.8,3.1-6.9,6.9-6.9H130c3.8,0,6.9,3.1,6.9,6.9V108C136.9,111.8,133.9,114.9,130,114.9z"/> | |||
<g id="Layer_1_19_"> | |||
<rect x="16.3" y="11" fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" width="102.9" height="67.5"/> | |||
</g> | |||
<g> | |||
<line fill="none" stroke="#F29100" stroke-width="0.4307" stroke-miterlimit="10" x1="39.6" y1="25" x2="39.6" y2="62.3"/> | |||
<line fill="none" stroke="#F29100" stroke-width="0.4307" stroke-miterlimit="10" x1="41.2" y1="25" x2="41.2" y2="62.3"/> | |||
<line fill="none" stroke="#F29100" stroke-width="0.4307" stroke-miterlimit="10" x1="42.8" y1="25" x2="42.8" y2="62.3"/> | |||
<line fill="none" stroke="#F29100" stroke-width="0.4307" stroke-miterlimit="10" x1="44.5" y1="25" x2="44.5" y2="62.3"/> | |||
<line fill="none" stroke="#F29100" stroke-width="0.4307" stroke-miterlimit="10" x1="46.1" y1="25" x2="46.1" y2="62.3"/> | |||
<line fill="none" stroke="#F29100" stroke-width="0.4307" stroke-miterlimit="10" x1="47.7" y1="25" x2="47.7" y2="62.3"/> | |||
</g> | |||
<path fill="none" stroke="#F29100" stroke-width="1.0853" stroke-miterlimit="10" d="M49.9,23.9v38.6c0,0.9-0.7,1.6-1.6,1.6H39 | |||
c-0.9,0-1.6-0.7-1.6-1.6V23.9"/> | |||
<g> | |||
<line fill="none" stroke="#F29100" stroke-width="0.4307" stroke-miterlimit="10" x1="54.8" y1="27.5" x2="67.4" y2="62.6"/> | |||
<line fill="none" stroke="#F29100" stroke-width="0.4307" stroke-miterlimit="10" x1="56.3" y1="27" x2="69" y2="62"/> | |||
<line fill="none" stroke="#F29100" stroke-width="0.4307" stroke-miterlimit="10" x1="57.8" y1="26.4" x2="70.5" y2="61.5"/> | |||
<line fill="none" stroke="#F29100" stroke-width="0.4307" stroke-miterlimit="10" x1="59.4" y1="25.9" x2="72.1" y2="60.9"/> | |||
<line fill="none" stroke="#F29100" stroke-width="0.4307" stroke-miterlimit="10" x1="60.9" y1="25.3" x2="73.6" y2="60.4"/> | |||
<line fill="none" stroke="#F29100" stroke-width="0.4307" stroke-miterlimit="10" x1="62.4" y1="24.8" x2="75.1" y2="59.8"/> | |||
</g> | |||
<path fill="none" stroke="#F29100" stroke-width="1.0853" stroke-miterlimit="10" d="M64.1,23l13.1,36.3c0.3,0.8-0.1,1.7-0.9,2 | |||
l-8.8,3.2c-0.8,0.3-1.7-0.1-2-0.9L52.4,27.2"/> | |||
<g> | |||
<line fill="none" stroke="#F29100" stroke-width="0.4307" stroke-miterlimit="10" x1="72.5" y1="30.6" x2="93.5" y2="61.4"/> | |||
<line fill="none" stroke="#F29100" stroke-width="0.4307" stroke-miterlimit="10" x1="73.8" y1="29.7" x2="94.9" y2="60.5"/> | |||
<line fill="none" stroke="#F29100" stroke-width="0.4307" stroke-miterlimit="10" x1="75.2" y1="28.8" x2="96.2" y2="59.6"/> | |||
<line fill="none" stroke="#F29100" stroke-width="0.4307" stroke-miterlimit="10" x1="76.5" y1="27.9" x2="97.6" y2="58.6"/> | |||
<line fill="none" stroke="#F29100" stroke-width="0.4307" stroke-miterlimit="10" x1="77.9" y1="27" x2="98.9" y2="57.7"/> | |||
<line fill="none" stroke="#F29100" stroke-width="0.4307" stroke-miterlimit="10" x1="79.2" y1="26" x2="100.3" y2="56.8"/> | |||
</g> | |||
<path fill="none" stroke="#F29100" stroke-width="1.0853" stroke-miterlimit="10" d="M80.4,23.9l21.8,31.9c0.5,0.7,0.3,1.7-0.4,2.2 | |||
l-7.7,5.3c-0.7,0.5-1.7,0.3-2.2-0.4L70.1,31"/> | |||
</svg> | |||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> | |||
<svg | |||
xmlns:dc="http://purl.org/dc/elements/1.1/" | |||
xmlns:cc="http://creativecommons.org/ns#" | |||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||
xmlns:svg="http://www.w3.org/2000/svg" | |||
xmlns="http://www.w3.org/2000/svg" | |||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
version="1.1" | |||
id="Layer_1" | |||
x="0px" | |||
y="0px" | |||
viewBox="0 0 136.9 114.8" | |||
enable-background="new 0 0 136.9 114.8" | |||
xml:space="preserve" | |||
inkscape:version="0.91 r13725" | |||
sodipodi:docname="wizard_DLL.svg"><metadata | |||
id="metadata60"><rdf:RDF><cc:Work | |||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs | |||
id="defs58" /><sodipodi:namedview | |||
pagecolor="#ffffff" | |||
bordercolor="#666666" | |||
borderopacity="1" | |||
objecttolerance="10" | |||
gridtolerance="10" | |||
guidetolerance="10" | |||
inkscape:pageopacity="0" | |||
inkscape:pageshadow="2" | |||
inkscape:window-width="1680" | |||
inkscape:window-height="1001" | |||
id="namedview56" | |||
showgrid="false" | |||
inkscape:zoom="2.0557491" | |||
inkscape:cx="68.449997" | |||
inkscape:cy="57.400002" | |||
inkscape:window-x="0" | |||
inkscape:window-y="1" | |||
inkscape:window-maximized="1" | |||
inkscape:current-layer="Layer_1" /><path | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.3469" | |||
stroke-miterlimit="10" | |||
d="M130,114.9H6.9c-3.8,0-6.9-3.1-6.9-6.9V7 c0-3.8,3.1-6.9,6.9-6.9H130c3.8,0,6.9,3.1,6.9,6.9V108C136.9,111.8,133.9,114.9,130,114.9z" | |||
id="path3" | |||
style="stroke:#a45c94;stroke-opacity:1" /><g | |||
id="Layer_1_19_" | |||
style="stroke:#a45c94;stroke-opacity:1"><rect | |||
x="16.3" | |||
y="11" | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.3469" | |||
stroke-miterlimit="10" | |||
width="102.9" | |||
height="67.5" | |||
id="rect6" | |||
style="stroke:#a45c94;stroke-opacity:1" /></g><g | |||
id="g8" | |||
style="stroke:#a45c94;stroke-opacity:1"><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.4307" | |||
stroke-miterlimit="10" | |||
x1="39.6" | |||
y1="25" | |||
x2="39.6" | |||
y2="62.3" | |||
id="line10" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.4307" | |||
stroke-miterlimit="10" | |||
x1="41.2" | |||
y1="25" | |||
x2="41.2" | |||
y2="62.3" | |||
id="line12" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.4307" | |||
stroke-miterlimit="10" | |||
x1="42.8" | |||
y1="25" | |||
x2="42.8" | |||
y2="62.3" | |||
id="line14" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.4307" | |||
stroke-miterlimit="10" | |||
x1="44.5" | |||
y1="25" | |||
x2="44.5" | |||
y2="62.3" | |||
id="line16" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.4307" | |||
stroke-miterlimit="10" | |||
x1="46.1" | |||
y1="25" | |||
x2="46.1" | |||
y2="62.3" | |||
id="line18" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.4307" | |||
stroke-miterlimit="10" | |||
x1="47.7" | |||
y1="25" | |||
x2="47.7" | |||
y2="62.3" | |||
id="line20" | |||
style="stroke:#a45c94;stroke-opacity:1" /></g><path | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.0853" | |||
stroke-miterlimit="10" | |||
d="M49.9,23.9v38.6c0,0.9-0.7,1.6-1.6,1.6H39 c-0.9,0-1.6-0.7-1.6-1.6V23.9" | |||
id="path22" | |||
style="stroke:#a45c94;stroke-opacity:1" /><g | |||
id="g24" | |||
style="stroke:#a45c94;stroke-opacity:1"><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.4307" | |||
stroke-miterlimit="10" | |||
x1="54.8" | |||
y1="27.5" | |||
x2="67.4" | |||
y2="62.6" | |||
id="line26" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.4307" | |||
stroke-miterlimit="10" | |||
x1="56.3" | |||
y1="27" | |||
x2="69" | |||
y2="62" | |||
id="line28" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.4307" | |||
stroke-miterlimit="10" | |||
x1="57.8" | |||
y1="26.4" | |||
x2="70.5" | |||
y2="61.5" | |||
id="line30" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.4307" | |||
stroke-miterlimit="10" | |||
x1="59.4" | |||
y1="25.9" | |||
x2="72.1" | |||
y2="60.9" | |||
id="line32" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.4307" | |||
stroke-miterlimit="10" | |||
x1="60.9" | |||
y1="25.3" | |||
x2="73.6" | |||
y2="60.4" | |||
id="line34" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.4307" | |||
stroke-miterlimit="10" | |||
x1="62.4" | |||
y1="24.8" | |||
x2="75.1" | |||
y2="59.8" | |||
id="line36" | |||
style="stroke:#a45c94;stroke-opacity:1" /></g><path | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.0853" | |||
stroke-miterlimit="10" | |||
d="M64.1,23l13.1,36.3c0.3,0.8-0.1,1.7-0.9,2 l-8.8,3.2c-0.8,0.3-1.7-0.1-2-0.9L52.4,27.2" | |||
id="path38" | |||
style="stroke:#a45c94;stroke-opacity:1" /><g | |||
id="g40" | |||
style="stroke:#a45c94;stroke-opacity:1"><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.4307" | |||
stroke-miterlimit="10" | |||
x1="72.5" | |||
y1="30.6" | |||
x2="93.5" | |||
y2="61.4" | |||
id="line42" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.4307" | |||
stroke-miterlimit="10" | |||
x1="73.8" | |||
y1="29.7" | |||
x2="94.9" | |||
y2="60.5" | |||
id="line44" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.4307" | |||
stroke-miterlimit="10" | |||
x1="75.2" | |||
y1="28.8" | |||
x2="96.2" | |||
y2="59.6" | |||
id="line46" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.4307" | |||
stroke-miterlimit="10" | |||
x1="76.5" | |||
y1="27.9" | |||
x2="97.6" | |||
y2="58.6" | |||
id="line48" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.4307" | |||
stroke-miterlimit="10" | |||
x1="77.9" | |||
y1="27" | |||
x2="98.9" | |||
y2="57.7" | |||
id="line50" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.4307" | |||
stroke-miterlimit="10" | |||
x1="79.2" | |||
y1="26" | |||
x2="100.3" | |||
y2="56.8" | |||
id="line52" | |||
style="stroke:#a45c94;stroke-opacity:1" /></g><path | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.0853" | |||
stroke-miterlimit="10" | |||
d="M80.4,23.9l21.8,31.9c0.5,0.7,0.3,1.7-0.4,2.2 l-7.7,5.3c-0.7,0.5-1.7,0.3-2.2-0.4L70.1,31" | |||
id="path54" | |||
style="stroke:#a45c94;stroke-opacity:1" /></svg> |
@@ -1,49 +1,168 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> | |||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> | |||
<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 136.9 114.8" enable-background="new 0 0 136.9 114.8" xml:space="preserve"> | |||
<rect x="16.3" y="10.9" fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" width="103.6" height="67.5"/> | |||
<path fill="none" stroke="#F29300" stroke-width="0.7078" stroke-miterlimit="10" d="M55.2,62.5H23.4c-0.4,0-0.7-0.4-0.7-0.9l0,0 | |||
c0-0.5,0.3-0.9,0.7-0.9h31.8c0.4,0,0.7,0.4,0.7,0.9l0,0C55.9,62.1,55.5,62.5,55.2,62.5z"/> | |||
<path fill="#F29300" d="M38.1,62.5H23.4c-0.4,0-0.7-0.4-0.7-0.9l0,0c0-0.5,0.3-0.9,0.7-0.9h14.7c0.4,0,0.7,0.4,0.7,0.9l0,0 | |||
C38.7,62.1,38.4,62.5,38.1,62.5z"/> | |||
<path fill="none" stroke="#F29300" stroke-width="0.7078" stroke-miterlimit="10" d="M55.2,67.8H23.4c-0.4,0-0.7-0.4-0.7-0.9l0,0 | |||
c0-0.5,0.3-0.9,0.7-0.9h31.8c0.4,0,0.7,0.4,0.7,0.9l0,0C55.9,67.4,55.5,67.8,55.2,67.8z"/> | |||
<path fill="#F29300" d="M44.2,67.8H23.4c-0.4,0-0.7-0.4-0.7-0.9l0,0c0-0.5,0.3-0.9,0.7-0.9h20.8c0.4,0,0.7,0.4,0.7,0.9l0,0 | |||
C44.8,67.4,44.6,67.8,44.2,67.8z"/> | |||
<path fill="none" stroke="#F29300" stroke-width="0.7078" stroke-miterlimit="10" d="M55.2,73H23.4c-0.4,0-0.7-0.4-0.7-0.9l0,0 | |||
c0-0.5,0.3-0.9,0.7-0.9h31.8c0.4,0,0.7,0.4,0.7,0.9l0,0C55.9,72.6,55.5,73,55.2,73z"/> | |||
<path fill="#F29300" d="M49.4,73h-26c-0.4,0-0.7-0.4-0.7-0.9l0,0c0-0.5,0.3-0.9,0.7-0.9h26c0.4,0,0.7,0.4,0.7,0.9l0,0 | |||
C50.1,72.6,49.8,73,49.4,73z"/> | |||
<rect x="16.3" y="10.9" fill="none" stroke="#F29300" stroke-width="1.3469" stroke-miterlimit="10" width="103.6" height="2.4"/> | |||
<circle fill="none" stroke="#F29300" stroke-width="1.3469" stroke-miterlimit="10" cx="69.3" cy="39.6" r="13.9"/> | |||
<g> | |||
<g> | |||
<path fill="none" stroke="#F29300" stroke-width="1.2523" stroke-miterlimit="10" d="M79.8,33.5c1.1,1.9,1.3,5.2,0,5.7 | |||
c-1.3,0.5-7.2,0.3-10.2,0.2c1.3-2.7,4.1-7.9,5.2-8.8C75.9,29.7,78.7,31.6,79.8,33.5z"/> | |||
</g> | |||
<g> | |||
<path fill="none" stroke="#F29300" stroke-width="1.2523" stroke-miterlimit="10" d="M79.8,45.6c-1.1,1.9-3.8,3.7-4.9,2.9 | |||
c-1.1-0.9-3.9-6.1-5.2-8.8c3-0.2,8.9-0.4,10.2,0.1C81.2,40.4,80.9,43.7,79.8,45.6z"/> | |||
</g> | |||
<g> | |||
<path fill="none" stroke="#F29300" stroke-width="1.2523" stroke-miterlimit="10" d="M69.3,51.7c-2.2,0-5.2-1.5-5-2.8 | |||
s3.3-6.4,5-8.9c1.7,2.5,4.8,7.5,5,8.9S71.5,51.7,69.3,51.7z"/> | |||
</g> | |||
<g> | |||
<path fill="none" stroke="#F29300" stroke-width="1.2523" stroke-miterlimit="10" d="M58.9,45.6c-1.1-1.9-1.3-5.2,0-5.7 | |||
c1.3-0.5,7.2-0.3,10.2-0.2c-1.3,2.7-4.1,7.9-5.2,8.8C62.8,49.4,60,47.6,58.9,45.6z"/> | |||
</g> | |||
<g> | |||
<path fill="none" stroke="#F29300" stroke-width="1.2523" stroke-miterlimit="10" d="M58.9,33.5c1.1-1.9,3.8-3.7,4.9-2.9 | |||
c1.1,0.9,3.9,6.1,5.2,8.8c-3,0.2-8.9,0.4-10.2-0.1C57.5,38.8,57.8,35.5,58.9,33.5z"/> | |||
</g> | |||
<g> | |||
<path fill="none" stroke="#F29300" stroke-width="1.2523" stroke-miterlimit="10" d="M69.3,27.5c2.2,0,5.2,1.5,5,2.8 | |||
s-3.3,6.4-5,8.9c-1.7-2.5-4.8-7.5-5-8.9S67.1,27.5,69.3,27.5z"/> | |||
</g> | |||
</g> | |||
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M130,114.8H6.9c-3.8,0-6.9-3.1-6.9-6.9V6.9 | |||
C0,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"/> | |||
</svg> | |||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> | |||
<svg | |||
xmlns:dc="http://purl.org/dc/elements/1.1/" | |||
xmlns:cc="http://creativecommons.org/ns#" | |||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||
xmlns:svg="http://www.w3.org/2000/svg" | |||
xmlns="http://www.w3.org/2000/svg" | |||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
version="1.1" | |||
id="Layer_1" | |||
x="0px" | |||
y="0px" | |||
viewBox="0 0 136.9 114.8" | |||
enable-background="new 0 0 136.9 114.8" | |||
xml:space="preserve" | |||
inkscape:version="0.91 r13725" | |||
sodipodi:docname="wizard_GUI.svg"><metadata | |||
id="metadata53"><rdf:RDF><cc:Work | |||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs | |||
id="defs51" /><sodipodi:namedview | |||
pagecolor="#ffffff" | |||
bordercolor="#666666" | |||
borderopacity="1" | |||
objecttolerance="10" | |||
gridtolerance="10" | |||
guidetolerance="10" | |||
inkscape:pageopacity="0" | |||
inkscape:pageshadow="2" | |||
inkscape:window-width="1680" | |||
inkscape:window-height="1001" | |||
id="namedview49" | |||
showgrid="false" | |||
inkscape:zoom="2.0557491" | |||
inkscape:cx="68.449997" | |||
inkscape:cy="57.400002" | |||
inkscape:window-x="0" | |||
inkscape:window-y="1" | |||
inkscape:window-maximized="1" | |||
inkscape:current-layer="Layer_1" /><rect | |||
x="16.3" | |||
y="10.9" | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.3469" | |||
stroke-miterlimit="10" | |||
width="103.6" | |||
height="67.5" | |||
id="rect3" | |||
style="stroke:#a45c94;stroke-opacity:1" /><path | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.7078" | |||
stroke-miterlimit="10" | |||
d="M55.2,62.5H23.4c-0.4,0-0.7-0.4-0.7-0.9l0,0 c0-0.5,0.3-0.9,0.7-0.9h31.8c0.4,0,0.7,0.4,0.7,0.9l0,0C55.9,62.1,55.5,62.5,55.2,62.5z" | |||
id="path5" | |||
style="stroke:#a45c94;stroke-opacity:1" /><path | |||
fill="#a45c94" | |||
d="M38.1,62.5H23.4c-0.4,0-0.7-0.4-0.7-0.9l0,0c0-0.5,0.3-0.9,0.7-0.9h14.7c0.4,0,0.7,0.4,0.7,0.9l0,0 C38.7,62.1,38.4,62.5,38.1,62.5z" | |||
id="path7" | |||
style="stroke:#a45c94;stroke-opacity:1;fill:#a45c94;fill-opacity:1" /><path | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.7078" | |||
stroke-miterlimit="10" | |||
d="M55.2,67.8H23.4c-0.4,0-0.7-0.4-0.7-0.9l0,0 c0-0.5,0.3-0.9,0.7-0.9h31.8c0.4,0,0.7,0.4,0.7,0.9l0,0C55.9,67.4,55.5,67.8,55.2,67.8z" | |||
id="path9" | |||
style="stroke:#a45c94;stroke-opacity:1" /><path | |||
fill="#a45c94" | |||
d="M44.2,67.8H23.4c-0.4,0-0.7-0.4-0.7-0.9l0,0c0-0.5,0.3-0.9,0.7-0.9h20.8c0.4,0,0.7,0.4,0.7,0.9l0,0 C44.8,67.4,44.6,67.8,44.2,67.8z" | |||
id="path11" | |||
style="stroke:#a45c94;stroke-opacity:1;fill:#a45c94;fill-opacity:1" /><path | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.7078" | |||
stroke-miterlimit="10" | |||
d="M55.2,73H23.4c-0.4,0-0.7-0.4-0.7-0.9l0,0 c0-0.5,0.3-0.9,0.7-0.9h31.8c0.4,0,0.7,0.4,0.7,0.9l0,0C55.9,72.6,55.5,73,55.2,73z" | |||
id="path13" | |||
style="stroke:#a45c94;stroke-opacity:1" /><path | |||
fill="#a45c94" | |||
d="M49.4,73h-26c-0.4,0-0.7-0.4-0.7-0.9l0,0c0-0.5,0.3-0.9,0.7-0.9h26c0.4,0,0.7,0.4,0.7,0.9l0,0 C50.1,72.6,49.8,73,49.4,73z" | |||
id="path15" | |||
style="stroke:#a45c94;stroke-opacity:1;fill:#a45c94;fill-opacity:1" /><rect | |||
x="16.3" | |||
y="10.9" | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.3469" | |||
stroke-miterlimit="10" | |||
width="103.6" | |||
height="2.4" | |||
id="rect17" | |||
style="stroke:#a45c94;stroke-opacity:1" /><circle | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.3469" | |||
stroke-miterlimit="10" | |||
cx="69.3" | |||
cy="39.6" | |||
r="13.9" | |||
id="circle19" | |||
style="stroke:#a45c94;stroke-opacity:1" /><g | |||
id="g21" | |||
style="stroke:#a45c94;stroke-opacity:1"><g | |||
id="g23" | |||
style="stroke:#a45c94;stroke-opacity:1"><path | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.2523" | |||
stroke-miterlimit="10" | |||
d="M79.8,33.5c1.1,1.9,1.3,5.2,0,5.7 c-1.3,0.5-7.2,0.3-10.2,0.2c1.3-2.7,4.1-7.9,5.2-8.8C75.9,29.7,78.7,31.6,79.8,33.5z" | |||
id="path25" | |||
style="stroke:#a45c94;stroke-opacity:1" /></g><g | |||
id="g27" | |||
style="stroke:#a45c94;stroke-opacity:1"><path | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.2523" | |||
stroke-miterlimit="10" | |||
d="M79.8,45.6c-1.1,1.9-3.8,3.7-4.9,2.9 c-1.1-0.9-3.9-6.1-5.2-8.8c3-0.2,8.9-0.4,10.2,0.1C81.2,40.4,80.9,43.7,79.8,45.6z" | |||
id="path29" | |||
style="stroke:#a45c94;stroke-opacity:1" /></g><g | |||
id="g31" | |||
style="stroke:#a45c94;stroke-opacity:1"><path | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.2523" | |||
stroke-miterlimit="10" | |||
d="M69.3,51.7c-2.2,0-5.2-1.5-5-2.8 s3.3-6.4,5-8.9c1.7,2.5,4.8,7.5,5,8.9S71.5,51.7,69.3,51.7z" | |||
id="path33" | |||
style="stroke:#a45c94;stroke-opacity:1" /></g><g | |||
id="g35" | |||
style="stroke:#a45c94;stroke-opacity:1"><path | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.2523" | |||
stroke-miterlimit="10" | |||
d="M58.9,45.6c-1.1-1.9-1.3-5.2,0-5.7 c1.3-0.5,7.2-0.3,10.2-0.2c-1.3,2.7-4.1,7.9-5.2,8.8C62.8,49.4,60,47.6,58.9,45.6z" | |||
id="path37" | |||
style="stroke:#a45c94;stroke-opacity:1" /></g><g | |||
id="g39" | |||
style="stroke:#a45c94;stroke-opacity:1"><path | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.2523" | |||
stroke-miterlimit="10" | |||
d="M58.9,33.5c1.1-1.9,3.8-3.7,4.9-2.9 c1.1,0.9,3.9,6.1,5.2,8.8c-3,0.2-8.9,0.4-10.2-0.1C57.5,38.8,57.8,35.5,58.9,33.5z" | |||
id="path41" | |||
style="stroke:#a45c94;stroke-opacity:1" /></g><g | |||
id="g43" | |||
style="stroke:#a45c94;stroke-opacity:1"><path | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.2523" | |||
stroke-miterlimit="10" | |||
d="M69.3,27.5c2.2,0,5.2,1.5,5,2.8 s-3.3,6.4-5,8.9c-1.7-2.5-4.8-7.5-5-8.9S67.1,27.5,69.3,27.5z" | |||
id="path45" | |||
style="stroke:#a45c94;stroke-opacity:1" /></g></g><path | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.3469" | |||
stroke-miterlimit="10" | |||
d="M130,114.8H6.9c-3.8,0-6.9-3.1-6.9-6.9V6.9 C0,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" | |||
id="path47" | |||
style="stroke:#a45c94;stroke-opacity:1" /></svg> |
@@ -1,8 +1,48 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> | |||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> | |||
<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 136.9 114.8" enable-background="new 0 0 136.9 114.8" xml:space="preserve"> | |||
<path opacity="0.2" fill="#F29300" d="M130.1,114.8H6.9c-3.8,0-6.9-3.1-6.9-6.9V6.9C0,3.1,3.1,0,6.9,0h123.2c3.8,0,6.9,3.1,6.9,6.9 | |||
V108C136.9,111.8,133.9,114.8,130.1,114.8z"/> | |||
</svg> | |||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> | |||
<svg | |||
xmlns:dc="http://purl.org/dc/elements/1.1/" | |||
xmlns:cc="http://creativecommons.org/ns#" | |||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||
xmlns:svg="http://www.w3.org/2000/svg" | |||
xmlns="http://www.w3.org/2000/svg" | |||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
version="1.1" | |||
id="Layer_1" | |||
x="0px" | |||
y="0px" | |||
viewBox="0 0 136.9 114.8" | |||
enable-background="new 0 0 136.9 114.8" | |||
xml:space="preserve" | |||
inkscape:version="0.91 r13725" | |||
sodipodi:docname="wizard_Highlight.svg"><metadata | |||
id="metadata9"><rdf:RDF><cc:Work | |||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs | |||
id="defs7" /><sodipodi:namedview | |||
pagecolor="#ffffff" | |||
bordercolor="#666666" | |||
borderopacity="1" | |||
objecttolerance="10" | |||
gridtolerance="10" | |||
guidetolerance="10" | |||
inkscape:pageopacity="0" | |||
inkscape:pageshadow="2" | |||
inkscape:window-width="1680" | |||
inkscape:window-height="1001" | |||
id="namedview5" | |||
showgrid="false" | |||
inkscape:zoom="2.0557491" | |||
inkscape:cx="68.449997" | |||
inkscape:cy="57.400002" | |||
inkscape:window-x="0" | |||
inkscape:window-y="1" | |||
inkscape:window-maximized="1" | |||
inkscape:current-layer="Layer_1" /><path | |||
opacity="0.2" | |||
fill="#a45c94" | |||
d="M130.1,114.8H6.9c-3.8,0-6.9-3.1-6.9-6.9V6.9C0,3.1,3.1,0,6.9,0h123.2c3.8,0,6.9,3.1,6.9,6.9 V108C136.9,111.8,133.9,114.8,130.1,114.8z" | |||
id="path3" | |||
style="fill:#a45c94;fill-opacity:1" /></svg> |
@@ -1,26 +1,126 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> | |||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> | |||
<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 136.9 114.8" enable-background="new 0 0 136.9 114.8" xml:space="preserve"> | |||
<rect x="16.3" y="10.9" fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" width="103.6" height="67.5"/> | |||
<rect x="16.3" y="10.9" fill="none" stroke="#F29300" stroke-width="1.3469" stroke-miterlimit="10" width="103.6" height="2.4"/> | |||
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M75.8,31.5c8.7,4.7,14.8,13.2,13.5,20 | |||
c-1.6,8.5-13.8,11.4-26.8,4.3S45.3,36.9,51.6,30.9C56.7,26.1,67.1,26.7,75.8,31.5z"/> | |||
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M86.1,43.6c1,2.4,0.5,5.5-1.3,5 | |||
c-1.9-0.5-9.8-5-13.8-7.4c2.9-1.2,8.2-3.2,9.8-3.2C82.2,38.2,85.2,41.4,86.1,43.6z"/> | |||
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M83,55.3c-2.3,1.3-7.3,1.2-8.6-0.7 | |||
c-1.2-1.9-2.9-9.5-3.5-12.9c4.2,2.1,12.2,6.3,13.8,7.7C86.3,50.7,85.2,54,83,55.3z"/> | |||
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M63.6,53.5c-3.6-2-7.3-6.3-5.9-7.6 | |||
c1.3-1.2,9-3.5,12.5-4.4c1.2,3.5,3.4,11.2,3.1,13C73,56.3,67.3,55.5,63.6,53.5z"/> | |||
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M51.9,38.3c-0.1-2.5,2-5.2,4.1-4.6 | |||
c2.1,0.6,9.9,5.1,13.9,7.5c-3.2,1.3-10.5,4.1-12.8,4.1C54.9,45.1,52,40.9,51.9,38.3z"/> | |||
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M60,29.3c2.4-0.4,6.6,0.3,7.5,1.5 | |||
c0.9,1.2,2.1,6.8,2.6,9.9c-4.2-2.1-12.3-6.3-13.7-7.6C55,31.8,57.4,29.8,60,29.3z"/> | |||
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M75.2,32.5c2.5,1.4,5.6,4.3,5,5 | |||
c-0.7,0.8-6.3,2.5-9.5,3.3c-1.1-3.2-2.7-8.9-2.4-9.9C68.6,30,72.6,31.1,75.2,32.5z"/> | |||
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M130,114.8H6.9c-3.8,0-6.9-3.1-6.9-6.9V6.9 | |||
C0,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"/> | |||
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M87.4,55.5c-6.6,10.4-20.4,14.6-30.8,8 | |||
s-13.4-19.6-6.9-30"/> | |||
</svg> | |||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> | |||
<svg | |||
xmlns:dc="http://purl.org/dc/elements/1.1/" | |||
xmlns:cc="http://creativecommons.org/ns#" | |||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||
xmlns:svg="http://www.w3.org/2000/svg" | |||
xmlns="http://www.w3.org/2000/svg" | |||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
version="1.1" | |||
id="Layer_1" | |||
x="0px" | |||
y="0px" | |||
viewBox="0 0 136.9 114.8" | |||
enable-background="new 0 0 136.9 114.8" | |||
xml:space="preserve" | |||
inkscape:version="0.91 r13725" | |||
sodipodi:docname="wizard_OpenGL.svg"><metadata | |||
id="metadata29"><rdf:RDF><cc:Work | |||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs | |||
id="defs27" /><sodipodi:namedview | |||
pagecolor="#ffffff" | |||
bordercolor="#666666" | |||
borderopacity="1" | |||
objecttolerance="10" | |||
gridtolerance="10" | |||
guidetolerance="10" | |||
inkscape:pageopacity="0" | |||
inkscape:pageshadow="2" | |||
inkscape:window-width="1680" | |||
inkscape:window-height="1001" | |||
id="namedview25" | |||
showgrid="false" | |||
inkscape:zoom="2.0557491" | |||
inkscape:cx="-16.190683" | |||
inkscape:cy="57.400002" | |||
inkscape:window-x="0" | |||
inkscape:window-y="1" | |||
inkscape:window-maximized="1" | |||
inkscape:current-layer="Layer_1" /><rect | |||
x="16.3" | |||
y="10.9" | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.3469" | |||
stroke-miterlimit="10" | |||
width="103.6" | |||
height="67.5" | |||
id="rect3" | |||
style="stroke:#a45c94;stroke-opacity:1" /><rect | |||
x="16.3" | |||
y="10.9" | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.3469" | |||
stroke-miterlimit="10" | |||
width="103.6" | |||
height="2.4" | |||
id="rect5" | |||
style="stroke:#a45c94;stroke-opacity:1" /><path | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.3469" | |||
stroke-miterlimit="10" | |||
d="M75.8,31.5c8.7,4.7,14.8,13.2,13.5,20 c-1.6,8.5-13.8,11.4-26.8,4.3S45.3,36.9,51.6,30.9C56.7,26.1,67.1,26.7,75.8,31.5z" | |||
id="path7" | |||
style="stroke:#a45c94;stroke-opacity:1" /><path | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.3469" | |||
stroke-miterlimit="10" | |||
d="M86.1,43.6c1,2.4,0.5,5.5-1.3,5 c-1.9-0.5-9.8-5-13.8-7.4c2.9-1.2,8.2-3.2,9.8-3.2C82.2,38.2,85.2,41.4,86.1,43.6z" | |||
id="path9" | |||
style="stroke:#a45c94;stroke-opacity:1" /><path | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.3469" | |||
stroke-miterlimit="10" | |||
d="M83,55.3c-2.3,1.3-7.3,1.2-8.6-0.7 c-1.2-1.9-2.9-9.5-3.5-12.9c4.2,2.1,12.2,6.3,13.8,7.7C86.3,50.7,85.2,54,83,55.3z" | |||
id="path11" | |||
style="stroke:#a45c94;stroke-opacity:1" /><path | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.3469" | |||
stroke-miterlimit="10" | |||
d="M63.6,53.5c-3.6-2-7.3-6.3-5.9-7.6 c1.3-1.2,9-3.5,12.5-4.4c1.2,3.5,3.4,11.2,3.1,13C73,56.3,67.3,55.5,63.6,53.5z" | |||
id="path13" | |||
style="stroke:#a45c94;stroke-opacity:1" /><path | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.3469" | |||
stroke-miterlimit="10" | |||
d="M51.9,38.3c-0.1-2.5,2-5.2,4.1-4.6 c2.1,0.6,9.9,5.1,13.9,7.5c-3.2,1.3-10.5,4.1-12.8,4.1C54.9,45.1,52,40.9,51.9,38.3z" | |||
id="path15" | |||
style="stroke:#a45c94;stroke-opacity:1" /><path | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.3469" | |||
stroke-miterlimit="10" | |||
d="M60,29.3c2.4-0.4,6.6,0.3,7.5,1.5 c0.9,1.2,2.1,6.8,2.6,9.9c-4.2-2.1-12.3-6.3-13.7-7.6C55,31.8,57.4,29.8,60,29.3z" | |||
id="path17" | |||
style="stroke:#a45c94;stroke-opacity:1" /><path | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.3469" | |||
stroke-miterlimit="10" | |||
d="M75.2,32.5c2.5,1.4,5.6,4.3,5,5 c-0.7,0.8-6.3,2.5-9.5,3.3c-1.1-3.2-2.7-8.9-2.4-9.9C68.6,30,72.6,31.1,75.2,32.5z" | |||
id="path19" | |||
style="stroke:#a45c94;stroke-opacity:1" /><path | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.3469" | |||
stroke-miterlimit="10" | |||
d="M130,114.8H6.9c-3.8,0-6.9-3.1-6.9-6.9V6.9 C0,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" | |||
id="path21" | |||
style="stroke:#a45c94;stroke-opacity:1" /><path | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.3469" | |||
stroke-miterlimit="10" | |||
d="M87.4,55.5c-6.6,10.4-20.4,14.6-30.8,8 s-13.4-19.6-6.9-30" | |||
id="path23" | |||
style="stroke:#a45c94;stroke-opacity:1" /></svg> |
@@ -1,8 +1,50 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> | |||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> | |||
<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 177.9 114.8" enable-background="new 0 0 177.9 114.8" xml:space="preserve"> | |||
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M164.7,71.4H13.2c-3.8,0-6.9-3.1-6.9-6.9V43.6 | |||
c0-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"/> | |||
</svg> | |||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> | |||
<svg | |||
xmlns:dc="http://purl.org/dc/elements/1.1/" | |||
xmlns:cc="http://creativecommons.org/ns#" | |||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||
xmlns:svg="http://www.w3.org/2000/svg" | |||
xmlns="http://www.w3.org/2000/svg" | |||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
version="1.1" | |||
id="Layer_1" | |||
x="0px" | |||
y="0px" | |||
viewBox="0 0 177.9 114.8" | |||
enable-background="new 0 0 177.9 114.8" | |||
xml:space="preserve" | |||
inkscape:version="0.91 r13725" | |||
sodipodi:docname="wizard_Openfile.svg"><metadata | |||
id="metadata9"><rdf:RDF><cc:Work | |||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs | |||
id="defs7" /><sodipodi:namedview | |||
pagecolor="#ffffff" | |||
bordercolor="#666666" | |||
borderopacity="1" | |||
objecttolerance="10" | |||
gridtolerance="10" | |||
guidetolerance="10" | |||
inkscape:pageopacity="0" | |||
inkscape:pageshadow="2" | |||
inkscape:window-width="1680" | |||
inkscape:window-height="1001" | |||
id="namedview5" | |||
showgrid="false" | |||
inkscape:zoom="1.7425521" | |||
inkscape:cx="88.949997" | |||
inkscape:cy="57.400002" | |||
inkscape:window-x="0" | |||
inkscape:window-y="1" | |||
inkscape:window-maximized="1" | |||
inkscape:current-layer="Layer_1" /><path | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.3469" | |||
stroke-miterlimit="10" | |||
d="M164.7,71.4H13.2c-3.8,0-6.9-3.1-6.9-6.9V43.6 c0-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" | |||
id="path3" | |||
style="stroke:#a45c94;stroke-opacity:1" /></svg> |
@@ -1,41 +1,269 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> | |||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> | |||
<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 136.9 114.8" enable-background="new 0 0 136.9 114.8" xml:space="preserve"> | |||
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M130,114.8H6.9c-3.8,0-6.9-3.1-6.9-6.9V6.9 | |||
C0,3,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"/> | |||
<g id="Layer_1_21_"> | |||
<rect x="16.3" y="10.9" fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" width="102.9" height="67.5"/> | |||
</g> | |||
<g> | |||
<line fill="none" stroke="#F29100" stroke-width="0.4942" stroke-miterlimit="10" x1="43.1" y1="22.1" x2="43.1" y2="64.9"/> | |||
<line fill="none" stroke="#F29100" stroke-width="0.4942" stroke-miterlimit="10" x1="45" y1="22.1" x2="45" y2="64.9"/> | |||
<line fill="none" stroke="#F29100" stroke-width="0.4942" stroke-miterlimit="10" x1="46.8" y1="22.1" x2="46.8" y2="64.9"/> | |||
<line fill="none" stroke="#F29100" stroke-width="0.4942" stroke-miterlimit="10" x1="48.7" y1="22.1" x2="48.7" y2="64.9"/> | |||
<line fill="none" stroke="#F29100" stroke-width="0.4942" stroke-miterlimit="10" x1="50.6" y1="22.1" x2="50.6" y2="64.9"/> | |||
<line fill="none" stroke="#F29100" stroke-width="0.4942" stroke-miterlimit="10" x1="52.5" y1="22.1" x2="52.5" y2="64.9"/> | |||
</g> | |||
<path fill="none" stroke="#F29100" stroke-width="1.2453" stroke-miterlimit="10" d="M54.9,20.8v44.3c0,1-0.8,1.8-1.8,1.8H42.4 | |||
c-1,0-1.8-0.8-1.8-1.8V20.8"/> | |||
<g> | |||
<line fill="none" stroke="#F29100" stroke-width="0.4942" stroke-miterlimit="10" x1="64.5" y1="22.1" x2="64.5" y2="64.9"/> | |||
<line fill="none" stroke="#F29100" stroke-width="0.4942" stroke-miterlimit="10" x1="66.4" y1="22.1" x2="66.4" y2="64.9"/> | |||
<line fill="none" stroke="#F29100" stroke-width="0.4942" stroke-miterlimit="10" x1="68.3" y1="22.1" x2="68.3" y2="64.9"/> | |||
<line fill="none" stroke="#F29100" stroke-width="0.4942" stroke-miterlimit="10" x1="70.1" y1="22.1" x2="70.1" y2="64.9"/> | |||
<line fill="none" stroke="#F29100" stroke-width="0.4942" stroke-miterlimit="10" x1="72" y1="22.1" x2="72" y2="64.9"/> | |||
<line fill="none" stroke="#F29100" stroke-width="0.4942" stroke-miterlimit="10" x1="73.9" y1="22.1" x2="73.9" y2="64.9"/> | |||
</g> | |||
<path fill="none" stroke="#F29100" stroke-width="1.2453" stroke-miterlimit="10" d="M76.4,20.8v44.3c0,1-0.8,1.8-1.8,1.8H63.8 | |||
c-1,0-1.8-0.8-1.8-1.8V20.8"/> | |||
<g> | |||
<line fill="none" stroke="#F29100" stroke-width="0.4942" stroke-miterlimit="10" x1="85.9" y1="22.1" x2="85.9" y2="64.9"/> | |||
<line fill="none" stroke="#F29100" stroke-width="0.4942" stroke-miterlimit="10" x1="87.8" y1="22.1" x2="87.8" y2="64.9"/> | |||
<line fill="none" stroke="#F29100" stroke-width="0.4942" stroke-miterlimit="10" x1="89.7" y1="22.1" x2="89.7" y2="64.9"/> | |||
<line fill="none" stroke="#F29100" stroke-width="0.4942" stroke-miterlimit="10" x1="91.6" y1="22.1" x2="91.6" y2="64.9"/> | |||
<line fill="none" stroke="#F29100" stroke-width="0.4942" stroke-miterlimit="10" x1="93.4" y1="22.1" x2="93.4" y2="64.9"/> | |||
<line fill="none" stroke="#F29100" stroke-width="0.4942" stroke-miterlimit="10" x1="95.3" y1="22.1" x2="95.3" y2="64.9"/> | |||
</g> | |||
<path fill="none" stroke="#F29100" stroke-width="1.2453" stroke-miterlimit="10" d="M97.8,20.8v44.3c0,1-0.8,1.8-1.8,1.8H85.3 | |||
c-1,0-1.8-0.8-1.8-1.8V20.8"/> | |||
</svg> | |||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> | |||
<svg | |||
xmlns:dc="http://purl.org/dc/elements/1.1/" | |||
xmlns:cc="http://creativecommons.org/ns#" | |||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||
xmlns:svg="http://www.w3.org/2000/svg" | |||
xmlns="http://www.w3.org/2000/svg" | |||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
version="1.1" | |||
id="Layer_1" | |||
x="0px" | |||
y="0px" | |||
viewBox="0 0 136.9 114.8" | |||
enable-background="new 0 0 136.9 114.8" | |||
xml:space="preserve" | |||
inkscape:version="0.91 r13725" | |||
sodipodi:docname="wizard_StaticLibrary.svg"><metadata | |||
id="metadata60"><rdf:RDF><cc:Work | |||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs | |||
id="defs58" /><sodipodi:namedview | |||
pagecolor="#ffffff" | |||
bordercolor="#666666" | |||
borderopacity="1" | |||
objecttolerance="10" | |||
gridtolerance="10" | |||
guidetolerance="10" | |||
inkscape:pageopacity="0" | |||
inkscape:pageshadow="2" | |||
inkscape:window-width="1680" | |||
inkscape:window-height="1001" | |||
id="namedview56" | |||
showgrid="false" | |||
inkscape:zoom="2.0557491" | |||
inkscape:cx="68.449997" | |||
inkscape:cy="57.400002" | |||
inkscape:window-x="0" | |||
inkscape:window-y="1" | |||
inkscape:window-maximized="1" | |||
inkscape:current-layer="Layer_1" /><path | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.3469" | |||
stroke-miterlimit="10" | |||
d="M130,114.8H6.9c-3.8,0-6.9-3.1-6.9-6.9V6.9 C0,3,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" | |||
id="path3" | |||
style="stroke:#a45c94;stroke-opacity:1" /><g | |||
id="Layer_1_21_" | |||
style="stroke:#a45c94;stroke-opacity:1"><rect | |||
x="16.3" | |||
y="10.9" | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.3469" | |||
stroke-miterlimit="10" | |||
width="102.9" | |||
height="67.5" | |||
id="rect6" | |||
style="stroke:#a45c94;stroke-opacity:1" /></g><g | |||
id="g8" | |||
style="stroke:#a45c94;stroke-opacity:1"><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.4942" | |||
stroke-miterlimit="10" | |||
x1="43.1" | |||
y1="22.1" | |||
x2="43.1" | |||
y2="64.9" | |||
id="line10" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.4942" | |||
stroke-miterlimit="10" | |||
x1="45" | |||
y1="22.1" | |||
x2="45" | |||
y2="64.9" | |||
id="line12" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.4942" | |||
stroke-miterlimit="10" | |||
x1="46.8" | |||
y1="22.1" | |||
x2="46.8" | |||
y2="64.9" | |||
id="line14" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.4942" | |||
stroke-miterlimit="10" | |||
x1="48.7" | |||
y1="22.1" | |||
x2="48.7" | |||
y2="64.9" | |||
id="line16" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.4942" | |||
stroke-miterlimit="10" | |||
x1="50.6" | |||
y1="22.1" | |||
x2="50.6" | |||
y2="64.9" | |||
id="line18" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.4942" | |||
stroke-miterlimit="10" | |||
x1="52.5" | |||
y1="22.1" | |||
x2="52.5" | |||
y2="64.9" | |||
id="line20" | |||
style="stroke:#a45c94;stroke-opacity:1" /></g><path | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.2453" | |||
stroke-miterlimit="10" | |||
d="M54.9,20.8v44.3c0,1-0.8,1.8-1.8,1.8H42.4 c-1,0-1.8-0.8-1.8-1.8V20.8" | |||
id="path22" | |||
style="stroke:#a45c94;stroke-opacity:1" /><g | |||
id="g24" | |||
style="stroke:#a45c94;stroke-opacity:1"><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.4942" | |||
stroke-miterlimit="10" | |||
x1="64.5" | |||
y1="22.1" | |||
x2="64.5" | |||
y2="64.9" | |||
id="line26" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.4942" | |||
stroke-miterlimit="10" | |||
x1="66.4" | |||
y1="22.1" | |||
x2="66.4" | |||
y2="64.9" | |||
id="line28" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.4942" | |||
stroke-miterlimit="10" | |||
x1="68.3" | |||
y1="22.1" | |||
x2="68.3" | |||
y2="64.9" | |||
id="line30" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.4942" | |||
stroke-miterlimit="10" | |||
x1="70.1" | |||
y1="22.1" | |||
x2="70.1" | |||
y2="64.9" | |||
id="line32" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.4942" | |||
stroke-miterlimit="10" | |||
x1="72" | |||
y1="22.1" | |||
x2="72" | |||
y2="64.9" | |||
id="line34" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.4942" | |||
stroke-miterlimit="10" | |||
x1="73.9" | |||
y1="22.1" | |||
x2="73.9" | |||
y2="64.9" | |||
id="line36" | |||
style="stroke:#a45c94;stroke-opacity:1" /></g><path | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.2453" | |||
stroke-miterlimit="10" | |||
d="M76.4,20.8v44.3c0,1-0.8,1.8-1.8,1.8H63.8 c-1,0-1.8-0.8-1.8-1.8V20.8" | |||
id="path38" | |||
style="stroke:#a45c94;stroke-opacity:1" /><g | |||
id="g40" | |||
style="stroke:#a45c94;stroke-opacity:1"><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.4942" | |||
stroke-miterlimit="10" | |||
x1="85.9" | |||
y1="22.1" | |||
x2="85.9" | |||
y2="64.9" | |||
id="line42" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.4942" | |||
stroke-miterlimit="10" | |||
x1="87.8" | |||
y1="22.1" | |||
x2="87.8" | |||
y2="64.9" | |||
id="line44" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.4942" | |||
stroke-miterlimit="10" | |||
x1="89.7" | |||
y1="22.1" | |||
x2="89.7" | |||
y2="64.9" | |||
id="line46" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.4942" | |||
stroke-miterlimit="10" | |||
x1="91.6" | |||
y1="22.1" | |||
x2="91.6" | |||
y2="64.9" | |||
id="line48" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.4942" | |||
stroke-miterlimit="10" | |||
x1="93.4" | |||
y1="22.1" | |||
x2="93.4" | |||
y2="64.9" | |||
id="line50" | |||
style="stroke:#a45c94;stroke-opacity:1" /><line | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="0.4942" | |||
stroke-miterlimit="10" | |||
x1="95.3" | |||
y1="22.1" | |||
x2="95.3" | |||
y2="64.9" | |||
id="line52" | |||
style="stroke:#a45c94;stroke-opacity:1" /></g><path | |||
fill="none" | |||
stroke="#a45c94" | |||
stroke-width="1.2453" | |||
stroke-miterlimit="10" | |||
d="M97.8,20.8v44.3c0,1-0.8,1.8-1.8,1.8H85.3 c-1,0-1.8-0.8-1.8-1.8V20.8" | |||
id="path54" | |||
style="stroke:#a45c94;stroke-opacity:1" /></svg> |
@@ -209,13 +209,21 @@ void SourceCodeEditor::resized() | |||
editor->setBounds (getLocalBounds()); | |||
} | |||
void SourceCodeEditor::updateColourScheme() { getAppSettings().appearance.applyToCodeEditor (*editor); } | |||
void SourceCodeEditor::updateColourScheme() | |||
{ | |||
getAppSettings().appearance.applyToCodeEditor (*editor); | |||
} | |||
void SourceCodeEditor::checkSaveState() | |||
{ | |||
setEditedState (getDocument()->needsSaving()); | |||
} | |||
void SourceCodeEditor::lookAndFeelChanged() | |||
{ | |||
updateColourScheme(); | |||
} | |||
void SourceCodeEditor::valueTreePropertyChanged (ValueTree&, const Identifier&) { updateColourScheme(); } | |||
void SourceCodeEditor::valueTreeChildAdded (ValueTree&, ValueTree&) { updateColourScheme(); } | |||
void SourceCodeEditor::valueTreeChildRemoved (ValueTree&, ValueTree&, int) { updateColourScheme(); } | |||
@@ -231,6 +239,7 @@ GenericCodeEditorComponent::GenericCodeEditorComponent (const File& f, CodeDocum | |||
CodeTokeniser* tokeniser) | |||
: CodeEditorComponent (codeDocument, tokeniser), file (f) | |||
{ | |||
setScrollbarThickness (6); | |||
setCommandManager (&ProjucerApplication::getCommandManager()); | |||
} | |||
@@ -154,6 +154,7 @@ public: | |||
private: | |||
void resized() override; | |||
void lookAndFeelChanged() override; | |||
void valueTreePropertyChanged (ValueTree&, const Identifier&) override; | |||
void valueTreeChildAdded (ValueTree&, ValueTree&) override; | |||
@@ -146,8 +146,6 @@ EditingPanelBase::EditingPanelBase (JucerDocument& doc, Component* props, Compon | |||
addAndMakeVisible (propsPanel); | |||
viewport->setViewedComponent (magnifier = new MagnifierComponent (editor)); | |||
magnifier->setLookAndFeel (&lookAndFeel); | |||
} | |||
EditingPanelBase::~EditingPanelBase() | |||
@@ -173,6 +171,11 @@ void EditingPanelBase::resized() | |||
viewport->getHeight()); | |||
} | |||
void EditingPanelBase::paint (Graphics& g) | |||
{ | |||
g.fillAll (findColour (secondaryBackgroundColourId)); | |||
} | |||
void EditingPanelBase::visibilityChanged() | |||
{ | |||
if (isVisible()) | |||
@@ -46,8 +46,9 @@ public: | |||
~EditingPanelBase(); | |||
//============================================================================== | |||
void resized(); | |||
void visibilityChanged(); | |||
void resized() override; | |||
void paint (Graphics& g) override; | |||
void visibilityChanged() override; | |||
virtual void updatePropertiesList() = 0; | |||
@@ -66,7 +67,6 @@ public: | |||
protected: | |||
JucerDocument& document; | |||
LookAndFeel_V2 lookAndFeel; | |||
Viewport* viewport; | |||
MagnifierComponent* magnifier; | |||
@@ -71,7 +71,7 @@ public: | |||
if (rowIsSelected) | |||
g.fillAll (findColour (TextEditor::highlightColourId)); | |||
g.setColour (Colours::black); | |||
g.setColour (findColour (defaultTextColourId)); | |||
g.setFont (height * 0.6f); | |||
g.drawText (returnValues [row] + " " + baseClasses [row] + "::" + methods [row], | |||
30, 0, width - 32, height, | |||
@@ -163,14 +163,19 @@ public: | |||
document.removeChangeListener (this); | |||
} | |||
void resized() | |||
void resized() override | |||
{ | |||
int pw = jmin (getWidth() / 2 - 20, 350); | |||
panel1.setBounds (10, 6, pw, getHeight() - 12); | |||
panel2.setBounds (panel1.getRight() + 20, panel1.getY(), pw, panel1.getHeight()); | |||
} | |||
void changeListenerCallback (ChangeBroadcaster*) | |||
void paint (Graphics& g) override | |||
{ | |||
g.fillAll (findColour (secondaryBackgroundColourId)); | |||
} | |||
void changeListenerCallback (ChangeBroadcaster*) override | |||
{ | |||
panel1.refreshAll(); | |||
panel2.refreshAll(); | |||
@@ -418,12 +423,12 @@ void JucerDocumentEditor::updateTabs() | |||
//============================================================================== | |||
void JucerDocumentEditor::paint (Graphics& g) | |||
{ | |||
ProjucerLookAndFeel::fillWithBackgroundTexture (*this, g); | |||
g.fillAll (findColour (backgroundColourId)); | |||
} | |||
void JucerDocumentEditor::resized() | |||
{ | |||
tabbedComponent.setBounds (getLocalBounds().reduced (4, 2)); | |||
tabbedComponent.setBounds (getLocalBounds().withTrimmedLeft (12)); | |||
} | |||
void JucerDocumentEditor::changeListenerCallback (ChangeBroadcaster*) | |||
@@ -91,8 +91,8 @@ ResourceEditorPanel::ResourceEditorPanel (JucerDocument& doc) | |||
listBox->getHeader().addColumn ("reload", 4, 100, 100, 100, TableHeaderComponent::notResizableOrSortable); | |||
listBox->getHeader().setStretchToFitActive (true); | |||
listBox->setColour (ListBox::backgroundColourId, Colours::lightgrey); | |||
listBox->setColour (ListBox::outlineColourId, Colours::darkgrey); | |||
listBox->setColour (ListBox::backgroundColourId, findColour (secondaryBackgroundColourId)); | |||
listBox->setColour (ListBox::outlineColourId, Colours::transparentBlack); | |||
listBox->setOutlineThickness (1); | |||
listBox->updateContent(); | |||
@@ -114,7 +114,7 @@ void ResourceEditorPanel::paintRowBackground (Graphics& g, int /*rowNumber*/, | |||
int /*width*/, int /*height*/, bool rowIsSelected) | |||
{ | |||
if (rowIsSelected) | |||
g.fillAll (findColour (TextEditor::highlightColourId)); | |||
g.fillAll (findColour (defaultHighlightColourId)); | |||
} | |||
void ResourceEditorPanel::paintCell (Graphics& g, int rowNumber, int columnId, int width, int height, | |||
@@ -228,6 +228,11 @@ void ResourceEditorPanel::resized() | |||
delButton.setTopRightPosition (getWidth() - 8, getHeight() - 30); | |||
} | |||
void ResourceEditorPanel::paint (Graphics& g) | |||
{ | |||
g.fillAll (findColour (secondaryBackgroundColourId)); | |||
} | |||
void ResourceEditorPanel::visibilityChanged() | |||
{ | |||
if (isVisible()) | |||
@@ -36,18 +36,19 @@ public: | |||
ResourceEditorPanel (JucerDocument& document); | |||
~ResourceEditorPanel(); | |||
void resized(); | |||
void visibilityChanged(); | |||
void changeListenerCallback (ChangeBroadcaster*); | |||
void buttonClicked (Button*); | |||
int getNumRows(); | |||
void paintRowBackground (Graphics& g, int rowNumber, int width, int height, bool rowIsSelected); | |||
void paintCell (Graphics& g, int rowNumber, int columnId, int width, int height, bool rowIsSelected); | |||
Component* refreshComponentForCell (int rowNumber, int columnId, bool isRowSelected, Component* existingComponentToUpdate); | |||
int getColumnAutoSizeWidth (int columnId); | |||
void sortOrderChanged (int newSortColumnId, bool isForwards); | |||
void selectedRowsChanged (int lastRowSelected); | |||
void resized() override; | |||
void paint (Graphics& g) override; | |||
void visibilityChanged() override; | |||
void changeListenerCallback (ChangeBroadcaster*) override; | |||
void buttonClicked (Button*) override; | |||
int getNumRows() override; | |||
void paintRowBackground (Graphics& g, int rowNumber, int width, int height, bool rowIsSelected) override; | |||
void paintCell (Graphics& g, int rowNumber, int columnId, int width, int height, bool rowIsSelected) override; | |||
Component* refreshComponentForCell (int rowNumber, int columnId, bool isRowSelected, Component* existingComponentToUpdate) override; | |||
int getColumnAutoSizeWidth (int columnId) override; | |||
void sortOrderChanged (int newSortColumnId, bool isForwards) override; | |||
void selectedRowsChanged (int lastRowSelected) override; | |||
private: | |||
JucerDocument& document; | |||
@@ -0,0 +1,250 @@ | |||
/* | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - 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. | |||
============================================================================== | |||
*/ | |||
#include "../jucer_Headers.h" | |||
#include "../Application/jucer_Application.h" | |||
#include "../Project Saving/jucer_ProjectExporter.h" | |||
#include "../Project/jucer_HeaderComponent.h" | |||
#include "jucer_LicenseController.h" | |||
#include "jucer_LicenseWebview.h" | |||
#include "jucer_LicenseThread.h" | |||
//============================================================================== | |||
const char* LicenseState::licenseTypeToString (LicenseState::Type type) | |||
{ | |||
switch (type) | |||
{ | |||
case Type::notLoggedIn: return "<notLoggedIn>"; | |||
case Type::noLicenseChosenYet: return "<noLicenseChosenYet>"; | |||
case Type::GPL: return "JUCE GPL"; | |||
case Type::personal: return "JUCE Personal"; | |||
case Type::edu: return "JUCE Education"; | |||
case Type::indie: return "JUCE Indie"; | |||
case Type::pro: return "JUCE Pro"; | |||
default: return "<unknown>"; | |||
} | |||
} | |||
static const char* getLicenseStateValue (LicenseState::Type type) | |||
{ | |||
switch (type) | |||
{ | |||
case LicenseState::Type::GPL: return "GPL"; | |||
case LicenseState::Type::personal: return "personal"; | |||
case LicenseState::Type::edu: return "edu"; | |||
case LicenseState::Type::indie: return "indie"; | |||
case LicenseState::Type::pro: return "pro"; | |||
default: return nullptr; | |||
} | |||
} | |||
static LicenseState::Type getLicenseTypeFromValue (const String& d) | |||
{ | |||
if (d == getLicenseStateValue (LicenseState::Type::GPL)) return LicenseState::Type::GPL; | |||
if (d == getLicenseStateValue (LicenseState::Type::personal)) return LicenseState::Type::personal; | |||
if (d == getLicenseStateValue (LicenseState::Type::edu)) return LicenseState::Type::edu; | |||
if (d == getLicenseStateValue (LicenseState::Type::indie)) return LicenseState::Type::indie; | |||
if (d == getLicenseStateValue (LicenseState::Type::pro)) return LicenseState::Type::pro; | |||
return LicenseState::Type::noLicenseChosenYet; | |||
} | |||
//============================================================================== | |||
struct LicenseController::ModalCompletionCallback : ModalComponentManager::Callback | |||
{ | |||
ModalCompletionCallback (LicenseController& controller) : owner (controller) {} | |||
void modalStateFinished (int returnValue) override { owner.modalStateFinished (returnValue); } | |||
LicenseController& owner; | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ModalCompletionCallback) | |||
}; | |||
//============================================================================== | |||
LicenseController::LicenseController() | |||
#if (! JUCER_ENABLE_GPL_MODE) | |||
: state (licenseStateFromSettings (ProjucerApplication::getApp().settings->getGlobalProperties())) | |||
#endif | |||
{ | |||
#if JUCER_ENABLE_GPL_MODE | |||
state.type = LicenseState::Type::GPL; | |||
state.username = "GPL mode"; | |||
#else | |||
thread = new LicenseThread (*this, false); | |||
#endif | |||
} | |||
LicenseController::~LicenseController() | |||
{ | |||
thread = nullptr; | |||
closeWebview (-1); | |||
} | |||
void LicenseController::logout() | |||
{ | |||
jassert (MessageManager::getInstance()->isThisTheMessageThread()); | |||
#if ! JUCER_ENABLE_GPL_MODE | |||
thread = nullptr; | |||
updateState ({}); | |||
#if ! JUCE_LINUX | |||
WebBrowserComponent::clearCookies(); | |||
#endif | |||
thread = new LicenseThread (*this, false); | |||
#endif | |||
} | |||
void LicenseController::chooseNewLicense() | |||
{ | |||
jassert (MessageManager::getInstance()->isThisTheMessageThread()); | |||
#if ! JUCER_ENABLE_GPL_MODE | |||
thread = nullptr; | |||
thread = new LicenseThread (*this, true); | |||
#endif | |||
} | |||
//============================================================================== | |||
void LicenseController::closeWebview (int result) | |||
{ | |||
if (licenseWebview != nullptr) | |||
licenseWebview->exitModalState (result); | |||
} | |||
void LicenseController::modalStateFinished (int result) | |||
{ | |||
licenseWebview = nullptr; | |||
if (result == -1 && (state.type == LicenseState::Type::notLoggedIn | |||
|| state.type == LicenseState::Type::noLicenseChosenYet)) | |||
JUCEApplication::getInstance()->systemRequestedQuit(); | |||
} | |||
void LicenseController::ensureLicenseWebviewIsOpenWithPage (const String& param) | |||
{ | |||
if (licenseWebview != nullptr) | |||
{ | |||
licenseWebview->goToURL (param); | |||
licenseWebview->toFront (true); | |||
} | |||
else | |||
{ | |||
#if ! JUCE_LINUX | |||
WebBrowserComponent::clearCookies(); | |||
#endif | |||
licenseWebview = new LicenseWebview (new ModalCompletionCallback (*this), param); | |||
} | |||
} | |||
void LicenseController::queryWebview (const String& startURL, const String& valueToQuery, | |||
HashMap<String, String>& result) | |||
{ | |||
ensureLicenseWebviewIsOpenWithPage (startURL); | |||
licenseWebview->setPageCallback ([this,valueToQuery,&result] (const String& cmd, const HashMap<String, String>& params) | |||
{ | |||
if (valueToQuery.isEmpty() || cmd == valueToQuery) | |||
{ | |||
result.clear(); | |||
for (HashMap<String, String>::Iterator it = params.begin(); it != params.end(); ++it) | |||
result.set (it.getKey(), it.getValue()); | |||
if (thread != nullptr && ! thread->threadShouldExit()) | |||
thread->finished.signal(); | |||
} | |||
}); | |||
licenseWebview->setNewWindowCallback ([this, &result] (const String& url) | |||
{ | |||
if (url.endsWith ("get-juce/indie") || url.endsWith ("get-juce/pro")) | |||
{ | |||
result.clear(); | |||
result.set ("page-redirect", url); | |||
if (thread != nullptr && ! thread->threadShouldExit()) | |||
thread->finished.signal(); | |||
} | |||
}); | |||
} | |||
void LicenseController::updateState (const LicenseState& newState) | |||
{ | |||
auto& props = ProjucerApplication::getApp().settings->getGlobalProperties(); | |||
state = newState; | |||
licenseStateToSettings (state, props); | |||
listeners.call (&StateChangedCallback::licenseStateChanged, state); | |||
} | |||
LicenseState LicenseController::licenseStateFromSettings (PropertiesFile& props) | |||
{ | |||
ScopedPointer<XmlElement> licenseXml = props.getXmlValue ("license"); | |||
if (licenseXml != nullptr) | |||
{ | |||
LicenseState result; | |||
result.type = getLicenseTypeFromValue (licenseXml->getChildElementAllSubText ("type", {})); | |||
result.username = licenseXml->getChildElementAllSubText ("username", {}); | |||
result.email = licenseXml->getChildElementAllSubText ("email", {}); | |||
result.authToken = licenseXml->getChildElementAllSubText ("authToken", {}); | |||
MemoryOutputStream imageData; | |||
Base64::convertFromBase64 (imageData, licenseXml->getChildElementAllSubText ("avatar", {})); | |||
result.avatar = ImageFileFormat::loadFrom (imageData.getData(), imageData.getDataSize()); | |||
return result; | |||
} | |||
return {}; | |||
} | |||
void LicenseController::licenseStateToSettings (const LicenseState& state, PropertiesFile& props) | |||
{ | |||
props.removeValue ("license"); | |||
if (state.type != LicenseState::Type::notLoggedIn | |||
&& state.username.isNotEmpty() && state.authToken.isNotEmpty()) | |||
{ | |||
XmlElement licenseXml ("license"); | |||
if (auto* typeString = getLicenseStateValue (state.type)) | |||
licenseXml.createNewChildElement ("type")->addTextElement (typeString); | |||
licenseXml.createNewChildElement ("username")->addTextElement (state.username); | |||
licenseXml.createNewChildElement ("email") ->addTextElement (state.email); | |||
// TODO: encrypt authToken | |||
licenseXml.createNewChildElement ("authToken")->addTextElement (state.authToken); | |||
MemoryOutputStream imageData; | |||
if (state.avatar.isValid() && PNGImageFormat().writeImageToStream (state.avatar, imageData)) | |||
licenseXml.createNewChildElement ("avatar")->addTextElement (Base64::toBase64 (imageData.getData(), imageData.getDataSize())); | |||
props.setValue ("license", &licenseXml); | |||
} | |||
props.saveIfNeeded(); | |||
} |
@@ -0,0 +1,106 @@ | |||
/* | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - 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. | |||
============================================================================== | |||
*/ | |||
#pragma once | |||
struct LicenseThread; | |||
class LicenseWebview; | |||
//============================================================================== | |||
struct LicenseState | |||
{ | |||
enum class Type | |||
{ | |||
notLoggedIn, // only used when the webview is open and the user has not logged in yet | |||
noLicenseChosenYet, | |||
GPL, // GPL is used when the user enables the GPL compile flag | |||
personal, | |||
edu, | |||
indie, | |||
pro | |||
}; | |||
Type type = Type::notLoggedIn; | |||
String username; | |||
String email; | |||
String authToken; | |||
static const char* licenseTypeToString (Type licenseType); | |||
bool isPaidOrGPL() const noexcept { return (type == Type::GPL || type == Type::indie || type == Type::pro); } | |||
Image avatar; | |||
}; | |||
//============================================================================== | |||
class LicenseController | |||
{ | |||
public: | |||
//============================================================================== | |||
struct StateChangedCallback | |||
{ | |||
virtual ~StateChangedCallback() {} | |||
virtual void licenseStateChanged (const LicenseState&) = 0; | |||
}; | |||
//============================================================================== | |||
LicenseController(); | |||
~LicenseController(); | |||
//============================================================================== | |||
const LicenseState& getState() const noexcept { return state; } | |||
void logout(); | |||
void chooseNewLicense(); | |||
//============================================================================== | |||
void addLicenseStatusChangedCallback (StateChangedCallback* callback) { listeners.add (callback); } | |||
void removeLicenseStatusChangedCallback (StateChangedCallback* callback) { listeners.remove (callback); } | |||
private: | |||
//============================================================================== | |||
struct ModalCompletionCallback; | |||
friend struct ModalCompletionCallback; | |||
friend class ScopedPointer<LicenseThread>; | |||
friend struct LicenseThread; | |||
//============================================================================== | |||
void closeWebview (int); | |||
void modalStateFinished (int); | |||
void ensureLicenseWebviewIsOpenWithPage (const String&); | |||
void queryWebview (const String&, const String&, HashMap<String, String>&); | |||
void updateState (const LicenseState&); | |||
static LicenseState licenseStateFromSettings (PropertiesFile&); | |||
static void licenseStateToSettings (const LicenseState&, PropertiesFile&); | |||
//============================================================================== | |||
LicenseState state; | |||
ScopedPointer<LicenseThread> thread; | |||
LicenseWebview* licenseWebview = nullptr; | |||
ListenerList<LicenseController::StateChangedCallback> listeners; | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (LicenseController) | |||
}; |
@@ -0,0 +1,452 @@ | |||
/* | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - 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. | |||
============================================================================== | |||
*/ | |||
#pragma once | |||
//============================================================================== | |||
struct NetWorkerThread : public Thread, | |||
private AsyncUpdater | |||
{ | |||
NetWorkerThread() : Thread ("License") {} | |||
~NetWorkerThread() | |||
{ | |||
jassert (MessageManager::getInstance()->isThisTheMessageThread()); | |||
signalThreadShouldExit(); | |||
cancelPendingUpdate(); | |||
finished.signal(); | |||
{ | |||
ScopedLock lock (weakReferenceLock); | |||
if (currentInputStream != nullptr) | |||
currentInputStream->cancel(); | |||
} | |||
waitForThreadToExit (-1); | |||
} | |||
//============================================================================== | |||
void executeOnMessageThreadAndBlock (std::function<void()> f, bool signalWhenFinished = true) | |||
{ | |||
// only call this on the worker thread | |||
jassert (Thread::getCurrentThreadId() == getThreadId()); | |||
if (! isWaiting) | |||
{ | |||
ScopedValueSetter<bool> reentrant (isWaiting, true); | |||
finished.reset(); | |||
if (! threadShouldExit()) | |||
{ | |||
functionToExecute = [signalWhenFinished, f, this] () { f(); if (signalWhenFinished) finished.signal(); }; | |||
triggerAsyncUpdate(); | |||
finished.wait (-1); | |||
} | |||
} | |||
else | |||
{ | |||
// only one task at a time | |||
jassertfalse; | |||
return; | |||
} | |||
} | |||
WebInputStream* getSharedWebInputStream (const URL& url, const bool usePost) | |||
{ | |||
ScopedLock lock (weakReferenceLock); | |||
if (threadShouldExit()) | |||
return nullptr; | |||
jassert (currentInputStream == nullptr); | |||
return (currentInputStream = new WeakWebInputStream (*this, url, usePost)); | |||
} | |||
bool isWaiting = false; | |||
WaitableEvent finished; | |||
private: | |||
//============================================================================== | |||
void handleAsyncUpdate() override | |||
{ | |||
if (functionToExecute) | |||
{ | |||
std::function<void()> f; | |||
std::swap (f, functionToExecute); | |||
if (! threadShouldExit()) | |||
f(); | |||
} | |||
} | |||
//============================================================================== | |||
struct WeakWebInputStream : public WebInputStream | |||
{ | |||
WeakWebInputStream (NetWorkerThread& workerThread, const URL& url, const bool usePost) | |||
: WebInputStream (url, usePost), owner (workerThread) {} | |||
~WeakWebInputStream() | |||
{ | |||
ScopedLock lock (owner.weakReferenceLock); | |||
owner.currentInputStream = nullptr; | |||
} | |||
NetWorkerThread& owner; | |||
WeakReference<WeakWebInputStream>::Master masterReference; | |||
friend class WeakReference<WeakWebInputStream>; | |||
}; | |||
//============================================================================== | |||
friend struct WeakWebInputStream; | |||
std::function<void()> functionToExecute; | |||
CriticalSection weakReferenceLock; | |||
WebInputStream* currentInputStream = nullptr; | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (NetWorkerThread) | |||
}; | |||
//============================================================================== | |||
//============================================================================== | |||
//============================================================================== | |||
struct LicenseThread : NetWorkerThread | |||
{ | |||
LicenseThread (LicenseController& licenseController, bool shouldSelectNewLicense) | |||
: owner (licenseController), selectNewLicense (shouldSelectNewLicense) | |||
{ | |||
startThread(); | |||
} | |||
String getAuthToken() | |||
{ | |||
if (owner.state.authToken.isNotEmpty()) | |||
return owner.state.authToken; | |||
selectNewLicense = false; | |||
HashMap<String, String> result; | |||
if (! queryWebview ("https://auth.roli.com/signin/projucer?redirect=projucer://receive-auth-token?token=", | |||
"receive-auth-token", result)) | |||
return {}; | |||
return result["token"]; | |||
} | |||
// returns true if any information was updated | |||
void updateUserInfo (LicenseState& stateToUpdate) | |||
{ | |||
jassert (stateToUpdate.authToken.isNotEmpty()); | |||
auto accessTokenHeader = "x-access-token: " + stateToUpdate.authToken; | |||
if (ScopedPointer<WebInputStream> shared | |||
= getSharedWebInputStream (URL ("https://api.roli.com/api/v1/user"), false)) | |||
{ | |||
const int statusCode = shared->withExtraHeaders (accessTokenHeader).getStatusCode(); | |||
if (statusCode == 200) | |||
{ | |||
var result = JSON::parse (shared->readEntireStreamAsString()); | |||
shared = nullptr; | |||
auto newState = licenseStateFromJSON (result, stateToUpdate.authToken, stateToUpdate.avatar); | |||
if (newState.type != LicenseState::Type::notLoggedIn) | |||
stateToUpdate = newState; | |||
} | |||
else if (statusCode == 401) | |||
{ | |||
selectNewLicense = false; | |||
// un-authorised: token has expired | |||
stateToUpdate = LicenseState(); | |||
} | |||
} | |||
} | |||
void updateLicenseType (LicenseState& stateToUpdate) | |||
{ | |||
bool requiredWebview = false; | |||
String licenseChooserPage = "https://juce.com/webviews/select_license"; | |||
jassert (stateToUpdate.authToken.isNotEmpty()); | |||
jassert (stateToUpdate.type != LicenseState::Type::notLoggedIn); | |||
auto accessTokenHeader = "x-access-token: " + stateToUpdate.authToken; | |||
StringArray licenses; | |||
while ((licenses.isEmpty() || selectNewLicense) && ! threadShouldExit()) | |||
{ | |||
static Identifier licenseTypeIdentifier ("type"); | |||
static Identifier licenseStatusIdentifier ("status"); | |||
static Identifier projucerLicenseTypeIdentifier ("licence_type"); | |||
static Identifier productNameIdentifier ("product_name"); | |||
static Identifier licenseIdentifier ("licence"); | |||
static Identifier serialIdentifier ("serial_number"); | |||
static Identifier versionIdentifier ("product_version"); | |||
static Identifier searchInternalIdentifier ("search_internal_id"); | |||
if (! selectNewLicense) | |||
{ | |||
ScopedPointer<WebInputStream> shared = getSharedWebInputStream (URL ("https://api.roli.com/api/v1/user/licences?search_internal_id=com.roli.projucer&version=5"), | |||
false); | |||
if (shared == nullptr) | |||
break; | |||
var json = JSON::parse (shared->withExtraHeaders (accessTokenHeader) | |||
.readEntireStreamAsString()); | |||
shared = nullptr; | |||
if (auto* jsonLicenses = json.getArray()) | |||
{ | |||
for (auto& v : *jsonLicenses) | |||
{ | |||
if (auto* obj = v.getDynamicObject()) | |||
{ | |||
const String& productType = obj->getProperty (projucerLicenseTypeIdentifier); | |||
const String& status = obj->getProperty (licenseStatusIdentifier); | |||
if (productType.isNotEmpty() && (status.isEmpty() || status == "active")) | |||
licenses.add (productType); | |||
} | |||
} | |||
} | |||
if (! licenses.isEmpty()) | |||
break; | |||
} | |||
// ask the user to select a license | |||
HashMap<String, String> result; | |||
requiredWebview = true; | |||
if (! queryWebview (licenseChooserPage, {}, result)) | |||
break; | |||
const String& redirectURL = result["page-redirect"]; | |||
const String& productKey = result["register-product"]; | |||
const String& chosenLicenseType = result["redeem-licence-type"]; | |||
if (redirectURL.isNotEmpty()) | |||
{ | |||
licenseChooserPage = "https://juce.com/webviews/register-product"; | |||
continue; | |||
} | |||
if (productKey.isNotEmpty()) | |||
{ | |||
DynamicObject::Ptr redeamObject = new DynamicObject(); | |||
redeamObject->setProperty (serialIdentifier, productKey); | |||
String postData (JSON::toString (var (redeamObject))); | |||
ScopedPointer<WebInputStream> shared = getSharedWebInputStream (URL ("https://api.roli.com/api/v1/user/products").withPOSTData (postData), | |||
true); | |||
if (shared == nullptr) | |||
break; | |||
int statusCode = shared->withExtraHeaders (accessTokenHeader) | |||
.withExtraHeaders ("Content-Type: application/json") | |||
.getStatusCode(); | |||
licenseChooserPage = String ("https://juce.com/webviews/register-product?error=") | |||
+ String (statusCode == 404 ? "invalid" : "server"); | |||
if (statusCode == 200) | |||
selectNewLicense = false; | |||
continue; | |||
} | |||
if (chosenLicenseType.isNotEmpty()) | |||
{ | |||
// redeem the license | |||
DynamicObject::Ptr jsonLicenseObject = new DynamicObject(); | |||
jsonLicenseObject->setProperty (projucerLicenseTypeIdentifier, chosenLicenseType); | |||
jsonLicenseObject->setProperty (versionIdentifier, 5); | |||
DynamicObject::Ptr jsonLicenseRequest = new DynamicObject(); | |||
jsonLicenseRequest->setProperty (licenseIdentifier, var (jsonLicenseObject)); | |||
jsonLicenseRequest->setProperty (searchInternalIdentifier, "com.roli.projucer"); | |||
jsonLicenseRequest->setProperty (licenseTypeIdentifier, "software"); | |||
String postData (JSON::toString (var (jsonLicenseRequest))); | |||
ScopedPointer<WebInputStream> shared | |||
= getSharedWebInputStream (URL ("https://api.roli.com/api/v1/user/products/redeem").withPOSTData (postData), true); | |||
if (shared != nullptr) | |||
{ | |||
int statusCode = shared->withExtraHeaders (accessTokenHeader) | |||
.withExtraHeaders ("Content-Type: application/json") | |||
.getStatusCode(); | |||
if (statusCode == 200) | |||
selectNewLicense = false; | |||
continue; | |||
} | |||
} | |||
break; | |||
} | |||
HashMap<String, String> result; | |||
if (requiredWebview && ! threadShouldExit()) | |||
queryWebview ("https://juce.com/webviews/registration-complete", "licence_provisioned", result); | |||
stateToUpdate.type = getBestLicenseTypeFromLicenses (licenses); | |||
} | |||
//============================================================================== | |||
void run() override | |||
{ | |||
LicenseState workState (owner.state); | |||
while (! threadShouldExit()) | |||
{ | |||
workState.authToken = getAuthToken(); | |||
if (workState.authToken.isEmpty()) | |||
return; | |||
// read the user information | |||
updateUserInfo (workState); | |||
if (threadShouldExit()) | |||
return; | |||
updateIfChanged (workState); | |||
// if the last step logged us out then retry | |||
if (workState.authToken.isEmpty()) | |||
continue; | |||
// check if the license has changed | |||
updateLicenseType (workState); | |||
if (threadShouldExit()) | |||
return; | |||
updateIfChanged (workState); | |||
closeWebviewOnMessageThread (0); | |||
finished.wait (60 * 5 * 1000); | |||
} | |||
} | |||
//============================================================================== | |||
LicenseState licenseStateFromJSON (const var& json, const String& authToken, const Image& fallbackAvatar) | |||
{ | |||
static Identifier usernameIdentifier ("username"); | |||
static Identifier emailIdentifier ("email"); | |||
static Identifier avatarURLIdentifier ("avatar_url"); | |||
LicenseState result; | |||
if (auto* obj = json.getDynamicObject()) | |||
{ | |||
result.type = LicenseState::Type::noLicenseChosenYet; | |||
result.username = obj->getProperty (usernameIdentifier); | |||
result.authToken = authToken; | |||
result.email = obj->getProperty (emailIdentifier); | |||
result.avatar = fallbackAvatar; | |||
String avatarURL = obj->getProperty (avatarURLIdentifier); | |||
if (avatarURL.isNotEmpty()) | |||
{ | |||
if (ScopedPointer<WebInputStream> shared = getSharedWebInputStream (URL (avatarURL), false)) | |||
{ | |||
MemoryBlock mb; | |||
shared->readIntoMemoryBlock (mb); | |||
result.avatar = ImageFileFormat::loadFrom (mb.getData(), mb.getSize()); | |||
} | |||
} | |||
} | |||
return result; | |||
} | |||
//============================================================================== | |||
bool queryWebview (const String& startURL, const String& valueToQuery, HashMap<String, String>& result) | |||
{ | |||
executeOnMessageThreadAndBlock ([&] () { owner.queryWebview (startURL, valueToQuery, result); }, false); | |||
return (! threadShouldExit()); | |||
} | |||
void closeWebviewOnMessageThread (int result) | |||
{ | |||
executeOnMessageThreadAndBlock ([this, result] () { owner.closeWebview (result); }); | |||
} | |||
static bool stringArrayContainsSubstring (const StringArray& stringArray, const String& substring) | |||
{ | |||
jassert (substring.isNotEmpty()); | |||
for (auto element : stringArray) | |||
if (element.containsIgnoreCase (substring)) | |||
return true; | |||
return false; | |||
} | |||
static LicenseState::Type getBestLicenseTypeFromLicenses (const StringArray& licenses) | |||
{ | |||
if (stringArrayContainsSubstring (licenses, "juce-pro")) return LicenseState::Type::pro; | |||
else if (stringArrayContainsSubstring (licenses, "juce-indie")) return LicenseState::Type::indie; | |||
else if (stringArrayContainsSubstring (licenses, "juce-personal")) return LicenseState::Type::personal; | |||
else if (stringArrayContainsSubstring (licenses, "juce-edu")) return LicenseState::Type::edu; | |||
return LicenseState::Type::noLicenseChosenYet; | |||
} | |||
void updateIfChanged (const LicenseState& newState) | |||
{ | |||
LicenseState updatedState (owner.state); | |||
bool changed = false; | |||
bool shouldUpdateLicenseType = (newState.type != LicenseState::Type::noLicenseChosenYet | |||
|| updatedState.type == LicenseState::Type::notLoggedIn); | |||
if (newState.type != LicenseState::Type::notLoggedIn) updatedState.avatar = newState.avatar; | |||
if (owner.state.type != newState.type && shouldUpdateLicenseType) { updatedState.type = newState.type; changed = true; } | |||
if (owner.state.authToken != newState.authToken) { updatedState.authToken = newState.authToken; changed = true; } | |||
if (owner.state.username != newState.username) { updatedState.username = newState.username; changed = true; } | |||
if (owner.state.email != newState.email) { updatedState.email = newState.email; changed = true; } | |||
if (owner.state.avatar.isValid() != newState.avatar.isValid()) { changed = true; } | |||
if (changed) | |||
executeOnMessageThreadAndBlock ([this, updatedState]() { owner.updateState (updatedState); }); | |||
} | |||
//============================================================================== | |||
LicenseController& owner; | |||
bool selectNewLicense; | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (LicenseThread) | |||
}; |
@@ -0,0 +1,284 @@ | |||
/* | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - 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. | |||
============================================================================== | |||
*/ | |||
#pragma once | |||
//============================================================================== | |||
class LicenseWebview : public DialogWindow | |||
{ | |||
public: | |||
LicenseWebview (ModalComponentManager::Callback* callbackToUse, const String& request) | |||
: DialogWindow ("Log-in to Projucer", Colour (0xfff1f1f1), true, true) | |||
{ | |||
LicenseWebviewContent* content; | |||
setUsingNativeTitleBar (true); | |||
setContentOwned (content = new LicenseWebviewContent (*this, callbackToUse), true); | |||
centreWithSize (getWidth(), getHeight()); | |||
content->goToURL (request); | |||
} | |||
void goToURL (const String& request) { reinterpret_cast<LicenseWebviewContent*> (getContentComponent())->goToURL (request); } | |||
void setPageCallback (const std::function<void (const String&, const HashMap<String, String>&)>& cb) | |||
{ | |||
reinterpret_cast<LicenseWebviewContent*> (getContentComponent())->pageCallback = cb; | |||
} | |||
void setNewWindowCallback (const std::function<void (const String&)>& cb) | |||
{ | |||
reinterpret_cast<LicenseWebviewContent*> (getContentComponent())->newWindowCallback = cb; | |||
} | |||
void closeButtonPressed() override { exitModalState (-1); } | |||
private: | |||
class LicenseWebviewContent : public Component | |||
{ | |||
//============================================================================== | |||
struct RedirectWebBrowserComponent : public WebBrowserComponent | |||
{ | |||
RedirectWebBrowserComponent (LicenseWebviewContent& controller) : WebBrowserComponent (false), owner (controller) {} | |||
virtual ~RedirectWebBrowserComponent() {} | |||
bool pageAboutToLoad (const String& url) override { return owner.pageAboutToLoad (url); } | |||
void pageFinishedLoading (const String& url) override { owner.pageFinishedLoading (url); } | |||
void newWindowAttemptingToLoad (const String& url) override { owner.newWindowAttemptingToLoad (url); } | |||
bool pageLoadHadNetworkError (const String& err) override { return owner.pageLoadHadNetworkError (err); } | |||
LicenseWebviewContent& owner; | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (RedirectWebBrowserComponent) | |||
}; | |||
//============================================================================== | |||
struct Header : public Component, private LicenseController::StateChangedCallback, | |||
private Button::Listener | |||
{ | |||
Header () | |||
: avatarButton ("User Settings", &getIcons().user) | |||
{ | |||
setOpaque (true); | |||
addChildComponent (avatarButton); | |||
avatarButton.addListener (this); | |||
if (LicenseController* licenseController = ProjucerApplication::getApp().licenseController) | |||
{ | |||
licenseController->addLicenseStatusChangedCallback (this); | |||
licenseStateChanged (licenseController->getState()); | |||
} | |||
} | |||
virtual ~Header() | |||
{ | |||
avatarButton.removeListener (this); | |||
if (LicenseController* licenseController = ProjucerApplication::getApp().licenseController) | |||
licenseController->removeLicenseStatusChangedCallback (this); | |||
} | |||
void resized() override | |||
{ | |||
auto r = getLocalBounds().reduced (30, 20); | |||
avatarButton.setBounds (r.removeFromRight (r.getHeight())); | |||
} | |||
void paint (Graphics& g) override | |||
{ | |||
auto r = getLocalBounds().reduced (30, 20); | |||
g.fillAll (Colour (backgroundColour)); | |||
if (juceLogo != nullptr) | |||
juceLogo->drawWithin (g, r.toFloat(), RectanglePlacement::xLeft + RectanglePlacement::yMid, 1.0); | |||
} | |||
void licenseStateChanged (const LicenseState& state) override | |||
{ | |||
avatarButton.iconImage = state.avatar; | |||
avatarButton.setVisible (state.type != LicenseState::Type::notLoggedIn && state.type != LicenseState::Type::GPL); | |||
avatarButton.repaint(); | |||
} | |||
void buttonClicked (Button*) override | |||
{ | |||
if (LicenseController* licenseController = ProjucerApplication::getApp().licenseController) | |||
{ | |||
const LicenseState::Type type = licenseController->getState().type; | |||
auto* content = new UserSettingsPopup (true); | |||
content->setSize (200, (type == LicenseState::Type::noLicenseChosenYet ? 100 : 150)); | |||
CallOutBox::launchAsynchronously (content, avatarButton.getScreenBounds(), nullptr); | |||
} | |||
} | |||
static constexpr uint32 backgroundColour = 0xff414141; | |||
ScopedPointer<Drawable> juceLogo | |||
= Drawable::createFromImageData (BinaryData::jucelogowithtext_svg, | |||
BinaryData::jucelogowithtext_svgSize); | |||
IconButton avatarButton; | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (Header) | |||
}; | |||
//============================================================================== | |||
//============================================================================== | |||
public: | |||
LicenseWebviewContent (LicenseWebview& parentWindowToUse, ModalComponentManager::Callback* callbackToUse) | |||
: parentWindow (parentWindowToUse), modalCallback (callbackToUse), webview (*this) | |||
{ | |||
addAndMakeVisible (header); | |||
addAndMakeVisible (webview); | |||
setOpaque (true); | |||
setSize (978, 718); | |||
#if JUCE_WINDOWS // windows needs the webcomponent be visible | |||
parentWindow.enterModalState (true, modalCallback.release(), true); | |||
#endif | |||
} | |||
void goToURL (const String& request) | |||
{ | |||
lastURL = request; | |||
webview.goToURL (lastURL); | |||
} | |||
void paint (Graphics& g) override { g.fillAll (Colours::lightblue); } | |||
void resized() override | |||
{ | |||
auto r = getLocalBounds(); | |||
header.setBounds (r.removeFromTop (78)); | |||
webview.setBounds (r); | |||
} | |||
bool pageAboutToLoad (const String& page) | |||
{ | |||
URL url (page); | |||
if (page == "about:blank" || page.startsWith ("file://") || page.startsWith ("data:text/html")) | |||
{ | |||
if (page != lastErrorPageURI) | |||
lastURL = page; | |||
return true; | |||
} | |||
else if (url.getScheme() == "projucer") | |||
{ | |||
HashMap<String, String> params; | |||
auto n = url.getParameterNames().size(); | |||
for (int i = 0; i < n; ++i) | |||
params.set (url.getParameterNames()[i], url.getParameterValues()[i]); | |||
String cmd (url.getDomain()); | |||
if (n == 0 && cmd.containsChar (L'=')) | |||
{ | |||
// old-style callback | |||
StringArray domainTokens (StringArray::fromTokens (cmd, "=", "")); | |||
cmd = domainTokens[0]; | |||
params.set (cmd, domainTokens[1]); | |||
} | |||
if (pageCallback) | |||
pageCallback (cmd, params); | |||
return false; | |||
} | |||
bool isValid = (url.getDomain().endsWith ("roli.com") || url.getDomain().endsWith ("juce.com")); | |||
if (isValid) | |||
lastURL = page; | |||
return true; | |||
} | |||
void pageFinishedLoading (const String& page) | |||
{ | |||
URL url (page); | |||
if ((isValidURL (url) | |||
|| page.startsWith ("file://") || page.startsWith ("data:text/html")) | |||
&& ! parentWindow.isCurrentlyModal()) | |||
parentWindow.enterModalState (true, modalCallback.release(), true); | |||
} | |||
void newWindowAttemptingToLoad (const String& page) | |||
{ | |||
URL url (page); | |||
bool isGitHub = url.getDomain().endsWith ("github.com"); | |||
if (url.getDomain().endsWith ("roli.com") | |||
|| url.getDomain().endsWith ("juce.com") | |||
|| isGitHub) | |||
{ | |||
url.launchInDefaultBrowser(); | |||
if (newWindowCallback && ! isGitHub) | |||
newWindowCallback (page); | |||
} | |||
} | |||
bool pageLoadHadNetworkError (const String&) | |||
{ | |||
String errorPageSource = String (BinaryData::offlinepage_html, BinaryData::offlinepage_htmlSize) | |||
.replace ("__URL_PLACEHOLDER__", lastURL); | |||
#if JUCE_WINDOWS | |||
auto tmpFile = File::createTempFile (".html"); | |||
tmpFile.replaceWithText (errorPageSource, true); | |||
lastErrorPageURI = "file://" + tmpFile.getFullPathName(); | |||
#else | |||
lastErrorPageURI = "data:text/html;base64," + Base64::toBase64 (errorPageSource); | |||
#endif | |||
goToURL (lastErrorPageURI); | |||
return false; | |||
} | |||
static bool isValidURL (const URL& url) { return (url.getDomain().endsWith ("roli.com") || url.getDomain().endsWith ("juce.com")); } | |||
//============================================================================== | |||
LicenseWebview& parentWindow; | |||
ScopedPointer<ModalComponentManager::Callback> modalCallback; | |||
Header header; | |||
RedirectWebBrowserComponent webview; | |||
std::function<void (const String&, const HashMap<String, String>&)> pageCallback; | |||
std::function<void (const String&)> newWindowCallback; | |||
String lastURL, lastErrorPageURI; | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (LicenseWebviewContent) | |||
}; | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (LicenseWebview) | |||
}; |
@@ -58,7 +58,7 @@ public: | |||
if (rowNumber >= 0 && rowNumber < activities.size()) | |||
{ | |||
g.setColour (findColour (mainBackgroundColourId).contrasting (0.7f)); | |||
g.setColour (findColour (defaultTextColourId)); | |||
g.setFont (height * 0.7f); | |||
g.drawText (activities [rowNumber], | |||
@@ -65,8 +65,7 @@ public: | |||
{ | |||
if (state == errors || state == warnings) | |||
{ | |||
g.setColour (findColour (mainBackgroundColourId).contrasting (state == errors ? Colours::red | |||
: Colours::yellow, 0.4f)); | |||
g.setColour (state == errors ? Colours::red : Colours::yellow); | |||
const Path& icon = (state == errors) ? getIcons().warning | |||
: getIcons().info; | |||
@@ -104,10 +103,9 @@ private: | |||
State state; | |||
//============================================================================== | |||
class Spinner : public Component, | |||
private Timer | |||
struct Spinner : public Component, | |||
private Timer | |||
{ | |||
public: | |||
Spinner() | |||
{ | |||
setInterceptsMouseClicks (false, false); | |||
@@ -115,9 +113,9 @@ private: | |||
void paint (Graphics& g) override | |||
{ | |||
if (TabBarButton* tbb = findParentComponentOfClass<TabBarButton>()) | |||
if (findParentComponentOfClass<TabBarButton>() != nullptr) | |||
{ | |||
getLookAndFeel().drawSpinningWaitAnimation (g, ProjucerLookAndFeel::getTabBackgroundColour (*tbb).contrasting(), | |||
getLookAndFeel().drawSpinningWaitAnimation (g, findColour (treeIconColourId), | |||
0, 0, getWidth(), getHeight()); | |||
startTimer (1000 / 20); | |||
} | |||
@@ -24,8 +24,7 @@ | |||
#include "projucer_LiveCodeBuilderDLL.h" | |||
struct CompileEngineDLL | |||
struct CompileEngineDLL : DeletedAtShutdown | |||
{ | |||
CompileEngineDLL() | |||
{ | |||
@@ -37,7 +36,7 @@ struct CompileEngineDLL | |||
shutdown(); | |||
} | |||
void tryLoadDll() | |||
bool tryLoadDll() | |||
{ | |||
// never load the dynamic lib multiple times | |||
if (! isLoaded()) | |||
@@ -49,8 +48,14 @@ struct CompileEngineDLL | |||
#define INIT_LIVE_DLL_FN(name, returnType, params) name = (name##_type) dll.getFunction (#name); | |||
LIVE_DLL_FUNCTIONS (INIT_LIVE_DLL_FN); | |||
#undef INIT_LIVE_DLL_FN | |||
return true; | |||
} | |||
return false; | |||
} | |||
return true; | |||
} | |||
void initialise (CrashCallbackFunction crashFn, QuitCallbackFunction quitFn, bool setupSignals) | |||
@@ -107,10 +112,12 @@ struct CompileEngineDLL | |||
return userAppData.getChildFile (String ("Projucer-") + ProjectInfo::versionString); | |||
} | |||
juce_DeclareSingleton (CompileEngineDLL, false) | |||
private: | |||
DynamicLibrary dll; | |||
enum { requiredVersion = 1 }; | |||
enum { requiredVersion = 2 }; | |||
static File findDLLFile() | |||
{ | |||
@@ -182,4 +189,7 @@ private: | |||
value[0] = 0; | |||
getGlobalProperties().getValue (key).copyToUTF8 (value, size); | |||
} | |||
static void crashCallback (const char*) {} | |||
static void quitCallback() {} | |||
}; |
@@ -84,8 +84,8 @@ private: | |||
String getRenamingName() const override { return getDisplayName(); } | |||
String getDisplayName() const override { return (namespaceToShow != nullptr ? namespaceToShow->name : String()) + "::"; } | |||
void setName (const String&) override {} | |||
bool isMissing() override { return false; } | |||
Icon getIcon() const override { return Icon (getIcons().graph, getContrastingColour (Colours::darkred, 0.5f)); } | |||
bool isMissing() const override { return false; } | |||
Icon getIcon() const override { return Icon (getIcons().graph, getContentColour (true)); } | |||
bool canBeSelected() const override { return true; } | |||
bool mightContainSubItems() override { return namespaceToShow != nullptr && ! namespaceToShow->isEmpty(); } | |||
String getUniqueName() const override { return uniqueID; } | |||
@@ -146,11 +146,33 @@ private: | |||
String getRenamingName() const override { return getDisplayName(); } | |||
String getDisplayName() const override { return displayName; } | |||
void setName (const String&) override {} | |||
bool isMissing() override { return false; } | |||
Icon getIcon() const override { return Icon (getIcons().box, getTextColour()); } | |||
bool isMissing() const override { return false; } | |||
Icon getIcon() const override { return Icon (getIcons().box, getContentColour (true)); } | |||
bool canBeSelected() const override { return true; } | |||
bool mightContainSubItems() override { return false; } | |||
String getUniqueName() const override { return comp.getName(); } | |||
int getRightHandButtonSpace() override { return canBeLaunched() ? 60 : 40; } | |||
Component* createItemComponent() override | |||
{ | |||
auto* content = new TreeItemComponent (*this); | |||
content->addRightHandButton (new ClassItemButton (*this, true)); | |||
if (canBeLaunched()) | |||
content->addRightHandButton (new ClassItemButton (*this, false)); | |||
return content; | |||
} | |||
Colour getContentColour (bool isIcon) const override | |||
{ | |||
auto alpha = comp.getInstantiationFlags().canBeInstantiated() ? 1.0f : 0.4f; | |||
auto& lf = ProjucerApplication::getApp().lookAndFeel; | |||
if (isSelected()) | |||
return lf.findColour (defaultHighlightedTextColourId).withMultipliedAlpha (alpha); | |||
return lf.findColour (isIcon ? treeIconColourId : defaultTextColourId).withMultipliedAlpha (alpha); | |||
} | |||
bool canBeLaunched() const | |||
{ | |||
@@ -185,34 +207,6 @@ private: | |||
showClassDeclaration(); | |||
} | |||
void paintContent (Graphics& g, const Rectangle<int>& area) override | |||
{ | |||
g.setFont (getFont()); | |||
g.setColour (getTextColour()); | |||
g.drawFittedText (getDisplayName(), | |||
area.withWidth (area.getWidth() - 40), // to account for buttons | |||
Justification::centredLeft, 1, 0.8f); | |||
} | |||
Colour getTextColour() const | |||
{ | |||
return getContrastingColour (comp.getInstantiationFlags().canBeInstantiated() ? 0.8f : 0.3f); | |||
} | |||
Component* createItemComponent() override | |||
{ | |||
Component* c = JucerTreeViewBase::createItemComponent(); | |||
jassert (dynamic_cast<TreeItemComponent*> (c) != nullptr); | |||
if (canBeLaunched()) | |||
static_cast<TreeItemComponent*> (c)->addRightHandButton (new ClassItemButton (*this, false)); | |||
static_cast<TreeItemComponent*> (c)->addRightHandButton (new ClassItemButton (*this, true)); | |||
return c; | |||
} | |||
struct ClassItemButton : public Button | |||
{ | |||
ClassItemButton (const ClassItem& c, bool isShowCodeButton) | |||
@@ -226,11 +220,11 @@ private: | |||
const Path& path = isShowCode ? getIcons().code | |||
: getIcons().play; | |||
Colour col (classItem.getBackgroundColour().contrasting (isShowCode ? Colours::white | |||
: Colours::lightgreen, 0.6f)); | |||
auto colour = classItem.getContentColour (true).withAlpha (isButtonDown ? 1.0f | |||
: (isMouseOverButton ? 0.8f | |||
: 0.5f)); | |||
Icon (path, col.withAlpha (isButtonDown ? 1.0f : (isMouseOverButton ? 0.8f : 0.5f))) | |||
.draw (g, getLocalBounds().reduced (getHeight() / 5).toFloat(), false); | |||
Icon (path, colour).draw (g, getLocalBounds().reduced (getHeight() / 5).toFloat(), false); | |||
} | |||
void clicked() override | |||
@@ -245,6 +239,29 @@ private: | |||
bool isShowCode; | |||
}; | |||
struct ClassComponent : public Component | |||
{ | |||
ClassComponent (ClassItem& item, bool canBeLaunched) | |||
{ | |||
addAndMakeVisible (buttons.add (new ClassItemButton (item, true))); | |||
if (canBeLaunched) | |||
addAndMakeVisible (buttons.add (new ClassItemButton (item, false))); | |||
setInterceptsMouseClicks (false, true); | |||
} | |||
void resized() override | |||
{ | |||
auto bounds = getLocalBounds(); | |||
for (auto b : buttons) | |||
b->setBounds (bounds.removeFromRight (25).reduced (2)); | |||
} | |||
OwnedArray<ClassItemButton> buttons; | |||
}; | |||
const ClassDatabase::Class comp; | |||
String displayName; | |||
}; | |||
@@ -92,8 +92,8 @@ private: | |||
String getRenamingName() const override { return getDisplayName(); } | |||
String getDisplayName() const override { return "Errors and Warnings"; } | |||
void setName (const String&) override {} | |||
bool isMissing() override { return false; } | |||
Icon getIcon() const override { return Icon (getIcons().bug, getContrastingColour (0.8f)); } | |||
bool isMissing() const override { return false; } | |||
Icon getIcon() const override { return Icon (getIcons().bug, getContentColour (true)); } | |||
bool canBeSelected() const override { return true; } | |||
bool mightContainSubItems() override { return true; } | |||
String getUniqueName() const override { return "errors"; } | |||
@@ -141,8 +141,8 @@ private: | |||
void setName (const String&) override {} | |||
void addSubItems() override {} | |||
bool isMissing() override { return false; } | |||
Icon getIcon() const override { return Icon (getIcons().bug, getContrastingColour (0.8f)); } | |||
bool isMissing() const override { return false; } | |||
Icon getIcon() const override { return Icon (getIcons().bug, getContentColour (true)); } | |||
bool canBeSelected() const override { return true; } | |||
bool mightContainSubItems() override { return true; } | |||
String getUniqueName() const override { return String::toHexString (compileUnit.hashCode64()); } | |||
@@ -150,13 +150,16 @@ private: | |||
String getRenamingName() const override { return getDisplayName(); } | |||
String getDisplayName() const override | |||
{ | |||
if (File::isAbsolutePath(compileUnit)) | |||
if (File::isAbsolutePath (compileUnit)) | |||
{ | |||
File f (compileUnit); | |||
return f.exists() ? f.getFileName() : compileUnit; | |||
} | |||
return compileUnit; | |||
if (! compileUnit.isEmpty()) | |||
return compileUnit; | |||
return String ("Global"); | |||
} | |||
void showOverlays() | |||
@@ -204,7 +207,7 @@ private: | |||
struct ErrorMessageTreeItem : public JucerTreeViewBase | |||
{ | |||
ErrorMessageTreeItem (const DiagnosticMessage& m) | |||
: message (m), itemHeight (14) | |||
: message (m), itemHeight (25) | |||
{ | |||
setOpenness (Openness::opennessClosed); | |||
uniqueID << message.message << ':' << message.range.toString(); | |||
@@ -218,34 +221,41 @@ private: | |||
String getRenamingName() const override { return getDisplayName(); } | |||
String getDisplayName() const override { return message.message; } | |||
void setName (const String&) override {} | |||
bool isMissing() override { return false; } | |||
bool isMissing() const override { return false; } | |||
Icon getIcon() const override { return Icon (message.isNote() ? getIcons().info | |||
: getIcons().warning, getTextColour()); } | |||
: getIcons().warning, getContentColour (true)); } | |||
bool canBeSelected() const override { return true; } | |||
bool mightContainSubItems() override { return getNumSubItems() != 0; } | |||
String getUniqueName() const override { return uniqueID; } | |||
Component* createItemComponent() override { return new ErrorItemComponent (*this); } | |||
struct ErrorItemComponent : public TreeItemComponent | |||
void paintContent (Graphics& g, const Rectangle<int>& area) override | |||
{ | |||
ErrorItemComponent (ErrorMessageTreeItem& e) : TreeItemComponent (e) {} | |||
jassert (area.getWidth() >= 0); | |||
void resized() override | |||
{ | |||
TreeItemComponent::resized(); | |||
AttributedString s (message.message); | |||
s.setFont (Font (12.0f)); | |||
s.setColour (getContentColour (false)); | |||
s.setJustification (Justification::centredLeft); | |||
const int width = getWidth(); | |||
const int iconWidth = 25; // TODO: this shouldn't be a magic number | |||
text.createLayout (s, (float) area.getWidth()); | |||
if (width > iconWidth) | |||
static_cast<ErrorMessageTreeItem&> (item).updateTextLayout (getWidth() - 30 /* accounting for icon */); | |||
} | |||
void lookAndFeelChanged() override | |||
const auto newHeight = 2 + jmax (25, (int) text.getHeight()); | |||
if (itemHeight != newHeight) | |||
{ | |||
resized(); | |||
itemHeight = newHeight; | |||
treeHasChanged(); | |||
} | |||
}; | |||
text.draw (g, area.toFloat()); | |||
} | |||
Colour getContentColour (bool isIcon) const override | |||
{ | |||
return message.isError() ? Colours::red | |||
: message.isWarning() ? Colours::yellow | |||
: getOwnerView()->findColour (isIcon ? treeIconColourId | |||
: defaultTextColourId); | |||
} | |||
void showPopupMenu() override | |||
{ | |||
@@ -260,48 +270,11 @@ private: | |||
SystemClipboard::copyTextToClipboard (message.toString()); | |||
} | |||
void paintIcon (Graphics& g, Rectangle<int> area) override | |||
{ | |||
getIcon().draw (g, area.toFloat(), isIconCrossedOut()); | |||
} | |||
void paintContent (Graphics& g, const Rectangle<int>& area) override | |||
{ | |||
text.draw (g, area.toFloat()); | |||
} | |||
int getItemHeight() const override | |||
{ | |||
return itemHeight; | |||
} | |||
Colour getTextColour() const | |||
{ | |||
Colour bkg (getOwnerView()->findColour (mainBackgroundColourId)); | |||
return bkg.contrasting (message.isError() ? Colours::darkred | |||
: message.isWarning() ? Colours::yellow.darker() | |||
: Colours::grey, 0.4f); | |||
} | |||
void updateTextLayout (int width) | |||
{ | |||
jassert (width >= 0); | |||
AttributedString s (message.message); | |||
s.setFont (Font (12.0f)); | |||
s.setColour (getTextColour()); | |||
text.createLayout (s, (float) width); | |||
const int newHeight = 2 + jmax (14, (int) text.getHeight()); | |||
if (itemHeight != newHeight) | |||
{ | |||
itemHeight = newHeight; | |||
treeHasChanged(); | |||
} | |||
} | |||
SourceCodeEditor* getEditor() | |||
{ | |||
if (ProjectContentComponent* pcc = getProjectContentComponent()) | |||
@@ -33,7 +33,6 @@ extern "C" | |||
typedef void (*QuitCallbackFunction)(); | |||
typedef void (*SetPropertyFunction) (const char* key, const char* value); | |||
typedef void (*GetPropertyFunction) (const char* key, char* value, size_t size); | |||
typedef void (*LoginCallbackFunction) (void* userInfo, const char* errorMessage, const char* username, const char* apiKey); | |||
// We've used an X macro to define the DLL functions rather than just declaring them, so that | |||
// we can load the DLL and its functions dynamically and cope with it not being there. | |||
@@ -45,12 +44,6 @@ extern "C" | |||
X (projucer_shutdown, void, ()) \ | |||
X (projucer_createBuilder, LiveCodeBuilder, (SendMessageFunction, void* userInfo, const char* projectID, const char* cacheFolder)) \ | |||
X (projucer_sendMessage, void, (LiveCodeBuilder, const void* messageData, size_t messageDataSize)) \ | |||
X (projucer_deleteBuilder, void, (LiveCodeBuilder)) \ | |||
X (projucer_login, void, (const char* userLoginName, const char* userPassword, bool remainLoggedIn, LoginCallbackFunction, void* callbackUserInfo)) \ | |||
X (projucer_logout, void, ()) \ | |||
X (projucer_isLoggedIn, bool, ()) \ | |||
X (projucer_getLoginName, void, (char*)) \ | |||
X (projucer_hasLicense, bool, (const char* featureName)) \ | |||
X (projucer_hasLiveCodingLicence, bool, ()) | |||
X (projucer_deleteBuilder, void, (LiveCodeBuilder)) | |||
} |
@@ -44,15 +44,15 @@ Array<ProjectExporter::ExporterTypeInfo> ProjectExporter::getExporterTypes() | |||
{ | |||
Array<ProjectExporter::ExporterTypeInfo> types; | |||
addType (types, XCodeProjectExporter::getNameMac(), BinaryData::projectIconXcode_png, BinaryData::projectIconXcode_pngSize); | |||
addType (types, XCodeProjectExporter::getNameiOS(), BinaryData::projectIconXcodeIOS_png, BinaryData::projectIconXcodeIOS_pngSize); | |||
addType (types, MSVCProjectExporterVC2017::getName(), BinaryData::projectIconVisualStudio_png, BinaryData::projectIconVisualStudio_pngSize); | |||
addType (types, MSVCProjectExporterVC2015::getName(), BinaryData::projectIconVisualStudio_png, BinaryData::projectIconVisualStudio_pngSize); | |||
addType (types, MSVCProjectExporterVC2013::getName(), BinaryData::projectIconVisualStudio_png, BinaryData::projectIconVisualStudio_pngSize); | |||
addType (types, MakefileProjectExporter::getNameLinux(), BinaryData::projectIconLinuxMakefile_png, BinaryData::projectIconLinuxMakefile_pngSize); | |||
addType (types, AndroidProjectExporter::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); | |||
addType (types, XCodeProjectExporter::getNameMac(), BinaryData::export_xcode_svg, BinaryData::export_xcode_svgSize); | |||
addType (types, XCodeProjectExporter::getNameiOS(), BinaryData::export_xcode_svg, BinaryData::export_xcode_svgSize); | |||
addType (types, MSVCProjectExporterVC2017::getName(), BinaryData::export_visualStudio_svg, BinaryData::export_visualStudio_svgSize); | |||
addType (types, MSVCProjectExporterVC2015::getName(), BinaryData::export_visualStudio_svg, BinaryData::export_visualStudio_svgSize); | |||
addType (types, MSVCProjectExporterVC2013::getName(), BinaryData::export_visualStudio_svg, BinaryData::export_visualStudio_svgSize); | |||
addType (types, MakefileProjectExporter::getNameLinux(), BinaryData::export_linux_svg, BinaryData::export_linux_svgSize); | |||
addType (types, AndroidProjectExporter::getName(), BinaryData::export_android_svg, BinaryData::export_android_svgSize); | |||
addType (types, CodeBlocksProjectExporter::getNameWindows(), BinaryData::export_codeBlocks_svg, BinaryData::export_codeBlocks_svgSize); | |||
addType (types, CodeBlocksProjectExporter::getNameLinux(), BinaryData::export_codeBlocks_svg, BinaryData::export_codeBlocks_svgSize); | |||
return types; | |||
} | |||
@@ -43,7 +43,17 @@ public: | |||
const void* iconData; | |||
int iconDataSize; | |||
Image getIcon() const { return ImageCache::getFromMemory (iconData, iconDataSize); } | |||
Image getIcon() const | |||
{ | |||
Image image (Image::ARGB, 200, 200, true); | |||
Graphics g (image); | |||
ScopedPointer<Drawable> svgDrawable = Drawable::createFromImageData (iconData, (size_t) iconDataSize); | |||
svgDrawable->drawWithin (g, image.getBounds().toFloat(), RectanglePlacement::fillDestination, 1.0f); | |||
return image; | |||
} | |||
}; | |||
static StringArray getExporterNames(); | |||
@@ -22,125 +22,184 @@ | |||
============================================================================== | |||
*/ | |||
class PropertyGroupComponent : public Component | |||
//============================================================================== | |||
class InfoButton : public Button | |||
{ | |||
public: | |||
PropertyGroupComponent() {} | |||
void setProperties (const PropertyListBuilder& newProps) | |||
InfoButton (PropertyComponent& comp) | |||
: Button (String()), | |||
associatedComponent (comp) | |||
{ | |||
properties.clear(); | |||
properties.addArray (newProps.components); | |||
tooltip = associatedComponent.getTooltip(); | |||
auto stringWidth = Font (14.0f).getStringWidthFloat (tooltip); | |||
int maxWidth = 300; | |||
for (int i = properties.size(); --i >= 0;) | |||
addAndMakeVisible (properties.getUnchecked(i)); | |||
if (stringWidth > maxWidth) | |||
{ | |||
width = maxWidth; | |||
numLines += static_cast<int> (stringWidth / width); | |||
} | |||
else | |||
{ | |||
width = roundToInt (stringWidth); | |||
} | |||
} | |||
int updateSize (int x, int y, int width) | |||
void paintButton (Graphics& g, bool isMouseOverButton, bool isButtonDown) override | |||
{ | |||
int height = 38; | |||
auto bounds = getLocalBounds().toFloat().reduced (2); | |||
const auto& icon = getIcons().info; | |||
for (int i = 0; i < properties.size(); ++i) | |||
{ | |||
PropertyComponent* pp = properties.getUnchecked(i); | |||
pp->setBounds (10, height, width - 20, pp->getPreferredHeight()); | |||
height += pp->getHeight(); | |||
} | |||
g.setColour (findColour (treeIconColourId).withMultipliedAlpha (isMouseOverButton || isButtonDown ? 1.0f : 0.5f)); | |||
height += 16; | |||
setBounds (x, y, width, height); | |||
return height; | |||
if (isButtonDown) | |||
g.fillEllipse (bounds); | |||
else | |||
g.fillPath (icon, RectanglePlacement (RectanglePlacement::centred) | |||
.getTransformToFit (icon.getBounds(), bounds)); | |||
} | |||
void paint (Graphics& g) override | |||
void clicked() override | |||
{ | |||
const Colour bkg (findColour (mainBackgroundColourId)); | |||
g.setColour (Colours::white.withAlpha (0.35f)); | |||
g.fillRect (0, 30, getWidth(), getHeight() - 38); | |||
auto* w = new InfoWindow (tooltip); | |||
w->setSize (width, w->getHeight() * numLines + 10); | |||
g.setFont (Font (15.0f, Font::bold)); | |||
g.setColour (bkg.contrasting (0.7f)); | |||
g.drawFittedText (getName(), 12, 0, getWidth() - 16, 25, Justification::bottomLeft, 1); | |||
CallOutBox::launchAsynchronously (w, getScreenBounds(), nullptr); | |||
} | |||
OwnedArray<PropertyComponent> properties; | |||
PropertyComponent& associatedComponent; | |||
private: | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PropertyGroupComponent) | |||
String tooltip; | |||
int width; | |||
int numLines = 1; | |||
//============================================================================== | |||
struct InfoWindow : public Component | |||
{ | |||
InfoWindow (String s) | |||
: stringToDisplay (s) | |||
{ | |||
setSize (150, 14); | |||
} | |||
void paint (Graphics& g) override | |||
{ | |||
g.fillAll (findColour (secondaryBackgroundColourId)); | |||
g.setColour (findColour (defaultTextColourId)); | |||
g.setFont (Font (14.0f)); | |||
g.drawFittedText (stringToDisplay, getLocalBounds(), Justification::centred, 10, 1.0f); | |||
} | |||
String stringToDisplay; | |||
}; | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (InfoButton) | |||
}; | |||
//============================================================================== | |||
class RolloverHelpComp : public Component, | |||
private Timer | |||
class PropertyGroupComponent : public Component | |||
{ | |||
public: | |||
RolloverHelpComp() : lastComp (nullptr) | |||
PropertyGroupComponent (String name, Icon icon) | |||
: header (name, icon) | |||
{ | |||
setInterceptsMouseClicks (false, false); | |||
startTimer (150); | |||
addAndMakeVisible (header); | |||
} | |||
void paint (Graphics& g) override | |||
void setProperties (const PropertyListBuilder& newProps) | |||
{ | |||
AttributedString s; | |||
s.setJustification (Justification::centredLeft); | |||
s.append (lastTip, Font (14.0f), findColour (mainBackgroundColourId).contrasting (0.7f)); | |||
infoButtons.clear(); | |||
properties.clear(); | |||
properties.addArray (newProps.components); | |||
TextLayout tl; | |||
tl.createLayoutWithBalancedLineLengths (s, getWidth() - 10.0f); | |||
if (tl.getNumLines() > 3) | |||
tl.createLayout (s, getWidth() - 10.0f); | |||
for (auto i = properties.size(); --i >= 0;) | |||
{ | |||
auto* prop = properties.getUnchecked (i); | |||
tl.draw (g, getLocalBounds().toFloat()); | |||
} | |||
addAndMakeVisible (prop); | |||
private: | |||
Component* lastComp; | |||
String lastTip; | |||
if (! prop->getTooltip().isEmpty()) | |||
{ | |||
addAndMakeVisible (infoButtons.add (new InfoButton (*prop))); | |||
prop->setTooltip (String()); // set the tooltip to empty so it only displays when its button is clicked | |||
} | |||
} | |||
} | |||
void timerCallback() override | |||
int updateSize (int x, int y, int width) | |||
{ | |||
Component* newComp = Desktop::getInstance().getMainMouseSource().getComponentUnderMouse(); | |||
header.setBounds (0, 0, width, 40); | |||
if (newComp != nullptr | |||
&& (newComp->getTopLevelComponent() != getTopLevelComponent() | |||
|| newComp->isCurrentlyBlockedByAnotherModalComponent())) | |||
newComp = nullptr; | |||
auto height = header.getHeight() + 5; | |||
if (newComp != lastComp) | |||
for (auto i = 0; i < properties.size(); ++i) | |||
{ | |||
lastComp = newComp; | |||
auto* pp = properties.getUnchecked (i); | |||
auto propertyHeight = pp->getPreferredHeight() + (getHeightMultiplier (pp) * pp->getPreferredHeight()); | |||
InfoButton* buttonToUse = nullptr; | |||
String newTip (findTip (newComp)); | |||
for (auto* b : infoButtons) | |||
if (&b->associatedComponent == pp) | |||
buttonToUse = b; | |||
if (newTip != lastTip) | |||
if (buttonToUse != nullptr) | |||
{ | |||
lastTip = newTip; | |||
repaint(); | |||
buttonToUse->setSize (20, 20); | |||
buttonToUse->setCentrePosition (20, height + (propertyHeight / 2)); | |||
} | |||
pp->setBounds (40, height, width - 50, propertyHeight); | |||
resizeContentIfChoicePropertyComponent (pp); | |||
height += pp->getHeight() + 10; | |||
} | |||
height += 16; | |||
setBounds (x, y, width, jmax (height, getParentHeight())); | |||
return height; | |||
} | |||
static String findTip (Component* c) | |||
void paint (Graphics& g) override | |||
{ | |||
while (c != nullptr) | |||
{ | |||
if (TooltipClient* tc = dynamic_cast<TooltipClient*> (c)) | |||
{ | |||
const String tip (tc->getTooltip()); | |||
g.setColour (findColour (secondaryBackgroundColourId)); | |||
g.fillRect (getLocalBounds()); | |||
} | |||
if (tip.isNotEmpty()) | |||
return tip; | |||
} | |||
int getHeightMultiplier (PropertyComponent* pp) | |||
{ | |||
auto availableTextWidth = ProjucerLookAndFeel::getTextWidthForPropertyComponent (pp); | |||
c = c->getParentComponent(); | |||
} | |||
auto font = ProjucerLookAndFeel::getPropertyComponentFont(); | |||
auto nameWidth = font.getStringWidthFloat (pp->getName()); | |||
return {}; | |||
return static_cast<int> (nameWidth / availableTextWidth); | |||
} | |||
}; | |||
void resizeContentIfChoicePropertyComponent (PropertyComponent* pp) | |||
{ | |||
if (auto* choiceComp = dynamic_cast<ChoicePropertyComponent*> (pp)) | |||
{ | |||
auto* box = choiceComp->getChildComponent (0); | |||
auto bounds = box->getBounds(); | |||
box->setBounds (bounds.withSizeKeepingCentre (box->getWidth(), pp->getPreferredHeight())); | |||
} | |||
} | |||
OwnedArray<PropertyComponent> properties; | |||
OwnedArray<InfoButton> infoButtons; | |||
ContentViewHeader header; | |||
private: | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PropertyGroupComponent) | |||
}; | |||
//============================================================================== | |||
class ConfigTreeItemBase : public JucerTreeViewBase, | |||
@@ -156,15 +215,15 @@ public: | |||
ScopedPointer<Component> comp (content); | |||
if (ProjectContentComponent* pcc = getProjectContentComponent()) | |||
pcc->setEditorComponent (new PropertyPanelViewport (comp.release()), nullptr); | |||
pcc->setEditorComponent (comp.release(), nullptr); | |||
} | |||
void closeSettingsPage() | |||
{ | |||
if (ProjectContentComponent* pcc = getProjectContentComponent()) | |||
{ | |||
if (PropertyPanelViewport* ppv = dynamic_cast<PropertyPanelViewport*> (pcc->getEditorComponent())) | |||
if (ppv->viewport.getViewedComponent()->getComponentID() == getUniqueName()) | |||
if (auto* content = dynamic_cast<Viewport*> (pcc->getEditorComponent())) | |||
if (content->getViewedComponent()->getComponentID() == getUniqueName()) | |||
pcc->hideEditor(); | |||
} | |||
} | |||
@@ -195,155 +254,15 @@ public: | |||
static void updateSize (Component& comp, PropertyGroupComponent& group) | |||
{ | |||
const int width = jmax (550, comp.getParentWidth() - 20); | |||
const auto width = jmax (550, comp.getParentWidth() - 12); | |||
int y = 0; | |||
auto y = 0; | |||
y += group.updateSize (12, y, width - 12); | |||
comp.setSize (width, y); | |||
} | |||
private: | |||
//============================================================================== | |||
struct PropertyPanelViewport : public Component | |||
{ | |||
PropertyPanelViewport (Component* content) | |||
{ | |||
addAndMakeVisible (viewport); | |||
addAndMakeVisible (rolloverHelp); | |||
viewport.setViewedComponent (content, true); | |||
} | |||
void paint (Graphics& g) override | |||
{ | |||
ProjucerLookAndFeel::fillWithBackgroundTexture (*this, g); | |||
} | |||
void resized() override | |||
{ | |||
Rectangle<int> r (getLocalBounds()); | |||
rolloverHelp.setBounds (r.removeFromBottom (70).reduced (10, 0)); | |||
viewport.setBounds (r); | |||
} | |||
Viewport viewport; | |||
RolloverHelpComp rolloverHelp; | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PropertyPanelViewport) | |||
}; | |||
}; | |||
//============================================================================== | |||
class RootItem : public ConfigTreeItemBase | |||
{ | |||
public: | |||
RootItem (Project& p) | |||
: project (p), exportersTree (p.getExporters()) | |||
{ | |||
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(); } | |||
void setName (const String&) override {} | |||
bool isMissing() override { return false; } | |||
Icon getIcon() const override { return project.getMainGroup().getIcon().withContrastingColourTo (getBackgroundColour()); } | |||
void showDocument() override { showSettingsPage (new SettingsComp (project)); } | |||
bool canBeSelected() const override { return true; } | |||
bool mightContainSubItems() override { return project.getNumExporters() > 0; } | |||
String getUniqueName() const override { return "config_root"; } | |||
void addSubItems() override | |||
{ | |||
addSubItem (new EnabledModulesItem (project)); | |||
ProjucerApplication::getApp().addLiveBuildConfigItem (project, *this); | |||
int i = 0; | |||
for (Project::ExporterIterator exporter (project); exporter.next(); ++i) | |||
addSubItem (new ExporterItem (project, exporter.exporter.release(), i)); | |||
} | |||
void showPopupMenu() override | |||
{ | |||
if (ProjectContentComponent* pcc = getProjectContentComponent()) | |||
pcc->showNewExporterMenu(); | |||
} | |||
bool isInterestedInDragSource (const DragAndDropTarget::SourceDetails& dragSourceDetails) override | |||
{ | |||
return dragSourceDetails.description.toString().startsWith (getUniqueName()); | |||
} | |||
void itemDropped (const DragAndDropTarget::SourceDetails& dragSourceDetails, int insertIndex) override | |||
{ | |||
int oldIndex = dragSourceDetails.description.toString().getTrailingIntValue(); | |||
exportersTree.moveChild (oldIndex, jmax (0, insertIndex - 1), project.getUndoManagerFor (exportersTree)); | |||
} | |||
//============================================================================== | |||
void valueTreeChildAdded (ValueTree& parentTree, ValueTree&) override { refreshIfNeeded (parentTree); } | |||
void valueTreeChildRemoved (ValueTree& parentTree, ValueTree&, int) override { refreshIfNeeded (parentTree); } | |||
void valueTreeChildOrderChanged (ValueTree& parentTree, int, int) override { refreshIfNeeded (parentTree); } | |||
y = jmax (comp.getParentHeight(), y); | |||
void refreshIfNeeded (ValueTree& changedTree) | |||
{ | |||
if (changedTree == exportersTree) | |||
refreshSubItems(); | |||
comp.setSize (width, y); | |||
} | |||
private: | |||
Project& project; | |||
ValueTree exportersTree; | |||
//============================================================================== | |||
class SettingsComp : public Component, | |||
private ChangeListener | |||
{ | |||
public: | |||
SettingsComp (Project& p) : project (p) | |||
{ | |||
addAndMakeVisible (group); | |||
updatePropertyList(); | |||
project.addChangeListener (this); | |||
} | |||
~SettingsComp() | |||
{ | |||
project.removeChangeListener (this); | |||
} | |||
void parentSizeChanged() override | |||
{ | |||
updateSize (*this, group); | |||
} | |||
void updatePropertyList() | |||
{ | |||
PropertyListBuilder props; | |||
project.createPropertyEditors (props); | |||
group.setProperties (props); | |||
group.setName ("Project Settings"); | |||
lastProjectType = project.getProjectTypeValue().getValue(); | |||
parentSizeChanged(); | |||
} | |||
void changeListenerCallback (ChangeBroadcaster*) override | |||
{ | |||
if (lastProjectType != project.getProjectTypeValue().getValue()) | |||
updatePropertyList(); | |||
} | |||
private: | |||
Project& project; | |||
var lastProjectType; | |||
PropertyGroupComponent group; | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SettingsComp) | |||
}; | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (RootItem) | |||
}; |
@@ -27,26 +27,41 @@ class ExporterItem : public ConfigTreeItemBase | |||
public: | |||
ExporterItem (Project& p, ProjectExporter* e, int index) | |||
: project (p), exporter (e), configListTree (exporter->getConfigurations()), | |||
exporterIndex (index), icon (createIcon (exporter->getName())) | |||
exporterIndex (index) | |||
{ | |||
configListTree.addListener (this); | |||
} | |||
int getItemHeight() const override { return 22; } | |||
int getItemHeight() const override { return 25; } | |||
bool canBeSelected() const override { return true; } | |||
bool mightContainSubItems() override { return exporter->getNumConfigurations() > 0; } | |||
String getUniqueName() const override { return "exporter_" + String (exporterIndex); } | |||
String getRenamingName() const override { return getDisplayName(); } | |||
String getDisplayName() const override { return exporter->getName(); } | |||
void setName (const String&) override {} | |||
bool isMissing() override { return false; } | |||
Icon getIcon() const override { return Icon(); } | |||
void showDocument() override { showSettingsPage (new SettingsComp (exporter)); } | |||
bool isMissing() const override { return false; } | |||
void paintIcon (Graphics& g, Rectangle<int> area) override | |||
static Icon getIconForExporter (ProjectExporter* e) | |||
{ | |||
g.setColour (Colours::black); | |||
g.drawImage (icon, area.toFloat(), RectanglePlacement::centred); | |||
if (e != nullptr) | |||
{ | |||
if (e->isXcode()) return Icon (getIcons().xcode, Colours::transparentBlack); | |||
else if (e->isVisualStudio()) return Icon (getIcons().visualStudio, Colours::transparentBlack); | |||
else if (e->isAndroid()) return Icon (getIcons().android, Colours::transparentBlack); | |||
else if (e->isLinux()) return Icon (getIcons().linux, Colours::transparentBlack); | |||
} | |||
return Icon(); | |||
} | |||
Icon getIcon() const override | |||
{ | |||
return getIconForExporter (exporter).withColour (getContentColour (true)); | |||
} | |||
void showDocument() override | |||
{ | |||
showSettingsPage (new SettingsComp (exporter)); | |||
} | |||
void deleteItem() override | |||
@@ -76,6 +91,14 @@ public: | |||
launchPopupMenu (menu); | |||
} | |||
void showPlusMenu() override | |||
{ | |||
PopupMenu menu; | |||
menu.addItem (1, "Add a new configuration", exporter->supportsUserDefinedConfigurations()); | |||
launchPopupMenu (menu); | |||
} | |||
void handlePopupMenuResult (int resultCode) override | |||
{ | |||
if (resultCode == 2) | |||
@@ -128,40 +151,26 @@ 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 | |||
{ | |||
public: | |||
SettingsComp (ProjectExporter* exp) | |||
: group (exp->getName(), ExporterItem::getIconForExporter (exp)) | |||
{ | |||
addAndMakeVisible (group); | |||
PropertyListBuilder props; | |||
exp->createPropertyEditors (props); | |||
group.setProperties (props); | |||
group.setName ("Export target: " + exp->getName()); | |||
parentSizeChanged(); | |||
} | |||
void parentSizeChanged() override { updateSize (*this, group); } | |||
void resized() override { group.setBounds (getLocalBounds().withTrimmedLeft (12)); } | |||
private: | |||
PropertyGroupComponent group; | |||
@@ -183,18 +192,21 @@ public: | |||
configTree.addListener (this); | |||
} | |||
bool isMissing() override { return false; } | |||
bool isMissing() const override { return false; } | |||
bool canBeSelected() const override { return true; } | |||
bool mightContainSubItems() override { return false; } | |||
String getUniqueName() const override { return "config_" + config->getName(); } | |||
String getRenamingName() const override { return getDisplayName(); } | |||
String getDisplayName() const override { return config->getName(); } | |||
void setName (const String&) override {} | |||
Icon getIcon() const override { return Icon (getIcons().config, getContrastingColour (Colours::green, 0.5f)); } | |||
void showDocument() override { showSettingsPage (new SettingsComp (config)); } | |||
Icon getIcon() const override { return Icon (getIcons().config, getContentColour (true)); } | |||
void itemOpennessChanged (bool) override {} | |||
void showDocument() override | |||
{ | |||
showSettingsPage (new SettingsComp (config)); | |||
} | |||
void deleteItem() override | |||
{ | |||
if (AlertWindow::showOkCancelBox (AlertWindow::WarningIcon, "Delete Configuration", | |||
@@ -246,18 +258,20 @@ private: | |||
{ | |||
public: | |||
SettingsComp (ProjectExporter::BuildConfiguration* conf) | |||
: group (conf->exporter.getName() + " - " + conf->getName(), Icon (getIcons().config, Colours::transparentBlack)) | |||
{ | |||
addAndMakeVisible (group); | |||
PropertyListBuilder props; | |||
conf->createPropertyEditors (props); | |||
group.setProperties (props); | |||
group.setName (conf->exporter.getName() + " / " + conf->getName()); | |||
parentSizeChanged(); | |||
} | |||
void parentSizeChanged() override { updateSize (*this, group); } | |||
void resized() override { group.setBounds (getLocalBounds().withTrimmedLeft (12)); } | |||
private: | |||
PropertyGroupComponent group; | |||
@@ -36,22 +36,33 @@ public: | |||
String getDisplayName() const override { return moduleID; } | |||
String getRenamingName() const override { return getDisplayName(); } | |||
void setName (const String&) override {} | |||
bool isMissing() override { return hasMissingDependencies(); } | |||
void showDocument() override { showSettingsPage (new ModuleSettingsPanel (project, moduleID)); } | |||
bool isMissing() const override { return hasMissingDependencies(); } | |||
void showDocument() override | |||
{ | |||
showSettingsPage (new ModuleSettingsPanel (project, moduleID)); | |||
} | |||
void deleteItem() override { project.getModules().removeModule (moduleID); } | |||
Icon getIcon() const override | |||
{ | |||
auto iconColour = Colours::yellow; | |||
auto info = project.getModules().getModuleInfo (moduleID); | |||
if (info.isValid() && info.getVendor() == "juce") | |||
auto iconColour = getOwnerView()->findColour (isSelected() ? defaultHighlightedTextColourId | |||
: treeIconColourId); | |||
if (! isSelected()) | |||
{ | |||
if (info.getLicense() == "ISC") | |||
iconColour = Colours::lightblue; | |||
else if (info.getLicense() == "GPL/Commercial") | |||
iconColour = Colours::orange; | |||
auto info = project.getModules().getModuleInfo (moduleID); | |||
if (info.isValid() && info.getVendor() == "juce") | |||
{ | |||
if (info.getLicense() == "ISC") | |||
iconColour = Colours::lightblue; | |||
else if (info.getLicense() == "GPL/Commercial") | |||
iconColour = Colours::orange; | |||
} | |||
} | |||
return Icon (getIcons().jigsaw, getContrastingColour (iconColour, 0.5f)); | |||
return Icon (getIcons().singleModule, iconColour); | |||
} | |||
void showPopupMenu() override | |||
@@ -81,10 +92,11 @@ private: | |||
{ | |||
public: | |||
ModuleSettingsPanel (Project& p, const String& modID) | |||
: project (p), moduleID (modID) | |||
: group (p.getModules().getModuleInfo (modID).getID(), Icon (getIcons().singleModule, Colours::transparentBlack)), | |||
project (p), | |||
moduleID (modID) | |||
{ | |||
addAndMakeVisible (group); | |||
group.setName ("Module: " + moduleID); | |||
refresh(); | |||
} | |||
@@ -153,6 +165,8 @@ private: | |||
void parentSizeChanged() override { updateSize (*this, group); } | |||
void resized() override { group.setBounds (getLocalBounds().withTrimmedLeft (12)); } | |||
private: | |||
PropertyGroupComponent group; | |||
Project& project; | |||
@@ -182,28 +196,28 @@ private: | |||
void paint (Graphics& g) override | |||
{ | |||
g.setColour (Colours::white.withAlpha (0.4f)); | |||
g.fillRect (getLocalBounds().withTrimmedBottom (1)); | |||
AttributedString s; | |||
s.setJustification (Justification::topLeft); | |||
Font f (14.0f); | |||
auto bounds = getLocalBounds().reduced (10); | |||
bounds.removeFromTop (5); | |||
if (info.isValid()) | |||
{ | |||
s.append (info.getName() + "\n\n", f.boldened()); | |||
s.append ("Version: " + info.getVersion() | |||
+ "\nLicense: " + info.getLicense() + "\n", f.italicised()); | |||
s.append ("\n" + info.getDescription(), f); | |||
auto topSlice = bounds.removeFromTop (bounds.getHeight() / 3); | |||
bounds.removeFromTop (bounds.getHeight() / 6); | |||
auto bottomSlice = bounds; | |||
g.setColour (findColour (defaultTextColourId)); | |||
g.drawFittedText (info.getName(), topSlice.removeFromTop (topSlice.getHeight() / 3), Justification::centredLeft, 1); | |||
g.drawFittedText ("Version: " + info.getVersion(), topSlice.removeFromTop (topSlice.getHeight() / 2), Justification::centredLeft, 1); | |||
g.drawFittedText ("License: " + info.getLicense(), topSlice.removeFromTop (topSlice.getHeight()), Justification::centredLeft, 1); | |||
g.drawFittedText (info.getDescription(), bottomSlice, Justification::topLeft, 3, 1.0f); | |||
} | |||
else | |||
{ | |||
s.append ("Cannot find this module at the specified path!", f.boldened()); | |||
s.setColour (Colours::darkred); | |||
g.setColour (Colours::red); | |||
g.drawFittedText ("Cannot find this module at the specified path!", bounds, Justification::centred, 1); | |||
} | |||
s.draw (g, getLocalBounds().reduced (6, 5).toFloat()); | |||
} | |||
void valueChanged (Value&) override | |||
@@ -240,17 +254,12 @@ private: | |||
void paint (Graphics& g) override | |||
{ | |||
g.setColour (Colours::white.withAlpha (0.4f)); | |||
g.fillRect (0, 0, getWidth(), getHeight() - 1); | |||
String text ("This module has missing dependencies!\n\n" | |||
"To build correctly, it requires the following modules to be added:\n"); | |||
text << missingDependencies.joinIntoString (", "); | |||
AttributedString s; | |||
s.setJustification (Justification::topLeft); | |||
s.append (text, Font (13.0f), Colours::red.darker()); | |||
s.draw (g, getLocalBounds().reduced (4, 16).toFloat()); | |||
g.setColour (Colours::red); | |||
g.drawFittedText (text, getLocalBounds().reduced (4, 16), Justification::topLeft, 3); | |||
} | |||
void buttonClicked (Button*) override | |||
@@ -315,8 +324,8 @@ public: | |||
String getRenamingName() const override { return getDisplayName(); } | |||
String getDisplayName() const override { return "Modules"; } | |||
void setName (const String&) override {} | |||
bool isMissing() override { return false; } | |||
Icon getIcon() const override { return Icon (getIcons().graph, getContrastingColour (Colours::orange, 0.5f)); } | |||
bool isMissing() const override { return false; } | |||
Icon getIcon() const override { return Icon (getIcons().graph, getContentColour (true)); } | |||
void showDocument() override | |||
{ | |||
@@ -26,6 +26,131 @@ | |||
#include "../Project/jucer_Project.h" | |||
//============================================================================== | |||
struct ContentViewHeader : public Component | |||
{ | |||
ContentViewHeader (String headerName, Icon headerIcon) | |||
: name (headerName), icon (headerIcon) | |||
{ | |||
} | |||
void paint (Graphics& g) override | |||
{ | |||
g.fillAll (findColour (contentHeaderBackgroundColourId)); | |||
auto bounds = getLocalBounds().reduced (20, 0); | |||
icon.withColour (Colours::white).draw (g, bounds.toFloat().removeFromRight (30), false); | |||
g.setColour (Colours::white); | |||
g.setFont (Font (18.0f)); | |||
g.drawFittedText (name, bounds, Justification::centredLeft, 1); | |||
} | |||
String name; | |||
Icon icon; | |||
}; | |||
//============================================================================== | |||
class ListBoxHeader : public Component | |||
{ | |||
public: | |||
ListBoxHeader (Array<String> columnHeaders) | |||
{ | |||
for (auto s : columnHeaders) | |||
{ | |||
addAndMakeVisible (headers.add (new Label (s, s))); | |||
widths.add (1.0f / columnHeaders.size()); | |||
} | |||
setSize (200, 40); | |||
} | |||
ListBoxHeader (Array<String> columnHeaders, Array<float> columnWidths) | |||
{ | |||
jassert (columnHeaders.size() == columnWidths.size()); | |||
auto index = 0; | |||
for (auto s : columnHeaders) | |||
{ | |||
addAndMakeVisible (headers.add (new Label (s, s))); | |||
widths.add (columnWidths.getUnchecked (index++)); | |||
} | |||
recalculateWidths(); | |||
setSize (200, 40); | |||
} | |||
void resized() override | |||
{ | |||
auto bounds = getLocalBounds(); | |||
auto width = bounds.getWidth(); | |||
auto index = 0; | |||
for (auto h : headers) | |||
{ | |||
auto headerWidth = roundToInt (width * widths.getUnchecked (index)); | |||
h->setBounds (bounds.removeFromLeft (headerWidth)); | |||
++index; | |||
} | |||
} | |||
void setColumnHeaderWidth (int index, float proportionOfWidth) | |||
{ | |||
if (! (isPositiveAndBelow (index, headers.size()) && isPositiveAndNotGreaterThan (proportionOfWidth, 1.0f))) | |||
{ | |||
jassertfalse; | |||
return; | |||
} | |||
widths.set (index, proportionOfWidth); | |||
recalculateWidths (index); | |||
} | |||
int getColumnX (int index) | |||
{ | |||
auto prop = 0.0f; | |||
for (auto i = 0; i < index; ++i) | |||
prop += widths.getUnchecked (i); | |||
return roundToInt (prop * getWidth()); | |||
} | |||
float getProportionAtIndex (int index) | |||
{ | |||
jassert (isPositiveAndBelow (index, widths.size())); | |||
return widths.getUnchecked (index); | |||
} | |||
private: | |||
OwnedArray<Label> headers; | |||
Array<float> widths; | |||
void recalculateWidths (int indexToIgnore = -1) | |||
{ | |||
auto total = 0.0f; | |||
for (auto w : widths) | |||
total += w; | |||
if (total == 1.0f) | |||
return; | |||
auto diff = 1.0f - total; | |||
auto amount = diff / static_cast<float> (indexToIgnore == -1 ? widths.size() : widths.size() - 1); | |||
for (auto i = 0; i < widths.size(); ++i) | |||
{ | |||
if (i != indexToIgnore) | |||
{ | |||
auto val = widths.getUnchecked (i); | |||
widths.set (i, val + amount); | |||
} | |||
} | |||
} | |||
}; | |||
//============================================================================== | |||
class GroupInformationComponent : public Component, | |||
@@ -34,15 +159,20 @@ class GroupInformationComponent : public Component, | |||
{ | |||
public: | |||
GroupInformationComponent (const Project::Item& group) | |||
: item (group) | |||
: item (group), | |||
header (item.getName(), Icon (getIcons().openFolder, Colours::transparentBlack)) | |||
{ | |||
list.setHeaderComponent (new ListBoxHeader ( { "File", "Binary Resource", "Xcode Resource", "Compile" }, | |||
{ 0.4f, 0.2f, 0.2f, 0.2f } )); | |||
list.setModel (this); | |||
list.setColour (ListBox::backgroundColourId, Colours::transparentBlack); | |||
addAndMakeVisible (list); | |||
list.updateContent(); | |||
list.setRowHeight (20); | |||
list.setRowHeight (30); | |||
item.state.addListener (this); | |||
lookAndFeelChanged(); | |||
addAndMakeVisible (header); | |||
} | |||
~GroupInformationComponent() | |||
@@ -53,12 +183,21 @@ public: | |||
//============================================================================== | |||
void paint (Graphics& g) override | |||
{ | |||
ProjucerLookAndFeel::fillWithBackgroundTexture (*this, g); | |||
g.setColour (findColour (secondaryBackgroundColourId)); | |||
g.fillRect (getLocalBounds().reduced (12, 0)); | |||
} | |||
void resized() override | |||
{ | |||
list.setBounds (getLocalBounds().reduced (5, 4)); | |||
auto bounds = getLocalBounds().reduced (12, 0); | |||
header.setBounds (bounds.removeFromTop (40)); | |||
list.setBounds (bounds.reduced (10, 4)); | |||
} | |||
void parentSizeChanged() override | |||
{ | |||
setSize (jmax (550, getParentWidth()), getParentHeight()); | |||
} | |||
int getNumRows() override | |||
@@ -66,9 +205,10 @@ public: | |||
return item.getNumChildren(); | |||
} | |||
void paintListBoxItem (int /*rowNumber*/, Graphics& g, int width, int height, bool /*rowIsSelected*/) override | |||
void paintListBoxItem (int rowNumber, Graphics& g, int width, int height, bool /*rowIsSelected*/) override | |||
{ | |||
g.setColour (Colours::white.withAlpha (0.4f)); | |||
g.setColour (findColour (rowNumber % 2 == 0 ? widgetBackgroundColourId | |||
: secondaryWidgetBackgroundColourId)); | |||
g.fillRect (0, 0, width, height - 1); | |||
} | |||
@@ -84,7 +224,7 @@ public: | |||
|| dynamic_cast<FileOptionComponent*> (existing.get())->item != child) | |||
{ | |||
existing = nullptr; | |||
existing = new FileOptionComponent (child); | |||
existing = new FileOptionComponent (child, dynamic_cast<ListBoxHeader*> (list.getHeaderComponent())); | |||
} | |||
} | |||
@@ -101,6 +241,7 @@ public: | |||
private: | |||
Project::Item item; | |||
ListBox list; | |||
ContentViewHeader header; | |||
void itemChanged() | |||
{ | |||
@@ -112,11 +253,9 @@ private: | |||
class FileOptionComponent : public Component | |||
{ | |||
public: | |||
FileOptionComponent (const Project::Item& fileItem) | |||
FileOptionComponent (const Project::Item& fileItem, ListBoxHeader* listBoxHeader) | |||
: item (fileItem), | |||
compileButton ("Compile"), | |||
binaryResourceButton ("Binary Resource"), | |||
xcodeResourceButton ("Xcode Resource") | |||
header (listBoxHeader) | |||
{ | |||
if (item.isFile()) | |||
{ | |||
@@ -133,31 +272,43 @@ private: | |||
void paint (Graphics& g) override | |||
{ | |||
int x = getHeight() + 6; | |||
if (header != nullptr) | |||
{ | |||
auto textBounds = getLocalBounds().removeFromLeft (roundToInt (header->getProportionAtIndex (0) * getWidth())); | |||
auto iconBounds = textBounds.removeFromLeft (25); | |||
item.getIcon().withContrastingColourTo (Colours::grey) | |||
.draw (g, Rectangle<float> (3.0f, 2.0f, x - 6.0f, getHeight() - 4.0f), | |||
item.isIconCrossedOut()); | |||
if (item.isImageFile()) | |||
iconBounds.reduce (5, 5); | |||
g.setColour (Colours::black); | |||
g.setFont (getHeight() * 0.6f); | |||
item.getIcon().withColour (findColour (treeIconColourId)).draw (g, iconBounds.toFloat(), item.isIconCrossedOut()); | |||
const int x2 = compileButton.isVisible() ? compileButton.getX() - 4 | |||
: getWidth() - 4; | |||
g.setColour (findColour (widgetTextColourId)); | |||
g.drawText (item.getName(), x, 0, x2 - x, getHeight(), Justification::centredLeft, true); | |||
g.drawText (item.getName(), textBounds, Justification::centredLeft); | |||
} | |||
} | |||
void resized() override | |||
{ | |||
binaryResourceButton.setBounds (getWidth() - 110, 1, 110, getHeight() - 2); | |||
xcodeResourceButton.setBounds (binaryResourceButton.getX() - 110, 1, 110, getHeight() - 2); | |||
compileButton.setBounds (xcodeResourceButton.getX() - 70, 1, 70, getHeight() - 2); | |||
if (header != nullptr) | |||
{ | |||
auto bounds = getLocalBounds(); | |||
auto width = getWidth(); | |||
bounds.removeFromLeft (roundToInt (header->getProportionAtIndex (0) * width)); | |||
binaryResourceButton.setBounds (bounds.removeFromLeft (roundToInt (header->getProportionAtIndex (1) * width))); | |||
xcodeResourceButton.setBounds (bounds.removeFromLeft (roundToInt (header->getProportionAtIndex (2) * width))); | |||
compileButton.setBounds (bounds.removeFromLeft (roundToInt (header->getProportionAtIndex (3) * width))); | |||
} | |||
} | |||
Project::Item item; | |||
private: | |||
ListBoxHeader* header; | |||
ToggleButton compileButton, binaryResourceButton, xcodeResourceButton; | |||
}; | |||
@@ -0,0 +1,533 @@ | |||
/* | |||
============================================================================== | |||
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. | |||
============================================================================== | |||
*/ | |||
struct IconButton : public Button | |||
{ | |||
IconButton (String name, const Path* p) | |||
: Button (name), | |||
icon (p, Colours::transparentBlack) | |||
{ | |||
lookAndFeelChanged(); | |||
setTooltip (name); | |||
} | |||
void paintButton (Graphics& g, bool isMouseOverButton, bool isButtonDown) override | |||
{ | |||
auto alpha = 1.0f; | |||
if (! isEnabled()) | |||
{ | |||
isMouseOverButton = false; | |||
isButtonDown = false; | |||
alpha = 0.2f; | |||
} | |||
auto backgroundColour = isIDEButton ? Colours::white | |||
: isUserButton ? findColour (userButtonBackgroundColourId) | |||
: findColour (defaultButtonBackgroundColourId); | |||
backgroundColour = isButtonDown ? backgroundColour.darker (0.5f) | |||
: isMouseOverButton ? backgroundColour.darker (0.2f) | |||
: backgroundColour; | |||
auto bounds = getLocalBounds().toFloat(); | |||
if (isButtonDown) | |||
bounds.reduce (2, 2); | |||
Path ellipse; | |||
ellipse.addEllipse (bounds); | |||
g.reduceClipRegion(ellipse); | |||
g.setColour (backgroundColour.withAlpha (alpha)); | |||
g.fillAll(); | |||
if (iconImage != Image()) | |||
{ | |||
if (isIDEButton) | |||
bounds.reduce (7, 7); | |||
g.setOpacity (alpha); | |||
g.drawImage (iconImage, bounds, RectanglePlacement::fillDestination, false); | |||
} | |||
else | |||
{ | |||
icon.withColour (findColour (defaultIconColourId).withAlpha (alpha)).draw (g, bounds.reduced (2, 2), false); | |||
} | |||
} | |||
Icon icon; | |||
Image iconImage; | |||
bool isIDEButton = false; | |||
bool isUserButton = false; | |||
}; | |||
//============================================================================== | |||
class UserSettingsPopup : public Component | |||
#if ! JUCER_ENABLE_GPL_MODE | |||
, private Button::Listener, | |||
private LicenseController::StateChangedCallback | |||
#endif | |||
{ | |||
public: | |||
UserSettingsPopup (bool isShownInsideWebview) | |||
#if ! JUCER_ENABLE_GPL_MODE | |||
: isInsideWebview (isShownInsideWebview) | |||
#endif | |||
{ | |||
#if JUCER_ENABLE_GPL_MODE | |||
ignoreUnused (isShownInsideWebview); | |||
#endif | |||
auto standardFont = Font (12.0f); | |||
addAndMakeVisible (loggedInUsernameLabel = new Label ("Username Label")); | |||
loggedInUsernameLabel->setFont (standardFont); | |||
loggedInUsernameLabel->setJustificationType (Justification::centred); | |||
loggedInUsernameLabel->setMinimumHorizontalScale (0.75f); | |||
#if JUCER_ENABLE_GPL_MODE | |||
loggedInUsernameLabel->setText ("GPL Mode: Re-compile with JUCER_ENABLE_GPL_MODE=0 to enable login!", | |||
NotificationType::dontSendNotification); | |||
#else | |||
addAndMakeVisible (licenseTypeLabel = new Label ("License Type Label")); | |||
licenseTypeLabel->setFont (standardFont); | |||
licenseTypeLabel->setJustificationType (Justification::centred); | |||
licenseTypeLabel->setMinimumHorizontalScale (1.0f); | |||
addAndMakeVisible (logoutButton = new TextButton (isInsideWebview ? "Select different account..." : "Logout")); | |||
logoutButton->addListener (this); | |||
logoutButton->setColour (TextButton::buttonColourId, findColour (secondaryButtonBackgroundColourId)); | |||
if (! isInsideWebview) | |||
{ | |||
addAndMakeVisible (switchLicenseButton = new TextButton ("Switch License")); | |||
switchLicenseButton->addListener (this); | |||
} | |||
if (LicenseController* controller = ProjucerApplication::getApp().licenseController) | |||
licenseStateChanged (controller->getState()); | |||
#endif | |||
} | |||
void paint (Graphics& g) override | |||
{ | |||
g.fillAll (findColour (secondaryBackgroundColourId)); | |||
} | |||
void resized() override | |||
{ | |||
auto bounds = getLocalBounds().reduced (10, 20); | |||
#if JUCER_ENABLE_GPL_MODE | |||
loggedInUsernameLabel->setBounds (bounds); | |||
#else | |||
loggedInUsernameLabel->setBounds (bounds.removeFromTop (25)); | |||
if (hasLicenseType) | |||
{ | |||
bounds.removeFromTop (10); | |||
licenseTypeLabel->setBounds (bounds.removeFromTop (25)); | |||
} | |||
bounds.removeFromBottom (5); | |||
auto buttonArea = bounds.removeFromBottom (30); | |||
if (! isInsideWebview) | |||
switchLicenseButton->setBounds (buttonArea.removeFromRight (buttonArea.getWidth() / 2).reduced (2)); | |||
logoutButton->setBounds (buttonArea.reduced (2)); | |||
#endif | |||
} | |||
private: | |||
//============================================================================== | |||
#if ! JUCER_ENABLE_GPL_MODE | |||
void buttonClicked (Button* b) override | |||
{ | |||
if (b == logoutButton) | |||
{ | |||
dismissCalloutBox(); | |||
ProjucerApplication::getApp().doLogout(); | |||
} | |||
else if (b == switchLicenseButton) | |||
{ | |||
dismissCalloutBox(); | |||
if (LicenseController* controller = ProjucerApplication::getApp().licenseController) | |||
controller->chooseNewLicense(); | |||
} | |||
} | |||
void licenseStateChanged (const LicenseState& state) override | |||
{ | |||
hasLicenseType = (state.type != LicenseState::Type::noLicenseChosenYet); | |||
licenseTypeLabel->setVisible (hasLicenseType); | |||
loggedInUsernameLabel->setText (state.username, NotificationType::dontSendNotification); | |||
licenseTypeLabel->setText (LicenseState::licenseTypeToString (state.type), NotificationType::dontSendNotification); | |||
} | |||
void dismissCalloutBox() | |||
{ | |||
if (auto* parent = findParentComponentOfClass<CallOutBox>()) | |||
parent->dismiss(); | |||
} | |||
void lookAndFeelChanged() override | |||
{ | |||
if (logoutButton != nullptr) | |||
logoutButton->setColour (TextButton::buttonColourId, findColour (secondaryButtonBackgroundColourId)); | |||
} | |||
#endif | |||
//============================================================================== | |||
ScopedPointer<Label> loggedInUsernameLabel; | |||
#if ! JUCER_ENABLE_GPL_MODE | |||
ScopedPointer<Label> licenseTypeLabel; | |||
ScopedPointer<TextButton> logoutButton, switchLicenseButton; | |||
bool hasLicenseType = false; | |||
bool isInsideWebview; | |||
#endif | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (UserSettingsPopup) | |||
}; | |||
//============================================================================== | |||
class HeaderComponent : public Component, | |||
private Button::Listener, | |||
private ComboBox::Listener, | |||
private ValueTree::Listener, | |||
private ChangeListener | |||
{ | |||
public: | |||
HeaderComponent() | |||
: configLabel ("Config Label", "Selected exporter") | |||
{ | |||
addAndMakeVisible (configLabel); | |||
addAndMakeVisible (exporterBox); | |||
exporterBox.addListener (this); | |||
addAndMakeVisible (juceIcon = new ImageComponent ("icon")); | |||
juceIcon->setImage (ImageCache::getFromMemory (BinaryData::juce_icon_png, BinaryData::juce_icon_pngSize), | |||
RectanglePlacement::centred); | |||
projectNameLabel.setText (String(), dontSendNotification); | |||
addAndMakeVisible (projectNameLabel); | |||
initialiseButtons(); | |||
} | |||
~HeaderComponent() | |||
{ | |||
if (userSettingsWindow != nullptr) | |||
userSettingsWindow->dismiss(); | |||
} | |||
void resized() override | |||
{ | |||
auto bounds = getLocalBounds(); | |||
configLabel.setFont (Font (bounds.getHeight() / 3.0f)); | |||
//====================================================================== | |||
auto projectHeaderBounds = bounds.removeFromLeft (tabsWidth); | |||
juceIcon->setBounds (projectHeaderBounds.removeFromLeft (projectHeaderBounds.getHeight()).reduced (5, 5)); | |||
projectSettingsButton->setBounds (projectHeaderBounds.removeFromRight (projectHeaderBounds.getHeight()).reduced (2, 2)); | |||
projectNameLabel.setBounds (projectHeaderBounds); | |||
//====================================================================== | |||
bounds.removeFromLeft (33); | |||
continuousRebuildButton->setBounds (bounds.removeFromLeft (bounds.getHeight()).reduced (2, 2)); | |||
bounds.removeFromLeft (5); | |||
buildNowButton->setBounds (bounds.removeFromLeft (bounds.getHeight()).reduced (2, 2)); | |||
bounds.removeFromRight (5); | |||
userSettingsButton->setBounds (bounds.removeFromRight (bounds.getHeight()).reduced (2, 2)); | |||
auto exporterWidth = jmax (250, bounds.getWidth() / 2); | |||
auto spacing = bounds.getWidth() - exporterWidth; | |||
auto leftSpacing = jmax (20, spacing / 3); | |||
auto rightSpacing = jmax (40, 2 * (spacing / 3)); | |||
bounds.removeFromLeft (leftSpacing); | |||
bounds.removeFromRight (rightSpacing); | |||
saveAndOpenInIDEButton->setBounds (bounds.removeFromRight (bounds.getHeight()).reduced (2, 2)); | |||
bounds.removeFromRight (5); | |||
exporterSettingsButton->setBounds (bounds.removeFromRight (bounds.getHeight()).reduced (2, 2)); | |||
bounds.removeFromRight (10); | |||
exporterBox.setBounds (bounds.removeFromBottom (roundToInt (bounds.getHeight() / 1.8f))); | |||
configLabel.setBounds (bounds); | |||
} | |||
void paint (Graphics& g) override | |||
{ | |||
g.fillAll (findColour (backgroundColourId)); | |||
} | |||
void setCurrentProject (Project* p) | |||
{ | |||
project = p; | |||
exportersTree = project->getExporters(); | |||
exportersTree.addListener (this); | |||
updateExporters(); | |||
project->addChangeListener (this); | |||
updateName(); | |||
continuousRebuildButton->setEnabled (true); | |||
updateContinuousRebuildButtonIcon(); | |||
if (auto* pcc = findParentComponentOfClass<ProjectContentComponent>()) | |||
buildNowButton->setEnabled (! pcc->isContinuousRebuildEnabled() || ! pcc->isBuildEnabled()); | |||
} | |||
void updateExporters() | |||
{ | |||
auto selectedName = getSelectedExporterName(); | |||
exporterBox.clear(); | |||
int i = 0; | |||
for (Project::ExporterIterator exporter (*project); exporter.next(); ++i) | |||
{ | |||
exporterBox.addItem (exporter->getName(), i + 1); | |||
if (selectedName == exporter->getName()) | |||
exporterBox.setSelectedId (i + 1); | |||
} | |||
if (exporterBox.getSelectedItemIndex() == -1) | |||
exporterBox.setSelectedItemIndex (0); | |||
updateExporterButton(); | |||
} | |||
String getSelectedExporterName() | |||
{ | |||
return exporterBox.getItemText (exporterBox.getSelectedItemIndex()); | |||
} | |||
bool canCurrentExporterLaunchProject() | |||
{ | |||
for (Project::ExporterIterator exporter (*project); exporter.next();) | |||
if (exporter->getName() == getSelectedExporterName() && exporter->canLaunchProject()) | |||
return true; | |||
return false; | |||
} | |||
int getUserButtonWidth() { return userSettingsButton->getWidth(); } | |||
void sidebarTabsWidthChanged (int newWidth) | |||
{ | |||
tabsWidth = newWidth; | |||
resized(); | |||
} | |||
void showUserSettings() | |||
{ | |||
#if JUCER_ENABLE_GPL_MODE | |||
const int settingsPopupHeight = 75; | |||
#else | |||
const int settingsPopupHeight = 150; | |||
#endif | |||
auto* content = new UserSettingsPopup (false); | |||
content->setSize (200, settingsPopupHeight); | |||
userSettingsWindow = &CallOutBox::launchAsynchronously (content, userSettingsButton->getScreenBounds(), nullptr); | |||
} | |||
void lookAndFeelChanged() override | |||
{ | |||
if (userSettingsWindow != nullptr) | |||
userSettingsWindow->sendLookAndFeelChange(); | |||
} | |||
private: | |||
Project* project = nullptr; | |||
ValueTree exportersTree; | |||
Label configLabel, projectNameLabel; | |||
ComboBox exporterBox; | |||
ScopedPointer<ImageComponent> juceIcon; | |||
ScopedPointer<IconButton> projectSettingsButton, continuousRebuildButton, buildNowButton, | |||
exporterSettingsButton, saveAndOpenInIDEButton, userSettingsButton; | |||
SafePointer<CallOutBox> userSettingsWindow; | |||
int tabsWidth = 200; | |||
//========================================================================== | |||
void buttonClicked (Button* b) override | |||
{ | |||
auto* pcc = findParentComponentOfClass<ProjectContentComponent>(); | |||
if (b == projectSettingsButton) | |||
{ | |||
pcc->showProjectSettings(); | |||
} | |||
else if (b == continuousRebuildButton) | |||
{ | |||
if (! pcc->isBuildEnabled()) | |||
pcc->setBuildEnabled (true); | |||
auto newState = ! pcc->isContinuousRebuildEnabled(); | |||
pcc->setContinuousRebuildEnabled (newState); | |||
updateContinuousRebuildButtonIcon(); | |||
buildNowButton->setEnabled (! pcc->isContinuousRebuildEnabled() || ! pcc->isBuildEnabled()); | |||
} | |||
else if (b == buildNowButton) | |||
{ | |||
if (! pcc->isBuildEnabled()) | |||
pcc->setBuildEnabled (true); | |||
pcc->rebuildNow(); | |||
} | |||
else if (b == exporterSettingsButton) | |||
{ | |||
pcc->showExporterSettings (getSelectedExporterName()); | |||
} | |||
else if (b == saveAndOpenInIDEButton) | |||
{ | |||
pcc->openInSelectedIDE (true); | |||
} | |||
else if (b == userSettingsButton) | |||
{ | |||
showUserSettings(); | |||
} | |||
} | |||
void comboBoxChanged (ComboBox* c) override | |||
{ | |||
if (c == &exporterBox) | |||
updateExporterButton(); | |||
} | |||
void changeListenerCallback (ChangeBroadcaster* source) override | |||
{ | |||
if (source == project) | |||
updateName(); | |||
} | |||
void valueTreePropertyChanged (ValueTree&, const Identifier&) override {} | |||
void valueTreeParentChanged (ValueTree&) override {} | |||
void valueTreeChildAdded (ValueTree& parentTree, ValueTree&) override { updateIfNeeded (parentTree); } | |||
void valueTreeChildRemoved (ValueTree& parentTree, ValueTree&, int) override { updateIfNeeded (parentTree); } | |||
void valueTreeChildOrderChanged (ValueTree& parentTree, int, int) override { updateIfNeeded (parentTree); } | |||
void initialiseButtons() | |||
{ | |||
auto& icons = getIcons(); | |||
addAndMakeVisible (projectSettingsButton = new IconButton ("Project Settings", &icons.settings)); | |||
projectSettingsButton->addListener (this); | |||
addAndMakeVisible (continuousRebuildButton = new IconButton ("Continuous Rebuild", &icons.continuousBuildStart)); | |||
continuousRebuildButton->addListener (this); | |||
continuousRebuildButton->setEnabled (false); | |||
addAndMakeVisible (buildNowButton = new IconButton ("Build Now", &icons.buildNow)); | |||
buildNowButton->addListener (this); | |||
buildNowButton->setEnabled (false); | |||
addAndMakeVisible (exporterSettingsButton = new IconButton ("Exporter Settings", &icons.edit)); | |||
exporterSettingsButton->addListener (this); | |||
addAndMakeVisible (saveAndOpenInIDEButton = new IconButton ("Save and Open in IDE", nullptr)); | |||
saveAndOpenInIDEButton->addListener (this); | |||
saveAndOpenInIDEButton->isIDEButton = true; | |||
addAndMakeVisible (userSettingsButton = new IconButton ("User Settings", &icons.user)); | |||
userSettingsButton->addListener (this); | |||
userSettingsButton->isUserButton = true; | |||
updateExporterButton(); | |||
updateUserAvatar(); | |||
} | |||
void updateIfNeeded (ValueTree tree) | |||
{ | |||
if (tree == exportersTree) | |||
updateExporters(); | |||
} | |||
void updateName() | |||
{ | |||
projectNameLabel.setText (project->getDocumentTitle(), dontSendNotification); | |||
} | |||
void updateExporterButton() | |||
{ | |||
auto currentExporterName = getSelectedExporterName(); | |||
for (auto info : ProjectExporter::getExporterTypes()) | |||
{ | |||
if (info.name == currentExporterName) | |||
{ | |||
saveAndOpenInIDEButton->iconImage = info.getIcon(); | |||
saveAndOpenInIDEButton->repaint(); | |||
saveAndOpenInIDEButton->setEnabled (canCurrentExporterLaunchProject()); | |||
} | |||
} | |||
} | |||
void updateUserAvatar() | |||
{ | |||
if (LicenseController* controller = ProjucerApplication::getApp().licenseController) | |||
{ | |||
auto& state = controller->getState(); | |||
userSettingsButton->iconImage = state.avatar; | |||
userSettingsButton->repaint(); | |||
} | |||
} | |||
void updateContinuousRebuildButtonIcon() | |||
{ | |||
if (auto* pcc = findParentComponentOfClass<ProjectContentComponent>()) | |||
{ | |||
continuousRebuildButton->setEnabled (pcc->isBuildEnabled()); | |||
continuousRebuildButton->icon = Icon (pcc->isContinuousRebuildEnabled() ? &getIcons().continuousBuildStop | |||
: &getIcons().continuousBuildStart, Colours::transparentBlack); | |||
} | |||
} | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (HeaderComponent) | |||
}; |
@@ -0,0 +1,245 @@ | |||
/* | |||
============================================================================== | |||
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 LiveBuildTab : public Component, | |||
private ChangeListener, | |||
private Button::Listener | |||
{ | |||
public: | |||
LiveBuildTab (CompileEngineChildProcess* child, String lastErrorMessage) | |||
{ | |||
addAndMakeVisible (settingsButton = new IconButton ("Settings", &getIcons().settings)); | |||
settingsButton->addListener (this); | |||
if (child != nullptr) | |||
{ | |||
addAndMakeVisible (concertinaPanel); | |||
buildConcertina (child); | |||
isEnabled = true; | |||
} | |||
else | |||
{ | |||
isEnabled = false; | |||
errorMessage = getErrorMessage(); | |||
errorMessageLabel = new Label ("Error", errorMessage); | |||
errorMessageLabel->setJustificationType (Justification::centred); | |||
errorMessageLabel->setFont (Font (12.0f)); | |||
errorMessageLabel->setMinimumHorizontalScale (1.0f); | |||
addAndMakeVisible (errorMessageLabel); | |||
if (showDownloadButton) | |||
{ | |||
addAndMakeVisible (downloadButton = new TextButton ("Download")); | |||
downloadButton->addListener (this); | |||
} | |||
if (showEnableButton) | |||
{ | |||
auto buttonText = "Enable Now"; | |||
if (! lastErrorMessage.isEmpty()) | |||
{ | |||
errorMessageLabel->setText (lastErrorMessage, dontSendNotification); | |||
buttonText = "Re-enable"; | |||
} | |||
addAndMakeVisible (enableButton = new TextButton (buttonText)); | |||
enableButton->addListener (this); | |||
} | |||
} | |||
} | |||
void paint (Graphics& g) override | |||
{ | |||
g.fillAll (findColour (secondaryBackgroundColourId)); | |||
} | |||
void resized() override | |||
{ | |||
auto bounds = getLocalBounds(); | |||
auto bottomSlice = bounds.removeFromBottom (25); | |||
bottomSlice.removeFromRight (5); | |||
settingsButton->setBounds (bottomSlice.removeFromRight (25).reduced (2)); | |||
if (errorMessageLabel != nullptr) | |||
{ | |||
bounds.removeFromTop ((bounds.getHeight() / 2) - 40); | |||
errorMessageLabel->setBounds (bounds.removeFromTop (80)); | |||
if (downloadButton != nullptr) | |||
downloadButton->setBounds (bounds.removeFromTop (20).reduced (20, 0)); | |||
if (enableButton != nullptr) | |||
enableButton->setBounds (bounds.removeFromTop (20).reduced (20, 0)); | |||
} | |||
else | |||
{ | |||
concertinaPanel.setBounds (bounds); | |||
for (auto h : headers) | |||
if (h->getName() == "Activities") | |||
h->yPosition = getHeight() - CurrentActivitiesComp::getMaxPanelHeight() - 55; | |||
} | |||
} | |||
bool isEnabled; | |||
String errorMessage; | |||
Component::SafePointer<ProjucerAppClasses::ErrorListComp> errorListComp; | |||
private: | |||
OwnedArray<ConcertinaHeader> headers; | |||
ConcertinaPanel concertinaPanel; | |||
ScopedPointer<IconButton> settingsButton; | |||
ScopedPointer<TextButton> downloadButton, enableButton; | |||
ScopedPointer<Label> errorMessageLabel; | |||
bool showDownloadButton; | |||
bool showEnableButton; | |||
Rectangle<int> textBounds; | |||
//========================================================================== | |||
String getErrorMessage() | |||
{ | |||
showDownloadButton = false; | |||
showEnableButton = false; | |||
const auto osType = SystemStats::getOperatingSystemType(); | |||
const bool isMac = (osType & SystemStats::MacOSX) != 0; | |||
const bool isWin = (osType & SystemStats::Windows) != 0; | |||
const bool isLinux = (osType & SystemStats::Linux) != 0; | |||
if (! isMac && ! isWin && ! isLinux) | |||
return String ("Live-build features are not supported on your system.\n\n" | |||
"Please check supported platforms at www.juce.com!"); | |||
if (isLinux) | |||
return String ("Live-build features for Linux are under development.\n\n" | |||
"Please check for updates at www.juce.com!"); | |||
if (isMac) | |||
if (osType < SystemStats::MacOSX_10_9) | |||
return String ("Live-build features are available only on MacOSX 10.9 or higher."); | |||
if (isWin) | |||
if (! SystemStats::isOperatingSystem64Bit() || osType < SystemStats::Windows8_0) | |||
return String ("Live-build features are available only on 64-Bit Windows 8 or higher."); | |||
const auto& compileEngineDll = *CompileEngineDLL::getInstance(); | |||
const auto dllPresent = compileEngineDll.isLoaded(); | |||
if (! dllPresent) | |||
{ | |||
showDownloadButton = true; | |||
return String ("Download the live-build engine to get started"); | |||
} | |||
showEnableButton = true; | |||
return String ("Enable compilation to use the live-build engine"); | |||
} | |||
void buttonClicked (Button* b) override | |||
{ | |||
auto* pcc = findParentComponentOfClass<ProjectContentComponent>(); | |||
if (b == settingsButton) | |||
{ | |||
if (pcc != nullptr) | |||
pcc->showLiveBuildSettings(); | |||
} | |||
else if (b == downloadButton) | |||
{ | |||
if (DownloadCompileEngineThread::downloadAndInstall()) | |||
{ | |||
if (! CompileEngineDLL::getInstance()->tryLoadDll()) | |||
{ | |||
AlertWindow::showMessageBox(AlertWindow::WarningIcon, | |||
"Download and install", | |||
"Loading the live-build engine failed"); | |||
return; | |||
} | |||
if (pcc != nullptr) | |||
pcc->rebuildProjectTabs(); | |||
} | |||
} | |||
else if (b == enableButton) | |||
{ | |||
if (pcc != nullptr) | |||
pcc->setBuildEnabled (true); | |||
} | |||
} | |||
void buildConcertina (CompileEngineChildProcess* child) | |||
{ | |||
for (int i = concertinaPanel.getNumPanels() - 1; i >= 0 ; --i) | |||
concertinaPanel.removePanel (concertinaPanel.getPanel (i)); | |||
headers.clear(); | |||
errorListComp = new ProjucerAppClasses::ErrorListComp (child->errorList); | |||
auto* activities = new CurrentActivitiesComp (child->activityList); | |||
auto* comps = new ComponentListComp (*child); | |||
concertinaPanel.addPanel (-1, errorListComp, true); | |||
concertinaPanel.addPanel (-1, comps, true); | |||
concertinaPanel.addPanel (-1, activities, true); | |||
headers.add (new ConcertinaHeader ("Errors", getIcons().bug)); | |||
headers.add (new ConcertinaHeader ("Components", getIcons().modules)); | |||
headers.add (new ConcertinaHeader ("Activities", getIcons().buildTab)); | |||
for (int i = 0; i < concertinaPanel.getNumPanels(); ++i) | |||
{ | |||
auto* p = concertinaPanel.getPanel (i); | |||
auto* h = headers.getUnchecked (i); | |||
h->addChangeListener (this); | |||
h->yPosition = i * 30; | |||
concertinaPanel.setCustomPanelHeader (p, h, false); | |||
concertinaPanel.setPanelHeaderSize (p, 30); | |||
} | |||
concertinaPanel.setMaximumPanelSize (activities, CurrentActivitiesComp::getMaxPanelHeight()); | |||
concertinaPanel.setPanelSize (errorListComp, 200, false); | |||
concertinaPanel.setPanelSize (comps, 300, false); | |||
} | |||
void changeListenerCallback (ChangeBroadcaster* source) override | |||
{ | |||
if (auto* header = dynamic_cast<ConcertinaHeader*> (source)) | |||
{ | |||
auto index = headers.indexOf (header); | |||
concertinaPanel.expandPanelFully (concertinaPanel.getPanel (index), true); | |||
} | |||
} | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (LiveBuildTab) | |||
}; |
@@ -794,7 +794,7 @@ void EnabledModuleList::addModuleFromUserSelectedFile() | |||
{ | |||
static File lastLocation (findDefaultModulesFolder (project)); | |||
FileChooser fc ("Select a module to add...", lastLocation, String(), false); | |||
FileChooser fc ("Select a module to add...", lastLocation, String()); | |||
if (fc.browseForDirectory()) | |||
{ | |||
@@ -23,7 +23,7 @@ | |||
*/ | |||
class ModulesPanel : public Component, | |||
private TableListBoxModel, | |||
private ListBoxModel, | |||
private ValueTree::Listener, | |||
private Button::Listener | |||
{ | |||
@@ -31,20 +31,21 @@ public: | |||
ModulesPanel (Project& p) | |||
: project (p), | |||
modulesValueTree (p.getModules().state), | |||
header ("Modules", Icon (getIcons().modules, Colours::transparentBlack)), | |||
setCopyModeButton ("Set copy-mode for all modules..."), | |||
copyPathButton ("Set paths for all modules...") | |||
{ | |||
table.getHeader().addColumn ("Module", nameCol, 180, 100, 400, TableHeaderComponent::notSortable); | |||
table.getHeader().addColumn ("Version", versionCol, 100, 100, 100, TableHeaderComponent::notSortable); | |||
table.getHeader().addColumn ("Make Local Copy", copyCol, 100, 100, 100, TableHeaderComponent::notSortable); | |||
table.getHeader().addColumn ("Paths", pathCol, 250, 100, 600, TableHeaderComponent::notSortable); | |||
table.setModel (this); | |||
table.setColour (TableListBox::backgroundColourId, Colours::transparentBlack); | |||
addAndMakeVisible (table); | |||
table.updateContent(); | |||
table.setRowHeight (20); | |||
table.setMultipleSelectionEnabled (true); | |||
listHeader = new ListBoxHeader ( { "Module", "Version", "Make Local Copy", "Paths" }, | |||
{ 0.25f, 0.2f, 0.2f, 0.35f } ); | |||
list.setHeaderComponent (listHeader); | |||
list.setModel (this); | |||
list.setColour (ListBox::backgroundColourId, Colours::transparentBlack); | |||
addAndMakeVisible (list); | |||
list.updateContent(); | |||
list.setRowHeight (30); | |||
list.setMultipleSelectionEnabled (true); | |||
addAndMakeVisible (header); | |||
addAndMakeVisible (setCopyModeButton); | |||
addAndMakeVisible (copyPathButton); | |||
@@ -59,72 +60,80 @@ public: | |||
void paint (Graphics& g) override | |||
{ | |||
ProjucerLookAndFeel::fillWithBackgroundTexture (*this, g); | |||
g.setColour (findColour (secondaryBackgroundColourId)); | |||
g.fillRect (getLocalBounds().reduced (12, 0)); | |||
} | |||
void resized() override | |||
{ | |||
Rectangle<int> r (getLocalBounds().reduced (5, 4)); | |||
auto bounds = getLocalBounds().reduced (12, 0); | |||
table.setBounds (r.removeFromTop (table.getRowPosition (getNumRows() - 1, true).getBottom() + 20)); | |||
header.setBounds (bounds.removeFromTop (40)); | |||
Rectangle<int> buttonRow (r.removeFromTop (32).removeFromBottom (28)); | |||
setCopyModeButton.setBounds (buttonRow.removeFromLeft (jmin (260, r.getWidth() / 3))); | |||
bounds.reduce (10, 0); | |||
list.setBounds (bounds.removeFromTop (list.getRowPosition (getNumRows() - 1, true).getBottom() + 20)); | |||
auto buttonRow = bounds.removeFromTop (35); | |||
setCopyModeButton.setBounds (buttonRow.removeFromLeft (jmin (200, bounds.getWidth() / 3))); | |||
buttonRow.removeFromLeft (8); | |||
copyPathButton.setBounds (buttonRow.removeFromLeft (jmin (260, r.getWidth() / 3))); | |||
copyPathButton.setBounds (buttonRow.removeFromLeft (jmin (200, bounds.getWidth() / 3))); | |||
} | |||
int getNumRows() override | |||
void parentSizeChanged() override | |||
{ | |||
return project.getModules().getNumModules(); | |||
setSize (jmax (550, getParentWidth()), getParentHeight()); | |||
} | |||
void paintRowBackground (Graphics& g, int /*rowNumber*/, int width, int height, bool rowIsSelected) override | |||
int getNumRows() override | |||
{ | |||
g.setColour (rowIsSelected ? Colours::lightblue.withAlpha (0.4f) | |||
: Colours::white.withAlpha (0.4f)); | |||
g.fillRect (0, 0, width, height - 1); | |||
return project.getModules().getNumModules(); | |||
} | |||
void paintCell (Graphics& g, int rowNumber, int columnId, int width, int height, bool /*rowIsSelected*/) override | |||
void paintListBoxItem (int rowNumber, Graphics& g, int width, int height, bool rowIsSelected) override | |||
{ | |||
String text; | |||
const String moduleID (project.getModules().getModuleID (rowNumber)); | |||
ignoreUnused (height); | |||
if (columnId == nameCol) | |||
{ | |||
text = moduleID; | |||
} | |||
else if (columnId == versionCol) | |||
{ | |||
text = project.getModules().getModuleInfo (moduleID).getVersion(); | |||
auto bounds = Rectangle<int> (0, 0, width, height); | |||
if (text.isEmpty()) | |||
text = "?"; | |||
} | |||
else if (columnId == copyCol) | |||
{ | |||
text = project.getModules().shouldCopyModuleFilesLocally (moduleID).getValue() | |||
? "Yes" : "No"; | |||
} | |||
else if (columnId == pathCol) | |||
{ | |||
StringArray paths; | |||
g.setColour (rowIsSelected ? findColour (defaultHighlightColourId) : findColour (rowNumber % 2 == 0 ? widgetBackgroundColourId | |||
: secondaryWidgetBackgroundColourId)); | |||
g.fillRect (bounds.withTrimmedBottom (1)); | |||
for (Project::ExporterIterator exporter (project); exporter.next();) | |||
paths.addIfNotAlreadyThere (exporter->getPathForModuleString (moduleID).trim()); | |||
bounds.removeFromLeft (5); | |||
g.setColour (rowIsSelected ? findColour (defaultHighlightedTextColourId) : findColour (widgetTextColourId)); | |||
text = paths.joinIntoString (", "); | |||
} | |||
//====================================================================== | |||
const auto moduleID = project.getModules().getModuleID (rowNumber); | |||
g.drawFittedText (moduleID, bounds.removeFromLeft (roundToInt (listHeader->getProportionAtIndex (0) * width)), Justification::centredLeft, 1); | |||
//====================================================================== | |||
auto version = project.getModules().getModuleInfo (moduleID).getVersion(); | |||
if (version.isEmpty()) | |||
version = "?"; | |||
g.drawFittedText (version, bounds.removeFromLeft (roundToInt (listHeader->getProportionAtIndex (1) * width)), Justification::centredLeft, 1); | |||
//====================================================================== | |||
const auto copyLocally = project.getModules().shouldCopyModuleFilesLocally (moduleID).getValue() | |||
? "Yes" : "No"; | |||
g.drawFittedText (copyLocally, bounds.removeFromLeft (roundToInt (listHeader->getProportionAtIndex (2) * width)), Justification::centredLeft, 1); | |||
g.setColour (Colours::black); | |||
g.setFont (height * 0.65f); | |||
g.drawText (text, Rectangle<int> (width, height).reduced (4, 0), Justification::centredLeft, true); | |||
//====================================================================== | |||
StringArray paths; | |||
for (Project::ExporterIterator exporter (project); exporter.next();) | |||
paths.addIfNotAlreadyThere (exporter->getPathForModuleString (moduleID).trim()); | |||
const auto pathText = paths.joinIntoString (", "); | |||
g.drawFittedText (pathText, bounds.removeFromLeft (roundToInt (listHeader->getProportionAtIndex (3) * width)), Justification::centredLeft, 1); | |||
} | |||
void cellDoubleClicked (int rowNumber, int, const MouseEvent&) override | |||
void listBoxItemDoubleClicked (int row, const MouseEvent&) override | |||
{ | |||
const String moduleID (project.getModules().getModuleID (rowNumber)); | |||
const String moduleID (project.getModules().getModuleID (row)); | |||
if (moduleID.isNotEmpty()) | |||
if (ProjectContentComponent* pcc = findParentComponentOfClass<ProjectContentComponent>()) | |||
@@ -142,6 +151,12 @@ public: | |||
if (b == ©PathButton) showSetPathsMenu(); | |||
} | |||
void lookAndFeelChanged() override | |||
{ | |||
setCopyModeButton.setColour (TextButton::buttonColourId, findColour (secondaryButtonBackgroundColourId)); | |||
copyPathButton.setColour (TextButton::buttonColourId, findColour (defaultButtonBackgroundColourId)); | |||
} | |||
private: | |||
enum | |||
{ | |||
@@ -153,7 +168,9 @@ private: | |||
Project& project; | |||
ValueTree modulesValueTree; | |||
TableListBox table; | |||
ContentViewHeader header; | |||
ListBox list; | |||
ListBoxHeader* listHeader; | |||
TextButton setCopyModeButton, copyPathButton; | |||
std::map<String, var> modulePathClipboard; | |||
@@ -165,7 +182,7 @@ private: | |||
void itemChanged() | |||
{ | |||
table.updateContent(); | |||
list.updateContent(); | |||
resized(); | |||
repaint(); | |||
} | |||
@@ -192,13 +209,13 @@ private: | |||
}; | |||
auto& moduleList = project.getModules(); | |||
auto moduleToCopy = moduleList.getModuleID (table.getSelectedRow()); | |||
auto moduleToCopy = moduleList.getModuleID (list.getSelectedRow()); | |||
if (moduleToCopy.isNotEmpty()) | |||
{ | |||
PopupMenu m; | |||
m.addItem (copyPathsToAllModulesID, "Copy the paths from the module '" + moduleToCopy + "' to all other modules"); | |||
m.addItem (copyPathsID, "Copy paths from selected module", table.getNumSelectedRows() == 1); | |||
m.addItem (copyPathsID, "Copy paths from selected module", list.getNumSelectedRows() == 1); | |||
m.addItem (pastePathsID, "Paste paths to selected modules", ! modulePathClipboard.empty()); | |||
int res = m.showAt (©PathButton); | |||
@@ -225,9 +242,9 @@ private: | |||
} | |||
else if (res == pastePathsID) | |||
{ | |||
for (int selectionId = 0; selectionId < table.getNumSelectedRows(); ++selectionId) | |||
for (int selectionId = 0; selectionId < list.getNumSelectedRows(); ++selectionId) | |||
{ | |||
auto rowNumber = table.getSelectedRow (selectionId); | |||
auto rowNumber = list.getSelectedRow (selectionId); | |||
auto modID = moduleList.getModuleID (rowNumber); | |||
for (Project::ExporterIterator exporter (project); exporter.next();) | |||
@@ -235,7 +252,7 @@ private: | |||
} | |||
} | |||
table.repaint(); | |||
list.repaint(); | |||
} | |||
else | |||
{ | |||
@@ -1152,22 +1152,22 @@ bool Project::Item::addRelativeFile (const RelativePath& file, int insertIndex, | |||
return false; | |||
} | |||
Icon Project::Item::getIcon() const | |||
Icon Project::Item::getIcon (bool isOpen) const | |||
{ | |||
const Icons& icons = getIcons(); | |||
if (isFile()) | |||
{ | |||
if (isImageFile()) | |||
return Icon (icons.imageDoc, Colours::blue); | |||
return Icon (icons.imageDoc, Colours::transparentBlack); | |||
return Icon (icons.document, Colours::yellow); | |||
return Icon (icons.file, Colours::transparentBlack); | |||
} | |||
if (isMainGroup()) | |||
return Icon (icons.juceLogo, Colours::orange); | |||
return Icon (icons.folder, Colours::darkgrey); | |||
return Icon (isOpen ? icons.openFolder : icons.closedFolder, Colours::transparentBlack); | |||
} | |||
bool Project::Item::isIconCrossedOut() const | |||
@@ -255,7 +255,7 @@ public: | |||
UndoManager* getUndoManager() const { return project.getUndoManagerFor (state); } | |||
Icon getIcon() const; | |||
Icon getIcon (bool isOpen = false) const; | |||
bool isIconCrossedOut() const; | |||
Project& project; | |||
@@ -28,7 +28,9 @@ | |||
#include "../Application/jucer_OpenDocumentManager.h" | |||
class CompileEngineChildProcess; | |||
class ProjectTab; | |||
class LiveBuildTab; | |||
class HeaderComponent; | |||
//============================================================================== | |||
class ProjectContentComponent : public Component, | |||
@@ -56,15 +58,15 @@ public: | |||
bool showDocument (OpenDocumentManager::Document*, bool grabFocus); | |||
void hideDocument (OpenDocumentManager::Document*); | |||
OpenDocumentManager::Document* getCurrentDocument() const { return currentDocument; } | |||
OpenDocumentManager::Document* getCurrentDocument() const { return currentDocument; } | |||
void closeDocument(); | |||
void saveDocument(); | |||
void saveAs(); | |||
void hideEditor(); | |||
bool setEditorComponent (Component* editor, OpenDocumentManager::Document* doc); | |||
Component* getEditorComponent() const { return contentView; } | |||
Component& getTabsComponent() { return treeViewTabs; } | |||
Component* getEditorComponent() const { return contentView; } | |||
Component& getSidebarComponent() { return sidebarTabs; } | |||
bool goToPreviousFile(); | |||
bool goToNextFile(); | |||
@@ -73,21 +75,25 @@ public: | |||
bool saveProject(); | |||
void closeProject(); | |||
void openInIDE (bool saveFirst); | |||
void openInIDE (int exporterIndex, bool saveFirst); | |||
void openInSelectedIDE (bool saveFirst); | |||
void showNewExporterMenu(); | |||
void showFilesTab(); | |||
void showConfigTab(); | |||
void showBuildTab(); | |||
void showProjectTab() { sidebarTabs.setCurrentTabIndex (0); } | |||
void showBuildTab() { sidebarTabs.setCurrentTabIndex (1); } | |||
void showFilesPanel() { showProjectPanel (0); } | |||
void showModulesPanel() { showProjectPanel (1); } | |||
void showExportersPanel() { showProjectPanel (2); } | |||
void showProjectSettings(); | |||
void showModules(); | |||
void showCurrentExporterSettings(); | |||
void showExporterSettings (const String& exporterName); | |||
void showModule (const String& moduleID); | |||
void showLiveBuildSettings(); | |||
void showUserSettings(); | |||
void deleteSelectedTreeItems(); | |||
void updateMainWindowTitle(); | |||
void updateMissingFileStatuses(); | |||
void createProjectTabs(); | |||
void deleteProjectTabs(); | |||
@@ -121,7 +127,6 @@ public: | |||
bool perform (const InvocationInfo&) override; | |||
void paint (Graphics&) override; | |||
void paintOverChildren (Graphics&) override; | |||
void resized() override; | |||
void childBoundsChanged (Component*) override; | |||
void lookAndFeelChanged() override; | |||
@@ -129,21 +134,26 @@ public: | |||
String lastCrashMessage; | |||
private: | |||
friend HeaderComponent; | |||
//============================================================================== | |||
Project* project; | |||
OpenDocumentManager::Document* currentDocument; | |||
RecentDocumentList recentDocumentList; | |||
ScopedPointer<Component> logo, translationTool, contentView; | |||
ScopedPointer<Component> logo, translationTool, contentView, header; | |||
TabbedComponent treeViewTabs; | |||
TabbedComponent sidebarTabs; | |||
ScopedPointer<ResizableEdgeComponent> resizerBar; | |||
ComponentBoundsConstrainer sidebarSizeConstrainer; | |||
ComponentBoundsConstrainer treeSizeConstrainer; | |||
BubbleMessageComponent bubbleMessage; | |||
ReferenceCountedObjectPtr<CompileEngineChildProcess> childProcess; | |||
bool isForeground = false; | |||
ScopedPointer<Label> fileNameLabel; | |||
int lastViewedTab = 0; | |||
//============================================================================== | |||
bool documentAboutToClose (OpenDocumentManager::Document*) override; | |||
void changeListenerCallback (ChangeBroadcaster*) override; | |||
@@ -152,21 +162,22 @@ private: | |||
void globalFocusChanged (Component*) override; | |||
void timerCallback() override; | |||
Component* createBuildTab (CompileEngineChildProcess*); | |||
Component* createDisabledBuildTabSubscribe (String textPrefix, bool loggedIn, bool dllPresent); | |||
Component* createDisabledBuildTabInfoOnly (const char* messsage); | |||
bool isContinuousRebuildEnabled(); | |||
void setContinuousRebuildEnabled (bool b); | |||
void rebuildNow(); | |||
void handleCrash (const String& message); | |||
void updateWarningState(); | |||
void launchApp(); | |||
void killApp(); | |||
bool isBuildTabSuitableForLoggedInUser() const; | |||
bool isBuildTabLoggedInWithoutLicense() const; | |||
ReferenceCountedObjectPtr<CompileEngineChildProcess> getChildProcess(); | |||
//============================================================================== | |||
void showProjectPanel (const int index); | |||
ProjectTab* getProjectTab(); | |||
LiveBuildTab* getLiveBuildTab(); | |||
bool canSelectedProjectBeLaunch(); | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ProjectContentComponent) | |||
}; |
@@ -0,0 +1,458 @@ | |||
/* | |||
============================================================================== | |||
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. | |||
============================================================================== | |||
*/ | |||
#include "../jucer_Headers.h" | |||
#include "jucer_TreeItemTypes.h" | |||
//============================================================================== | |||
class ConcertinaHeader : public Component, | |||
public ChangeBroadcaster | |||
{ | |||
public: | |||
ConcertinaHeader (String n, Path p) | |||
: Component (n), name (n), iconPath (p) | |||
{ | |||
panelIcon = Icon (iconPath, Colours::white); | |||
nameLabel.setText (name, dontSendNotification); | |||
nameLabel.setJustificationType (Justification::centredLeft); | |||
nameLabel.setInterceptsMouseClicks (false, false); | |||
nameLabel.setColour (Label::textColourId, Colours::white); | |||
addAndMakeVisible (nameLabel); | |||
} | |||
void resized() override | |||
{ | |||
auto b = getLocalBounds().toFloat(); | |||
iconBounds = b.removeFromLeft (b.getHeight()).reduced (7, 7); | |||
arrowBounds = b.removeFromRight (b.getHeight()); | |||
nameLabel.setBounds (b.toNearestInt()); | |||
} | |||
void paint (Graphics& g) override | |||
{ | |||
g.setColour (findColour (defaultButtonBackgroundColourId)); | |||
g.fillRoundedRectangle (getLocalBounds().reduced (2, 3).toFloat(), 2.0f); | |||
g.setColour (Colours::white); | |||
g.fillPath (arrowPath = ProjucerLookAndFeel::getArrowPath (arrowBounds, | |||
getParentComponent()->getBoundsInParent().getY() == yPosition ? 2 : 0, | |||
true, Justification::centred)); | |||
panelIcon.draw (g, iconBounds.toFloat(), false); | |||
} | |||
void mouseUp (const MouseEvent& e) override | |||
{ | |||
if (arrowPath.getBounds().expanded (3).contains (e.getPosition().toFloat())) | |||
sendChangeMessage(); | |||
} | |||
int direction = 0; | |||
int yPosition = 0; | |||
private: | |||
String name; | |||
Label nameLabel; | |||
Path iconPath; | |||
Icon panelIcon; | |||
Rectangle<float> arrowBounds, iconBounds; | |||
Path arrowPath; | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ConcertinaHeader) | |||
}; | |||
//============================================================================== | |||
class ExportersTreeRoot : public JucerTreeViewBase, | |||
private ValueTree::Listener | |||
{ | |||
public: | |||
ExportersTreeRoot (Project& p) | |||
: project (p), | |||
exportersTree (project.getExporters()) | |||
{ | |||
exportersTree.addListener (this); | |||
} | |||
bool isRoot() const override { return true; } | |||
bool canBeSelected() const override { return true; } | |||
bool isMissing() const override { return false; } | |||
bool mightContainSubItems() override { return project.getNumExporters() > 0; } | |||
String getUniqueName() const override { return "exporters"; } | |||
String getRenamingName() const override { return getDisplayName(); } | |||
String getDisplayName() const override { return "Exporters"; } | |||
void setName (const String&) override {} | |||
Icon getIcon() const override { return project.getMainGroup().getIcon (isOpen()).withColour (getContentColour (true)); } | |||
void showPopupMenu() override | |||
{ | |||
if (auto* pcc = getProjectContentComponent()) | |||
pcc->showNewExporterMenu(); | |||
} | |||
void addSubItems() override | |||
{ | |||
int i = 0; | |||
for (Project::ExporterIterator exporter (project); exporter.next(); ++i) | |||
addSubItem (new ConfigTreeItemTypes::ExporterItem (project, exporter.exporter.release(), i)); | |||
} | |||
bool isInterestedInDragSource (const DragAndDropTarget::SourceDetails& dragSourceDetails) override | |||
{ | |||
return dragSourceDetails.description.toString().startsWith (getUniqueName()); | |||
} | |||
void itemDropped (const DragAndDropTarget::SourceDetails& dragSourceDetails, int insertIndex) override | |||
{ | |||
int oldIndex = dragSourceDetails.description.toString().getTrailingIntValue(); | |||
exportersTree.moveChild (oldIndex, jmax (0, insertIndex), project.getUndoManagerFor (exportersTree)); | |||
} | |||
void itemOpennessChanged (bool isNowOpen) override | |||
{ | |||
if (isNowOpen) | |||
refreshSubItems(); | |||
} | |||
void removeExporter (int index) | |||
{ | |||
if (auto* exporter = dynamic_cast<ConfigTreeItemTypes::ExporterItem*> (getSubItem (index))) | |||
exporter->deleteItem(); | |||
} | |||
private: | |||
Project& project; | |||
ValueTree exportersTree; | |||
//========================================================================== | |||
void valueTreePropertyChanged (ValueTree&, const Identifier&) override {} | |||
void valueTreeParentChanged (ValueTree&) override {} | |||
void valueTreeChildAdded (ValueTree& parentTree, ValueTree&) override { refreshIfNeeded (parentTree); } | |||
void valueTreeChildRemoved (ValueTree& parentTree, ValueTree&, int) override { refreshIfNeeded (parentTree); } | |||
void valueTreeChildOrderChanged (ValueTree& parentTree, int, int) override { refreshIfNeeded (parentTree); } | |||
void refreshIfNeeded (ValueTree& changedTree) | |||
{ | |||
if (changedTree == exportersTree) | |||
refreshSubItems(); | |||
} | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ExportersTreeRoot) | |||
}; | |||
struct FileTreePanel : public TreePanelBase | |||
{ | |||
FileTreePanel (Project& p) | |||
: TreePanelBase (&p, "fileTreeState") | |||
{ | |||
tree.setMultiSelectEnabled (true); | |||
setRoot (new FileTreeItemTypes::GroupItem (p.getMainGroup())); | |||
tree.setRootItemVisible (false); | |||
} | |||
void updateMissingFileStatuses() | |||
{ | |||
if (auto* p = dynamic_cast<FileTreeItemTypes::ProjectTreeItemBase*> (rootItem.get())) | |||
p->checkFileStatus(); | |||
} | |||
}; | |||
struct ModuleTreePanel : public TreePanelBase | |||
{ | |||
ModuleTreePanel (Project& p) | |||
: TreePanelBase (&p, "moduleTreeState") | |||
{ | |||
tree.setMultiSelectEnabled (false); | |||
setRoot (new ConfigTreeItemTypes::EnabledModulesItem (p)); | |||
tree.setRootItemVisible (false); | |||
} | |||
}; | |||
struct ExportersTreePanel : public TreePanelBase | |||
{ | |||
ExportersTreePanel (Project& p) | |||
: TreePanelBase (&p, "exportersTreeState") | |||
{ | |||
tree.setMultiSelectEnabled (false); | |||
setRoot (new ExportersTreeRoot (p)); | |||
tree.setRootItemVisible (false); | |||
} | |||
void deleteSelectedItems() override | |||
{ | |||
for (int i = rootItem->getNumSubItems() - 1; i >= 0; --i) | |||
if (rootItem->getSubItem (i)->isSelected()) | |||
if (auto* root = dynamic_cast<ExportersTreeRoot*> (rootItem.get())) | |||
root->removeExporter (i); | |||
} | |||
}; | |||
//============================================================================== | |||
class ConcertinaTreeComponent : public Component, | |||
private Button::Listener | |||
{ | |||
public: | |||
ConcertinaTreeComponent (TreePanelBase* tree, bool showSettings = false) | |||
: treeToDisplay (tree), | |||
showSettingsButton (showSettings) | |||
{ | |||
addAndMakeVisible (popupMenuButton = new IconButton ("Add", &getIcons().plus)); | |||
popupMenuButton->addListener (this); | |||
if (showSettingsButton) | |||
{ | |||
addAndMakeVisible (settingsButton = new IconButton ("Settings", &getIcons().settings)); | |||
settingsButton->addListener (this); | |||
} | |||
addAndMakeVisible (treeToDisplay); | |||
} | |||
~ConcertinaTreeComponent() | |||
{ | |||
treeToDisplay = nullptr; | |||
popupMenuButton = nullptr; | |||
} | |||
void resized() override | |||
{ | |||
auto bounds = getLocalBounds(); | |||
auto bottomSlice = bounds.removeFromBottom (25); | |||
bottomSlice.removeFromRight (5); | |||
popupMenuButton->setBounds (bottomSlice.removeFromRight (25).reduced (2)); | |||
if (showSettingsButton) | |||
settingsButton->setBounds (bottomSlice.removeFromRight(25).reduced (2)); | |||
treeToDisplay->setBounds (bounds); | |||
} | |||
TreePanelBase* getTree() const noexcept { return treeToDisplay.get(); } | |||
private: | |||
ScopedPointer<TreePanelBase> treeToDisplay; | |||
ScopedPointer<IconButton> popupMenuButton, settingsButton; | |||
bool showSettingsButton; | |||
void buttonClicked (Button* b) override | |||
{ | |||
if (b == popupMenuButton) | |||
{ | |||
auto numSelected = treeToDisplay->tree.getNumSelectedItems(); | |||
if (numSelected > 1) | |||
return; | |||
if (numSelected == 0) | |||
{ | |||
if (auto* root = dynamic_cast<JucerTreeViewBase*> (treeToDisplay->tree.getRootItem())) | |||
root->showPopupMenu(); | |||
} | |||
else | |||
{ | |||
auto* selectedItem = treeToDisplay->tree.getSelectedItem (0); | |||
if (auto* fileItem = dynamic_cast<FileTreeItemTypes::ProjectTreeItemBase*> (selectedItem)) | |||
fileItem->showPlusMenu(); | |||
else if (auto* exporterItem = dynamic_cast<ConfigTreeItemTypes::ExporterItem*> (selectedItem)) | |||
exporterItem->showPlusMenu(); | |||
} | |||
} | |||
else if (b == settingsButton) | |||
{ | |||
if (auto* root = dynamic_cast<JucerTreeViewBase*> (treeToDisplay->tree.getRootItem())) | |||
{ | |||
treeToDisplay->tree.clearSelectedItems(); | |||
root->showDocument(); | |||
} | |||
} | |||
} | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ConcertinaTreeComponent) | |||
}; | |||
//============================================================================== | |||
class ProjectTab : public Component, | |||
private ChangeListener | |||
{ | |||
public: | |||
ProjectTab (Project* p) | |||
: project (p) | |||
{ | |||
addAndMakeVisible (concertinaPanel); | |||
buildConcertina(); | |||
} | |||
~ProjectTab() | |||
{ | |||
getFileTreePanel()->saveOpenness(); | |||
getModuleTreePanel()->saveOpenness(); | |||
getExportersTreePanel()->saveOpenness(); | |||
} | |||
void paint (Graphics& g) override | |||
{ | |||
g.fillAll (findColour (secondaryBackgroundColourId)); | |||
} | |||
void resized() override | |||
{ | |||
concertinaPanel.setBounds (getLocalBounds()); | |||
} | |||
TreePanelBase* getTreeWithSelectedItems() | |||
{ | |||
for (int i = concertinaPanel.getNumPanels() - 1; i >= 0; --i) | |||
{ | |||
if (auto* treeComponent = dynamic_cast<ConcertinaTreeComponent*> (concertinaPanel.getPanel (i))) | |||
{ | |||
if (auto* base = treeComponent->getTree()) | |||
if (base->tree.getNumSelectedItems() != 0) | |||
return base; | |||
} | |||
} | |||
return nullptr; | |||
} | |||
FileTreePanel* getFileTreePanel() | |||
{ | |||
if (auto* panel = dynamic_cast<ConcertinaTreeComponent*> (concertinaPanel.getPanel (0))) | |||
return dynamic_cast<FileTreePanel*> (panel->getTree()); | |||
return nullptr; | |||
} | |||
ModuleTreePanel* getModuleTreePanel() | |||
{ | |||
if (auto* panel = dynamic_cast<ConcertinaTreeComponent*> (concertinaPanel.getPanel (1))) | |||
return dynamic_cast<ModuleTreePanel*> (panel->getTree()); | |||
return nullptr; | |||
} | |||
ExportersTreePanel* getExportersTreePanel() | |||
{ | |||
if (auto* panel = dynamic_cast<ConcertinaTreeComponent*> (concertinaPanel.getPanel (2))) | |||
return dynamic_cast<ExportersTreePanel*> (panel->getTree()); | |||
return nullptr; | |||
} | |||
void showPanel (int panelIndex) | |||
{ | |||
jassert (isPositiveAndBelow (panelIndex, concertinaPanel.getNumPanels())); | |||
concertinaPanel.expandPanelFully (concertinaPanel.getPanel (panelIndex), true); | |||
} | |||
void setPanelHeightProportion (int panelIndex, float prop) | |||
{ | |||
jassert (isPositiveAndBelow (panelIndex, concertinaPanel.getNumPanels())); | |||
concertinaPanel.setPanelSize (concertinaPanel.getPanel (panelIndex), | |||
roundToInt (prop * (concertinaPanel.getHeight() - 90)), false); | |||
} | |||
float getPanelHeightProportion (int panelIndex) | |||
{ | |||
jassert (isPositiveAndBelow (panelIndex, concertinaPanel.getNumPanels())); | |||
return ((float) (concertinaPanel.getPanel (panelIndex)->getHeight()) / (concertinaPanel.getHeight() - 90)); | |||
} | |||
private: | |||
ConcertinaPanel concertinaPanel; | |||
OwnedArray<ConcertinaHeader> headers; | |||
Project* project = nullptr; | |||
//============================================================================== | |||
void changeListenerCallback (ChangeBroadcaster* source) override | |||
{ | |||
if (auto* header = dynamic_cast<ConcertinaHeader*> (source)) | |||
{ | |||
auto index = headers.indexOf (header); | |||
concertinaPanel.expandPanelFully (concertinaPanel.getPanel (index), true); | |||
} | |||
} | |||
void buildConcertina() | |||
{ | |||
for (int i = concertinaPanel.getNumPanels() - 1; i >= 0 ; --i) | |||
concertinaPanel.removePanel (concertinaPanel.getPanel (i)); | |||
headers.clear(); | |||
if (project != nullptr) | |||
{ | |||
concertinaPanel.addPanel (0, new ConcertinaTreeComponent (new FileTreePanel (*project)), true); | |||
concertinaPanel.addPanel (1, new ConcertinaTreeComponent (new ModuleTreePanel (*project), true), true); | |||
concertinaPanel.addPanel (2, new ConcertinaTreeComponent (new ExportersTreePanel (*project)), true); | |||
} | |||
headers.add (new ConcertinaHeader ("File explorer", getIcons().fileExplorer)); | |||
headers.add (new ConcertinaHeader ("Modules", getIcons().modules)); | |||
headers.add (new ConcertinaHeader ("Exporters", getIcons().exporter)); | |||
for (int i = 0; i < concertinaPanel.getNumPanels(); ++i) | |||
{ | |||
auto* p = concertinaPanel.getPanel (i); | |||
auto* h = headers.getUnchecked (i); | |||
p->addMouseListener (this, true); | |||
h->addChangeListener (this); | |||
h->yPosition = i * 30; | |||
concertinaPanel.setCustomPanelHeader (p, h, false); | |||
concertinaPanel.setPanelHeaderSize (p, 30); | |||
} | |||
} | |||
void mouseDown (const MouseEvent& e) override | |||
{ | |||
for (int i = concertinaPanel.getNumPanels() - 1; i >= 0; --i) | |||
{ | |||
auto* p = concertinaPanel.getPanel (i); | |||
if (! (p->isParentOf (e.eventComponent))) | |||
{ | |||
auto* base = dynamic_cast<TreePanelBase*> (p); | |||
if (base == nullptr) | |||
base = dynamic_cast<ConcertinaTreeComponent*> (p)->getTree(); | |||
if (base != nullptr) | |||
base->tree.clearSelectedItems(); | |||
} | |||
} | |||
} | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ProjectTab) | |||
}; |
@@ -53,7 +53,7 @@ public: | |||
item.getNameValue() = newName; | |||
} | |||
bool isMissing() override { return isFileMissing; } | |||
bool isMissing() const override { return isFileMissing; } | |||
virtual File getFile() const { return item.getFile(); } | |||
void deleteItem() override { item.removeItemFromProject(); } | |||
@@ -67,7 +67,7 @@ public: | |||
for (int i = 0; i < numSelected; ++i) | |||
{ | |||
if (const ProjectTreeItemBase* const p = dynamic_cast<ProjectTreeItemBase*> (tree->getSelectedItem (i))) | |||
if (auto* p = dynamic_cast<ProjectTreeItemBase*> (tree->getSelectedItem (i))) | |||
{ | |||
itemsToRemove.add (new Project::Item (p->item)); | |||
@@ -140,7 +140,7 @@ public: | |||
virtual void browseToAddExistingFiles() | |||
{ | |||
const File location (item.isGroup() ? item.determineGroupFolder() : getFile()); | |||
FileChooser fc ("Add Files to Jucer Project", location, String(), false); | |||
FileChooser fc ("Add Files to Jucer Project", location, String()); | |||
if (fc.browseForMultipleFilesOrDirectories()) | |||
{ | |||
@@ -337,7 +337,14 @@ protected: | |||
virtual ProjectTreeItemBase* createSubItem (const Project::Item& node) = 0; | |||
Icon getIcon() const override { return item.getIcon().withContrastingColourTo (getBackgroundColour()); } | |||
Icon getIcon() const override | |||
{ | |||
auto colour = getOwnerView()->findColour (isSelected() ? defaultHighlightedTextColourId | |||
: treeIconColourId); | |||
return item.getIcon (isOpen()).withColour (colour); | |||
} | |||
bool isIconCrossedOut() const override { return item.isIconCrossedOut(); } | |||
void treeChildrenChanged (const ValueTree& parentTree) | |||
@@ -112,12 +112,6 @@ public: | |||
{ | |||
PopupMenu m; | |||
if (GroupItem* parentGroup = dynamic_cast<GroupItem*> (getParentProjectItem())) | |||
{ | |||
parentGroup->addCreateFileMenuItems (m); | |||
m.addSeparator(); | |||
} | |||
m.addItem (1, "Open in external editor"); | |||
m.addItem (2, | |||
#if JUCE_MAC | |||
@@ -133,6 +127,12 @@ public: | |||
launchPopupMenu (m); | |||
} | |||
void showPlusMenu() override | |||
{ | |||
if (auto* group = dynamic_cast<GroupItem*> (getParentItem())) | |||
group->showPlusMenu(); | |||
} | |||
void handlePopupMenuResult (int resultCode) override | |||
{ | |||
switch (resultCode) | |||
@@ -117,10 +117,13 @@ public: | |||
m.addSeparator(); | |||
if (isOpen()) | |||
m.addItem (1, "Collapse all Sub-groups"); | |||
else | |||
m.addItem (2, "Expand all Sub-groups"); | |||
if (! isRoot()) | |||
{ | |||
if (isOpen()) | |||
m.addItem (1, "Collapse all Sub-groups"); | |||
else | |||
m.addItem (2, "Expand all Sub-groups"); | |||
} | |||
m.addSeparator(); | |||
m.addItem (3, "Enable compiling of all enclosed files"); | |||
@@ -130,10 +133,20 @@ public: | |||
m.addItem (5, "Sort Items Alphabetically"); | |||
m.addItem (6, "Sort Items Alphabetically (Groups first)"); | |||
m.addSeparator(); | |||
m.addItem (7, "Rename..."); | |||
if (! isRoot()) | |||
{ | |||
m.addItem (7, "Rename..."); | |||
m.addItem (8, "Delete"); | |||
} | |||
launchPopupMenu (m); | |||
} | |||
void showPlusMenu() override | |||
{ | |||
PopupMenu m; | |||
addCreateFileMenuItems (m); | |||
launchPopupMenu (m); | |||
} | |||
@@ -0,0 +1,143 @@ | |||
/* | |||
============================================================================== | |||
This file is part of the JUCE library. | |||
Copyright (c) 2017 - ROLI Ltd. | |||
JUCE is an open source library subject to commercial or open-source | |||
licensing. | |||
By using JUCE, you agree to the terms of both the JUCE 5 End-User License | |||
Agreement and JUCE 5 Privacy Policy (both updated and effective as of the | |||
27th April 2017). | |||
End User License Agreement: www.juce.com/juce-5-licence | |||
Privacy Policy: www.juce.com/juce-5-privacy-policy | |||
Or: You may also use this code under the terms of the GPL v3 (see | |||
www.gnu.org/licenses). | |||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER | |||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE | |||
DISCLAIMED. | |||
============================================================================== | |||
*/ | |||
#pragma once | |||
class AboutWindowComponent : public Component, | |||
private Button::Listener | |||
{ | |||
public: | |||
AboutWindowComponent() | |||
: titleLabel ("title", "PROJUCER"), | |||
versionLabel ("version", "JUCE v" + ProjucerApplication::getApp().getApplicationVersion()), | |||
copyrightLabel ("copyright", String (CharPointer_UTF8 ("\xc2\xa9")) + String (" 2017 ROLI Ltd.")), | |||
aboutButton ("About Us", URL ("https://juce.com")) | |||
{ | |||
bool showPurchaseButton = false; | |||
#if ! JUCER_ENABLE_GPL_MODE | |||
if (LicenseController* controller = ProjucerApplication::getApp().licenseController) | |||
showPurchaseButton = (controller->getState().type != LicenseState::Type::indie | |||
&& controller->getState().type != LicenseState::Type::pro); | |||
#endif | |||
addAndMakeVisible (titleLabel); | |||
titleLabel.setJustificationType (Justification::centred); | |||
titleLabel.setFont (Font (35.0f, Font::FontStyleFlags::bold)); | |||
addAndMakeVisible (versionLabel); | |||
versionLabel.setJustificationType (Justification::centred); | |||
addAndMakeVisible (copyrightLabel); | |||
copyrightLabel.setJustificationType (Justification::centred); | |||
addAndMakeVisible (aboutButton); | |||
aboutButton.setTooltip ( {} ); | |||
if (showPurchaseButton) | |||
{ | |||
addAndMakeVisible (licenseButton = new TextButton ("Purchase License")); | |||
licenseButton->addListener (this); | |||
} | |||
} | |||
void resized() override | |||
{ | |||
auto bounds = getLocalBounds(); | |||
bounds.removeFromBottom (20); | |||
auto rightSlice = bounds.removeFromRight (150); | |||
auto leftSlice = bounds.removeFromLeft (150); | |||
auto centreSlice = bounds; | |||
//====================================================================== | |||
rightSlice.removeFromRight (20); | |||
auto iconSlice = rightSlice.removeFromRight (100); | |||
huckleberryLogoBounds = iconSlice.removeFromBottom (100).toFloat(); | |||
//====================================================================== | |||
juceLogoBounds = leftSlice.removeFromTop (150).toFloat(); | |||
juceLogoBounds.setWidth (juceLogoBounds.getWidth() + 100); | |||
juceLogoBounds.setHeight (juceLogoBounds.getHeight() + 100); | |||
copyrightLabel.setBounds (leftSlice.removeFromBottom (20)); | |||
//====================================================================== | |||
auto titleHeight = 40; | |||
centreSlice.removeFromTop ((centreSlice.getHeight() / 2) - (titleHeight / 2)); | |||
titleLabel.setBounds (centreSlice.removeFromTop (titleHeight)); | |||
centreSlice.removeFromTop (10); | |||
versionLabel.setBounds (centreSlice.removeFromTop (25)); | |||
centreSlice.removeFromTop (10); | |||
if (licenseButton != nullptr) | |||
licenseButton->setBounds (centreSlice.removeFromTop (25).reduced (25, 0)); | |||
aboutButton.setBounds (centreSlice.removeFromBottom (20)); | |||
} | |||
void paint (Graphics& g) override | |||
{ | |||
g.fillAll (findColour (backgroundColourId)); | |||
if (juceLogo != nullptr) | |||
juceLogo->drawWithin (g, juceLogoBounds.translated (-75, -75), RectanglePlacement::centred, 1.0); | |||
if (huckleberryLogo != nullptr) | |||
huckleberryLogo->drawWithin (g, huckleberryLogoBounds, RectanglePlacement::centred, 1.0); | |||
} | |||
private: | |||
Label titleLabel, versionLabel, copyrightLabel; | |||
HyperlinkButton aboutButton; | |||
ScopedPointer<TextButton> licenseButton; | |||
Rectangle<float> huckleberryLogoBounds; | |||
Rectangle<float> juceLogoBounds; | |||
ScopedPointer<Drawable> juceLogo | |||
= Drawable::createFromImageData (BinaryData::juce_icon_png, | |||
BinaryData::juce_icon_pngSize); | |||
ScopedPointer<Drawable> huckleberryLogo | |||
= Drawable::createFromImageData (BinaryData::huckleberry_icon_svg, | |||
BinaryData::huckleberry_icon_svgSize); | |||
void buttonClicked (Button* b) override | |||
{ | |||
if (b == licenseButton) | |||
{ | |||
if (LicenseController* controller = ProjucerApplication::getApp().licenseController) | |||
controller->chooseNewLicense(); | |||
} | |||
} | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AboutWindowComponent) | |||
}; |
@@ -1,142 +0,0 @@ | |||
/* | |||
============================================================================== | |||
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. | |||
============================================================================== | |||
*/ | |||
#pragma once | |||
class ProjucerDialogLookAndFeel : public LookAndFeel_V3 | |||
{ | |||
public: | |||
//============================================================================== | |||
const float labelFontSize = 12.0f; | |||
const float buttonFontSize = 15.0f; | |||
//============================================================================== | |||
void drawToggleButton (Graphics& g, ToggleButton& button, bool /*isMouseOverButton*/, bool /*isButtonDown*/) override | |||
{ | |||
g.setColour (Colours::white); | |||
Rectangle<float> box (4.0f, 4.0f, 13.0f, 13.0f); | |||
g.fillRoundedRectangle (box, 3.0f); | |||
if (button.getToggleState()) | |||
{ | |||
g.setColour (Colours::black); | |||
Path tick; | |||
tick.startNewSubPath (box.getX(), box.getCentreY() + 1.0f); | |||
tick.lineTo (box.getCentreX() - 1.0f, box.getBottom()); | |||
tick.lineTo (box.getRight(), box.getY()); | |||
const AffineTransform trans (AffineTransform::scale (0.75, 0.75, box.getCentreX(), box.getCentreY())); | |||
g.strokePath (tick, PathStrokeType (3.0f), trans); | |||
} | |||
g.setColour (button.findColour (ToggleButton::textColourId)); | |||
g.setFont (getDialogFont().withHeight (labelFontSize)); | |||
g.drawFittedText (button.getButtonText(), 24, 1, | |||
button.getWidth() - 24, button.getHeight(), | |||
Justification::centredLeft, 10); | |||
} | |||
void drawButtonBackground (Graphics& g, Button& button, const Colour& /*backgroundColour*/, | |||
bool isMouseOverButton, bool isButtonDown) override | |||
{ | |||
auto buttonRect = button.getLocalBounds().toFloat(); | |||
if (button.getProperties()["isSecondaryButton"]) | |||
drawSecondaryButtonBackground (g, buttonRect, isMouseOverButton, isButtonDown); | |||
else | |||
drawPrimaryButtonBackground (g, buttonRect, isMouseOverButton, isButtonDown); | |||
} | |||
void drawButtonText (Graphics& g, TextButton& button, bool isMouseOverButton, bool isButtonDown) override | |||
{ | |||
Font font (getTextButtonFont (button, button.getHeight())); | |||
g.setFont (font); | |||
if (button.getProperties()["isSecondaryButton"]) | |||
g.setColour (getBrightButtonColour (isMouseOverButton, isButtonDown)); | |||
else | |||
g.setColour (getBackgroundColour()); | |||
g.drawFittedText (button.getButtonText(), 0, 1, | |||
button.getWidth(), | |||
button.getHeight(), | |||
Justification::centred, 2); | |||
} | |||
//============================================================================== | |||
Font getTextButtonFont (TextButton&, int /*buttonHeight*/) override | |||
{ | |||
return getDialogFont().withHeight (buttonFontSize); | |||
} | |||
Font getLabelFont (Label&) override | |||
{ | |||
return getDialogFont().withHeight (labelFontSize); | |||
} | |||
//============================================================================== | |||
int getAlertWindowButtonHeight() override { return 40; } | |||
static Font getDialogFont() { return Font(); } | |||
Font getAlertWindowTitleFont() override { return getDialogFont().withHeight (18); } | |||
Font getAlertWindowMessageFont() override { return getDialogFont().withHeight (12); } | |||
Font getAlertWindowFont() override { return getDialogFont().withHeight (12); } | |||
//============================================================================== | |||
static Colour getBackgroundColour() { return Colour (0xff4d4d4d); } | |||
static Colour getBrightButtonColour() { return Colour (0xffe6e6e6); } | |||
static Colour getErrorTextColour() { return Colour (0xfff390a2); } | |||
static Colour getBrightButtonColour (bool isMouseOverButton, bool isButtonDown) | |||
{ | |||
if (isButtonDown) return getBrightButtonColour().withAlpha (0.7f); | |||
if (isMouseOverButton) return getBrightButtonColour().withAlpha (0.85f); | |||
return getBrightButtonColour(); | |||
} | |||
private: | |||
//============================================================================== | |||
void drawPrimaryButtonBackground (Graphics& g, | |||
Rectangle<float> buttonRect, | |||
bool isMouseOverButton, | |||
bool isButtonDown) | |||
{ | |||
g.setColour (getBrightButtonColour (isMouseOverButton, isButtonDown)); | |||
g.fillRoundedRectangle (buttonRect, 5.0f); | |||
} | |||
void drawSecondaryButtonBackground (Graphics& g, | |||
Rectangle<float> buttonRect, | |||
bool isMouseOverButton, | |||
bool isButtonDown) | |||
{ | |||
g.setColour (getBrightButtonColour (isMouseOverButton, isButtonDown)); | |||
g.drawRoundedRectangle (buttonRect.reduced (1.0f), 5.0f, 2.0f); | |||
} | |||
}; |
@@ -65,6 +65,8 @@ private: | |||
addAndMakeVisible (button); | |||
button.addListener (this); | |||
lookAndFeelChanged(); | |||
} | |||
void paintOverChildren (Graphics& g) override | |||
@@ -80,7 +82,7 @@ private: | |||
{ | |||
juce::Rectangle<int> r (getLocalBounds()); | |||
button.setBounds (r.removeFromRight (24)); | |||
button.setBounds (r.removeFromRight (30)); | |||
textbox.setBounds (r); | |||
} | |||
@@ -125,6 +127,17 @@ private: | |||
: f.getRelativePathFrom (root); | |||
} | |||
void lookAndFeelChanged() override | |||
{ | |||
textbox.setColour (TextEditor::backgroundColourId, findColour (widgetBackgroundColourId)); | |||
textbox.setColour (TextEditor::outlineColourId, Colours::transparentBlack); | |||
textbox.setColour (TextEditor::textColourId, findColour (widgetTextColourId)); | |||
textbox.applyFontToAllText (textbox.getFont()); | |||
button.setColour (TextButton::buttonColourId, findColour (secondaryButtonBackgroundColourId)); | |||
button.setColour (TextButton::textColourOffId, Colours::white); | |||
} | |||
Value value; | |||
bool isDirectory, highlightForDragAndDrop; | |||
String wildcards; | |||
@@ -32,15 +32,16 @@ struct FloatingToolWindow : public DialogWindow | |||
const String& windowPosPropertyName, | |||
Component* content, | |||
ScopedPointer<Component>& ownerPointer, | |||
bool shouldBeResizable, | |||
int defaultW, int defaultH, | |||
int minW, int minH, | |||
int maxW, int maxH) | |||
: DialogWindow (title, Colours::darkgrey, true, true), | |||
: DialogWindow (title, content->findColour (secondaryBackgroundColourId), true, true), | |||
windowPosProperty (windowPosPropertyName), | |||
owner (ownerPointer) | |||
{ | |||
setUsingNativeTitleBar (true); | |||
setResizable (true, true); | |||
setResizable (shouldBeResizable, shouldBeResizable); | |||
setResizeLimits (minW, minH, maxW, maxH); | |||
setContentOwned (content, false); | |||
@@ -71,6 +72,11 @@ struct FloatingToolWindow : public DialogWindow | |||
return true; | |||
} | |||
void paint (Graphics& g) override | |||
{ | |||
g.fillAll (findColour (secondaryBackgroundColourId)); | |||
} | |||
private: | |||
String windowPosProperty; | |||
ScopedPointer<Component>& owner; | |||
@@ -95,11 +95,11 @@ const uint8 graph[] = { 110,109,166,158,186,66,184,11,143,67,108,113,151,95,67,9 | |||
36,62,67,57,208,166,67,183,75,46,67,100,188,174,67,183,75,46,67,68,107,184,67,108,183,75,46,67,119,233,224,67,98,183,75,46,67,87,152,234,67,13,36,62,67,130,132,242,67,205,129,81,67,130,132,242,67,108,25,63,145,67,130,132,242,67,98,249,237,154,67,130, | |||
132,242,67,36,218,162,67,87,152,234,67,36,218,162,67,119,233,224,67,108,36,218,162,67,68,107,184,67,98,36,218,162,67,100,188,174,67,249,237,154,67,57,208,166,67,25,63,145,67,57,208,166,67,99,101,0,0 }; | |||
const uint8 exporter[] = { 110,109,253,221,132,67,144,191,123,65,98,211,214,32,67,144,191,123,65,105,218,146,66,8,213,167,66,10,213,39,66,90,82,50,67,108,224,205,195,66,90,82,50,67,98,141,191,251,66,210,69,227,66,55,143,62,67,24,93,136,66,253,221,132,67,24,93,136,66,98,3,145,183, | |||
67,24,93,136,66,183,198,223,67,130,89,22,67,183,198,223,67,0,0,122,67,98,183,198,223,67,5,179,175,67,59,177,182,67,185,232,215,67,253,221,132,67,185,232,215,67,98,55,143,62,67,185,232,215,67,142,191,251,66,138,46,193,67,224,205,195,66,211,214,160,67, | |||
108,9,213,39,66,211,214,160,67,98,77,91,143,66,189,10,208,67,211,214,32,67,2,34,242,67,253,221,132,67,2,34,242,67,98,109,141,197,67,2,34,242,67,0,0,250,67,112,175,189,67,0,0,250,67,254,255,121,67,98,0,0,250,67,60,66,241,66,109,141,197,67,144,191,123, | |||
65,253,221,132,67,144,191,123,65,99,109,196,78,64,67,211,214,160,67,108,69,23,159,67,254,255,121,67,108,195,78,64,67,88,82,50,67,108,195,78,64,67,13,136,90,67,108,0,0,0,0,13,136,90,67,108,0,0,0,0,191,155,141,67,108,196,78,64,67,191,155,141,67,108,196, | |||
78,64,67,211,214,160,67,99,101,0,0 }; | |||
//const uint8 exporter[] = { 110,109,253,221,132,67,144,191,123,65,98,211,214,32,67,144,191,123,65,105,218,146,66,8,213,167,66,10,213,39,66,90,82,50,67,108,224,205,195,66,90,82,50,67,98,141,191,251,66,210,69,227,66,55,143,62,67,24,93,136,66,253,221,132,67,24,93,136,66,98,3,145,183, | |||
//67,24,93,136,66,183,198,223,67,130,89,22,67,183,198,223,67,0,0,122,67,98,183,198,223,67,5,179,175,67,59,177,182,67,185,232,215,67,253,221,132,67,185,232,215,67,98,55,143,62,67,185,232,215,67,142,191,251,66,138,46,193,67,224,205,195,66,211,214,160,67, | |||
//108,9,213,39,66,211,214,160,67,98,77,91,143,66,189,10,208,67,211,214,32,67,2,34,242,67,253,221,132,67,2,34,242,67,98,109,141,197,67,2,34,242,67,0,0,250,67,112,175,189,67,0,0,250,67,254,255,121,67,98,0,0,250,67,60,66,241,66,109,141,197,67,144,191,123, | |||
//65,253,221,132,67,144,191,123,65,99,109,196,78,64,67,211,214,160,67,108,69,23,159,67,254,255,121,67,108,195,78,64,67,88,82,50,67,108,195,78,64,67,13,136,90,67,108,0,0,0,0,13,136,90,67,108,0,0,0,0,191,155,141,67,108,196,78,64,67,191,155,141,67,108,196, | |||
//78,64,67,211,214,160,67,99,101,0,0 }; | |||
const uint8 jigsaw[] = { 110,109,244,9,155,65,198,29,87,67,98,244,9,155,65,198,29,87,67,43,107,174,66,227,15,248,66,97,208,255,66,78,89,17,67,98,202,154,40,67,140,186,36,67,99,79,240,66,200,156,71,67,44,234,30,67,230,13,89,67,98,168,172,69,67,2,127,106,67,96,208,127,67,166,45, | |||
85,67,164,47,116,67,76,218,32,67,98,198,158,102,67,229,13,217,66,72,93,79,67,78,89,17,67,42,236,61,67,35,111,236,66,98,12,123,44,67,169,43,182,66,239,136,139,67,232,142,232,65,239,136,139,67,232,142,232,65,98,239,136,139,67,232,142,232,65,10,123,172, | |||
@@ -144,7 +144,7 @@ const uint8 bug[] = { 110,109,169,227,237,67,143,189,46,67,108,94,183,187,67,17, | |||
67,237,54,242,67,22,232,192,67,98,73,207,244,67,210,148,188,67,97,20,243,67,26,100,183,67,29,193,238,67,190,203,180,67,108,70,114,189,67,60,29,153,67,98,162,10,192,67,112,35,140,67,22,232,192,67,70,83,126,67,162,10,192,67,76,75,107,67,108,96,20,243,67, | |||
202,156,79,67,98,164,103,247,67,226,225,77,67,0,0,250,67,114,128,67,67,140,34,249,67,234,217,58,67,98,166,103,247,67,96,51,50,67,237,54,242,67,168,2,45,67,169,227,237,67,143,189,46,67,99,101,0,0 }; | |||
const uint8 play[] = { 110,109,84,227,213,64,188,116,205,65,108,43,135,194,65,0,0,120,65,108,84,227,213,64,14,45,170,64,108,84,227,213,64,188,116,205,65,99,101,0,0 }; | |||
//const uint8 play[] = { 110,109,84,227,213,64,188,116,205,65,108,43,135,194,65,0,0,120,65,108,84,227,213,64,14,45,170,64,108,84,227,213,64,188,116,205,65,99,101,0,0 }; | |||
const uint8 code[] = { 110,109,190,159,130,64,240,167,130,64,108,190,159,130,64,191,159,226,64,108,4,86,215,65,191,159,226,64,108,4,86,215,65,240,167,130,64,108,190,159,130,64,240,167,130,64,99,109,190,159,130,64,176,114,162,65,108,4,86,215,65,176,114,162,65,108,4,86,215,65, | |||
188,116,138,65,108,190,159,130,64,188,116,138,65,108,190,159,130,64,176,114,162,65,99,109,190,159,130,64,160,26,91,65,108,4,86,215,65,160,26,91,65,108,4,86,215,65,184,30,43,65,108,190,159,130,64,184,30,43,65,108,190,159,130,64,160,26,91,65,99,109,190, | |||
@@ -967,6 +967,578 @@ const uint8 mainJuceLogo[] = { 110,109,104,98,101,67,226,177,185,67,98,216,179,8 | |||
66,98,40,65,81,67,8,218,211,66,88,160,81,67,176,205,211,66,216,175,81,67,24,233,211,66,98,120,191,81,67,144,4,212,66,8,217,81,67,176,202,212,66,184,232,81,67,96,161,213,66,98,24,5,82,67,216,36,215,66,72,4,82,67,24,40,215,66,248,124,81,67,48,94,215,66, | |||
98,104,203,80,67,64,165,215,66,120,137,80,67,8,163,215,66,104,114,80,67,16,85,215,66,99,101,0,0 }; | |||
const uint8 user[] = { 110,109,0,0,128,65,0,0,160,65,98,0,0,128,65,0,0,112,65,68,177,70,65,0,0,48,65,0,0,0,65,0,0,48,65,98,238,58,101,64,0,0,48,65,0,0,0,0,0,0,120,65,0,0,0,0,0,0,160,65,108,0,0,128,65,0,0,160,65,99,109,0,0,80,65,0,0,160,64,108,0,0,80,65,0,0,160,64,108,104,230, | |||
79,65,38,255,167,64,108,176,153,79,65,45,249,175,64,108,8,26,79,65,251,232,183,64,108,196,103,78,65,125,201,191,64,108,84,131,77,65,168,149,199,64,108,75,109,76,65,128,72,207,64,108,91,38,75,65,21,221,214,64,108,85,175,73,65,144,78,222,64,108,40,9,72, | |||
65,46,152,229,64,108,229,52,70,65,66,181,236,64,108,180,51,68,65,66,161,243,64,108,225,6,66,65,190,87,250,64,108,205,175,63,65,54,106,0,65,108,250,47,61,65,146,137,3,65,108,255,136,58,65,244,135,6,65,108,144,188,55,65,114,99,9,65,108,119,204,52,65,54, | |||
26,12,65,108,150,186,49,65,135,170,14,65,108,226,136,46,65,190,18,17,65,108,104,57,43,65,81,81,19,65,108,69,206,39,65,210,100,21,65,108,170,73,36,65,235,75,23,65,108,215,173,32,65,102,5,25,65,108,27,253,28,65,39,144,26,65,108,210,57,25,65,50,235,27,65, | |||
108,102,102,21,65,170,21,29,65,108,72,133,17,65,207,14,30,65,108,243,152,13,65,2,214,30,65,108,236,163,9,65,194,106,31,65,108,185,168,5,65,178,204,31,65,108,232,169,1,65,146,251,31,65,108,255,255,255,64,0,0,32,65,108,0,0,0,65,0,0,32,65,108,255,255,255, | |||
64,0,0,32,65,108,218,0,248,64,104,230,31,65,108,211,6,240,64,176,153,31,65,108,4,23,232,64,8,26,31,65,108,130,54,224,64,196,103,30,65,108,87,106,216,64,84,131,29,65,108,128,183,208,64,75,109,28,65,108,234,34,201,64,91,38,27,65,108,112,177,193,64,85,175, | |||
25,65,108,211,103,186,64,41,9,24,65,108,190,74,179,64,229,52,22,65,108,191,94,172,64,181,51,20,65,108,67,168,165,64,225,6,18,65,108,149,43,159,64,206,175,15,65,108,220,236,152,64,250,47,13,65,108,24,240,146,64,255,136,10,65,108,29,57,141,64,144,188,7, | |||
65,108,147,203,135,64,119,204,4,65,108,242,170,130,64,149,186,1,65,108,4,181,123,64,192,17,253,64,108,180,186,114,64,202,114,246,64,108,176,108,106,64,130,156,239,64,108,72,208,98,64,74,147,232,64,108,92,234,91,64,161,91,225,64,108,86,191,85,64,38,250, | |||
217,64,108,40,83,80,64,146,115,210,64,108,76,169,75,64,182,204,202,64,108,184,196,71,64,120,10,195,64,108,240,167,68,64,204,49,187,64,108,240,84,66,64,187,71,179,64,108,52,205,64,64,83,81,171,64,108,182,17,64,64,173,83,163,64,108,0,0,64,64,0,0,160,64, | |||
108,0,0,64,64,0,0,160,64,108,0,0,64,64,0,0,160,64,108,96,102,64,64,216,0,152,64,108,68,153,65,64,207,6,144,64,108,226,151,67,64,254,22,136,64,108,246,96,70,64,121,54,128,64,108,182,242,73,64,152,212,112,64,108,220,74,78,64,229,110,97,64,108,160,102,83, | |||
64,181,69,82,64,108,188,66,89,64,188,98,67,64,108,112,219,95,64,127,207,52,64,108,130,44,103,64,82,149,38,64,108,72,49,111,64,80,189,24,64,108,156,228,119,64,85,80,11,64,108,120,160,128,64,240,173,252,63,108,34,160,133,64,8,179,227,63,108,27,238,138, | |||
64,246,191,203,63,108,252,134,144,64,8,228,180,63,108,48,103,150,64,220,45,159,63,108,248,138,156,64,94,171,138,63,108,98,238,162,64,80,211,110,63,108,90,141,169,64,32,234,74,63,108,162,99,176,64,32,178,41,63,108,220,108,183,64,144,64,11,63,108,133,164, | |||
190,64,224,81,223,62,108,0,6,198,64,192,249,173,62,108,149,140,205,64,112,152,130,62,108,114,51,213,64,64,147,58,62,108,177,245,220,64,0,149,248,61,108,93,206,228,64,64,252,148,61,108,111,184,236,64,128,57,21,61,108,215,174,244,64,0,44,77,60,108,125, | |||
172,252,64,0,160,141,58,108,1,0,0,65,0,0,0,0,108,0,0,0,65,0,0,0,0,108,0,0,0,65,0,0,0,0,108,147,255,3,65,0,192,204,59,108,151,252,7,65,0,161,204,60,108,126,244,11,65,0,248,101,61,108,191,228,15,65,64,30,204,61,108,213,202,19,65,32,43,31,62,108,65,164, | |||
23,65,96,173,100,62,108,140,110,27,65,176,52,155,62,108,74,39,31,65,128,21,202,62,108,24,204,34,65,0,219,254,62,108,163,90,38,65,192,177,28,63,108,163,208,41,65,200,196,60,63,108,225,43,45,65,8,146,95,63,108,56,106,48,65,164,129,130,63,108,148,137,51, | |||
65,70,128,150,63,108,246,135,54,65,28,184,171,63,108,116,99,57,65,152,27,194,63,108,58,26,60,65,96,156,217,63,108,138,170,62,65,112,43,242,63,108,192,18,65,65,136,220,5,64,108,84,81,67,65,113,26,19,64,108,212,100,69,65,252,198,32,64,108,238,75,71,65, | |||
105,217,46,64,108,104,5,73,65,181,72,61,64,108,41,144,74,65,166,11,76,64,108,52,235,75,65,200,24,91,64,108,172,21,77,65,124,102,106,64,108,208,14,78,65,244,234,121,64,108,2,214,78,65,35,206,132,64,108,195,106,79,65,50,184,140,64,108,178,204,79,65,151, | |||
174,148,64,108,146,251,79,65,58,172,156,64,108,0,0,80,65,0,0,160,64,108,0,0,80,65,0,0,160,64,99,101,0,0 }; | |||
const uint8 closedFolder[] = { 110,109,0,0,0,65,0,0,0,0,108,0,0,0,65,0,0,128,63,108,0,0,0,65,0,0,0,64,108,0,0,0,0,0,0,0,64,108,0,0,0,0,0,0,96,65,108,0,0,144,65,0,0,96,65,108,0,0,144,65,0,0,0,64,108,0,0,128,65,0,0,0,64,108,0,0,128,65,0,0,0,0,108,0,0,0,65,0,0,0,0,99,101,0,0 }; | |||
const uint8 exporter[] = { 110,109,0,120,99,65,0,128,94,63,108,0,40,88,65,0,192,201,63,108,0,232,42,65,0,240,140,64,108,0,80,251,64,0,192,201,63,108,0,128,72,63,0,88,10,65,108,0,192,190,63,0,168,21,65,108,0,32,103,64,0,152,55,65,108,0,128,67,63,0,40,101,65,108,0,0,104,61,0,120, | |||
112,65,108,0,64,188,63,0,140,131,65,108,0,96,11,64,0,200,123,65,108,0,208,160,64,0,56,78,65,108,0,80,251,64,0,128,123,65,108,0,208,110,65,0,88,10,65,108,0,136,65,65,0,48,186,64,108,0,200,110,65,0,96,63,64,108,0,24,122,65,0,32,18,64,108,0,120,99,65,0, | |||
128,94,63,99,109,0,80,251,64,0,240,140,64,108,0,72,20,65,0,48,186,64,108,0,248,19,65,0,208,186,64,108,0,152,42,65,0,16,232,64,108,0,232,42,65,0,112,231,64,108,0,144,65,65,0,88,10,65,108,0,80,251,64,0,56,78,65,108,0,16,206,64,0,152,55,65,108,0,208,160, | |||
64,0,248,32,65,108,0,32,103,64,0,88,10,65,108,0,80,251,64,0,240,140,64,99,101,0,0 }; | |||
const uint8 fileExplorer[] = { 110,109,0,0,0,65,0,0,0,0,108,0,0,0,65,0,0,192,64,108,0,0,32,65,0,0,192,64,108,0,0,32,65,0,0,208,64,108,0,0,32,65,0,0,0,65,108,0,0,0,64,0,0,0,65,108,0,0,0,64,0,0,64,65,108,0,0,0,0,0,0,64,65,108,0,0,0,0,0,0,144,65,108,0,0,192,64,0,0,144,65,108,0,0,192, | |||
64,0,0,64,65,108,0,0,128,64,0,0,64,65,108,0,0,128,64,0,0,32,65,108,0,0,32,65,0,0,32,65,108,0,0,32,65,0,0,56,65,108,0,0,32,65,0,0,64,65,108,0,0,0,65,0,0,64,65,108,0,0,0,65,0,0,144,65,108,0,0,96,65,0,0,144,65,108,0,0,96,65,0,0,64,65,108,0,0,64,65,0,0,64, | |||
65,108,0,0,64,65,0,0,56,65,108,0,0,64,65,0,0,32,65,108,0,0,144,65,0,0,32,65,108,0,0,144,65,0,0,56,65,108,0,0,144,65,0,0,64,65,108,0,0,128,65,0,0,64,65,108,0,0,128,65,0,0,144,65,108,0,0,176,65,0,0,144,65,108,0,0,176,65,0,0,64,65,108,0,0,160,65,0,0,64, | |||
65,108,0,0,160,65,0,0,56,65,108,0,0,160,65,0,0,0,65,108,0,0,64,65,0,0,0,65,108,0,0,64,65,0,0,208,64,108,0,0,64,65,0,0,192,64,108,0,0,96,65,0,0,192,64,108,0,0,96,65,0,0,0,0,108,0,0,0,65,0,0,0,0,99,101,0,0 }; | |||
const uint8 file[] = { 110,109,0,0,0,0,0,0,0,0,108,0,0,0,0,0,0,144,65,108,0,0,96,65,0,0,144,65,108,0,0,96,65,0,0,136,65,108,0,0,96,65,0,0,0,65,108,0,0,96,65,0,112,212,64,108,0,128,7,65,0,0,0,0,108,0,0,0,65,0,0,0,0,108,0,0,0,0,0,0,0,0,99,109,0,0,0,64,0,0,0,64,108,0,176,234, | |||
64,0,0,0,64,108,0,0,192,64,0,0,192,64,108,0,0,64,65,0,0,240,64,108,0,0,64,65,0,0,128,65,108,0,0,0,64,0,0,128,65,108,0,0,0,64,0,0,0,64,99,101,0,0 }; | |||
const uint8 buildTab[] = { 110,109,0,128,57,65,0,0,4,62,98,11,216,43,65,224,184,58,62,161,115,30,65,232,197,8,63,0,8,20,65,0,192,151,63,98,0,23,3,65,255,163,15,64,233,164,253,64,158,229,114,64,0,40,7,65,0,112,163,64,98,90,107,6,65,220,190,164,64,12,166,5,65,232,227,165,64,0,240, | |||
4,65,0,80,167,64,108,0,128,216,64,0,160,216,64,108,0,80,167,64,0,112,167,64,108,0,192,153,64,0,64,117,64,108,0,64,4,64,0,32,20,64,108,0,128,186,63,0,32,59,64,108,0,96,62,64,0,48,181,64,108,0,240,139,64,0,192,194,64,108,0,48,189,64,0,0,244,64,108,0,128, | |||
196,63,0,8,64,65,98,79,40,52,63,123,85,77,65,134,196,251,62,36,134,95,65,0,0,136,63,0,168,104,65,98,223,14,209,63,220,201,113,65,20,74,49,64,124,109,110,65,0,128,102,64,255,31,97,65,108,0,96,255,64,0,16,27,65,108,0,216,20,65,0,56,48,65,108,0,216,10,65, | |||
0,56,58,65,108,0,80,49,65,0,176,96,65,98,123,157,62,65,123,253,109,65,37,206,80,65,220,97,113,65,0,240,89,65,0,64,104,65,98,221,17,99,65,35,30,95,65,122,173,95,65,122,237,76,65,1,96,82,65,255,159,63,65,108,0,232,43,65,0,40,25,65,108,0,128,34,65,0,144, | |||
34,65,108,0,88,13,65,0,104,13,65,108,0,0,38,65,0,112,233,64,98,12,182,38,65,232,3,232,64,147,72,39,65,76,121,230,64,0,240,39,65,0,0,229,64,98,146,240,60,65,13,181,245,64,125,188,85,65,7,55,237,64,0,176,102,65,0,80,203,64,98,215,148,116,65,81,134,175, | |||
64,202,251,121,65,136,33,137,64,1,224,118,65,0,32,74,64,108,0,56,85,65,0,96,168,64,108,255,159,47,65,0,16,148,64,108,0,128,37,65,0,192,17,64,108,255,31,71,65,0,0,52,62,98,208,157,66,65,94,67,2,62,82,13,62,65,191,132,227,61,0,128,57,65,0,0,4,62,99,109, | |||
0,96,248,64,0,0,185,64,108,0,40,29,65,0,240,250,64,108,0,72,13,65,0,88,13,65,108,0,160,216,64,0,192,216,64,108,0,96,248,64,0,0,185,64,99,109,0,80,189,64,0,16,244,64,108,0,64,255,64,0,0,27,65,108,0,112,224,64,0,104,42,65,108,0,128,158,64,0,112,9,65,108, | |||
0,80,189,64,0,16,244,64,99,101,0,0 }; | |||
const uint8 modules[] = { 110,109,193,202,222,64,80,50,21,64,108,0,0,48,65,0,0,0,0,108,160,154,112,65,80,50,21,64,108,0,0,48,65,80,50,149,64,108,193,202,222,64,80,50,21,64,99,109,0,0,192,64,251,220,127,64,108,160,154,32,65,165,135,202,64,108,160,154,32,65,250,220,47,65,108,0, | |||
0,192,64,102,144,10,65,108,0,0,192,64,251,220,127,64,99,109,0,0,128,65,251,220,127,64,108,0,0,128,65,103,144,10,65,108,96,101,63,65,251,220,47,65,108,96,101,63,65,166,135,202,64,108,0,0,128,65,251,220,127,64,99,109,96,101,79,65,148,76,69,65,108,0,0,136, | |||
65,0,0,32,65,108,80,77,168,65,148,76,69,65,108,0,0,136,65,40,153,106,65,108,96,101,79,65,148,76,69,65,99,109,0,0,64,65,63,247,95,65,108,80,77,128,65,233,161,130,65,108,80,77,128,65,125,238,167,65,108,0,0,64,65,51,72,149,65,108,0,0,64,65,63,247,95,65, | |||
99,109,0,0,176,65,63,247,95,65,108,0,0,176,65,51,72,149,65,108,176,178,143,65,125,238,167,65,108,176,178,143,65,233,161,130,65,108,0,0,176,65,63,247,95,65,99,109,12,86,118,63,148,76,69,65,108,0,0,160,64,0,0,32,65,108,159,154,16,65,148,76,69,65,108,0, | |||
0,160,64,40,153,106,65,108,12,86,118,63,148,76,69,65,99,109,0,0,0,0,63,247,95,65,108,62,53,129,64,233,161,130,65,108,62,53,129,64,125,238,167,65,108,0,0,0,0,51,72,149,65,108,0,0,0,0,63,247,95,65,99,109,0,0,32,65,63,247,95,65,108,0,0,32,65,51,72,149,65, | |||
108,193,202,190,64,125,238,167,65,108,193,202,190,64,233,161,130,65,108,0,0,32,65,63,247,95,65,99,101,0,0 }; | |||
const uint8 openFolder[] = { 110,109,0,0,32,65,0,0,0,0,108,0,0,32,65,0,0,0,64,108,0,0,0,64,0,0,0,64,108,0,0,0,64,0,0,192,64,108,0,0,0,0,0,0,192,64,108,0,0,0,64,0,0,128,65,108,0,0,152,65,0,0,128,65,108,0,0,160,65,0,0,128,65,108,0,0,160,65,0,0,112,65,108,0,0,160,65,0,0,0,64,108,0, | |||
0,144,65,0,0,0,64,108,0,0,144,65,0,0,0,0,108,0,0,32,65,0,0,0,0,99,109,0,0,64,65,0,0,0,64,108,0,0,128,65,0,0,0,64,108,0,0,128,65,0,0,128,64,108,0,0,144,65,0,0,128,64,108,0,0,144,65,0,0,48,65,108,0,0,136,65,0,0,192,64,108,0,0,128,64,0,0,192,64,108,0,0, | |||
128,64,0,0,128,64,108,0,0,64,65,0,0,128,64,108,0,0,64,65,0,0,0,64,99,101,0,0 }; | |||
const uint8 play[] = { 110,109,33,149,244,63,0,0,0,0,98,124,12,170,63,66,96,229,58,53,37,79,63,98,38,238,62,53,37,79,63,89,211,161,63,108,53,37,79,63,149,197,107,65,98,53,37,79,63,205,142,120,65,124,12,170,63,0,0,128,65,33,149,244,63,0,0,128,65,98,232,130,9,64,0,0,128,65,189, | |||
83,30,64,176,189,126,65,251,116,48,64,151,35,124,65,98,126,244,212,64,16,55,88,65,104,222,40,65,137,74,52,65,103,59,103,65,43,101,16,65,98,7,216,118,65,224,98,7,65,83,17,119,65,65,58,241,64,181,116,103,65,168,53,223,64,98,14,251,40,65,238,106,151,64, | |||
126,244,212,64,192,35,31,64,96,2,48,64,93,26,119,62,98,34,225,29,64,112,39,161,61,232,130,9,64,0,0,0,0,33,149,244,63,0,0,0,0,99,101,0,0 }; | |||
const uint8 settings[] = { 110,109,202,111,210,64,243,226,61,64,108,0,0,224,64,0,0,0,0,108,0,0,48,65,0,0,0,0,108,27,200,54,65,243,226,61,64,98,91,248,63,65,174,170,76,64,95,130,72,65,231,138,96,64,46,46,80,65,180,163,120,64,108,42,181,124,65,20,38,49,64,108,149,90,142,65,246,108, | |||
199,64,108,68,249,118,65,2,85,1,65,98,112,166,119,65,201,31,6,65,0,0,120,65,111,5,11,65,0,0,120,65,0,0,16,65,98,0,0,120,65,145,250,20,65,108,166,119,65,55,224,25,65,72,249,118,65,254,170,30,65,108,151,90,142,65,133,73,60,65,108,46,181,124,65,123,182, | |||
115,65,108,50,46,80,65,18,215,97,65,98,99,130,72,65,70,221,103,65,96,248,63,65,83,213,108,65,32,200,54,65,66,135,112,65,108,0,0,48,65,0,0,144,65,108,0,0,224,64,0,0,144,65,108,202,111,210,64,67,135,112,65,98,74,15,192,64,84,213,108,65,65,251,174,64,70, | |||
221,103,65,164,163,159,64,19,215,97,65,108,92,43,13,64,123,182,115,65,108,187,181,82,62,133,73,60,65,108,244,26,36,64,254,170,30,65,98,64,102,33,64,55,224,25,65,0,0,32,64,145,250,20,65,0,0,32,64,0,0,16,65,98,0,0,32,64,111,5,11,65,64,102,33,64,201,31, | |||
6,65,244,26,36,64,2,85,1,65,108,187,181,82,62,246,108,199,64,108,92,43,13,64,20,38,49,64,108,164,163,159,64,180,163,120,64,98,65,251,174,64,231,138,96,64,74,15,192,64,175,170,76,64,202,111,210,64,243,226,61,64,99,109,0,0,16,65,0,0,64,65,98,121,130,42, | |||
65,0,0,64,65,0,0,64,65,121,130,42,65,0,0,64,65,0,0,16,65,98,0,0,64,65,13,251,234,64,121,130,42,65,0,0,192,64,0,0,16,65,0,0,192,64,98,13,251,234,64,0,0,192,64,0,0,192,64,13,251,234,64,0,0,192,64,0,0,16,65,98,0,0,192,64,121,130,42,65,13,251,234,64,0,0, | |||
64,65,0,0,16,65,0,0,64,65,99,101,0,0 }; | |||
const uint8 singleModule[] = { 110,109,165,48,137,63,179,12,91,64,108,0,0,224,64,0,0,0,0,108,235,217,78,65,179,12,91,64,108,0,0,224,64,176,12,219,64,108,165,48,137,63,179,12,91,64,99,109,51,10,147,61,80,243,164,64,108,0,0,192,64,211,60,9,65,108,0,0,192,64,45,195,118,65,108,51,10,147, | |||
61,0,0,64,65,108,51,10,147,61,80,243,164,64,99,109,235,217,94,65,80,243,164,64,108,235,217,94,65,0,0,64,65,108,0,0,0,65,45,195,118,65,108,0,0,0,65,211,60,9,65,108,235,217,94,65,80,243,164,64,99,101,0,0 }; | |||
const uint8 buildNow[] = { 110,109,0,128,57,65,0,0,11,63,98,171,165,35,65,179,98,241,62,24,105,13,65,129,238,116,63,0,112,249,64,0,0,0,64,98,91,21,203,64,75,181,92,64,242,83,191,64,108,13,178,64,0,192,213,64,0,112,235,64,108,0,128,72,63,0,24,84,65,98,36,57,13,59,45,151,96,65,68, | |||
51,13,59,211,216,116,65,0,128,72,63,0,172,128,65,98,102,57,200,63,150,235,134,65,78,35,53,64,150,235,134,65,0,32,103,64,0,172,128,65,108,0,24,24,65,0,0,35,65,98,59,204,52,65,87,61,46,65,246,166,86,65,10,81,40,65,0,216,109,65,0,32,17,65,98,196,117,128, | |||
65,238,24,252,64,30,44,132,65,217,124,199,64,0,16,130,65,0,16,150,64,108,0,240,85,65,0,112,242,64,108,0,112,34,65,0,224,214,64,108,0,160,20,65,0,160,95,64,108,0,208,66,65,0,128,27,63,98,50,185,63,65,138,15,19,63,49,159,60,65,134,157,13,63,0,128,57,65, | |||
0,0,11,63,99,101,0,0 }; | |||
const uint8 continuousBuildStart[] = { 110,109,0,16,55,65,0,128,53,63,98,76,48,50,65,24,205,49,63,88,83,45,65,191,4,50,63,0,128,40,65,0,0,54,63,98,192,47,221,64,7,199,101,63,113,249,100,64,108,248,76,64,0,192,16,64,0,48,218,64,108,0,224,76,64,0,48,229,64,98,19,172,152,64,120,86,54,64,157, | |||
101,24,65,103,159,33,63,0,104,93,65,0,224,12,64,98,64,148,133,65,2,124,79,64,7,4,149,65,255,247,181,64,0,56,153,65,0,136,7,65,108,0,168,144,65,0,112,8,65,108,0,56,159,65,0,200,59,65,108,0,8,171,65,0,176,5,65,108,0,84,161,65,0,176,6,65,98,39,235,156,65, | |||
182,193,167,64,118,99,139,65,136,68,28,64,0,232,98,65,0,128,161,63,98,134,113,84,65,142,198,110,63,28,175,69,65,184,152,64,63,0,16,55,65,0,128,53,63,99,109,0,152,8,65,0,96,195,64,98,29,15,4,65,249,102,195,64,0,0,0,65,166,157,202,64,0,0,0,65,0,16,215, | |||
64,108,0,0,0,65,0,120,84,65,98,0,0,0,65,44,177,90,65,29,15,4,65,0,80,94,65,0,152,8,65,0,80,94,65,98,31,114,10,65,0,80,94,65,62,243,12,65,54,180,93,65,0,40,15,65,0,112,92,65,98,167,130,45,65,197,243,74,65,90,229,75,65,191,112,57,65,0,64,106,65,0,248,39, | |||
65,98,72,217,113,65,117,149,35,65,80,241,113,65,139,106,28,65,0,88,106,65,0,8,24,65,98,113,239,75,65,65,143,6,65,153,136,45,65,118,24,234,64,0,32,15,65,0,32,199,64,98,61,235,12,65,147,151,196,64,31,114,10,65,0,96,195,64,0,152,8,65,0,96,195,64,99,109, | |||
0,64,6,64,0,56,4,65,108,0,0,31,63,0,80,58,65,108,0,128,228,63,0,88,57,65,98,209,237,21,64,250,1,108,65,133,239,144,64,4,85,140,65,0,112,248,64,0,192,149,65,98,136,90,73,65,147,201,163,65,109,114,143,65,68,217,143,65,0,124,157,65,0,144,82,65,108,0,244, | |||
149,65,0,24,77,65,98,251,100,137,65,49,13,137,65,98,186,70,65,5,203,154,65,0,184,1,65,0,60,142,65,98,142,44,168,64,25,238,133,65,64,34,85,64,173,230,100,65,0,32,51,64,0,128,56,65,108,0,192,122,64,0,144,55,65,108,0,64,6,64,0,56,4,65,99,101,0,0 }; | |||
const uint8 continuousBuildStop[] = { 110,109,0,16,55,65,0,128,53,63,98,76,48,50,65,24,205,49,63,88,83,45,65,191,4,50,63,0,128,40,65,0,0,54,63,98,192,47,221,64,7,199,101,63,113,249,100,64,108,248,76,64,0,192,16,64,0,48,218,64,108,0,224,76,64,0,48,229,64,98,19,172,152,64,120,86,54,64,157, | |||
101,24,65,103,159,33,63,0,104,93,65,0,224,12,64,98,64,148,133,65,2,124,79,64,7,4,149,65,255,247,181,64,0,56,153,65,0,136,7,65,108,0,168,144,65,0,112,8,65,108,0,56,159,65,0,200,59,65,108,0,8,171,65,0,176,5,65,108,0,84,161,65,0,176,6,65,98,39,235,156,65, | |||
182,193,167,64,118,99,139,65,136,68,28,64,0,232,98,65,0,128,161,63,98,134,113,84,65,142,198,110,63,28,175,69,65,184,152,64,63,0,16,55,65,0,128,53,63,99,109,0,0,0,65,0,0,224,64,108,0,0,0,65,0,0,80,65,108,0,0,96,65,0,0,80,65,108,0,0,96,65,0,0,224,64,108, | |||
0,0,0,65,0,0,224,64,99,109,0,64,6,64,0,56,4,65,108,0,0,31,63,0,80,58,65,108,0,128,228,63,0,88,57,65,98,209,237,21,64,250,1,108,65,133,239,144,64,4,85,140,65,0,112,248,64,0,192,149,65,98,136,90,73,65,147,201,163,65,109,114,143,65,68,217,143,65,0,124,157, | |||
65,0,144,82,65,108,0,244,149,65,0,24,77,65,98,251,100,137,65,49,13,137,65,98,186,70,65,5,203,154,65,0,184,1,65,0,60,142,65,98,142,44,168,64,25,238,133,65,64,34,85,64,173,230,100,65,0,32,51,64,0,128,56,65,108,0,192,122,64,0,144,55,65,108,0,64,6,64,0,56, | |||
4,65,99,101,0,0 }; | |||
const uint8 edit[] = { 110,109,0,16,92,65,0,0,74,62,108,0,104,69,65,0,64,206,63,108,0,168,132,65,0,80,187,64,108,0,248,143,65,0,16,142,64,108,0,16,92,65,0,0,74,62,99,109,0,200,46,65,0,160,65,64,108,0,32,28,64,0,40,56,65,108,0,208,213,64,0,16,124,65,108,0,176,114,65,0,144,232, | |||
64,108,0,200,46,65,0,160,65,64,99,109,0,192,135,63,0,56,78,65,108,0,0,160,60,0,96,145,65,108,0,176,169,64,0,12,137,65,108,0,192,135,63,0,56,78,65,99,101,0,0 }; | |||
const uint8 plus[] = { 110,109,0,128,223,64,0,0,96,188,108,0,128,223,64,64,0,96,188,108,189,230,221,64,128,185,62,188,108,210,78,220,64,128,42,233,187,108,68,185,218,64,0,32,225,184,108,23,39,217,64,0,118,25,60,108,75,153,215,64,32,88,174,60,108,223,16,214,64,192,219,17,61, | |||
108,206,142,212,64,48,71,86,61,108,16,20,211,64,64,33,146,61,108,151,161,209,64,232,205,189,61,108,79,56,208,64,152,13,238,61,108,32,217,206,64,188,96,17,62,108,235,132,205,64,232,227,45,62,108,137,60,204,64,16,126,76,62,108,204,0,203,64,160,27,109,62, | |||
108,127,210,201,64,220,211,135,62,108,98,178,200,64,30,6,154,62,108,48,161,199,64,242,24,173,62,108,148,159,198,64,38,0,193,62,108,54,174,197,64,248,174,213,62,108,176,205,196,64,52,24,235,62,108,144,254,195,64,14,151,0,63,108,92,65,195,64,76,241,11, | |||
63,108,140,150,194,64,141,147,23,63,108,142,254,193,64,98,118,35,63,108,196,121,193,64,47,146,47,63,108,129,8,193,64,52,223,59,63,108,15,171,192,64,146,85,72,63,108,169,97,192,64,81,237,84,63,108,127,44,192,64,97,158,97,63,108,178,11,192,64,164,96,110, | |||
63,108,87,255,191,64,238,43,123,63,108,0,0,192,64,0,0,128,63,108,0,0,192,64,0,0,128,63,108,0,0,192,64,0,0,192,64,108,0,0,128,63,0,0,192,64,108,0,0,128,63,0,0,192,64,108,104,51,115,63,114,4,192,64,108,176,108,102,63,92,29,192,64,108,4,180,89,63,172,74, | |||
192,64,108,136,17,77,63,71,140,192,64,108,82,141,64,63,1,226,192,64,108,100,47,52,63,165,75,193,64,108,167,255,39,63,238,200,193,64,108,232,5,28,63,140,89,194,64,108,210,73,16,63,36,253,194,64,108,229,210,4,63,76,179,195,64,108,240,80,243,62,143,123, | |||
196,64,108,96,163,221,62,110,85,197,64,108,248,170,200,62,93,64,198,64,108,38,117,180,62,197,59,199,64,108,214,14,161,62,7,71,200,64,108,112,132,142,62,118,97,201,64,108,168,195,121,62,95,138,202,64,108,148,100,88,62,3,193,203,64,108,0,1,57,62,155,4, | |||
205,64,108,0,173,27,62,89,84,206,64,108,88,123,0,62,101,175,207,64,108,224,250,206,61,226,20,209,64,108,136,134,161,61,234,131,210,64,108,128,109,113,61,147,251,211,64,108,64,75,41,61,237,122,213,64,108,32,169,213,60,2,1,215,64,108,0,197,88,60,216,140, | |||
216,64,108,0,51,56,59,115,29,218,64,108,128,212,168,187,210,177,219,64,108,128,75,46,188,242,72,221,64,108,64,94,95,188,206,225,222,64,108,128,130,103,188,98,123,224,64,108,128,179,70,188,167,20,226,64,108,0,12,250,187,151,172,227,64,108,0,148,42,186, | |||
46,66,229,64,108,128,25,16,60,102,212,230,64,108,192,111,169,60,65,98,232,64,108,240,74,15,61,190,234,233,64,108,48,154,83,61,226,108,235,64,108,224,188,144,61,183,231,236,64,108,0,92,188,61,74,90,238,64,108,136,142,236,61,173,195,239,64,108,200,154, | |||
16,62,251,34,241,64,108,188,23,45,62,82,119,242,64,108,228,171,75,62,215,191,243,64,108,172,67,108,62,186,251,244,64,108,30,101,135,62,47,42,246,64,108,188,148,153,62,118,74,247,64,108,18,165,172,62,213,91,248,64,108,232,137,192,62,159,93,249,64,108, | |||
134,54,213,62,45,79,250,64,108,176,157,234,62,230,47,251,64,108,218,88,0,63,57,255,251,64,108,58,178,11,63,163,188,252,64,108,180,83,23,63,169,103,253,64,108,216,53,35,63,222,255,253,64,108,9,81,47,63,225,132,254,64,108,138,157,59,63,94,246,254,64,108, | |||
123,19,72,63,10,84,255,64,108,228,170,84,63,170,157,255,64,108,181,91,97,63,16,211,255,64,108,209,29,110,63,25,244,255,64,108,13,233,122,63,88,0,0,65,108,254,255,127,63,0,0,0,65,108,0,0,128,63,0,0,0,65,108,0,0,192,64,0,0,0,65,108,0,0,192,64,0,0,80,65, | |||
108,0,0,192,64,0,0,80,65,108,114,4,192,64,202,204,80,65,108,92,29,192,64,53,153,81,65,108,172,74,192,64,192,100,82,65,108,70,140,192,64,232,46,83,65,108,1,226,192,64,43,247,83,65,108,164,75,193,64,10,189,84,65,108,238,200,193,64,6,128,85,65,108,140,89, | |||
194,64,161,63,86,65,108,36,253,194,64,99,251,86,65,108,75,179,195,64,210,178,87,65,108,142,123,196,64,120,101,88,65,108,109,85,197,64,229,18,89,65,108,92,64,198,64,168,186,89,65,108,196,59,199,64,87,92,90,65,108,6,71,200,64,137,247,90,65,108,117,97,201, | |||
64,220,139,91,65,108,94,138,202,64,241,24,92,65,108,2,193,203,64,109,158,92,65,108,154,4,205,64,252,27,93,65,108,87,84,206,64,76,145,93,65,108,99,175,207,64,18,254,93,65,108,224,20,209,64,10,98,94,65,108,232,131,210,64,243,188,94,65,108,145,251,211,64, | |||
146,14,95,65,108,235,122,213,64,181,86,95,65,108,0,1,215,64,43,149,95,65,108,214,140,216,64,207,201,95,65,108,113,29,218,64,125,244,95,65,108,208,177,219,64,27,21,96,65,108,240,72,221,64,147,43,96,65,108,204,225,222,64,216,55,96,65,108,96,123,224,64, | |||
225,57,96,65,108,165,20,226,64,173,49,96,65,108,149,172,227,64,66,31,96,65,108,43,66,229,64,171,2,96,65,108,100,212,230,64,250,219,95,65,108,63,98,232,64,73,171,95,65,108,187,234,233,64,182,112,95,65,108,224,108,235,64,102,44,95,65,108,181,231,236,64, | |||
135,222,94,65,108,72,90,238,64,73,135,94,65,108,172,195,239,64,228,38,94,65,108,249,34,241,64,150,189,93,65,108,80,119,242,64,162,75,93,65,108,214,191,243,64,81,209,92,65,108,184,251,244,64,242,78,92,65,108,46,42,246,64,216,196,91,65,108,116,74,247,64, | |||
91,51,91,65,108,212,91,248,64,217,154,90,65,108,158,93,249,64,178,251,89,65,108,44,79,250,64,77,86,89,65,108,230,47,251,64,19,171,88,65,108,57,255,251,64,115,250,87,65,108,163,188,252,64,220,68,87,65,108,169,103,253,64,197,138,86,65,108,223,255,253,64, | |||
162,204,85,65,108,226,132,254,64,239,10,85,65,108,94,246,254,64,39,70,84,65,108,10,84,255,64,199,126,83,65,108,171,157,255,64,80,181,82,65,108,16,211,255,64,67,234,81,65,108,25,244,255,64,33,30,81,65,108,88,0,0,65,109,81,80,65,108,0,0,0,65,0,0,80,65, | |||
108,0,0,0,65,0,0,80,65,108,0,0,0,65,0,0,0,65,108,0,0,80,65,0,0,0,65,108,0,0,80,65,0,0,0,65,108,202,204,80,65,142,251,255,64,108,53,153,81,65,164,226,255,64,108,192,100,82,65,84,181,255,64,108,232,46,83,65,185,115,255,64,108,43,247,83,65,255,29,255,64, | |||
108,10,189,84,65,92,180,254,64,108,6,128,85,65,18,55,254,64,108,162,63,86,65,116,166,253,64,108,99,251,86,65,220,2,253,64,108,210,178,87,65,181,76,252,64,108,120,101,88,65,114,132,251,64,108,229,18,89,65,147,170,250,64,108,168,186,89,65,164,191,249,64, | |||
108,87,92,90,65,60,196,248,64,108,137,247,90,65,250,184,247,64,108,220,139,91,65,139,158,246,64,108,241,24,92,65,162,117,245,64,108,109,158,92,65,254,62,244,64,108,252,27,93,65,102,251,242,64,108,76,145,93,65,169,171,241,64,108,18,254,93,65,157,80,240, | |||
64,108,10,98,94,65,32,235,238,64,108,243,188,94,65,24,124,237,64,108,146,14,95,65,111,4,236,64,108,181,86,95,65,21,133,234,64,108,43,149,95,65,0,255,232,64,108,207,201,95,65,42,115,231,64,108,125,244,95,65,143,226,229,64,108,27,21,96,65,49,78,228,64, | |||
108,147,43,96,65,17,183,226,64,108,216,55,96,65,52,30,225,64,108,225,57,96,65,160,132,223,64,108,173,49,96,65,91,235,221,64,108,66,31,96,65,107,83,220,64,108,171,2,96,65,213,189,218,64,108,250,219,95,65,156,43,217,64,108,73,171,95,65,194,157,215,64,108, | |||
182,112,95,65,69,21,214,64,108,102,44,95,65,32,147,212,64,108,135,222,94,65,75,24,211,64,108,73,135,94,65,184,165,209,64,108,228,38,94,65,84,60,208,64,108,150,189,93,65,7,221,206,64,108,162,75,93,65,176,136,205,64,108,81,209,92,65,42,64,204,64,108,242, | |||
78,92,65,72,4,203,64,108,216,196,91,65,210,213,201,64,108,91,51,91,65,139,181,200,64,108,216,154,90,65,44,164,199,64,108,178,251,89,65,98,162,198,64,108,77,86,89,65,212,176,197,64,108,19,171,88,65,27,208,196,64,108,115,250,87,65,199,0,196,64,108,221, | |||
68,87,65,94,67,195,64,108,197,138,86,65,88,152,194,64,108,163,204,85,65,34,0,194,64,108,240,10,85,65,31,123,193,64,108,40,70,84,65,163,9,193,64,108,201,126,83,65,246,171,192,64,108,82,181,82,65,86,98,192,64,108,69,234,81,65,240,44,192,64,108,35,30,81, | |||
65,231,11,192,64,108,111,81,80,65,81,255,191,64,108,0,0,80,65,0,0,192,64,108,0,0,80,65,0,0,192,64,108,0,0,0,65,0,0,192,64,108,0,0,0,65,0,0,128,63,108,0,0,0,65,0,0,128,63,108,94,251,255,64,110,51,115,63,108,70,226,255,64,205,108,102,63,108,199,180,255, | |||
64,76,180,89,63,108,254,114,255,64,13,18,77,63,108,21,29,255,64,39,142,64,63,108,68,179,254,64,154,48,52,63,108,206,53,254,64,82,1,40,63,108,4,165,253,64,26,8,28,63,108,65,1,253,64,155,76,16,63,108,239,74,252,64,87,214,4,63,108,131,130,251,64,70,89,243, | |||
62,108,124,168,250,64,72,173,221,62,108,103,189,249,64,144,182,200,62,108,217,193,248,64,140,130,180,62,108,115,182,247,64,38,30,161,62,108,226,155,246,64,200,149,142,62,108,217,114,245,64,160,234,121,62,108,22,60,244,64,4,144,88,62,108,97,248,242,64, | |||
24,49,57,62,108,136,168,241,64,236,225,27,62,108,99,77,240,64,64,181,0,62,108,207,231,238,64,240,120,207,61,108,178,120,237,64,40,15,162,61,108,246,0,236,64,96,148,114,61,108,140,129,234,64,32,136,42,61,108,104,251,232,64,160,79,216,60,108,134,111,231, | |||
64,64,109,94,60,108,225,222,229,64,0,67,80,59,108,123,74,228,64,128,17,156,187,108,85,179,226,64,128,140,39,188,108,118,26,225,64,192,64,88,188,108,225,128,223,64,0,7,96,188,108,0,128,223,64,0,0,96,188,108,0,128,223,64,0,0,96,188,99,101,0,0 }; | |||
const uint8 android[] = { 110,109,31,179,128,65,235,31,97,65,98,31,179,128,65,216,190,108,65,127,102,133,65,162,42,118,65,26,51,139,65,162,42,118,65,108,26,51,139,65,162,42,118,65,98,153,255,144,65,162,42,118,65,21,179,149,65,216,190,108,65,21,179,149,65,235,31,97,65,108,21,179, | |||
149,65,134,3,12,65,98,21,179,149,65,153,100,0,65,152,255,144,65,158,241,237,64,26,51,139,65,158,241,237,64,108,26,51,139,65,158,241,237,64,98,128,102,133,65,158,241,237,64,31,179,128,65,153,100,0,65,31,179,128,65,134,3,12,65,108,31,179,128,65,234,31, | |||
97,65,99,109,121,61,100,64,184,62,239,64,108,121,61,100,64,168,171,136,65,98,121,61,100,64,44,60,141,65,127,228,128,64,157,239,144,65,141,30,147,64,157,239,144,65,108,175,38,186,64,157,239,144,65,108,175,38,186,64,221,149,168,65,98,175,38,186,64,112, | |||
101,174,65,50,244,204,64,57,27,179,65,156,38,228,64,57,27,179,65,98,6,89,251,64,57,27,179,65,125,19,7,65,112,101,174,65,125,19,7,65,221,149,168,65,108,125,19,7,65,157,239,144,65,108,220,76,39,65,157,239,144,65,108,220,76,39,65,221,149,168,65,98,220,76, | |||
39,65,112,101,174,65,101,179,48,65,57,27,179,65,211,76,60,65,57,27,179,65,98,65,230,71,65,57,27,179,65,202,76,81,65,112,101,174,65,202,76,81,65,221,149,168,65,108,202,76,81,65,157,239,144,65,108,218,208,100,65,157,239,144,65,98,225,237,109,65,157,239, | |||
144,65,52,81,117,65,185,60,141,65,52,81,117,65,168,171,136,65,108,52,81,117,65,184,62,239,64,108,124,61,100,64,184,62,239,64,99,109,106,232,51,64,234,31,97,65,98,106,232,51,64,215,190,108,65,130,76,14,64,161,42,118,65,91,207,191,63,161,42,118,65,108, | |||
91,207,191,63,161,42,118,65,98,235,14,70,63,161,42,118,65,48,125,62,62,215,190,108,65,48,125,62,62,234,31,97,65,108,48,125,62,62,134,3,12,65,98,48,125,62,62,153,100,0,65,235,14,70,63,158,241,237,64,91,207,191,63,158,241,237,64,108,91,207,191,63,158,241, | |||
237,64,98,130,76,14,64,158,241,237,64,106,232,51,64,153,100,0,65,106,232,51,64,134,3,12,65,108,106,232,51,64,234,31,97,65,99,109,150,130,62,65,58,171,159,64,98,172,194,56,65,58,171,159,64,87,25,52,65,88,83,150,64,87,25,52,65,221,203,138,64,98,87,25,52, | |||
65,226,135,126,64,172,194,56,65,30,216,107,64,150,130,62,65,30,216,107,64,98,10,68,68,65,30,216,107,64,239,236,72,65,168,137,126,64,239,236,72,65,221,203,138,64,98,239,236,72,65,230,82,150,64,153,67,68,65,58,171,159,64,150,130,62,65,58,171,159,64,109, | |||
135,187,223,64,58,171,159,64,98,128,57,212,64,58,171,159,64,100,230,202,64,88,83,150,64,100,230,202,64,221,203,138,64,98,100,230,202,64,167,137,126,64,45,56,212,64,30,216,107,64,136,187,223,64,30,216,107,64,98,90,59,235,64,30,216,107,64,148,141,244,64, | |||
226,135,126,64,148,141,244,64,221,203,138,64,98,5,142,244,64,230,82,150,64,90,59,235,64,58,171,159,64,136,187,223,64,58,171,159,64,109,208,208,67,65,188,224,31,64,108,196,50,85,65,248,218,106,63,98,0,59,86,65,53,205,82,63,56,249,85,65,66,58,51,63,195, | |||
159,84,65,51,76,36,63,98,192,70,83,65,100,115,21,63,214,87,81,65,146,202,28,63,152,81,80,65,106,223,52,63,108,206,64,62,65,202,79,22,64,98,3,89,50,65,182,131,3,64,149,32,37,65,39,20,242,63,99,49,23,65,39,20,242,63,98,48,66,9,65,39,20,242,63,195,17,248, | |||
64,15,129,3,64,158,66,224,64,202,79,22,64,108,100,34,188,64,224,219,52,63,98,43,16,186,64,28,206,28,63,32,52,182,64,219,111,21,63,164,129,179,64,174,72,36,63,98,40,207,176,64,31,44,51,63,9,76,176,64,156,194,82,63,127,92,178,64,115,215,106,63,108,123, | |||
35,213,64,219,223,31,64,98,38,216,157,64,148,108,83,64,182,34,110,64,196,176,154,64,1,65,100,64,77,218,211,64,108,223,79,117,65,77,218,211,64,98,167,217,114,65,196,176,154,64,10,118,95,65,118,109,83,64,207,208,67,65,189,224,31,64,101,0,0 }; | |||
const uint8 codeBlocks[] = { 110,109,0,0,0,0,0,0,0,0,108,0,0,0,0,0,208,235,64,108,0,192,134,64,0,152,23,65,108,0,152,23,65,0,152,23,65,108,0,152,23,65,0,192,134,64,108,0,208,235,64,0,0,0,0,108,0,0,0,0,0,0,0,0,99,109,0,24,74,65,0,0,0,0,108,0,104,40,65,0,192,134,64,108,0,104,40,65, | |||
0,152,23,65,108,255,159,124,65,0,152,23,65,108,0,0,160,65,0,208,235,64,108,0,0,160,65,0,0,0,0,108,0,24,74,65,0,0,0,0,99,109,0,192,134,64,0,104,40,65,108,0,0,0,0,0,24,74,65,108,0,0,0,0,0,0,160,65,108,0,208,235,64,0,0,160,65,108,0,152,23,65,255,159,124, | |||
65,108,0,152,23,65,0,104,40,65,108,0,192,134,64,0,104,40,65,99,109,0,104,40,65,0,104,40,65,108,0,104,40,65,255,159,124,65,108,0,24,74,65,0,0,160,65,108,0,0,160,65,0,0,160,65,108,0,0,160,65,0,24,74,65,108,255,159,124,65,0,104,40,65,108,0,104,40,65,0,104, | |||
40,65,99,101,0,0 }; | |||
const uint8 linux[] = { 110,109,0,0,124,66,174,71,130,66,108,0,0,124,66,174,71,130,66,108,162,178,123,66,87,5,130,66,108,186,94,123,66,5,197,129,66,108,128,4,123,66,225,134,129,66,108,45,164,122,66,17,75,129,66,108,254,61,122,66,189,17,129,66,108,52,210,121,66,9,219,128,66, | |||
108,22,97,121,66,24,167,128,66,108,234,234,120,66,11,118,128,66,108,143,194,120,66,102,102,128,66,108,143,194,120,66,102,102,128,66,108,143,194,120,66,102,102,128,66,108,167,246,119,66,12,20,128,66,108,198,34,119,66,200,141,127,66,108,114,71,118,66,65, | |||
254,126,66,108,245,40,118,66,132,235,126,66,108,245,40,118,66,132,235,126,66,108,112,61,117,66,234,81,126,66,108,111,61,117,66,234,81,126,66,108,17,6,115,66,5,193,124,66,108,114,227,112,66,69,20,123,66,108,162,112,111,66,9,215,121,66,108,163,112,111, | |||
66,9,215,121,66,108,164,112,111,66,10,215,121,66,108,204,182,109,66,55,99,120,66,108,23,16,108,66,198,217,118,66,108,148,125,106,66,178,59,117,66,108,113,61,106,66,194,245,116,66,108,112,61,106,66,193,245,116,66,108,112,61,106,66,193,245,116,66,108,32, | |||
222,105,66,15,140,116,66,108,56,132,105,66,187,29,116,66,108,239,47,105,66,13,171,115,66,108,125,225,104,66,76,52,115,66,108,20,153,104,66,198,185,114,66,108,225,86,104,66,201,59,114,66,108,15,27,104,66,165,186,113,66,108,197,229,103,66,173,54,113,66, | |||
108,37,183,103,66,54,176,112,66,108,76,143,103,66,149,39,112,66,108,31,133,103,66,255,255,111,66,108,31,133,103,66,0,0,112,66,108,31,133,103,66,1,0,112,66,108,55,95,103,66,33,237,110,66,108,24,71,103,66,180,216,109,66,108,113,61,103,66,133,235,108,66, | |||
108,113,61,103,66,133,235,108,66,108,113,61,103,66,225,122,107,66,108,113,61,103,66,225,122,107,66,108,153,25,103,66,15,82,106,66,108,247,230,102,66,103,43,105,66,108,171,165,102,66,165,7,104,66,108,223,85,102,66,131,231,102,66,108,198,247,101,66,187, | |||
203,101,66,108,144,194,101,66,112,61,101,66,108,144,194,101,66,112,61,101,66,108,144,194,101,66,112,61,101,66,108,66,119,101,66,161,143,100,66,108,93,35,101,66,205,229,99,66,108,21,199,100,66,97,64,99,66,108,166,98,100,66,198,159,98,66,108,81,246,99, | |||
66,100,4,98,66,108,90,130,99,66,158,110,97,66,108,12,7,99,66,211,222,96,66,108,1,0,99,66,10,215,96,66,108,1,0,99,66,10,215,96,66,108,1,0,99,66,10,215,96,66,108,182,121,98,66,28,94,96,66,108,138,237,97,66,11,236,95,66,108,216,91,97,66,32,129,95,66,108, | |||
253,196,96,66,159,29,95,66,108,89,41,96,66,200,193,94,66,108,79,137,95,66,214,109,94,66,108,71,229,94,66,255,33,94,66,108,169,61,94,66,114,222,93,66,108,224,146,93,66,92,163,93,66,108,237,81,93,66,92,143,93,66,108,237,81,93,66,92,143,93,66,108,206,204, | |||
92,66,92,143,93,66,108,206,204,92,66,92,143,93,66,108,206,204,92,66,92,143,93,66,108,124,20,93,66,10,215,92,66,108,124,20,93,66,10,215,92,66,108,104,246,93,66,191,108,91,66,108,240,197,94,66,157,247,89,66,108,144,130,95,66,148,120,88,66,108,207,43,96, | |||
66,151,240,86,66,108,64,193,96,66,162,96,85,66,108,132,66,97,66,182,201,83,66,108,72,175,97,66,213,44,82,66,108,71,7,98,66,9,139,80,66,108,62,10,98,66,225,122,80,66,108,63,10,98,66,225,122,80,66,108,63,10,98,66,225,122,80,66,108,31,110,98,66,238,111, | |||
77,66,108,240,170,98,66,246,96,74,66,108,141,192,98,66,239,79,71,66,108,231,174,98,66,207,62,68,66,108,8,118,98,66,139,47,65,66,108,22,22,98,66,26,36,62,66,108,94,143,97,66,184,30,59,66,108,94,143,97,66,184,30,59,66,108,94,143,97,66,184,30,59,66,108, | |||
246,32,96,66,254,27,52,66,108,81,89,94,66,212,45,45,66,108,146,57,92,66,166,88,38,66,108,21,195,89,66,213,160,31,66,108,94,143,89,66,184,30,31,66,108,94,143,89,66,184,30,31,66,108,94,143,89,66,184,30,31,66,108,240,13,88,66,120,66,27,66,108,152,91,86, | |||
66,184,122,23,66,108,111,121,84,66,226,201,19,66,108,166,104,82,66,83,50,16,66,108,145,42,80,66,88,182,12,66,108,145,194,79,66,184,30,12,66,108,145,194,79,66,184,30,12,66,98,145,194,75,66,225,122,6,66,227,122,70,66,143,194,1,66,227,122,66,66,112,61,248, | |||
65,98,247,40,65,66,225,122,244,65,2,0,64,66,112,61,240,65,145,194,62,66,204,204,236,65,98,125,20,61,66,143,194,229,65,104,102,59,66,204,204,222,65,206,204,57,66,20,174,215,65,98,52,51,55,66,143,194,203,65,32,133,52,66,20,174,191,65,104,102,49,66,245, | |||
40,180,65,108,237,81,48,66,235,81,176,65,98,135,235,47,66,235,81,164,65,176,71,47,66,235,81,152,65,196,245,46,66,102,102,140,65,98,42,92,46,66,204,204,108,65,196,245,46,66,224,122,64,65,176,71,44,66,112,61,22,65,108,176,71,44,66,112,61,22,65,108,205, | |||
151,43,66,90,43,12,65,108,236,199,42,66,166,63,2,65,108,146,216,41,66,91,1,241,64,108,88,202,40,66,90,233,221,64,108,235,157,39,66,128,67,203,64,108,11,84,38,66,190,27,185,64,108,0,0,38,66,205,204,180,64,108,0,0,38,66,205,204,180,64,108,0,0,38,66,205, | |||
204,180,64,108,29,150,36,66,8,152,163,64,108,42,17,35,66,117,249,146,64,108,30,114,33,66,184,251,130,64,108,4,186,31,66,24,82,103,64,108,245,233,29,66,124,22,74,64,108,26,3,28,66,84,87,46,64,108,171,6,26,66,92,38,20,64,108,215,163,25,66,40,92,15,64,108, | |||
215,163,25,66,41,92,15,64,108,215,163,25,66,44,92,15,64,108,11,188,23,66,192,97,244,63,108,237,195,21,66,224,36,205,63,108,193,188,19,66,208,26,169,63,108,209,167,17,66,160,90,136,63,108,116,134,15,66,112,242,85,63,108,6,90,13,66,240,18,34,63,108,235, | |||
35,11,66,160,111,234,62,108,142,229,8,66,160,251,158,62,108,93,160,6,66,128,244,67,62,108,206,85,4,66,0,74,206,61,108,86,7,2,66,0,15,31,61,108,225,108,255,65,0,56,191,59,108,205,204,252,65,0,0,0,0,108,205,204,252,65,0,0,0,0,108,205,204,252,65,0,0,0,0, | |||
108,250,164,248,65,0,128,238,57,108,135,126,244,65,0,30,220,60,108,28,92,240,65,128,41,162,61,108,95,64,236,65,128,7,33,62,108,240,45,232,65,128,148,133,62,108,106,39,228,65,192,154,199,62,108,97,47,224,65,0,54,11,63,108,94,72,220,65,16,235,56,63,108, | |||
226,116,216,65,64,207,108,63,108,94,183,212,65,176,96,147,63,108,31,133,211,65,168,112,157,63,108,31,133,211,65,164,112,157,63,108,31,133,211,65,168,112,157,63,108,38,65,208,65,8,197,188,63,108,69,23,205,65,240,171,222,63,108,132,9,202,65,204,135,1,64, | |||
108,214,25,199,65,98,236,20,64,108,29,74,196,65,78,119,41,64,108,37,156,193,65,110,27,63,64,108,164,17,191,65,230,202,85,64,108,60,172,188,65,50,119,109,64,108,117,109,186,65,154,8,131,64,108,190,86,184,65,144,196,143,64,108,110,105,182,65,90,231,156, | |||
64,108,193,166,180,65,143,104,170,64,108,104,102,180,65,225,122,172,64,108,103,102,180,65,225,122,172,64,108,102,102,180,65,227,122,172,64,108,85,58,178,65,2,116,193,64,108,12,82,176,65,151,213,214,64,108,195,174,174,65,242,145,236,64,108,135,81,173, | |||
65,150,77,1,65,108,55,59,172,65,148,113,12,65,108,133,108,171,65,213,173,23,65,108,246,229,170,65,38,251,34,65,108,223,167,170,65,77,82,46,65,108,215,163,170,65,194,245,48,65,108,216,163,170,65,194,245,48,65,98,124,20,170,65,20,174,79,65,165,112,171, | |||
65,122,20,110,65,1,0,172,65,225,122,134,65,98,1,0,172,65,225,122,142,65,103,102,172,65,225,122,150,65,93,143,172,65,225,122,158,65,108,93,143,172,65,41,92,159,65,108,93,143,172,65,41,92,159,65,108,18,0,172,65,14,130,161,65,108,112,140,171,65,110,174, | |||
163,65,108,32,133,171,65,10,215,163,65,108,32,133,171,65,10,215,163,65,98,32,133,171,65,225,122,164,65,32,133,171,65,51,51,165,65,63,10,171,65,123,20,166,65,108,63,10,171,65,123,20,166,65,108,6,199,170,65,61,25,167,65,108,234,144,170,65,8,33,168,65,108, | |||
15,104,170,65,50,43,169,65,108,143,76,170,65,19,55,170,65,108,123,62,170,65,253,67,171,65,108,114,61,170,65,164,112,171,65,108,114,61,170,65,164,112,171,65,108,114,61,170,65,164,112,171,65,108,78,63,170,65,1,44,172,65,108,134,74,170,65,10,231,172,65, | |||
108,20,95,170,65,72,161,173,65,108,234,124,170,65,67,90,174,65,108,245,163,170,65,133,17,175,65,108,28,212,170,65,154,198,175,65,108,65,13,171,65,12,121,176,65,108,63,79,171,65,106,40,177,65,108,235,153,171,65,67,212,177,65,108,145,194,171,65,246,40, | |||
178,65,108,145,194,171,65,246,40,178,65,108,145,194,171,65,246,40,178,65,108,84,42,172,65,73,229,178,65,108,96,155,172,65,48,156,179,65,108,107,21,173,65,55,77,180,65,108,41,152,173,65,235,247,180,65,108,135,235,173,65,41,92,181,65,108,135,235,173,65, | |||
41,92,181,65,98,125,20,176,65,92,143,184,65,135,235,173,65,10,215,181,65,135,235,173,65,123,20,182,65,98,135,235,173,65,51,51,187,65,74,225,174,65,236,81,192,65,74,225,174,65,164,112,197,65,98,74,225,174,65,123,20,200,65,74,225,174,65,215,163,202,65, | |||
74,225,174,65,164,112,205,65,108,2,0,174,65,133,235,207,65,108,2,0,174,65,133,235,207,65,108,178,149,171,65,102,105,213,65,108,229,229,168,65,157,198,218,65,108,82,242,165,65,190,255,223,65,108,156,153,163,65,143,194,227,65,108,156,153,163,65,143,194, | |||
227,65,108,54,51,151,65,143,194,243,65,98,167,112,145,65,184,30,251,65,13,215,139,65,174,71,1,66,3,0,134,65,194,245,4,66,108,3,0,134,65,194,245,4,66,108,1,155,129,65,192,173,7,66,108,241,249,122,65,252,128,10,66,108,26,81,115,65,168,109,13,66,108,98, | |||
64,108,65,228,113,16,66,108,107,102,102,65,112,61,19,66,108,108,102,102,65,112,61,19,66,108,108,102,102,65,113,61,19,66,108,244,218,94,65,104,179,24,66,108,96,105,88,65,195,63,30,66,108,182,71,85,65,102,102,33,66,108,180,71,85,65,102,102,33,66,108,182, | |||
71,85,65,102,102,33,66,108,64,151,79,65,169,248,37,66,108,168,254,72,65,67,119,42,66,108,38,130,65,65,84,223,46,66,108,180,71,61,65,184,30,49,66,108,180,71,61,65,184,30,49,66,113,61,10,47,65,0,0,56,66,0,0,32,65,195,245,62,66,108,255,255,31,65,195,245, | |||
62,66,108,88,123,28,65,150,155,64,66,108,36,76,25,65,35,76,66,66,108,111,116,22,65,85,6,68,66,108,9,246,19,65,18,201,69,66,108,141,210,17,65,56,147,71,66,108,86,11,16,65,163,99,73,66,108,255,255,15,65,164,112,73,66,108,0,0,16,65,164,112,73,66,108,0,0, | |||
16,65,164,112,73,66,108,14,114,15,65,220,116,74,66,108,80,24,15,65,135,122,75,66,108,254,242,14,65,254,128,76,66,108,49,2,15,65,152,135,77,66,108,222,69,15,65,173,141,78,66,108,219,189,15,65,150,146,79,66,108,0,0,16,65,0,0,80,66,108,0,0,16,65,0,0,80, | |||
66,108,0,0,16,65,0,0,80,66,108,19,74,12,65,237,88,81,66,108,75,218,8,65,74,189,82,66,108,246,40,8,65,61,10,83,66,108,246,40,8,65,61,10,83,66,108,246,40,8,65,61,10,83,66,108,62,245,3,65,173,219,84,66,108,164,203,254,64,22,159,86,66,108,226,122,252,64, | |||
61,10,87,66,108,226,122,252,64,61,10,87,66,108,226,122,252,64,61,10,87,66,108,195,132,250,64,133,102,87,66,108,95,106,248,64,141,191,87,66,108,14,45,246,64,27,21,88,66,108,64,206,243,64,249,102,88,66,108,120,79,241,64,242,180,88,66,108,80,178,238,64, | |||
213,254,88,66,108,114,248,235,64,114,68,89,66,108,160,35,233,64,156,133,89,66,108,166,53,230,64,43,194,89,66,108,184,30,229,64,10,215,89,66,108,185,30,229,64,10,215,89,66,108,185,30,229,64,10,215,89,66,108,77,200,225,64,107,14,90,66,108,206,92,222,64, | |||
101,64,90,66,108,108,222,218,64,214,108,90,66,108,100,79,215,64,162,147,90,66,108,251,177,211,64,177,180,90,66,108,131,8,208,64,238,207,90,66,108,82,85,204,64,70,229,90,66,108,200,154,200,64,173,244,90,66,108,71,219,196,64,24,254,90,66,108,32,133,195, | |||
64,0,0,91,66,108,32,133,195,64,0,0,91,66,98,114,61,186,64,0,0,91,66,155,153,177,64,0,0,91,66,216,163,168,64,0,0,91,66,108,10,215,155,64,0,0,91,66,108,10,215,155,64,0,0,91,66,108,122,219,147,64,146,239,90,66,108,229,219,139,64,238,235,90,66,108,107,221, | |||
131,64,22,245,90,66,108,82,202,119,64,4,11,91,66,108,112,240,103,64,169,45,91,66,108,30,133,91,64,236,81,91,66,108,30,133,91,64,236,81,91,66,108,30,133,91,64,236,81,91,66,108,35,147,82,64,205,112,91,66,108,183,188,73,64,203,150,91,66,108,128,7,65,64, | |||
206,195,91,66,108,16,121,56,64,186,247,91,66,108,227,22,48,64,108,50,92,66,108,84,230,39,64,192,115,92,66,108,162,236,31,64,140,187,92,66,108,230,46,24,64,161,9,93,66,108,20,178,16,64,206,93,93,66,108,249,122,9,64,221,183,93,66,108,49,142,2,64,148,23, | |||
94,66,108,0,0,0,64,113,61,94,66,108,0,0,0,64,113,61,94,66,108,254,255,255,63,113,61,94,66,108,198,203,242,63,227,179,94,66,108,54,89,230,63,118,47,95,66,108,70,176,218,63,219,175,95,66,108,102,216,207,63,193,52,96,66,108,142,216,197,63,211,189,96,66, | |||
108,34,183,188,63,184,74,97,66,108,248,121,180,63,22,219,97,66,108,84,38,173,63,146,110,98,66,108,232,192,166,63,204,4,99,66,108,202,77,161,63,101,157,99,66,108,122,208,156,63,251,55,100,66,108,244,40,156,63,236,81,100,66,108,246,40,156,63,236,81,100, | |||
66,108,244,40,156,63,236,81,100,66,108,112,165,150,63,151,120,101,66,108,248,250,146,63,25,161,102,66,108,224,43,145,63,178,202,103,66,108,84,57,145,63,166,244,104,66,108,72,35,147,63,53,30,106,66,108,224,122,148,63,154,153,106,66,108,226,122,148,63, | |||
154,153,106,66,98,226,122,148,63,93,143,108,66,1,0,160,63,154,153,110,66,103,102,166,63,103,102,112,66,98,205,204,172,63,52,51,114,66,62,10,183,63,1,0,117,66,72,225,186,63,236,81,119,66,108,72,225,186,63,236,81,119,66,108,92,185,189,63,144,183,120,66, | |||
108,136,84,190,63,228,29,122,66,108,108,178,188,63,4,132,123,66,108,20,212,184,63,10,233,124,66,108,248,187,178,63,18,76,126,66,108,0,110,170,63,56,172,127,66,108,124,239,159,63,78,132,128,66,108,36,71,147,63,47,48,129,66,108,196,245,136,63,246,168,129, | |||
66,108,195,245,136,63,246,168,129,66,98,144,194,117,63,51,51,130,66,226,122,84,63,82,184,130,66,52,51,51,63,113,61,131,66,108,48,51,51,63,113,61,131,66,108,192,247,250,62,153,19,132,66,108,128,95,154,62,218,238,132,66,108,128,194,117,62,113,61,133,66, | |||
108,146,194,117,62,113,61,133,66,108,144,194,117,62,113,61,133,66,108,0,106,59,62,41,137,133,66,108,176,181,8,62,62,214,133,66,108,0,140,187,61,126,36,134,66,108,0,218,106,61,185,115,134,66,108,0,236,252,60,186,195,134,66,108,0,200,72,60,78,20,135,66, | |||
108,0,208,199,58,68,101,135,66,108,0,0,0,0,225,122,135,66,108,0,0,0,0,225,122,135,66,108,0,0,128,52,225,122,135,66,108,0,232,222,186,244,179,135,66,108,0,92,14,59,0,237,135,66,108,0,51,62,60,225,37,136,66,108,0,203,217,60,114,94,136,66,108,64,200,64, | |||
61,142,150,136,66,108,192,127,149,61,18,206,136,66,108,160,163,213,61,219,4,137,66,108,96,83,16,62,197,58,137,66,108,144,44,59,62,173,111,137,66,108,240,65,107,62,115,163,137,66,108,92,58,144,62,244,213,137,66,108,160,153,153,62,102,230,137,66,108,154, | |||
153,153,62,102,230,137,66,108,152,153,153,62,102,230,137,66,108,128,201,188,62,40,28,138,66,108,244,157,226,62,22,80,138,66,108,96,127,5,63,16,130,138,66,108,2,233,26,63,245,177,138,66,108,50,126,49,63,167,223,138,66,108,122,48,73,63,9,11,139,66,108, | |||
180,240,97,63,254,51,139,66,108,6,175,123,63,109,90,139,66,108,127,45,139,63,60,126,139,66,108,193,241,152,63,86,159,139,66,108,124,27,167,63,165,189,139,66,108,160,161,181,63,21,217,139,66,108,166,112,189,63,102,230,139,66,108,164,112,189,63,102,230, | |||
139,66,108,160,112,189,63,102,230,139,66,108,93,221,217,63,63,24,140,66,108,118,224,246,63,90,68,140,66,108,173,51,10,64,154,106,140,66,108,146,47,25,64,230,138,140,66,108,30,133,27,64,92,143,140,66,108,31,133,27,64,92,143,140,66,108,52,51,51,64,143, | |||
194,140,66,98,185,30,85,64,61,10,141,66,62,10,119,64,102,102,141,66,226,122,140,64,112,189,141,66,108,195,245,176,64,194,117,142,66,98,0,0,216,64,51,51,143,66,246,40,0,65,143,194,143,66,21,174,19,65,235,81,144,66,108,21,174,19,65,234,81,144,66,108,82, | |||
132,47,65,96,26,145,66,108,129,1,75,65,27,15,146,66,108,12,20,102,65,126,47,147,66,108,246,40,104,65,174,71,147,66,108,246,40,104,65,174,71,147,66,108,246,40,120,65,123,20,148,66,108,246,40,120,65,123,20,148,66,108,56,114,127,65,31,126,148,66,108,178, | |||
113,131,65,250,219,148,66,108,218,59,135,65,208,45,149,66,108,39,21,139,65,109,115,149,66,108,36,251,142,65,163,172,149,66,108,82,235,146,65,79,217,149,66,108,44,227,150,65,84,249,149,66,108,255,255,151,65,0,0,150,66,108,0,0,152,65,0,0,150,66,108,61, | |||
10,153,65,0,0,150,66,108,61,10,153,65,0,0,150,66,108,250,95,155,65,252,251,149,66,108,42,180,157,65,130,240,149,66,108,80,5,160,65,152,221,149,66,108,240,81,162,65,75,195,149,66,108,146,152,164,65,172,161,149,66,108,192,215,166,65,208,120,149,66,108, | |||
12,14,169,65,209,72,149,66,108,10,58,171,65,206,17,149,66,108,86,90,173,65,234,211,148,66,108,150,109,175,65,77,143,148,66,108,0,0,176,65,225,122,148,66,108,0,0,176,65,225,122,148,66,108,255,255,175,65,225,122,148,66,108,111,241,177,65,153,45,148,66, | |||
108,204,210,179,65,50,218,147,66,108,226,162,181,65,226,128,147,66,108,138,96,183,65,226,33,147,66,108,164,10,185,65,111,189,146,66,108,34,160,186,65,201,83,146,66,108,255,31,188,65,52,229,145,66,108,70,137,189,65,247,113,145,66,108,15,219,190,65,91, | |||
250,144,66,108,130,20,192,65,172,126,144,66,108,50,51,193,65,0,0,144,66,108,51,51,193,65,0,0,144,66,108,51,51,193,65,0,0,144,66,108,251,51,194,65,179,122,143,66,108,204,25,195,65,92,242,142,66,108,16,228,195,65,81,103,142,66,108,102,102,196,65,0,0,142, | |||
66,108,102,102,196,65,0,0,142,66,108,101,102,196,65,0,0,142,66,108,43,217,202,65,102,147,142,66,108,88,103,209,65,253,17,143,66,108,187,12,216,65,115,123,143,66,108,19,197,222,65,133,207,143,66,108,20,140,229,65,254,13,144,66,108,102,93,236,65,181,54, | |||
144,66,108,174,52,243,65,144,73,144,66,108,163,112,249,65,174,71,144,66,108,164,112,249,65,174,71,144,66,108,163,112,249,65,174,71,144,66,108,49,249,255,65,182,40,144,66,108,187,60,3,66,225,244,143,66,108,166,118,6,66,82,172,143,66,108,71,168,9,66,54, | |||
79,143,66,108,148,207,12,66,201,221,142,66,108,137,234,15,66,84,88,142,66,108,40,247,18,66,44,191,141,66,108,174,71,19,66,20,174,141,66,108,174,71,19,66,20,174,141,66,98,174,71,23,66,225,250,141,66,174,71,27,66,102,102,142,66,174,71,31,66,10,215,142, | |||
66,98,123,20,31,66,71,225,143,66,133,235,30,66,164,240,144,66,133,235,30,66,30,5,146,66,108,133,235,30,66,30,5,146,66,108,117,229,30,66,57,150,146,66,108,232,237,30,66,76,39,147,66,108,218,4,31,66,251,183,147,66,108,58,42,31,66,232,71,148,66,108,241, | |||
93,31,66,185,214,148,66,108,222,159,31,66,17,100,149,66,108,215,239,31,66,150,239,149,66,108,169,77,32,66,239,120,150,66,108,23,185,32,66,196,255,150,66,108,221,49,33,66,190,131,151,66,108,174,183,33,66,137,4,152,66,108,82,184,33,66,30,5,152,66,108,82, | |||
184,33,66,30,5,152,66,108,82,184,33,66,30,5,152,66,108,228,84,34,66,184,113,152,66,108,30,252,34,66,69,218,152,66,108,151,173,35,66,131,62,153,66,108,220,104,36,66,49,158,153,66,108,117,45,37,66,19,249,153,66,108,229,250,37,66,238,78,154,66,108,168,208, | |||
38,66,139,159,154,66,108,54,174,39,66,183,234,154,66,108,0,147,40,66,65,48,155,66,108,117,126,41,66,254,111,155,66,108,253,111,42,66,196,169,155,66,108,254,102,43,66,110,221,155,66,108,225,122,43,66,71,225,155,66,108,225,122,43,66,71,225,155,66,108,225, | |||
122,43,66,71,225,155,66,108,65,231,44,66,120,46,156,66,108,228,90,46,66,118,114,156,66,108,221,212,47,66,21,173,156,66,108,56,84,49,66,46,222,156,66,108,1,216,50,66,164,5,157,66,108,64,95,52,66,92,35,157,66,108,250,232,53,66,68,55,157,66,108,51,116,55, | |||
66,78,65,157,66,108,123,20,56,66,143,66,157,66,108,123,20,56,66,143,66,157,66,108,123,20,56,66,143,66,157,66,108,191,99,57,66,126,63,157,66,108,74,178,58,66,14,52,157,66,108,70,255,59,66,68,32,157,66,108,123,20,60,66,184,30,157,66,108,123,20,60,66,184, | |||
30,157,66,108,123,20,60,66,184,30,157,66,108,84,127,61,66,218,252,156,66,108,86,230,62,66,246,209,156,66,108,155,72,64,66,39,158,156,66,108,66,165,65,66,142,97,156,66,108,106,251,66,66,83,28,156,66,108,57,74,68,66,160,206,155,66,108,217,144,69,66,169, | |||
120,155,66,108,120,206,70,66,163,26,155,66,108,76,2,72,66,204,180,154,66,108,205,204,72,66,133,107,154,66,108,205,204,72,66,133,107,154,66,108,204,204,72,66,133,107,154,66,108,101,58,75,66,36,101,153,66,108,253,140,77,66,142,79,152,66,108,24,195,79,66, | |||
118,43,151,66,108,0,0,80,66,60,10,151,66,108,0,0,80,66,61,10,151,66,108,205,204,81,66,245,40,150,66,108,206,204,81,66,245,40,150,66,108,148,110,84,66,162,238,148,66,108,237,46,87,66,138,197,147,66,108,23,12,90,66,106,174,146,66,108,1,0,92,66,0,0,146, | |||
66,108,0,0,92,66,0,0,146,66,108,0,0,92,66,0,0,146,66,108,198,218,96,66,44,146,144,66,108,145,216,101,66,220,67,143,66,108,92,143,104,66,184,158,142,66,108,92,143,104,66,184,158,142,66,108,194,245,109,66,174,71,141,66,108,194,245,109,66,174,71,141,66, | |||
108,98,121,111,66,194,235,140,66,108,86,243,112,66,68,134,140,66,108,171,98,114,66,117,23,140,66,108,120,198,115,66,155,159,139,66,108,216,29,117,66,3,31,139,66,108,239,103,118,66,0,150,138,66,108,234,163,119,66,233,4,138,66,108,0,209,120,66,26,108,137, | |||
66,108,122,20,121,66,174,71,137,66,108,122,20,121,66,174,71,137,66,108,122,20,121,66,174,71,137,66,108,43,188,121,66,81,223,136,66,108,55,89,122,66,228,114,136,66,108,59,235,122,66,173,2,136,66,108,217,113,123,66,244,142,135,66,108,186,236,123,66,3,24, | |||
135,66,108,145,91,124,66,37,158,134,66,108,153,153,124,66,235,81,134,66,108,153,153,124,66,235,81,134,66,108,153,153,124,66,184,30,134,66,108,153,153,124,66,184,30,134,66,108,20,189,124,66,153,218,133,66,108,181,217,124,66,173,149,133,66,108,104,239, | |||
124,66,32,80,133,66,108,34,254,124,66,31,10,133,66,108,215,5,125,66,213,195,132,66,108,130,6,125,66,113,125,132,66,108,37,0,125,66,31,55,132,66,108,194,242,124,66,12,241,131,66,108,98,222,124,66,101,171,131,66,108,18,195,124,66,87,102,131,66,108,228, | |||
160,124,66,14,34,131,66,108,238,119,124,66,181,222,130,66,108,73,72,124,66,119,156,130,66,108,21,18,124,66,128,91,130,66,108,0,0,124,66,174,71,130,66,108,0,0,124,66,174,71,130,66,99,109,123,20,252,65,174,71,77,65,108,122,20,252,65,174,71,77,65,108,97, | |||
172,252,65,253,78,74,65,108,25,87,253,65,111,102,71,65,108,54,20,254,65,223,143,68,65,108,63,227,254,65,31,205,65,65,108,175,195,255,65,242,31,63,65,108,123,90,0,66,17,138,60,65,108,61,219,0,66,33,13,58,65,108,204,99,1,66,186,170,55,65,108,207,243,1, | |||
66,100,100,53,65,108,234,138,2,66,146,59,51,65,108,190,40,3,66,166,49,49,65,108,229,204,3,66,240,71,47,65,108,113,61,4,66,123,20,46,65,108,113,61,4,66,123,20,46,65,108,113,61,4,66,123,20,46,65,108,140,172,4,66,19,221,44,65,108,103,31,5,66,69,188,43,65, | |||
108,186,149,5,66,202,178,42,65,108,56,15,6,66,75,193,41,65,108,147,139,6,66,100,232,40,65,108,62,10,7,66,246,40,40,65,108,62,10,7,66,246,40,40,65,108,62,10,7,66,246,40,40,65,108,118,129,7,66,108,116,39,65,108,201,250,7,66,243,215,38,65,108,233,117,8, | |||
66,236,83,38,65,108,137,242,8,66,173,232,37,65,108,88,112,9,66,123,150,37,65,108,5,239,9,66,137,93,37,65,108,64,110,10,66,253,61,37,65,108,183,237,10,66,234,55,37,65,108,25,109,11,66,85,75,37,65,108,20,236,11,66,49,120,37,65,108,87,106,12,66,98,190,37, | |||
65,108,164,112,12,66,144,194,37,65,108,164,112,12,66,144,194,37,65,108,164,112,12,66,144,194,37,65,108,141,4,13,66,57,25,38,65,108,49,151,13,66,88,141,38,65,108,51,40,14,66,163,30,39,65,108,54,183,14,66,189,204,39,65,108,223,67,15,66,54,151,40,65,108, | |||
211,205,15,66,141,125,41,65,108,185,84,16,66,46,127,42,65,108,61,216,16,66,118,155,43,65,108,9,88,17,66,172,209,44,65,108,31,133,17,66,175,71,45,65,108,31,133,17,66,175,71,45,65,108,30,133,17,66,175,71,45,65,108,101,50,18,66,126,58,47,65,108,56,217,18, | |||
66,82,79,49,65,108,45,121,19,66,213,132,51,65,108,222,17,20,66,158,217,53,65,108,234,162,20,66,46,76,56,65,108,243,43,21,66,245,218,58,65,108,162,172,21,66,80,132,61,65,108,164,36,22,66,139,70,64,65,108,173,147,22,66,225,31,67,65,108,117,249,22,66,129, | |||
14,70,65,108,188,85,23,66,137,16,73,65,108,70,168,23,66,14,36,76,65,108,222,240,23,66,23,71,79,65,108,0,0,24,66,0,0,80,65,108,0,0,24,66,0,0,80,65,108,0,0,24,66,255,255,79,65,108,218,94,24,66,146,247,84,65,108,177,173,24,66,131,0,90,65,108,84,236,24,66, | |||
156,23,95,65,108,156,26,25,66,153,57,100,65,108,105,56,25,66,50,99,105,65,108,170,69,25,66,26,145,110,65,108,85,66,25,66,0,192,115,65,108,51,51,25,66,255,255,119,65,108,51,51,25,66,0,0,120,65,108,51,51,25,66,0,0,120,65,108,99,20,25,66,24,81,124,65,108, | |||
206,231,24,66,83,77,128,65,108,144,173,24,66,246,108,130,65,108,208,101,24,66,24,134,132,65,108,185,16,24,66,98,151,134,65,108,0,0,24,66,195,245,134,65,108,0,0,24,66,195,245,134,65,108,205,204,22,66,21,174,133,65,108,205,204,22,66,21,174,133,65,108,150, | |||
213,21,66,205,229,132,65,108,174,217,20,66,124,54,132,65,108,181,217,19,66,144,160,131,65,108,236,81,19,66,41,92,131,65,108,236,81,19,66,41,92,131,65,108,235,81,19,66,41,92,131,65,108,78,142,19,66,151,207,130,65,108,25,199,19,66,40,61,130,65,108,42,252, | |||
19,66,59,165,129,65,108,255,255,19,66,154,153,129,65,108,0,0,20,66,154,153,129,65,108,0,0,20,66,154,153,129,65,108,234,53,20,66,165,195,128,65,108,105,102,20,66,33,209,127,65,108,95,145,20,66,210,17,126,65,108,177,182,20,66,124,74,124,65,108,70,214,20, | |||
66,65,124,122,65,108,11,240,20,66,74,168,120,65,108,238,3,21,66,194,207,118,65,108,228,17,21,66,216,243,116,65,108,123,20,21,66,226,122,116,65,108,123,20,21,66,226,122,116,65,108,123,20,21,66,226,122,116,65,108,18,38,21,66,122,86,114,65,108,201,48,21, | |||
66,61,47,112,65,108,153,52,21,66,140,6,110,65,108,129,49,21,66,201,221,107,65,108,129,39,21,66,85,182,105,65,108,160,22,21,66,145,145,103,65,108,234,254,20,66,220,112,101,65,108,108,224,20,66,148,85,99,65,108,60,187,20,66,16,65,97,65,108,112,143,20,66, | |||
166,52,95,65,108,37,93,20,66,165,49,93,65,108,122,36,20,66,87,57,91,65,108,0,0,20,66,123,20,90,65,108,0,0,20,66,123,20,90,65,108,0,0,20,66,123,20,90,65,108,160,200,19,66,144,107,88,65,108,3,140,19,66,63,206,86,65,108,80,74,19,66,144,61,85,65,108,175, | |||
3,19,66,131,186,83,65,108,80,184,18,66,17,70,82,65,108,97,104,18,66,40,225,80,65,108,22,20,18,66,172,140,79,65,108,164,187,17,66,119,73,78,65,108,70,95,17,66,87,24,77,65,108,53,255,16,66,17,250,75,65,108,174,155,16,66,90,239,74,65,108,243,52,16,66,223, | |||
248,73,65,108,68,203,15,66,60,23,73,65,108,229,94,15,66,2,75,72,65,108,51,51,15,66,0,0,72,65,108,51,51,15,66,0,0,72,65,108,51,51,15,66,0,0,72,65,108,163,196,14,66,176,150,71,65,108,230,84,14,66,155,67,71,65,108,67,228,13,66,248,6,71,65,108,3,115,13,66, | |||
237,224,70,65,108,108,1,13,66,146,209,70,65,108,201,143,12,66,241,216,70,65,108,102,102,12,66,72,225,70,65,108,102,102,12,66,72,225,70,65,108,102,102,12,66,72,225,70,65,108,102,17,12,66,18,6,71,65,108,247,188,11,66,207,59,71,65,108,79,105,11,66,91,130, | |||
71,65,108,164,22,11,66,138,217,71,65,108,41,197,10,66,36,65,72,65,108,21,117,10,66,232,184,72,65,108,152,38,10,66,135,64,73,65,108,231,217,9,66,171,215,73,65,108,50,143,9,66,244,125,74,65,108,102,102,9,66,72,225,74,65,108,102,102,9,66,72,225,74,65,108, | |||
102,102,9,66,72,225,74,65,108,162,21,9,66,94,193,75,65,108,196,199,8,66,82,177,76,65,108,255,124,8,66,138,176,77,65,108,130,53,8,66,99,190,78,65,108,123,241,7,66,48,218,79,65,108,22,177,7,66,60,3,81,65,108,123,116,7,66,201,56,82,65,108,210,59,7,66,17, | |||
122,83,65,108,51,51,7,66,21,174,83,65,108,51,51,7,66,21,174,83,65,108,51,51,7,66,22,174,83,65,108,212,232,6,66,166,142,85,65,108,142,164,6,66,122,125,87,65,108,140,102,6,66,86,121,89,65,108,247,46,6,66,246,128,91,65,108,242,253,5,66,11,147,93,65,108, | |||
156,211,5,66,68,174,95,65,108,16,176,5,66,71,209,97,65,108,101,147,5,66,182,250,99,65,108,174,125,5,66,48,41,102,65,108,248,110,5,66,78,91,104,65,108,77,103,5,66,169,143,106,65,108,102,102,5,66,52,51,107,65,108,102,102,5,66,52,51,107,65,108,102,102,5, | |||
66,52,51,107,65,108,201,97,5,66,79,71,109,65,108,212,99,5,66,172,91,111,65,108,102,102,5,66,247,40,112,65,108,102,102,5,66,247,40,112,65,108,0,0,4,66,205,204,108,65,108,0,0,4,66,205,204,108,65,108,187,82,2,66,125,71,105,65,108,189,154,0,66,31,25,102, | |||
65,108,60,178,253,65,188,67,99,65,108,184,30,251,65,164,112,97,65,108,184,30,251,65,164,112,97,65,108,184,30,251,65,164,112,97,65,108,183,30,251,65,164,112,97,65,108,172,11,251,65,169,113,94,65,108,209,11,251,65,189,113,91,65,108,39,31,251,65,202,114, | |||
88,65,108,162,69,251,65,188,118,85,65,108,40,127,251,65,122,127,82,65,108,148,203,251,65,235,142,79,65,108,122,20,252,65,174,71,77,65,108,123,20,252,65,174,71,77,65,99,109,225,122,25,66,51,51,169,65,98,225,122,25,66,123,20,170,65,112,61,25,66,61,10,171, | |||
65,245,40,25,66,133,235,171,65,108,245,40,25,66,184,30,173,65,108,246,40,25,66,184,30,173,65,108,47,38,25,66,221,211,173,65,108,226,30,25,66,129,136,174,65,108,20,19,25,66,48,60,175,65,108,204,2,25,66,119,238,175,65,108,21,238,24,66,229,158,176,65,108, | |||
252,212,24,66,9,77,177,65,108,145,183,24,66,115,248,177,65,108,153,153,24,66,92,143,178,65,108,153,153,24,66,92,143,178,65,108,153,153,24,66,92,143,178,65,108,153,117,24,66,90,5,179,65,108,178,78,24,66,154,119,179,65,108,253,36,24,66,210,229,179,65,108, | |||
148,248,23,66,187,79,180,65,108,147,201,23,66,18,181,180,65,108,25,152,23,66,149,21,181,65,108,70,100,23,66,8,113,181,65,108,58,46,23,66,47,199,181,65,108,25,246,22,66,212,23,182,65,108,5,188,22,66,195,98,182,65,108,37,128,22,66,203,167,182,65,108,158, | |||
66,22,66,193,230,182,65,108,152,3,22,66,125,31,183,65,108,133,235,21,66,51,51,183,65,108,133,235,21,66,51,51,183,65,108,133,235,21,66,51,51,183,65,108,114,47,21,66,55,213,183,65,108,143,111,20,66,59,100,184,65,108,205,204,19,66,205,204,184,65,108,205, | |||
204,19,66,205,204,184,65,108,21,174,18,66,31,133,185,65,108,21,174,18,66,32,133,185,65,108,161,49,17,66,173,224,186,65,108,86,190,15,66,210,97,188,65,108,34,85,14,66,154,7,190,65,108,236,246,12,66,246,208,191,65,108,148,164,11,66,192,188,193,65,108,242, | |||
94,10,66,192,201,195,65,108,52,51,10,66,124,20,196,65,108,52,51,10,66,123,20,196,65,108,52,51,10,66,122,20,196,65,108,234,10,8,66,16,102,199,65,108,21,206,5,66,96,127,202,65,108,52,51,5,66,174,71,203,65,108,52,51,5,66,174,71,203,65,108,52,51,5,66,174, | |||
71,203,65,108,48,213,3,66,229,218,204,65,108,136,109,2,66,158,74,206,65,108,36,253,0,66,238,149,207,65,108,218,9,255,65,0,188,208,65,108,172,11,252,65,26,188,209,65,108,73,225,250,65,123,20,210,65,108,73,225,250,65,123,20,210,65,108,72,225,250,65,123, | |||
20,210,65,108,49,184,248,65,11,190,210,65,108,81,135,246,65,192,75,211,65,108,16,80,244,65,64,189,211,65,108,216,19,242,65,66,18,212,65,108,23,212,239,65,142,74,212,65,108,62,146,237,65,3,102,212,65,108,191,79,235,65,141,100,212,65,108,11,14,233,65,46, | |||
70,212,65,108,215,163,232,65,112,61,212,65,108,216,163,232,65,113,61,212,65,108,216,163,232,65,113,61,212,65,108,25,49,231,65,85,23,212,65,108,185,192,229,65,190,222,211,65,108,163,83,228,65,208,147,211,65,108,192,234,226,65,187,54,211,65,108,248,134, | |||
225,65,186,199,210,65,108,46,41,224,65,21,71,210,65,108,65,210,222,65,29,181,209,65,108,14,131,221,65,48,18,209,65,108,107,60,220,65,183,94,208,65,108,41,255,218,65,36,155,207,65,108,247,40,218,65,62,10,207,65,108,247,40,218,65,62,10,207,65,108,247,40, | |||
218,65,62,10,207,65,108,196,164,216,65,45,219,205,65,108,50,48,215,65,22,153,204,65,108,48,204,213,65,200,68,203,65,108,163,121,212,65,27,223,201,65,108,98,57,211,65,245,104,200,65,108,247,40,210,65,62,10,199,65,108,247,40,210,65,62,10,199,65,108,247, | |||
40,210,65,62,10,199,65,108,75,195,212,65,247,139,199,65,108,71,99,215,65,57,236,199,65,108,59,7,218,65,198,42,200,65,108,42,92,219,65,113,61,200,65,108,42,92,219,65,113,61,200,65,108,175,71,221,65,113,61,200,65,108,175,71,221,65,113,61,200,65,108,238, | |||
138,226,65,26,4,200,65,108,161,201,231,65,129,135,199,65,108,107,0,237,65,244,199,198,65,108,185,30,241,65,0,0,198,65,108,185,30,241,65,0,0,198,65,108,185,30,241,65,0,0,198,65,108,16,91,246,65,184,223,196,65,108,83,135,251,65,208,124,195,65,108,24,80, | |||
0,66,42,216,193,65,108,72,225,0,66,164,112,193,65,108,72,225,0,66,164,112,193,65,108,72,225,0,66,164,112,193,65,108,53,27,3,66,175,118,191,65,108,199,71,5,66,100,68,189,65,108,154,101,7,66,42,219,186,65,108,84,115,9,66,142,60,184,65,108,162,111,11,66, | |||
58,106,181,65,108,92,143,12,66,21,174,179,65,108,92,143,12,66,21,174,179,65,98,10,215,13,66,21,174,177,65,61,10,15,66,21,174,175,65,92,143,16,66,175,71,173,65,108,215,163,17,66,42,92,171,65,108,215,163,17,66,42,92,171,65,108,184,30,18,66,42,92,171,65, | |||
108,184,30,18,66,42,92,171,65,108,111,144,18,66,208,121,171,65,108,191,2,19,66,15,140,171,65,108,95,117,19,66,218,146,171,65,108,6,232,19,66,47,142,171,65,108,107,90,20,66,15,126,171,65,108,67,204,20,66,132,98,171,65,108,71,225,20,66,42,92,171,65,108, | |||
71,225,20,66,42,92,171,65,108,71,225,20,66,42,92,171,65,108,226,88,21,66,177,78,171,65,108,1,208,21,66,71,53,171,65,108,87,70,22,66,253,15,171,65,108,152,187,22,66,235,222,170,65,108,122,47,23,66,48,162,170,65,108,91,143,23,66,103,102,170,65,108,91,143, | |||
23,66,103,102,170,65,108,91,143,23,66,103,102,170,65,108,188,240,23,66,89,63,170,65,108,4,81,24,66,155,14,170,65,108,246,175,24,66,78,212,169,65,108,84,13,25,66,149,144,169,65,108,227,104,25,66,157,67,169,65,108,225,122,25,66,51,51,169,65,108,225,122, | |||
25,66,51,51,169,65,99,109,122,20,188,65,102,102,74,65,108,122,20,188,65,102,102,74,65,108,63,115,188,65,241,81,72,65,108,52,223,188,65,159,71,70,65,108,21,88,189,65,191,72,68,65,108,146,221,189,65,151,86,66,65,108,88,111,190,65,103,114,64,65,108,10,13, | |||
191,65,100,157,62,65,108,64,182,191,65,186,216,60,65,108,145,106,192,65,139,37,59,65,108,136,41,193,65,237,132,57,65,108,20,174,193,65,225,122,56,65,108,20,174,193,65,225,122,56,65,108,20,174,193,65,225,122,56,65,108,112,72,194,65,192,109,55,65,108,85, | |||
233,194,65,100,112,54,65,108,90,144,195,65,110,131,53,65,108,23,61,196,65,117,167,52,65,108,27,239,196,65,7,221,51,65,108,245,165,197,65,166,36,51,65,108,49,97,198,65,198,126,50,65,108,85,32,199,65,210,235,49,65,108,233,226,199,65,41,108,49,65,108,111, | |||
168,200,65,28,0,49,65,108,105,112,201,65,239,167,48,65,108,87,58,202,65,220,99,48,65,108,184,5,203,65,14,52,48,65,108,174,71,203,65,246,40,48,65,108,174,71,203,65,246,40,48,65,108,174,71,203,65,246,40,48,65,108,163,71,204,65,98,35,48,65,108,106,71,205, | |||
65,101,55,48,65,108,96,70,206,65,244,100,48,65,108,224,67,207,65,239,171,48,65,108,73,63,208,65,43,12,49,65,108,250,55,209,65,106,133,49,65,108,83,45,210,65,94,23,50,65,108,185,30,211,65,169,193,50,65,108,174,71,211,65,72,225,50,65,108,174,71,211,65, | |||
72,225,50,65,108,174,71,211,65,72,225,50,65,108,201,59,212,65,104,224,51,65,108,54,41,213,65,157,247,52,65,108,93,15,214,65,52,38,54,65,108,170,237,214,65,108,107,55,65,108,144,195,215,65,117,198,56,65,108,133,144,216,65,112,54,58,65,108,7,84,217,65, | |||
114,186,59,65,108,20,174,217,65,226,122,60,65,108,20,174,217,65,226,122,60,65,108,20,174,217,65,226,122,60,65,108,215,224,218,65,68,64,63,65,108,126,1,220,65,107,35,66,65,108,80,15,221,65,129,34,69,65,108,160,9,222,65,154,59,72,65,108,207,239,222,65, | |||
186,108,75,65,108,72,193,223,65,215,179,78,65,108,134,125,224,65,216,14,82,65,108,17,36,225,65,151,123,85,65,108,20,174,225,65,206,204,88,65,108,20,174,225,65,206,204,88,65,108,20,174,225,65,206,204,88,65,108,158,80,226,65,50,35,93,65,108,53,215,226, | |||
65,114,136,97,65,108,131,65,227,65,190,249,101,65,108,30,133,227,65,144,194,105,65,108,30,133,227,65,144,194,105,65,108,30,133,227,65,143,194,105,65,108,236,159,224,65,220,221,106,65,108,188,194,221,65,228,66,108,65,108,98,239,218,65,196,240,109,65,108, | |||
225,122,218,65,112,61,110,65,108,225,122,218,65,113,61,110,65,108,225,122,218,65,114,61,110,65,108,76,52,218,65,105,98,108,65,108,239,225,217,65,7,143,106,65,108,254,131,217,65,118,196,104,65,108,181,26,217,65,219,3,103,65,108,88,166,216,65,87,78,101, | |||
65,108,50,39,216,65,255,164,99,65,108,146,157,215,65,230,8,98,65,108,211,9,215,65,18,123,96,65,108,82,108,214,65,130,252,94,65,108,116,197,213,65,43,142,93,65,108,164,21,213,65,247,48,92,65,108,82,184,212,65,32,133,91,65,108,82,184,212,65,31,133,91,65, | |||
108,82,184,212,65,31,133,91,65,108,193,79,212,65,53,205,90,65,108,184,226,211,65,251,31,90,65,108,126,113,211,65,222,125,89,65,108,91,252,210,65,70,231,88,65,108,154,131,210,65,147,92,88,65,108,137,7,210,65,31,222,87,65,108,118,136,209,65,59,108,87,65, | |||
108,180,6,209,65,46,7,87,65,108,148,130,208,65,59,175,86,65,108,0,0,208,65,102,102,86,65,108,0,0,208,65,102,102,86,65,108,0,0,208,65,102,102,86,65,108,182,156,207,65,101,52,86,65,108,76,56,207,65,98,12,86,65,108,2,211,206,65,116,238,85,65,108,24,109, | |||
206,65,177,218,85,65,108,209,6,206,65,35,209,85,65,108,110,160,205,65,210,209,85,65,108,47,58,205,65,188,220,85,65,108,87,212,204,65,220,241,85,65,108,39,111,204,65,34,17,86,65,108,223,10,204,65,125,58,86,65,108,192,167,203,65,208,109,86,65,108,9,70, | |||
203,65,250,170,86,65,108,249,229,202,65,214,241,86,65,108,205,135,202,65,54,66,87,65,108,192,43,202,65,229,155,87,65,108,16,210,201,65,172,254,87,65,108,243,122,201,65,73,106,88,65,108,163,38,201,65,122,222,88,65,108,86,213,200,65,243,90,89,65,108,62, | |||
135,200,65,100,223,89,65,108,143,60,200,65,122,107,90,65,108,120,245,199,65,217,254,90,65,108,38,178,199,65,37,153,91,65,108,197,114,199,65,250,57,92,65,108,126,55,199,65,241,224,92,65,108,117,0,199,65,160,141,93,65,108,207,205,198,65,152,63,94,65,108, | |||
171,159,198,65,103,246,94,65,108,40,118,198,65,152,177,95,65,108,102,102,198,65,0,0,96,65,108,102,102,198,65,0,0,96,65,108,102,102,198,65,0,0,96,65,108,144,244,197,65,64,200,97,65,108,70,142,197,65,78,155,99,65,108,200,51,197,65,1,120,101,65,108,81,229, | |||
196,65,39,93,103,65,108,19,163,196,65,138,73,105,65,108,55,109,196,65,238,59,107,65,108,102,102,196,65,31,133,107,65,108,102,102,196,65,31,133,107,65,108,102,102,196,65,31,133,107,65,108,134,60,196,65,250,111,110,65,108,94,37,196,65,22,94,113,65,108, | |||
252,32,196,65,146,77,116,65,108,99,47,196,65,142,60,119,65,108,137,80,196,65,42,41,122,65,108,102,102,196,65,31,133,123,65,108,102,102,196,65,31,133,123,65,108,102,102,196,65,31,133,123,65,108,118,131,196,65,16,140,125,65,108,117,173,196,65,116,143,127, | |||
65,108,71,228,196,65,0,199,128,65,108,202,39,197,65,55,195,129,65,108,211,119,197,65,189,187,130,65,108,30,133,197,65,72,225,130,65,108,30,133,197,65,72,225,130,65,108,225,122,196,65,21,174,131,65,108,225,122,196,65,21,174,131,65,108,186,232,193,65,154, | |||
248,133,65,108,182,116,191,65,73,99,136,65,108,112,61,190,65,21,174,137,65,108,112,61,190,65,21,174,137,65,108,143,194,189,65,21,174,137,65,108,144,194,189,65,22,174,137,65,108,18,236,188,65,121,57,134,65,108,14,66,188,65,63,187,130,65,108,242,196,187, | |||
65,72,107,126,65,108,15,117,187,65,209,85,119,65,108,42,92,187,65,45,92,115,65,108,41,92,187,65,42,92,115,65,108,41,92,187,65,43,92,115,65,108,11,2,187,65,181,1,110,65,108,74,202,186,65,244,159,104,65,108,8,181,186,65,88,58,99,65,108,83,194,186,65,87, | |||
212,93,65,108,36,242,186,65,100,113,88,65,108,90,68,187,65,241,20,83,65,108,195,184,187,65,110,194,77,65,108,123,20,188,65,102,102,74,65,108,123,20,188,65,102,102,74,65,99,109,236,81,178,65,0,0,168,65,98,236,81,178,65,195,245,166,65,205,204,178,65,123, | |||
20,166,65,195,245,178,65,174,71,165,65,98,185,30,179,65,225,122,164,65,164,112,179,65,205,204,162,65,144,194,179,65,20,174,161,65,108,144,194,179,65,20,174,161,65,108,171,68,180,65,100,109,160,65,108,164,214,180,65,156,51,159,65,108,29,120,181,65,131, | |||
1,158,65,108,174,40,182,65,222,215,156,65,108,232,231,182,65,108,183,155,65,108,79,181,183,65,228,160,154,65,108,226,122,184,65,20,174,153,65,108,226,122,184,65,20,174,153,65,108,226,122,184,65,20,174,153,65,108,2,3,186,65,42,213,151,65,108,71,162,187, | |||
65,112,16,150,65,108,168,87,189,65,9,97,148,65,108,12,34,191,65,8,200,146,65,108,226,122,192,65,20,174,145,65,108,226,122,192,65,20,174,145,65,108,93,143,194,65,0,0,144,65,108,52,51,195,65,164,112,143,65,98,113,61,196,65,113,61,142,65,165,112,197,65, | |||
51,51,141,65,93,143,198,65,123,20,140,65,98,21,174,199,65,195,245,138,65,247,40,200,65,225,122,138,65,195,245,200,65,143,194,137,65,108,195,245,200,65,144,194,137,65,108,106,57,203,65,14,233,135,65,108,2,148,205,65,30,45,134,65,108,8,4,208,65,217,143, | |||
132,65,108,240,135,210,65,72,18,131,65,108,26,30,213,65,96,181,129,65,108,226,196,215,65,0,122,128,65,108,147,122,218,65,228,193,126,65,108,195,245,218,65,102,102,126,65,108,195,245,218,65,102,102,126,65,108,144,194,219,65,102,102,126,65,108,144,194, | |||
219,65,102,102,126,65,108,144,194,219,65,102,102,126,65,108,153,61,222,65,27,183,124,65,108,158,194,224,65,212,71,123,65,108,2,80,227,65,125,25,122,65,108,144,194,227,65,133,235,121,65,108,144,194,227,65,133,235,121,65,108,144,194,227,65,134,235,121, | |||
65,108,114,6,230,65,76,57,121,65,108,15,78,232,65,64,193,120,65,108,241,151,234,65,178,131,120,65,108,144,194,235,65,226,122,120,65,108,144,194,235,65,225,122,120,65,108,144,194,235,65,226,122,120,65,108,103,194,237,65,196,143,120,65,108,21,193,239,65, | |||
202,215,120,65,108,82,189,241,65,198,82,121,65,108,218,181,243,65,103,0,122,65,108,106,169,245,65,63,224,122,65,108,195,150,247,65,192,241,123,65,108,21,174,247,65,0,0,124,65,108,21,174,247,65,0,0,124,65,98,82,184,248,65,0,0,124,65,21,174,249,65,154, | |||
153,125,65,82,184,250,65,102,102,126,65,108,82,184,250,65,102,102,126,65,108,17,155,254,65,236,218,128,65,108,178,51,1,66,214,179,130,65,108,154,153,1,66,184,30,131,65,108,154,153,1,66,184,30,131,65,108,154,153,6,66,102,102,136,65,108,154,153,6,66,102, | |||
102,136,65,108,154,153,6,66,102,102,136,65,108,99,145,8,66,186,72,138,65,108,153,148,10,66,25,248,139,65,108,241,161,12,66,109,115,141,65,108,28,184,14,66,198,185,142,65,108,1,0,15,66,71,225,142,65,108,0,0,15,66,71,225,142,65,98,20,174,15,66,71,225,142, | |||
65,174,71,16,66,143,194,143,65,195,245,16,66,122,20,144,65,98,113,61,18,66,122,20,144,65,72,225,18,66,122,20,152,65,41,92,20,66,122,20,152,65,108,41,92,20,66,122,20,152,65,108,92,165,20,66,190,22,152,65,108,105,238,20,66,82,32,152,65,108,34,55,21,66, | |||
48,49,152,65,108,87,127,21,66,78,73,152,65,108,219,198,21,66,156,104,152,65,108,128,13,22,66,5,143,152,65,108,25,83,22,66,115,188,152,65,108,120,151,22,66,198,240,152,65,108,115,218,22,66,223,43,153,65,108,223,27,23,66,150,109,153,65,108,184,30,23,66, | |||
163,112,153,65,108,184,30,23,66,163,112,153,65,108,184,30,23,66,163,112,153,65,108,99,92,23,66,166,183,153,65,108,53,152,23,66,188,4,154,65,108,6,210,23,66,181,87,154,65,108,178,9,24,66,90,176,154,65,108,21,63,24,66,116,14,155,65,108,13,114,24,66,198, | |||
113,155,65,108,30,133,24,66,153,153,155,65,108,30,133,24,66,153,153,155,65,98,132,235,25,66,143,194,157,65,30,133,24,66,153,153,155,65,30,133,24,66,153,153,155,65,108,30,133,24,66,153,153,155,65,108,49,133,24,66,253,255,155,65,108,181,130,24,66,65,102, | |||
156,65,108,172,125,24,66,38,204,156,65,108,24,118,24,66,105,49,157,65,108,255,107,24,66,201,149,157,65,108,103,95,24,66,8,249,157,65,108,88,80,24,66,228,90,158,65,108,220,62,24,66,31,187,158,65,108,253,42,24,66,124,25,159,65,108,202,20,24,66,191,117, | |||
159,65,108,79,252,23,66,172,207,159,65,108,157,225,23,66,10,39,160,65,108,197,196,23,66,161,123,160,65,108,20,174,23,66,81,184,160,65,108,20,174,23,66,81,184,160,65,108,20,174,23,66,81,184,160,65,108,15,146,23,66,224,254,160,65,108,80,116,23,66,138,66, | |||
161,65,108,233,84,23,66,38,131,161,65,108,239,51,23,66,137,192,161,65,108,118,17,23,66,141,250,161,65,108,150,237,22,66,13,49,162,65,108,101,200,22,66,229,99,162,65,108,250,161,22,66,245,146,162,65,108,110,122,22,66,30,190,162,65,108,219,81,22,66,70, | |||
229,162,65,108,90,40,22,66,84,8,163,65,108,7,254,21,66,48,39,163,65,108,133,235,21,66,50,51,163,65,108,133,235,21,66,50,51,163,65,108,133,235,21,66,50,51,163,65,108,253,169,21,66,202,91,163,65,108,135,103,21,66,199,125,163,65,108,76,36,21,66,21,153,163, | |||
65,108,121,224,20,66,162,173,163,65,108,55,156,20,66,97,187,163,65,108,180,87,20,66,73,194,163,65,108,235,81,20,66,142,194,163,65,108,235,81,20,66,142,194,163,65,108,133,235,19,66,142,194,163,65,108,132,235,19,66,142,194,163,65,108,71,111,19,66,74,207, | |||
163,65,108,224,242,18,66,151,207,163,65,108,159,118,18,66,116,195,163,65,108,164,112,18,66,142,194,163,65,108,164,112,18,66,142,194,163,65,108,62,10,18,66,142,194,163,65,108,62,10,18,66,142,194,163,65,108,23,216,17,66,5,174,163,65,108,124,165,17,66,134, | |||
158,163,65,108,142,114,17,66,26,148,163,65,108,110,63,17,66,201,142,163,65,108,60,12,17,66,150,142,163,65,108,26,217,16,66,130,147,163,65,108,39,166,16,66,136,157,163,65,108,132,115,16,66,162,172,163,65,108,83,65,16,66,200,192,163,65,108,114,61,16,66, | |||
142,194,163,65,108,113,61,16,66,142,194,163,65,108,52,51,15,66,193,245,164,65,108,52,51,15,66,193,245,164,65,108,203,224,14,66,61,126,165,65,108,230,145,14,66,201,14,166,65,108,236,81,14,66,91,143,166,65,108,236,81,14,66,91,143,166,65,98,226,122,13,66, | |||
245,40,168,65,21,174,12,66,30,133,169,65,134,235,11,66,204,204,170,65,108,11,215,9,66,122,20,174,65,108,174,71,255,65,102,102,186,65,108,174,71,255,65,102,102,186,65,108,111,139,250,65,57,247,187,65,108,171,188,245,65,246,74,189,65,108,119,222,240,65, | |||
196,96,190,65,108,133,235,239,65,92,143,190,65,108,133,235,239,65,92,143,190,65,108,134,235,239,65,92,143,190,65,108,12,26,235,65,206,114,191,65,108,192,62,230,65,82,24,192,65,108,187,92,225,65,124,127,192,65,108,21,174,221,65,214,163,192,65,108,20,174, | |||
221,65,215,163,192,65,108,10,215,219,65,215,163,192,65,108,10,215,219,65,215,163,192,65,108,64,188,217,65,112,134,192,65,108,155,163,215,65,38,78,192,65,108,113,142,213,65,28,251,191,65,108,24,126,211,65,134,141,191,65,108,227,115,209,65,172,5,191,65, | |||
108,30,113,207,65,227,99,190,65,108,21,119,205,65,148,168,189,65,108,10,135,203,65,54,212,188,65,108,58,162,201,65,82,231,187,65,108,41,92,201,65,143,194,187,65,108,41,92,201,65,143,194,187,65,108,41,92,201,65,143,194,187,65,108,244,223,199,65,0,20,186, | |||
65,108,178,78,198,65,252,120,184,65,108,103,169,196,65,137,242,182,65,108,30,241,194,65,161,129,181,65,108,243,38,193,65,49,39,180,65,108,9,76,191,65,21,228,178,65,108,174,71,191,65,71,225,178,65,108,174,71,191,65,71,225,178,65,108,174,71,191,65,71,225, | |||
178,65,108,248,166,190,65,16,135,178,65,108,248,10,190,65,237,36,178,65,108,17,116,189,65,30,187,177,65,108,165,226,188,65,230,73,177,65,108,15,87,188,65,142,209,176,65,108,170,209,187,65,98,82,176,65,108,41,92,187,65,10,215,175,65,108,41,92,187,65,10, | |||
215,175,65,98,72,225,186,65,194,245,174,65,236,81,178,65,123,20,174,65,246,40,178,65,164,112,173,65,108,246,40,178,65,164,112,173,65,108,62,32,178,65,159,10,173,65,108,163,28,178,65,75,164,172,65,108,39,30,178,65,234,61,172,65,108,199,36,178,65,190,215, | |||
171,65,108,246,40,178,65,20,174,171,65,108,246,40,178,65,21,174,171,65,108,246,40,178,65,21,174,171,65,108,190,28,178,65,162,7,171,65,108,221,24,178,65,201,96,170,65,108,83,29,178,65,243,185,169,65,108,31,42,178,65,139,19,169,65,108,55,63,178,65,253, | |||
109,168,65,108,236,81,178,65,0,0,168,65,108,236,81,178,65,0,0,168,65,99,109,72,225,188,65,62,10,141,66,108,72,225,188,65,62,10,141,66,108,164,89,188,65,206,127,141,66,108,172,186,187,65,135,243,141,66,108,195,4,187,65,30,101,142,66,108,95,56,186,65,75, | |||
212,142,66,108,123,20,186,65,103,230,142,66,108,123,20,186,65,103,230,142,66,108,123,20,186,65,103,230,142,66,108,246,45,185,65,183,79,143,66,108,173,50,184,65,5,182,143,66,108,64,35,183,65,14,25,144,66,108,94,0,182,65,147,120,144,66,108,192,202,180, | |||
65,87,212,144,66,108,45,131,179,65,31,44,145,66,108,118,42,178,65,179,127,145,66,108,120,193,176,65,222,206,145,66,108,26,73,175,65,109,25,146,66,108,76,194,173,65,49,95,146,66,108,9,46,172,65,252,159,146,66,108,123,20,172,65,216,163,146,66,108,123,20, | |||
172,65,216,163,146,66,108,123,20,172,65,216,163,146,66,108,116,103,170,65,77,224,146,66,108,225,174,168,65,83,23,147,66,108,218,235,166,65,198,72,147,66,108,128,31,165,65,135,116,147,66,108,251,74,163,65,121,154,147,66,108,118,111,161,65,132,186,147, | |||
66,108,33,142,159,65,148,212,147,66,108,48,168,157,65,152,232,147,66,108,218,190,155,65,131,246,147,66,108,89,211,153,65,76,254,147,66,108,0,0,152,65,0,0,148,66,108,0,0,152,65,0,0,148,66,108,0,0,152,65,0,0,148,66,108,134,101,148,65,24,227,147,66,108, | |||
250,209,144,65,179,186,147,66,108,166,71,141,65,235,134,147,66,108,207,200,137,65,224,71,147,66,108,176,87,134,65,187,253,146,66,108,126,246,130,65,171,168,146,66,108,196,78,127,65,231,72,146,66,108,174,71,125,65,246,40,146,66,108,174,71,125,65,246,40, | |||
146,66,108,174,71,109,65,10,87,145,66,108,173,71,109,65,10,87,145,66,108,223,181,81,65,238,44,144,66,108,178,181,53,65,72,47,143,66,108,16,89,25,65,189,94,142,66,108,92,143,22,65,205,76,142,66,108,92,143,22,65,205,76,142,66,98,41,92,3,65,144,194,141, | |||
66,61,10,223,64,51,51,141,66,194,245,184,64,225,122,140,66,108,123,20,150,64,205,204,139,66,98,205,204,132,64,164,112,139,66,62,10,103,64,154,25,139,66,226,122,68,64,236,209,138,66,108,32,133,43,64,154,153,138,66,108,33,133,43,64,154,153,138,66,108,20, | |||
243,30,64,149,123,138,66,108,14,149,18,64,147,88,138,66,108,250,114,6,64,171,48,138,66,108,57,41,245,63,245,3,138,66,108,51,51,243,63,0,0,138,66,108,51,51,243,63,0,0,138,66,108,51,51,243,63,0,0,138,66,108,70,7,234,63,228,240,137,66,108,156,14,225,63, | |||
248,223,137,66,108,244,78,216,63,69,205,137,66,108,228,205,207,63,218,184,137,66,108,225,144,199,63,193,162,137,66,108,46,157,191,63,10,139,137,66,108,226,247,183,63,195,113,137,66,108,225,165,176,63,253,86,137,66,108,219,171,169,63,201,58,137,66,108, | |||
68,14,163,63,57,29,137,66,108,91,209,156,63,96,254,136,66,108,29,249,150,63,82,222,136,66,108,51,51,147,63,174,199,136,66,108,51,51,147,63,174,199,136,66,108,51,51,147,63,174,199,136,66,108,24,134,143,63,103,170,136,66,108,210,55,140,63,108,140,136,66, | |||
108,127,74,137,63,210,109,136,66,108,253,191,134,63,172,78,136,66,108,238,153,132,63,14,47,136,66,108,177,217,130,63,12,15,136,66,108,101,128,129,63,187,238,135,66,108,231,142,128,63,47,206,135,66,108,210,5,128,63,125,173,135,66,108,250,202,127,63,187, | |||
140,135,66,108,254,255,127,63,225,122,135,66,108,0,0,128,63,225,122,135,66,108,0,0,128,63,225,122,135,66,108,148,178,128,63,31,66,135,66,108,124,26,130,63,147,9,135,66,108,208,54,132,63,97,209,134,66,108,56,6,135,63,173,153,134,66,108,230,134,138,63, | |||
154,98,134,66,108,158,182,142,63,77,44,134,66,108,178,146,147,63,231,246,133,66,108,144,194,149,63,70,225,133,66,108,143,194,149,63,71,225,133,66,108,144,194,149,63,71,225,133,66,108,132,92,170,63,249,21,133,66,108,40,122,193,63,11,79,132,66,108,36,133, | |||
203,63,0,0,132,66,108,31,133,203,63,0,0,132,66,98,164,112,221,63,164,112,131,66,41,92,239,63,72,225,130,66,82,184,254,63,174,71,130,66,108,84,184,254,63,174,71,130,66,108,24,127,7,64,127,136,129,66,108,170,109,14,64,75,198,128,66,108,106,35,20,64,145, | |||
1,128,66,108,180,156,24,64,153,117,126,66,108,172,214,27,64,252,228,124,66,108,64,207,29,64,75,82,123,66,108,46,133,30,64,135,190,121,66,108,0,248,29,64,179,42,120,66,108,206,204,28,64,61,10,119,66,108,205,204,28,64,61,10,119,66,98,205,204,28,64,215, | |||
163,116,66,62,10,23,64,112,61,114,66,92,143,18,64,10,215,111,66,98,122,20,14,64,164,112,109,66,31,133,11,64,184,30,108,66,153,153,9,64,112,61,106,66,108,154,153,9,64,112,61,106,66,108,244,238,7,64,219,62,105,66,108,110,16,7,64,67,63,104,66,108,146,254, | |||
6,64,74,63,103,66,108,110,185,7,64,149,63,102,66,108,136,64,9,64,199,64,101,66,108,154,153,9,64,122,20,101,66,108,153,153,9,64,122,20,101,66,108,153,153,9,64,122,20,101,66,108,161,19,11,64,18,171,100,66,108,122,225,12,64,251,66,100,66,108,252,1,15,64, | |||
118,220,99,66,108,204,115,17,64,197,119,99,66,108,88,53,20,64,41,21,99,66,108,221,68,23,64,224,180,98,66,108,102,160,26,64,41,87,98,66,108,206,69,30,64,63,252,97,66,108,190,50,34,64,93,164,97,66,108,180,100,38,64,186,79,97,66,108,153,153,41,64,122,20, | |||
97,66,108,153,153,41,64,122,20,97,66,108,152,153,41,64,122,20,97,66,108,71,66,46,64,253,213,96,66,108,112,27,51,64,78,155,96,66,108,250,33,56,64,146,100,96,66,108,173,82,61,64,236,49,96,66,108,56,170,66,64,125,3,96,66,108,46,37,72,64,98,217,95,66,108, | |||
15,192,77,64,183,179,95,66,108,68,119,83,64,147,146,95,66,108,38,71,89,64,12,118,95,66,108,251,43,95,64,52,94,95,66,108,254,33,101,64,26,75,95,66,108,102,102,102,64,173,71,95,66,108,102,102,102,64,173,71,95,66,108,102,102,102,64,173,71,95,66,108,107, | |||
218,112,64,170,38,95,66,108,126,101,123,64,13,14,95,66,108,112,0,131,64,231,253,94,66,108,228,82,136,64,65,246,94,66,108,30,133,139,64,193,245,94,66,108,30,133,139,64,193,245,94,66,108,20,174,167,64,193,245,94,66,98,174,71,177,64,193,245,94,66,71,225, | |||
186,64,193,245,94,66,204,204,196,64,193,245,94,66,108,204,204,196,64,193,245,94,66,108,2,38,202,64,202,234,94,66,108,31,121,207,64,73,215,94,66,108,187,194,212,64,74,187,94,66,108,117,255,217,64,223,150,94,66,108,242,43,223,64,31,106,94,66,108,227,68, | |||
228,64,39,53,94,66,108,5,71,233,64,26,248,93,66,108,35,47,238,64,29,179,93,66,108,26,250,242,64,93,102,93,66,108,245,40,244,64,234,81,93,66,108,245,40,244,64,234,81,93,66,108,244,40,244,64,234,81,93,66,108,41,113,248,64,214,255,92,66,108,45,151,252,64, | |||
4,167,92,66,108,45,76,0,65,171,71,92,66,108,16,57,2,65,9,226,91,66,108,4,17,4,65,94,118,91,66,108,218,210,5,65,241,4,91,66,108,115,125,7,65,9,142,90,66,108,191,15,9,65,243,17,90,66,108,187,136,10,65,254,144,89,66,108,51,51,11,65,234,81,89,66,108,51,51, | |||
11,65,234,81,89,66,108,51,51,11,65,234,81,89,66,108,72,97,16,65,234,104,87,66,108,244,43,21,65,245,111,85,66,108,164,112,21,65,234,81,85,66,108,164,112,21,65,234,81,85,66,108,164,112,21,65,254,255,84,66,108,164,112,21,65,254,255,84,66,108,218,56,24,65, | |||
213,189,83,66,108,149,64,27,65,249,132,82,66,108,227,133,30,65,51,86,81,66,108,31,133,31,65,254,255,80,66,108,31,133,31,65,254,255,80,66,108,31,133,31,65,254,255,80,66,108,219,137,32,65,8,177,80,66,108,12,158,33,65,110,101,80,66,108,2,193,34,65,95,29, | |||
80,66,108,2,242,35,65,9,217,79,66,108,74,48,37,65,153,152,79,66,108,15,123,38,65,56,92,79,66,108,123,209,39,65,13,36,79,66,108,181,50,41,65,58,240,78,66,108,218,157,42,65,226,192,78,66,108,2,18,44,65,35,150,78,66,108,236,81,44,65,90,143,78,66,108,236, | |||
81,44,65,90,143,78,66,108,236,81,44,65,90,143,78,66,108,236,81,44,65,90,143,78,66,108,183,159,45,65,48,112,78,66,108,83,243,46,65,59,85,78,66,108,229,75,48,65,141,62,78,66,108,146,168,49,65,52,44,78,66,108,123,8,51,65,61,30,78,66,108,190,106,52,65,175, | |||
20,78,66,108,120,206,53,65,146,15,78,66,108,198,50,55,65,233,14,78,66,108,196,150,56,65,179,18,78,66,108,142,249,57,65,239,26,78,66,108,65,90,59,65,151,39,78,66,108,236,81,60,65,49,51,78,66,108,236,81,60,65,49,51,78,66,108,236,81,60,65,49,51,78,66,108, | |||
197,59,62,65,211,75,78,66,108,21,32,64,65,140,106,78,66,108,166,253,65,65,72,143,78,66,108,70,211,67,65,241,185,78,66,108,200,159,69,65,105,234,78,66,108,6,98,71,65,147,32,79,66,108,224,24,73,65,76,92,79,66,108,62,195,74,65,110,157,79,66,108,236,81,76, | |||
65,69,225,79,66,108,236,81,76,65,69,225,79,66,108,236,81,76,65,69,225,79,66,108,202,130,80,65,229,183,80,66,108,104,135,84,65,168,155,81,66,108,54,93,88,65,252,139,82,66,108,188,1,92,65,71,136,83,66,108,169,114,95,65,233,143,84,66,108,200,173,98,65,56, | |||
162,85,66,108,6,177,101,65,133,190,86,66,108,113,61,102,65,192,245,86,66,108,113,61,102,65,192,245,86,66,98,82,184,110,65,8,215,89,66,113,61,118,65,151,153,92,66,144,194,125,65,172,71,95,66,98,246,40,132,65,172,71,99,66,62,10,137,65,131,235,102,66,174, | |||
71,141,65,90,143,106,66,108,92,143,146,65,182,30,111,66,108,92,143,146,65,181,30,111,66,108,145,138,152,65,132,52,116,66,108,253,5,159,65,110,34,121,66,108,11,215,161,65,182,30,123,66,108,10,215,161,65,182,30,123,66,98,102,102,164,65,8,215,124,66,184, | |||
30,167,65,28,133,126,66,10,215,169,65,122,20,128,66,98,92,143,172,65,102,230,128,66,20,174,173,65,204,76,129,66,153,153,175,65,102,230,129,66,108,163,112,177,65,0,128,130,66,108,163,112,177,65,0,128,130,66,108,225,92,179,65,173,35,131,66,108,201,39,181, | |||
65,77,205,131,66,108,52,208,182,65,114,124,132,66,108,20,85,184,65,173,48,133,66,108,112,181,185,65,138,233,133,66,108,102,240,186,65,147,166,134,66,108,45,5,188,65,79,103,135,66,108,102,102,188,65,51,179,135,66,108,102,102,188,65,51,179,135,66,108,102, | |||
102,188,65,51,179,135,66,108,37,240,188,65,228,53,136,66,108,151,95,189,65,36,186,136,66,108,116,180,189,65,159,63,137,66,108,136,238,189,65,254,197,137,66,108,172,13,190,65,236,76,138,66,108,204,17,190,65,18,212,138,66,108,231,250,189,65,26,91,139,66, | |||
108,10,201,189,65,174,225,139,66,108,85,124,189,65,120,103,140,66,108,250,20,189,65,33,236,140,66,108,72,225,188,65,215,35,141,66,108,72,225,188,65,215,35,141,66,99,109,195,245,16,66,62,10,132,66,108,195,245,16,66,62,10,132,66,108,62,132,14,66,180,163, | |||
132,66,108,43,4,12,66,87,45,133,66,108,34,119,9,66,208,166,133,66,108,199,222,6,66,208,15,134,66,108,192,60,4,66,20,104,134,66,108,191,146,1,66,100,175,134,66,108,238,196,253,65,146,229,134,66,108,66,91,248,65,123,10,135,66,108,239,235,242,65,9,30,135, | |||
66,108,114,122,237,65,46,32,135,66,108,68,10,232,65,232,16,135,66,108,225,158,226,65,67,240,134,66,108,193,59,221,65,82,190,134,66,108,86,228,215,65,54,123,134,66,108,11,156,210,65,26,39,134,66,108,66,102,205,65,51,194,133,66,108,79,70,200,65,194,76, | |||
133,66,108,122,63,195,65,18,199,132,66,108,0,0,192,65,102,102,132,66,108,0,0,192,65,102,102,132,66,108,0,0,192,65,102,102,132,66,108,204,169,189,65,46,102,131,66,108,30,33,187,65,193,109,130,66,108,148,103,184,65,190,125,129,66,108,0,0,184,65,41,92,129, | |||
66,108,0,0,184,65,41,92,129,66,98,164,112,181,65,0,128,128,66,205,204,178,65,41,92,127,66,0,0,176,65,82,184,125,66,98,51,51,173,65,123,20,124,66,205,204,170,65,31,133,122,66,0,0,168,65,10,215,120,66,108,255,255,167,65,10,215,120,66,108,246,128,161,65, | |||
229,15,116,66,108,69,126,155,65,185,32,111,66,108,176,71,153,65,248,40,109,66,108,174,71,153,65,246,40,109,66,98,31,133,151,65,154,153,107,66,143,194,149,65,123,20,106,66,133,235,147,65,92,143,104,66,98,194,245,140,65,20,174,98,66,205,204,132,65,92,143, | |||
92,66,133,235,117,65,143,194,85,66,108,134,235,117,65,142,194,85,66,108,12,45,116,65,236,136,81,66,108,94,71,115,65,15,75,77,66,108,16,59,115,65,175,11,73,66,108,40,8,116,65,132,205,68,66,108,206,204,116,65,91,143,66,66,108,205,204,116,65,92,143,66,66, | |||
108,206,204,116,65,92,143,66,66,108,162,131,119,65,28,117,61,66,108,188,62,123,65,44,101,56,66,108,184,251,127,65,202,98,51,66,108,199,219,130,65,43,113,46,66,108,75,55,134,65,119,147,41,66,108,63,14,138,65,204,204,36,66,108,42,92,139,65,235,81,35,66, | |||
108,41,92,139,65,235,81,35,66,108,43,92,139,65,235,81,35,66,108,19,98,144,65,251,247,29,66,108,79,239,149,65,228,191,24,66,108,83,0,156,65,252,172,19,66,108,124,20,160,65,92,143,16,66,108,123,20,160,65,92,143,16,66,108,123,20,160,65,91,143,16,66,108, | |||
38,214,159,65,90,42,15,66,108,148,187,159,65,60,196,13,66,108,216,196,159,65,230,93,12,66,108,234,241,159,65,63,248,10,66,108,173,66,160,65,42,148,9,66,108,239,182,160,65,139,50,8,66,108,100,78,161,65,70,212,6,66,108,172,8,162,65,58,122,5,66,108,123, | |||
20,162,65,101,102,5,66,108,123,20,162,65,102,102,5,66,108,124,20,162,65,102,102,5,66,108,4,65,164,65,238,173,2,66,108,120,178,166,65,61,4,0,66,108,72,103,169,65,14,214,250,65,108,184,93,172,65,236,199,245,65,108,229,147,175,65,80,225,240,65,108,190,7, | |||
179,65,93,37,236,65,108,124,20,180,65,204,204,234,65,108,123,20,180,65,204,204,234,65,108,123,20,180,65,204,204,234,65,108,4,222,181,65,38,136,232,65,108,245,137,183,65,92,45,230,65,108,61,23,185,65,239,189,227,65,108,221,132,186,65,111,59,225,65,108, | |||
236,209,187,65,118,167,222,65,108,148,253,188,65,170,3,220,65,108,22,7,190,65,190,81,217,65,108,225,122,190,65,0,0,216,65,108,225,122,190,65,255,255,215,65,108,225,122,190,65,255,255,215,65,108,158,52,191,65,193,238,211,65,108,21,186,191,65,135,213,207, | |||
65,108,241,10,192,65,241,182,203,65,108,254,38,192,65,162,149,199,65,108,123,20,192,65,255,255,195,65,108,123,20,192,65,255,255,195,65,98,123,20,192,65,204,204,194,65,123,20,192,65,19,174,193,65,123,20,192,65,224,122,192,65,108,246,40,194,65,255,255, | |||
193,65,108,62,10,195,65,224,122,194,65,108,113,61,196,65,132,235,195,65,108,41,92,199,65,255,255,199,65,108,40,92,199,65,254,255,199,65,108,15,13,201,65,84,102,202,65,108,32,220,202,65,67,182,204,65,108,49,200,204,65,80,238,206,65,108,9,208,206,65,14, | |||
13,209,65,108,91,242,208,65,36,17,211,65,108,201,45,211,65,70,249,212,65,108,225,122,212,65,0,0,214,65,108,225,122,212,65,255,255,213,65,108,225,122,212,65,255,255,213,65,108,48,6,214,65,131,7,215,65,108,43,158,215,65,240,250,215,65,108,207,65,217,65, | |||
172,217,216,65,108,14,240,218,65,40,163,217,65,108,213,167,220,65,226,86,218,65,108,11,104,222,65,103,244,218,65,108,145,47,224,65,84,123,219,65,108,68,253,225,65,81,235,219,65,108,252,207,227,65,23,68,220,65,108,142,166,229,65,110,133,220,65,108,72, | |||
225,230,65,214,163,220,65,108,71,225,230,65,214,163,220,65,108,40,92,235,65,214,163,220,65,108,39,92,235,65,214,163,220,65,108,228,65,238,65,94,134,220,65,108,58,37,241,65,220,67,220,65,108,81,4,244,65,125,220,219,65,108,82,221,246,65,130,80,219,65,108, | |||
107,174,249,65,68,160,218,65,108,122,20,252,65,132,235,217,65,108,122,20,252,65,132,235,217,65,108,122,20,252,65,132,235,217,65,108,220,112,255,65,50,207,216,65,108,251,94,1,66,60,136,215,65,108,213,252,2,66,114,23,214,65,108,243,144,4,66,191,125,212, | |||
65,108,83,26,6,66,42,188,210,65,108,143,194,6,66,132,235,209,65,108,143,194,6,66,132,235,209,65,108,143,194,6,66,132,235,209,65,108,32,42,9,66,202,144,206,65,108,118,123,11,66,156,249,202,65,108,184,30,12,66,132,235,201,65,108,184,30,12,66,132,235,201, | |||
65,108,184,30,12,66,132,235,201,65,108,146,80,13,66,58,39,200,65,108,88,141,14,66,19,130,198,65,108,62,212,15,66,30,253,196,65,108,117,36,17,66,82,153,195,65,108,35,125,18,66,147,87,194,65,108,110,221,19,66,175,56,193,65,108,0,0,20,66,184,30,193,65,108, | |||
0,0,20,66,184,30,193,65,108,61,10,21,66,102,102,192,65,108,61,10,21,66,102,102,192,65,108,70,248,21,66,20,200,191,65,108,14,226,22,66,42,18,191,65,108,215,163,23,66,102,102,190,65,108,215,163,23,66,102,102,190,65,108,123,20,24,66,133,235,189,65,98,123, | |||
20,25,66,123,20,194,65,10,215,25,66,102,102,198,65,143,194,26,66,92,143,202,65,98,194,245,28,66,194,245,212,65,10,215,31,66,82,184,222,65,112,61,34,66,184,30,233,65,108,112,61,34,66,184,30,233,65,108,176,214,35,66,208,115,240,65,108,132,64,37,66,121, | |||
239,247,65,108,6,122,38,66,231,140,255,65,108,108,130,39,66,158,163,3,66,108,14,89,40,66,195,140,7,66,108,132,235,40,66,0,0,11,66,108,132,235,40,66,0,0,11,66,108,132,235,40,66,0,0,11,66,108,198,219,42,66,186,22,13,66,108,176,176,44,66,150,69,15,66,108, | |||
21,105,46,66,48,139,17,66,108,220,3,48,66,17,230,19,66,108,254,127,49,66,186,84,22,66,108,136,220,50,66,155,213,24,66,108,224,122,51,66,123,20,26,66,108,224,122,51,66,123,20,26,66,98,173,71,59,66,123,20,42,66,244,40,59,66,0,0,61,66,122,20,57,66,144,194, | |||
78,66,108,122,20,57,66,144,194,78,66,108,50,75,56,66,209,154,84,66,108,99,55,55,66,35,103,90,66,108,50,51,55,66,226,122,90,66,108,50,51,55,66,226,122,90,66,108,224,122,52,66,124,20,90,66,108,214,163,50,66,206,204,89,66,108,214,163,50,66,206,204,89,66, | |||
108,233,168,49,66,57,154,89,66,108,197,171,48,66,62,116,89,66,108,12,173,47,66,246,90,89,66,108,97,173,46,66,114,78,89,66,108,104,173,45,66,185,78,89,66,108,234,81,45,66,237,81,89,66,108,234,81,45,66,237,81,89,66,108,234,81,45,66,237,81,89,66,108,30, | |||
199,44,66,42,93,89,66,108,15,61,44,66,83,111,89,66,108,20,180,43,66,92,136,89,66,108,133,44,43,66,55,168,89,66,108,185,166,42,66,205,206,89,66,108,6,35,42,66,7,252,89,66,108,192,161,41,66,200,47,90,66,108,57,35,41,66,238,105,90,66,108,194,167,40,66,84, | |||
170,90,66,108,171,47,40,66,210,240,90,66,108,65,187,39,66,57,61,91,66,108,205,74,39,66,90,143,91,66,108,60,10,39,66,145,194,91,66,108,60,10,39,66,145,194,91,66,108,60,10,39,66,145,194,91,66,108,5,169,38,66,167,34,92,66,108,186,76,38,66,123,135,92,66, | |||
108,150,245,37,66,203,240,92,66,108,210,163,37,66,85,94,93,66,108,162,87,37,66,210,207,93,66,108,54,17,37,66,249,68,94,66,108,187,208,36,66,127,189,94,66,108,91,150,36,66,25,57,95,66,108,59,98,36,66,117,183,95,66,108,125,52,36,66,68,56,96,66,108,61,13, | |||
36,66,51,187,96,66,108,150,236,35,66,238,63,97,66,108,154,210,35,66,33,198,97,66,108,142,194,35,66,53,51,98,66,108,142,194,35,66,53,51,98,66,108,142,194,35,66,53,51,98,66,108,92,168,35,66,74,140,99,66,108,114,159,35,66,64,230,100,66,108,213,167,35,66, | |||
57,64,102,66,108,128,193,35,66,89,153,103,66,108,142,194,35,66,217,163,103,66,108,142,194,35,66,217,163,103,66,108,143,194,35,66,217,163,103,66,108,6,30,36,66,46,83,111,66,108,12,23,36,66,160,4,119,66,108,1,0,36,66,226,122,121,66,108,0,0,36,66,225,122, | |||
121,66,108,0,0,36,66,226,122,121,66,108,227,173,32,66,7,174,124,66,108,229,51,29,66,169,181,127,66,108,64,148,25,66,236,71,129,66,108,70,209,21,66,97,157,130,66,108,94,237,17,66,88,218,131,66,108,196,245,16,66,215,35,132,66,108,195,245,16,66,215,35,132, | |||
66,99,109,195,245,120,66,123,148,133,66,108,195,245,120,66,123,148,133,66,108,52,162,120,66,24,248,133,66,108,202,68,120,66,127,89,134,66,108,194,221,119,66,112,184,134,66,108,93,109,119,66,177,20,135,66,108,228,243,118,66,5,110,135,66,108,163,113,118, | |||
66,51,196,135,66,108,246,40,118,66,164,240,135,66,108,246,40,118,66,164,240,135,66,108,246,40,118,66,164,240,135,66,108,172,26,117,66,19,122,136,66,108,252,254,115,66,148,252,136,66,108,155,214,114,66,213,119,137,66,108,70,162,113,66,135,235,137,66,108, | |||
196,98,112,66,95,87,138,66,108,225,24,111,66,24,187,138,66,108,111,197,109,66,116,22,139,66,108,72,105,108,66,54,105,139,66,108,174,71,108,66,164,112,139,66,108,174,71,108,66,164,112,139,66,108,82,184,102,66,236,209,140,66,108,82,184,102,66,236,209,140, | |||
66,108,243,156,97,66,85,18,142,66,108,61,163,92,66,3,115,143,66,108,195,245,89,66,144,66,144,66,108,195,245,89,66,144,66,144,66,108,194,245,89,66,144,66,144,66,108,178,214,86,66,228,87,145,66,108,92,212,83,66,215,128,146,66,108,169,240,80,66,172,188, | |||
147,66,108,61,10,79,66,185,158,148,66,108,62,10,79,66,185,158,148,66,108,246,40,77,66,62,138,149,66,108,246,40,77,66,62,138,149,66,108,102,6,75,66,243,151,150,66,108,142,201,72,66,169,151,151,66,108,222,115,70,66,188,136,152,66,108,174,71,70,66,154,153, | |||
152,66,108,174,71,70,66,154,153,152,66,108,174,71,70,66,154,153,152,66,108,26,68,69,66,68,246,152,66,108,150,55,68,66,83,76,153,66,108,207,34,67,66,144,155,153,66,108,115,6,66,66,202,227,153,66,108,59,227,64,66,210,36,154,66,108,224,185,63,66,125,94, | |||
154,66,108,32,139,62,66,168,144,154,66,108,189,87,61,66,50,187,154,66,108,124,32,60,66,0,222,154,66,108,235,81,59,66,164,240,154,66,108,235,81,59,66,164,240,154,66,108,235,81,59,66,164,240,154,66,108,56,48,58,66,38,2,155,66,108,33,13,57,66,101,12,155, | |||
66,108,133,235,55,66,92,15,155,66,108,133,235,55,66,92,15,155,66,108,41,92,55,66,92,15,155,66,108,41,92,55,66,92,15,155,66,108,33,33,54,66,44,8,155,66,108,54,231,52,66,31,249,154,66,108,102,102,52,66,164,240,154,66,108,102,102,52,66,164,240,154,66,108, | |||
61,10,52,66,164,240,154,66,108,61,10,52,66,164,240,154,66,108,160,162,50,66,224,210,154,66,108,112,62,49,66,41,172,154,66,108,145,222,47,66,152,124,154,66,108,227,131,46,66,76,68,154,66,108,69,47,45,66,103,3,154,66,108,184,30,45,66,0,0,154,66,108,184, | |||
30,45,66,0,0,154,66,108,184,30,45,66,0,0,154,66,108,43,83,44,66,196,214,153,66,108,254,139,43,66,127,168,153,66,108,176,201,42,66,78,117,153,66,108,191,12,42,66,82,61,153,66,108,163,85,41,66,176,0,153,66,108,209,164,40,66,142,191,152,66,108,186,250,39, | |||
66,21,122,152,66,108,204,87,39,66,115,48,152,66,108,110,188,38,66,213,226,151,66,108,3,41,38,66,111,145,151,66,108,235,157,37,66,116,60,151,66,108,184,30,37,66,103,230,150,66,108,184,30,37,66,102,230,150,66,108,184,30,37,66,102,230,150,66,108,10,178, | |||
36,66,161,121,150,66,108,94,80,36,66,72,10,150,66,108,243,249,35,66,161,152,149,66,108,255,174,35,66,246,36,149,66,108,180,111,35,66,144,175,148,66,108,56,60,35,66,187,56,148,66,108,174,20,35,66,195,192,147,66,108,47,249,34,66,244,71,147,66,108,204,233, | |||
34,66,156,206,146,66,108,143,230,34,66,8,85,146,66,108,133,235,34,66,0,0,146,66,108,133,235,34,66,0,0,146,66,98,133,235,34,66,154,25,145,66,133,235,34,66,51,51,144,66,51,51,35,66,205,76,143,66,98,153,153,35,66,21,46,141,66,41,92,36,66,92,15,139,66,184, | |||
30,37,66,225,250,136,66,98,184,30,38,66,51,51,134,66,71,225,38,66,112,189,131,66,164,112,39,66,225,122,129,66,98,1,0,40,66,164,112,126,66,246,40,40,66,174,71,122,66,51,51,40,66,20,174,117,66,98,112,61,40,66,122,20,113,66,51,51,40,66,40,92,108,66,82,184, | |||
39,66,30,133,103,66,108,82,184,39,66,30,133,103,66,108,137,162,39,66,184,82,102,66,108,24,156,39,66,158,31,101,66,108,1,165,39,66,148,236,99,66,108,82,184,39,66,132,235,98,66,108,82,184,39,66,132,235,98,66,108,82,184,39,66,132,235,98,66,108,63,195,39, | |||
66,193,151,98,66,108,88,210,39,66,165,68,98,66,108,148,229,39,66,100,242,97,66,108,230,252,39,66,52,161,97,66,108,64,24,40,66,72,81,97,66,108,143,55,40,66,212,2,97,66,108,192,90,40,66,10,182,96,66,108,188,129,40,66,26,107,96,66,108,107,172,40,66,53,34, | |||
96,66,108,176,218,40,66,137,219,95,66,108,111,12,41,66,68,151,95,66,108,136,65,41,66,146,85,95,66,108,216,121,41,66,155,22,95,66,108,215,163,41,66,132,235,94,66,108,215,163,41,66,132,235,94,66,108,215,163,41,66,132,235,94,66,108,54,233,41,66,246,182, | |||
94,66,108,30,49,42,66,240,133,94,66,108,100,123,42,66,145,88,94,66,108,214,199,42,66,248,46,94,66,108,67,22,43,66,62,9,94,66,108,123,102,43,66,123,231,93,66,108,72,184,43,66,197,201,93,66,108,120,11,44,66,48,176,93,66,108,212,95,44,66,203,154,93,66,108, | |||
39,181,44,66,164,137,93,66,108,58,11,45,66,199,124,93,66,108,214,97,45,66,59,116,93,66,108,215,163,45,66,163,112,93,66,108,215,163,45,66,163,112,93,66,108,41,92,46,66,163,112,93,66,108,41,92,46,66,162,112,93,66,108,174,58,47,66,124,121,93,66,108,123, | |||
24,48,66,113,141,93,66,108,2,245,48,66,118,172,93,66,108,181,207,49,66,118,214,93,66,108,0,0,50,66,70,225,93,66,108,0,0,50,66,71,225,93,66,108,184,30,52,66,51,51,94,66,108,235,81,54,66,31,133,94,66,98,245,40,56,66,205,204,94,66,255,255,57,66,185,30,95, | |||
66,204,204,59,66,92,143,95,66,98,81,184,60,66,205,204,95,66,214,163,61,66,123,20,96,66,204,204,62,66,164,112,96,66,98,194,245,63,66,205,204,96,66,9,215,64,66,123,20,97,66,9,215,65,66,236,81,97,66,108,234,81,66,66,236,81,97,66,108,234,81,66,66,236,81, | |||
97,66,108,117,158,66,66,220,198,97,66,108,191,240,66,66,212,55,98,66,108,149,72,67,66,138,164,98,66,108,189,165,67,66,186,12,99,66,108,253,7,68,66,32,112,99,66,108,21,111,68,66,126,206,99,66,108,195,218,68,66,150,39,100,66,108,195,74,69,66,49,123,100, | |||
66,108,205,190,69,66,23,201,100,66,108,150,54,70,66,24,17,101,66,108,211,177,70,66,5,83,101,66,108,51,48,71,66,180,142,101,66,108,102,177,71,66,0,196,101,66,108,26,53,72,66,197,242,101,66,108,214,163,72,66,123,20,102,66,108,214,163,72,66,123,20,102,66, | |||
108,214,163,72,66,123,20,102,66,108,164,86,73,66,57,67,102,66,108,143,11,74,66,247,104,102,66,108,35,194,74,66,159,133,102,66,108,235,121,75,66,30,153,102,66,108,114,50,76,66,102,163,102,66,108,65,235,76,66,115,164,102,66,108,226,163,77,66,67,156,102, | |||
66,108,224,91,78,66,219,138,102,66,108,196,18,79,66,71,112,102,66,108,26,200,79,66,151,76,102,66,108,109,123,80,66,226,31,102,66,108,214,163,80,66,123,20,102,66,108,214,163,80,66,123,20,102,66,108,214,163,80,66,123,20,102,66,108,81,160,81,66,45,204,101, | |||
66,108,222,152,82,66,87,119,101,66,108,221,140,83,66,48,22,101,66,108,180,123,84,66,247,168,100,66,108,200,100,85,66,240,47,100,66,108,134,71,86,66,106,171,99,66,108,91,35,87,66,186,27,99,66,108,188,247,87,66,58,129,98,66,108,0,0,88,66,225,122,98,66, | |||
108,0,0,88,66,225,122,98,66,108,0,0,88,66,225,122,98,66,108,82,219,88,66,241,171,97,66,108,7,172,89,66,78,210,96,66,108,205,204,89,66,20,174,96,66,108,205,204,89,66,20,174,96,66,108,195,245,90,66,133,235,96,66,108,185,30,92,66,113,61,97,66,108,185,30, | |||
92,66,113,61,97,66,108,184,156,92,66,21,101,97,66,108,146,24,93,66,248,146,97,66,108,250,145,93,66,254,198,97,66,108,162,8,94,66,4,1,98,66,108,61,124,94,66,230,64,98,66,108,130,236,94,66,122,134,98,66,108,41,89,95,66,149,209,98,66,108,236,193,95,66,5, | |||
34,99,66,108,185,30,96,66,164,112,99,66,108,185,30,96,66,164,112,99,66,108,185,30,96,66,164,112,99,66,108,95,120,96,66,134,218,99,66,108,157,204,96,66,194,72,100,66,108,62,27,97,66,16,187,100,66,108,15,100,97,66,39,49,101,66,108,226,166,97,66,188,170, | |||
101,66,108,140,227,97,66,130,39,102,66,108,124,20,98,66,154,153,102,66,108,124,20,98,66,154,153,102,66,108,124,20,98,66,154,153,102,66,108,122,104,98,66,16,135,103,66,108,126,176,98,66,109,120,104,66,108,92,236,98,66,22,109,105,66,108,236,27,99,66,110, | |||
100,106,66,108,17,63,99,66,216,93,107,66,108,174,71,99,66,21,174,107,66,108,175,71,99,66,21,174,107,66,108,175,71,99,66,185,30,109,66,108,174,71,99,66,185,30,109,66,108,178,86,99,66,218,94,110,66,108,176,117,99,66,212,157,111,66,108,155,153,99,66,155, | |||
153,112,66,108,155,153,99,66,154,153,112,66,108,155,153,99,66,154,153,112,66,108,129,198,99,66,80,85,113,66,108,187,252,99,66,139,14,114,66,108,37,60,100,66,213,196,114,66,108,151,132,100,66,185,119,115,66,108,226,213,100,66,198,38,116,66,108,212,47, | |||
101,66,138,209,116,66,108,49,146,101,66,152,119,117,66,108,188,252,101,66,136,24,118,66,108,48,111,102,66,240,179,118,66,108,67,233,102,66,110,73,119,66,108,124,20,103,66,226,122,119,66,108,124,20,103,66,226,122,119,66,108,125,20,103,66,226,122,119,66, | |||
108,158,190,104,66,123,60,121,66,108,176,126,106,66,56,232,122,66,108,147,83,108,66,7,125,124,66,108,145,194,108,66,11,215,124,66,108,144,194,108,66,11,215,124,66,108,145,194,108,66,11,215,124,66,108,157,241,110,66,234,174,126,66,108,140,55,113,66,33, | |||
53,128,66,108,135,235,114,66,205,204,128,66,108,134,235,114,66,205,204,128,66,108,1,0,116,66,246,40,129,66,108,1,0,116,66,246,40,129,66,108,64,175,116,66,201,97,129,66,108,153,88,117,66,236,158,129,66,108,159,251,117,66,54,224,129,66,108,62,10,118,66, | |||
103,230,129,66,108,62,10,118,66,103,230,129,66,108,62,10,118,66,103,230,129,66,108,72,95,118,66,74,7,130,66,108,238,176,118,66,66,42,130,66,108,252,254,118,66,58,79,130,66,108,62,73,119,66,25,118,130,66,108,133,143,119,66,198,158,130,66,108,166,209,119, | |||
66,40,201,130,66,108,116,15,120,66,36,245,130,66,108,202,72,120,66,157,34,131,66,108,42,92,120,66,52,51,131,66,108,42,92,120,66,52,51,131,66,108,42,92,120,66,52,51,131,66,108,44,133,120,66,116,90,131,66,108,52,170,120,66,174,130,131,66,108,42,203,120, | |||
66,201,171,131,66,108,251,231,120,66,168,213,131,66,108,146,0,121,66,51,0,132,66,108,225,20,121,66,78,43,132,66,108,219,36,121,66,220,86,132,66,108,117,48,121,66,195,130,132,66,108,168,55,121,66,230,174,132,66,108,111,58,121,66,41,219,132,66,108,201, | |||
56,121,66,112,7,133,66,108,182,50,121,66,157,51,133,66,108,58,40,121,66,150,95,133,66,108,93,25,121,66,62,139,133,66,108,61,10,121,66,20,174,133,66,108,61,10,121,66,20,174,133,66,99,101,0,0 }; | |||
const uint8 xcode[] = { 110,109,72,225,2,66,41,92,31,64,108,72,225,2,66,40,92,31,64,108,137,147,2,66,16,119,29,64,108,95,68,2,66,188,208,27,64,108,253,243,1,66,63,106,26,64,108,150,162,1,66,123,68,25,64,108,94,80,1,66,46,96,24,64,108,138,253,0,66,233,189,23,64,108,79,170,0, | |||
66,20,94,23,64,108,225,86,0,66,236,64,23,64,108,119,3,0,66,134,102,23,64,108,140,96,255,65,198,206,23,64,108,6,187,254,65,108,121,24,64,108,197,22,254,65,11,102,25,64,108,51,116,253,65,10,148,26,64,108,185,211,252,65,170,2,28,64,108,187,53,252,65,253, | |||
176,29,64,108,20,174,251,65,40,92,31,64,108,21,174,251,65,41,92,31,64,108,21,174,251,65,41,92,31,64,108,73,51,251,65,222,11,33,64,108,242,181,250,65,240,137,34,64,108,96,54,250,65,106,213,35,64,108,229,180,249,65,120,237,36,64,108,212,49,249,65,104,209, | |||
37,64,108,127,173,248,65,166,128,38,64,108,61,40,248,65,196,250,38,64,108,98,162,247,65,115,63,39,64,108,69,28,247,65,134,78,39,64,108,57,150,246,65,246,39,39,64,108,151,16,246,65,217,203,38,64,108,179,139,245,65,107,58,38,64,108,225,7,245,65,10,116, | |||
37,64,108,119,133,244,65,50,121,36,64,108,200,4,244,65,136,74,35,64,108,39,134,243,65,201,232,33,64,108,227,9,243,65,218,84,32,64,108,77,144,242,65,190,143,30,64,108,179,25,242,65,149,154,28,64,108,97,166,241,65,160,118,26,64,108,159,54,241,65,64,37, | |||
24,64,108,183,202,240,65,237,167,21,64,108,236,98,240,65,66,0,19,64,108,129,255,239,65,240,47,16,64,108,182,160,239,65,196,56,13,64,108,42,92,239,65,72,225,10,64,108,42,92,239,65,72,225,10,64,108,42,92,239,65,73,225,10,64,108,94,226,237,65,2,150,254, | |||
63,108,129,86,236,65,252,158,232,63,108,147,185,234,65,140,235,211,63,108,156,12,233,65,236,136,192,63,108,173,80,231,65,140,131,174,63,108,227,134,229,65,236,230,157,63,108,98,176,227,65,180,189,142,63,108,89,206,225,65,148,17,129,63,108,251,225,223, | |||
65,144,214,105,63,108,42,92,223,65,8,215,99,63,108,42,92,223,65,12,215,99,63,108,42,92,223,65,16,215,99,63,108,107,36,218,65,176,63,42,63,108,80,215,212,65,0,38,242,62,108,62,120,207,65,32,225,160,62,108,165,10,202,65,64,201,65,62,108,254,145,196,65, | |||
128,101,201,61,108,201,17,191,65,0,234,42,61,108,138,141,185,65,0,46,160,60,108,203,8,180,65,0,139,2,61,108,18,135,174,65,128,19,161,61,108,154,153,169,65,128,153,25,62,108,154,153,169,65,154,153,25,62,108,154,153,169,65,160,153,25,62,108,162,198,166, | |||
65,224,114,72,62,108,65,249,163,65,16,167,132,62,108,66,51,161,65,0,1,174,62,108,105,118,158,65,192,44,224,62,108,120,196,155,65,32,133,13,63,108,41,31,153,65,224,57,47,63,108,44,136,150,65,24,31,85,63,108,43,1,148,65,136,28,127,63,108,195,139,145,65, | |||
168,139,150,63,108,0,0,144,65,104,102,166,63,108,0,0,144,65,102,102,166,63,108,0,0,144,65,102,102,166,63,108,45,87,143,65,231,184,174,63,108,56,181,142,65,191,143,183,63,108,135,26,142,65,72,229,192,63,108,123,20,142,65,174,71,193,63,108,123,20,142,65, | |||
174,71,193,63,108,62,10,141,65,215,163,208,63,108,52,51,137,65,133,235,1,64,108,225,122,142,65,0,0,0,64,108,224,122,142,65,0,0,0,64,108,24,10,149,65,192,9,247,63,108,97,158,155,65,32,85,243,63,108,134,51,162,65,144,228,244,63,108,80,197,168,65,16,183, | |||
251,63,108,164,112,171,65,0,0,0,64,108,164,112,171,65,0,0,0,64,108,164,112,171,65,0,0,0,64,108,134,137,172,65,121,157,0,64,108,18,161,173,65,13,171,1,64,108,150,182,174,65,17,40,3,64,108,95,201,175,65,144,19,5,64,108,190,216,176,65,81,108,7,64,108,6, | |||
228,177,65,211,48,10,64,108,139,234,178,65,79,95,13,64,108,165,235,179,65,191,245,16,64,108,177,230,180,65,212,241,20,64,108,12,219,181,65,4,81,25,64,108,28,200,182,65,129,16,30,64,108,71,173,183,65,66,45,35,64,108,252,137,184,65,2,164,40,64,108,174, | |||
93,185,65,65,113,46,64,108,212,39,186,65,73,145,52,64,108,238,231,186,65,48,0,59,64,108,164,112,187,65,0,0,64,64,108,164,112,187,65,0,0,64,64,98,31,133,191,65,154,153,105,64,154,153,189,65,0,0,144,64,123,20,190,65,194,245,168,64,108,0,0,0,0,61,10,15, | |||
65,108,61,10,71,64,92,143,252,65,108,72,225,128,65,92,143,236,65,108,72,225,128,65,92,143,236,65,108,67,216,128,65,164,79,237,65,108,222,216,128,65,33,16,238,65,108,72,225,128,65,82,184,238,65,108,72,225,128,65,82,184,238,65,108,72,225,128,65,81,184, | |||
238,65,108,41,216,128,65,131,158,239,65,108,142,218,128,65,224,132,240,65,108,118,232,128,65,213,106,241,65,108,216,1,129,65,206,79,242,65,108,163,38,129,65,57,51,243,65,108,192,86,129,65,133,20,244,65,108,17,146,129,65,33,243,244,65,108,111,216,129, | |||
65,127,206,245,65,108,172,41,130,65,18,166,246,65,108,151,133,130,65,81,121,247,65,108,242,235,130,65,180,71,248,65,108,126,92,131,65,184,16,249,65,108,241,214,131,65,219,211,249,65,108,254,90,132,65,162,144,250,65,108,80,232,132,65,146,70,251,65,108, | |||
140,126,133,65,56,245,251,65,108,20,174,133,65,245,40,252,65,108,21,174,133,65,246,40,252,65,108,21,174,133,65,246,40,252,65,108,192,107,134,65,228,215,252,65,108,237,49,135,65,31,125,253,65,108,28,0,136,65,62,24,254,65,108,202,213,136,65,222,168,254, | |||
65,108,110,178,137,65,161,46,255,65,108,123,149,138,65,50,169,255,65,108,96,126,139,65,33,12,0,66,108,135,108,140,65,198,61,0,66,108,88,95,141,65,104,105,0,66,108,56,86,142,65,234,142,0,66,108,137,80,143,65,52,174,0,66,108,171,77,144,65,52,199,0,66,108, | |||
251,76,145,65,216,217,0,66,108,214,77,146,65,20,230,0,66,108,153,79,147,65,226,235,0,66,108,113,61,148,65,133,235,0,66,108,113,61,148,65,133,235,0,66,108,41,92,149,65,133,235,0,66,108,41,92,149,65,133,235,0,66,108,248,181,150,65,185,228,0,66,108,171, | |||
14,152,65,75,213,0,66,108,100,101,153,65,69,189,0,66,108,73,185,154,65,181,156,0,66,108,128,9,156,65,178,115,0,66,108,50,85,157,65,86,66,0,66,108,138,155,158,65,190,8,0,66,108,185,219,159,65,36,142,255,65,108,240,20,161,65,245,250,254,65,108,105,70,162, | |||
65,77,88,254,65,108,94,111,163,65,150,166,253,65,108,19,143,164,65,63,230,252,65,108,206,164,165,65,197,23,252,65,108,223,175,166,65,171,59,251,65,108,31,133,167,65,225,122,250,65,108,31,133,167,65,225,122,250,65,108,31,133,167,65,225,122,250,65,108, | |||
198,77,168,65,122,12,249,65,108,222,3,169,65,129,148,247,65,108,240,166,169,65,230,19,246,65,108,150,54,170,65,160,139,244,65,108,114,178,170,65,169,252,242,65,108,195,245,170,65,0,0,242,65,108,195,245,170,65,0,0,242,65,108,0,0,174,65,154,153,229,65, | |||
108,0,0,174,65,154,153,229,65,108,174,71,247,65,236,81,218,65,108,0,0,224,65,215,163,200,64,98,133,235,225,65,246,40,196,64,20,174,227,65,31,133,179,64,113,61,230,65,92,143,178,64,98,41,92,235,65,235,81,176,64,31,133,239,65,0,0,176,64,113,61,242,65,82, | |||
184,190,64,108,113,61,242,65,81,184,190,64,108,167,157,242,65,199,232,192,64,108,191,4,243,65,77,5,195,64,108,119,114,243,65,138,12,197,64,108,136,230,243,65,49,253,198,64,108,170,96,244,65,5,214,200,64,108,140,224,244,65,216,149,202,64,108,222,101,245, | |||
65,138,59,204,64,108,74,240,245,65,14,198,205,64,108,120,127,246,65,104,52,207,64,108,12,19,247,65,172,133,208,64,108,167,170,247,65,4,185,209,64,108,233,69,248,65,171,205,210,64,108,111,228,248,65,239,194,211,64,108,210,133,249,65,52,152,212,64,108, | |||
171,41,250,65,241,76,213,64,108,146,207,250,65,179,224,213,64,108,29,119,251,65,26,83,214,64,108,154,153,251,65,102,102,214,64,108,154,153,251,65,102,102,214,64,108,154,153,251,65,101,102,214,64,108,75,161,252,65,236,19,215,64,108,125,166,253,65,242, | |||
245,215,64,108,136,168,254,65,231,11,217,64,108,199,166,255,65,26,85,218,64,108,185,30,0,66,50,51,219,64,108,185,30,0,66,51,51,219,64,108,184,30,0,66,51,51,219,64,108,205,56,0,66,29,136,219,64,108,97,83,0,66,126,210,219,64,108,99,110,0,66,39,18,220,64, | |||
108,195,137,0,66,239,70,220,64,108,110,165,0,66,180,112,220,64,108,83,193,0,66,92,143,220,64,108,96,221,0,66,211,162,220,64,108,132,249,0,66,12,171,220,64,108,171,21,1,66,3,168,220,64,108,197,49,1,66,184,153,220,64,108,191,77,1,66,54,128,220,64,108,135, | |||
105,1,66,141,91,220,64,108,11,133,1,66,211,43,220,64,108,59,160,1,66,40,241,219,64,108,4,187,1,66,178,171,219,64,108,85,213,1,66,156,91,219,64,108,71,225,1,66,51,51,219,64,108,72,225,1,66,51,51,219,64,108,72,225,1,66,51,51,219,64,108,35,251,1,66,24,167, | |||
218,64,108,22,20,2,66,211,16,218,64,108,17,44,2,66,197,112,217,64,108,3,67,2,66,84,199,216,64,108,224,88,2,66,236,20,216,64,108,152,109,2,66,255,89,215,64,108,30,129,2,66,5,151,214,64,108,103,147,2,66,124,204,213,64,108,101,164,2,66,227,250,212,64,108, | |||
16,180,2,66,194,34,212,64,108,91,194,2,66,163,68,211,64,108,62,207,2,66,20,97,210,64,108,178,218,2,66,166,120,209,64,108,174,228,2,66,239,139,208,64,108,44,237,2,66,134,155,207,64,108,39,244,2,66,4,168,206,64,108,195,245,2,66,102,102,206,64,108,195,245, | |||
2,66,102,102,206,64,98,134,235,3,66,10,215,179,64,72,225,4,66,153,153,153,64,72,225,5,66,122,20,126,64,98,184,30,7,66,0,0,64,64,133,235,6,66,143,194,53,64,72,225,2,66,41,92,31,64,99,109,0,0,64,65,133,235,157,65,108,215,163,60,65,133,235,157,65,108,72, | |||
225,38,65,31,133,185,65,108,72,225,38,65,31,133,185,65,108,1,178,38,65,28,205,185,65,108,150,123,38,65,211,19,186,65,108,44,62,38,65,23,89,186,65,108,232,249,37,65,188,156,186,65,108,248,174,37,65,151,222,186,65,108,138,93,37,65,125,30,187,65,108,211, | |||
5,37,65,70,92,187,65,108,11,168,36,65,202,151,187,65,108,110,68,36,65,227,208,187,65,108,60,219,35,65,108,7,188,65,108,184,108,35,65,67,59,188,65,108,41,249,34,65,71,108,188,65,108,217,128,34,65,87,154,188,65,108,103,102,34,65,216,163,188,65,108,103, | |||
102,34,65,215,163,188,65,108,1,0,36,65,184,30,189,65,108,155,153,33,65,215,163,190,65,108,247,40,8,65,215,163,206,65,108,82,184,230,64,0,0,220,65,108,72,225,226,64,0,0,220,65,108,72,225,226,64,0,0,220,65,108,85,204,225,64,122,237,219,65,108,110,187,224, | |||
64,132,215,219,65,108,67,175,223,64,44,190,219,65,108,126,168,222,64,131,161,219,65,108,144,194,221,64,31,133,219,65,108,144,194,221,64,31,133,219,65,108,134,235,217,64,62,10,219,65,108,134,235,217,64,52,51,217,65,98,32,133,219,64,206,204,212,65,165, | |||
112,221,64,103,102,208,65,42,92,223,64,1,0,204,65,108,93,143,226,64,196,245,196,65,98,226,122,228,64,196,245,192,65,124,20,230,64,196,245,188,65,21,174,231,64,196,245,184,65,108,21,174,231,64,196,245,184,65,108,88,169,231,64,131,191,184,65,108,117,175, | |||
231,64,68,137,184,65,108,105,192,231,64,42,83,184,65,108,40,220,231,64,88,29,184,65,108,160,2,232,64,240,231,183,65,108,186,51,232,64,19,179,183,65,108,85,111,232,64,229,126,183,65,108,76,181,232,64,134,75,183,65,108,113,5,233,64,24,25,183,65,108,146, | |||
95,233,64,186,231,182,65,108,116,195,233,64,140,183,182,65,108,217,48,234,64,172,136,182,65,108,121,167,234,64,58,91,182,65,108,9,39,235,64,82,47,182,65,108,55,175,235,64,16,5,182,65,108,173,63,236,64,143,220,181,65,108,13,216,236,64,233,181,181,65,108, | |||
247,119,237,64,55,145,181,65,108,123,20,238,64,165,112,181,65,108,123,20,238,64,165,112,181,65,108,123,20,238,64,165,112,181,65,108,123,20,238,64,165,112,181,65,108,123,20,238,64,165,112,181,65,108,45,199,237,64,89,66,181,65,108,57,131,237,64,36,19,181, | |||
65,108,202,72,237,64,37,227,180,65,108,7,24,237,64,122,178,180,65,108,14,241,236,64,66,129,180,65,108,248,211,236,64,158,79,180,65,108,217,192,236,64,173,29,180,65,108,187,183,236,64,142,235,179,65,108,165,184,236,64,99,185,179,65,108,151,195,236,64, | |||
74,135,179,65,108,137,216,236,64,101,85,179,65,108,110,247,236,64,210,35,179,65,108,50,32,237,64,178,242,178,65,108,188,82,237,64,36,194,178,65,108,234,142,237,64,71,146,178,65,108,150,212,237,64,59,99,178,65,108,123,20,238,64,115,61,178,65,108,123,20, | |||
238,64,114,61,178,65,108,154,153,5,65,134,235,159,65,108,154,153,5,65,134,235,159,65,108,17,95,5,65,76,48,160,65,108,186,29,5,65,134,115,160,65,108,192,213,4,65,9,181,160,65,108,80,135,4,65,170,244,160,65,108,158,50,4,65,65,50,161,65,108,222,215,3,65, | |||
166,109,161,65,108,76,119,3,65,180,166,161,65,108,36,17,3,65,69,221,161,65,108,169,165,2,65,56,17,162,65,108,31,53,2,65,107,66,162,65,108,206,191,1,65,190,112,162,65,108,1,70,1,65,19,156,162,65,108,6,200,0,65,80,196,162,65,108,46,70,0,65,89,233,162,65, | |||
108,151,129,255,64,25,11,163,65,108,104,112,254,64,120,41,163,65,108,127,89,253,64,99,68,163,65,108,141,61,252,64,202,91,163,65,108,72,29,251,64,157,111,163,65,108,105,249,249,64,208,127,163,65,108,170,210,248,64,88,140,163,65,108,200,169,247,64,45,149, | |||
163,65,108,84,184,246,64,154,153,163,65,108,83,184,246,64,154,153,163,65,98,73,225,218,64,103,102,164,65,93,143,194,64,174,71,165,65,32,133,171,64,246,40,166,65,108,20,174,167,64,246,40,166,65,108,20,174,167,64,246,40,166,65,108,175,237,166,64,123,42, | |||
166,65,108,57,45,166,64,152,41,166,65,108,47,109,165,64,78,38,166,65,108,10,174,164,64,159,32,166,65,108,69,240,163,64,142,24,166,65,108,90,52,163,64,33,14,166,65,108,192,122,162,64,94,1,166,65,108,239,195,161,64,77,242,165,65,108,91,16,161,64,249,224, | |||
165,65,108,120,96,160,64,107,205,165,65,108,182,180,159,64,178,183,165,65,108,131,13,159,64,217,159,165,65,108,73,107,158,64,242,133,165,65,108,102,102,158,64,31,133,165,65,108,102,102,158,64,31,133,165,65,108,102,102,158,64,31,133,165,65,108,235,187, | |||
157,64,65,93,165,65,108,159,25,157,64,77,51,165,65,108,234,127,156,64,96,7,165,65,108,46,239,155,64,150,217,164,65,108,200,103,155,64,11,170,164,65,108,14,234,154,64,222,120,164,65,108,82,118,154,64,46,70,164,65,108,220,12,154,64,29,18,164,65,108,241, | |||
173,153,64,203,220,163,65,108,205,89,153,64,91,166,163,65,108,166,16,153,64,238,110,163,65,108,171,210,152,64,170,54,163,65,108,3,160,152,64,177,253,162,65,108,208,120,152,64,41,196,162,65,108,42,93,152,64,53,138,162,65,108,236,81,152,64,103,102,162, | |||
65,108,235,81,152,64,103,102,162,65,98,81,184,150,64,226,122,158,65,245,40,148,64,103,102,154,65,153,153,145,64,93,143,150,65,108,123,20,142,64,0,0,144,65,108,113,61,170,64,72,225,142,65,108,52,51,19,65,11,215,137,65,108,236,81,24,65,165,112,137,65,108, | |||
123,20,22,65,196,245,140,65,108,174,71,49,65,44,92,87,65,108,174,71,49,65,44,92,87,65,108,71,107,49,65,253,249,86,65,108,189,147,49,65,182,153,86,65,108,246,192,49,65,146,59,86,65,108,214,242,49,65,208,223,85,65,108,59,41,50,65,168,134,85,65,108,3,100, | |||
50,65,86,48,85,65,108,10,163,50,65,15,221,84,65,108,37,230,50,65,9,141,84,65,108,43,45,51,65,119,64,84,65,108,238,119,51,65,139,247,83,65,108,62,198,51,65,114,178,83,65,108,233,23,52,65,90,113,83,65,108,187,108,52,65,107,52,83,65,108,125,196,52,65,205, | |||
251,82,65,108,248,30,53,65,164,199,82,65,108,240,123,53,65,17,152,82,65,108,44,219,53,65,51,109,82,65,108,133,235,53,65,105,102,82,65,108,133,235,53,65,105,102,82,65,108,133,235,53,65,105,102,82,65,108,133,235,53,65,105,102,82,65,108,247,194,53,65,243, | |||
3,82,65,108,97,159,53,65,150,159,81,65,108,220,128,53,65,146,57,81,65,108,121,103,53,65,39,210,80,65,108,73,83,53,65,153,105,80,65,108,90,68,53,65,43,0,80,65,108,180,58,53,65,30,150,79,65,108,95,54,53,65,185,43,79,65,108,92,55,53,65,62,193,78,65,108, | |||
171,61,53,65,241,86,78,65,108,72,73,53,65,24,237,77,65,108,44,90,53,65,245,131,77,65,108,76,112,53,65,203,27,77,65,108,153,139,53,65,222,180,76,65,108,2,172,53,65,111,79,76,65,108,115,209,53,65,192,235,75,65,108,133,235,53,65,23,174,75,65,108,133,235, | |||
53,65,23,174,75,65,98,10,215,55,65,33,133,71,65,153,153,57,65,54,51,67,65,41,92,59,65,64,10,63,65,108,195,245,60,65,54,51,59,65,108,195,245,60,65,54,51,59,65,108,231,104,61,65,49,40,58,65,108,63,233,61,65,67,35,57,65,108,120,118,62,65,19,37,56,65,108, | |||
57,16,63,65,66,46,55,65,108,30,182,63,65,112,63,54,65,108,189,103,64,65,53,89,53,65,108,166,36,65,65,36,124,52,65,108,94,236,65,65,203,168,51,65,108,103,190,66,65,177,223,50,65,108,58,154,67,65,87,33,50,65,108,73,127,68,65,54,110,49,65,108,4,109,69,65, | |||
193,198,48,65,108,209,98,70,65,99,43,48,65,108,19,96,71,65,128,156,47,65,108,40,100,72,65,115,26,47,65,108,106,110,73,65,144,165,46,65,108,46,126,74,65,32,62,46,65,108,199,146,75,65,102,228,45,65,108,131,171,76,65,157,152,45,65,108,176,199,77,65,243, | |||
90,45,65,108,150,230,78,65,146,43,45,65,108,127,7,80,65,150,10,45,65,108,177,41,81,65,21,248,44,65,108,164,112,81,65,197,245,44,65,108,164,112,81,65,197,245,44,65,108,113,61,82,65,197,245,44,65,108,113,61,82,65,197,245,44,65,108,41,92,87,65,64,10,47, | |||
65,108,41,92,87,65,64,10,47,65,108,39,152,90,65,130,71,48,65,108,65,195,93,65,192,173,49,65,108,111,219,96,65,22,60,51,65,108,41,92,99,65,218,163,52,65,108,41,92,99,65,218,163,52,65,108,41,92,99,65,218,163,52,65,108,9,21,100,65,154,21,53,65,108,254,199, | |||
100,65,115,144,53,65,108,150,116,101,65,22,20,54,65,108,99,26,102,65,48,160,54,65,108,250,184,102,65,102,52,55,65,108,247,79,103,65,89,208,55,65,108,247,222,103,65,167,115,56,65,108,160,101,104,65,230,29,57,65,108,156,227,104,65,169,206,57,65,108,154, | |||
88,105,65,128,133,58,65,108,80,196,105,65,245,65,59,65,108,119,38,106,65,144,3,60,65,108,210,126,106,65,213,201,60,65,108,40,205,106,65,69,148,61,65,108,71,17,107,65,94,98,62,65,108,3,75,107,65,157,51,63,65,108,55,122,107,65,124,7,64,65,108,198,158,107, | |||
65,115,221,64,65,108,151,184,107,65,249,180,65,65,108,154,199,107,65,133,141,66,65,108,198,203,107,65,140,102,67,65,108,24,197,107,65,130,63,68,65,108,148,179,107,65,221,23,69,65,108,69,151,107,65,20,239,69,65,108,62,112,107,65,155,196,70,65,108,151, | |||
62,107,65,234,151,71,65,108,113,2,107,65,123,104,72,65,108,241,187,106,65,199,53,73,65,108,69,107,106,65,75,255,73,65,108,160,16,106,65,135,196,74,65,108,143,194,105,65,44,92,75,65,108,143,194,105,65,44,92,75,65,108,51,51,103,65,167,112,81,65,98,153, | |||
153,101,65,187,30,85,65,0,0,100,65,208,204,88,65,92,143,98,65,218,163,92,65,108,92,143,98,65,218,163,92,65,108,194,90,98,65,159,16,93,65,108,202,32,98,65,160,122,93,65,108,152,225,97,65,153,225,93,65,108,84,157,97,65,73,69,94,65,108,43,84,97,65,111,165, | |||
94,65,108,75,6,97,65,207,1,95,65,108,230,179,96,65,44,90,95,65,108,49,93,96,65,80,174,95,65,108,99,2,96,65,2,254,95,65,108,0,0,96,65,0,0,96,65,108,0,0,96,65,0,0,96,65,108,164,112,97,65,195,245,96,65,108,225,122,96,65,41,92,99,65,108,41,92,95,65,113,61, | |||
102,65,108,41,92,95,65,246,40,104,65,108,143,194,81,65,184,30,133,65,108,215,163,84,65,184,30,133,65,108,41,92,137,65,0,0,128,65,108,41,92,137,65,0,0,128,65,108,223,193,137,65,204,11,128,65,108,10,40,138,65,126,18,128,65,108,107,142,138,65,20,20,128, | |||
65,108,191,244,138,65,139,16,128,65,108,197,90,139,65,229,7,128,65,108,155,153,139,65,0,0,128,65,108,154,153,139,65,0,0,128,65,108,154,153,139,65,0,0,128,65,108,0,5,140,65,146,154,127,65,108,205,114,140,65,1,64,127,65,108,186,226,140,65,134,240,126,65, | |||
108,128,84,141,65,86,172,126,65,108,213,199,141,65,154,115,126,65,108,113,60,142,65,120,70,126,65,108,8,178,142,65,12,37,126,65,108,79,40,143,65,107,15,126,65,108,251,158,143,65,165,5,126,65,108,192,21,144,65,190,7,126,65,108,81,140,144,65,182,21,126, | |||
65,108,98,2,145,65,131,47,126,65,108,169,119,145,65,22,85,126,65,108,218,235,145,65,85,134,126,65,108,171,94,146,65,34,195,126,65,108,210,207,146,65,85,11,127,65,108,6,63,147,65,193,94,127,65,108,2,172,147,65,48,189,127,65,108,127,22,148,65,51,19,128, | |||
65,108,56,126,148,65,15,77,128,65,108,236,226,148,65,8,140,128,65,108,90,68,149,65,245,207,128,65,108,68,162,149,65,171,24,129,65,108,110,252,149,65,252,101,129,65,108,157,82,150,65,181,183,129,65,108,155,164,150,65,163,13,130,65,108,52,242,150,65,143, | |||
103,130,65,108,53,59,151,65,62,197,130,65,108,112,127,151,65,118,38,131,65,108,186,190,151,65,247,138,131,65,108,233,248,151,65,130,242,131,65,108,0,0,152,65,0,0,132,65,108,0,0,152,65,0,0,132,65,98,133,235,153,65,205,204,134,65,113,61,156,65,154,153, | |||
137,65,215,163,158,65,92,143,140,65,108,123,20,162,65,205,204,144,65,108,143,194,163,65,195,245,146,65,108,61,10,161,65,164,112,147,65,99,109,174,71,209,65,246,40,186,65,108,174,71,209,65,246,40,186,65,108,217,203,204,65,48,238,183,65,108,249,109,200, | |||
65,196,122,181,65,108,220,48,196,65,64,208,178,65,108,53,23,192,65,92,240,175,65,108,247,40,188,65,72,225,172,65,108,246,40,188,65,72,225,172,65,98,51,51,185,65,82,184,168,65,164,112,189,65,103,102,156,65,10,215,189,65,195,245,158,65,108,10,215,189,65, | |||
195,245,158,65,108,170,153,190,65,102,134,158,65,108,122,86,191,65,114,13,158,65,108,2,13,192,65,53,139,157,65,108,206,188,192,65,2,0,157,65,108,71,225,192,65,72,225,156,65,108,71,225,192,65,72,225,156,65,98,204,204,194,65,195,245,154,65,225,122,196, | |||
65,41,92,155,65,214,163,198,65,72,225,156,65,108,214,163,198,65,72,225,156,65,108,92,203,199,65,106,214,157,65,108,68,230,200,65,3,218,158,65,108,215,243,201,65,109,235,159,65,108,105,243,202,65,249,9,161,65,108,88,228,203,65,238,52,162,65,108,8,198, | |||
204,65,143,107,163,65,108,234,151,205,65,20,173,164,65,108,119,89,206,65,175,248,165,65,108,51,10,207,65,141,77,167,65,108,174,169,207,65,211,170,168,65,108,128,55,208,65,162,15,170,65,108,80,179,208,65,21,123,171,65,108,206,28,209,65,68,236,172,65,108, | |||
183,115,209,65,66,98,174,65,108,211,183,209,65,33,220,175,65,108,246,232,209,65,238,88,177,65,108,2,7,210,65,183,215,178,65,108,226,17,210,65,133,87,180,65,108,144,9,210,65,100,215,181,65,108,18,238,209,65,93,86,183,65,108,120,191,209,65,124,211,184, | |||
65,108,31,133,209,65,246,40,186,65,108,31,133,209,65,246,40,186,65,99,109,102,102,4,66,61,10,119,64,98,102,102,3,66,143,194,149,64,163,112,2,66,0,0,176,64,225,122,1,66,92,143,202,64,98,225,122,1,66,61,10,207,64,51,51,1,66,41,92,207,64,51,51,1,66,41,92, | |||
207,64,98,51,51,1,66,41,92,207,64,51,51,1,66,41,92,207,64,82,184,0,66,41,92,207,64,108,82,184,0,66,42,92,207,64,108,148,39,0,66,86,193,205,64,108,229,40,255,65,230,96,204,64,108,153,254,253,65,186,59,203,64,108,3,209,252,65,142,82,202,64,108,246,40,252, | |||
65,134,235,201,64,108,246,40,252,65,133,235,201,64,108,246,40,252,65,133,235,201,64,108,163,168,251,65,118,151,201,64,108,134,41,251,65,218,41,201,64,108,240,171,250,65,248,162,200,64,108,49,48,250,65,38,3,200,64,108,154,182,249,65,202,74,199,64,108, | |||
119,63,249,65,89,122,198,64,108,20,203,248,65,90,146,197,64,108,190,89,248,65,98,147,196,64,108,187,235,247,65,18,126,195,64,108,82,129,247,65,28,83,194,64,108,200,26,247,65,65,19,193,64,108,93,184,246,65,75,191,191,64,108,81,90,246,65,22,88,190,64,108, | |||
225,0,246,65,135,222,188,64,108,69,172,245,65,142,83,187,64,108,179,92,245,65,42,184,185,64,108,94,18,245,65,97,13,184,64,108,195,245,244,65,42,92,183,64,108,195,245,244,65,41,92,183,64,108,195,245,244,65,41,92,183,64,108,43,115,244,65,87,55,181,64,108, | |||
225,233,243,65,80,45,179,64,108,62,90,243,65,99,63,177,64,108,156,196,242,65,203,110,175,64,108,92,41,242,65,177,188,173,64,108,225,136,241,65,44,42,172,64,108,146,227,240,65,60,184,170,64,108,217,57,240,65,208,103,169,64,108,34,140,239,65,189,57,168, | |||
64,108,220,218,238,65,197,46,167,64,108,121,38,238,65,148,71,166,64,108,108,111,237,65,188,132,165,64,108,43,182,236,65,187,230,164,64,108,43,251,235,65,245,109,164,64,108,229,62,235,65,185,26,164,64,108,209,129,234,65,58,237,163,64,108,104,196,233,65, | |||
152,229,163,64,108,35,7,233,65,213,3,164,64,108,123,74,232,65,223,71,164,64,108,234,142,231,65,139,177,164,64,108,230,212,230,65,148,64,165,64,108,231,28,230,65,160,244,165,64,108,0,0,230,65,123,20,166,64,108,0,0,230,65,123,20,166,64,98,164,112,227,65, | |||
123,20,166,64,123,20,226,65,123,20,182,64,123,20,224,65,113,61,186,64,108,21,174,223,65,113,61,186,64,108,21,174,223,65,113,61,186,64,108,191,249,222,65,78,25,188,64,108,148,75,222,65,159,24,190,64,108,5,164,221,65,30,58,192,64,108,125,3,221,65,111,124, | |||
194,64,108,97,106,220,65,30,222,196,64,108,21,217,219,65,166,93,199,64,108,245,79,219,65,110,249,201,64,108,89,207,218,65,202,175,204,64,108,147,87,218,65,254,126,207,64,108,240,232,217,65,61,101,210,64,108,182,131,217,65,173,96,213,64,108,39,40,217, | |||
65,102,111,216,64,108,125,214,216,65,113,143,219,64,108,216,163,216,65,144,194,221,64,108,216,163,216,65,144,194,221,64,108,216,163,216,65,140,194,221,64,108,162,174,208,65,46,8,28,65,108,210,220,201,65,72,236,73,65,108,50,51,201,65,76,225,78,65,108, | |||
52,51,201,65,72,225,78,65,98,83,184,200,65,144,194,81,65,113,61,200,65,226,122,84,65,144,194,199,65,11,215,87,65,108,164,112,197,65,134,235,105,65,108,92,143,196,65,1,0,112,65,98,10,215,197,65,124,20,106,65,61,10,217,65,62,10,99,65,92,143,220,65,1,0, | |||
100,65,98,102,102,222,65,1,0,100,65,205,204,222,65,83,184,102,65,72,225,222,65,11,215,103,65,98,31,133,223,65,93,143,114,65,52,51,225,65,134,235,131,65,52,51,225,65,236,81,132,65,108,52,51,225,65,144,194,133,65,108,144,194,223,65,144,194,133,65,98,246, | |||
40,206,65,246,40,138,65,226,122,198,65,124,20,140,65,62,10,195,65,216,163,140,65,108,102,102,194,65,216,163,140,65,108,102,102,194,65,216,163,140,65,98,92,143,192,65,216,163,140,65,225,122,192,65,216,163,140,65,235,81,192,65,11,215,139,65,108,235,81, | |||
192,65,175,71,139,65,108,40,92,189,65,144,194,151,65,108,40,92,187,65,144,194,159,65,113,40,92,179,65,236,81,194,65,81,184,170,65,72,225,228,65,108,0,0,168,65,174,71,241,65,108,0,0,168,65,174,71,241,65,108,154,165,167,65,119,181,242,65,108,8,57,167,65, | |||
71,30,244,65,108,145,186,166,65,55,129,245,65,108,133,42,166,65,98,221,246,65,108,64,137,165,65,236,49,248,65,108,195,245,164,65,174,71,249,65,108,195,245,164,65,174,71,249,65,108,195,245,164,65,174,71,249,65,108,195,13,164,65,225,5,250,65,108,140,28, | |||
163,65,63,184,250,65,108,183,34,162,65,86,94,251,65,108,229,32,161,65,186,247,251,65,108,188,23,160,65,11,132,252,65,108,227,7,159,65,239,2,253,65,108,11,242,157,65,20,116,253,65,108,227,214,156,65,49,215,253,65,108,34,183,155,65,8,44,254,65,108,128, | |||
147,154,65,98,114,254,65,108,182,108,153,65,19,170,254,65,108,131,67,152,65,246,210,254,65,108,163,24,151,65,241,236,254,65,108,215,236,149,65,244,247,254,65,108,195,245,148,65,194,245,254,65,108,195,245,148,65,194,245,254,65,108,195,245,148,65,194,245, | |||
254,65,108,194,245,148,65,194,245,254,65,108,226,31,148,65,208,252,254,65,108,235,73,147,65,43,249,254,65,108,104,116,146,65,214,234,254,65,108,225,159,145,65,217,209,254,65,108,221,204,144,65,70,174,254,65,108,227,251,143,65,49,128,254,65,108,123,45, | |||
143,65,186,71,254,65,108,38,98,142,65,4,5,254,65,108,105,154,141,65,57,184,253,65,108,193,214,140,65,140,97,253,65,108,174,23,140,65,51,1,253,65,108,168,93,139,65,108,151,252,65,108,39,169,138,65,123,36,252,65,108,158,250,137,65,169,168,251,65,108,126, | |||
82,137,65,70,36,251,65,108,49,177,136,65,166,151,250,65,108,31,23,136,65,35,3,250,65,108,0,0,136,65,133,235,249,65,108,0,0,136,65,133,235,249,65,108,0,0,136,65,133,235,249,65,108,62,130,135,65,129,92,249,65,108,201,11,135,65,97,199,248,65,108,238,156, | |||
134,65,134,44,248,65,108,245,53,134,65,82,140,247,65,108,30,215,133,65,43,231,246,65,108,166,128,133,65,124,61,246,65,108,197,50,133,65,177,143,245,65,108,172,237,132,65,57,222,244,65,108,137,177,132,65,134,41,244,65,108,128,126,132,65,11,114,243,65, | |||
108,180,84,132,65,62,184,242,65,108,62,52,132,65,149,252,241,65,108,52,29,132,65,137,63,241,65,108,164,15,132,65,147,129,240,65,108,150,11,132,65,45,195,239,65,108,14,17,132,65,207,4,239,65,108,123,20,132,65,205,204,238,65,108,123,20,132,65,205,204,238, | |||
65,108,123,20,132,65,205,204,238,65,108,249,34,132,65,110,34,238,65,108,247,57,132,65,254,120,237,65,108,101,89,132,65,234,208,236,65,108,47,129,132,65,158,42,236,65,108,60,177,132,65,133,134,235,65,108,82,184,132,65,164,112,235,65,108,82,184,132,65, | |||
164,112,235,65,108,82,184,132,65,164,112,235,65,98,82,184,132,65,215,163,234,65,184,30,133,65,10,215,233,65,31,133,133,65,195,245,232,65,113,62,10,149,65,195,245,188,65,215,163,164,65,195,245,144,65,98,113,61,162,65,246,40,142,65,133,235,159,65,164,112, | |||
139,65,154,153,157,65,195,245,136,65,108,215,163,88,65,41,92,27,65,108,215,163,88,65,41,92,27,65,108,18,241,87,65,185,170,26,65,108,101,71,87,65,146,240,25,65,108,59,167,86,65,44,46,25,65,108,252,16,86,65,3,100,24,65,108,8,133,85,65,152,146,23,65,108, | |||
183,3,85,65,114,186,22,65,108,94,141,84,65,26,220,21,65,108,72,34,84,65,31,248,20,65,108,184,194,83,65,19,15,20,65,108,237,110,83,65,139,33,19,65,108,28,39,83,65,30,48,18,65,108,115,235,82,65,104,59,17,65,108,24,188,82,65,5,68,16,65,108,41,153,82,65, | |||
147,74,15,65,108,189,130,82,65,178,79,14,65,108,226,120,82,65,3,84,13,65,108,159,123,82,65,38,88,12,65,108,241,138,82,65,188,92,11,65,108,207,166,82,65,103,98,10,65,108,39,207,82,65,199,105,9,65,108,224,3,83,65,122,115,8,65,108,214,68,83,65,31,128,7, | |||
65,108,226,145,83,65,80,144,6,65,108,209,234,83,65,168,164,5,65,108,107,79,84,65,190,189,4,65,108,112,191,84,65,36,220,3,65,108,150,58,85,65,108,0,3,65,108,145,192,85,65,34,43,2,65,108,10,81,86,65,207,92,1,65,108,165,235,86,65,245,149,0,65,108,254,143, | |||
87,65,44,174,255,64,108,173,61,88,65,85,65,254,64,108,66,244,88,65,79,230,252,64,108,73,179,89,65,248,157,251,64,108,143,194,89,65,30,133,251,64,108,143,194,89,65,31,133,251,64,108,143,194,89,65,31,133,251,64,108,228,141,90,65,231,32,250,64,108,222,97, | |||
91,65,116,209,248,64,108,247,61,92,65,158,151,247,64,108,161,33,93,65,44,116,246,64,108,75,12,94,65,216,103,245,64,108,94,253,94,65,80,115,244,64,108,65,244,95,65,46,151,243,64,108,84,240,96,65,1,212,242,64,108,248,240,97,65,68,42,242,64,108,136,245, | |||
98,65,102,154,241,64,108,92,253,99,65,192,36,241,64,108,205,7,101,65,160,201,240,64,108,47,20,102,65,62,137,240,64,108,215,33,103,65,198,99,240,64,108,25,48,104,65,77,89,240,64,108,72,62,105,65,220,105,240,64,108,182,75,106,65,102,149,240,64,108,183, | |||
87,107,65,210,219,240,64,108,160,97,108,65,241,60,241,64,108,198,104,109,65,134,184,241,64,108,130,108,110,65,65,78,242,64,108,45,108,111,65,194,253,242,64,108,35,103,112,65,154,198,243,64,108,197,92,113,65,71,168,244,64,108,115,76,114,65,57,162,245, | |||
64,108,151,53,115,65,209,179,246,64,108,153,23,116,65,96,220,247,64,108,234,241,116,65,38,27,249,64,108,253,195,117,65,90,111,250,64,108,78,141,118,65,32,216,251,64,108,89,77,119,65,146,84,253,64,108,166,3,120,65,189,227,254,64,108,225,122,120,65,0,0, | |||
0,65,108,225,122,120,65,0,0,0,65,98,72,225,134,65,205,204,24,65,41,92,145,65,143,194,49,65,112,61,156,65,72,225,74,65,108,50,51,173,65,41,92,115,65,108,19,174,173,65,225,122,116,65,98,244,40,174,65,153,153,117,65,70,225,174,65,92,143,106,65,193,245,176, | |||
65,123,20,94,65,108,193,245,176,65,195,245,92,65,108,0,0,184,65,184,30,53,65,98,10,215,185,65,10,215,39,65,143,194,187,65,92,143,26,65,20,174,189,65,164,112,13,65,108,20,174,189,65,164,112,13,65,108,54,195,190,65,198,99,6,65,108,228,170,191,65,233,122, | |||
254,64,108,140,100,192,65,138,4,240,64,108,182,239,192,65,174,109,225,64,108,8,76,193,65,170,191,210,64,108,73,121,193,65,228,3,196,64,108,90,119,193,65,200,67,181,64,108,40,92,193,65,31,133,171,64,108,40,92,193,65,31,133,171,64,108,40,92,193,65,41,92, | |||
167,64,108,40,92,193,65,41,92,167,64,98,71,225,192,65,164,112,141,64,214,163,194,65,41,92,95,64,122,20,190,65,215,163,48,64,108,122,20,190,65,215,163,48,64,108,65,68,189,65,169,17,41,64,108,48,104,188,65,39,213,33,64,108,210,128,187,65,244,242,26,64, | |||
108,188,142,186,65,119,111,20,64,108,137,146,185,65,218,78,14,64,108,217,140,184,65,10,149,8,64,108,85,126,183,65,175,69,3,64,108,170,103,182,65,100,200,252,63,108,137,73,181,65,94,231,243,63,108,170,36,180,65,2,238,235,63,108,200,249,178,65,98,225,228, | |||
63,108,163,201,177,65,8,198,222,63,108,253,148,176,65,216,159,217,63,108,156,92,175,65,30,114,213,63,108,71,33,174,65,136,63,210,63,108,201,227,172,65,32,10,208,63,108,235,81,172,65,42,92,207,63,108,235,81,172,65,41,92,207,63,108,235,81,172,65,40,92, | |||
207,63,108,222,165,166,65,8,207,197,63,108,254,243,160,65,32,206,192,63,108,51,51,157,65,8,0,192,63,108,51,51,157,65,0,0,192,63,98,246,40,154,65,0,0,192,63,61,10,151,65,0,0,192,63,20,174,147,65,0,0,192,63,108,20,174,147,65,0,0,192,63,108,171,15,150,65, | |||
240,141,169,63,108,113,130,152,65,136,10,149,63,108,215,4,155,65,232,130,130,63,108,64,149,157,65,208,5,100,63,108,9,50,160,65,48,42,71,63,108,134,217,162,65,104,133,46,63,108,3,138,165,65,64,39,26,63,108,202,65,168,65,192,28,10,63,108,92,143,170,65, | |||
0,0,0,63,108,92,143,170,65,0,0,0,63,108,92,143,170,65,0,0,0,63,108,108,226,175,65,64,224,216,62,108,154,59,181,65,0,213,194,62,108,122,151,186,65,64,236,189,62,108,159,242,191,65,96,41,202,62,108,155,73,197,65,96,132,231,62,108,3,153,202,65,64,245,10, | |||
63,108,113,221,207,65,16,159,42,63,108,135,19,213,65,64,171,82,63,108,239,55,218,65,48,128,129,63,108,205,204,222,65,72,225,154,63,108,205,204,222,65,72,225,154,63,108,205,204,222,65,72,225,154,63,108,20,150,224,65,88,200,165,63,108,17,86,226,65,152, | |||
25,178,63,108,165,11,228,65,40,205,191,63,108,185,181,229,65,60,218,206,63,108,58,83,231,65,54,55,223,63,108,34,227,232,65,162,217,240,63,108,112,100,234,65,25,219,1,64,108,45,214,235,65,108,224,11,64,108,109,55,237,65,95,118,22,64,108,154,153,237,65, | |||
155,153,25,64,108,154,153,237,65,154,153,25,64,108,154,153,237,65,153,153,25,64,108,160,15,238,65,234,141,29,64,108,212,139,238,65,196,81,33,64,108,230,13,239,65,195,226,36,64,108,130,149,239,65,155,62,40,64,108,82,34,240,65,40,99,43,64,108,251,179,240, | |||
65,102,78,46,64,108,33,74,241,65,120,254,48,64,108,100,228,241,65,164,113,51,64,108,96,130,242,65,92,166,53,64,108,177,35,243,65,50,155,55,64,108,239,199,243,65,233,78,57,64,108,177,110,244,65,105,192,58,64,108,141,23,245,65,198,238,59,64,108,23,194, | |||
245,65,62,217,60,64,108,225,109,246,65,59,127,61,64,108,126,26,247,65,84,224,61,64,108,126,199,247,65,72,252,61,64,108,116,116,248,65,8,211,61,64,108,241,32,249,65,174,100,61,64,108,134,204,249,65,127,177,60,64,108,198,118,250,65,240,185,59,64,108,67, | |||
31,251,65,156,126,58,64,108,146,197,251,65,80,0,57,64,108,72,105,252,65,0,64,55,64,108,253,9,253,65,202,62,53,64,108,154,153,253,65,52,51,51,64,108,154,153,253,65,52,51,51,64,108,154,153,253,65,52,51,51,64,108,37,16,254,65,60,177,49,64,108,244,136,254, | |||
65,36,95,48,64,108,185,3,255,65,198,61,47,64,108,38,128,255,65,220,77,46,64,108,234,253,255,65,254,143,45,64,108,91,62,0,66,166,4,45,64,108,28,126,0,66,44,172,44,64,108,15,190,0,66,203,134,44,64,108,12,254,0,66,153,148,44,64,108,233,61,1,66,142,213,44, | |||
64,108,126,125,1,66,128,73,45,64,108,162,188,1,66,37,240,45,64,108,45,251,1,66,18,201,46,64,108,245,56,2,66,189,211,47,64,108,213,117,2,66,123,15,49,64,108,165,177,2,66,130,123,50,64,108,205,204,2,66,52,51,51,64,108,205,204,2,66,52,51,51,64,98,174,71, | |||
5,66,20,174,71,64,174,71,5,66,20,174,71,64,102,102,4,66,61,10,119,64,99,101,0,0 }; | |||
const uint8 visualStudio[] = { 110,109,0,0,112,65,0,0,0,0,108,0,0,227,64,0,0,253,64,108,0,0,0,64,0,0,128,64,108,0,0,0,0,0,0,160,64,108,0,0,0,0,0,0,112,65,108,0,0,0,64,0,0,128,65,108,0,0,224,64,0,0,64,65,108,0,0,112,65,0,0,160,65,108,0,0,160,65,0,0,144,65,108,0,0,160,65,0,0,0,64,108, | |||
0,0,112,65,0,0,0,0,99,109,0,0,112,65,0,0,192,64,108,0,0,112,65,0,0,96,65,108,0,176,26,65,0,0,32,65,108,0,0,112,65,0,0,192,64,99,109,0,0,0,64,0,0,224,64,108,0,0,162,64,0,0,31,65,108,0,0,0,64,0,0,80,65,108,0,0,0,64,0,0,224,64,99,101,0,0 }; | |||
} | |||
/*static void convertSVGPathToCppData (const String& pathString) | |||
@@ -1006,14 +1578,36 @@ Icons::Icons() | |||
JUCE_LOAD_PATH_DATA (imageDoc) | |||
JUCE_LOAD_PATH_DATA (config) | |||
JUCE_LOAD_PATH_DATA (graph) | |||
JUCE_LOAD_PATH_DATA (exporter) | |||
// JUCE_LOAD_PATH_DATA (exporter) | |||
JUCE_LOAD_PATH_DATA (jigsaw) | |||
JUCE_LOAD_PATH_DATA (info) | |||
JUCE_LOAD_PATH_DATA (warning) | |||
JUCE_LOAD_PATH_DATA (bug) | |||
JUCE_LOAD_PATH_DATA (play) | |||
// JUCE_LOAD_PATH_DATA (play) | |||
JUCE_LOAD_PATH_DATA (code) | |||
JUCE_LOAD_PATH_DATA (box) | |||
JUCE_LOAD_PATH_DATA (juceLogo) | |||
JUCE_LOAD_PATH_DATA (mainJuceLogo) | |||
JUCE_LOAD_PATH_DATA (user) | |||
JUCE_LOAD_PATH_DATA (closedFolder) | |||
JUCE_LOAD_PATH_DATA (exporter) | |||
JUCE_LOAD_PATH_DATA (fileExplorer) | |||
JUCE_LOAD_PATH_DATA (file) | |||
JUCE_LOAD_PATH_DATA (buildTab) | |||
JUCE_LOAD_PATH_DATA (modules) | |||
JUCE_LOAD_PATH_DATA (openFolder) | |||
JUCE_LOAD_PATH_DATA (play) | |||
JUCE_LOAD_PATH_DATA (settings) | |||
JUCE_LOAD_PATH_DATA (singleModule) | |||
JUCE_LOAD_PATH_DATA (buildNow) | |||
JUCE_LOAD_PATH_DATA (continuousBuildStart) | |||
JUCE_LOAD_PATH_DATA (continuousBuildStop) | |||
JUCE_LOAD_PATH_DATA (edit) | |||
JUCE_LOAD_PATH_DATA (plus); | |||
JUCE_LOAD_PATH_DATA (android); | |||
JUCE_LOAD_PATH_DATA (codeBlocks); | |||
JUCE_LOAD_PATH_DATA (linux); | |||
JUCE_LOAD_PATH_DATA (xcode); | |||
JUCE_LOAD_PATH_DATA (visualStudio); | |||
} |
@@ -55,6 +55,11 @@ struct Icon | |||
return Icon (path, background.contrasting (colour, 0.6f)); | |||
} | |||
Icon withColour (Colour newColour) | |||
{ | |||
return Icon (path, newColour); | |||
} | |||
const Path* path; | |||
Colour colour; | |||
}; | |||
@@ -66,13 +71,20 @@ public: | |||
Icons(); | |||
Path folder, document, imageDoc, | |||
config, exporter, juceLogo, | |||
config, /*exporter,*/ juceLogo, | |||
graph, jigsaw, info, warning, | |||
bug, play, code, box, | |||
bug, /*play,*/ code, box, | |||
mainJuceLogo; | |||
Path user, closedFolder, exporter, fileExplorer, file, | |||
buildTab, modules, openFolder, play, settings, singleModule, | |||
buildNow, continuousBuildStart, continuousBuildStop, edit, plus, | |||
android, codeBlocks, linux, xcode, visualStudio; | |||
private: | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (Icons) | |||
}; | |||
const Icons& getIcons(); | |||
#ifndef BUILDING_JUCE_COMPILEENGINE | |||
const Icons& getIcons(); | |||
#endif |
@@ -26,7 +26,6 @@ | |||
#include "jucer_JucerTreeViewBase.h" | |||
#include "../Project/jucer_ProjectContentComponent.h" | |||
//============================================================================== | |||
void TreePanelBase::setRoot (JucerTreeViewBase* root) | |||
{ | |||
@@ -66,6 +65,7 @@ void TreePanelBase::saveOpenness() | |||
JucerTreeViewBase::JucerTreeViewBase() : textX (0) | |||
{ | |||
setLinesDrawnForSubItems (false); | |||
setDrawsInLeftMargin (true); | |||
} | |||
JucerTreeViewBase::~JucerTreeViewBase() | |||
@@ -87,36 +87,43 @@ Font JucerTreeViewBase::getFont() const | |||
void JucerTreeViewBase::paintOpenCloseButton (Graphics& g, const Rectangle<float>& area, Colour /*backgroundColour*/, bool isMouseOver) | |||
{ | |||
TreeViewItem::paintOpenCloseButton (g, area, getOwnerView()->findColour (mainBackgroundColourId), isMouseOver); | |||
g.setColour (getOwnerView()->findColour (isSelected() ? defaultHighlightedTextColourId : treeIconColourId)); | |||
TreeViewItem::paintOpenCloseButton (g, area, getOwnerView()->findColour (defaultIconColourId), isMouseOver); | |||
} | |||
Colour JucerTreeViewBase::getBackgroundColour() const | |||
void JucerTreeViewBase::paintIcon (Graphics &g, Rectangle<float> area) | |||
{ | |||
Colour background (getOwnerView()->findColour (mainBackgroundColourId)); | |||
if (isSelected()) | |||
background = background.overlaidWith (getOwnerView()->findColour (TreeView::selectedItemBackgroundColourId)); | |||
return background; | |||
g.setColour (getContentColour (true)); | |||
getIcon().draw (g, area, isIconCrossedOut()); | |||
} | |||
Colour JucerTreeViewBase::getContrastingColour (float contrast) const | |||
void JucerTreeViewBase::paintItem (Graphics& g, int width, int height) | |||
{ | |||
return getBackgroundColour().contrasting (contrast); | |||
ignoreUnused (width, height); | |||
auto bounds = g.getClipBounds().withY (0).withHeight (height).toFloat(); | |||
g.setColour (getOwnerView()->findColour (treeIconColourId).withMultipliedAlpha (0.4f)); | |||
g.fillRect (bounds.removeFromBottom (0.5f).reduced (5, 0)); | |||
} | |||
Colour JucerTreeViewBase::getContrastingColour (Colour target, float minContrast) const | |||
Colour JucerTreeViewBase::getContentColour (bool isIcon) const | |||
{ | |||
return getBackgroundColour().contrasting (target, minContrast); | |||
if (isMissing()) | |||
return Colours::red; | |||
if (isSelected()) | |||
return getOwnerView()->findColour (defaultHighlightedTextColourId); | |||
return getOwnerView()->findColour (isIcon ? treeIconColourId : defaultTextColourId); | |||
} | |||
void JucerTreeViewBase::paintContent (Graphics& g, const Rectangle<int>& area) | |||
{ | |||
g.setFont (getFont()); | |||
g.setColour (isMissing() ? getContrastingColour (Colours::red, 0.8f) | |||
: getContrastingColour (0.8f)); | |||
g.setColour (getContentColour (false)); | |||
g.drawFittedText (getDisplayName(), area, Justification::centredLeft, 1, 0.8f); | |||
g.drawFittedText (getDisplayName(), area, Justification::centredLeft, 1, 1.0f); | |||
} | |||
Component* JucerTreeViewBase::createItemComponent() | |||
@@ -195,6 +202,7 @@ void JucerTreeViewBase::deleteItem() {} | |||
void JucerTreeViewBase::deleteAllSelectedItems() {} | |||
void JucerTreeViewBase::showDocument() {} | |||
void JucerTreeViewBase::showPopupMenu() {} | |||
void JucerTreeViewBase::showPlusMenu() {} | |||
void JucerTreeViewBase::showMultiSelectionPopupMenu() {} | |||
static void treeViewMenuItemChosen (int resultCode, WeakReference<JucerTreeViewBase> item) | |||
@@ -35,10 +35,10 @@ public: | |||
~JucerTreeViewBase(); | |||
int getItemWidth() const override { return -1; } | |||
int getItemHeight() const override { return isRoot() ? 23 : 20; } | |||
int getItemHeight() const override { return 25; } | |||
void paintOpenCloseButton (Graphics&, const Rectangle<float>& area, Colour backgroundColour, bool isMouseOver) override; | |||
Component* createItemComponent() override; | |||
void paintItem (Graphics& g, int width, int height) override; | |||
void itemClicked (const MouseEvent& e) override; | |||
void itemSelectionChanged (bool isNowSelected) override; | |||
void itemDoubleClicked (const MouseEvent&) override; | |||
@@ -51,13 +51,16 @@ public: | |||
virtual String getRenamingName() const = 0; | |||
virtual String getDisplayName() const = 0; | |||
virtual void setName (const String& newName) = 0; | |||
virtual bool isMissing() = 0; | |||
virtual bool isMissing() const = 0; | |||
virtual Icon getIcon() const = 0; | |||
virtual bool isIconCrossedOut() const { return false; } | |||
virtual void paintIcon (Graphics& g, Rectangle<int> area) { getIcon().draw (g, area.reduced (2).toFloat(), isIconCrossedOut()); } | |||
virtual bool isIconCrossedOut() const { return false; } | |||
virtual void paintIcon (Graphics& g, Rectangle<float> area); | |||
virtual void paintContent (Graphics& g, const Rectangle<int>& area); | |||
virtual int getRightHandButtonSpace() { return 0; } | |||
virtual Colour getContentColour (bool isIcon) const; | |||
virtual int getMillisecsAllowedForDragGesture() { return 120; } | |||
virtual File getDraggableFile() const { return {}; } | |||
virtual Component* createItemComponent() override; | |||
void refreshSubItems(); | |||
virtual void deleteItem(); | |||
@@ -68,6 +71,7 @@ public: | |||
void launchPopupMenu (PopupMenu&); // runs asynchronously, and produces a callback to handlePopupMenuResult(). | |||
virtual void showPopupMenu(); | |||
virtual void showPlusMenu(); | |||
virtual void handlePopupMenuResult (int resultCode); | |||
//============================================================================== | |||
@@ -91,10 +95,6 @@ public: | |||
int textX; | |||
Colour getBackgroundColour() const; | |||
Colour getContrastingColour (float contrast) const; | |||
Colour getContrastingColour (Colour targetColour, float minContrast) const; | |||
protected: | |||
ProjectContentComponent* getProjectContentComponent() const; | |||
virtual void addSubItems() {} | |||
@@ -118,11 +118,14 @@ public: | |||
: project (p), opennessStateKey (treeviewID) | |||
{ | |||
addAndMakeVisible (tree); | |||
tree.setRootItemVisible (true); | |||
tree.setDefaultOpenness (true); | |||
tree.setColour (TreeView::backgroundColourId, Colours::transparentBlack); | |||
tree.setIndentSize (14); | |||
tree.getViewport()->setScrollBarThickness (14); | |||
tree.getViewport()->setScrollBarThickness (6); | |||
tree.addMouseListener (this, true); | |||
} | |||
~TreePanelBase() | |||
@@ -133,7 +136,7 @@ public: | |||
void setRoot (JucerTreeViewBase*); | |||
void saveOpenness(); | |||
void deleteSelectedItems() | |||
virtual void deleteSelectedItems() | |||
{ | |||
if (rootItem != nullptr) | |||
rootItem->deleteAllSelectedItems(); | |||
@@ -152,7 +155,7 @@ public: | |||
{ | |||
const int fontHeight = 13; | |||
const Rectangle<int> area (comp.getLocalBounds()); | |||
g.setColour (comp.findColour (mainBackgroundColourId).contrasting (0.7f)); | |||
g.setColour (comp.findColour (defaultTextColourId)); | |||
g.setFont ((float) fontHeight); | |||
g.drawFittedText (message, area.reduced (4, 2), Justification::centred, area.getHeight() / fontHeight); | |||
} | |||
@@ -173,6 +176,12 @@ public: | |||
return Rectangle<int> (0, 2, getWidth() - 2, getHeight() - 2); | |||
} | |||
void mouseDown (const MouseEvent& e) override | |||
{ | |||
if (e.eventComponent == &tree) | |||
tree.clearSelectedItems(); | |||
} | |||
const Project* project; | |||
TreeView tree; | |||
ScopedPointer<JucerTreeViewBase> rootItem; | |||
@@ -192,19 +201,13 @@ public: | |||
void paint (Graphics& g) override | |||
{ | |||
g.setColour (Colours::black); | |||
Rectangle<int> localBounds (getLocalBounds()); | |||
const int border = 5; | |||
localBounds.removeFromLeft (border); | |||
item.paintIcon (g, localBounds.removeFromLeft (15)); | |||
auto bounds = getLocalBounds().toFloat(); | |||
auto iconBounds = bounds.removeFromLeft (25).reduced (7, 5); | |||
localBounds.removeFromLeft (border); | |||
localBounds.removeFromRight (border); | |||
bounds.removeFromRight (buttons.size() * bounds.getHeight()); | |||
item.paintContent (g, localBounds); | |||
item.paintIcon (g, iconBounds); | |||
item.paintContent (g, bounds.toNearestInt()); | |||
} | |||
void resized() override | |||
@@ -24,123 +24,485 @@ | |||
#include "../jucer_Headers.h" | |||
#include "jucer_ProjucerLookAndFeel.h" | |||
#include "../Application/jucer_Application.h" | |||
ProjucerLookAndFeel::ProjucerLookAndFeel() | |||
{ | |||
setColour (mainBackgroundColourId, Colour::greyLevel (0.8f)); | |||
setupColours(); | |||
} | |||
void ProjucerLookAndFeel::drawTabButton (TabBarButton& button, Graphics& g, bool isMouseOver, bool isMouseDown) | |||
{ | |||
const auto area = button.getActiveArea(); | |||
auto backgroundColour = findColour (button.isFrontTab() ? secondaryBackgroundColourId | |||
: inactiveTabBackgroundColourId); | |||
auto iconColour = findColour (button.isFrontTab() ? activeTabIconColourId | |||
: inactiveTabIconColourId); | |||
g.setColour (backgroundColour); | |||
g.fillRect (area); | |||
const auto alpha = button.isEnabled() ? ((isMouseOver || isMouseDown) ? 1.0f : 0.8f) : 0.3f; | |||
#ifndef BUILDING_JUCE_COMPILEENGINE | |||
if (button.getName() == "Project") | |||
{ | |||
auto icon = Icon (getIcons().closedFolder, iconColour.withMultipliedAlpha (alpha)); | |||
icon.draw (g, button.getTextArea().reduced (8, 8).toFloat(), false); | |||
} | |||
else if (button.getName() == "Build") | |||
{ | |||
auto icon = Icon (getIcons().buildTab, iconColour.withMultipliedAlpha (alpha)); | |||
icon.draw (g, button.getTextArea().reduced (8, 8).toFloat(), false); | |||
} | |||
else | |||
#endif | |||
{ | |||
auto textColour = findColour (defaultTextColourId).withMultipliedAlpha (alpha); | |||
TextLayout textLayout; | |||
LookAndFeel_V3::createTabTextLayout (button, (float) area.getWidth(), (float) area.getHeight(), textColour, textLayout); | |||
textLayout.draw (g, button.getTextArea().toFloat()); | |||
} | |||
} | |||
int ProjucerLookAndFeel::getTabButtonBestWidth (TabBarButton&, int) | |||
int ProjucerLookAndFeel::getTabButtonBestWidth (TabBarButton& button, int) | |||
{ | |||
if (TabbedButtonBar* bar = button.findParentComponentOfClass<TabbedButtonBar>()) | |||
return bar->getWidth() / bar->getNumTabs(); | |||
return 120; | |||
} | |||
Colour ProjucerLookAndFeel::getTabBackgroundColour (TabBarButton& button) | |||
void ProjucerLookAndFeel::drawPropertyComponentLabel (Graphics& g, int width, int height, PropertyComponent& component) | |||
{ | |||
const Colour bkg (button.findColour (mainBackgroundColourId).contrasting (0.15f)); | |||
ignoreUnused (width); | |||
g.setColour (component.findColour (defaultTextColourId) | |||
.withMultipliedAlpha (component.isEnabled() ? 1.0f : 0.6f)); | |||
if (button.isFrontTab()) | |||
return bkg.overlaidWith (Colours::yellow.withAlpha (0.5f)); | |||
auto textWidth = getTextWidthForPropertyComponent (&component); | |||
return bkg; | |||
g.setFont (getPropertyComponentFont()); | |||
g.drawFittedText (component.getName(), 0, 0, textWidth - 5, height, Justification::centredLeft, 5, 1.0f); | |||
} | |||
void ProjucerLookAndFeel::drawTabButton (TabBarButton& button, Graphics& g, bool isMouseOver, bool isMouseDown) | |||
Rectangle<int> ProjucerLookAndFeel::getPropertyComponentContentPosition (PropertyComponent& component) | |||
{ | |||
const auto textW = getTextWidthForPropertyComponent (&component); | |||
return { textW, 0, component.getWidth() - textW, component.getHeight() - 1 }; | |||
} | |||
void ProjucerLookAndFeel::drawButtonBackground (Graphics& g, | |||
Button& button, | |||
const Colour& backgroundColour, | |||
bool isMouseOverButton, | |||
bool isButtonDown) | |||
{ | |||
const auto cornerSize = button.findParentComponentOfClass<PropertyComponent>() != nullptr ? 0.0f : 3.0f; | |||
const auto bounds = button.getLocalBounds().toFloat(); | |||
auto baseColour = backgroundColour.withMultipliedSaturation (button.hasKeyboardFocus (true) ? 1.3f : 0.9f) | |||
.withMultipliedAlpha (button.isEnabled() ? 1.0f : 0.5f); | |||
if (isButtonDown || isMouseOverButton) | |||
baseColour = baseColour.contrasting (isButtonDown ? 0.2f : 0.05f); | |||
g.setColour (baseColour); | |||
if (button.isConnectedOnLeft() || button.isConnectedOnRight()) | |||
{ | |||
Path path; | |||
path.addRoundedRectangle (bounds.getX(), bounds.getY(), | |||
bounds.getWidth(), bounds.getHeight(), | |||
cornerSize, cornerSize, | |||
! button.isConnectedOnLeft(), | |||
! button.isConnectedOnRight(), | |||
! button.isConnectedOnLeft(), | |||
! button.isConnectedOnRight()); | |||
g.fillPath (path); | |||
} | |||
else | |||
{ | |||
g.fillRoundedRectangle (bounds, cornerSize); | |||
} | |||
} | |||
void ProjucerLookAndFeel::drawButtonText (Graphics& g, TextButton& button, bool isMouseOverButton, bool isButtonDown) | |||
{ | |||
ignoreUnused (isMouseOverButton, isButtonDown); | |||
g.setFont (getTextButtonFont (button, button.getHeight())); | |||
g.setColour (button.findColour (button.getToggleState() ? TextButton::textColourOnId | |||
: TextButton::textColourOffId) | |||
.withMultipliedAlpha (button.isEnabled() ? 1.0f | |||
: 0.5f)); | |||
auto xIndent = jmin (12, button.getWidth() / 10); | |||
auto yIndent = jmin (3, button.getHeight() / 6); | |||
auto textBounds = button.getLocalBounds().reduced (xIndent, yIndent); | |||
g.drawFittedText (button.getButtonText(), textBounds, Justification::centred, 3, 1.0f); | |||
} | |||
void ProjucerLookAndFeel::drawToggleButton (Graphics& g, ToggleButton& button, bool isMouseOverButton, bool isButtonDown) | |||
{ | |||
ignoreUnused (isMouseOverButton, isButtonDown); | |||
if (! button.isEnabled()) | |||
g.setOpacity (0.5f); | |||
bool isTextEmpty = button.getButtonText().isEmpty(); | |||
auto bounds = button.getLocalBounds(); | |||
auto rectBounds = isTextEmpty ? bounds | |||
: bounds.removeFromLeft (jmin (bounds.getHeight(), bounds.getWidth() / 3)); | |||
auto sideLength = jmin (rectBounds.getWidth(), rectBounds.getHeight()); | |||
rectBounds = rectBounds.withSizeKeepingCentre (sideLength, sideLength).reduced (4); | |||
g.setColour (button.findColour (ToggleButton::tickDisabledColourId)); | |||
g.drawRoundedRectangle (rectBounds.toFloat(), 2.0f, 1.0f); | |||
if (button.getToggleState()) | |||
{ | |||
g.setColour (button.findColour (ToggleButton::tickColourId)); | |||
const auto tick = getTickShape (0.75f); | |||
g.fillPath (tick, tick.getTransformToScaleToFit (rectBounds.reduced (4, 5).toFloat(), false)); | |||
} | |||
if (! isTextEmpty) | |||
{ | |||
bounds.removeFromLeft (5); | |||
auto isPropertyComponentChild = (button.findParentComponentOfClass<BooleanPropertyComponent>() != nullptr); | |||
const auto fontSize = jmin (15.0f, button.getHeight() * 0.75f); | |||
g.setFont (fontSize); | |||
g.setColour (isPropertyComponentChild ? findColour (widgetTextColourId) | |||
: button.findColour (ToggleButton::textColourId)); | |||
g.drawFittedText (button.getButtonText(), bounds, Justification::centredLeft, 2); | |||
} | |||
} | |||
Font ProjucerLookAndFeel::getTextButtonFont (TextButton&, int buttonHeight) | |||
{ | |||
return Font (jmin (12.0f, buttonHeight * 0.6f)); | |||
} | |||
void ProjucerLookAndFeel::fillTextEditorBackground (Graphics& g, int width, int height, TextEditor& textEditor) | |||
{ | |||
const Rectangle<int> activeArea (button.getActiveArea()); | |||
g.setColour (textEditor.findColour (TextEditor::backgroundColourId)); | |||
g.fillRect (0, 0, width, height); | |||
const Colour bkg (getTabBackgroundColour (button)); | |||
g.setColour (textEditor.findColour (TextEditor::outlineColourId)); | |||
g.drawHorizontalLine (height - 1, 0.0f, static_cast<float> (width)); | |||
} | |||
void ProjucerLookAndFeel::layoutFileBrowserComponent (FileBrowserComponent& browserComp, | |||
DirectoryContentsDisplayComponent* fileListComponent, | |||
FilePreviewComponent* previewComp, | |||
ComboBox* currentPathBox, | |||
TextEditor* filenameBox, | |||
Button* goUpButton) | |||
{ | |||
const auto sectionHeight = 22; | |||
const auto buttonWidth = 50; | |||
auto b = browserComp.getLocalBounds().reduced (20, 5); | |||
g.setGradientFill (ColourGradient (bkg.brighter (0.1f), 0, (float) activeArea.getY(), | |||
bkg.darker (0.1f), 0, (float) activeArea.getBottom(), false)); | |||
g.fillRect (activeArea); | |||
auto topSlice = b.removeFromTop (sectionHeight); | |||
auto bottomSlice = b.removeFromBottom (sectionHeight); | |||
g.setColour (button.findColour (mainBackgroundColourId).darker (0.3f)); | |||
g.drawRect (activeArea); | |||
currentPathBox->setBounds (topSlice.removeFromLeft (topSlice.getWidth() - buttonWidth)); | |||
currentPathBox->setColour (ComboBox::backgroundColourId, findColour (backgroundColourId)); | |||
currentPathBox->setColour (ComboBox::textColourId, findColour (defaultTextColourId)); | |||
currentPathBox->setColour (ComboBox::arrowColourId, findColour (defaultTextColourId)); | |||
const float alpha = button.isEnabled() ? ((isMouseOver || isMouseDown) ? 1.0f : 0.8f) : 0.3f; | |||
const Colour col (bkg.contrasting().withMultipliedAlpha (alpha)); | |||
topSlice.removeFromLeft (6); | |||
goUpButton->setBounds (topSlice); | |||
TextLayout textLayout; | |||
LookAndFeel_V3::createTabTextLayout (button, (float) activeArea.getWidth(), (float) activeArea.getHeight(), col, textLayout); | |||
bottomSlice.removeFromLeft (20); | |||
filenameBox->setBounds (bottomSlice); | |||
filenameBox->setColour (TextEditor::backgroundColourId, findColour (backgroundColourId)); | |||
filenameBox->setColour (TextEditor::textColourId, findColour (defaultTextColourId)); | |||
filenameBox->setColour (TextEditor::outlineColourId, findColour (defaultTextColourId)); | |||
filenameBox->applyFontToAllText (filenameBox->getFont()); | |||
textLayout.draw (g, button.getTextArea().toFloat()); | |||
if (previewComp != nullptr) | |||
previewComp->setBounds (b.removeFromRight (b.getWidth() / 3)); | |||
if (auto listAsComp = dynamic_cast<Component*> (fileListComponent)) | |||
listAsComp->setBounds (b.reduced (0, 10)); | |||
} | |||
void ProjucerLookAndFeel::drawConcertinaPanelHeader (Graphics& g, const Rectangle<int>& area, | |||
bool isMouseOver, bool /*isMouseDown*/, | |||
ConcertinaPanel&, Component& panel) | |||
void ProjucerLookAndFeel::drawFileBrowserRow (Graphics& g, int width, int height, | |||
const String& filename, Image* icon, | |||
const String& fileSizeDescription, | |||
const String& fileTimeDescription, | |||
const bool isDirectory, const bool isItemSelected, | |||
const int itemIndex, DirectoryContentsDisplayComponent& dcc) | |||
{ | |||
const Colour bkg (Colours::grey); | |||
if (auto fileListComp = dynamic_cast<Component*> (&dcc)) | |||
{ | |||
fileListComp->setColour (DirectoryContentsDisplayComponent::textColourId, | |||
findColour (isItemSelected ? defaultHighlightedTextColourId : defaultTextColourId)); | |||
fileListComp->setColour (DirectoryContentsDisplayComponent::highlightColourId, | |||
findColour (defaultHighlightColourId)); | |||
} | |||
g.setGradientFill (ColourGradient (Colour::greyLevel (isMouseOver ? 0.6f : 0.5f), 0, (float) area.getY(), | |||
Colour::greyLevel (0.4f), 0, (float) area.getBottom(), false)); | |||
g.fillAll(); | |||
g.setColour (bkg.contrasting().withAlpha (0.1f)); | |||
g.fillRect (area.withHeight (1)); | |||
g.fillRect (area.withTop (area.getBottom() - 1)); | |||
LookAndFeel_V2::drawFileBrowserRow (g, width, height, filename, icon, | |||
fileSizeDescription, fileTimeDescription, | |||
isDirectory, isItemSelected, itemIndex, dcc); | |||
} | |||
void ProjucerLookAndFeel::drawCallOutBoxBackground (CallOutBox&, Graphics& g, const Path& path, Image&) | |||
{ | |||
g.setColour (findColour (secondaryBackgroundColourId)); | |||
g.fillPath (path); | |||
g.setColour (bkg.contrasting()); | |||
g.setFont (Font (area.getHeight() * 0.6f).boldened()); | |||
g.drawFittedText (panel.getName(), 4, 0, area.getWidth() - 6, area.getHeight(), Justification::centredLeft, 1); | |||
g.setColour (findColour (userButtonBackgroundColourId)); | |||
g.strokePath (path, PathStrokeType (2.0f)); | |||
} | |||
static Range<float> getBrightnessRange (const Image& im) | |||
void ProjucerLookAndFeel::drawMenuBarBackground (Graphics& g, int width, int height, | |||
bool, MenuBarComponent& menuBar) | |||
{ | |||
float minB = 1.0f, maxB = 0; | |||
const int w = im.getWidth(); | |||
const int h = im.getHeight(); | |||
const auto colour = menuBar.findColour (backgroundColourId).withAlpha (0.75f); | |||
Rectangle<int> r (width, height); | |||
for (int y = 0; y < h; ++y) | |||
g.setColour (colour.contrasting (0.15f)); | |||
g.fillRect (r.removeFromTop (1)); | |||
g.fillRect (r.removeFromBottom (1)); | |||
g.setGradientFill (ColourGradient (colour, 0, 0, colour.darker (0.2f), 0, (float)height, false)); | |||
g.fillRect (r); | |||
} | |||
void ProjucerLookAndFeel::drawMenuBarItem (Graphics& g, int width, int height, | |||
int itemIndex, const String& itemText, | |||
bool isMouseOverItem, bool isMenuOpen, | |||
bool /*isMouseOverBar*/, MenuBarComponent& menuBar) | |||
{ | |||
if (! menuBar.isEnabled()) | |||
{ | |||
for (int x = 0; x < w; ++x) | |||
{ | |||
const float b = im.getPixelAt (x, y).getBrightness(); | |||
minB = jmin (minB, b); | |||
maxB = jmax (maxB, b); | |||
} | |||
g.setColour (menuBar.findColour (defaultTextColourId) | |||
.withMultipliedAlpha (0.5f)); | |||
} | |||
else if (isMenuOpen || isMouseOverItem) | |||
{ | |||
g.fillAll (menuBar.findColour (defaultHighlightColourId)); | |||
g.setColour (menuBar.findColour (defaultHighlightedTextColourId)); | |||
} | |||
else | |||
{ | |||
g.setColour (menuBar.findColour (defaultTextColourId)); | |||
} | |||
return Range<float> (minB, maxB); | |||
g.setFont (getMenuBarFont (menuBar, itemIndex, itemText)); | |||
g.drawFittedText (itemText, 0, 0, width, height, Justification::centred, 1); | |||
} | |||
void ProjucerLookAndFeel::fillWithBackgroundTexture (Graphics& g) | |||
void ProjucerLookAndFeel::drawResizableFrame (Graphics& g, int w, int h, const BorderSize<int>& border) | |||
{ | |||
const Colour bkg (findColour (mainBackgroundColourId)); | |||
if (! border.isEmpty()) | |||
{ | |||
const Rectangle<int> fullSize (0, 0, w, h); | |||
const Rectangle<int> centreArea (border.subtractedFrom (fullSize)); | |||
g.excludeClipRegion (centreArea); | |||
g.fillAll (getCurrentColourScheme().getUIColour (LookAndFeel_V4::ColourScheme::UIColour::windowBackground)); | |||
} | |||
} | |||
if (backgroundTextureBaseColour != bkg) | |||
void ProjucerLookAndFeel::drawComboBox (Graphics& g, int width, int height, bool, | |||
int, int, int, int, ComboBox& box) | |||
{ | |||
const auto cornerSize = box.findParentComponentOfClass<ChoicePropertyComponent>() != nullptr ? 0.0f : 1.5f; | |||
Rectangle<int> boxBounds (0, 0, width, height); | |||
auto isChoiceCompChild = (box.findParentComponentOfClass<ChoicePropertyComponent>() != nullptr); | |||
if (isChoiceCompChild) | |||
{ | |||
backgroundTextureBaseColour = bkg; | |||
box.setColour (ComboBox::textColourId, findColour (widgetTextColourId)); | |||
const Image original (ImageCache::getFromMemory (BinaryData::background_tile_png, | |||
BinaryData::background_tile_pngSize)); | |||
const int w = original.getWidth(); | |||
const int h = original.getHeight(); | |||
g.setColour (findColour (widgetBackgroundColourId)); | |||
g.fillRect (boxBounds); | |||
backgroundTexture = Image (Image::RGB, w, h, false); | |||
auto arrowZone = boxBounds.removeFromRight (boxBounds.getHeight()).reduced (0, 2).toFloat(); | |||
g.setColour (Colours::black); | |||
g.fillPath (getChoiceComponentArrowPath (arrowZone)); | |||
} | |||
else | |||
{ | |||
g.setColour (box.findColour (ComboBox::outlineColourId)); | |||
g.drawRoundedRectangle (boxBounds.toFloat().reduced (0.5f, 0.5f), cornerSize, 1.0f); | |||
const Range<float> brightnessRange (getBrightnessRange (original)); | |||
const float brightnessOffset = (brightnessRange.getStart() + brightnessRange.getEnd()) / 2.0f; | |||
const float brightnessScale = 0.025f / brightnessRange.getLength(); | |||
const float bkgB = bkg.getBrightness(); | |||
auto arrowZone = boxBounds.removeFromRight (boxBounds.getHeight()).toFloat(); | |||
g.setColour (box.findColour (ComboBox::arrowColourId).withAlpha ((box.isEnabled() ? 0.9f : 0.2f))); | |||
g.fillPath (getArrowPath (arrowZone, 2, true, Justification::centred)); | |||
for (int y = 0; y < h; ++y) | |||
{ | |||
for (int x = 0; x < w; ++x) | |||
{ | |||
const float b = (original.getPixelAt (x, y).getBrightness() - brightnessOffset) * brightnessScale; | |||
backgroundTexture.setPixelAt (x, y, bkg.withBrightness (jlimit (0.0f, 1.0f, bkgB + b))); | |||
} | |||
} | |||
} | |||
} | |||
g.setTiledImageFill (backgroundTexture, 0, 0, 1.0f); | |||
g.fillAll(); | |||
void ProjucerLookAndFeel::drawTreeviewPlusMinusBox (Graphics& g, const Rectangle<float>& area, | |||
Colour, bool isOpen, bool /**isMouseOver*/) | |||
{ | |||
g.strokePath (getArrowPath (area, isOpen ? 2 : 1, false, Justification::centredRight), PathStrokeType (2.0f)); | |||
} | |||
void ProjucerLookAndFeel::fillWithBackgroundTexture (Component& c, Graphics& g) | |||
//============================================================================== | |||
Path ProjucerLookAndFeel::getArrowPath (Rectangle<float> arrowZone, const int direction, | |||
bool filled, const Justification justification) | |||
{ | |||
dynamic_cast<ProjucerLookAndFeel&> (c.getLookAndFeel()).fillWithBackgroundTexture (g); | |||
auto w = jmin (arrowZone.getWidth(), (direction == 0 || direction == 2) ? 8.0f : filled ? 5.0f : 8.0f); | |||
auto h = jmin (arrowZone.getHeight(), (direction == 0 || direction == 2) ? 5.0f : filled ? 8.0f : 5.0f); | |||
if (justification == Justification::centred) | |||
{ | |||
arrowZone.reduce ((arrowZone.getWidth() - w) / 2, (arrowZone.getHeight() - h) / 2); | |||
} | |||
else if (justification == Justification::centredRight) | |||
{ | |||
arrowZone.removeFromLeft (arrowZone.getWidth() - w); | |||
arrowZone.reduce (0, (arrowZone.getHeight() - h) / 2); | |||
} | |||
else if (justification == Justification::centredLeft) | |||
{ | |||
arrowZone.removeFromRight (arrowZone.getWidth() - w); | |||
arrowZone.reduce (0, (arrowZone.getHeight() - h) / 2); | |||
} | |||
else | |||
{ | |||
jassertfalse; // currently only supports centred justifications | |||
} | |||
Path path; | |||
path.startNewSubPath (arrowZone.getX(), arrowZone.getBottom()); | |||
path.lineTo (arrowZone.getCentreX(), arrowZone.getY()); | |||
path.lineTo (arrowZone.getRight(), arrowZone.getBottom()); | |||
if (filled) | |||
path.closeSubPath(); | |||
path.applyTransform (AffineTransform::rotation (direction * (float_Pi / 2.0f), arrowZone.getCentreX(), arrowZone.getCentreY())); | |||
return path; | |||
} | |||
Path ProjucerLookAndFeel::getChoiceComponentArrowPath (Rectangle<float> arrowZone) | |||
{ | |||
auto topBounds = arrowZone.removeFromTop (arrowZone.getHeight() * 0.5f); | |||
auto bottomBounds = arrowZone; | |||
auto topArrow = getArrowPath (topBounds, 0, true, Justification::centred); | |||
auto bottomArrow = getArrowPath (bottomBounds, 2, true, Justification::centred); | |||
topArrow.addPath (bottomArrow); | |||
return topArrow; | |||
} | |||
//============================================================================== | |||
void ProjucerLookAndFeel::setupColours() | |||
{ | |||
auto& colourScheme = getCurrentColourScheme(); | |||
if (colourScheme == getDarkColourScheme()) | |||
{ | |||
setColour (backgroundColourId, Colour (0xff323e44)); | |||
setColour (secondaryBackgroundColourId, Colour (0xff263238)); | |||
setColour (defaultTextColourId, Colours::white); | |||
setColour (widgetTextColourId, Colours::white); | |||
setColour (defaultButtonBackgroundColourId, Colour (0xffa45c94)); | |||
setColour (secondaryButtonBackgroundColourId, Colours::black); | |||
setColour (userButtonBackgroundColourId, Colour (0xffa45c94)); | |||
setColour (defaultIconColourId, Colours::white); | |||
setColour (treeIconColourId, Colour (0xffa9a9a9)); | |||
setColour (defaultHighlightColourId, Colour (0xffe0ec65)); | |||
setColour (defaultHighlightedTextColourId, Colours::black); | |||
setColour (codeEditorLineNumberColourId, Colour (0xffaaaaaa)); | |||
setColour (activeTabIconColourId, Colours::white); | |||
setColour (inactiveTabBackgroundColourId, Colour (0xff181f22)); | |||
setColour (inactiveTabIconColourId, Colour (0xffa9a9a9)); | |||
setColour (contentHeaderBackgroundColourId, Colours::black); | |||
setColour (widgetBackgroundColourId, Colour (0xff495358)); | |||
setColour (secondaryWidgetBackgroundColourId, Colour (0xff303b41)); | |||
colourScheme.setUIColour (LookAndFeel_V4::ColourScheme::UIColour::defaultFill, Colour (0xffa45c94)); | |||
} | |||
else if (colourScheme == getGreyColourScheme()) | |||
{ | |||
setColour (backgroundColourId, Colour (0xff505050)); | |||
setColour (secondaryBackgroundColourId, Colour (0xff424241)); | |||
setColour (defaultTextColourId, Colours::white); | |||
setColour (widgetTextColourId, Colours::black); | |||
setColour (defaultButtonBackgroundColourId, Colour (0xff26ba90)); | |||
setColour (secondaryButtonBackgroundColourId, Colours::black); | |||
setColour (userButtonBackgroundColourId, Colour (0xff26ba90)); | |||
setColour (defaultIconColourId, Colours::white); | |||
setColour (treeIconColourId, Colour (0xffa9a9a9)); | |||
setColour (defaultHighlightColourId, Colour (0xffe0ec65)); | |||
setColour (defaultHighlightedTextColourId, Colours::black); | |||
setColour (codeEditorLineNumberColourId, Colour (0xffaaaaaa)); | |||
setColour (activeTabIconColourId, Colours::white); | |||
setColour (inactiveTabBackgroundColourId, Colour (0xff373737)); | |||
setColour (inactiveTabIconColourId, Colour (0xffa9a9a9)); | |||
setColour (contentHeaderBackgroundColourId, Colours::black); | |||
setColour (widgetBackgroundColourId, Colours::white); | |||
setColour (secondaryWidgetBackgroundColourId, Colour (0xffdddddd)); | |||
} | |||
else if (colourScheme == getLightColourScheme()) | |||
{ | |||
setColour (backgroundColourId, Colour (0xffefefef)); | |||
setColour (secondaryBackgroundColourId, Colour (0xfff9f9f9)); | |||
setColour (defaultTextColourId, Colours::black); | |||
setColour (widgetTextColourId, Colours::black); | |||
setColour (defaultButtonBackgroundColourId, Colour (0xff42a2c8)); | |||
setColour (secondaryButtonBackgroundColourId, Colour (0xffa1c677)); | |||
setColour (userButtonBackgroundColourId, Colour (0xffff5b5b)); | |||
setColour (defaultIconColourId, Colours::white); | |||
setColour (treeIconColourId, Colour (0xffa9a9a9)); | |||
setColour (defaultHighlightColourId, Colour (0xffffd05b)); | |||
setColour (defaultHighlightedTextColourId, Colour (0xff585656)); | |||
setColour (codeEditorLineNumberColourId, Colour (0xff888888)); | |||
setColour (activeTabIconColourId, Colour (0xff42a2c8)); | |||
setColour (inactiveTabBackgroundColourId, Colour (0xffd5d5d5)); | |||
setColour (inactiveTabIconColourId, Colour (0xffa9a9a9)); | |||
setColour (contentHeaderBackgroundColourId, Colour (0xff42a2c8)); | |||
setColour (widgetBackgroundColourId, Colours::white); | |||
setColour (secondaryWidgetBackgroundColourId, Colour (0xfff4f4f4)); | |||
} | |||
setColour (Label::textColourId, findColour (defaultTextColourId)); | |||
setColour (Label::textColourId, findColour (defaultTextColourId)); | |||
setColour (TextEditor::highlightColourId, findColour (defaultHighlightColourId)); | |||
setColour (TextEditor::highlightedTextColourId, findColour (defaultHighlightedTextColourId)); | |||
setColour (TextEditor::outlineColourId, Colours::transparentBlack); | |||
setColour (TextEditor::focusedOutlineColourId, Colours::transparentBlack); | |||
setColour (TextEditor::backgroundColourId, findColour (widgetBackgroundColourId)); | |||
setColour (TextEditor::textColourId, findColour (widgetTextColourId)); | |||
setColour (TextButton::buttonColourId, findColour (defaultButtonBackgroundColourId)); | |||
setColour (ScrollBar::ColourIds::thumbColourId, Colour (0xffd0d8e0)); | |||
setColour (TextPropertyComponent::outlineColourId, Colours::transparentBlack); | |||
setColour (TextPropertyComponent::backgroundColourId, findColour (widgetBackgroundColourId)); | |||
setColour (TextPropertyComponent::textColourId, findColour (widgetTextColourId)); | |||
setColour (BooleanPropertyComponent::outlineColourId, Colours::transparentBlack); | |||
setColour (BooleanPropertyComponent::backgroundColourId, findColour (widgetBackgroundColourId)); | |||
setColour (ToggleButton::tickDisabledColourId, Colour (0xffa9a9a9)); | |||
setColour (ToggleButton::tickColourId, findColour (defaultButtonBackgroundColourId)); | |||
setColour (CodeEditorComponent::backgroundColourId, findColour (secondaryBackgroundColourId)); | |||
setColour (CodeEditorComponent::lineNumberTextId, findColour (codeEditorLineNumberColourId)); | |||
setColour (CodeEditorComponent::lineNumberBackgroundId, findColour (backgroundColourId)); | |||
setColour (CaretComponent::caretColourId, findColour (defaultButtonBackgroundColourId)); | |||
setColour (TreeView::selectedItemBackgroundColourId, findColour (defaultHighlightColourId)); | |||
} |
@@ -26,21 +26,65 @@ | |||
//============================================================================== | |||
class ProjucerLookAndFeel : public LookAndFeel_V3 | |||
class ProjucerLookAndFeel : public LookAndFeel_V4 | |||
{ | |||
public: | |||
ProjucerLookAndFeel(); | |||
void fillWithBackgroundTexture (Graphics&); | |||
static void fillWithBackgroundTexture (Component&, Graphics&); | |||
void drawTabButton (TabBarButton& button, Graphics&, bool isMouseOver, bool isMouseDown) override; | |||
void drawTabAreaBehindFrontButton (TabbedButtonBar&, Graphics&, int, int) override {} | |||
int getTabButtonBestWidth (TabBarButton&, int tabDepth) override; | |||
void drawConcertinaPanelHeader (Graphics&, const juce::Rectangle<int>&, bool, bool, ConcertinaPanel&, Component&) override; | |||
static Colour getTabBackgroundColour (TabBarButton&); | |||
void drawTabAreaBehindFrontButton (TabbedButtonBar&, Graphics&, int, int) override {} | |||
void drawPropertyComponentBackground (Graphics&, int, int, PropertyComponent&) override {} | |||
void drawPropertyComponentLabel (Graphics&, int width, int height, PropertyComponent&) override; | |||
Rectangle<int> getPropertyComponentContentPosition (PropertyComponent&) override; | |||
void drawButtonBackground (Graphics&, Button&, const Colour& backgroundColour, | |||
bool isMouseOverButton, bool isButtonDown) override; | |||
void drawButtonText (Graphics&, TextButton&, bool isMouseOverButton, bool isButtonDown) override; | |||
void drawToggleButton (Graphics&, ToggleButton&, bool isMouseOverButton, bool isButtonDown) override; | |||
Font getTextButtonFont (TextButton&, int buttonHeight) override; | |||
void drawTextEditorOutline (Graphics&, int, int, TextEditor&) override {} | |||
void fillTextEditorBackground (Graphics&, int width, int height, TextEditor&) override; | |||
void layoutFileBrowserComponent (FileBrowserComponent&, DirectoryContentsDisplayComponent*, | |||
FilePreviewComponent*, ComboBox* currentPathBox, | |||
TextEditor* filenameBox,Button* goUpButton) override; | |||
void drawFileBrowserRow (Graphics&, int width, int height, const String& filename, Image* icon, | |||
const String& fileSizeDescription, const String& fileTimeDescription, | |||
bool isDirectory, bool isItemSelected, int itemIndex, DirectoryContentsDisplayComponent&) override; | |||
void drawCallOutBoxBackground (CallOutBox&, Graphics&, const Path&, Image&) override; | |||
void drawMenuBarBackground (Graphics&, int width, int height, bool isMouseOverBar, MenuBarComponent&) override; | |||
void drawMenuBarItem (Graphics&, int width, int height, | |||
int itemIndex, const String& itemText, | |||
bool isMouseOverItem, bool isMenuOpen, bool isMouseOverBar, | |||
MenuBarComponent&) override; | |||
void drawResizableFrame (Graphics&, int w, int h, const BorderSize<int>&) override; | |||
void drawComboBox (Graphics&, int width, int height, bool isButtonDown, | |||
int buttonX, int buttonY, int buttonW, int buttonH, | |||
ComboBox&) override; | |||
void drawTreeviewPlusMinusBox (Graphics&, const Rectangle<float>& area, | |||
Colour backgroundColour, bool isItemOpen, bool isMouseOver) override; | |||
//============================================================================== | |||
static Path getArrowPath (Rectangle<float> arrowZone, const int direction, | |||
const bool filled, const Justification justification); | |||
static Path getChoiceComponentArrowPath (Rectangle<float> arrowZone); | |||
static Font getPropertyComponentFont() { return { 14.0f, Font::FontStyleFlags::bold }; } | |||
static int getTextWidthForPropertyComponent (PropertyComponent* pp) { return jmin (200, pp->getWidth() / 2); } | |||
//============================================================================== | |||
void setupColours(); | |||
private: | |||
Image backgroundTexture; | |||
Colour backgroundTextureBaseColour; | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ProjucerLookAndFeel) | |||
}; |
@@ -32,21 +32,16 @@ public: | |||
"code that will load it as a Path object..") | |||
{ | |||
desc.setJustificationType (Justification::centred); | |||
desc.setColour (Label::textColourId, Colours::white); | |||
addAndMakeVisible (desc); | |||
const Colour bkgd (Colours::white.withAlpha (0.6f)); | |||
userText.setFont (getAppSettings().appearance.getCodeFont().withHeight (13.0f)); | |||
userText.setMultiLine (true, true); | |||
userText.setReturnKeyStartsNewLine (true); | |||
userText.setColour (TextEditor::backgroundColourId, bkgd); | |||
addAndMakeVisible (userText); | |||
userText.addListener (this); | |||
resultText.setFont (getAppSettings().appearance.getCodeFont().withHeight (13.0f)); | |||
resultText.setMultiLine (true, true); | |||
resultText.setColour (TextEditor::backgroundColourId, bkgd); | |||
resultText.setReadOnly (true); | |||
resultText.setSelectAllWhenFocused (true); | |||
addAndMakeVisible (resultText); | |||
@@ -106,10 +101,16 @@ public: | |||
void paint (Graphics& g) override | |||
{ | |||
g.setColour (Colours::white); | |||
g.setColour (findColour (secondaryBackgroundColourId)); | |||
g.fillPath (path, path.getTransformToScaleToFit (previewPathArea.reduced (4).toFloat(), true)); | |||
} | |||
void lookAndFeelChanged() override | |||
{ | |||
userText.applyFontToAllText (userText.getFont()); | |||
resultText.applyFontToAllText (resultText.getFont()); | |||
} | |||
private: | |||
Label desc; | |||
TextEditor userText, resultText; | |||