mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
Projucer: Remove the JUCE splash screen and update licensing
This commit is contained in:
parent
22d4747038
commit
fd933dfac6
95 changed files with 355 additions and 988 deletions
|
|
@ -75,9 +75,6 @@ static void doBasicProjectSetup (Project& project, const NewProjectTemplates::Pr
|
|||
project.getProjectValue (Ids::useAppConfig) = false;
|
||||
project.getProjectValue (Ids::addUsingNamespaceToJuceHeader) = false;
|
||||
|
||||
if (! ProjucerApplication::getApp().getLicenseController().getCurrentState().canUnlockFullFeatures())
|
||||
project.getProjectValue (Ids::displaySplashScreen) = true;
|
||||
|
||||
if (NewProjectTemplates::isPlugin (projectTemplate))
|
||||
project.getConfigFlag ("JUCE_VST3_CAN_REPLACE_VST2") = 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -47,9 +47,9 @@ public:
|
|||
}
|
||||
|
||||
//==============================================================================
|
||||
static LicenseState getGPLState()
|
||||
static LicenseState getAGPLState()
|
||||
{
|
||||
return { LicenseState::Type::gpl, projucerMajorVersion, {}, {} };
|
||||
return { LicenseState::Type::agplv3, projucerMajorVersion, {}, {} };
|
||||
}
|
||||
|
||||
LicenseState getCurrentState() const noexcept
|
||||
|
|
@ -113,7 +113,7 @@ private:
|
|||
{
|
||||
switch (type)
|
||||
{
|
||||
case LicenseState::Type::gpl: return "GPL";
|
||||
case LicenseState::Type::agplv3: return "AGPLv3";
|
||||
case LicenseState::Type::personal: return "personal";
|
||||
case LicenseState::Type::educational: return "edu";
|
||||
case LicenseState::Type::indie: return "indie";
|
||||
|
|
@ -127,7 +127,7 @@ private:
|
|||
|
||||
static LicenseState::Type getLicenseTypeFromValue (const String& d)
|
||||
{
|
||||
if (d == getLicenseStateValue (LicenseState::Type::gpl)) return LicenseState::Type::gpl;
|
||||
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;
|
||||
|
|
@ -188,7 +188,7 @@ private:
|
|||
//==============================================================================
|
||||
void checkLicense()
|
||||
{
|
||||
if (state.authToken.isNotEmpty() && ! state.isGPL())
|
||||
if (state.authToken.isNotEmpty() && ! state.isAGPL())
|
||||
{
|
||||
auto completionCallback = [this] (LicenseQueryThread::ErrorMessageAndType error,
|
||||
LicenseState updatedState)
|
||||
|
|
@ -218,11 +218,7 @@ private:
|
|||
}
|
||||
|
||||
//==============================================================================
|
||||
#if JUCER_ENABLE_GPL_MODE
|
||||
LicenseState state = getGPLState();
|
||||
#else
|
||||
LicenseState state = licenseStateFromSettings (getGlobalProperties());
|
||||
#endif
|
||||
|
||||
ListenerList<LicenseStateListener> stateListeners;
|
||||
LicenseQueryThread licenseQueryThread;
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ namespace LicenseHelpers
|
|||
case LicenseState::Type::indie: return 3;
|
||||
case LicenseState::Type::educational: return 2;
|
||||
case LicenseState::Type::personal: return 1;
|
||||
case LicenseState::Type::gpl:
|
||||
case LicenseState::Type::agplv3:
|
||||
case LicenseState::Type::none:
|
||||
default: return -1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ struct LicenseState
|
|||
enum class Type
|
||||
{
|
||||
none,
|
||||
gpl,
|
||||
agplv3,
|
||||
personal,
|
||||
educational,
|
||||
indie,
|
||||
|
|
@ -68,21 +68,17 @@ struct LicenseState
|
|||
return ! operator== (other);
|
||||
}
|
||||
|
||||
bool isSignedIn() const noexcept { return isGPL() || (version > 0 && username.isNotEmpty()); }
|
||||
bool isOldLicense() const noexcept { return isSignedIn() && version < projucerMajorVersion; }
|
||||
bool isGPL() const noexcept { return type == Type::gpl; }
|
||||
|
||||
bool canUnlockFullFeatures() const noexcept
|
||||
{
|
||||
return isGPL() || (isSignedIn() && ! isOldLicense() && (type == Type::indie || type == Type::pro));
|
||||
}
|
||||
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::gpl: return "GPL";
|
||||
case Type::agplv3: return "AGPLv3";
|
||||
case Type::personal: return "Personal";
|
||||
case Type::educational: return "Educational";
|
||||
case Type::indie: return "Indie";
|
||||
|
|
|
|||
|
|
@ -63,10 +63,10 @@ public:
|
|||
addAndMakeVisible (logInButton);
|
||||
logInButton.onClick = [this] { submitDetails(); };
|
||||
|
||||
addAndMakeVisible (enableGPLButton);
|
||||
enableGPLButton.onClick = [this]
|
||||
addAndMakeVisible (enableAGPLButton);
|
||||
enableAGPLButton.onClick = [this]
|
||||
{
|
||||
ProjucerApplication::getApp().getLicenseController().setState (LicenseController::getGPLState());
|
||||
ProjucerApplication::getApp().getLicenseController().setState (LicenseController::getAGPLState());
|
||||
mainWindow.hideLoginFormOverlay();
|
||||
};
|
||||
|
||||
|
|
@ -127,7 +127,7 @@ public:
|
|||
auto slice = bounds.removeFromTop (textEditorHeight);
|
||||
createAccountLabel.setBounds (slice.removeFromLeft (createAccountLabel.getFont().getStringWidth (createAccountLabel.getText()) + 5));
|
||||
slice.removeFromLeft (15);
|
||||
enableGPLButton.setBounds (slice.reduced (0, 5));
|
||||
enableAGPLButton.setBounds (slice.reduced (0, 5));
|
||||
|
||||
dismissButton.setBounds (getLocalBounds().reduced (10).removeFromTop (20).removeFromRight (20));
|
||||
}
|
||||
|
|
@ -145,7 +145,7 @@ public:
|
|||
|
||||
void updateLookAndFeel()
|
||||
{
|
||||
enableGPLButton.setColour (TextButton::buttonColourId, findColour (secondaryButtonBackgroundColourId));
|
||||
enableAGPLButton.setColour (TextButton::buttonColourId, findColour (secondaryButtonBackgroundColourId));
|
||||
}
|
||||
|
||||
void lookAndFeelChanged() override
|
||||
|
|
@ -284,7 +284,7 @@ private:
|
|||
|
||||
TextEditor emailBox, passwordBox;
|
||||
ProgressButton logInButton { "Sign In" };
|
||||
TextButton enableGPLButton { "Enable GPL Mode" };
|
||||
TextButton enableAGPLButton { "Enable AGPLv3 Mode" };
|
||||
ShapeButton dismissButton { {},
|
||||
findColour (treeIconColourId),
|
||||
findColour (treeIconColourId).overlaidWith (findColour (defaultHighlightedTextColourId).withAlpha (0.2f)),
|
||||
|
|
|
|||
|
|
@ -374,10 +374,7 @@ PopupMenu ProjucerApplication::createFileMenu()
|
|||
menu.addCommandItem (commandManager.get(), CommandIDs::openInIDE);
|
||||
menu.addCommandItem (commandManager.get(), CommandIDs::saveAndOpenInIDE);
|
||||
menu.addSeparator();
|
||||
|
||||
#if ! JUCER_ENABLE_GPL_MODE
|
||||
menu.addCommandItem (commandManager.get(), CommandIDs::loginLogout);
|
||||
#endif
|
||||
|
||||
#if ! JUCE_MAC
|
||||
menu.addCommandItem (commandManager.get(), CommandIDs::showAboutWindow);
|
||||
|
|
@ -1038,8 +1035,8 @@ void ProjucerApplication::getCommandInfo (CommandID commandID, ApplicationComman
|
|||
{
|
||||
auto licenseState = licenseController->getCurrentState();
|
||||
|
||||
if (licenseState.isGPL())
|
||||
result.setInfo ("Disable GPL mode", "Disables GPL mode", CommandCategories::general, 0);
|
||||
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",
|
||||
|
|
|
|||
|
|
@ -32,6 +32,10 @@
|
|||
==============================================================================
|
||||
*/
|
||||
|
||||
#ifdef JUCER_ENABLE_GPL_MODE
|
||||
#warning The flag JUCER_ENABLE_GPL_MODE has been removed
|
||||
#endif
|
||||
|
||||
#include "jucer_Headers.h"
|
||||
|
||||
#include "jucer_Application.h"
|
||||
|
|
|
|||
28
extras/Projucer/Source/BinaryData/Icons/agplv3_logo.svg
Normal file
28
extras/Projucer/Source/BinaryData/Icons/agplv3_logo.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 26 KiB |
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 26 KiB |
|
|
@ -36,11 +36,8 @@
|
|||
#include "../ProjectSaving/jucer_ProjectExporter.h"
|
||||
#include "../Project/UI/jucer_HeaderComponent.h"
|
||||
#include "jucer_LicenseController.h"
|
||||
|
||||
#if ! JUCER_ENABLE_GPL_MODE
|
||||
#include "jucer_LicenseWebview.h"
|
||||
#include "jucer_LicenseThread.h"
|
||||
#endif
|
||||
#include "jucer_LicenseWebview.h"
|
||||
#include "jucer_LicenseThread.h"
|
||||
|
||||
//==============================================================================
|
||||
const char* LicenseState::licenseTypeToString (LicenseState::Type type)
|
||||
|
|
@ -49,7 +46,7 @@ const char* LicenseState::licenseTypeToString (LicenseState::Type type)
|
|||
{
|
||||
case Type::notLoggedIn: return "<notLoggedIn>";
|
||||
case Type::noLicenseChosenYet: return "<noLicenseChosenYet>";
|
||||
case Type::GPL: return "JUCE GPL";
|
||||
case Type::agplv3: return "AGPLv3";
|
||||
case Type::personal: return "JUCE Personal";
|
||||
case Type::edu: return "JUCE Education";
|
||||
case Type::indie: return "JUCE Indie";
|
||||
|
|
@ -62,7 +59,7 @@ static const char* getLicenseStateValue (LicenseState::Type type)
|
|||
{
|
||||
switch (type)
|
||||
{
|
||||
case LicenseState::Type::GPL: return "GPL";
|
||||
case LicenseState::Type::agplv3: return "agplv3";
|
||||
case LicenseState::Type::personal: return "personal";
|
||||
case LicenseState::Type::edu: return "edu";
|
||||
case LicenseState::Type::indie: return "indie";
|
||||
|
|
@ -75,7 +72,7 @@ static const char* getLicenseStateValue (LicenseState::Type type)
|
|||
|
||||
static LicenseState::Type getLicenseTypeFromValue (const String& d)
|
||||
{
|
||||
if (d == getLicenseStateValue (LicenseState::Type::GPL)) return LicenseState::Type::GPL;
|
||||
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;
|
||||
|
|
@ -83,7 +80,6 @@ static LicenseState::Type getLicenseTypeFromValue (const String& d)
|
|||
return LicenseState::Type::noLicenseChosenYet;
|
||||
}
|
||||
|
||||
#if ! JUCER_ENABLE_GPL_MODE
|
||||
struct LicenseController::ModalCompletionCallback final : ModalComponentManager::Callback
|
||||
{
|
||||
ModalCompletionCallback (LicenseController& controller) : owner (controller) {}
|
||||
|
|
@ -92,24 +88,17 @@ struct LicenseController::ModalCompletionCallback final : ModalComponentManager:
|
|||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ModalCompletionCallback)
|
||||
};
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
LicenseController::LicenseController()
|
||||
: state (licenseStateFromSettings (ProjucerApplication::getApp().settings->getGlobalProperties()))
|
||||
{
|
||||
#if JUCER_ENABLE_GPL_MODE
|
||||
state.type = LicenseState::Type::GPL;
|
||||
state.username = "GPL mode";
|
||||
#endif
|
||||
}
|
||||
|
||||
LicenseController::~LicenseController()
|
||||
{
|
||||
#if ! JUCER_ENABLE_GPL_MODE
|
||||
thread.reset();
|
||||
closeWebview (-1);
|
||||
#endif
|
||||
}
|
||||
|
||||
LicenseState LicenseController::getState() const noexcept
|
||||
|
|
@ -117,13 +106,13 @@ 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 GPL mode
|
||||
// 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::GPL;
|
||||
projucerState.username = "GPL mode";
|
||||
projucerState.type = LicenseState::Type::agplv3;
|
||||
projucerState.username = "AGPLv3 mode";
|
||||
}
|
||||
|
||||
return projucerState;
|
||||
|
|
@ -138,17 +127,14 @@ void LicenseController::startWebviewIfNeeded()
|
|||
listeners.call ([&] (StateChangedCallback& l) { l.licenseStateChanged (stateParam); });
|
||||
}
|
||||
|
||||
#if ! JUCER_ENABLE_GPL_MODE
|
||||
if (thread == nullptr)
|
||||
thread.reset (new LicenseThread (*this, false));
|
||||
#endif
|
||||
}
|
||||
|
||||
void LicenseController::logout()
|
||||
{
|
||||
JUCE_ASSERT_MESSAGE_MANAGER_IS_LOCKED
|
||||
|
||||
#if ! JUCER_ENABLE_GPL_MODE
|
||||
thread.reset();
|
||||
updateState ({});
|
||||
|
||||
|
|
@ -157,21 +143,17 @@ void LicenseController::logout()
|
|||
#endif
|
||||
|
||||
thread.reset (new LicenseThread (*this, false));
|
||||
#endif
|
||||
}
|
||||
|
||||
void LicenseController::chooseNewLicense()
|
||||
{
|
||||
JUCE_ASSERT_MESSAGE_MANAGER_IS_LOCKED
|
||||
|
||||
#if ! JUCER_ENABLE_GPL_MODE
|
||||
thread.reset();
|
||||
thread.reset (new LicenseThread (*this, true));
|
||||
#endif
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
#if ! JUCER_ENABLE_GPL_MODE
|
||||
void LicenseController::closeWebview (int result)
|
||||
{
|
||||
if (licenseWebview != nullptr)
|
||||
|
|
@ -235,7 +217,6 @@ void LicenseController::queryWebview (const String& startURL, const String& valu
|
|||
}
|
||||
});
|
||||
}
|
||||
#endif
|
||||
|
||||
void LicenseController::updateState (const LicenseState& newState)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@ public:
|
|||
{
|
||||
if (moduleInfo.getLicense() == "ISC")
|
||||
iconColour = Colours::lightblue;
|
||||
else if (moduleInfo.getLicense() == "GPL/Commercial")
|
||||
else if (moduleInfo.getLicense() == "AGPLv3/Commercial")
|
||||
iconColour = Colours::orange;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -96,8 +96,8 @@ void HeaderComponent::resized()
|
|||
configLabel.setBounds (exporterBounds);
|
||||
}
|
||||
|
||||
userAvatar.setBounds (bounds.removeFromRight (userAvatar.isDisplaingGPLLogo() ? roundToInt ((float) bounds.getHeight() * 1.9f)
|
||||
: bounds.getHeight()).reduced (2));
|
||||
userAvatar.setBounds (bounds.removeFromRight (userAvatar.isDisplaingAGPLLogo() ? roundToInt ((float) bounds.getHeight() * 1.9f)
|
||||
: bounds.getHeight()).reduced (2));
|
||||
}
|
||||
|
||||
void HeaderComponent::paint (Graphics& g)
|
||||
|
|
@ -253,9 +253,6 @@ void HeaderComponent::initialiseButtons()
|
|||
child.setProperty (ProjectMessages::Ids::isVisible, true, nullptr);
|
||||
};
|
||||
|
||||
if (project->hasIncompatibleLicenseTypeAndSplashScreenSetting())
|
||||
setWarningVisible (ProjectMessages::Ids::incompatibleLicense);
|
||||
|
||||
if (project->isFileModificationCheckPending())
|
||||
setWarningVisible (ProjectMessages::Ids::jucerFileModified);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ public:
|
|||
{
|
||||
auto bounds = getLocalBounds();
|
||||
|
||||
if (! isGPL)
|
||||
if (! isAGPL)
|
||||
{
|
||||
bounds = bounds.removeFromRight (bounds.getHeight());
|
||||
|
||||
|
|
@ -88,7 +88,7 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
bool isDisplaingGPLLogo() const noexcept { return isGPL; }
|
||||
bool isDisplaingAGPLLogo() const noexcept { return isAGPL; }
|
||||
|
||||
std::unique_ptr<AccessibilityHandler> createAccessibilityHandler() override
|
||||
{
|
||||
|
|
@ -101,9 +101,9 @@ public:
|
|||
|
||||
private:
|
||||
//==============================================================================
|
||||
static Image createGPLAvatarImage()
|
||||
static Image createAGPLAvatarImage()
|
||||
{
|
||||
if (auto logo = Drawable::createFromImageData (BinaryData::gpl_logo_svg, BinaryData::gpl_logo_svgSize))
|
||||
if (auto logo = Drawable::createFromImageData (BinaryData::agplv3_logo_svg, BinaryData::agplv3_logo_svgSize))
|
||||
{
|
||||
auto bounds = logo->getDrawableBounds();
|
||||
|
||||
|
|
@ -139,15 +139,14 @@ private:
|
|||
void licenseStateChanged() override
|
||||
{
|
||||
auto state = ProjucerApplication::getApp().getLicenseController().getCurrentState();
|
||||
|
||||
isGPL = ProjucerApplication::getApp().getLicenseController().getCurrentState().isGPL();
|
||||
isAGPL = state.isAGPL();
|
||||
|
||||
if (interactive)
|
||||
{
|
||||
auto formattedUserString = [state]() -> String
|
||||
{
|
||||
if (state.isSignedIn())
|
||||
return (state.isGPL() ? "" : (state.username + " - ")) + state.getLicenseTypeString();
|
||||
return (state.isAGPL() ? "" : (state.username + " - ")) + state.getLicenseTypeString();
|
||||
|
||||
return "Not logged in";
|
||||
}();
|
||||
|
|
@ -155,8 +154,8 @@ private:
|
|||
setTooltip (formattedUserString);
|
||||
}
|
||||
|
||||
currentAvatar = isGPL ? gplAvatarImage
|
||||
: state.isSignedIn() ? standardAvatarImage : signedOutAvatarImage;
|
||||
currentAvatar = isAGPL ? agplAvatarImage
|
||||
: state.isSignedIn() ? standardAvatarImage : signedOutAvatarImage;
|
||||
|
||||
repaint();
|
||||
sendChangeMessage();
|
||||
|
|
@ -175,6 +174,6 @@ private:
|
|||
}
|
||||
|
||||
//==============================================================================
|
||||
Image standardAvatarImage, signedOutAvatarImage, gplAvatarImage { createGPLAvatarImage() }, currentAvatar;
|
||||
bool isGPL = false, interactive = false;
|
||||
Image standardAvatarImage, signedOutAvatarImage, agplAvatarImage { createAGPLAvatarImage() }, currentAvatar;
|
||||
bool isAGPL = false, interactive = false;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -301,9 +301,6 @@ void Project::initialiseProjectValues()
|
|||
versionValue.referTo (projectRoot, Ids::version, getUndoManager(), "1.0.0");
|
||||
bundleIdentifierValue.referTo (projectRoot, Ids::bundleIdentifier, getUndoManager(), getDefaultBundleIdentifierString());
|
||||
|
||||
displaySplashScreenValue.referTo (projectRoot, Ids::displaySplashScreen, getUndoManager(), false);
|
||||
splashScreenColourValue.referTo (projectRoot, Ids::splashScreenColour, getUndoManager(), "Dark");
|
||||
|
||||
useAppConfigValue.referTo (projectRoot, Ids::useAppConfig, getUndoManager(), true);
|
||||
addUsingNamespaceToJuceHeader.referTo (projectRoot, Ids::addUsingNamespaceToJuceHeader, getUndoManager(), true);
|
||||
|
||||
|
|
@ -806,17 +803,6 @@ Result Project::saveResourcesOnly()
|
|||
return saver->saveResourcesOnly();
|
||||
}
|
||||
|
||||
bool Project::hasIncompatibleLicenseTypeAndSplashScreenSetting() const
|
||||
{
|
||||
auto companyName = companyNameValue.get().toString();
|
||||
auto isJUCEProject = (companyName == "Raw Material Software Limited"
|
||||
|| companyName == "JUCE"
|
||||
|| companyName == "ROLI Ltd.");
|
||||
|
||||
return ! ProjucerApplication::getApp().isRunningCommandLine && ! isJUCEProject && ! shouldDisplaySplashScreen()
|
||||
&& ! ProjucerApplication::getApp().getLicenseController().getCurrentState().canUnlockFullFeatures();
|
||||
}
|
||||
|
||||
bool Project::isFileModificationCheckPending() const
|
||||
{
|
||||
return fileModificationPoller.isCheckPending();
|
||||
|
|
@ -825,28 +811,20 @@ bool Project::isFileModificationCheckPending() const
|
|||
bool Project::isSaveAndExportDisabled() const
|
||||
{
|
||||
return ! ProjucerApplication::getApp().isRunningCommandLine
|
||||
&& (hasIncompatibleLicenseTypeAndSplashScreenSetting() || isFileModificationCheckPending());
|
||||
&& isFileModificationCheckPending();
|
||||
}
|
||||
|
||||
void Project::updateLicenseWarning()
|
||||
{
|
||||
if (hasIncompatibleLicenseTypeAndSplashScreenSetting())
|
||||
{
|
||||
ProjectMessages::MessageAction action;
|
||||
auto currentLicenseState = ProjucerApplication::getApp().getLicenseController().getCurrentState();
|
||||
if (ProjucerApplication::getApp().isRunningCommandLine)
|
||||
return;
|
||||
|
||||
if (currentLicenseState.isSignedIn() && (! currentLicenseState.canUnlockFullFeatures() || currentLicenseState.isOldLicense()))
|
||||
action = { "Upgrade", [] { URL ("https://juce.com/get-juce").launchInDefaultBrowser(); } };
|
||||
else
|
||||
action = { "Sign in", [this] { ProjucerApplication::getApp().mainWindowList.getMainWindowForFile (getFile())->showLoginFormOverlay(); } };
|
||||
auto currentLicenseState = ProjucerApplication::getApp().getLicenseController().getCurrentState();
|
||||
|
||||
addProjectMessage (ProjectMessages::Ids::incompatibleLicense,
|
||||
{ std::move (action), { "Enable splash screen", [this] { displaySplashScreenValue = true; } } });
|
||||
}
|
||||
if (currentLicenseState.isPersonalOrNone() || currentLicenseState.isOldLicense())
|
||||
addProjectMessage (ProjectMessages::Ids::personalLicense, {});
|
||||
else
|
||||
{
|
||||
removeProjectMessage (ProjectMessages::Ids::incompatibleLicense);
|
||||
}
|
||||
removeProjectMessage (ProjectMessages::Ids::personalLicense);
|
||||
}
|
||||
|
||||
void Project::updateJUCEPathWarning()
|
||||
|
|
@ -1139,10 +1117,6 @@ void Project::valueTreePropertyChanged (ValueTree& tree, const Identifier& prope
|
|||
if (shouldWriteLegacyPluginCharacteristicsSettings)
|
||||
writeLegacyPluginCharacteristicsSettings();
|
||||
}
|
||||
else if (property == Ids::displaySplashScreen)
|
||||
{
|
||||
updateLicenseWarning();
|
||||
}
|
||||
else if (property == Ids::cppLanguageStandard)
|
||||
{
|
||||
updateModuleWarnings();
|
||||
|
|
@ -1405,17 +1379,6 @@ void Project::createPropertyEditors (PropertyListBuilder& props)
|
|||
"no such statement will be included. This setting used to be enabled by default, but it "
|
||||
"is recommended to leave it disabled for new projects.");
|
||||
|
||||
props.add (new ChoicePropertyComponent (displaySplashScreenValue, "Display the JUCE Splash Screen (required for closed source applications without an Indie or Pro JUCE license)"),
|
||||
"This option controls the display of the standard JUCE splash screen. "
|
||||
"In accordance with the terms of the JUCE 7 End-Use License Agreement (www.juce.com/juce-7-licence), "
|
||||
"this option can only be disabled for closed source applications if you have a JUCE Indie or Pro "
|
||||
"license, or are using JUCE under the GPL v3 license.");
|
||||
|
||||
props.add (new ChoicePropertyComponentWithEnablement (splashScreenColourValue, displaySplashScreenValue, "Splash Screen Colour",
|
||||
{ "Dark", "Light" }, { "Dark", "Light" }),
|
||||
"Choose the colour of the JUCE splash screen.");
|
||||
|
||||
|
||||
{
|
||||
StringArray projectTypeNames;
|
||||
Array<var> projectTypeCodes;
|
||||
|
|
@ -2713,8 +2676,6 @@ String Project::getUniqueTargetFolderSuffixForExporter (const Identifier& export
|
|||
StringPairArray Project::getAppConfigDefs()
|
||||
{
|
||||
StringPairArray result;
|
||||
result.set ("JUCE_DISPLAY_SPLASH_SCREEN", shouldDisplaySplashScreen() ? "1" : "0");
|
||||
result.set ("JUCE_USE_DARK_SPLASH_SCREEN", getSplashScreenColourString() == "Dark" ? "1" : "0");
|
||||
result.set ("JUCE_PROJUCER_VERSION", "0x" + String::toHexString (ProjectInfo::versionNumber));
|
||||
|
||||
OwnedArray<LibraryModule> modules;
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ namespace ProjectMessages
|
|||
|
||||
DECLARE_ID (projectMessages);
|
||||
|
||||
DECLARE_ID (incompatibleLicense);
|
||||
DECLARE_ID (personalLicense);
|
||||
DECLARE_ID (cppStandard);
|
||||
DECLARE_ID (moduleNotFound);
|
||||
DECLARE_ID (jucePath);
|
||||
|
|
@ -72,15 +72,17 @@ namespace ProjectMessages
|
|||
|
||||
inline Identifier getTypeForMessage (const Identifier& message)
|
||||
{
|
||||
static Identifier warnings[] = { Ids::incompatibleLicense, Ids::cppStandard, Ids::moduleNotFound,
|
||||
Ids::jucePath, Ids::jucerFileModified, Ids::missingModuleDependencies,
|
||||
static Identifier warnings[] = { Ids::cppStandard, Ids::moduleNotFound, Ids::jucePath,
|
||||
Ids::jucerFileModified, Ids::missingModuleDependencies,
|
||||
Ids::oldProjucer, Ids::pluginCodeInvalid, Ids::manufacturerCodeInvalid,
|
||||
Ids::deprecatedExporter };
|
||||
|
||||
if (std::find (std::begin (warnings), std::end (warnings), message) != std::end (warnings))
|
||||
return Ids::warning;
|
||||
|
||||
if (message == Ids::newVersionAvailable)
|
||||
static Identifier notifications[] = { Ids::personalLicense, Ids::newVersionAvailable };
|
||||
|
||||
if (std::find (std::begin (notifications), std::end (notifications), message) != std::end (notifications))
|
||||
return Ids::notification;
|
||||
|
||||
jassertfalse;
|
||||
|
|
@ -89,7 +91,6 @@ namespace ProjectMessages
|
|||
|
||||
inline String getTitleForMessage (const Identifier& message)
|
||||
{
|
||||
if (message == Ids::incompatibleLicense) return "Incompatible License and Splash Screen Setting";
|
||||
if (message == Ids::cppStandard) return "C++ Standard";
|
||||
if (message == Ids::moduleNotFound) return "Module Not Found";
|
||||
if (message == Ids::jucePath) return "JUCE Path";
|
||||
|
|
@ -100,6 +101,7 @@ 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 {};
|
||||
|
|
@ -107,7 +109,6 @@ namespace ProjectMessages
|
|||
|
||||
inline String getDescriptionForMessage (const Identifier& message)
|
||||
{
|
||||
if (message == Ids::incompatibleLicense) return "Save and export is disabled.";
|
||||
if (message == Ids::cppStandard) return "Module(s) have a higher C++ standard requirement than the project.";
|
||||
if (message == Ids::moduleNotFound) return "Module(s) could not be found at the specified paths.";
|
||||
if (message == Ids::jucePath) return "The path to your JUCE folder is incorrect.";
|
||||
|
|
@ -118,6 +119,7 @@ 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 {};
|
||||
|
|
@ -290,9 +292,6 @@ public:
|
|||
bool shouldIncludeBinaryInJuceHeader() const { return includeBinaryDataInJuceHeaderValue.get(); }
|
||||
String getBinaryDataNamespaceString() const { return binaryDataNamespaceValue.get(); }
|
||||
|
||||
bool shouldDisplaySplashScreen() const { return displaySplashScreenValue.get(); }
|
||||
String getSplashScreenColourString() const { return splashScreenColourValue.get(); }
|
||||
|
||||
static StringArray getCppStandardStrings() { return { "C++17", "C++20", "Use Latest" }; }
|
||||
static Array<var> getCppStandardVars() { return { "17", "20", "latest" }; }
|
||||
|
||||
|
|
@ -610,7 +609,6 @@ public:
|
|||
std::vector<ProjectMessages::MessageAction> getMessageActions (const Identifier& message);
|
||||
|
||||
//==============================================================================
|
||||
bool hasIncompatibleLicenseTypeAndSplashScreenSetting() const;
|
||||
bool isFileModificationCheckPending() const;
|
||||
bool isSaveAndExportDisabled() const;
|
||||
|
||||
|
|
@ -653,9 +651,9 @@ private:
|
|||
ValueTree projectRoot { Ids::JUCERPROJECT };
|
||||
|
||||
ValueTreePropertyWithDefault projectNameValue, projectUIDValue, projectLineFeedValue, projectTypeValue, versionValue, bundleIdentifierValue, companyNameValue,
|
||||
companyCopyrightValue, companyWebsiteValue, companyEmailValue, displaySplashScreenValue, splashScreenColourValue, cppStandardValue,
|
||||
headerSearchPathsValue, preprocessorDefsValue, userNotesValue, maxBinaryFileSizeValue, includeBinaryDataInJuceHeaderValue, binaryDataNamespaceValue,
|
||||
compilerFlagSchemesValue, postExportShellCommandPosixValue, postExportShellCommandWinValue, useAppConfigValue, addUsingNamespaceToJuceHeader;
|
||||
companyCopyrightValue, companyWebsiteValue, companyEmailValue, cppStandardValue, headerSearchPathsValue, preprocessorDefsValue,
|
||||
userNotesValue, maxBinaryFileSizeValue, includeBinaryDataInJuceHeaderValue, binaryDataNamespaceValue, compilerFlagSchemesValue,
|
||||
postExportShellCommandPosixValue, postExportShellCommandWinValue, useAppConfigValue, addUsingNamespaceToJuceHeader;
|
||||
|
||||
ValueTreePropertyWithDefault pluginFormatsValue, pluginNameValue, pluginDescriptionValue, pluginManufacturerValue, pluginManufacturerCodeValue,
|
||||
pluginCodeValue, pluginChannelConfigsValue, pluginCharacteristicsValue, pluginAUExportPrefixValue, pluginAAXIdentifierValue,
|
||||
|
|
|
|||
|
|
@ -389,28 +389,6 @@ void ProjectSaver::writeAppConfig (MemoryOutputStream& out, const OwnedArray<Lib
|
|||
out << newLine << CodeHelpers::createIncludeStatement (Project::getPluginDefinesFilename()) << newLine;
|
||||
|
||||
out << newLine
|
||||
<< "/*" << newLine
|
||||
<< " ==============================================================================" << newLine
|
||||
<< newLine
|
||||
<< " In accordance with the terms of the JUCE 7 End-Use License Agreement, the" << newLine
|
||||
<< " JUCE Code in SECTION A cannot be removed, changed or otherwise rendered" << newLine
|
||||
<< " ineffective unless you have a JUCE Indie or Pro license, or are using JUCE" << newLine
|
||||
<< " under the GPL v3 license." << newLine
|
||||
<< newLine
|
||||
<< " End User License Agreement: www.juce.com/juce-7-licence" << newLine
|
||||
<< newLine
|
||||
<< " ==============================================================================" << newLine
|
||||
<< "*/" << newLine
|
||||
<< newLine
|
||||
<< "// BEGIN SECTION A" << newLine
|
||||
<< newLine
|
||||
<< "#ifndef JUCE_DISPLAY_SPLASH_SCREEN" << newLine
|
||||
<< " #define JUCE_DISPLAY_SPLASH_SCREEN " << (project.shouldDisplaySplashScreen() ? "1" : "0") << newLine
|
||||
<< "#endif" << newLine << newLine
|
||||
<< "// END SECTION A" << newLine
|
||||
<< newLine
|
||||
<< "#define JUCE_USE_DARK_SPLASH_SCREEN " << (project.getSplashScreenColourString() == "Dark" ? "1" : "0") << newLine
|
||||
<< newLine
|
||||
<< "#define JUCE_PROJUCER_VERSION 0x" << String::toHexString (ProjectInfo::versionNumber) << newLine;
|
||||
|
||||
out << newLine
|
||||
|
|
|
|||
|
|
@ -60,8 +60,6 @@ namespace Ids
|
|||
DECLARE_ID (addUsingNamespaceToJuceHeader);
|
||||
DECLARE_ID (usePrecompiledHeaderFile);
|
||||
DECLARE_ID (precompiledHeaderFile);
|
||||
DECLARE_ID (displaySplashScreen);
|
||||
DECLARE_ID (splashScreenColour);
|
||||
DECLARE_ID (position);
|
||||
DECLARE_ID (source);
|
||||
DECLARE_ID (width);
|
||||
|
|
|
|||
|
|
@ -381,8 +381,6 @@ Result PIPGenerator::setProjectSettings (ValueTree& jucerTree)
|
|||
: "\"File->Global Paths...\"")
|
||||
+ " menu item.");
|
||||
}
|
||||
|
||||
jucerTree.setProperty (Ids::displaySplashScreen, true, nullptr);
|
||||
}
|
||||
|
||||
setPropertyIfNotEmpty (Ids::defines, defines);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue