/* ============================================================================== This file is part of the JUCE library. Copyright (c) 2017 - ROLI Ltd. JUCE is an open source library subject to commercial or open-source licensing. By using JUCE, you agree to the terms of both the JUCE 5 End-User License Agreement and JUCE 5 Privacy Policy (both updated and effective as of the 27th April 2017). End User License Agreement: www.juce.com/juce-5-licence Privacy Policy: www.juce.com/juce-5-privacy-policy Or: You may also use this code under the terms of the GPL v3 (see www.gnu.org/licenses). JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE DISCLAIMED. ============================================================================== */ #pragma once //============================================================================== class ApplicationUsageDataWindowComponent : public Component, private Button::Listener { public: ApplicationUsageDataWindowComponent (bool showCheckbox) { addAndMakeVisible (headerLabel); headerLabel.setText ("Application Usage Analytics", dontSendNotification); headerLabel.setFont (Font (20.0f, Font::FontStyleFlags::bold)); headerLabel.setJustificationType (Justification::centred); auto textToShow = String ("We use analytics services to understand how developers use our software in order for JUCE to improve its software and services. "); if (! showCheckbox) textToShow += String (" Analytics can be disabled with an Indie or Pro license. "); textToShow += String ("For more information, please read the JUCE EULA and Privacy policy:"); addAndMakeVisible (bodyLabel); bodyLabel.setText (textToShow, dontSendNotification); bodyLabel.setFont (Font (14.0f)); bodyLabel.setJustificationType (Justification::centredLeft); addAndMakeVisible (juceEULALink); juceEULALink.setButtonText ("JUCE EULA"); juceEULALink.setFont (Font (14.0f), false); juceEULALink.setURL (URL ("https://juce.com/juce-5-license")); addAndMakeVisible (privacyPolicyLink); privacyPolicyLink.setButtonText ("Privacy Policy"); privacyPolicyLink.setFont (Font (14.0f), false); privacyPolicyLink.setURL (URL ("https://juce.com/privacy-policy")); addAndMakeVisible (okButton); okButton.setButtonText ("OK"); okButton.addListener (this); if (showCheckbox) { addAndMakeVisible (shareApplicationUsageDataToggle = new ToggleButton()); LicenseController* controller = ProjucerApplication::getApp().licenseController; if (controller != nullptr && controller->getState().applicationUsageDataState == LicenseState::ApplicationUsageData::disabled) shareApplicationUsageDataToggle->setToggleState (false, dontSendNotification); else shareApplicationUsageDataToggle->setToggleState (true, dontSendNotification); addAndMakeVisible(shareApplicationUsageDataLabel = new Label ({}, "Help JUCE to improve its software and services by sharing my application usage data")); shareApplicationUsageDataLabel->setFont (Font (14.0f)); shareApplicationUsageDataLabel->setMinimumHorizontalScale (1.0f); } else { addAndMakeVisible (upgradeLicenseButton = new TextButton ("Upgrade License")); upgradeLicenseButton->addListener (this); upgradeLicenseButton->setColour (TextButton::buttonColourId, findColour (secondaryButtonBackgroundColourId)); } } ~ApplicationUsageDataWindowComponent() { if (LicenseController* controller = ProjucerApplication::getApp().licenseController) { auto newApplicationUsageDataState = LicenseState::ApplicationUsageData::enabled; if (shareApplicationUsageDataToggle != nullptr && ! shareApplicationUsageDataToggle->getToggleState()) newApplicationUsageDataState = LicenseState::ApplicationUsageData::disabled; controller->setApplicationUsageDataState (newApplicationUsageDataState); } } void resized() override { auto bounds = getLocalBounds().reduced (20); headerLabel.setBounds (bounds.removeFromTop (40)); bodyLabel.setBounds (bounds.removeFromTop (75)); bounds.removeFromTop (10); auto linkBounds = bounds.removeFromTop (20); juceEULALink.setBounds (linkBounds.removeFromLeft (linkBounds.getWidth() / 2).reduced (2)); privacyPolicyLink.setBounds (linkBounds.reduced (2)); if (shareApplicationUsageDataToggle != nullptr) { bounds.removeFromTop (10); auto toggleBounds = bounds.removeFromTop (40); shareApplicationUsageDataToggle->setBounds (toggleBounds.removeFromLeft (40).reduced (5)); shareApplicationUsageDataLabel->setBounds (toggleBounds); } bounds.removeFromTop (10); auto buttonW = 125; auto buttonH = 40; if (upgradeLicenseButton != nullptr) { auto left = bounds.removeFromLeft (bounds.getWidth() / 2); upgradeLicenseButton->setSize (buttonW, buttonH); upgradeLicenseButton->setCentrePosition (left.getCentreX(), left.getCentreY()); } okButton.setSize (buttonW, buttonH); okButton.setCentrePosition (bounds.getCentreX(), bounds.getCentreY()); } void paint (Graphics& g) override { g.fillAll (findColour (backgroundColourId)); } private: Label headerLabel, bodyLabel; HyperlinkButton juceEULALink, privacyPolicyLink; ScopedPointer