/* ============================================================================== 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. ============================================================================== */ class LiveBuildTab : public Component, private ChangeListener, private Button::Listener { public: LiveBuildTab (CompileEngineChildProcess* child, String lastErrorMessage) { addAndMakeVisible (settingsButton = new IconButton ("Settings", &getIcons().settings)); settingsButton->addListener (this); if (child != nullptr) { addAndMakeVisible (concertinaPanel); buildConcertina (child); isEnabled = true; } else { isEnabled = false; errorMessage = getErrorMessage(); errorMessageLabel = new Label ("Error", errorMessage); errorMessageLabel->setJustificationType (Justification::centred); errorMessageLabel->setFont (Font (12.0f)); errorMessageLabel->setMinimumHorizontalScale (1.0f); addAndMakeVisible (errorMessageLabel); if (showDownloadButton) { addAndMakeVisible (downloadButton = new TextButton ("Download")); downloadButton->addListener (this); } if (showEnableButton) { auto buttonText = "Enable Now"; if (! lastErrorMessage.isEmpty()) { errorMessageLabel->setText (lastErrorMessage, dontSendNotification); buttonText = "Re-enable"; } addAndMakeVisible (enableButton = new TextButton (buttonText)); enableButton->addListener (this); } } } void paint (Graphics& g) override { g.fillAll (findColour (secondaryBackgroundColourId)); } void resized() override { auto bounds = getLocalBounds(); auto bottomSlice = bounds.removeFromBottom (25); bottomSlice.removeFromRight (5); settingsButton->setBounds (bottomSlice.removeFromRight (25).reduced (2)); if (errorMessageLabel != nullptr) { bounds.removeFromTop ((bounds.getHeight() / 2) - 40); errorMessageLabel->setBounds (bounds.removeFromTop (80)); if (downloadButton != nullptr) downloadButton->setBounds (bounds.removeFromTop (20).reduced (20, 0)); if (enableButton != nullptr) enableButton->setBounds (bounds.removeFromTop (20).reduced (20, 0)); } else { concertinaPanel.setBounds (bounds); for (auto h : headers) if (h->getName() == "Activities") h->yPosition = getHeight() - CurrentActivitiesComp::getMaxPanelHeight() - 55; } } bool isEnabled; String errorMessage; Component::SafePointer errorListComp; private: OwnedArray headers; ConcertinaPanel concertinaPanel; ScopedPointer settingsButton; ScopedPointer downloadButton, enableButton; ScopedPointer