|
- /*
- ==============================================================================
-
- This file is part of the JUCE 6 technical preview.
- Copyright (c) 2017 - ROLI Ltd.
-
- You may use this code under the terms of the GPL v3
- (see www.gnu.org/licenses).
-
- For this technical preview, this file is not subject to commercial licensing.
-
- JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
- EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
- DISCLAIMED.
-
- ==============================================================================
- */
-
- namespace juce
- {
-
- PreferencesPanel::PreferencesPanel()
- : buttonSize (70)
- {
- }
-
- PreferencesPanel::~PreferencesPanel()
- {
- }
-
- int PreferencesPanel::getButtonSize() const noexcept
- {
- return buttonSize;
- }
-
- void PreferencesPanel::setButtonSize (int newSize)
- {
- buttonSize = newSize;
- resized();
- }
-
- //==============================================================================
- void PreferencesPanel::addSettingsPage (const String& title,
- const Drawable* icon,
- const Drawable* overIcon,
- const Drawable* downIcon)
- {
- auto* button = new DrawableButton (title, DrawableButton::ImageAboveTextLabel);
- buttons.add (button);
-
- button->setImages (icon, overIcon, downIcon);
- button->setRadioGroupId (1);
- button->onClick = [this] { clickedPage(); };
- button->setClickingTogglesState (true);
- button->setWantsKeyboardFocus (false);
- addAndMakeVisible (button);
-
- resized();
-
- if (currentPage == nullptr)
- setCurrentPage (title);
- }
-
- void PreferencesPanel::addSettingsPage (const String& title, const void* imageData, int imageDataSize)
- {
- DrawableImage icon, iconOver, iconDown;
- icon.setImage (ImageCache::getFromMemory (imageData, imageDataSize));
-
- iconOver.setImage (ImageCache::getFromMemory (imageData, imageDataSize));
- iconOver.setOverlayColour (Colours::black.withAlpha (0.12f));
-
- iconDown.setImage (ImageCache::getFromMemory (imageData, imageDataSize));
- iconDown.setOverlayColour (Colours::black.withAlpha (0.25f));
-
- addSettingsPage (title, &icon, &iconOver, &iconDown);
- }
-
- //==============================================================================
- void PreferencesPanel::showInDialogBox (const String& dialogTitle, int dialogWidth, int dialogHeight, Colour backgroundColour)
- {
- setSize (dialogWidth, dialogHeight);
-
- DialogWindow::LaunchOptions o;
- o.content.setNonOwned (this);
- o.dialogTitle = dialogTitle;
- o.dialogBackgroundColour = backgroundColour;
- o.escapeKeyTriggersCloseButton = false;
- o.useNativeTitleBar = false;
- o.resizable = false;
-
- o.launchAsync();
- }
-
- //==============================================================================
- void PreferencesPanel::resized()
- {
- for (int i = 0; i < buttons.size(); ++i)
- buttons.getUnchecked(i)->setBounds (i * buttonSize, 0, buttonSize, buttonSize);
-
- if (currentPage != nullptr)
- currentPage->setBounds (getLocalBounds().withTop (buttonSize + 5));
- }
-
- void PreferencesPanel::paint (Graphics& g)
- {
- g.setColour (Colours::grey);
- g.fillRect (0, buttonSize + 2, getWidth(), 1);
- }
-
- void PreferencesPanel::setCurrentPage (const String& pageName)
- {
- if (currentPageName != pageName)
- {
- currentPageName = pageName;
-
- currentPage.reset();
- currentPage.reset (createComponentForPage (pageName));
-
- if (currentPage != nullptr)
- {
- addAndMakeVisible (currentPage.get());
- currentPage->toBack();
- resized();
- }
-
- for (auto* b : buttons)
- {
- if (b->getName() == pageName)
- {
- b->setToggleState (true, dontSendNotification);
- break;
- }
- }
- }
- }
-
- void PreferencesPanel::clickedPage()
- {
- for (auto* b : buttons)
- {
- if (b->getToggleState())
- {
- setCurrentPage (b->getName());
- break;
- }
- }
- }
-
- } // namespace juce
|