openshot-audio  0.1.7
juce_PopupMenu.h
Go to the documentation of this file.
1 /*
2  ==============================================================================
3 
4  This file is part of the JUCE library.
5  Copyright (c) 2015 - ROLI Ltd.
6 
7  Permission is granted to use this software under the terms of either:
8  a) the GPL v2 (or any later version)
9  b) the Affero GPL v3
10 
11  Details of these licenses can be found at: www.gnu.org/licenses
12 
13  JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
14  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
15  A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16 
17  ------------------------------------------------------------------------------
18 
19  To release a closed-source product which uses JUCE, commercial licenses are
20  available: visit www.juce.com for more information.
21 
22  ==============================================================================
23 */
24 
25 #ifndef JUCE_POPUPMENU_H_INCLUDED
26 #define JUCE_POPUPMENU_H_INCLUDED
27 
28 
29 //==============================================================================
78 {
79 private:
80  class Window;
81 
82 public:
83  //==============================================================================
85  PopupMenu();
86 
88  PopupMenu (const PopupMenu& other);
89 
91  ~PopupMenu();
92 
94  PopupMenu& operator= (const PopupMenu& other);
95 
96  #if JUCE_COMPILER_SUPPORTS_MOVE_SEMANTICS
97  PopupMenu (PopupMenu&& other) noexcept;
98  PopupMenu& operator= (PopupMenu&& other) noexcept;
99  #endif
100 
101  //==============================================================================
103  void clear();
104 
117  void addItem (int itemResultID,
118  const String& itemText,
119  bool isEnabled = true,
120  bool isTicked = false);
121 
135  void addItem (int itemResultID,
136  const String& itemText,
137  bool isEnabled,
138  bool isTicked,
139  const Image& iconToUse);
140 
155  void addItem (int itemResultID,
156  const String& itemText,
157  bool isEnabled,
158  bool isTicked,
159  Drawable* iconToUse);
160 
169  void addCommandItem (ApplicationCommandManager* commandManager,
170  CommandID commandID,
171  const String& displayName = String::empty);
172 
173 
180  void addColouredItem (int itemResultID,
181  const String& itemText,
182  Colour itemTextColour,
183  bool isEnabled = true,
184  bool isTicked = false,
185  const Image& iconToUse = Image::null);
186 
200  void addCustomItem (int itemResultID,
201  Component* customComponent,
202  int idealWidth, int idealHeight,
203  bool triggerMenuItemAutomaticallyWhenClicked,
204  const PopupMenu* optionalSubMenu = nullptr);
205 
212  void addSubMenu (const String& subMenuName,
213  const PopupMenu& subMenu,
214  bool isEnabled = true);
215 
222  void addSubMenu (const String& subMenuName,
223  const PopupMenu& subMenu,
224  bool isEnabled,
225  const Image& iconToUse,
226  bool isTicked = false,
227  int itemResultID = 0);
228 
239  void addSubMenu (const String& subMenuName,
240  const PopupMenu& subMenu,
241  bool isEnabled,
242  Drawable* iconToUse,
243  bool isTicked = false,
244  int itemResultID = 0);
245 
253  void addSeparator();
254 
260  void addSectionHeader (const String& title);
261 
266  int getNumItems() const noexcept;
267 
269  bool containsCommandItem (int commandID) const;
270 
272  bool containsAnyActiveItems() const noexcept;
273 
274  //==============================================================================
287  {
288  public:
289  Options();
290 
291  Options withTargetComponent (Component* targetComponent) const noexcept;
292  Options withTargetScreenArea (const Rectangle<int>& targetArea) const noexcept;
293  Options withMinimumWidth (int minWidth) const noexcept;
294  Options withMaximumNumColumns (int maxNumColumns) const noexcept;
295  Options withStandardItemHeight (int standardHeight) const noexcept;
296  Options withItemThatMustBeVisible (int idOfItemToBeVisible) const noexcept;
297 
298  private:
299  friend class PopupMenu;
300  friend class PopupMenu::Window;
301  Rectangle<int> targetArea;
302  Component* targetComponent;
303  int visibleItemID, minWidth, maxColumns, standardHeight;
304  };
305 
306  //==============================================================================
307  #if JUCE_MODAL_LOOPS_PERMITTED
308 
341  int show (int itemIDThatMustBeVisible = 0,
342  int minimumWidth = 0,
343  int maximumNumColumns = 0,
344  int standardItemHeight = 0,
345  ModalComponentManager::Callback* callback = nullptr);
346 
347 
361  int showAt (const Rectangle<int>& screenAreaToAttachTo,
362  int itemIDThatMustBeVisible = 0,
363  int minimumWidth = 0,
364  int maximumNumColumns = 0,
365  int standardItemHeight = 0,
366  ModalComponentManager::Callback* callback = nullptr);
367 
374  int showAt (Component* componentToAttachTo,
375  int itemIDThatMustBeVisible = 0,
376  int minimumWidth = 0,
377  int maximumNumColumns = 0,
378  int standardItemHeight = 0,
379  ModalComponentManager::Callback* callback = nullptr);
380 
383  int showMenu (const Options& options);
384  #endif
385 
387  void showMenuAsync (const Options& options,
389 
390  //==============================================================================
397  static bool JUCE_CALLTYPE dismissAllActiveMenus();
398 
399 
400  //==============================================================================
406  void setLookAndFeel (LookAndFeel* newLookAndFeel);
407 
408  //==============================================================================
417  {
418  backgroundColourId = 0x1000700,
419  textColourId = 0x1000600,
421  headerTextColourId = 0x1000601,
427  };
428 
429  //==============================================================================
440  {
441  public:
442  //==============================================================================
449  MenuItemIterator (const PopupMenu& menu);
450 
452  ~MenuItemIterator();
453 
457  bool next();
458 
460  void addItemTo (PopupMenu& targetMenu);
461 
462  //==============================================================================
465  int itemId;
467  bool isTicked;
468  bool isEnabled;
472  const Drawable* icon;
474 
475  private:
476  //==============================================================================
477  const PopupMenu& menu;
478  int index;
479 
480  MenuItemIterator& operator= (const MenuItemIterator&);
482  };
483 
484  //==============================================================================
490  {
491  public:
497  CustomComponent (bool isTriggeredAutomatically = true);
498 
500  ~CustomComponent();
501 
507  virtual void getIdealSize (int& idealWidth, int& idealHeight) = 0;
508 
514  void triggerMenuItem();
515 
520  bool isItemHighlighted() const noexcept { return isHighlighted; }
521 
523  bool isTriggeredAutomatically() const noexcept { return triggeredAutomatically; }
525  void setHighlighted (bool shouldBeHighlighted);
526 
527  private:
528  //==============================================================================
529  bool isHighlighted, triggeredAutomatically;
530 
532  };
533 
541  void addCustomItem (int itemResultID, CustomComponent* customComponent,
542  const PopupMenu* optionalSubMenu = nullptr);
543 
544 
545  //==============================================================================
550  {
551  virtual ~LookAndFeelMethods() {}
552 
554  virtual void drawPopupMenuBackground (Graphics&, int width, int height) = 0;
555 
557  virtual void drawPopupMenuItem (Graphics&, const Rectangle<int>& area,
558  bool isSeparator, bool isActive, bool isHighlighted,
559  bool isTicked, bool hasSubMenu,
560  const String& text,
561  const String& shortcutKeyText,
562  const Drawable* icon,
563  const Colour* textColour) = 0;
564 
565  virtual void drawPopupMenuSectionHeader (Graphics&, const Rectangle<int>& area,
566  const String& sectionName) = 0;
567 
569  virtual Font getPopupMenuFont() = 0;
570 
571  virtual void drawPopupMenuUpDownArrow (Graphics&,
572  int width, int height,
573  bool isScrollUpArrow) = 0;
574 
576  virtual void getIdealPopupMenuItemSize (const String& text,
577  bool isSeparator,
578  int standardMenuItemHeight,
579  int& idealWidth,
580  int& idealHeight) = 0;
581 
582  virtual int getMenuWindowFlags() = 0;
583 
584  virtual void drawMenuBarBackground (Graphics&, int width, int height,
585  bool isMouseOverBar,
586  MenuBarComponent&) = 0;
587 
588  virtual int getDefaultMenuBarHeight() = 0;
589 
590  virtual int getMenuBarItemWidth (MenuBarComponent&, int itemIndex, const String& itemText) = 0;
591 
592  virtual Font getMenuBarFont (MenuBarComponent&, int itemIndex, const String& itemText) = 0;
593 
594  virtual void drawMenuBarItem (Graphics&, int width, int height,
595  int itemIndex,
596  const String& itemText,
597  bool isMouseOverItem,
598  bool isMenuOpen,
599  bool isMouseOverBar,
600  MenuBarComponent&) = 0;
601  };
602 
603 private:
604  //==============================================================================
605  JUCE_PUBLIC_IN_DLL_BUILD (class Item)
606  JUCE_PUBLIC_IN_DLL_BUILD (struct HelperClasses)
607  friend struct HelperClasses;
608  friend class MenuBarComponent;
609 
610  OwnedArray<Item> items;
611  LookAndFeel* lookAndFeel;
612 
614  int showWithOptionalCallback (const Options&, ModalComponentManager::Callback*, bool);
615 
616  #if JUCE_CATCH_DEPRECATED_CODE_MISUSE
617  // These methods have new implementations now - see its new definition
618  int drawPopupMenuItem (Graphics&, int, int, bool, bool, bool, bool, bool, const String&, const String&, Image*, const Colour*) { return 0; }
619  #endif
620 
622 };
623 
624 #endif // JUCE_POPUPMENU_H_INCLUDED
bool isTicked
Definition: juce_PopupMenu.h:467
Definition: juce_ApplicationCommandManager.h:84
Definition: juce_PopupMenu.h:419
Definition: juce_PopupMenu.h:286
Definition: juce_PopupMenu.h:77
static const String empty
Definition: juce_String.h:152
Definition: juce_Font.h:39
int itemId
Definition: juce_PopupMenu.h:465
static bool JUCE_CALLTYPE dismissAllActiveMenus()
Definition: juce_PopupMenu.cpp:1617
#define noexcept
Definition: juce_CompilerSupport.h:141
Definition: juce_PopupMenu.cpp:122
bool isCustomComponent
Definition: juce_PopupMenu.h:469
Definition: juce_LookAndFeel.h:74
Definition: juce_PopupMenu.h:425
void setLookAndFeel(LookAndFeel *newLookAndFeel)
Definition: juce_PopupMenu.cpp:1677
#define JUCE_CALLTYPE
Definition: juce_PlatformDefs.h:50
const Colour * customColour
Definition: juce_PopupMenu.h:471
Definition: juce_ModalComponentManager.h:53
Definition: juce_String.h:43
void showMenuAsync(const Options &options, ModalComponentManager::Callback *callback)
Definition: juce_PopupMenu.cpp:1562
bool isEnabled
Definition: juce_PopupMenu.h:468
#define JUCE_API
Definition: juce_StandardHeader.h:139
Definition: juce_PopupMenu.cpp:37
ColourIds
Definition: juce_PopupMenu.h:416
#define JUCE_PUBLIC_IN_DLL_BUILD(declaration)
Definition: juce_StandardHeader.h:145
#define const
Definition: juce_PopupMenu.h:488
Definition: juce_Rectangle.h:36
Definition: juce_PopupMenu.h:439
bool isTriggeredAutomatically() const noexcept
Definition: juce_PopupMenu.h:523
Definition: juce_Colour.h:35
Definition: juce_PopupMenu.h:421
bool isSectionHeader
Definition: juce_PopupMenu.h:470
Definition: juce_MenuBarComponent.h:35
Definition: juce_Component.h:33
Definition: juce_PopupMenu.h:418
Definition: juce_win32_Windowing.cpp:76
png_const_structrp png_const_inforp int png_fixed_point * width
Definition: juce_PNGLoader.cpp:2339
Definition: juce_PopupMenu.h:423
const Drawable * icon
Definition: juce_PopupMenu.h:472
Definition: juce_Drawable.h:35
Definition: juce_OwnedArray.h:55
#define JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(className)
Definition: juce_PlatformDefs.h:198
Definition: juce_GraphicsContext.h:42
Definition: juce_Image.h:54
bool isSeparator
Definition: juce_PopupMenu.h:466
bool isItemHighlighted() const noexcept
Definition: juce_PopupMenu.h:520
#define JUCE_LEAK_DETECTOR(OwnerClass)
Definition: juce_LeakedObjectDetector.h:141
Definition: juce_PopupMenu.h:549
Definition: juce_ReferenceCountedObject.h:144
virtual ~LookAndFeelMethods()
Definition: juce_PopupMenu.h:551
static const Image null
Definition: juce_Image.h:152
ApplicationCommandManager * commandManager
Definition: juce_PopupMenu.h:473
Definition: juce_ModalComponentManager.h:40
String itemName
Definition: juce_PopupMenu.h:463
const PopupMenu * subMenu
Definition: juce_PopupMenu.h:464