|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- /*
- ==============================================================================
-
- 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.
-
- ==============================================================================
- */
-
- 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)
- {
- DrawableButton* const button = new DrawableButton (title, DrawableButton::ImageAboveTextLabel);
- buttons.add (button);
-
- button->setImages (icon, overIcon, downIcon);
- button->setRadioGroupId (1);
- button->addListener (this);
- button->setClickingTogglesState (true);
- button->setWantsKeyboardFocus (false);
- addAndMakeVisible (button);
-
- resized();
-
- if (currentPage == nullptr)
- setCurrentPage (title);
- }
-
- void PreferencesPanel::addSettingsPage (const String& title, const void* imageData, const 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 = nullptr;
- currentPage = createComponentForPage (pageName);
-
- if (currentPage != nullptr)
- {
- addAndMakeVisible (currentPage);
- currentPage->toBack();
- resized();
- }
-
- for (int i = 0; i < buttons.size(); ++i)
- {
- if (buttons.getUnchecked(i)->getName() == pageName)
- {
- buttons.getUnchecked(i)->setToggleState (true, dontSendNotification);
- break;
- }
- }
- }
- }
-
- void PreferencesPanel::buttonClicked (Button*)
- {
- for (int i = 0; i < buttons.size(); ++i)
- {
- if (buttons.getUnchecked(i)->getToggleState())
- {
- setCurrentPage (buttons.getUnchecked(i)->getName());
- break;
- }
- }
- }
|