158 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			158 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/*
 | 
						|
  ==============================================================================
 | 
						|
 | 
						|
   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.
 | 
						|
 | 
						|
  ==============================================================================
 | 
						|
*/
 | 
						|
 | 
						|
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
 |