/* ============================================================================== This file is part of the JUCE library. Copyright (c) 2015 - ROLI Ltd. Permission is granted to use this software under the terms of either: a) the GPL v2 (or any later version) b) the Affero GPL v3 Details of these licenses can be found at: www.gnu.org/licenses JUCE is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ------------------------------------------------------------------------------ To release a closed-source product which uses JUCE, commercial licenses are available: visit www.juce.com for more information. ============================================================================== */ class LiveBuildTab : public Component, private ChangeListener, private Button::Listener { public: LiveBuildTab (CompileEngineChildProcess* child, String lastErrorMessage) { addAndMakeVisible (settingsButton = new IconButton ("Settings", &getIcons().settings)); settingsButton->addListener (this); if (child != nullptr) { addAndMakeVisible (concertinaPanel); buildConcertina (child); isEnabled = true; } else { isEnabled = false; errorMessage = getErrorMessage(); errorMessageLabel = new Label ("Error", errorMessage); errorMessageLabel->setJustificationType (Justification::centred); errorMessageLabel->setFont (Font (12.0f)); errorMessageLabel->setMinimumHorizontalScale (1.0f); addAndMakeVisible (errorMessageLabel); if (showDownloadButton) { addAndMakeVisible (downloadButton = new TextButton ("Download")); downloadButton->addListener (this); } if (showEnableButton) { auto buttonText = "Enable Now"; if (! lastErrorMessage.isEmpty()) { errorMessageLabel->setText (lastErrorMessage, dontSendNotification); buttonText = "Re-enable"; } addAndMakeVisible (enableButton = new TextButton (buttonText)); enableButton->addListener (this); } } } void paint (Graphics& g) override { g.fillAll (findColour (secondaryBackgroundColourId)); } void resized() override { auto bounds = getLocalBounds(); auto bottomSlice = bounds.removeFromBottom (25); bottomSlice.removeFromRight (5); settingsButton->setBounds (bottomSlice.removeFromRight (25).reduced (2)); if (errorMessageLabel != nullptr) { bounds.removeFromTop ((bounds.getHeight() / 2) - 40); errorMessageLabel->setBounds (bounds.removeFromTop (80)); if (downloadButton != nullptr) downloadButton->setBounds (bounds.removeFromTop (20).reduced (20, 0)); if (enableButton != nullptr) enableButton->setBounds (bounds.removeFromTop (20).reduced (20, 0)); } else { concertinaPanel.setBounds (bounds); for (auto h : headers) if (h->getName() == "Activities") h->yPosition = getHeight() - CurrentActivitiesComp::getMaxPanelHeight() - 55; } } bool isEnabled; String errorMessage; Component::SafePointer errorListComp; private: OwnedArray headers; ConcertinaPanel concertinaPanel; ScopedPointer settingsButton; ScopedPointer downloadButton, enableButton; ScopedPointer