1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

Projucer: Remove user login and license check code

This commit is contained in:
Oliver James 2024-06-04 09:58:09 +01:00
parent fcaaf38c58
commit 7306fe1789
31 changed files with 108 additions and 2007 deletions

View file

@ -122,7 +122,6 @@
23A8DE16C0CDB8EED18B008B /* jucer_CommandIDs.h */ /* jucer_CommandIDs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_CommandIDs.h; path = ../../Source/Application/jucer_CommandIDs.h; sourceTree = SOURCE_ROOT; };
23D79A22569BEDF63B57DD36 /* jucer_CodeHelpers.h */ /* jucer_CodeHelpers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_CodeHelpers.h; path = ../../Source/Utility/Helpers/jucer_CodeHelpers.h; sourceTree = SOURCE_ROOT; };
2407B8BCEAB78AE0FE6C1594 /* jucer_AudioPluginARAEditorTemplate.cpp */ /* jucer_AudioPluginARAEditorTemplate.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_AudioPluginARAEditorTemplate.cpp; path = ../../Source/BinaryData/Templates/jucer_AudioPluginARAEditorTemplate.cpp; sourceTree = SOURCE_ROOT; };
247768B490B9D759DDA79359 /* jucer_UserAvatarComponent.h */ /* jucer_UserAvatarComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_UserAvatarComponent.h; path = ../../Source/Project/UI/jucer_UserAvatarComponent.h; sourceTree = SOURCE_ROOT; };
24EB4C2412821B8019D6F754 /* jucer_TestComponent.cpp */ /* jucer_TestComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_TestComponent.cpp; path = ../../Source/ComponentEditor/UI/jucer_TestComponent.cpp; sourceTree = SOURCE_ROOT; };
25BE1265FE6C6EA3473A3A0A /* jucer_ResourceFile.h */ /* jucer_ResourceFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ResourceFile.h; path = ../../Source/ProjectSaving/jucer_ResourceFile.h; sourceTree = SOURCE_ROOT; };
269A454F1FF081DA67FFD578 /* jucer_JucerDocument.cpp */ /* jucer_JucerDocument.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_JucerDocument.cpp; path = ../../Source/ComponentEditor/jucer_JucerDocument.cpp; sourceTree = SOURCE_ROOT; };
@ -130,7 +129,6 @@
2CD34A70B4032C0426F7AA10 /* jucer_MainWindow.h */ /* jucer_MainWindow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_MainWindow.h; path = ../../Source/Application/jucer_MainWindow.h; sourceTree = SOURCE_ROOT; };
2E9CF857DCF1EFEA997B4D5B /* jucer_AudioPluginARAPlaybackRendererTemplate.h */ /* jucer_AudioPluginARAPlaybackRendererTemplate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_AudioPluginARAPlaybackRendererTemplate.h; path = ../../Source/BinaryData/Templates/jucer_AudioPluginARAPlaybackRendererTemplate.h; sourceTree = SOURCE_ROOT; };
2EEB1C074162F363C6599282 /* jucer_CommandLine.h */ /* jucer_CommandLine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_CommandLine.h; path = ../../Source/Application/jucer_CommandLine.h; sourceTree = SOURCE_ROOT; };
2F0A7CA808B2FCCC9ED68992 /* jucer_LicenseQueryThread.h */ /* jucer_LicenseQueryThread.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_LicenseQueryThread.h; path = ../../Source/Application/UserAccount/jucer_LicenseQueryThread.h; sourceTree = SOURCE_ROOT; };
2F373F97E30AC1A0BFC1FC61 /* jucer_FilePropertyComponent.h */ /* jucer_FilePropertyComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_FilePropertyComponent.h; path = ../../Source/ComponentEditor/Properties/jucer_FilePropertyComponent.h; sourceTree = SOURCE_ROOT; };
32C4B61AD995877956B7FA66 /* jucer_InlineComponentTemplate.h */ /* jucer_InlineComponentTemplate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_InlineComponentTemplate.h; path = ../../Source/BinaryData/Templates/jucer_InlineComponentTemplate.h; sourceTree = SOURCE_ROOT; };
32ECBC08D903418CA0825870 /* jucer_ContentViewComponents.h */ /* jucer_ContentViewComponents.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ContentViewComponents.h; path = ../../Source/Project/UI/jucer_ContentViewComponents.h; sourceTree = SOURCE_ROOT; };
@ -214,7 +212,6 @@
77EA01E7D04BF889930BFF54 /* jucer_PaintElementRoundedRectangle.h */ /* jucer_PaintElementRoundedRectangle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_PaintElementRoundedRectangle.h; path = ../../Source/ComponentEditor/PaintElements/jucer_PaintElementRoundedRectangle.h; sourceTree = SOURCE_ROOT; };
78D0DBC4798FF040FDB90F6D /* jucer_GeneratedCode.cpp */ /* jucer_GeneratedCode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_GeneratedCode.cpp; path = ../../Source/ComponentEditor/jucer_GeneratedCode.cpp; sourceTree = SOURCE_ROOT; };
7AB7640968FAAC73072FBD10 /* juce_gui_basics */ /* juce_gui_basics */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_gui_basics; path = ../../../../modules/juce_gui_basics; sourceTree = SOURCE_ROOT; };
7B975D9F6EDB528AADE8831F /* agplv3_logo.svg */ /* agplv3_logo.svg */ = {isa = PBXFileReference; lastKnownFileType = file.svg; name = agplv3_logo.svg; path = ../../Source/BinaryData/Icons/agplv3_logo.svg; sourceTree = SOURCE_ROOT; };
7CA44FF0BA319517C6E39651 /* jucer_Application.cpp */ /* jucer_Application.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_Application.cpp; path = ../../Source/Application/jucer_Application.cpp; sourceTree = SOURCE_ROOT; };
7E2013F425E231C6D865DDD0 /* jucer_ComponentChoiceProperty.h */ /* jucer_ComponentChoiceProperty.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentChoiceProperty.h; path = ../../Source/ComponentEditor/Properties/jucer_ComponentChoiceProperty.h; sourceTree = SOURCE_ROOT; };
7F0A5319912991615FC57945 /* jucer_ColourPropertyComponent.h */ /* jucer_ColourPropertyComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ColourPropertyComponent.h; path = ../../Source/ComponentEditor/Properties/jucer_ColourPropertyComponent.h; sourceTree = SOURCE_ROOT; };
@ -241,7 +238,6 @@
921D263A2EAFD96C8D389693 /* JuceLV2Defines.h.in */ /* JuceLV2Defines.h.in */ = {isa = PBXFileReference; lastKnownFileType = file.in; name = JuceLV2Defines.h.in; path = ../../../Build/CMake/JuceLV2Defines.h.in; sourceTree = SOURCE_ROOT; };
92926A4D3CC4BB2A9D35EB0B /* jucer_UTF8WindowComponent.h */ /* jucer_UTF8WindowComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_UTF8WindowComponent.h; path = ../../Source/Application/Windows/jucer_UTF8WindowComponent.h; sourceTree = SOURCE_ROOT; };
92A66A8BD87F98EB6B4FB6D0 /* jucer_ProjectContentComponent.h */ /* jucer_ProjectContentComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectContentComponent.h; path = ../../Source/Project/UI/jucer_ProjectContentComponent.h; sourceTree = SOURCE_ROOT; };
94146B40B41BF0AACF4359DD /* jucer_LicenseState.h */ /* jucer_LicenseState.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_LicenseState.h; path = ../../Source/Application/UserAccount/jucer_LicenseState.h; sourceTree = SOURCE_ROOT; };
951128CA33CCDEF570436B1C /* Icon.icns */ /* Icon.icns */ = {isa = PBXFileReference; lastKnownFileType = file.icns; name = Icon.icns; path = Icon.icns; sourceTree = SOURCE_ROOT; };
96A1EC6B50DBD2C526C60338 /* jucer_AudioPluginARADocumentControllerTemplate.cpp */ /* jucer_AudioPluginARADocumentControllerTemplate.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_AudioPluginARADocumentControllerTemplate.cpp; path = ../../Source/BinaryData/Templates/jucer_AudioPluginARADocumentControllerTemplate.cpp; sourceTree = SOURCE_ROOT; };
983CFBA01CA8811F30FA7F4C /* jucer_MiscUtilities.h */ /* jucer_MiscUtilities.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_MiscUtilities.h; path = ../../Source/Utility/Helpers/jucer_MiscUtilities.h; sourceTree = SOURCE_ROOT; };
@ -277,7 +273,6 @@
B3528C08B84CBC950252EA69 /* jucer_ModulesInformationComponent.h */ /* jucer_ModulesInformationComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ModulesInformationComponent.h; path = ../../Source/Project/UI/jucer_ModulesInformationComponent.h; sourceTree = SOURCE_ROOT; };
B403AF75EAF361ED74EE476E /* jucer_FileHelpers.cpp */ /* jucer_FileHelpers.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_FileHelpers.cpp; path = ../../Source/Utility/Helpers/jucer_FileHelpers.cpp; sourceTree = SOURCE_ROOT; };
B542D78F431A52AF07F4113B /* jucer_AudioPluginARAFilterTemplate.h */ /* jucer_AudioPluginARAFilterTemplate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_AudioPluginARAFilterTemplate.h; path = ../../Source/BinaryData/Templates/jucer_AudioPluginARAFilterTemplate.h; sourceTree = SOURCE_ROOT; };
B6444A4A8DFD6828FF6BD1CB /* jucer_LoginFormComponent.h */ /* jucer_LoginFormComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_LoginFormComponent.h; path = ../../Source/Application/UserAccount/jucer_LoginFormComponent.h; sourceTree = SOURCE_ROOT; };
B6F2905330EA5C560D527209 /* juce_graphics */ /* juce_graphics */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_graphics; path = ../../../../modules/juce_graphics; sourceTree = SOURCE_ROOT; };
B83C9BD89F31EA9E5E12A3C6 /* juce_icon.png */ /* juce_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = juce_icon.png; path = ../../Source/BinaryData/Icons/juce_icon.png; sourceTree = SOURCE_ROOT; };
B97D60D2531CFD0D8555BA5C /* jucer_PaintElementText.h */ /* jucer_PaintElementText.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_PaintElementText.h; path = ../../Source/ComponentEditor/PaintElements/jucer_PaintElementText.h; sourceTree = SOURCE_ROOT; };
@ -350,7 +345,6 @@
F073B54B36D845915CD6D2C1 /* jucer_PaintElementEllipse.h */ /* jucer_PaintElementEllipse.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_PaintElementEllipse.h; path = ../../Source/ComponentEditor/PaintElements/jucer_PaintElementEllipse.h; sourceTree = SOURCE_ROOT; };
F159C1B99ACF1D91E12D978E /* jucer_MainTemplate_NoWindow.cpp */ /* jucer_MainTemplate_NoWindow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_MainTemplate_NoWindow.cpp; path = ../../Source/BinaryData/Templates/jucer_MainTemplate_NoWindow.cpp; sourceTree = SOURCE_ROOT; };
F2E4998FB2C7221587A79F8B /* jucer_CodeHelpers.cpp */ /* jucer_CodeHelpers.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_CodeHelpers.cpp; path = ../../Source/Utility/Helpers/jucer_CodeHelpers.cpp; sourceTree = SOURCE_ROOT; };
F30DF63DBEFA4BEEF7C369FC /* jucer_LicenseController.h */ /* jucer_LicenseController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_LicenseController.h; path = ../../Source/Application/UserAccount/jucer_LicenseController.h; sourceTree = SOURCE_ROOT; };
F313EE01ECE306DB2CFE011D /* UnityPluginGUIScript.cs.in */ /* UnityPluginGUIScript.cs.in */ = {isa = PBXFileReference; lastKnownFileType = file.in; name = UnityPluginGUIScript.cs.in; path = ../../../Build/CMake/UnityPluginGUIScript.cs.in; sourceTree = SOURCE_ROOT; };
F3CC8F26ECCDA6DCD8A284D2 /* jucer_GradientPointComponent.h */ /* jucer_GradientPointComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_GradientPointComponent.h; path = ../../Source/ComponentEditor/PaintElements/jucer_GradientPointComponent.h; sourceTree = SOURCE_ROOT; };
F3CCA5545AB7B4B603D0BFEB /* jucer_AudioPluginARAPlaybackRendererTemplate.cpp */ /* jucer_AudioPluginARAPlaybackRendererTemplate.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_AudioPluginARAPlaybackRendererTemplate.cpp; path = ../../Source/BinaryData/Templates/jucer_AudioPluginARAPlaybackRendererTemplate.cpp; sourceTree = SOURCE_ROOT; };
@ -711,17 +705,6 @@
name = Products;
sourceTree = "<group>";
};
9D43579A76E23FBCE6B36333 /* UserAccount */ = {
isa = PBXGroup;
children = (
F30DF63DBEFA4BEEF7C369FC,
2F0A7CA808B2FCCC9ED68992,
94146B40B41BF0AACF4359DD,
B6444A4A8DFD6828FF6BD1CB,
);
name = UserAccount;
sourceTree = "<group>";
};
A734ACA659C8B85D24B27673 /* StartPage */ = {
isa = PBXGroup;
children = (
@ -770,7 +753,6 @@
isa = PBXGroup;
children = (
A734ACA659C8B85D24B27673,
9D43579A76E23FBCE6B36333,
EB1D55A76652399EB81CC1F0,
7CA44FF0BA319517C6E39651,
EE690110171E1648FF2118B8,
@ -797,7 +779,6 @@
69B478C992FA0B8C885946A6,
EAC1731150A7F79D59BAA0B6,
8F4D281E98808204E2846A7D,
7B975D9F6EDB528AADE8831F,
B83C9BD89F31EA9E5E12A3C6,
8FEF6F5EA676B824C021EB6F,
8FF26BF72A522FBEAAFDDF54,
@ -895,7 +876,6 @@
1B0F18E1D96F727C062B05FA,
92A66A8BD87F98EB6B4FB6D0,
F63F46CA0A51C679867855A7,
247768B490B9D759DDA79359,
);
name = UI;
sourceTree = "<group>";

View file

@ -1912,10 +1912,6 @@
<ClInclude Include="..\..\Source\Application\StartPage\jucer_NewProjectWizard.h"/>
<ClInclude Include="..\..\Source\Application\StartPage\jucer_StartPageComponent.h"/>
<ClInclude Include="..\..\Source\Application\StartPage\jucer_StartPageTreeHolder.h"/>
<ClInclude Include="..\..\Source\Application\UserAccount\jucer_LicenseController.h"/>
<ClInclude Include="..\..\Source\Application\UserAccount\jucer_LicenseQueryThread.h"/>
<ClInclude Include="..\..\Source\Application\UserAccount\jucer_LicenseState.h"/>
<ClInclude Include="..\..\Source\Application\UserAccount\jucer_LoginFormComponent.h"/>
<ClInclude Include="..\..\Source\Application\Windows\jucer_AboutWindowComponent.h"/>
<ClInclude Include="..\..\Source\Application\Windows\jucer_EditorColourSchemeWindowComponent.h"/>
<ClInclude Include="..\..\Source\Application\Windows\jucer_FloatingToolWindow.h"/>
@ -2035,7 +2031,6 @@
<ClInclude Include="..\..\Source\Project\UI\jucer_ModulesInformationComponent.h"/>
<ClInclude Include="..\..\Source\Project\UI\jucer_ProjectContentComponent.h"/>
<ClInclude Include="..\..\Source\Project\UI\jucer_ProjectMessagesComponent.h"/>
<ClInclude Include="..\..\Source\Project\UI\jucer_UserAvatarComponent.h"/>
<ClInclude Include="..\..\Source\Project\jucer_Project.h"/>
<ClInclude Include="..\..\Source\ProjectSaving\jucer_ProjectExport_Android.h"/>
<ClInclude Include="..\..\Source\ProjectSaving\jucer_ProjectExport_CodeBlocks.h"/>
@ -2884,7 +2879,6 @@
<None Include="..\..\Source\BinaryData\Icons\export_linux.svg"/>
<None Include="..\..\Source\BinaryData\Icons\export_visualStudio.svg"/>
<None Include="..\..\Source\BinaryData\Icons\export_xcode.svg"/>
<None Include="..\..\Source\BinaryData\Icons\agplv3_logo.svg"/>
<None Include="..\..\Source\BinaryData\Icons\juce_icon.png"/>
<None Include="..\..\Source\BinaryData\Icons\wizard_AnimatedApp.svg"/>
<None Include="..\..\Source\BinaryData\Icons\wizard_AudioApp.svg"/>

View file

@ -5,9 +5,6 @@
<Filter Include="Projucer\Application\StartPage">
<UniqueIdentifier>{1E1D2D75-0ADA-6E9E-105F-2F87632B55AF}</UniqueIdentifier>
</Filter>
<Filter Include="Projucer\Application\UserAccount">
<UniqueIdentifier>{DA27985D-8427-CE70-CA06-EAF7009CCC60}</UniqueIdentifier>
</Filter>
<Filter Include="Projucer\Application\Windows">
<UniqueIdentifier>{DC7E18A5-E854-3D99-627F-AAA88246B712}</UniqueIdentifier>
</Filter>
@ -2403,18 +2400,6 @@
<ClInclude Include="..\..\Source\Application\StartPage\jucer_StartPageTreeHolder.h">
<Filter>Projucer\Application\StartPage</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Application\UserAccount\jucer_LicenseController.h">
<Filter>Projucer\Application\UserAccount</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Application\UserAccount\jucer_LicenseQueryThread.h">
<Filter>Projucer\Application\UserAccount</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Application\UserAccount\jucer_LicenseState.h">
<Filter>Projucer\Application\UserAccount</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Application\UserAccount\jucer_LoginFormComponent.h">
<Filter>Projucer\Application\UserAccount</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Application\Windows\jucer_AboutWindowComponent.h">
<Filter>Projucer\Application\Windows</Filter>
</ClInclude>
@ -2772,9 +2757,6 @@
<ClInclude Include="..\..\Source\Project\UI\jucer_ProjectMessagesComponent.h">
<Filter>Projucer\Project\UI</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Project\UI\jucer_UserAvatarComponent.h">
<Filter>Projucer\Project\UI</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Project\jucer_Project.h">
<Filter>Projucer\Project</Filter>
</ClInclude>
@ -5315,9 +5297,6 @@
<None Include="..\..\Source\BinaryData\Icons\export_xcode.svg">
<Filter>Projucer\BinaryData\Icons</Filter>
</None>
<None Include="..\..\Source\BinaryData\Icons\agplv3_logo.svg">
<Filter>Projucer\BinaryData\Icons</Filter>
</None>
<None Include="..\..\Source\BinaryData\Icons\juce_icon.png">
<Filter>Projucer\BinaryData\Icons</Filter>
</None>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 45 KiB

Before After
Before After

View file

@ -1912,10 +1912,6 @@
<ClInclude Include="..\..\Source\Application\StartPage\jucer_NewProjectWizard.h"/>
<ClInclude Include="..\..\Source\Application\StartPage\jucer_StartPageComponent.h"/>
<ClInclude Include="..\..\Source\Application\StartPage\jucer_StartPageTreeHolder.h"/>
<ClInclude Include="..\..\Source\Application\UserAccount\jucer_LicenseController.h"/>
<ClInclude Include="..\..\Source\Application\UserAccount\jucer_LicenseQueryThread.h"/>
<ClInclude Include="..\..\Source\Application\UserAccount\jucer_LicenseState.h"/>
<ClInclude Include="..\..\Source\Application\UserAccount\jucer_LoginFormComponent.h"/>
<ClInclude Include="..\..\Source\Application\Windows\jucer_AboutWindowComponent.h"/>
<ClInclude Include="..\..\Source\Application\Windows\jucer_EditorColourSchemeWindowComponent.h"/>
<ClInclude Include="..\..\Source\Application\Windows\jucer_FloatingToolWindow.h"/>
@ -2035,7 +2031,6 @@
<ClInclude Include="..\..\Source\Project\UI\jucer_ModulesInformationComponent.h"/>
<ClInclude Include="..\..\Source\Project\UI\jucer_ProjectContentComponent.h"/>
<ClInclude Include="..\..\Source\Project\UI\jucer_ProjectMessagesComponent.h"/>
<ClInclude Include="..\..\Source\Project\UI\jucer_UserAvatarComponent.h"/>
<ClInclude Include="..\..\Source\Project\jucer_Project.h"/>
<ClInclude Include="..\..\Source\ProjectSaving\jucer_ProjectExport_Android.h"/>
<ClInclude Include="..\..\Source\ProjectSaving\jucer_ProjectExport_CodeBlocks.h"/>
@ -2884,7 +2879,6 @@
<None Include="..\..\Source\BinaryData\Icons\export_linux.svg"/>
<None Include="..\..\Source\BinaryData\Icons\export_visualStudio.svg"/>
<None Include="..\..\Source\BinaryData\Icons\export_xcode.svg"/>
<None Include="..\..\Source\BinaryData\Icons\agplv3_logo.svg"/>
<None Include="..\..\Source\BinaryData\Icons\juce_icon.png"/>
<None Include="..\..\Source\BinaryData\Icons\wizard_AnimatedApp.svg"/>
<None Include="..\..\Source\BinaryData\Icons\wizard_AudioApp.svg"/>

View file

@ -5,9 +5,6 @@
<Filter Include="Projucer\Application\StartPage">
<UniqueIdentifier>{1E1D2D75-0ADA-6E9E-105F-2F87632B55AF}</UniqueIdentifier>
</Filter>
<Filter Include="Projucer\Application\UserAccount">
<UniqueIdentifier>{DA27985D-8427-CE70-CA06-EAF7009CCC60}</UniqueIdentifier>
</Filter>
<Filter Include="Projucer\Application\Windows">
<UniqueIdentifier>{DC7E18A5-E854-3D99-627F-AAA88246B712}</UniqueIdentifier>
</Filter>
@ -2403,18 +2400,6 @@
<ClInclude Include="..\..\Source\Application\StartPage\jucer_StartPageTreeHolder.h">
<Filter>Projucer\Application\StartPage</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Application\UserAccount\jucer_LicenseController.h">
<Filter>Projucer\Application\UserAccount</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Application\UserAccount\jucer_LicenseQueryThread.h">
<Filter>Projucer\Application\UserAccount</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Application\UserAccount\jucer_LicenseState.h">
<Filter>Projucer\Application\UserAccount</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Application\UserAccount\jucer_LoginFormComponent.h">
<Filter>Projucer\Application\UserAccount</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Application\Windows\jucer_AboutWindowComponent.h">
<Filter>Projucer\Application\Windows</Filter>
</ClInclude>
@ -2772,9 +2757,6 @@
<ClInclude Include="..\..\Source\Project\UI\jucer_ProjectMessagesComponent.h">
<Filter>Projucer\Project\UI</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Project\UI\jucer_UserAvatarComponent.h">
<Filter>Projucer\Project\UI</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Project\jucer_Project.h">
<Filter>Projucer\Project</Filter>
</ClInclude>
@ -5315,9 +5297,6 @@
<None Include="..\..\Source\BinaryData\Icons\export_xcode.svg">
<Filter>Projucer\BinaryData\Icons</Filter>
</None>
<None Include="..\..\Source\BinaryData\Icons\agplv3_logo.svg">
<Filter>Projucer\BinaryData\Icons</Filter>
</None>
<None Include="..\..\Source\BinaryData\Icons\juce_icon.png">
<Filter>Projucer\BinaryData\Icons</Filter>
</None>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 45 KiB

Before After
Before After

View file

@ -1912,10 +1912,6 @@
<ClInclude Include="..\..\Source\Application\StartPage\jucer_NewProjectWizard.h"/>
<ClInclude Include="..\..\Source\Application\StartPage\jucer_StartPageComponent.h"/>
<ClInclude Include="..\..\Source\Application\StartPage\jucer_StartPageTreeHolder.h"/>
<ClInclude Include="..\..\Source\Application\UserAccount\jucer_LicenseController.h"/>
<ClInclude Include="..\..\Source\Application\UserAccount\jucer_LicenseQueryThread.h"/>
<ClInclude Include="..\..\Source\Application\UserAccount\jucer_LicenseState.h"/>
<ClInclude Include="..\..\Source\Application\UserAccount\jucer_LoginFormComponent.h"/>
<ClInclude Include="..\..\Source\Application\Windows\jucer_AboutWindowComponent.h"/>
<ClInclude Include="..\..\Source\Application\Windows\jucer_EditorColourSchemeWindowComponent.h"/>
<ClInclude Include="..\..\Source\Application\Windows\jucer_FloatingToolWindow.h"/>
@ -2035,7 +2031,6 @@
<ClInclude Include="..\..\Source\Project\UI\jucer_ModulesInformationComponent.h"/>
<ClInclude Include="..\..\Source\Project\UI\jucer_ProjectContentComponent.h"/>
<ClInclude Include="..\..\Source\Project\UI\jucer_ProjectMessagesComponent.h"/>
<ClInclude Include="..\..\Source\Project\UI\jucer_UserAvatarComponent.h"/>
<ClInclude Include="..\..\Source\Project\jucer_Project.h"/>
<ClInclude Include="..\..\Source\ProjectSaving\jucer_ProjectExport_Android.h"/>
<ClInclude Include="..\..\Source\ProjectSaving\jucer_ProjectExport_CodeBlocks.h"/>
@ -2884,7 +2879,6 @@
<None Include="..\..\Source\BinaryData\Icons\export_linux.svg"/>
<None Include="..\..\Source\BinaryData\Icons\export_visualStudio.svg"/>
<None Include="..\..\Source\BinaryData\Icons\export_xcode.svg"/>
<None Include="..\..\Source\BinaryData\Icons\agplv3_logo.svg"/>
<None Include="..\..\Source\BinaryData\Icons\juce_icon.png"/>
<None Include="..\..\Source\BinaryData\Icons\wizard_AnimatedApp.svg"/>
<None Include="..\..\Source\BinaryData\Icons\wizard_AudioApp.svg"/>

View file

@ -5,9 +5,6 @@
<Filter Include="Projucer\Application\StartPage">
<UniqueIdentifier>{1E1D2D75-0ADA-6E9E-105F-2F87632B55AF}</UniqueIdentifier>
</Filter>
<Filter Include="Projucer\Application\UserAccount">
<UniqueIdentifier>{DA27985D-8427-CE70-CA06-EAF7009CCC60}</UniqueIdentifier>
</Filter>
<Filter Include="Projucer\Application\Windows">
<UniqueIdentifier>{DC7E18A5-E854-3D99-627F-AAA88246B712}</UniqueIdentifier>
</Filter>
@ -2403,18 +2400,6 @@
<ClInclude Include="..\..\Source\Application\StartPage\jucer_StartPageTreeHolder.h">
<Filter>Projucer\Application\StartPage</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Application\UserAccount\jucer_LicenseController.h">
<Filter>Projucer\Application\UserAccount</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Application\UserAccount\jucer_LicenseQueryThread.h">
<Filter>Projucer\Application\UserAccount</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Application\UserAccount\jucer_LicenseState.h">
<Filter>Projucer\Application\UserAccount</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Application\UserAccount\jucer_LoginFormComponent.h">
<Filter>Projucer\Application\UserAccount</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Application\Windows\jucer_AboutWindowComponent.h">
<Filter>Projucer\Application\Windows</Filter>
</ClInclude>
@ -2772,9 +2757,6 @@
<ClInclude Include="..\..\Source\Project\UI\jucer_ProjectMessagesComponent.h">
<Filter>Projucer\Project\UI</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Project\UI\jucer_UserAvatarComponent.h">
<Filter>Projucer\Project\UI</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Project\jucer_Project.h">
<Filter>Projucer\Project</Filter>
</ClInclude>
@ -5315,9 +5297,6 @@
<None Include="..\..\Source\BinaryData\Icons\export_xcode.svg">
<Filter>Projucer\BinaryData\Icons</Filter>
</None>
<None Include="..\..\Source\BinaryData\Icons\agplv3_logo.svg">
<Filter>Projucer\BinaryData\Icons</Filter>
</None>
<None Include="..\..\Source\BinaryData\Icons\juce_icon.png">
<Filter>Projucer\BinaryData\Icons</Filter>
</None>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 45 KiB

Before After
Before After

View file

@ -109,7 +109,6 @@ juce_add_binary_data(ProjucerData SOURCES
Source/BinaryData/Icons/export_linux.svg
Source/BinaryData/Icons/export_visualStudio.svg
Source/BinaryData/Icons/export_xcode.svg
Source/BinaryData/Icons/agplv3_logo.svg
Source/BinaryData/Icons/juce_icon.png
Source/BinaryData/Icons/wizard_AnimatedApp.svg
Source/BinaryData/Icons/wizard_AudioApp.svg

View file

@ -1962,138 +1962,8 @@ static const unsigned char temp_binary_data_17[] =
const char* export_xcode_svg = (const char*) temp_binary_data_17;
//================== agplv3_logo.svg ==================
static const unsigned char temp_binary_data_18[] =
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"
"<!-- Created with Inkscape (http://www.inkscape.org/) -->\n"
"\n"
"<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"864\" height=\"358\" version=\"1.1\">\n"
" <g id=\"g1\" transform=\"translate(-88.247957,-1761.1929)\">\n"
" <g id=\"g2\" transform=\"scale(2.5964,2.5964)\">\n"
" <path id=\"path1\" style=\"fill:#663366\" d=\"m 62.777261,682.66638 c 0,0 -22.84339,99.66531 -22.84339,99.66531 0.0066,0 60.091419,0 60.104559,0 26.42484,0 105.67884,0 105.67884,0 1.2e-4,0 54.96371,0 54.96371,0 -6.54796,-0.57145 -11.71765,-2.87"
"011 -14.79791,-7.06027 -0.57133,-0.77509 -1.04346,-1.60999 -1.45715,-2.48348 -0.26277,-0.64359 -0.5098,-1.293 -0.75945,-1.94971 -0.65682,-2.08863 -0.91869,-4.40613 -0.80043,-6.87568 0.32842,-6.883 3.5581,-15.07028 9.15381,-23.64386 5.94375,-9.11134 1"
"4.55819,-18.66102 25.22417,-27.52283 2.39067,-1.98475 4.86262,-3.94473 7.45021,-5.84947 3.19852,-2.35311 6.4217,-4.52039 9.64637,-6.54715 11.881,-7.48001 23.73254,-12.71397 34.23437,-15.37255 -10.03552,3.27397 -21.3098,8.83212 -32.4487,16.39877 -0.40"
"067,0.27054 -0.79632,0.5477 -1.19049,0.82098 -6.18016,4.28216 -11.77917,8.82996 -16.66554,13.42273 -15.72323,14.78398 -24.0338,30.10322 -20.25732,39.07804 0.26928,0.61733 0.59027,1.20681 0.96458,1.76513 4.05888,5.97 14.11814,7.00193 26.86612,3.7969 0"
".86698,-0.21666 1.73396,-0.4622 2.62708,-0.71835 4.07201,-1.17554 8.39527,-2.76338 12.8482,-4.72051 1.07052,-0.47293 2.15256,-0.95887 3.24282,-1.4778 0.11164,-0.0525 0.21666,-0.10502 0.3283,-0.16415 14.05501,-6.98345 24.85648,-15.01891 27.19453,-19.8"
"4684 0.51232,-1.05019 0.63548,-1.94559 0.28732,-2.64763 -1.66821,-3.38242 -13.34145,-1.09733 -27.48185,5.02838 -1.13615,0.49267 -2.28554,0.99951 -3.44806,1.53933 0.94574,-0.87805 1.93019,-1.75953 2.93495,-2.62708 1.60257,-1.38055 3.26176,-2.73051 5.0"
"2848,-4.0638 2.76498,-2.09376 5.56032,-3.98662 8.31229,-5.66465 12.88587,-9.72159 19.40027,-18.91764 18.04072,-22.33031 -0.25615,-0.64301 -0.80122,-1.08524 -1.64195,-1.35464 -2.68621,-0.85442 -7.58902,0.16541 -13.5459,2.60665 -4.91274,2.01501 -10.555"
"24,5.00338 -16.27572,8.72277 0,0 -0.77988,0.51312 -0.77988,0.51312 0,0 -0.14372,0.0821 -0.14372,0.0821 0,0 -2.75013,1.82665 -2.75013,1.82665 0,0 1.58031,-2.89385 1.58031,-2.89385 2.34467,-4.2921 6.16384,-8.77026 10.91882,-12.93028 3.48744,-3.04157 7."
"47167,-5.90734 11.76034,-8.41491 1.6222,-0.94974 3.24201,-1.83178 4.86422,-2.62708 1.6617,-0.81184 3.32409,-1.53328 4.9463,-2.17561 4.71308,-1.86387 9.89054,-4.21767 13.81404,-4.52565 -0.3573,0 -11.69996,1.22131 -11.69996,1.22131 0,0 -37.14877,0 -37."
"14877,0 0,0 -163.80326,0 -163.80326,0 0,0 -73.075879,0 -73.075879,0 z m 177.933719,0.14371 c -0.64359,9.82331 1.26103,24.21153 5.58258,40.18623 0.76846,2.84249 1.60497,5.73531 2.52446,8.66124 0.57144,1.80679 1.16092,3.58527 1.76512,5.33624 -0.35467,0"
".52145 -0.71173,1.03969 -1.04677,1.55988 -5.39206,8.26343 -8.54378,16.07287 -9.3385,22.86386 -2.27904,-7.63171 -3.99473,-15.99091 -4.96685,-24.85477 -0.27579,-2.53965 -0.49165,-5.05098 -0.63616,-7.53229 -1.06401,-18.02383 1.28888,-34.36245 6.11612,-4"
"6.22039 z m -107.60809,12.78645 c 0.12294,-0.003 0.24417,0 0.3694,0 0,0 24.28013,0 24.28013,0 2.07539,0 3.68036,0.38903 4.82313,1.16994 1.13615,0.78548 1.56228,1.80154 1.29299,3.03757 0,0 -2.89385,13.07388 -2.89385,13.07388 0,0 -8.55862,0 -8.55862,0 "
"0,0 2.81178,-12.72492 2.81178,-12.72492 0,0 -21.42715,0 -21.42715,0 0,0 -7.73764,34.97305 -7.73764,34.97305 0,0 -2.79135,12.6635 -2.79135,12.6635 0,0 21.40671,0 21.40671,0 0,0 0.0206,-0.0821 0.0206,-0.0821 0,0 4.28958,-19.37493 4.28958,-19.37493 0,0 "
"-10.05685,0 -10.05685,0 0,0 0.96469,-4.37155 0.96469,-4.37155 0,-1.1e-4 18.61537,0 18.61537,0 0,-1.1e-4 -5.33624,24.1774 -5.33624,24.1774 -0.0723,0.34417 -0.19874,0.65592 -0.36951,0.9647 -0.44006,0.80122 -1.20761,1.4875 -2.27812,2.05244 -1.48431,0.78"
"148 -3.26085,1.16982 -5.33636,1.16982 0,0 -24.25947,0 -24.25947,0 -2.07539,0 -3.68036,-0.38834 -4.82324,-1.16982 -1.13615,-0.7816 -1.56884,-1.77974 -1.29299,-3.01714 0,0 10.69314,-48.33436 10.69314,-48.33436 0.27579,-1.23603 1.13615,-2.25209 2.62696,"
"-3.03757 0.0526,-0.0283 0.11176,-0.0347 0.16427,-0.0615 1.3608,-0.6816 2.95778,-1.0648 4.80269,-1.10841 z m 38.05183,0 c -1.2e-4,0 30.5604,0 30.5604,0 2.04913,0 3.65981,0.38903 4.8027,1.16994 1.14927,0.78548 1.58933,1.80154 1.31354,3.03757 0,0 -5.705"
"75,25.77837 -5.70575,25.77837 -0.26928,1.22816 -1.15019,2.23018 -2.64763,3.01703 -1.49744,0.78947 -3.26005,1.19037 -5.31581,1.19037 0,0 -22.20714,0 -22.20714,0 0,0 -4.28947,19.35427 -4.28947,19.35427 0,0 -0.69781,3.18128 -0.69781,3.18128 0,0 -8.37392"
",0 -8.37392,0 0,0 0.63628,-2.87342 0.63628,-2.87342 0,0 11.92461,-53.85541 11.92461,-53.85541 z m 42.21812,0 c 0,0 8.37381,0 8.37381,0 0,0 -9.48211,42.83397 -9.48211,42.83397 0,0 -2.07299,9.35905 -2.07299,9.35905 0,0 20.03165,0 20.03165,0 0.21015,1.5"
"3614 0.45557,3.045 0.71835,4.53581 0,0 -30.12948,0 -30.12948,0 0,0 2.38074,-10.75466 2.38074,-10.75466 0,0 10.18003,-45.97417 10.18003,-45.97417 z m -34.84999,4.55647 c 0,0 -5.56214,25.08045 -5.56214,25.08045 0,0 20.87316,0 20.87316,0 0,0 5.54149,-25"
".08045 5.54149,-25.08045 0,0 -20.85251,0 -20.85251,0 z m -44.50903,59.19428 c 0.082,-0.003 0.16381,0 0.24634,0 0.972,0 1.82094,0.17065 2.50391,0.49256 0.72909,0.34154 1.25042,0.84883 1.53934,1.51879 0.28241,0.6502 0.35626,1.38819 0.20524,2.19604 0,0 "
"-0.0615,0.30787 -0.0615,0.30787 0,0 -2.40129,0 -2.40129,0 -1.1e-4,0 0.0204,-0.28732 0.0204,-0.28732 0.0621,-0.56448 -0.008,-1.0083 -0.22567,-1.31354 -0.0284,-0.0382 -0.0696,-0.0888 -0.10274,-0.12317 -0.0541,-0.0554 -0.1355,-0.11849 -0.20513,-0.16415 "
"-0.33606,-0.21175 -0.86161,-0.32841 -1.53933,-0.32841 -0.89986,0 -1.57221,0.15673 -2.0319,0.47201 -0.44667,0.30867 -0.72908,0.65352 -0.82098,1.06732 -0.092,0.4203 0.059,0.64119 0.16415,0.75933 0.003,0.003 0.0166,0.0169 0.0205,0.0205 0.1331,0.11335 0."
"59519,0.37933 2.0319,0.71836 1.30041,0.31528 2.16157,0.59849 2.64763,0.84152 0.73559,0.3743 1.2495,0.85956 1.51878,1.45714 0.26929,0.5912 0.32842,1.28318 0.16415,2.0319 -0.16415,0.72909 -0.53605,1.40144 -1.08775,2.0319 -0.54507,0.63046 -1.23877,1.129"
"64 -2.07299,1.4778 -0.82748,0.34154 -1.73544,0.53355 -2.66806,0.53355 -1.18227,0 -2.13132,-0.17888 -2.87342,-0.53355 -0.77498,-0.36779 -1.33409,-0.94825 -1.66239,-1.70359 -0.31529,-0.73548 -0.38263,-1.5705 -0.20536,-2.48337 0,0 0.0616,-0.28732 0.0616"
",-0.28732 0,0 2.36031,0 2.36031,0 0,0 -0.0205,0.28732 -0.0205,0.28732 -0.0591,0.54507 -8e-4,0.98513 0.1436,1.31354 0.13801,0.31529 0.40067,0.57635 0.82098,0.77988 0.44667,0.21678 1.00487,0.32842 1.64195,0.32842 0.57144,0 1.09357,-0.096 1.55988,-0.266"
"77 0.45969,-0.16427 0.82509,-0.38093 1.08775,-0.65683 0.25616,-0.27579 0.40638,-0.56733 0.47202,-0.88251 0.0657,-0.28241 0.0501,-0.52133 -0.0615,-0.71835 -0.12477,-0.21015 -0.37191,-0.39656 -0.75945,-0.55409 0,-1.2e-4 -2.01135,-0.5953 -2.01135,-0.595"
"3 -1.12302,-0.28241 -1.87916,-0.5517 -2.31921,-0.82098 -0.5977,-0.35456 -1.02862,-0.80945 -1.25202,-1.35452 -0.22328,-0.53857 -0.24702,-1.13547 -0.10251,-1.78567 0.15103,-0.69621 0.48675,-1.35863 1.00568,-1.94971 0.52544,-0.5977 1.2035,-1.06652 2.011"
"35,-1.37518 0.71424,-0.2678 1.46582,-0.42488 2.25757,-0.45147 z m 21.55043,0.041 c 0.1299,-0.01 0.25205,0 0.38994,0 0,0 1.47769,0.16415 1.47769,0.16415 0,0 0.49257,0.0411 0.49257,0.0411 1.1e-4,0 -0.71825,1.82665 -0.71825,1.82665 0,0 -0.14371,0.28732 "
"-0.14371,0.28732 0,0 -1.12885,-0.10262 -1.12885,-0.10262 -0.33332,0 -0.57817,0.0515 -0.7389,0.16427 -0.0106,0.008 -0.0312,0.0324 -0.041,0.041 -0.0216,0.0189 -0.0578,0.0518 -0.0821,0.0822 -0.0989,0.12957 -0.21917,0.36118 -0.30787,0.77989 0,0 -0.0427,0"
".17727 -0.0821,0.32841 0.51881,0 1.76501,0 1.76501,0 0,0 -0.45147,2.0319 -0.45147,2.0319 0,0 -1.2906,0 -1.72403,0 -0.13139,0.59107 -1.74458,7.8196 -1.74458,7.8196 0,0 -2.38086,0 -2.38086,0 0,0 1.54755,-6.94612 1.74458,-7.8196 -0.40067,0 -1.37507,0 -1"
".37507,0 0,0 0.45147,-2.0319 0.45147,-2.0319 0,0 0.98022,0 1.35464,0 0.0656,-0.28241 0.16414,-0.63628 0.16414,-0.63628 0.14452,-0.65683 0.29554,-1.12884 0.49257,-1.45726 0.2694,-0.45318 0.64941,-0.83239 1.12884,-1.10829 0.39497,-0.22945 0.89438,-0.36"
"666 1.45726,-0.41049 z m 5.6852,0.10262 c 0,0 -0.62235,2.80036 -0.77988,3.5097 0.45969,0 1.53922,0 1.53922,0 0,0 -0.45147,2.0319 -0.45147,2.0319 0,0 -1.13216,0 -1.53934,0 -0.12476,0.5647 -1.10829,4.9463 -1.10829,4.9463 0,0 -0.0821,0.52623 -0.0821,0.6"
"7726 1.2e-4,0.005 -4.5e-4,0.0168 0,0.0205 3.4e-4,0.002 -4.5e-4,0.0192 0,0.0205 5.7e-4,10e-4 0.0196,-8e-4 0.0204,0 0,0 0.24633,0.0204 0.24633,0.0204 0,0 1.12885,-0.0821 1.12885,-0.0821 0,0 -0.12317,1.82665 -0.12317,1.82665 0,0 0.0205,0.32841 0.0205,0."
"32841 0,0 -1.62141,0.1847 -1.62141,0.1847 -0.64359,0 -1.11572,-0.10502 -1.45726,-0.32841 -0.36117,-0.23641 -0.57133,-0.54998 -0.65671,-0.94404 -0.0131,-0.0723 -0.0411,-0.17739 -0.0411,-0.32841 0,-0.29554 0.0558,-0.79552 0.24634,-1.6625 0,0 0.86276,-3"
".86506 1.04666,-4.67941 -0.30867,0 -1.12873,0 -1.12873,0 0,0 0.45147,-2.0319 0.45147,-2.0319 0,0 0.80043,0 1.12884,0 0.10513,-0.47293 0.47202,-2.09354 0.47202,-2.09354 0,0 1.90884,-1.00567 1.90884,-1.00567 0,0 0.77988,-0.41049 0.77988,-0.41049 z m -7"
"5.631539,0.0821 c 0,0 9.23587,0 9.23587,0 0,0 -0.5131,2.29879 -0.5131,2.29879 0,0 -6.16135,0 -6.75245,0 -0.10506,0.46631 -0.52622,2.35449 -0.67728,3.03757 0.85381,0 5.84937,0 5.84937,0 0,0 -0.51311,2.29867 -0.51311,2.29867 0,0 -5.25827,0 -5.84937,0 -"
"0.12479,0.57144 -1.25198,5.6441 -1.25198,5.6441 0,0 -2.48343,0 -2.48343,0 0,0 2.95548,-13.27913 2.95548,-13.27913 z m 12.37608,3.24293 c 0.09266,-0.0114 0.19392,0 0.28731,0 0.5911,0 1.13707,0.17979 1.66248,0.5541 0,0 0.328389,0.22579 0.328389,0.22579"
" 0,0 -1.272509,2.09342 -1.272509,2.09342 0,0 -0.34892,-0.24634 -0.34892,-0.24634 -0.25612,-0.16415 -0.53196,-0.24622 -0.82095,-0.24622 -0.24958,0 -0.4819,0.0887 -0.71834,0.24622 -0.24958,0.16427 -0.45811,0.38184 -0.61571,0.67738 -0.27585,0.50569 -0.4"
"7783,1.07211 -0.61575,1.68293 0,0 -1.10832,5.04892 -1.10832,5.04892 0,0 -2.38079,0 -2.38079,0 0,0 2.19611,-9.8515 2.19611,-9.8515 0,0 2.2166,0 2.2166,0 0,0 -0.07638,0.29874 -0.10264,0.41038 0.10511,-0.0788 0.21591,-0.1871 0.30789,-0.24623 0.3181,-0.1"
"8983 0.65411,-0.30832 0.98515,-0.34885 z m 7.060299,0 c 0.14335,-0.0109 0.28446,0 0.43102,0 1.3398,0 2.35368,0.46951 3.01703,1.39562 0.41377,0.59758 0.63628,1.33649 0.63628,2.21659 0,0.48595 -0.0599,1.00899 -0.18472,1.58032 0,0 -0.18472,0.71835 -0.18"
"472,0.71835 0,0 -6.02097,0 -6.6909,0 -0.0131,0.1379 -0.0205,0.28572 -0.0205,0.41049 0,0.51231 0.10511,0.91538 0.32838,1.21092 0.10612,0.14451 0.22914,0.27465 0.36944,0.36939 0.26454,0.1726 0.60601,0.26689 1.00572,0.26689 0.48599,0 0.9129,-0.1339 1.31"
"353,-0.38994 0.38091,-0.24303 0.74543,-0.63137 1.06726,-1.16994 0,0 2.54499,0 2.54499,0 0,0 -0.22574,0.49256 -0.22574,0.49256 -0.48603,0.98524 -1.16417,1.7536 -2.01139,2.29879 -0.84722,0.54507 -1.85948,0.84141 -2.97601,0.84141 -1.45145,0 -2.53185,-0."
"46951 -3.20175,-1.39562 -0.663349,-0.90636 -0.806199,-2.15917 -0.451559,-3.73538 0.354699,-1.60257 1.062339,-2.88324 2.093469,-3.77647 0.92422,-0.80135 1.97295,-1.24585 3.14021,-1.33398 z m 10.69313,0 c 0.14326,-0.0109 0.28446,0 0.43092,0 1.33991,0 2"
".3538,0.46951 3.01714,1.39562 0.41379,0.59758 0.63616,1.33649 0.63616,2.21659 0,0.47944 -0.0599,0.99495 -0.1847,1.55977 0,0 -0.18469,0.7389 -0.18469,0.7389 0,0 -6.02097,0 -6.69087,0 -0.007,0.092 -0.014,0.17488 -0.0205,0.26677 -0.005,0.0345 0.002,0.08"
"69 0,0.12317 -1.9e-4,0.006 0,0.0148 0,0.0205 0,0.0985 0.0139,0.19543 0.0205,0.28732 0.0328,0.37442 0.13054,0.68719 0.30786,0.9236 0.0338,0.046 0.0655,0.10274 0.1026,0.14372 0.30081,0.32179 0.72656,0.49256 1.27251,0.49256 0.48602,0 0.91945,-0.1339 1.3"
"135,-0.38994 0.38104,-0.24303 0.74552,-0.63137 1.06732,-1.16994 0,0 2.56544,0 2.56544,0 0,0 -0.24623,0.49256 -0.24623,0.49256 -0.48606,0.98524 -1.16412,1.7536 -2.01135,2.29879 -0.84723,0.54507 -1.85953,0.84141 -2.976,0.84141 -1.45149,0 -2.53189,-0.46"
"951 -3.20178,-1.39562 -0.43346,-0.59108 -0.63624,-1.34391 -0.63624,-2.23714 0,-0.1379 0.007,-0.28652 0.0205,-0.43104 0.0263,-0.34142 0.0788,-0.68628 0.16419,-1.0672 0.35465,-1.59595 1.0418,-2.88324 2.07293,-3.77647 0.92419,-0.80135 1.99344,-1.24585 3"
".16076,-1.33398 z m 29.12369,0 c 0.14669,-0.0113 0.28161,0 0.43104,0 1.36616,0 2.41613,0.46209 3.0991,1.37507 0.67657,0.91287 0.84072,2.14434 0.49267,3.69429 -0.26928,1.20852 -0.65842,2.18463 -1.19048,2.89397 -0.53195,0.70933 -1.21001,1.28888 -2.0113"
"5,1.68293 -0.79461,0.39405 -1.63614,0.59519 -2.48337,0.59519 -1.39242,0 -2.42925,-0.47613 -3.09921,-1.39562 -0.43343,-0.58457 -0.65671,-1.33728 -0.65671,-2.23714 0,-0.48594 0.0533,-1.00236 0.18469,-1.58031 0.39405,-1.76022 1.19859,-3.10081 2.38075,-3"
".96117 0.86778,-0.62647 1.82619,-0.98833 2.85287,-1.06721 z m 36.06102,0 c 0.17317,-0.0107 0.33344,0 0.51311,0 0.82749,0 1.47769,0.0837 1.97026,0.28732 0.52544,0.21016 0.89814,0.50729 1.10829,0.86196 0.20365,0.33492 0.30787,0.74632 0.30787,1.25201 0,"
"0 -0.24622,1.49824 -0.24622,1.49824 0,0 -0.45159,2.0319 -0.45159,2.0319 -0.38754,1.73385 -0.47281,2.38405 -0.49256,2.62708 -0.0197,0.32841 0.0106,0.6485 0.10262,0.94415 0,0 0.16415,0.53354 0.16415,0.53354 0,0 -2.42184,0 -2.42184,0 0,0 -0.10262,-0.307"
"86 -0.10262,-0.30786 -0.0394,-0.14441 -0.0279,-0.3283 -0.041,-0.49257 -0.4598,0.28241 -0.92029,0.53286 -1.33409,0.67726 -0.61082,0.21027 -1.24459,0.32842 -1.88829,0.32842 -1.1164,0 -1.9432,-0.29063 -2.44239,-0.86196 -0.38081,-0.42031 -0.55409,-0.9342"
"2 -0.55409,-1.51879 0,-0.22328 0.0296,-0.45478 0.0821,-0.6978 0.11164,-0.49919 0.31449,-0.96139 0.63628,-1.37519 0.31528,-0.40718 0.68799,-0.7421 1.10829,-0.98513 0.40718,-0.24302 0.86116,-0.41539 1.33409,-0.53365 0,0 1.45726,-0.24623 1.45726,-0.2462"
"3 1.12302,-0.13139 1.96124,-0.29474 2.56544,-0.47213 0.0131,-0.0656 0.0411,-0.1436 0.0411,-0.1436 0.0952,-0.42259 0.0833,-0.74027 -0.0205,-0.90305 -0.008,-0.0105 -0.0324,-0.0321 -0.0411,-0.0411 -0.0221,-0.0236 -0.0562,-0.0607 -0.0821,-0.0821 -0.24702"
",-0.19543 -0.66824,-0.28732 -1.23147,-0.28732 -0.63708,0 -1.10829,0.10422 -1.43659,0.30786 -0.32191,0.20354 -0.61985,0.57624 -0.88262,1.1083 0,0 -2.48337,0 -2.48337,0 0,0 0.22568,-0.49256 0.22568,-0.49256 0.29554,-0.68308 0.64781,-1.24962 1.08786,-1."
"68305 0.44006,-0.43343 1.03444,-0.76927 1.72403,-1.00568 0.52841,-0.17442 1.10556,-0.29017 1.72403,-0.3283 z m 10.40571,0 c 0.0927,-0.0114 0.19394,0 0.28732,0 0.5977,0 1.15761,0.17979 1.68305,0.5541 0,0 0.30786,0.22579 0.30786,0.22579 0,0 -1.27256,2."
"09342 -1.27256,2.09342 0,0 -0.34884,-0.24634 -0.34884,-0.24634 -0.25616,-0.16415 -0.51814,-0.24622 -0.80043,-0.24622 -0.24965,0 -0.49599,0.0887 -0.73891,0.24622 -0.24965,0.16427 -0.43103,0.38184 -0.59518,0.67738 -0.26929,0.50569 -0.47784,1.07211 -0.6"
"1574,1.68293 0,0 -1.12884,5.04892 -1.12884,5.04892 0,0 -2.38086,0 -2.38086,0 0,0 2.19616,-9.8515 2.19616,-9.8515 0,0 2.2166,0 2.2166,0 0,0 -0.0558,0.29874 -0.0821,0.41038 0.10502,-0.0788 0.20936,-0.1871 0.30787,-0.24623 0.313,-0.18983 0.63377,-0.3083"
"2 0.96458,-0.34885 z m 7.03983,0 c 0.14315,-0.0109 0.28447,0 0.43093,0 1.33991,0 2.36031,0.46951 3.01713,1.39562 0.42031,0.59758 0.63617,1.33649 0.63617,2.21659 0,0.48595 -0.0804,1.00899 -0.20524,1.58032 0,0 -0.16415,0.71835 -0.16415,0.71835 0,0 -6.0"
"2754,0 -6.69088,0 -0.0131,0.1379 -0.0411,0.28572 -0.0411,0.41049 0,0.51231 0.11175,0.91538 0.32841,1.21092 0.0338,0.046 0.086,0.10274 0.12317,0.14372 0.0216,0.0229 0.0594,0.0607 0.0821,0.0821 0.2936,0.26689 0.69325,0.41049 1.19038,0.41049 0.48605,0 0"
".91298,-0.1339 1.31354,-0.38994 0.38104,-0.24303 0.7389,-0.63137 1.06731,-1.16994 0,0 2.56556,0 2.56556,0 0,0 -0.24634,0.49256 -0.24634,0.49256 -0.48606,0.98524 -1.17074,1.7536 -2.01135,2.29879 -0.85385,0.54507 -1.85291,0.84141 -2.97604,0.84141 -1.45"
"144,0 -2.51134,-0.46951 -3.18118,-1.39562 -0.66333,-0.90636 -0.82017,-2.15917 -0.47213,-3.73538 0.35467,-1.60257 1.04186,-2.88324 2.07299,-3.77647 0.93,-0.80135 1.99457,-1.24585 3.16074,-1.33398 z m -35.93785,0.1847 c 0,0 2.44239,0 2.44239,0 0,0 0.30"
"124,5.84604 0.30786,5.93143 0.0985,-0.20936 0.175,-0.38549 0.1847,-0.41049 0,0 2.68872,-5.52094 2.68872,-5.52094 0,0 2.23714,0 2.23714,0 0,0 0.20525,5.77538 0.20525,5.80826 0.0656,-0.11815 3.058,-5.80826 3.058,-5.80826 0,0 2.42184,0 2.42184,0 0,0 -5."
"33624,9.8515 -5.33624,9.8515 0,0 -2.19604,0 -2.19604,0 0,0 -0.21267,-5.34194 -0.2258,-5.6441 -0.90636,1.85872 -2.75025,5.6441 -2.75025,5.6441 0,0 -2.25769,0 -2.25769,0 0,0 -0.77988,-9.8515 -0.77988,-9.8515 z m -57.34448,1.86763 c -0.56575,0.0239 -1.0"
"7959,0.22785 -1.55984,0.61574 -0.38091,0.30216 -0.63789,0.71675 -0.84148,1.16982 0,1.2e-4 4.04324,0 4.04324,0 0.007,-0.0721 0.0205,-0.16004 0.0205,-0.22568 0,-0.37441 -0.0665,-0.66504 -0.18472,-0.86207 -0.28894,-0.47281 -0.7175,-0.69781 -1.35459,-0.6"
"9781 -0.0382,0 -0.0854,-0.002 -0.12313,0 z m 10.69306,0 c -0.56574,0.0239 -1.07953,0.22785 -1.55983,0.61574 -0.38091,0.30216 -0.6313,0.71675 -0.84148,1.16982 0,1.2e-4 4.04326,0 4.04326,0 0.007,-0.0721 0.0206,-0.16004 0.0206,-0.22568 0,-0.37441 -0.059"
"9,-0.66504 -0.1847,-0.86207 -0.0574,-0.096 -0.13504,-0.19154 -0.20524,-0.26677 -0.27431,-0.28332 -0.65169,-0.43104 -1.14939,-0.43104 -0.0382,0 -0.0854,-0.002 -0.12317,0 z m 82.71244,0 c -0.58183,0.0179 -1.12519,0.21495 -1.62152,0.61574 -0.3743,0.3021"
"6 -0.63126,0.71675 -0.84141,1.16982 0,1.2e-4 4.0227,0 4.0227,0 0.007,-0.0721 0.0206,-0.16004 0.0206,-0.22568 0,-0.37441 -0.0599,-0.66504 -0.1847,-0.86207 -0.28241,-0.46631 -0.71756,-0.69119 -1.35464,-0.69781 -0.0188,2.3e-4 -0.0223,-5.7e-4 -0.041,0 z "
"m -53.77333,0.0411 c -0.54291,0.0644 -1.0478,0.3122 -1.51879,0.73879 -0.56482,0.51231 -0.97451,1.31685 -1.21092,2.38085 -0.0985,0.44656 -0.14371,0.8284 -0.14371,1.16983 0,0.46631 0.0895,0.8325 0.26688,1.10829 0.0471,0.0709 0.10982,0.14566 0.16415,0.2"
"0525 0.292,0.31003 0.69964,0.47213 1.21092,0.47213 0.66334,0 1.24791,-0.24714 1.80611,-0.75945 0.56482,-0.51882 0.96789,-1.33158 1.21092,-2.42184 0.22328,-0.99825 0.19211,-1.74366 -0.12317,-2.21659 -0.30205,-0.45969 -0.74381,-0.67726 -1.35453,-0.6772"
"6 -0.10364,0 -0.20729,-0.012 -0.30786,0 z m 37.08713,3.59166 c -0.5582,0.15114 -1.18387,0.2783 -2.01135,0.39006 -0.61733,0.0919 -1.05739,0.1888 -1.31354,0.28731 -0.22328,0.0919 -0.40307,0.21918 -0.55421,0.38995 -0.1444,0.16415 -0.24131,0.33651 -0.287"
"32,0.53365 -0.0131,0.0788 -0.0205,0.16004 -0.0205,0.22568 0,0.005 -1.2e-4,0.0153 0,0.0205 6.8e-4,0.0156 -0.002,0.0465 0,0.0616 0.004,0.0297 0.0124,0.0748 0.0205,0.10251 0.003,0.009 0.0171,0.0322 0.0205,0.0411 0.007,0.0177 0.0116,0.0448 0.0206,0.0616 "
"0.009,0.0166 0.03,0.0455 0.041,0.0615 0.0172,0.0236 0.0406,0.0599 0.0616,0.0821 0.16415,0.1839 0.49176,0.26677 0.96458,0.26677 0.51893,0 1.018,-0.0985 1.4778,-0.3283 0.45319,-0.22339 0.81847,-0.55672 1.08775,-0.94415 0.19703,-0.27579 0.35467,-0.70032"
" 0.49257,-1.25201 z m -125.364659,-16.45612 55.082599,-56.87199 8.99518,0 -13.2998,56.87199 -7.398629,0 3.776339,-16.37106 -23.091518,0 -15.692032,16.37106 -8.372139,0 m 29.675679,-22.22896 18.88598,0 3.48449,-14.27618 c 1.40629,-5.66388 2.75996,-10."
"38381 4.06102,-14.1598 -2.60007,3.25873 -6.04001,7.1252 -10.31982,11.59939 L 86.12566,729.8159\" />\n"
" <path id=\"path2\" style=\"fill:none;stroke:#663366;stroke-width:3.28386545;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;\" d=\"m 242.27371,772.00406 c 0.26666,0.68537 0.5332,1.3697 0.81093,2.03897 0.42773,0.90933 0.922,1.77974"
" 1.51639,2.59227 3.21051,4.36413 8.58716,6.75366 15.41353,7.34862 0,0 7.34302,0 7.34302,0 2.32173,-0.18116 4.75464,-0.51882 7.27636,-1.01207 4.34906,-0.85043 8.95929,-2.15678 13.74726,-3.90261 3.62705,-1.32245 7.3541,-2.88712 11.13662,-4.70567 8.2372"
"9,-3.94873 16.74671,-9.04148 25.09506,-15.18751 2.74946,-2.02242 5.38772,-4.09758 7.92063,-6.20767 2.32173,-1.93179 4.54905,-3.89371 6.67649,-5.8772 5.93759,-5.72219 10.42009,-11.53376 12.95848,-16.63667 2.64386,-5.31398 3.17158,-9.85744 1.00533,-12."
"71967 -1.32747,-1.7569 -3.54931,-2.69843 -6.40983,-2.91999 12.88633,-9.6692 20.3959,-21.3985 17.70204,-28.79369 -0.85545,-2.36008 -2.73838,-4.12086 -5.43784,-5.09458 -1.19973,-0.43149 -2.54946,-0.70488 -4.02144,-0.82931 0,0 -3.96585,0 -3.96585,0 -5.5"
"3772,0.39942 -13.59076,2.38234 -20.42273,5.73052\" />\n"
" </g>\n"
" <g id=\"g3\" style=\"fill:#663366\" transform=\"matrix(1.705222,0,0,1.705222,858.2003,2786.4508)\">\n"
" <path id=\"path3\" transform=\"translate(-451.3678,-427.5077)\" d=\"m 0,36 c 0,0 7.46,0 7.46,0 0,0 3.35,-14 3.35,-14 0,0 12.12,0 12.12,0 0,0 1.56,-6 1.56,-6 0,0 -12.17,0 -12.17,0 0,0 2.02,-9 2.02,-9 0,0 12.95,0 12.95,0 0,0 1.56,-7 1.56,-7 C 28."
"85,0 8.4,0 8.4,0 8.4,0 0,36 0,36 z\" />\n"
" <path id=\"path4\" transform=\"translate(-425.4178,-417.5077)\" d=\"m 7.51,26 c 0,0 2.24,-9.4 2.24,-9.4 1.18,-5.09 3.67,-9.6 8.38,-9.6 0.42,0 0.83,0.21 1.14,0.26 0,0 1.82,-7.21 1.82,-7.21 -0.42,0 -0.88,-0.05 -1.4,-0.05 -3.47,0 -6.38,2.44 -8.32,"
"5.94 0,0 -0.2,0 -0.2,0 C 11.46,4.23 11.71,2.61 11.9,1 11.9,1 5.47,1 5.47,1 5.1,3.08 4.53,7.15 3.66,10.82 3.66,10.82 0,26 0,26 c 0,0 7.51,0 7.51,0 z\" />\n"
" <path id=\"path5\" transform=\"translate(-404.7878,-417.5077)\" d=\"M 20.06,19.25 C 17.99,20.26 15.63,20 12.88,20 10.71,20 9.03,19.62 8.11,18.88 7.63,18.07 7.43,16.81 7.47,16 17.6,16.27 23.99,13.93 24.31,7.53 24.55,2.7 21.02,0 15.89,0 6.73,0 0."
"73,8.08 0.34,15.86 0,22.65 3.52,26 10.78,26 c 2.79,0 6.49,-0.32 9.52,-1.23 0,0 -0.24,-5.52 -0.24,-5.52 z M 17.32,7.53 C 17.2,9.91 14.26,10.05 8.47,10 9.1,7.91 11.22,6 14.69,6 c 1.71,0 2.69,0.65 2.63,1.53 z\" />\n"
" <path id=\"path6\" transform=\"translate(-378.2678,-417.5077)\" d=\"M 20.05,19.25 C 17.98,20.26 15.62,20 12.88,20 10.7,20 9.03,19.62 8.11,18.88 7.63,18.07 7.42,16.81 7.46,16 17.6,16.27 23.98,13.93 24.31,7.53 24.55,2.7 21.02,0 15.89,0 6.72,0 0.7"
"2,8.08 0.33,15.86 0,22.65 3.52,26 10.77,26 c 2.8,0 6.5,-0.32 9.53,-1.23 0,0 -0.25,-5.52 -0.25,-5.52 z M 17.32,7.53 C 17.2,9.91 14.26,10.05 8.46,10 9.1,7.91 11.21,6 14.68,6 c 1.71,0 2.7,0.65 2.64,1.53 z\" />\n"
" <path id=\"path7\" transform=\"translate(-342.3578,-417.5077)\" d=\"M 22.74,26 C 22.8,22.83 23.56,17.85 24.35,14.58 24.35,14.58 27.56,1 27.56,1 25.52,0.31 22.34,0 19.28,0 6.86,0 0.7,9.2 0.27,17.82 0,23.23 2.93,26 7.49,26 c 2.95,0 6.28,-1.43 8.8"
"7,-5.73 0,0 0.11,0 0.11,0 -0.2,2.07 -0.44,4.08 -0.57,5.73 0,0 6.84,0 6.84,0 z M 17.61,11.72 C 16.15,18.08 13.17,20 10.95,20 8.88,20 7.98,18.53 8.1,16.39 8.34,11.56 12.16,6 16.98,6 c 0.78,0 1.39,-0.14 1.96,-0.28 0,0 -1.33,6 -1.33,6 z\" />\n"
" <path id=\"path8\" transform=\"translate(-314.7278,-417.5077)\" d=\"m 0,24.82 c 1.44,1.12 4.46,1.13 7.61,1.18 6.73,0.05 11.81,-2.89 12.11,-8.29 0.17,-3.6 -2.62,-5.73 -5.35,-7.16 C 12.4,9.6 11.41,8.69 11.46,7.63 11.53,6.2 12.87,6 14.84,6 c 2.22,"
"0 4,0.27 5.02,0.47 0,0 2.02,-5.42 2.02,-5.42 C 20.73,0.36 18.43,0 15.48,0 8.95,0 4.17,3.45 3.9,8.69 c -0.16,3.24 2.17,5.42 4.99,6.9 2.28,1.17 3.06,2.07 3,3.34 C 11.82,20.21 10.68,20 8.61,20 6.18,20 3.49,19.68 2.07,19.46 2.07,19.46 0,24.82 0,24.82 z\""
" />\n"
" <path id=\"path9\" transform=\"translate(-282.2778,-428.5077)\" d=\"m 7.45,37 c 0,0 6.05,-25 6.05,-25 0,0 -7.41,0 -7.41,0 0,0 -6.09,25 -6.09,25 0,0 7.45,0 7.45,0 z M 10.92,9 C 13.46,9 15.72,6.9 15.86,3.3 15.98,0.86 14.4,0 12.07,0 9.64,0 7.42,1."
"58 7.29,3.94 7.17,6.32 8.75,9 10.92,9 z\" />\n"
" <path id=\"path10\" transform=\"translate(-267.9878,-416.8177)\" d=\"m 7.46,25.31 c 0,0 2.64,-11.26 2.64,-11.26 1.37,-5.73 4.32,-7.74 6.75,-7.74 1.92,0 2.48,0.82 2.39,2.01 -0.05,0.96 -0.2,1.97 -0.4,2.87 0,0 -3.36,14.12 -3.36,14.12 0,0 7.46,0 7."
"46,0 0,0 3.54,-14.81 3.54,-14.81 C 26.75,9.22 27.05,7.31 27.11,6.15 27.33,1.64 25.08,0 20.94,0 c -3.32,0 -6.55,1.54 -9.1,4.88 0,0 -0.1,0 -0.1,0 0,0 0.68,-4.57 0.68,-4.57 0,0 -6.58,0 -6.58,0 C 5.41,2.45 4.86,5.04 4.08,8.06 4.08,8.06 0,25.31 0,25.31 c "
"0,0 7.46,0 7.46,0 z\" />\n"
" <path id=\"path11\" transform=\"translate(-228.4278,-427.5077)\" d=\"m 0,36 c 0,0 7.46,0 7.46,0 0,0 3.36,-14 3.36,-14 0,0 12.11,0 12.11,0 0,0 1.56,-6 1.56,-6 0,0 -12.17,0 -12.17,0 0,0 2.02,-9 2.02,-9 0,0 12.95,0 12.95,0 0,0 1.56,-7 1.56,-7 C 28"
".85,0 8.4,0 8.4,0 8.4,0 0,36 0,36 z\" />\n"
" <path id=\"path12\" transform=\"translate(-202.4778,-417.5077)\" d=\"m 7.51,26 c 0,0 2.24,-9.4 2.24,-9.4 1.18,-5.09 3.67,-9.6 8.38,-9.6 0.42,0 0.83,0.21 1.14,0.26 0,0 1.82,-7.21 1.82,-7.21 -0.42,0 -0.88,-0.05 -1.4,-0.05 -3.47,0 -6.38,2.44 -8.32"
",5.94 0,0 -0.2,0 -0.2,0 C 11.46,4.23 11.71,2.61 11.9,1 11.9,1 5.47,1 5.47,1 5.11,3.08 4.53,7.15 3.66,10.82 3.66,10.82 0,26 0,26 c 0,0 7.51,0 7.51,0 z\" />\n"
" <path id=\"path13\" transform=\"translate(-181.8478,-417.5077)\" d=\"M 20.06,19.25 C 17.99,20.26 15.63,20 12.88,20 10.71,20 9.03,19.62 8.11,18.88 7.63,18.07 7.43,16.81 7.47,16 17.6,16.27 23.99,13.93 24.31,7.53 24.55,2.7 21.02,0 15.89,0 6.73,0 0"
".73,8.08 0.34,15.86 0,22.65 3.53,26 10.78,26 c 2.79,0 6.5,-0.32 9.52,-1.23 0,0 -0.24,-5.52 -0.24,-5.52 z M 17.32,7.53 C 17.2,9.91 14.26,10.05 8.47,10 9.1,7.91 11.22,6 14.69,6 c 1.71,0 2.69,0.65 2.63,1.53 z\" />\n"
" <path id=\"path14\" transform=\"translate(-155.3278,-417.5077)\" d=\"M 20.05,19.25 C 17.98,20.26 15.62,20 12.88,20 10.7,20 9.03,19.62 8.11,18.88 7.63,18.07 7.42,16.81 7.46,16 17.6,16.27 23.98,13.93 24.31,7.53 24.55,2.7 21.02,0 15.89,0 6.72,0 0."
"72,8.08 0.33,15.86 0,22.65 3.52,26 10.77,26 c 2.8,0 6.5,-0.32 9.53,-1.23 0,0 -0.25,-5.52 -0.25,-5.52 z M 17.32,7.53 C 17.2,9.91 14.26,10.05 8.46,10 9.1,7.91 11.21,6 14.68,6 c 1.71,0 2.7,0.65 2.64,1.53 z\" />\n"
" <path id=\"path15\" transform=\"translate(-128.9478,-428.5077)\" d=\"M 23.31,0 C 23.31,0 20.5,11.36 20.5,11.36 19.48,10.94 18.15,11 17.11,11 7.53,11 0.75,19.2 0.3,28.08 0,34.34 3.34,37 7.64,37 c 3.01,0 6.18,-1.33 8.58,-4.77 0,0 0.1,0 0.1,0 0,0 "
"-0.57,4.77 -0.57,4.77 0,0 6.78,0 6.78,0 0.31,-3 0.96,-6.57 1.69,-9.83 0,0 6.49,-27.17 6.49,-27.17 0,0 -7.4,0 -7.4,0 z M 17.47,24.42 C 16.3,29.35 13.54,31 11.36,31 9.19,31 7.98,29.49 8.13,26.8 8.38,21.82 11.8,17 16.25,17 c 1.25,0 2.32,0.19 2.91,0.47 0"
",0 -1.69,6.95 -1.69,6.95 z\" />\n"
" <path id=\"path16\" transform=\"translate(-99.2378,-417.5077)\" d=\"M 10.61,26 C 19.31,26 26.02,19.41 26.49,10.44 26.78,4.5 23.08,0 16.25,0 7.23,0 0.76,7.3 0.31,16.12 0,22.54 4.14,26 10.61,26 z m 1.17,-6 C 9.24,20 7.84,18.38 7.99,15.96 8.19,11."
"93 10.68,6 14.97,6 c 2.96,0 3.87,2.27 3.75,4.5 -0.22,4.4 -2.9,9.5 -6.94,9.5 z\" />\n"
" <path id=\"path17\" transform=\"translate(-70.6778,-417.5077)\" d=\"M 7.2,26 C 7.2,26 9.9,14.58 9.9,14.58 11.03,9.49 13.85,6 16.38,6 c 1.82,0 2.32,1.33 2.23,3.07 -0.05,0.9 -0.25,1.91 -0.46,2.91 0,0 -3.34,14.02 -3.34,14.02 0,0 7.2,0 7.2,0 0,0 2."
"7,-11.47 2.7,-11.47 C 25.95,9.28 28.61,6 31.09,6 c 1.71,0 2.42,1.22 2.34,2.96 -0.05,1.01 -0.26,2.12 -0.52,3.13 0,0 -3.24,13.91 -3.24,13.91 0,0 7.25,0 7.25,0 0,0 3.49,-14.81 3.49,-14.81 0.27,-1.33 0.58,-3.4 0.63,-4.46 C 41.26,2.33 39.11,0 35.23,0 31.9"
"1,0 28.68,1.5 26.23,4.66 26.14,2.38 24.51,0 20.47,0 17.2,0 14.08,1.48 11.58,4.83 c 0,0 -0.1,0 -0.1,0 0,0 0.67,-3.83 0.67,-3.83 0,0 -6.42,0 -6.42,0 C 5.31,3.14 4.8,5.73 4.02,8.75 4.02,8.75 0,26 0,26 c 0,0 7.2,0 7.2,0 z\" />\n"
" </g>\n"
" </g>\n"
"</svg>\n";
const char* agplv3_logo_svg = (const char*) temp_binary_data_18;
//================== juce_icon.png ==================
static const unsigned char temp_binary_data_19[] =
static const unsigned char temp_binary_data_18[] =
{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,2,0,0,0,2,0,8,6,0,0,0,244,120,212,250,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,132,101,88,73,102,77,77,0,42,0,0,0,8,0,5,1,18,0,3,0,0,0,1,0,1,0,0,1,26,0,5,0,0,0,1,0,0,0,74,1,27,0,5,0,0,0,1,0,0,0,82,
1,40,0,3,0,0,0,1,0,2,0,0,135,105,0,4,0,0,0,1,0,0,0,90,0,0,0,0,0,0,0,144,0,0,0,1,0,0,0,144,0,0,0,1,0,3,160,1,0,3,0,0,0,1,0,1,0,0,160,2,0,4,0,0,0,1,0,0,2,0,160,3,0,4,0,0,0,1,0,0,2,0,0,0,0,0,25,192,84,16,0,0,0,9,112,72,89,115,0,0,22,37,0,0,22,37,1,73,82,
36,240,0,0,1,89,105,84,88,116,88,77,76,58,99,111,109,46,97,100,111,98,101,46,120,109,112,0,0,0,0,0,60,120,58,120,109,112,109,101,116,97,32,120,109,108,110,115,58,120,61,34,97,100,111,98,101,58,110,115,58,109,101,116,97,47,34,32,120,58,120,109,112,116,
@ -3588,10 +3458,10 @@ static const unsigned char temp_binary_data_19[] =
246,44,212,239,33,44,75,155,114,119,199,74,182,59,225,163,230,56,187,0,203,253,163,244,158,144,61,194,134,54,75,89,109,30,70,120,118,29,207,206,219,205,104,221,216,184,128,155,196,214,68,235,181,92,180,4,225,231,230,249,31,56,76,178,107,226,240,74,169,
60,174,167,167,149,58,7,146,87,83,147,170,92,246,47,193,107,255,83,221,119,125,168,20,16,4,4,1,245,55,199,228,93,104,231,183,98,169,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
const char* juce_icon_png = (const char*) temp_binary_data_19;
const char* juce_icon_png = (const char*) temp_binary_data_18;
//================== wizard_AnimatedApp.svg ==================
static const unsigned char temp_binary_data_20[] =
static const unsigned char temp_binary_data_19[] =
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"
"<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->\n"
"\n"
@ -3768,10 +3638,10 @@ static const unsigned char temp_binary_data_20[] =
" id=\"line44\"\n"
" style=\"stroke:#a45c94;stroke-opacity:0.94117647\" /></svg>";
const char* wizard_AnimatedApp_svg = (const char*) temp_binary_data_20;
const char* wizard_AnimatedApp_svg = (const char*) temp_binary_data_19;
//================== wizard_AudioApp.svg ==================
static const unsigned char temp_binary_data_21[] =
static const unsigned char temp_binary_data_20[] =
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"
"<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->\n"
"\n"
@ -4525,10 +4395,10 @@ static const unsigned char temp_binary_data_21[] =
" id=\"line131\"\n"
" style=\"stroke:#a45c94;stroke-opacity:1\" /></svg>";
const char* wizard_AudioApp_svg = (const char*) temp_binary_data_21;
const char* wizard_AudioApp_svg = (const char*) temp_binary_data_20;
//================== wizard_AudioPlugin.svg ==================
static const unsigned char temp_binary_data_22[] =
static const unsigned char temp_binary_data_21[] =
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"
"<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->\n"
"\n"
@ -5384,10 +5254,10 @@ static const unsigned char temp_binary_data_22[] =
" id=\"circle175\"\n"
" style=\"stroke:#a45c94;stroke-opacity:1;fill:#a45c94;fill-opacity:1\" /></g></g></g></svg>";
const char* wizard_AudioPlugin_svg = (const char*) temp_binary_data_22;
const char* wizard_AudioPlugin_svg = (const char*) temp_binary_data_21;
//================== wizard_ConsoleApp.svg ==================
static const unsigned char temp_binary_data_23[] =
static const unsigned char temp_binary_data_22[] =
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"
"<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->\n"
"\n"
@ -5474,10 +5344,10 @@ static const unsigned char temp_binary_data_23[] =
" id=\"path19\"\n"
" style=\"stroke:#a45c94;stroke-opacity:1;fill:#a45c94;fill-opacity:1\" /></g></g></svg>";
const char* wizard_ConsoleApp_svg = (const char*) temp_binary_data_23;
const char* wizard_ConsoleApp_svg = (const char*) temp_binary_data_22;
//================== wizard_DLL.svg ==================
static const unsigned char temp_binary_data_24[] =
static const unsigned char temp_binary_data_23[] =
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"
"<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->\n"
"\n"
@ -5748,10 +5618,10 @@ static const unsigned char temp_binary_data_24[] =
" id=\"path54\"\n"
" style=\"stroke:#a45c94;stroke-opacity:1\" /></svg>";
const char* wizard_DLL_svg = (const char*) temp_binary_data_24;
const char* wizard_DLL_svg = (const char*) temp_binary_data_23;
//================== wizard_GUI.svg ==================
static const unsigned char temp_binary_data_25[] =
static const unsigned char temp_binary_data_24[] =
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"
"<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->\n"
"\n"
@ -5921,10 +5791,10 @@ static const unsigned char temp_binary_data_25[] =
" id=\"path47\"\n"
" style=\"stroke:#a45c94;stroke-opacity:1\" /></svg>";
const char* wizard_GUI_svg = (const char*) temp_binary_data_25;
const char* wizard_GUI_svg = (const char*) temp_binary_data_24;
//================== wizard_Highlight.svg ==================
static const unsigned char temp_binary_data_26[] =
static const unsigned char temp_binary_data_25[] =
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"
"<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->\n"
"\n"
@ -5974,10 +5844,10 @@ static const unsigned char temp_binary_data_26[] =
" id=\"path3\"\n"
" style=\"fill:#a45c94;fill-opacity:1\" /></svg>";
const char* wizard_Highlight_svg = (const char*) temp_binary_data_26;
const char* wizard_Highlight_svg = (const char*) temp_binary_data_25;
//================== wizard_Openfile.svg ==================
static const unsigned char temp_binary_data_27[] =
static const unsigned char temp_binary_data_26[] =
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"
"<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->\n"
"\n"
@ -6029,10 +5899,10 @@ static const unsigned char temp_binary_data_27[] =
" id=\"path3\"\n"
" style=\"stroke:#a45c94;stroke-opacity:1\" /></svg>";
const char* wizard_Openfile_svg = (const char*) temp_binary_data_27;
const char* wizard_Openfile_svg = (const char*) temp_binary_data_26;
//================== wizard_OpenGL.svg ==================
static const unsigned char temp_binary_data_28[] =
static const unsigned char temp_binary_data_27[] =
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"
"<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->\n"
"\n"
@ -6160,10 +6030,10 @@ static const unsigned char temp_binary_data_28[] =
" id=\"path23\"\n"
" style=\"stroke:#a45c94;stroke-opacity:1\" /></svg>";
const char* wizard_OpenGL_svg = (const char*) temp_binary_data_28;
const char* wizard_OpenGL_svg = (const char*) temp_binary_data_27;
//================== wizard_StaticLibrary.svg ==================
static const unsigned char temp_binary_data_29[] =
static const unsigned char temp_binary_data_28[] =
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"
"<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->\n"
"\n"
@ -6434,10 +6304,10 @@ static const unsigned char temp_binary_data_29[] =
" id=\"path54\"\n"
" style=\"stroke:#a45c94;stroke-opacity:1\" /></svg>";
const char* wizard_StaticLibrary_svg = (const char*) temp_binary_data_29;
const char* wizard_StaticLibrary_svg = (const char*) temp_binary_data_28;
//================== jucer_AnimatedComponentSimpleTemplate.h ==================
static const unsigned char temp_binary_data_30[] =
static const unsigned char temp_binary_data_29[] =
"#pragma once\r\n"
"\r\n"
"%%include_juce%%\r\n"
@ -6495,10 +6365,10 @@ static const unsigned char temp_binary_data_30[] =
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%content_component_class%%)\r\n"
"};\r\n";
const char* jucer_AnimatedComponentSimpleTemplate_h = (const char*) temp_binary_data_30;
const char* jucer_AnimatedComponentSimpleTemplate_h = (const char*) temp_binary_data_29;
//================== jucer_AnimatedComponentTemplate.cpp ==================
static const unsigned char temp_binary_data_31[] =
static const unsigned char temp_binary_data_30[] =
"%%include_corresponding_header%%\r\n"
"\r\n"
"//==============================================================================\r\n"
@ -6537,10 +6407,10 @@ static const unsigned char temp_binary_data_31[] =
" // update their positions.\r\n"
"}\r\n";
const char* jucer_AnimatedComponentTemplate_cpp = (const char*) temp_binary_data_31;
const char* jucer_AnimatedComponentTemplate_cpp = (const char*) temp_binary_data_30;
//================== jucer_AnimatedComponentTemplate.h ==================
static const unsigned char temp_binary_data_32[] =
static const unsigned char temp_binary_data_31[] =
"#pragma once\r\n"
"\r\n"
"%%include_juce%%\r\n"
@ -6572,10 +6442,10 @@ static const unsigned char temp_binary_data_32[] =
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%content_component_class%%)\r\n"
"};\r\n";
const char* jucer_AnimatedComponentTemplate_h = (const char*) temp_binary_data_32;
const char* jucer_AnimatedComponentTemplate_h = (const char*) temp_binary_data_31;
//================== jucer_AudioComponentSimpleTemplate.h ==================
static const unsigned char temp_binary_data_33[] =
static const unsigned char temp_binary_data_32[] =
"#pragma once\r\n"
"\r\n"
"%%include_juce%%\r\n"
@ -6671,10 +6541,10 @@ static const unsigned char temp_binary_data_33[] =
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%content_component_class%%)\r\n"
"};\r\n";
const char* jucer_AudioComponentSimpleTemplate_h = (const char*) temp_binary_data_33;
const char* jucer_AudioComponentSimpleTemplate_h = (const char*) temp_binary_data_32;
//================== jucer_AudioComponentTemplate.cpp ==================
static const unsigned char temp_binary_data_34[] =
static const unsigned char temp_binary_data_33[] =
"%%include_corresponding_header%%\r\n"
"\r\n"
"//==============================================================================\r\n"
@ -6751,10 +6621,10 @@ static const unsigned char temp_binary_data_34[] =
" // update their positions.\r\n"
"}\r\n";
const char* jucer_AudioComponentTemplate_cpp = (const char*) temp_binary_data_34;
const char* jucer_AudioComponentTemplate_cpp = (const char*) temp_binary_data_33;
//================== jucer_AudioComponentTemplate.h ==================
static const unsigned char temp_binary_data_35[] =
static const unsigned char temp_binary_data_34[] =
"#pragma once\r\n"
"\r\n"
"%%include_juce%%\r\n"
@ -6788,10 +6658,10 @@ static const unsigned char temp_binary_data_35[] =
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%content_component_class%%)\r\n"
"};\r\n";
const char* jucer_AudioComponentTemplate_h = (const char*) temp_binary_data_35;
const char* jucer_AudioComponentTemplate_h = (const char*) temp_binary_data_34;
//================== jucer_AudioPluginARADocumentControllerTemplate.cpp ==================
static const unsigned char temp_binary_data_36[] =
static const unsigned char temp_binary_data_35[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@ -6835,10 +6705,10 @@ static const unsigned char temp_binary_data_36[] =
" return juce::ARADocumentControllerSpecialisation::createARAFactory<%%aradocumentcontroller_class_name%%>();\r\n"
"}\r\n";
const char* jucer_AudioPluginARADocumentControllerTemplate_cpp = (const char*) temp_binary_data_36;
const char* jucer_AudioPluginARADocumentControllerTemplate_cpp = (const char*) temp_binary_data_35;
//================== jucer_AudioPluginARADocumentControllerTemplate.h ==================
static const unsigned char temp_binary_data_37[] =
static const unsigned char temp_binary_data_36[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@ -6876,10 +6746,10 @@ static const unsigned char temp_binary_data_37[] =
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%aradocumentcontroller_class_name%%)\r\n"
"};\r\n";
const char* jucer_AudioPluginARADocumentControllerTemplate_h = (const char*) temp_binary_data_37;
const char* jucer_AudioPluginARADocumentControllerTemplate_h = (const char*) temp_binary_data_36;
//================== jucer_AudioPluginARAEditorTemplate.cpp ==================
static const unsigned char temp_binary_data_38[] =
static const unsigned char temp_binary_data_37[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@ -6929,10 +6799,10 @@ static const unsigned char temp_binary_data_38[] =
" // subcomponents in your editor..\r\n"
"}\r\n";
const char* jucer_AudioPluginARAEditorTemplate_cpp = (const char*) temp_binary_data_38;
const char* jucer_AudioPluginARAEditorTemplate_cpp = (const char*) temp_binary_data_37;
//================== jucer_AudioPluginARAEditorTemplate.h ==================
static const unsigned char temp_binary_data_39[] =
static const unsigned char temp_binary_data_38[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@ -6969,10 +6839,10 @@ static const unsigned char temp_binary_data_39[] =
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%editor_class_name%%)\r\n"
"};\r\n";
const char* jucer_AudioPluginARAEditorTemplate_h = (const char*) temp_binary_data_39;
const char* jucer_AudioPluginARAEditorTemplate_h = (const char*) temp_binary_data_38;
//================== jucer_AudioPluginARAFilterTemplate.h ==================
static const unsigned char temp_binary_data_40[] =
static const unsigned char temp_binary_data_39[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@ -7036,10 +6906,10 @@ static const unsigned char temp_binary_data_40[] =
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%filter_class_name%%)\r\n"
"};\r\n";
const char* jucer_AudioPluginARAFilterTemplate_h = (const char*) temp_binary_data_40;
const char* jucer_AudioPluginARAFilterTemplate_h = (const char*) temp_binary_data_39;
//================== jucer_AudioPluginARAPlaybackRendererTemplate.cpp ==================
static const unsigned char temp_binary_data_41[] =
static const unsigned char temp_binary_data_40[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@ -7155,10 +7025,10 @@ static const unsigned char temp_binary_data_41[] =
" return success;\r\n"
"}\r\n";
const char* jucer_AudioPluginARAPlaybackRendererTemplate_cpp = (const char*) temp_binary_data_41;
const char* jucer_AudioPluginARAPlaybackRendererTemplate_cpp = (const char*) temp_binary_data_40;
//================== jucer_AudioPluginARAPlaybackRendererTemplate.h ==================
static const unsigned char temp_binary_data_42[] =
static const unsigned char temp_binary_data_41[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@ -7205,10 +7075,10 @@ static const unsigned char temp_binary_data_42[] =
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%araplaybackrenderer_class_name%%)\r\n"
"};\r\n";
const char* jucer_AudioPluginARAPlaybackRendererTemplate_h = (const char*) temp_binary_data_42;
const char* jucer_AudioPluginARAPlaybackRendererTemplate_h = (const char*) temp_binary_data_41;
//================== jucer_AudioPluginEditorTemplate.cpp ==================
static const unsigned char temp_binary_data_43[] =
static const unsigned char temp_binary_data_42[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@ -7249,10 +7119,10 @@ static const unsigned char temp_binary_data_43[] =
" // subcomponents in your editor..\r\n"
"}\r\n";
const char* jucer_AudioPluginEditorTemplate_cpp = (const char*) temp_binary_data_43;
const char* jucer_AudioPluginEditorTemplate_cpp = (const char*) temp_binary_data_42;
//================== jucer_AudioPluginEditorTemplate.h ==================
static const unsigned char temp_binary_data_44[] =
static const unsigned char temp_binary_data_43[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@ -7286,10 +7156,10 @@ static const unsigned char temp_binary_data_44[] =
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%editor_class_name%%)\r\n"
"};\r\n";
const char* jucer_AudioPluginEditorTemplate_h = (const char*) temp_binary_data_44;
const char* jucer_AudioPluginEditorTemplate_h = (const char*) temp_binary_data_43;
//================== jucer_AudioPluginFilterTemplate.cpp ==================
static const unsigned char temp_binary_data_45[] =
static const unsigned char temp_binary_data_44[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@ -7481,10 +7351,10 @@ static const unsigned char temp_binary_data_45[] =
" return new %%filter_class_name%%();\r\n"
"}\r\n";
const char* jucer_AudioPluginFilterTemplate_cpp = (const char*) temp_binary_data_45;
const char* jucer_AudioPluginFilterTemplate_cpp = (const char*) temp_binary_data_44;
//================== jucer_AudioPluginFilterTemplate.h ==================
static const unsigned char temp_binary_data_46[] =
static const unsigned char temp_binary_data_45[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@ -7545,10 +7415,10 @@ static const unsigned char temp_binary_data_46[] =
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%filter_class_name%%)\r\n"
"};\r\n";
const char* jucer_AudioPluginFilterTemplate_h = (const char*) temp_binary_data_46;
const char* jucer_AudioPluginFilterTemplate_h = (const char*) temp_binary_data_45;
//================== jucer_ComponentTemplate.cpp ==================
static const unsigned char temp_binary_data_47[] =
static const unsigned char temp_binary_data_46[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@ -7624,10 +7494,10 @@ static const unsigned char temp_binary_data_47[] =
"//[EndFile] You can add extra defines here...\r\n"
"//[/EndFile]\r\n";
const char* jucer_ComponentTemplate_cpp = (const char*) temp_binary_data_47;
const char* jucer_ComponentTemplate_cpp = (const char*) temp_binary_data_46;
//================== jucer_ComponentTemplate.h ==================
static const unsigned char temp_binary_data_48[] =
static const unsigned char temp_binary_data_47[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@ -7690,10 +7560,10 @@ static const unsigned char temp_binary_data_48[] =
"//[EndFile] You can add extra defines here...\r\n"
"//[/EndFile]\r\n";
const char* jucer_ComponentTemplate_h = (const char*) temp_binary_data_48;
const char* jucer_ComponentTemplate_h = (const char*) temp_binary_data_47;
//================== jucer_ContentCompSimpleTemplate.h ==================
static const unsigned char temp_binary_data_49[] =
static const unsigned char temp_binary_data_48[] =
"#pragma once\r\n"
"\r\n"
"%%include_juce%%\r\n"
@ -7743,10 +7613,10 @@ static const unsigned char temp_binary_data_49[] =
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%content_component_class%%)\r\n"
"};\r\n";
const char* jucer_ContentCompSimpleTemplate_h = (const char*) temp_binary_data_49;
const char* jucer_ContentCompSimpleTemplate_h = (const char*) temp_binary_data_48;
//================== jucer_ContentCompTemplate.cpp ==================
static const unsigned char temp_binary_data_50[] =
static const unsigned char temp_binary_data_49[] =
"%%include_corresponding_header%%\r\n"
"\r\n"
"//==============================================================================\r\n"
@ -7777,10 +7647,10 @@ static const unsigned char temp_binary_data_50[] =
" // update their positions.\r\n"
"}\r\n";
const char* jucer_ContentCompTemplate_cpp = (const char*) temp_binary_data_50;
const char* jucer_ContentCompTemplate_cpp = (const char*) temp_binary_data_49;
//================== jucer_ContentCompTemplate.h ==================
static const unsigned char temp_binary_data_51[] =
static const unsigned char temp_binary_data_50[] =
"#pragma once\r\n"
"\r\n"
"%%include_juce%%\r\n"
@ -7809,10 +7679,10 @@ static const unsigned char temp_binary_data_51[] =
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%content_component_class%%)\r\n"
"};\r\n";
const char* jucer_ContentCompTemplate_h = (const char*) temp_binary_data_51;
const char* jucer_ContentCompTemplate_h = (const char*) temp_binary_data_50;
//================== jucer_InlineComponentTemplate.h ==================
static const unsigned char temp_binary_data_52[] =
static const unsigned char temp_binary_data_51[] =
"//==============================================================================\r\n"
"class %%component_class%% : public juce::Component\r\n"
"{\r\n"
@ -7854,10 +7724,10 @@ static const unsigned char temp_binary_data_52[] =
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%component_class%%)\r\n"
"};\r\n";
const char* jucer_InlineComponentTemplate_h = (const char*) temp_binary_data_52;
const char* jucer_InlineComponentTemplate_h = (const char*) temp_binary_data_51;
//================== jucer_MainConsoleAppTemplate.cpp ==================
static const unsigned char temp_binary_data_53[] =
static const unsigned char temp_binary_data_52[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@ -7878,10 +7748,10 @@ static const unsigned char temp_binary_data_53[] =
" return 0;\r\n"
"}\r\n";
const char* jucer_MainConsoleAppTemplate_cpp = (const char*) temp_binary_data_53;
const char* jucer_MainConsoleAppTemplate_cpp = (const char*) temp_binary_data_52;
//================== jucer_MainTemplate_NoWindow.cpp ==================
static const unsigned char temp_binary_data_54[] =
static const unsigned char temp_binary_data_53[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@ -7934,10 +7804,10 @@ static const unsigned char temp_binary_data_54[] =
"// This macro generates the main() routine that launches the app.\r\n"
"START_JUCE_APPLICATION (%%app_class_name%%)\r\n";
const char* jucer_MainTemplate_NoWindow_cpp = (const char*) temp_binary_data_54;
const char* jucer_MainTemplate_NoWindow_cpp = (const char*) temp_binary_data_53;
//================== jucer_MainTemplate_Window.cpp ==================
static const unsigned char temp_binary_data_55[] =
static const unsigned char temp_binary_data_54[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@ -8043,10 +7913,10 @@ static const unsigned char temp_binary_data_55[] =
"// This macro generates the main() routine that launches the app.\r\n"
"START_JUCE_APPLICATION (%%app_class_name%%)\r\n";
const char* jucer_MainTemplate_Window_cpp = (const char*) temp_binary_data_55;
const char* jucer_MainTemplate_Window_cpp = (const char*) temp_binary_data_54;
//================== jucer_NewComponentTemplate.cpp ==================
static const unsigned char temp_binary_data_56[] =
static const unsigned char temp_binary_data_55[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@ -8099,10 +7969,10 @@ static const unsigned char temp_binary_data_56[] =
"\r\n"
"}\r\n";
const char* jucer_NewComponentTemplate_cpp = (const char*) temp_binary_data_56;
const char* jucer_NewComponentTemplate_cpp = (const char*) temp_binary_data_55;
//================== jucer_NewComponentTemplate.h ==================
static const unsigned char temp_binary_data_57[] =
static const unsigned char temp_binary_data_56[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@ -8133,10 +8003,10 @@ static const unsigned char temp_binary_data_57[] =
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%component_class%%)\r\n"
"};\r\n";
const char* jucer_NewComponentTemplate_h = (const char*) temp_binary_data_57;
const char* jucer_NewComponentTemplate_h = (const char*) temp_binary_data_56;
//================== jucer_NewCppFileTemplate.cpp ==================
static const unsigned char temp_binary_data_58[] =
static const unsigned char temp_binary_data_57[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@ -8149,10 +8019,10 @@ static const unsigned char temp_binary_data_58[] =
"\r\n"
"%%include_corresponding_header%%\r\n";
const char* jucer_NewCppFileTemplate_cpp = (const char*) temp_binary_data_58;
const char* jucer_NewCppFileTemplate_cpp = (const char*) temp_binary_data_57;
//================== jucer_NewCppFileTemplate.h ==================
static const unsigned char temp_binary_data_59[] =
static const unsigned char temp_binary_data_58[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@ -8165,10 +8035,10 @@ static const unsigned char temp_binary_data_59[] =
"\r\n"
"#pragma once\r\n";
const char* jucer_NewCppFileTemplate_h = (const char*) temp_binary_data_59;
const char* jucer_NewCppFileTemplate_h = (const char*) temp_binary_data_58;
//================== jucer_NewInlineComponentTemplate.h ==================
static const unsigned char temp_binary_data_60[] =
static const unsigned char temp_binary_data_59[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@ -8231,10 +8101,10 @@ static const unsigned char temp_binary_data_60[] =
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%component_class%%)\r\n"
"};\r\n";
const char* jucer_NewInlineComponentTemplate_h = (const char*) temp_binary_data_60;
const char* jucer_NewInlineComponentTemplate_h = (const char*) temp_binary_data_59;
//================== jucer_OpenGLComponentSimpleTemplate.h ==================
static const unsigned char temp_binary_data_61[] =
static const unsigned char temp_binary_data_60[] =
"#pragma once\r\n"
"\r\n"
"%%include_juce%%\r\n"
@ -8303,10 +8173,10 @@ static const unsigned char temp_binary_data_61[] =
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%content_component_class%%)\r\n"
"};\r\n";
const char* jucer_OpenGLComponentSimpleTemplate_h = (const char*) temp_binary_data_61;
const char* jucer_OpenGLComponentSimpleTemplate_h = (const char*) temp_binary_data_60;
//================== jucer_OpenGLComponentTemplate.cpp ==================
static const unsigned char temp_binary_data_62[] =
static const unsigned char temp_binary_data_61[] =
"%%include_corresponding_header%%\r\n"
"\r\n"
"//==============================================================================\r\n"
@ -8356,10 +8226,10 @@ static const unsigned char temp_binary_data_62[] =
" // update their positions.\r\n"
"}\r\n";
const char* jucer_OpenGLComponentTemplate_cpp = (const char*) temp_binary_data_62;
const char* jucer_OpenGLComponentTemplate_cpp = (const char*) temp_binary_data_61;
//================== jucer_OpenGLComponentTemplate.h ==================
static const unsigned char temp_binary_data_63[] =
static const unsigned char temp_binary_data_62[] =
"#pragma once\r\n"
"\r\n"
"%%include_juce%%\r\n"
@ -8393,10 +8263,10 @@ static const unsigned char temp_binary_data_63[] =
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%content_component_class%%)\r\n"
"};\r\n";
const char* jucer_OpenGLComponentTemplate_h = (const char*) temp_binary_data_63;
const char* jucer_OpenGLComponentTemplate_h = (const char*) temp_binary_data_62;
//================== jucer_PIPAudioProcessorTemplate.h ==================
static const unsigned char temp_binary_data_64[] =
static const unsigned char temp_binary_data_63[] =
"class %%class_name%% : public juce::AudioProcessor\r\n"
"{\r\n"
"public:\r\n"
@ -8505,10 +8375,10 @@ static const unsigned char temp_binary_data_64[] =
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%class_name%%)\r\n"
"};\r\n";
const char* jucer_PIPAudioProcessorTemplate_h = (const char*) temp_binary_data_64;
const char* jucer_PIPAudioProcessorTemplate_h = (const char*) temp_binary_data_63;
//================== jucer_PIPTemplate.h ==================
static const unsigned char temp_binary_data_65[] =
static const unsigned char temp_binary_data_64[] =
"/*******************************************************************************\r\n"
" The block below describes the properties of this PIP. A PIP is a short snippet\r\n"
" of code that can be read by the Projucer and used to generate a JUCE project.\r\n"
@ -8527,10 +8397,10 @@ static const unsigned char temp_binary_data_65[] =
"//==============================================================================\r\n"
"%%pip_code%%\r\n";
const char* jucer_PIPTemplate_h = (const char*) temp_binary_data_65;
const char* jucer_PIPTemplate_h = (const char*) temp_binary_data_64;
//================== colourscheme_dark.xml ==================
static const unsigned char temp_binary_data_66[] =
static const unsigned char temp_binary_data_65[] =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"
"\r\n"
"<COLOUR_SCHEME font=\"&lt;Monospaced&gt;; 13.0\">\r\n"
@ -8555,10 +8425,10 @@ static const unsigned char temp_binary_data_66[] =
" <COLOUR name=\"Error\" colour=\"FFE60000\"/>\r\n"
"</COLOUR_SCHEME>\r\n";
const char* colourscheme_dark_xml = (const char*) temp_binary_data_66;
const char* colourscheme_dark_xml = (const char*) temp_binary_data_65;
//================== colourscheme_light.xml ==================
static const unsigned char temp_binary_data_67[] =
static const unsigned char temp_binary_data_66[] =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"
"\r\n"
"<COLOUR_SCHEME font=\"&lt;Monospaced&gt;; 13.0\">\r\n"
@ -8583,10 +8453,10 @@ static const unsigned char temp_binary_data_67[] =
" <COLOUR name=\"Error\" colour=\"ffcc0000\"/>\r\n"
"</COLOUR_SCHEME>\r\n";
const char* colourscheme_light_xml = (const char*) temp_binary_data_67;
const char* colourscheme_light_xml = (const char*) temp_binary_data_66;
//================== juce_runtime_arch_detection.cpp ==================
static const unsigned char temp_binary_data_68[] =
static const unsigned char temp_binary_data_67[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@ -8681,10 +8551,10 @@ static const unsigned char temp_binary_data_68[] =
"\r\n"
"#endif\r\n";
const char* juce_runtime_arch_detection_cpp = (const char*) temp_binary_data_68;
const char* juce_runtime_arch_detection_cpp = (const char*) temp_binary_data_67;
//================== juce_LinuxSubprocessHelper.cpp ==================
static const unsigned char temp_binary_data_69[] =
static const unsigned char temp_binary_data_68[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@ -8731,10 +8601,10 @@ static const unsigned char temp_binary_data_69[] =
" return 1;\r\n"
"}\r\n";
const char* juce_LinuxSubprocessHelper_cpp = (const char*) temp_binary_data_69;
const char* juce_LinuxSubprocessHelper_cpp = (const char*) temp_binary_data_68;
//================== juce_SimpleBinaryBuilder.cpp ==================
static const unsigned char temp_binary_data_70[] =
static const unsigned char temp_binary_data_69[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@ -9126,7 +8996,7 @@ static const unsigned char temp_binary_data_70[] =
" return 0;\r\n"
"}\r\n";
const char* juce_SimpleBinaryBuilder_cpp = (const char*) temp_binary_data_70;
const char* juce_SimpleBinaryBuilder_cpp = (const char*) temp_binary_data_69;
const char* getNamedResource (const char* resourceNameUTF8, int& numBytes);
@ -9158,7 +9028,6 @@ const char* getNamedResource (const char* resourceNameUTF8, int& numBytes)
case 0x96d2a1ce: numBytes = 28184; return export_linux_svg;
case 0x2505bd06: numBytes = 1706; return export_visualStudio_svg;
case 0x3198e2bf: numBytes = 12295; return export_xcode_svg;
case 0x4ef40370: numBytes = 26610; return agplv3_logo_svg;
case 0x154a7275: numBytes = 105697; return juce_icon_png;
case 0x1f3b6d2f: numBytes = 5978; return wizard_AnimatedApp_svg;
case 0x60296d04: numBytes = 17791; return wizard_AudioApp_svg;
@ -9238,7 +9107,6 @@ const char* namedResourceList[] =
"export_linux_svg",
"export_visualStudio_svg",
"export_xcode_svg",
"agplv3_logo_svg",
"juce_icon_png",
"wizard_AnimatedApp_svg",
"wizard_AudioApp_svg",
@ -9313,7 +9181,6 @@ const char* originalFilenames[] =
"export_linux.svg",
"export_visualStudio.svg",
"export_xcode.svg",
"agplv3_logo.svg",
"juce_icon.png",
"wizard_AnimatedApp.svg",
"wizard_AudioApp.svg",

View file

@ -62,9 +62,6 @@ namespace BinaryData
extern const char* export_xcode_svg;
const int export_xcode_svgSize = 12295;
extern const char* agplv3_logo_svg;
const int agplv3_logo_svgSize = 26610;
extern const char* juce_icon_png;
const int juce_icon_pngSize = 105697;
@ -222,7 +219,7 @@ namespace BinaryData
const int juce_SimpleBinaryBuilder_cppSize = 12997;
// Number of elements in the namedResourceList and originalFileNames arrays.
const int namedResourceListSize = 71;
const int namedResourceListSize = 70;
// Points to the start of a list of resource names.
extern const char* namedResourceList[];

View file

@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<JUCERPROJECT id="M70qfTRRk" name="Projucer" projectType="guiapp" juceFolder="../../juce"
version="8.0.0" bundleIdentifier="com.juce.theprojucer"
companyName="Raw Material Software Limited"
version="8.0.0" bundleIdentifier="com.juce.theprojucer" companyName="Raw Material Software Limited"
companyCopyright="Raw Material Software Limited" useAppConfig="0"
addUsingNamespaceToJuceHeader="1" jucerFormatVersion="1">
<EXPORTFORMATS>
@ -116,16 +115,6 @@
<FILE id="dsxevB" name="jucer_StartPageTreeHolder.h" compile="0" resource="0"
file="Source/Application/StartPage/jucer_StartPageTreeHolder.h"/>
</GROUP>
<GROUP id="{70333C48-4F84-A180-24E1-0EC9EF223F3B}" name="UserAccount">
<FILE id="Rw7w0l" name="jucer_LicenseController.h" compile="0" resource="0"
file="Source/Application/UserAccount/jucer_LicenseController.h"/>
<FILE id="rUtPud" name="jucer_LicenseQueryThread.h" compile="0" resource="0"
file="Source/Application/UserAccount/jucer_LicenseQueryThread.h"/>
<FILE id="Dwndl3" name="jucer_LicenseState.h" compile="0" resource="0"
file="Source/Application/UserAccount/jucer_LicenseState.h"/>
<FILE id="d5kWEN" name="jucer_LoginFormComponent.h" compile="0" resource="0"
file="Source/Application/UserAccount/jucer_LoginFormComponent.h"/>
</GROUP>
<GROUP id="{2F08ABDF-C7BB-5F54-55F5-0C2E27983930}" name="Windows">
<FILE id="w1XB4w" name="jucer_AboutWindowComponent.h" compile="0" resource="0"
file="Source/Application/Windows/jucer_AboutWindowComponent.h"/>
@ -204,7 +193,6 @@
file="Source/BinaryData/Icons/export_visualStudio.svg"/>
<FILE id="G0oYd6" name="export_xcode.svg" compile="0" resource="1"
file="Source/BinaryData/Icons/export_xcode.svg"/>
<FILE id="CfDTJ0" name="agplv3_logo.svg" compile="0" resource="1" file="Source/BinaryData/Icons/agplv3_logo.svg"/>
<FILE id="Zrx1Gl" name="juce_icon.png" compile="0" resource="1" file="Source/BinaryData/Icons/juce_icon.png"/>
<FILE id="iPYmG9" name="wizard_AnimatedApp.svg" compile="0" resource="1"
file="Source/BinaryData/Icons/wizard_AnimatedApp.svg"/>
@ -550,8 +538,6 @@
resource="0" file="Source/Project/UI/jucer_ProjectContentComponent.h"/>
<FILE id="itkVli" name="jucer_ProjectMessagesComponent.h" compile="0"
resource="0" file="Source/Project/UI/jucer_ProjectMessagesComponent.h"/>
<FILE id="UUlUDF" name="jucer_UserAvatarComponent.h" compile="0" resource="0"
file="Source/Project/UI/jucer_UserAvatarComponent.h"/>
</GROUP>
<FILE id="JT1rMJ" name="jucer_Project.cpp" compile="1" resource="0"
file="Source/Project/jucer_Project.cpp"/>

View file

@ -1,229 +0,0 @@
/*
==============================================================================
This file is part of the JUCE framework.
Copyright (c) Raw Material Software Limited
JUCE is an open source framework subject to commercial or open source
licensing.
By downloading, installing, or using the JUCE framework, or combining the
JUCE framework with any other source code, object code, content or any other
copyrightable work, you agree to the terms of the JUCE End User Licence
Agreement, and all incorporated terms including the JUCE Privacy Policy and
the JUCE Website Terms of Service, as applicable, which will bind you. If you
do not agree to the terms of these agreements, we will not license the JUCE
framework to you, and you must discontinue the installation or download
process and cease use of the JUCE framework.
JUCE End User Licence Agreement: https://juce.com/legal/juce-8-licence/
JUCE Privacy Policy: https://juce.com/juce-privacy-policy
JUCE Website Terms of Service: https://juce.com/juce-website-terms-of-service/
Or:
You may also use this code under the terms of the AGPLv3:
https://www.gnu.org/licenses/agpl-3.0.en.html
THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL
WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED.
==============================================================================
*/
#pragma once
#include "jucer_LicenseState.h"
#include "jucer_LicenseQueryThread.h"
//==============================================================================
class LicenseController final : private Timer
{
public:
LicenseController()
{
checkLicense();
}
//==============================================================================
static LicenseState getAGPLState()
{
return { LicenseState::Type::agplv3, projucerMajorVersion, {}, {} };
}
LicenseState getCurrentState() const noexcept
{
return state;
}
void setState (const LicenseState& newState)
{
if (state != newState)
{
state = newState;
licenseStateToSettings (state, getGlobalProperties());
stateListeners.call ([] (LicenseStateListener& l) { l.licenseStateChanged(); });
}
}
void resetState()
{
setState ({});
}
void signIn (const String& email, const String& password,
std::function<void (const String&)> completionCallback)
{
licenseQueryThread.doSignIn (email, password,
[this, completionCallback] (LicenseQueryThread::ErrorMessageAndType error,
LicenseState newState)
{
completionCallback (error.first);
setState (newState);
});
}
void cancelSignIn()
{
licenseQueryThread.cancelRunningJobs();
}
//==============================================================================
struct LicenseStateListener
{
virtual ~LicenseStateListener() = default;
virtual void licenseStateChanged() = 0;
};
void addListener (LicenseStateListener* listenerToAdd)
{
stateListeners.add (listenerToAdd);
}
void removeListener (LicenseStateListener* listenerToRemove)
{
stateListeners.remove (listenerToRemove);
}
private:
//==============================================================================
static const char* getLicenseStateValue (LicenseState::Type type)
{
switch (type)
{
case LicenseState::Type::agplv3: return "AGPLv3";
case LicenseState::Type::personal: return "personal";
case LicenseState::Type::educational: return "edu";
case LicenseState::Type::indie: return "indie";
case LicenseState::Type::pro: return "pro";
case LicenseState::Type::none:
default: break;
}
return nullptr;
}
static LicenseState::Type getLicenseTypeFromValue (const String& d)
{
if (d == getLicenseStateValue (LicenseState::Type::agplv3)) return LicenseState::Type::agplv3;
if (d == getLicenseStateValue (LicenseState::Type::personal)) return LicenseState::Type::personal;
if (d == getLicenseStateValue (LicenseState::Type::educational)) return LicenseState::Type::educational;
if (d == getLicenseStateValue (LicenseState::Type::indie)) return LicenseState::Type::indie;
if (d == getLicenseStateValue (LicenseState::Type::pro)) return LicenseState::Type::pro;
return LicenseState::Type::none;
}
static LicenseState licenseStateFromSettings (PropertiesFile& props)
{
if (auto licenseXml = props.getXmlValue ("license"))
{
// this is here for backwards compatibility with old-style settings files using XML text elements
if (licenseXml->getChildElementAllSubText ("type", {}).isNotEmpty())
{
auto stateFromOldSettings = [&licenseXml]() -> LicenseState
{
return { getLicenseTypeFromValue (licenseXml->getChildElementAllSubText ("type", {})),
licenseXml->getChildElementAllSubText ("version", "-1").getIntValue(),
licenseXml->getChildElementAllSubText ("username", {}),
licenseXml->getChildElementAllSubText ("authToken", {}) };
}();
licenseStateToSettings (stateFromOldSettings, props);
return stateFromOldSettings;
}
return { getLicenseTypeFromValue (licenseXml->getStringAttribute ("type", {})),
licenseXml->getIntAttribute ("version", -1),
licenseXml->getStringAttribute ("username", {}),
licenseXml->getStringAttribute ("authToken", {}) };
}
return {};
}
static void licenseStateToSettings (const LicenseState& state, PropertiesFile& props)
{
props.removeValue ("license");
if (state.isSignedIn())
{
XmlElement licenseXml ("license");
if (auto* typeString = getLicenseStateValue (state.type))
licenseXml.setAttribute ("type", typeString);
licenseXml.setAttribute ("version", state.version);
licenseXml.setAttribute ("username", state.username);
licenseXml.setAttribute ("authToken", state.authToken);
props.setValue ("license", &licenseXml);
}
props.saveIfNeeded();
}
//==============================================================================
void checkLicense()
{
if (state.authToken.isNotEmpty() && ! state.isAGPL())
{
auto completionCallback = [this] (LicenseQueryThread::ErrorMessageAndType error,
LicenseState updatedState)
{
if (error == LicenseQueryThread::ErrorMessageAndType())
{
setState (updatedState);
}
else if ((error.second == LicenseQueryThread::ErrorType::busy
|| error.second == LicenseQueryThread::ErrorType::cancelled
|| error.second == LicenseQueryThread::ErrorType::connectionError)
&& ! hasRetriedLicenseCheck)
{
hasRetriedLicenseCheck = true;
startTimer (10000);
}
};
licenseQueryThread.checkLicenseValidity (state, std::move (completionCallback));
}
}
void timerCallback() override
{
stopTimer();
checkLicense();
}
//==============================================================================
LicenseState state = licenseStateFromSettings (getGlobalProperties());
ListenerList<LicenseStateListener> stateListeners;
LicenseQueryThread licenseQueryThread;
bool hasRetriedLicenseCheck = false;
//==============================================================================
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (LicenseController)
};

View file

@ -1,380 +0,0 @@
/*
==============================================================================
This file is part of the JUCE framework.
Copyright (c) Raw Material Software Limited
JUCE is an open source framework subject to commercial or open source
licensing.
By downloading, installing, or using the JUCE framework, or combining the
JUCE framework with any other source code, object code, content or any other
copyrightable work, you agree to the terms of the JUCE End User Licence
Agreement, and all incorporated terms including the JUCE Privacy Policy and
the JUCE Website Terms of Service, as applicable, which will bind you. If you
do not agree to the terms of these agreements, we will not license the JUCE
framework to you, and you must discontinue the installation or download
process and cease use of the JUCE framework.
JUCE End User Licence Agreement: https://juce.com/legal/juce-8-licence/
JUCE Privacy Policy: https://juce.com/juce-privacy-policy
JUCE Website Terms of Service: https://juce.com/juce-website-terms-of-service/
Or:
You may also use this code under the terms of the AGPLv3:
https://www.gnu.org/licenses/agpl-3.0.en.html
THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL
WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED.
==============================================================================
*/
#pragma once
//==============================================================================
namespace LicenseHelpers
{
inline LicenseState::Type licenseTypeForString (const String& licenseString)
{
if (licenseString == "juce-pro") return LicenseState::Type::pro;
if (licenseString == "juce-indie") return LicenseState::Type::indie;
if (licenseString == "juce-edu") return LicenseState::Type::educational;
if (licenseString == "juce-personal") return LicenseState::Type::personal;
jassertfalse; // unknown type
return LicenseState::Type::none;
}
using LicenseVersionAndType = std::pair<int, LicenseState::Type>;
inline LicenseVersionAndType findBestLicense (std::vector<LicenseVersionAndType>&& licenses)
{
if (licenses.size() == 1)
return licenses[0];
auto getValueForLicenceType = [] (LicenseState::Type type)
{
switch (type)
{
case LicenseState::Type::pro: return 4;
case LicenseState::Type::indie: return 3;
case LicenseState::Type::educational: return 2;
case LicenseState::Type::personal: return 1;
case LicenseState::Type::agplv3:
case LicenseState::Type::none:
default: return -1;
}
};
std::sort (licenses.begin(), licenses.end(),
[getValueForLicenceType] (const LicenseVersionAndType& l1, const LicenseVersionAndType& l2)
{
if (l1.first > l2.first)
return true;
if (l1.first == l2.first)
return getValueForLicenceType (l1.second) > getValueForLicenceType (l2.second);
return false;
});
auto findFirstLicense = [&licenses] (bool isPaid)
{
auto iter = std::find_if (licenses.begin(), licenses.end(),
[isPaid] (const LicenseVersionAndType& l)
{
auto proOrIndie = (l.second == LicenseState::Type::pro || l.second == LicenseState::Type::indie);
return isPaid ? proOrIndie : ! proOrIndie;
});
return iter != licenses.end() ? *iter
: LicenseVersionAndType();
};
auto newestPaid = findFirstLicense (true);
auto newestFree = findFirstLicense (false);
if (newestPaid.first >= projucerMajorVersion || newestPaid.first >= newestFree.first)
return newestPaid;
return newestFree;
}
}
//==============================================================================
class LicenseQueryThread
{
public:
enum class ErrorType
{
busy,
cancelled,
connectionError,
webResponseError
};
using ErrorMessageAndType = std::pair<String, ErrorType>;
using LicenseQueryCallback = std::function<void (ErrorMessageAndType, LicenseState)>;
//==============================================================================
LicenseQueryThread() = default;
void checkLicenseValidity (const LicenseState& state, LicenseQueryCallback completionCallback)
{
if (jobPool.getNumJobs() > 0)
{
completionCallback ({ {}, ErrorType::busy }, {});
return;
}
jobPool.addJob ([this, state, completionCallback]
{
auto updatedState = state;
auto result = runTask (std::make_unique<UserLicenseQuery> (state.authToken), updatedState);
WeakReference<LicenseQueryThread> weakThis (this);
MessageManager::callAsync ([weakThis, result, updatedState, completionCallback]
{
if (weakThis != nullptr)
completionCallback (result, updatedState);
});
});
}
void doSignIn (const String& email, const String& password, LicenseQueryCallback completionCallback)
{
cancelRunningJobs();
jobPool.addJob ([this, email, password, completionCallback]
{
LicenseState state;
auto result = runTask (std::make_unique<UserLogin> (email, password), state);
if (result == ErrorMessageAndType())
result = runTask (std::make_unique<UserLicenseQuery> (state.authToken), state);
if (result != ErrorMessageAndType())
state = {};
WeakReference<LicenseQueryThread> weakThis (this);
MessageManager::callAsync ([weakThis, result, state, completionCallback]
{
if (weakThis != nullptr)
completionCallback (result, state);
});
});
}
void cancelRunningJobs()
{
jobPool.removeAllJobs (true, 500);
}
private:
//==============================================================================
struct AccountEnquiryBase
{
virtual ~AccountEnquiryBase() = default;
virtual bool isPOSTLikeRequest() const = 0;
virtual String getEndpointURLSuffix() const = 0;
virtual StringPairArray getParameterNamesAndValues() const = 0;
virtual String getExtraHeaders() const = 0;
virtual int getSuccessCode() const = 0;
virtual String errorCodeToString (int) const = 0;
virtual bool parseServerResponse (const String&, LicenseState&) = 0;
};
struct UserLogin final : public AccountEnquiryBase
{
UserLogin (const String& e, const String& p)
: userEmail (e), userPassword (p)
{
}
bool isPOSTLikeRequest() const override { return true; }
String getEndpointURLSuffix() const override { return "/authenticate/projucer"; }
int getSuccessCode() const override { return 200; }
StringPairArray getParameterNamesAndValues() const override
{
StringPairArray namesAndValues;
namesAndValues.set ("email", userEmail);
namesAndValues.set ("password", userPassword);
return namesAndValues;
}
String getExtraHeaders() const override
{
return "Content-Type: application/json";
}
String errorCodeToString (int errorCode) const override
{
switch (errorCode)
{
case 400: return "Please enter your email and password to sign in.";
case 401: return "Your email and password are incorrect.";
case 451: return "Access denied.";
default: return "Something went wrong, please try again.";
}
}
bool parseServerResponse (const String& serverResponse, LicenseState& licenseState) override
{
auto json = JSON::parse (serverResponse);
licenseState.authToken = json.getProperty ("token", {}).toString();
licenseState.username = json.getProperty ("user", {}).getProperty ("username", {}).toString();
return (licenseState.authToken.isNotEmpty() && licenseState.username.isNotEmpty());
}
String userEmail, userPassword;
};
struct UserLicenseQuery final : public AccountEnquiryBase
{
UserLicenseQuery (const String& authToken)
: userAuthToken (authToken)
{
}
bool isPOSTLikeRequest() const override { return false; }
String getEndpointURLSuffix() const override { return "/user/licences/projucer"; }
int getSuccessCode() const override { return 200; }
StringPairArray getParameterNamesAndValues() const override
{
return {};
}
String getExtraHeaders() const override
{
return "x-access-token: " + userAuthToken;
}
String errorCodeToString (int errorCode) const override
{
switch (errorCode)
{
case 401: return "User not found or could not be verified.";
default: return "User licenses info fetch failed (unknown error).";
}
}
bool parseServerResponse (const String& serverResponse, LicenseState& licenseState) override
{
auto json = JSON::parse (serverResponse);
if (auto* licensesJson = json.getArray())
{
std::vector<LicenseHelpers::LicenseVersionAndType> licenses;
for (auto& license : *licensesJson)
{
auto version = license.getProperty ("product_version", {}).toString().trim();
auto type = license.getProperty ("licence_type", {}).toString();
auto status = license.getProperty ("status", {}).toString();
if (status == "active" && type.isNotEmpty() && version.isNotEmpty())
licenses.push_back ({ version.getIntValue(), LicenseHelpers::licenseTypeForString (type) });
}
if (! licenses.empty())
{
auto bestLicense = LicenseHelpers::findBestLicense (std::move (licenses));
licenseState.version = bestLicense.first;
licenseState.type = bestLicense.second;
}
return true;
}
return false;
}
String userAuthToken;
};
//==============================================================================
static String postDataStringAsJSON (const StringPairArray& parameters)
{
DynamicObject::Ptr d (new DynamicObject());
for (auto& key : parameters.getAllKeys())
d->setProperty (key, parameters[key]);
return JSON::toString (var (d.get()));
}
static ErrorMessageAndType runTask (std::unique_ptr<AccountEnquiryBase> accountEnquiryTask, LicenseState& state)
{
const ErrorMessageAndType cancelledError ("Cancelled.", ErrorType::cancelled);
const String endpointURL ("https://api.juce.com/api/v1");
URL url (endpointURL + accountEnquiryTask->getEndpointURLSuffix());
auto isPOST = accountEnquiryTask->isPOSTLikeRequest();
if (isPOST)
url = url.withPOSTData (postDataStringAsJSON (accountEnquiryTask->getParameterNamesAndValues()));
if (ThreadPoolJob::getCurrentThreadPoolJob()->shouldExit())
return cancelledError;
int statusCode = 0;
auto urlStream = url.createInputStream (URL::InputStreamOptions (isPOST ? URL::ParameterHandling::inPostData
: URL::ParameterHandling::inAddress)
.withExtraHeaders (accountEnquiryTask->getExtraHeaders())
.withConnectionTimeoutMs (5000)
.withStatusCode (&statusCode));
if (urlStream == nullptr)
return { "Failed to connect to the web server.", ErrorType::connectionError };
if (statusCode != accountEnquiryTask->getSuccessCode())
return { accountEnquiryTask->errorCodeToString (statusCode), ErrorType::webResponseError };
if (ThreadPoolJob::getCurrentThreadPoolJob()->shouldExit())
return cancelledError;
String response;
for (;;)
{
char buffer [8192] = "";
auto num = urlStream->read (buffer, sizeof (buffer));
if (ThreadPoolJob::getCurrentThreadPoolJob()->shouldExit())
return cancelledError;
if (num <= 0)
break;
response += buffer;
}
if (ThreadPoolJob::getCurrentThreadPoolJob()->shouldExit())
return cancelledError;
if (! accountEnquiryTask->parseServerResponse (response, state))
return { "Failed to parse server response.", ErrorType::webResponseError };
return {};
}
//==============================================================================
ThreadPool jobPool { ThreadPoolOptions{}.withNumberOfThreads (1) };
//==============================================================================
JUCE_DECLARE_WEAK_REFERENCEABLE (LicenseQueryThread)
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (LicenseQueryThread)
};

View file

@ -1,96 +0,0 @@
/*
==============================================================================
This file is part of the JUCE framework.
Copyright (c) Raw Material Software Limited
JUCE is an open source framework subject to commercial or open source
licensing.
By downloading, installing, or using the JUCE framework, or combining the
JUCE framework with any other source code, object code, content or any other
copyrightable work, you agree to the terms of the JUCE End User Licence
Agreement, and all incorporated terms including the JUCE Privacy Policy and
the JUCE Website Terms of Service, as applicable, which will bind you. If you
do not agree to the terms of these agreements, we will not license the JUCE
framework to you, and you must discontinue the installation or download
process and cease use of the JUCE framework.
JUCE End User Licence Agreement: https://juce.com/legal/juce-8-licence/
JUCE Privacy Policy: https://juce.com/juce-privacy-policy
JUCE Website Terms of Service: https://juce.com/juce-website-terms-of-service/
Or:
You may also use this code under the terms of the AGPLv3:
https://www.gnu.org/licenses/agpl-3.0.en.html
THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL
WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED.
==============================================================================
*/
#pragma once
//==============================================================================
struct LicenseState
{
enum class Type
{
none,
agplv3,
personal,
educational,
indie,
pro
};
LicenseState() = default;
LicenseState (Type t, int v, String user, String token)
: type (t), version (v), username (user), authToken (token)
{
}
bool operator== (const LicenseState& other) const noexcept
{
return type == other.type
&& version == other.version
&& username == other.username
&& authToken == other.authToken;
}
bool operator != (const LicenseState& other) const noexcept
{
return ! operator== (other);
}
bool isSignedIn() const noexcept { return isAGPL() || (version > 0 && username.isNotEmpty()); }
bool isOldLicense() const noexcept { return isSignedIn() && version < projucerMajorVersion; }
bool isAGPL() const noexcept { return type == Type::agplv3; }
bool isPersonalOrNone() const noexcept { return type == Type::none || type == Type::personal; }
String getLicenseTypeString() const
{
switch (type)
{
case Type::none: return "No license";
case Type::agplv3: return "AGPLv3";
case Type::personal: return "Personal";
case Type::educational: return "Educational";
case Type::indie: return "Indie";
case Type::pro: return "Pro";
default: break;
};
jassertfalse;
return {};
}
Type type = Type::none;
int version = -1;
String username, authToken;
};

View file

@ -1,297 +0,0 @@
/*
==============================================================================
This file is part of the JUCE framework.
Copyright (c) Raw Material Software Limited
JUCE is an open source framework subject to commercial or open source
licensing.
By downloading, installing, or using the JUCE framework, or combining the
JUCE framework with any other source code, object code, content or any other
copyrightable work, you agree to the terms of the JUCE End User Licence
Agreement, and all incorporated terms including the JUCE Privacy Policy and
the JUCE Website Terms of Service, as applicable, which will bind you. If you
do not agree to the terms of these agreements, we will not license the JUCE
framework to you, and you must discontinue the installation or download
process and cease use of the JUCE framework.
JUCE End User Licence Agreement: https://juce.com/legal/juce-8-licence/
JUCE Privacy Policy: https://juce.com/juce-privacy-policy
JUCE Website Terms of Service: https://juce.com/juce-website-terms-of-service/
Or:
You may also use this code under the terms of the AGPLv3:
https://www.gnu.org/licenses/agpl-3.0.en.html
THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL
WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED.
==============================================================================
*/
#pragma once
#include "../../Project/UI/jucer_UserAvatarComponent.h"
//==============================================================================
class LoginFormComponent final : public Component
{
public:
LoginFormComponent (MainWindow& window)
: mainWindow (window)
{
setTitle ("Login");
setFocusContainerType (FocusContainerType::focusContainer);
addAndMakeVisible (emailBox);
emailBox.setTextToShowWhenEmpty ("Email", Colours::black.withAlpha (0.2f));
emailBox.setJustification (Justification::centredLeft);
emailBox.onReturnKey = [this] { submitDetails(); };
emailBox.setTitle ("Email");
addAndMakeVisible (passwordBox);
passwordBox.setTextToShowWhenEmpty ("Password", Colours::black.withAlpha (0.2f));
passwordBox.setPasswordCharacter ((juce_wchar) 0x2022);
passwordBox.setJustification (Justification::centredLeft);
passwordBox.onReturnKey = [this] { submitDetails(); };
passwordBox.setTitle ("Password");
addAndMakeVisible (logInButton);
logInButton.onClick = [this] { submitDetails(); };
addAndMakeVisible (enableAGPLButton);
enableAGPLButton.onClick = [this]
{
ProjucerApplication::getApp().getLicenseController().setState (LicenseController::getAGPLState());
mainWindow.hideLoginFormOverlay();
};
addAndMakeVisible (userAvatar);
addAndMakeVisible (createAccountLabel);
createAccountLabel.setFont (FontOptions (14.0f, Font::underlined));
createAccountLabel.addMouseListener (this, false);
createAccountLabel.setMouseCursor (MouseCursor::PointingHandCursor);
addAndMakeVisible (errorMessageLabel);
errorMessageLabel.setMinimumHorizontalScale (1.0f);
errorMessageLabel.setFont (FontOptions { 12.0f });
errorMessageLabel.setColour (Label::textColourId, Colours::red);
errorMessageLabel.setVisible (false);
dismissButton.setShape (getLookAndFeel().getCrossShape (1.0f), false, true, false);
addAndMakeVisible (dismissButton);
dismissButton.onClick = [this] { mainWindow.hideLoginFormOverlay(); };
dismissButton.setTitle ("Dismiss");
setWantsKeyboardFocus (true);
setOpaque (true);
updateLookAndFeel();
setSize (300, 350);
}
~LoginFormComponent() override
{
ProjucerApplication::getApp().getLicenseController().cancelSignIn();
}
void resized() override
{
auto bounds = getLocalBounds().reduced (20);
auto spacing = bounds.getHeight() / 20;
userAvatar.setBounds (bounds.removeFromTop (iconHeight).reduced ((bounds.getWidth() / 2) - (iconHeight / 2), 0));
errorMessageLabel.setBounds (bounds.removeFromTop (spacing));
bounds.removeFromTop (spacing / 2);
auto textEditorHeight = bounds.getHeight() / 5;
emailBox.setBounds (bounds.removeFromTop (textEditorHeight));
bounds.removeFromTop (spacing);
passwordBox.setBounds (bounds.removeFromTop (textEditorHeight));
bounds.removeFromTop (spacing * 2);
emailBox.setFont (FontOptions ((float) textEditorHeight / 2.5f));
passwordBox.setFont (FontOptions ((float) textEditorHeight / 2.5f));
logInButton.setBounds (bounds.removeFromTop (textEditorHeight));
auto slice = bounds.removeFromTop (textEditorHeight);
createAccountLabel.setBounds (slice.removeFromLeft (createAccountLabel.getFont().getStringWidth (createAccountLabel.getText()) + 5));
slice.removeFromLeft (15);
enableAGPLButton.setBounds (slice.reduced (0, 5));
dismissButton.setBounds (getLocalBounds().reduced (10).removeFromTop (20).removeFromRight (20));
}
void paint (Graphics& g) override
{
g.fillAll (findColour (secondaryBackgroundColourId).contrasting (0.1f));
}
void mouseUp (const MouseEvent& event) override
{
if (event.eventComponent == &createAccountLabel)
URL ("https://juce.com/verification/register").launchInDefaultBrowser();
}
void updateLookAndFeel()
{
enableAGPLButton.setColour (TextButton::buttonColourId, findColour (secondaryButtonBackgroundColourId));
}
void lookAndFeelChanged() override
{
updateLookAndFeel();
}
private:
class ProgressButton final : public TextButton,
private Timer
{
public:
ProgressButton (const String& buttonName)
: TextButton (buttonName), text (buttonName)
{
}
void setBusy (bool shouldBeBusy)
{
isInProgress = shouldBeBusy;
if (isInProgress)
{
setEnabled (false);
setButtonText ({});
startTimerHz (30);
}
else
{
setEnabled (true);
setButtonText (text);
stopTimer();
}
}
void paint (Graphics& g) override
{
TextButton::paint (g);
if (isInProgress)
{
auto size = getHeight() - 10;
auto halfSize = size / 2;
getLookAndFeel().drawSpinningWaitAnimation (g, Colours::white,
(getWidth() / 2) - halfSize, (getHeight() / 2) - halfSize,
size, size);
}
}
private:
void timerCallback() override
{
repaint();
}
String text;
bool isInProgress = false;
};
//==============================================================================
void updateLoginButtonStates (bool isLoggingIn)
{
logInButton.setBusy (isLoggingIn);
emailBox.setEnabled (! isLoggingIn);
passwordBox.setEnabled (! isLoggingIn);
}
void submitDetails()
{
auto loginFormError = checkLoginFormsAreValid();
if (loginFormError.isNotEmpty())
{
showErrorMessage (loginFormError);
return;
}
updateLoginButtonStates (true);
auto completionCallback = [weakThis = SafePointer<LoginFormComponent> { this }] (const String& errorMessage)
{
if (weakThis == nullptr)
return;
weakThis->updateLoginButtonStates (false);
if (errorMessage.isNotEmpty())
{
weakThis->showErrorMessage (errorMessage);
}
else
{
weakThis->hideErrorMessage();
weakThis->mainWindow.hideLoginFormOverlay();
ProjucerApplication::getApp().getCommandManager().commandStatusChanged();
}
};
ProjucerApplication::getApp().getLicenseController().signIn (emailBox.getText(), passwordBox.getText(),
std::move (completionCallback));
}
String checkLoginFormsAreValid() const
{
auto email = emailBox.getText();
if (email.isEmpty() || email.indexOfChar ('@') < 0)
return "Please enter a valid email.";
auto password = passwordBox.getText();
if (password.isEmpty() || password.length() < 8)
return "Please enter a valid password.";
return {};
}
void showErrorMessage (const String& errorMessage)
{
errorMessageLabel.setText (errorMessage, dontSendNotification);
errorMessageLabel.setVisible (true);
}
void hideErrorMessage()
{
errorMessageLabel.setText ({}, dontSendNotification);
errorMessageLabel.setVisible (false);
}
//==============================================================================
static constexpr int iconHeight = 50;
MainWindow& mainWindow;
TextEditor emailBox, passwordBox;
ProgressButton logInButton { "Sign In" };
TextButton enableAGPLButton { "Enable AGPLv3 Mode" };
ShapeButton dismissButton { {},
findColour (treeIconColourId),
findColour (treeIconColourId).overlaidWith (findColour (defaultHighlightedTextColourId).withAlpha (0.2f)),
findColour (treeIconColourId).overlaidWith (findColour (defaultHighlightedTextColourId).withAlpha (0.4f)) };
UserAvatarComponent userAvatar { false };
Label createAccountLabel { {}, "Create an account" },
errorMessageLabel { {}, {} };
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (LoginFormComponent)
};

View file

@ -161,7 +161,6 @@ void ProjucerApplication::handleAsyncUpdate()
void ProjucerApplication::doBasicApplicationSetup()
{
licenseController = std::make_unique<LicenseController>();
LookAndFeel::setDefaultLookAndFeel (&lookAndFeel);
initCommandManager();
icons = std::make_unique<Icons>();
@ -373,8 +372,6 @@ PopupMenu ProjucerApplication::createFileMenu()
menu.addSeparator();
menu.addCommandItem (commandManager.get(), CommandIDs::openInIDE);
menu.addCommandItem (commandManager.get(), CommandIDs::saveAndOpenInIDE);
menu.addSeparator();
menu.addCommandItem (commandManager.get(), CommandIDs::loginLogout);
#if ! JUCE_MAC
menu.addCommandItem (commandManager.get(), CommandIDs::showAboutWindow);
@ -924,8 +921,7 @@ void ProjucerApplication::getAllCommands (Array <CommandID>& commands)
CommandIDs::showForum,
CommandIDs::showAPIModules,
CommandIDs::showAPIClasses,
CommandIDs::showTutorials,
CommandIDs::loginLogout };
CommandIDs::showTutorials };
commands.addArray (ids, numElementsInArray (ids));
}
@ -1031,19 +1027,6 @@ void ProjucerApplication::getCommandInfo (CommandID commandID, ApplicationComman
result.setInfo ("JUCE Tutorials", "Shows the JUCE tutorials in a browser", CommandCategories::general, 0);
break;
case CommandIDs::loginLogout:
{
auto licenseState = licenseController->getCurrentState();
if (licenseState.isAGPL())
result.setInfo ("Disable AGPLv3 mode", "Disables AGPLv3 mode", CommandCategories::general, 0);
else
result.setInfo (licenseState.isSignedIn() ? String ("Sign out ") + licenseState.username + "..." : String ("Sign in..."),
"Sign out of your JUCE account",
CommandCategories::general, 0);
break;
}
default:
JUCEApplication::getCommandInfo (commandID, result);
break;
@ -1074,7 +1057,6 @@ bool ProjucerApplication::perform (const InvocationInfo& info)
case CommandIDs::showAPIModules: launchModulesBrowser(); break;
case CommandIDs::showAPIClasses: launchClassesBrowser(); break;
case CommandIDs::showTutorials: launchTutorialsBrowser(); break;
case CommandIDs::loginLogout: doLoginOrLogout(); break;
default: return JUCEApplication::perform (info);
}
@ -1307,26 +1289,6 @@ void ProjucerApplication::launchTutorialsBrowser()
tutorialsLink.launchInDefaultBrowser();
}
void ProjucerApplication::doLoginOrLogout()
{
if (licenseController->getCurrentState().isSignedIn())
{
licenseController->resetState();
}
else
{
if (auto* window = mainWindowList.getMainWindowWithLoginFormOpen())
{
window->toFront (true);
}
else
{
mainWindowList.createWindowIfNoneAreOpen();
mainWindowList.getFrontmostWindow()->showLoginFormOverlay();
}
}
}
//==============================================================================
struct FileWithTime
{

View file

@ -34,7 +34,6 @@
#pragma once
#include "UserAccount/jucer_LicenseController.h"
#include "jucer_MainWindow.h"
#include "../Project/Modules/jucer_Modules.h"
#include "jucer_AutoUpdater.h"
@ -87,8 +86,6 @@ public:
AvailableModulesList& getJUCEPathModulesList() { return jucePathModulesList; }
AvailableModulesList& getUserPathsModulesList() { return userPathsModulesList; }
LicenseController& getLicenseController() { return *licenseController; }
bool isAutomaticVersionCheckingEnabled() const;
void setAutomaticVersionCheckingEnabled (bool shouldBeEnabled);
@ -169,9 +166,6 @@ private:
void launchClassesBrowser();
void launchTutorialsBrowser();
void doLoginOrLogout();
void showLoginForm();
void enableOrDisableGUIEditor();
//==============================================================================
@ -208,8 +202,6 @@ private:
#endif
//==============================================================================
std::unique_ptr<LicenseController> licenseController;
std::unique_ptr<TooltipWindow> tooltipWindow;
AvailableModulesList jucePathModulesList, userPathsModulesList;

View file

@ -95,8 +95,6 @@ namespace CommandIDs
zoomNormal = 0x300073,
spaceBarDrag = 0x300074,
loginLogout = 0x300090,
showForum = 0x300100,
showAPIModules = 0x300101,
showAPIClasses = 0x300102,

View file

@ -38,7 +38,6 @@
#include "StartPage/jucer_StartPageComponent.h"
#include "../Utility/UI/jucer_JucerTreeViewBase.h"
#include "../ProjectSaving/jucer_ProjectSaver.h"
#include "UserAccount/jucer_LoginFormComponent.h"
#include "../Project/UI/jucer_ProjectContentComponent.h"
//==============================================================================
@ -78,11 +77,6 @@ public:
g.drawImage (componentImage, getLocalBounds().toFloat());
}
void inputAttemptWhenModal() override
{
mainWindow.hideLoginFormOverlay();
}
private:
void componentPeerChanged() override {}
@ -96,12 +90,6 @@ private:
void handleAsyncUpdate() override { resized(); }
void mouseUp (const MouseEvent& event) override
{
if (event.eventComponent == this)
mainWindow.hideLoginFormOverlay();
}
void lookAndFeelChanged() override
{
refreshBackgroundImage();
@ -624,18 +612,6 @@ void MainWindow::showStartPage()
getContentComponent()->grabKeyboardFocus();
}
void MainWindow::showLoginFormOverlay()
{
blurOverlayComponent = std::make_unique<BlurOverlayWithComponent> (*this, std::make_unique<LoginFormComponent> (*this));
loginFormOpen = true;
}
void MainWindow::hideLoginFormOverlay()
{
blurOverlayComponent.reset();
loginFormOpen = false;
}
//==============================================================================
ApplicationCommandTarget* MainWindow::getNextCommandTarget()
{
@ -954,15 +930,6 @@ MainWindow* MainWindowList::getMainWindowForFile (const File& file)
return nullptr;
}
MainWindow* MainWindowList::getMainWindowWithLoginFormOpen()
{
for (auto* window : windows)
if (window->isShowingLoginForm())
return window;
return nullptr;
}
void MainWindowList::checkWindowBounds (MainWindow& windowToCheck)
{
auto avoidSuperimposedWindows = [&]

View file

@ -76,10 +76,6 @@ public:
void showStartPage();
void showLoginFormOverlay();
void hideLoginFormOverlay();
bool isShowingLoginForm() const noexcept { return loginFormOpen; }
bool isInterestedInFileDrag (const StringArray& files) override;
void filesDropped (const StringArray& filenames, int mouseX, int mouseY) override;
@ -111,7 +107,6 @@ private:
Value projectNameValue;
std::unique_ptr<Component> blurOverlayComponent;
bool loginFormOpen = false;
ScopedMessageBox messageBox;
@ -138,7 +133,6 @@ public:
MainWindow* getFrontmostWindow (bool createIfNotFound = true);
MainWindow* getOrCreateEmptyWindow();
MainWindow* getMainWindowForFile (const File&);
MainWindow* getMainWindowWithLoginFormOpen();
Project* getFrontmostProject();

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 26 KiB

View file

@ -1,299 +0,0 @@
/*
==============================================================================
This file is part of the JUCE framework.
Copyright (c) Raw Material Software Limited
JUCE is an open source framework subject to commercial or open source
licensing.
By downloading, installing, or using the JUCE framework, or combining the
JUCE framework with any other source code, object code, content or any other
copyrightable work, you agree to the terms of the JUCE End User Licence
Agreement, and all incorporated terms including the JUCE Privacy Policy and
the JUCE Website Terms of Service, as applicable, which will bind you. If you
do not agree to the terms of these agreements, we will not license the JUCE
framework to you, and you must discontinue the installation or download
process and cease use of the JUCE framework.
JUCE End User Licence Agreement: https://juce.com/legal/juce-8-licence/
JUCE Privacy Policy: https://juce.com/juce-privacy-policy
JUCE Website Terms of Service: https://juce.com/juce-website-terms-of-service/
Or:
You may also use this code under the terms of the AGPLv3:
https://www.gnu.org/licenses/agpl-3.0.en.html
THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL
WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED.
==============================================================================
*/
#include "../Application/jucer_Headers.h"
#include "../Application/jucer_Application.h"
#include "../ProjectSaving/jucer_ProjectExporter.h"
#include "../Project/UI/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::agplv3: return "AGPLv3";
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::agplv3: return "agplv3";
case LicenseState::Type::personal: return "personal";
case LicenseState::Type::edu: return "edu";
case LicenseState::Type::indie: return "indie";
case LicenseState::Type::pro: return "pro";
case LicenseState::Type::notLoggedIn:
case LicenseState::Type::noLicenseChosenYet:
default: return nullptr;
}
}
static LicenseState::Type getLicenseTypeFromValue (const String& d)
{
if (d == getLicenseStateValue (LicenseState::Type::agplv3)) return LicenseState::Type::agplv3;
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 final : 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()
: state (licenseStateFromSettings (ProjucerApplication::getApp().settings->getGlobalProperties()))
{
}
LicenseController::~LicenseController()
{
thread.reset();
closeWebview (-1);
}
LicenseState LicenseController::getState() const noexcept
{
LicenseState projucerState = state;
// if the user has never logged in before and the user is running from command line
// then we have no way to ask the user to log in, so fallback to AGPLv3 mode
if (guiNotInitialisedYet
&& (state.type == LicenseState::Type::notLoggedIn
|| state.type == LicenseState::Type::noLicenseChosenYet))
{
projucerState.type = LicenseState::Type::agplv3;
projucerState.username = "AGPLv3 mode";
}
return projucerState;
}
void LicenseController::startWebviewIfNeeded()
{
if (guiNotInitialisedYet)
{
guiNotInitialisedYet = false;
auto stateParam = getState();
listeners.call ([&] (StateChangedCallback& l) { l.licenseStateChanged (stateParam); });
}
if (thread == nullptr)
thread.reset (new LicenseThread (*this, false));
}
void LicenseController::logout()
{
JUCE_ASSERT_MESSAGE_MANAGER_IS_LOCKED
thread.reset();
updateState ({});
#if ! (JUCE_LINUX || JUCE_BSD)
WebBrowserComponent::clearCookies();
#endif
thread.reset (new LicenseThread (*this, false));
}
void LicenseController::chooseNewLicense()
{
JUCE_ASSERT_MESSAGE_MANAGER_IS_LOCKED
thread.reset();
thread.reset (new LicenseThread (*this, true));
}
//==============================================================================
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 || JUCE_BSD)
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);
auto stateParam = getState();
listeners.call ([&] (StateChangedCallback& l) { l.licenseStateChanged (stateParam); });
}
LicenseState LicenseController::licenseStateFromOldSettings (XmlElement* licenseXml)
{
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;
}
LicenseState LicenseController::licenseStateFromSettings (PropertiesFile& props)
{
if (auto licenseXml = props.getXmlValue ("license"))
{
// this is here for backwards compatibility with old-style settings files using XML text elements
if (licenseXml->getChildElementAllSubText ("type", {}) != String())
{
auto stateFromOldSettings = licenseStateFromOldSettings (licenseXml.get());
licenseStateToSettings (stateFromOldSettings, props);
return stateFromOldSettings;
}
LicenseState result;
result.type = getLicenseTypeFromValue (licenseXml->getStringAttribute ("type", {}));
result.username = licenseXml->getStringAttribute ("username", {});
result.email = licenseXml->getStringAttribute ("email", {});
result.authToken = licenseXml->getStringAttribute ("authToken", {});
MemoryOutputStream imageData;
Base64::convertFromBase64 (imageData, licenseXml->getStringAttribute ("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())
{
XmlElement licenseXml ("license");
if (auto* typeString = getLicenseStateValue (state.type))
licenseXml.setAttribute ("type", typeString);
licenseXml.setAttribute ("username", state.username);
licenseXml.setAttribute ("email", state.email);
licenseXml.setAttribute ("authToken", state.authToken);
MemoryOutputStream imageData;
if (state.avatar.isValid() && PNGImageFormat().writeImageToStream (state.avatar, imageData))
licenseXml.setAttribute ("avatar", Base64::toBase64 (imageData.getData(), imageData.getDataSize()));
props.setValue ("license", &licenseXml);
}
props.saveIfNeeded();
}

View file

@ -54,9 +54,6 @@ HeaderComponent::HeaderComponent (ProjectContentComponent* pcc)
juceIcon.setImage (ImageCache::getFromMemory (BinaryData::juce_icon_png, BinaryData::juce_icon_pngSize), RectanglePlacement::centred);
addAndMakeVisible (juceIcon);
addAndMakeVisible (userAvatar);
userAvatar.addChangeListener (this);
projectNameLabel.setText ({}, dontSendNotification);
addAndMakeVisible (projectNameLabel);
@ -95,9 +92,6 @@ void HeaderComponent::resized()
exporterBox.setBounds (exporterBounds.removeFromBottom (roundToInt ((float) exporterBounds.getHeight() / 1.8f)));
configLabel.setBounds (exporterBounds);
}
userAvatar.setBounds (bounds.removeFromRight (userAvatar.isDisplaingAGPLLogo() ? roundToInt ((float) bounds.getHeight() * 1.9f)
: bounds.getHeight()).reduced (2));
}
void HeaderComponent::paint (Graphics& g)
@ -207,13 +201,6 @@ void HeaderComponent::sidebarTabsWidthChanged (int newWidth)
resized();
}
//==============================================================================
void HeaderComponent::changeListenerCallback (ChangeBroadcaster* source)
{
if (source == &userAvatar)
resized();
}
void HeaderComponent::valueChanged (Value&)
{
updateName();

View file

@ -36,7 +36,6 @@
#include "../../Application/jucer_Headers.h"
#include "../../Utility/UI/jucer_IconButton.h"
#include "jucer_UserAvatarComponent.h"
class Project;
class ProjectContentComponent;
@ -45,7 +44,6 @@ class ProjectExporter;
//==============================================================================
class HeaderComponent final : public Component,
private ValueTree::Listener,
private ChangeListener,
private Value::Listener,
private Timer
{
@ -67,7 +65,6 @@ public:
private:
//==============================================================================
void changeListenerCallback (ChangeBroadcaster* source) override;
void valueChanged (Value&) override;
void timerCallback() override;
@ -101,7 +98,6 @@ private:
Label configLabel { "Config Label", "Selected exporter" }, projectNameLabel;
ImageComponent juceIcon;
UserAvatarComponent userAvatar { true };
IconButton projectSettingsButton { "Project Settings", getIcons().settings },
saveAndOpenInIDEButton { "Save and Open in IDE", Image() };

View file

@ -1,179 +0,0 @@
/*
==============================================================================
This file is part of the JUCE framework.
Copyright (c) Raw Material Software Limited
JUCE is an open source framework subject to commercial or open source
licensing.
By downloading, installing, or using the JUCE framework, or combining the
JUCE framework with any other source code, object code, content or any other
copyrightable work, you agree to the terms of the JUCE End User Licence
Agreement, and all incorporated terms including the JUCE Privacy Policy and
the JUCE Website Terms of Service, as applicable, which will bind you. If you
do not agree to the terms of these agreements, we will not license the JUCE
framework to you, and you must discontinue the installation or download
process and cease use of the JUCE framework.
JUCE End User Licence Agreement: https://juce.com/legal/juce-8-licence/
JUCE Privacy Policy: https://juce.com/juce-privacy-policy
JUCE Website Terms of Service: https://juce.com/juce-website-terms-of-service/
Or:
You may also use this code under the terms of the AGPLv3:
https://www.gnu.org/licenses/agpl-3.0.en.html
THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL
WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED.
==============================================================================
*/
#pragma once
#include "../../Application/jucer_Application.h"
//==============================================================================
class UserAvatarComponent final : public Component,
public SettableTooltipClient,
public ChangeBroadcaster,
private LicenseController::LicenseStateListener
{
public:
UserAvatarComponent (bool isInteractive)
: interactive (isInteractive)
{
ProjucerApplication::getApp().getLicenseController().addListener (this);
lookAndFeelChanged();
}
~UserAvatarComponent() override
{
ProjucerApplication::getApp().getLicenseController().removeListener (this);
}
void paint (Graphics& g) override
{
auto bounds = getLocalBounds();
if (! isAGPL)
{
bounds = bounds.removeFromRight (bounds.getHeight());
Path ellipse;
ellipse.addEllipse (bounds.toFloat());
g.reduceClipRegion (ellipse);
}
g.drawImage (currentAvatar, bounds.toFloat(), RectanglePlacement::fillDestination);
}
void mouseUp (const MouseEvent&) override
{
triggerClick();
}
void triggerClick()
{
if (interactive)
{
PopupMenu menu;
menu.addCommandItem (ProjucerApplication::getApp().commandManager.get(), CommandIDs::loginLogout);
menu.showMenuAsync (PopupMenu::Options().withTargetComponent (this));
}
}
bool isDisplaingAGPLLogo() const noexcept { return isAGPL; }
std::unique_ptr<AccessibilityHandler> createAccessibilityHandler() override
{
return interactive ? std::make_unique<AccessibilityHandler> (*this,
AccessibilityRole::button,
AccessibilityActions().addAction (AccessibilityActionType::press,
[this] { triggerClick(); }))
: nullptr;
}
private:
//==============================================================================
static Image createAGPLAvatarImage()
{
if (auto logo = Drawable::createFromImageData (BinaryData::agplv3_logo_svg, BinaryData::agplv3_logo_svgSize))
{
auto bounds = logo->getDrawableBounds();
Image image (Image::ARGB, roundToInt (bounds.getWidth()), roundToInt (bounds.getHeight()), true);
Graphics g (image);
logo->draw (g, 1.0f);
return image;
}
jassertfalse;
return {};
}
Image createStandardAvatarImage()
{
Image image (Image::ARGB, 250, 250, true);
Graphics g (image);
g.setColour (findColour (defaultButtonBackgroundColourId));
g.fillAll();
g.setColour (findColour (defaultIconColourId));
auto path = getIcons().user;
g.fillPath (path, RectanglePlacement (RectanglePlacement::centred)
.getTransformToFit (path.getBounds(), image.getBounds().reduced (image.getHeight() / 5).toFloat()));
return image;
}
//==============================================================================
void licenseStateChanged() override
{
auto state = ProjucerApplication::getApp().getLicenseController().getCurrentState();
isAGPL = state.isAGPL();
if (interactive)
{
auto formattedUserString = [state]() -> String
{
if (state.isSignedIn())
return (state.isAGPL() ? "" : (state.username + " - ")) + state.getLicenseTypeString();
return "Not logged in";
}();
setTooltip (formattedUserString);
}
currentAvatar = isAGPL ? agplAvatarImage
: state.isSignedIn() ? standardAvatarImage : signedOutAvatarImage;
repaint();
sendChangeMessage();
}
void lookAndFeelChanged() override
{
standardAvatarImage = createStandardAvatarImage();
signedOutAvatarImage = createStandardAvatarImage();
if (interactive)
signedOutAvatarImage.multiplyAllAlphas (0.4f);
licenseStateChanged();
repaint();
}
//==============================================================================
Image standardAvatarImage, signedOutAvatarImage, agplAvatarImage { createAGPLAvatarImage() }, currentAvatar;
bool isAGPL = false, interactive = false;
};

View file

@ -122,9 +122,6 @@ Project::Project (const File& f)
auto& app = ProjucerApplication::getApp();
if (! app.isRunningCommandLine)
app.getLicenseController().addListener (this);
app.getJUCEPathModulesList().addListener (this);
app.getUserPathsModulesList().addListener (this);
@ -144,9 +141,6 @@ Project::~Project()
app.openDocumentManager.closeAllDocumentsUsingProjectWithoutSaving (*this);
if (! app.isRunningCommandLine)
app.getLicenseController().removeListener (this);
app.getJUCEPathModulesList().removeListener (this);
app.getUserPathsModulesList().removeListener (this);
}
@ -191,8 +185,6 @@ void Project::updateCompanyNameDependencies()
pluginARAFactoryIDValue.setDefault (getDefaultARAFactoryIDString());
pluginARAArchiveIDValue.setDefault (getDefaultARADocumentArchiveID());
pluginManufacturerValue.setDefault (getDefaultPluginManufacturerString());
updateLicenseWarning();
}
void Project::updateWebsiteDependencies()
@ -705,8 +697,6 @@ Result Project::loadDocument (const File& file)
setChangedFlag (false);
updateLicenseWarning();
return Result::ok();
}
@ -814,19 +804,6 @@ bool Project::isSaveAndExportDisabled() const
&& isFileModificationCheckPending();
}
void Project::updateLicenseWarning()
{
if (ProjucerApplication::getApp().isRunningCommandLine)
return;
auto currentLicenseState = ProjucerApplication::getApp().getLicenseController().getCurrentState();
if (currentLicenseState.isPersonalOrNone() || currentLicenseState.isOldLicense())
addProjectMessage (ProjectMessages::Ids::personalLicense, {});
else
removeProjectMessage (ProjectMessages::Ids::personalLicense);
}
void Project::updateJUCEPathWarning()
{
if (ProjucerApplication::getApp().shouldPromptUserAboutIncorrectJUCEPath()
@ -978,11 +955,6 @@ void Project::updateModuleNotFoundWarning (bool showWarning)
removeProjectMessage (ProjectMessages::Ids::moduleNotFound);
}
void Project::licenseStateChanged()
{
updateLicenseWarning();
}
void Project::changeListenerCallback (ChangeBroadcaster*)
{
updateJUCEPathWarning();

View file

@ -34,7 +34,6 @@
#pragma once
#include "../Application/UserAccount/jucer_LicenseController.h"
#include "Modules/jucer_AvailableModulesList.h"
class ProjectExporter;
@ -50,7 +49,6 @@ namespace ProjectMessages
DECLARE_ID (projectMessages);
DECLARE_ID (personalLicense);
DECLARE_ID (cppStandard);
DECLARE_ID (moduleNotFound);
DECLARE_ID (jucePath);
@ -80,7 +78,7 @@ namespace ProjectMessages
if (std::find (std::begin (warnings), std::end (warnings), message) != std::end (warnings))
return Ids::warning;
static Identifier notifications[] = { Ids::personalLicense, Ids::newVersionAvailable };
static Identifier notifications[] = { Ids::newVersionAvailable };
if (std::find (std::begin (notifications), std::end (notifications), message) != std::end (notifications))
return Ids::notification;
@ -101,7 +99,6 @@ namespace ProjectMessages
if (message == Ids::pluginCodeInvalid) return "Invalid Plugin Code";
if (message == Ids::manufacturerCodeInvalid) return "Invalid Manufacturer Code";
if (message == Ids::deprecatedExporter) return "Deprecated Exporter";
if (message == Ids::personalLicense) return "Personal Licence";
jassertfalse;
return {};
@ -119,7 +116,6 @@ namespace ProjectMessages
if (message == Ids::pluginCodeInvalid) return "The plugin code should be exactly four characters in length.";
if (message == Ids::manufacturerCodeInvalid) return "The manufacturer code should be exactly four characters in length.";
if (message == Ids::deprecatedExporter) return "The project includes a deprecated exporter.";
if (message == Ids::personalLicense) return "You are using a Personal licence. Sign in to activate a commercial licence.";
jassertfalse;
return {};
@ -191,7 +187,6 @@ enum class Async { no, yes };
//==============================================================================
class Project final : public FileBasedDocument,
private ValueTree::Listener,
private LicenseController::LicenseStateListener,
private ChangeListener,
private AvailableModulesList::Listener,
private MessageBoxQueue::Listener
@ -713,11 +708,9 @@ private:
void updateOldModulePaths();
//==============================================================================
void licenseStateChanged() override;
void changeListenerCallback (ChangeBroadcaster*) override;
void availableModulesChanged (AvailableModulesList*) override;
void updateLicenseWarning();
void updateJUCEPathWarning();
void updateModuleWarnings();