ASPiK SDK
coptionmenu.h
1 // This file is part of VSTGUI. It is subject to the license terms
2 // in the LICENSE file found in the top-level directory of this
3 // distribution and at http://github.com/steinbergmedia/vstgui/LICENSE
4 
5 #ifndef __coptionmenu__
6 #define __coptionmenu__
7 
8 #include "cparamdisplay.h"
9 #include "../cstring.h"
10 #include <vector>
11 #include <functional>
12 
13 namespace VSTGUI {
14 
15 //-----------------------------------------------------------------------------
16 // CMenuItem Declaration
18 //-----------------------------------------------------------------------------
19 class CMenuItem : public CBaseObject
20 {
21 public:
22  enum Flags {
23  kNoFlags = 0,
24  kDisabled = 1 << 0,
25  kTitle = 1 << 1,
26  kChecked = 1 << 2,
27  kSeparator = 1 << 3
28  };
29 
30  CMenuItem (const UTF8String& title, const UTF8String& keycode = "", int32_t keyModifiers = 0, CBitmap* icon = nullptr, int32_t flags = kNoFlags);
31  CMenuItem (const UTF8String& title, COptionMenu* submenu, CBitmap* icon = nullptr);
32  CMenuItem (const UTF8String& title, int32_t tag);
33  CMenuItem (const CMenuItem& item);
34 
35  //-----------------------------------------------------------------------------
37  //-----------------------------------------------------------------------------
39  virtual void setTitle (const UTF8String& title);
40  virtual void setSubmenu (COptionMenu* submenu);
41  virtual void setKey (const UTF8String& keyCode, int32_t keyModifiers = 0);
42  virtual void setVirtualKey (int32_t virtualKeyCode, int32_t keyModifiers = 0);
43  virtual void setEnabled (bool state = true);
44  virtual void setChecked (bool state = true);
45  virtual void setIsTitle (bool state = true);
46  virtual void setIsSeparator (bool state = true);
47  virtual void setIcon (CBitmap* icon);
48  virtual void setTag (int32_t tag);
49 
50  bool isEnabled () const { return !hasBit (flags, kDisabled); }
51  bool isChecked () const { return hasBit (flags, kChecked); }
52  bool isTitle () const { return hasBit (flags, kTitle); }
53  bool isSeparator () const { return hasBit (flags, kSeparator); }
54 
55  const UTF8String& getTitle () const { return title; }
56  int32_t getKeyModifiers () const { return keyModifiers; }
57  const UTF8String& getKeycode () const { return keyCode; }
58  int32_t getVirtualKeyCode () const { return virtualKeyCode; }
59  COptionMenu* getSubmenu () const { return submenu; }
60  CBitmap* getIcon () const { return icon; }
61  int32_t getTag () const { return tag; }
62 
63 
64 //------------------------------------------------------------------------
65 protected:
66  ~CMenuItem () noexcept override = default;
67 
68  UTF8String title;
69  UTF8String keyCode;
70  SharedPointer<COptionMenu> submenu;
71  SharedPointer<CBitmap> icon;
72  int32_t flags {0};
73  int32_t keyModifiers {0};
74  int32_t virtualKeyCode {0};
75  int32_t tag {-1};
76 };
77 
78 //-----------------------------------------------------------------------------
79 // CCommandMenuItem Declaration
82 //-----------------------------------------------------------------------------
84 {
85 public:
86  CCommandMenuItem (const UTF8String& title, const UTF8String& keycode = nullptr, int32_t keyModifiers = 0, CBitmap* icon = nullptr, int32_t flags = kNoFlags, CBaseObject* target = nullptr, const UTF8String& commandCategory = nullptr, const UTF8String& commandName = nullptr);
87  CCommandMenuItem (const UTF8String& title, COptionMenu* submenu, CBitmap* icon = nullptr, CBaseObject* target = nullptr, const UTF8String& commandCategory = nullptr, const UTF8String& commandName = nullptr);
88  CCommandMenuItem (const UTF8String& title, int32_t tag, CBaseObject* target = nullptr, const UTF8String& commandCategory = nullptr, const UTF8String& commandName = nullptr);
89  CCommandMenuItem (const UTF8String& title, CBaseObject* target, const UTF8String& commandCategory = nullptr, const UTF8String& commandName = nullptr);
90  CCommandMenuItem (const CCommandMenuItem& item);
91  ~CCommandMenuItem () noexcept override = default;
92 
93  //-----------------------------------------------------------------------------
95  //-----------------------------------------------------------------------------
97  void setCommandCategory (const UTF8String& category);
98  const UTF8String& getCommandCategory () const { return commandCategory; }
99  bool isCommandCategory (const UTF8String& category) const;
100 
101  void setCommandName (const UTF8String& name);
102  const UTF8String& getCommandName () const { return commandName; }
103  bool isCommandName (const UTF8String& name) const;
104 
105  void setTarget (CBaseObject* target);
106  CBaseObject* getTarget () const { return target; }
107 
108  using ValidateCallbackFunction = std::function<void(CCommandMenuItem* item)>;
109  using SelectedCallbackFunction = std::function<void(CCommandMenuItem* item)>;
110 
111  void setActions (SelectedCallbackFunction&& selected, ValidateCallbackFunction&& validate = [](CCommandMenuItem*){});
113 
114  void execute ();
115  void validate ();
116 
117  static IdStringPtr kMsgMenuItemValidate;
118  static IdStringPtr kMsgMenuItemSelected;
119 protected:
120  ValidateCallbackFunction validateFunc;
121  SelectedCallbackFunction selectedFunc;
123  UTF8String commandCategory;
124  UTF8String commandName;
125 };
126 
127 using CMenuItemList = std::vector<SharedPointer<CMenuItem>>;
128 using CMenuItemIterator = CMenuItemList::iterator;
129 using CConstMenuItemIterator = CMenuItemList::const_iterator;
130 
131 
132 //-----------------------------------------------------------------------------
133 // COptionMenu Declaration
136 //-----------------------------------------------------------------------------
138 {
139 public:
140  COptionMenu ();
141  COptionMenu (const CRect& size, IControlListener* listener, int32_t tag, CBitmap* background = nullptr, CBitmap* bgWhenClick = nullptr, const int32_t style = 0);
142  COptionMenu (const COptionMenu& menu);
143  ~COptionMenu () noexcept override;
144 
145  //-----------------------------------------------------------------------------
147  //-----------------------------------------------------------------------------
149  virtual CMenuItem* addEntry (CMenuItem* item, int32_t index = -1);
150  virtual CMenuItem* addEntry (COptionMenu* submenu, const UTF8String& title);
151  virtual CMenuItem* addEntry (const UTF8String& title, int32_t index = -1, int32_t itemFlags = CMenuItem::kNoFlags);
152  virtual CMenuItem* addSeparator (int32_t index = -1);
153  virtual CMenuItem* getCurrent () const;
154  virtual int32_t getCurrentIndex (bool countSeparator = false) const;
155  virtual CMenuItem* getEntry (int32_t index) const;
156  virtual int32_t getNbEntries () const;
157  virtual bool setCurrent (int32_t index, bool countSeparator = true);
158  virtual bool removeEntry (int32_t index);
159  virtual bool removeAllEntry ();
160 
161  virtual bool checkEntry (int32_t index, bool state);
162  virtual bool checkEntryAlone (int32_t index);
163  virtual bool isCheckEntry (int32_t index) const;
164  virtual void setNbItemsPerColumn (int32_t val) { nbItemsPerColumn = val; }
165  virtual int32_t getNbItemsPerColumn () const { return nbItemsPerColumn; }
166 
167  int32_t getLastResult () const { return lastResult; }
168  COptionMenu* getLastItemMenu (int32_t& idxInMenu) const;
169 
170  virtual void setPrefixNumbers (int32_t preCount);
171  int32_t getPrefixNumbers () const { return prefixNumbers; }
172 
173  COptionMenu* getSubMenu (int32_t idx) const;
174 
175  bool popup ();
176  bool popup (CFrame* frame, const CPoint& frameLocation);
177 
178  CMenuItemList* getItems () const { return menuItems; }
180 
181  // overrides
182  void setValue (float val) override;
183  void setMin (float val) override {}
184  float getMin () const override { return 0; }
185  void setMax (float val) override {}
186  float getMax () const override { return (float)(menuItems->size () - 1); }
187 
188  void draw (CDrawContext* pContext) override;
189  CMouseEventResult onMouseDown (CPoint& where, const CButtonState& buttons) override;
190  int32_t onKeyDown (VstKeyCode& keyCode) override;
191 
192  void takeFocus () override;
193  void looseFocus () override;
194 
195  static IdStringPtr kMsgBeforePopup;
196 
197  CLASS_METHODS(COptionMenu, CParamDisplay)
198 protected:
199  bool doPopup ();
200  void beforePopup ();
201 
202  CMenuItemList* menuItems;
203 
204  bool inPopup {false};
205  int32_t currentIndex {-1};
206  CButtonState lastButton {0};
207  int32_t nbItemsPerColumn {-1};
208  int32_t lastResult {-1};
209  int32_t prefixNumbers {0};
210  SharedPointer<CBitmap> bgWhenClick;
211  COptionMenu* lastMenu {nullptr};
212 };
213 
214 } // namespace
215 
216 #endif
item is gray and not selectable
Definition: coptionmenu.h:24
virtual CMenuItem * addSeparator(int32_t index=-1)
add a new separator entry
Definition: coptionmenu.cpp:519
virtual void setKey(const UTF8String &keyCode, int32_t keyModifiers=0)
set keycode and key modifiers of menu item
Definition: coptionmenu.cpp:93
COptionMenu * getLastItemMenu(int32_t &idxInMenu) const
get last menu and index of choosen entry
Definition: coptionmenu.cpp:682
virtual void setPrefixNumbers(int32_t preCount)
set prefix numbering
Definition: coptionmenu.cpp:480
virtual bool checkEntry(int32_t index, bool state)
change check state of entry at index
Definition: coptionmenu.cpp:624
CMenuItem(const UTF8String &title, const UTF8String &keycode="", int32_t keyModifiers=0, CBitmap *icon=nullptr, int32_t flags=kNoFlags)
Definition: coptionmenu.cpp:31
virtual int32_t getNbEntries() const
get number of entries
Definition: coptionmenu.cpp:541
bool isTitle() const
returns whether the item is a title item or not
Definition: coptionmenu.h:52
a popup menu control
Definition: coptionmenu.h:137
bool popup()
pops up menu
Definition: coptionmenu.cpp:411
int32_t getPrefixNumbers() const
get prefix numbering
Definition: coptionmenu.h:171
virtual bool checkEntryAlone(int32_t index)
check entry at index and uncheck every other item
Definition: coptionmenu.cpp:636
Rect structure.
Definition: crect.h:17
static IdStringPtr kMsgMenuItemValidate
message send to the target before the item is shown
Definition: coptionmenu.h:117
COptionMenu * getSubmenu() const
returns the submenu of the item
Definition: coptionmenu.h:59
Definition: xmlparse.c:181
virtual void setIcon(CBitmap *icon)
set menu item icon
Definition: coptionmenu.cpp:114
Definition: vstkeycode.h:12
Definition: vstguibase.h:299
bool isChecked() const
returns whether the item is checked or not
Definition: coptionmenu.h:51
a command menu item
Definition: coptionmenu.h:83
virtual bool removeAllEntry()
remove all entries
Definition: coptionmenu.cpp:617
item is a separator
Definition: coptionmenu.h:27
virtual int32_t getNbItemsPerColumn() const
Windows only.
Definition: coptionmenu.h:165
a menu item
Definition: coptionmenu.h:19
static IdStringPtr kMsgMenuItemSelected
message send to the target when this item was selected
Definition: coptionmenu.h:118
int32_t getVirtualKeyCode() const
returns the virtual keycode of the item
Definition: coptionmenu.h:58
Base Object with reference counter.
Definition: vstguibase.h:276
virtual void setEnabled(bool state=true)
set menu item enabled state
Definition: coptionmenu.cpp:126
CBitmap * getIcon() const
returns the icon of the item
Definition: coptionmenu.h:60
virtual CMenuItem * getEntry(int32_t index) const
get entry at index position
Definition: coptionmenu.cpp:532
void draw(CDrawContext *pContext) override
called if the view should draw itself
Definition: coptionmenu.cpp:657
int32_t getLastResult() const
get last index of choosen entry
Definition: coptionmenu.h:167
item has a checkmark
Definition: coptionmenu.h:26
virtual void setChecked(bool state=true)
set menu item checked state
Definition: coptionmenu.cpp:132
Encapsulates various platform depended kinds of bitmaps.
Definition: cbitmap.h:21
Definition: customcontrols.cpp:8
bool isEnabled() const
returns whether the item is enabled or not
Definition: coptionmenu.h:50
bool isSeparator() const
returns whether the item is a separator or not
Definition: coptionmenu.h:53
virtual void setSubmenu(COptionMenu *submenu)
set submenu of menu item
Definition: coptionmenu.cpp:108
const UTF8String & getKeycode() const
returns the keycode of the item
Definition: coptionmenu.h:57
int32_t getKeyModifiers() const
returns the key modifiers of the item
Definition: coptionmenu.h:56
CMouseEventResult onMouseDown(CPoint &where, const CButtonState &buttons) override
called when a mouse down event occurs
Definition: coptionmenu.cpp:667
virtual void setIsTitle(bool state=true)
set menu item title state
Definition: coptionmenu.cpp:138
virtual void setTitle(const UTF8String &title)
set title of menu item
Definition: coptionmenu.cpp:87
virtual void setVirtualKey(int32_t virtualKeyCode, int32_t keyModifiers=0)
set virtual keycode and key modifiers of menu item
Definition: coptionmenu.cpp:101
int32_t onKeyDown(VstKeyCode &keyCode) override
called if a key down event occurs and this view has focus
Definition: coptionmenu.cpp:326
Flags
Definition: coptionmenu.h:22
item indicates a title and is not selectable
Definition: coptionmenu.h:25
virtual CMenuItem * getCurrent() const
get current entry
Definition: coptionmenu.cpp:526
holds an UTF8 encoded string and a platform representation of it
Definition: cstring.h:56
const UTF8String & getTitle() const
returns the title of the item
Definition: coptionmenu.h:55
void takeFocus() override
called if view should take focus
Definition: coptionmenu.cpp:709
void looseFocus() override
called if view should loose focus
Definition: coptionmenu.cpp:715
virtual CMenuItem * addEntry(CMenuItem *item, int32_t index=-1)
add a new entry
Definition: coptionmenu.cpp:491
virtual void setNbItemsPerColumn(int32_t val)
Windows only.
Definition: coptionmenu.h:164
virtual void setTag(int32_t tag)
set menu item tag
Definition: coptionmenu.cpp:120
Point structure.
Definition: cpoint.h:17
virtual bool setCurrent(int32_t index, bool countSeparator=true)
set current entry
Definition: coptionmenu.cpp:574
a parameter display
Definition: cparamdisplay.h:24
virtual void setIsSeparator(bool state=true)
set menu item separator state
Definition: coptionmenu.cpp:144
The CFrame is the parent container of all views.
Definition: cframe.h:32
COptionMenu * getSubMenu(int32_t idx) const
get a submenu
Definition: coptionmenu.cpp:547
int32_t getTag() const
returns the tag of the item
Definition: coptionmenu.h:61
virtual bool isCheckEntry(int32_t index) const
get check state of entry at index
Definition: coptionmenu.cpp:648
Definition: icontrollistener.h:14
virtual bool removeEntry(int32_t index)
remove an entry
Definition: coptionmenu.cpp:608