91 lines
2.4 KiB
C++
91 lines
2.4 KiB
C++
// SPDX-License-Identifier: GPLv3-or-later WITH Appstore-exception
|
|
// Copyright (C) 2020 Jesse Chappell
|
|
|
|
|
|
#pragma once
|
|
|
|
#include "JuceHeader.h"
|
|
|
|
#include "SonoTextButton.h"
|
|
#include "GenericItemChooser.h"
|
|
#include "CustomLookAndFeel.h"
|
|
|
|
class SonoChoiceLookAndFeel : public CustomLookAndFeel
|
|
{
|
|
public:
|
|
int getCallOutBoxBorderSize (const CallOutBox&) override {
|
|
return 40;
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
class SonoChoiceButton : public SonoTextButton, public GenericItemChooser::Listener, public Button::Listener
|
|
{
|
|
public:
|
|
SonoChoiceButton();
|
|
virtual ~SonoChoiceButton();
|
|
|
|
class Listener {
|
|
public:
|
|
virtual ~Listener() {}
|
|
virtual void choiceButtonEmptyClick(SonoChoiceButton *comp) {}
|
|
virtual void choiceButtonSelected(SonoChoiceButton *comp, int index, int ident) {}
|
|
};
|
|
|
|
void paint(Graphics & g) override;
|
|
void resized() override;
|
|
|
|
void genericItemChooserSelected(GenericItemChooser *comp, int index) override;
|
|
|
|
void clearItems();
|
|
void addItem(const String & name, int ident, bool separator=false, bool disabled=false);
|
|
void addItem(const String & name, int ident, const Image & newItemImage, bool separator=false, bool disabled=false);
|
|
|
|
//void setItems(const StringArray & items);
|
|
//const StringArray & getItems() const { return items; }
|
|
|
|
void setSelectedItemIndex(int index, NotificationType notification = dontSendNotification);
|
|
int getSelectedItemIndex() const { return selIndex; }
|
|
|
|
void setSelectedId(int ident, NotificationType notification = dontSendNotification);
|
|
|
|
void setShowArrow(bool flag) { showArrow = flag; }
|
|
bool getShowArrow() const { return showArrow; }
|
|
|
|
String getItemText(int index) const;
|
|
|
|
String getCurrentText() const;
|
|
|
|
void buttonClicked (Button* buttonThatWasClicked) override;
|
|
|
|
void addChoiceListener(Listener * listener) { listeners.add(listener); }
|
|
void removeChoiceListener(Listener * listener) { listeners.remove(listener); }
|
|
|
|
void showPopup();
|
|
bool isPopupActive() const;
|
|
|
|
std::unique_ptr<AccessibilityHandler> createAccessibilityHandler() override;
|
|
|
|
protected:
|
|
ListenerList<Listener> listeners;
|
|
|
|
std::unique_ptr<Label> textLabel;
|
|
|
|
Array<GenericItemChooserItem> items;
|
|
Array<int> idList;
|
|
|
|
int selIndex;
|
|
bool showArrow = true;
|
|
|
|
WeakReference<Component> activeCalloutBox;
|
|
|
|
SonoChoiceLookAndFeel lnf;
|
|
|
|
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SonoChoiceButton)
|
|
|
|
};
|
|
|
|
|