diff --git a/extras/Projucer/Source/Application/jucer_Application.cpp b/extras/Projucer/Source/Application/jucer_Application.cpp index f255c1e3a2..d7aecfdf35 100644 --- a/extras/Projucer/Source/Application/jucer_Application.cpp +++ b/extras/Projucer/Source/Application/jucer_Application.cpp @@ -411,9 +411,8 @@ void ProjucerApplication::createViewMenu (PopupMenu& menu) void ProjucerApplication::createBuildMenu (PopupMenu& menu) { menu.addCommandItem (commandManager, CommandIDs::toggleBuildEnabled); - menu.addCommandItem (commandManager, CommandIDs::toggleContinuousBuild); menu.addCommandItem (commandManager, CommandIDs::buildNow); - + menu.addCommandItem (commandManager, CommandIDs::toggleContinuousBuild); menu.addSeparator(); menu.addCommandItem (commandManager, CommandIDs::launchApp); menu.addCommandItem (commandManager, CommandIDs::killApp); diff --git a/extras/Projucer/Source/LiveBuildEngine/projucer_ErrorListComponent.h b/extras/Projucer/Source/LiveBuildEngine/projucer_ErrorListComponent.h index 3e3185386a..aed354daf7 100644 --- a/extras/Projucer/Source/LiveBuildEngine/projucer_ErrorListComponent.h +++ b/extras/Projucer/Source/LiveBuildEngine/projucer_ErrorListComponent.h @@ -253,10 +253,22 @@ private: Colour getContentColour (bool isIcon) const override { - return message.isError() ? Colours::red - : message.isWarning() ? Colours::yellow - : getOwnerView()->findColour (isIcon ? treeIconColourId - : defaultTextColourId); + if (isIcon) + { + if (isSelected()) + return getOwnerView()->findColour (defaultHighlightedTextColourId); + + if (message.isError()) + return Colours::red; + + if (message.isWarning()) + return Colours::yellow; + + return getOwnerView()->findColour (treeIconColourId); + } + + return getOwnerView()->findColour (isSelected() ? defaultHighlightedTextColourId + : defaultTextColourId); } void showPopupMenu() override diff --git a/extras/Projucer/Source/Project/jucer_HeaderComponent.h b/extras/Projucer/Source/Project/jucer_HeaderComponent.h index 9160359ee1..cda7c5dbd3 100644 --- a/extras/Projucer/Source/Project/jucer_HeaderComponent.h +++ b/extras/Projucer/Source/Project/jucer_HeaderComponent.h @@ -307,11 +307,8 @@ public: project->addChangeListener (this); updateName(); - continuousRebuildButton->setEnabled (true); - updateContinuousRebuildButtonIcon(); - if (auto* pcc = findParentComponentOfClass()) - buildNowButton->setEnabled (! pcc->isContinuousRebuildEnabled() || ! pcc->isBuildEnabled()); + updateBuildButtons (pcc->isBuildEnabled(), pcc->isContinuousRebuildEnabled()); } void updateExporters() @@ -373,6 +370,16 @@ public: userSettingsWindow = &CallOutBox::launchAsynchronously (content, userSettingsButton->getScreenBounds(), nullptr); } + void updateBuildButtons (bool isBuildEnabled, bool isContinuousRebuildEnabled) + { + buildNowButton->setEnabled (isBuildEnabled && ! isContinuousRebuildEnabled); + continuousRebuildButton->setEnabled (isBuildEnabled); + + continuousRebuildButton->icon = Icon (isContinuousRebuildEnabled ? &getIcons().continuousBuildStop : &getIcons().continuousBuildStart, + Colours::transparentBlack); + repaint(); + } + void lookAndFeelChanged() override { if (userSettingsWindow != nullptr) @@ -399,40 +406,12 @@ private: { auto* pcc = findParentComponentOfClass(); - if (b == projectSettingsButton) - { - pcc->showProjectSettings(); - } - else if (b == continuousRebuildButton) - { - if (! pcc->isBuildEnabled()) - pcc->setBuildEnabled (true); - - auto newState = ! pcc->isContinuousRebuildEnabled(); - pcc->setContinuousRebuildEnabled (newState); - - updateContinuousRebuildButtonIcon(); - buildNowButton->setEnabled (! pcc->isContinuousRebuildEnabled() || ! pcc->isBuildEnabled()); - } - else if (b == buildNowButton) - { - if (! pcc->isBuildEnabled()) - pcc->setBuildEnabled (true); - - pcc->rebuildNow(); - } - else if (b == exporterSettingsButton) - { - pcc->showExporterSettings (getSelectedExporterName()); - } - else if (b == saveAndOpenInIDEButton) - { - pcc->openInSelectedIDE (true); - } - else if (b == userSettingsButton) - { - showUserSettings(); - } + if (b == projectSettingsButton) pcc->showProjectSettings(); + else if (b == continuousRebuildButton) pcc->setContinuousRebuildEnabled (! pcc->isContinuousRebuildEnabled()); + else if (b == buildNowButton) pcc->rebuildNow(); + else if (b == exporterSettingsButton) pcc->showExporterSettings (getSelectedExporterName()); + else if (b == saveAndOpenInIDEButton) pcc->openInSelectedIDE (true); + else if (b == userSettingsButton) showUserSettings(); } void comboBoxChanged (ComboBox* c) override @@ -463,11 +442,9 @@ private: addAndMakeVisible (continuousRebuildButton = new IconButton ("Continuous Rebuild", &icons.continuousBuildStart)); continuousRebuildButton->addListener (this); - continuousRebuildButton->setEnabled (false); addAndMakeVisible (buildNowButton = new IconButton ("Build Now", &icons.buildNow)); buildNowButton->addListener (this); - buildNowButton->setEnabled (false); addAndMakeVisible (exporterSettingsButton = new IconButton ("Exporter Settings", &icons.edit)); exporterSettingsButton->addListener (this); @@ -521,15 +498,5 @@ private: } } - void updateContinuousRebuildButtonIcon() - { - if (auto* pcc = findParentComponentOfClass()) - { - continuousRebuildButton->setEnabled (pcc->isBuildEnabled()); - continuousRebuildButton->icon = Icon (pcc->isContinuousRebuildEnabled() ? &getIcons().continuousBuildStop - : &getIcons().continuousBuildStart, Colours::transparentBlack); - } - } - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (HeaderComponent) }; diff --git a/extras/Projucer/Source/Project/jucer_ProjectContentComponent.cpp b/extras/Projucer/Source/Project/jucer_ProjectContentComponent.cpp index a979655f5f..5d41939aab 100644 --- a/extras/Projucer/Source/Project/jucer_ProjectContentComponent.cpp +++ b/extras/Projucer/Source/Project/jucer_ProjectContentComponent.cpp @@ -1244,6 +1244,9 @@ void ProjectContentComponent::setBuildEnabled (bool b) LiveBuildProjectSettings::setBuildDisabled (*project, ! b); killChildProcess(); refreshTabsIfBuildStatusChanged(); + + if (auto* h = dynamic_cast (header.get())) + h->updateBuildButtons (b, isContinuousRebuildEnabled()); } } @@ -1382,10 +1385,17 @@ bool ProjectContentComponent::isContinuousRebuildEnabled() void ProjectContentComponent::setContinuousRebuildEnabled (bool b) { - getAppSettings().getGlobalProperties().setValue ("continuousRebuild", b); - if (childProcess != nullptr) + { childProcess->setContinuousRebuild (b); + + if (auto* h = dynamic_cast (header.get())) + h->updateBuildButtons (isBuildEnabled(), b); + + getAppSettings().getGlobalProperties().setValue ("continuousRebuild", b); + + ProjucerApplication::getCommandManager().commandStatusChanged(); + } } ReferenceCountedObjectPtr ProjectContentComponent::getChildProcess() diff --git a/extras/Projucer/Source/Utility/jucer_ProjucerLookAndFeel.cpp b/extras/Projucer/Source/Utility/jucer_ProjucerLookAndFeel.cpp index c6bc2a1485..41b9c1fa4e 100644 --- a/extras/Projucer/Source/Utility/jucer_ProjucerLookAndFeel.cpp +++ b/extras/Projucer/Source/Utility/jucer_ProjucerLookAndFeel.cpp @@ -159,10 +159,14 @@ void ProjucerLookAndFeel::drawToggleButton (Graphics& g, ToggleButton& button, b g.setOpacity (0.5f); bool isTextEmpty = button.getButtonText().isEmpty(); + bool isPropertyComponentChild = (dynamic_cast (button.getParentComponent()) != nullptr); + auto bounds = button.getLocalBounds(); + + auto sideLength = isPropertyComponentChild ? 25 : bounds.getHeight(); + auto rectBounds = isTextEmpty ? bounds - : bounds.removeFromLeft (jmin (bounds.getHeight(), bounds.getWidth() / 3)); - auto sideLength = jmin (rectBounds.getWidth(), rectBounds.getHeight()); + : bounds.removeFromLeft (jmin (sideLength, bounds.getWidth() / 3)); rectBounds = rectBounds.withSizeKeepingCentre (sideLength, sideLength).reduced (4); @@ -180,8 +184,6 @@ void ProjucerLookAndFeel::drawToggleButton (Graphics& g, ToggleButton& button, b { bounds.removeFromLeft (5); - auto isPropertyComponentChild = (button.findParentComponentOfClass() != nullptr); - const auto fontSize = jmin (15.0f, button.getHeight() * 0.75f); g.setFont (fontSize); diff --git a/extras/Projucer/Source/Wizards/jucer_ProjectWizard_GUIApp.h b/extras/Projucer/Source/Wizards/jucer_ProjectWizard_GUIApp.h index e0ede52ab5..c39a3cdc6c 100644 --- a/extras/Projucer/Source/Wizards/jucer_ProjectWizard_GUIApp.h +++ b/extras/Projucer/Source/Wizards/jucer_ProjectWizard_GUIApp.h @@ -34,8 +34,8 @@ struct GUIAppWizard : public NewProjectWizard StringArray getFileCreationOptions() override { - return { "Create a Main.cpp file", - "Create a Main.cpp file and a basic window", + return { "Create a Main.cpp file and a basic window", + "Create a Main.cpp file", "Don't create any files" }; }