Ocean
Loading...
Searching...
No Matches
ContextMenu.h
Go to the documentation of this file.
1/*
2 * Copyright (c) Meta Platforms, Inc. and affiliates.
3 *
4 * This source code is licensed under the MIT license found in the
5 * LICENSE file in the root directory of this source tree.
6 */
7
8#ifndef META_OCEAN_PLATFORM_APPLE_MACOS_CONTEXT_MENU_H
9#define META_OCEAN_PLATFORM_APPLE_MACOS_CONTEXT_MENU_H
10
12
13#ifndef __OBJC__
14 #error Platform::Apple::MacOS::ContextMenu.h needs to be included from an ObjectiveC++ file
15#endif
16
17#include <AppKit/AppKit.h>
18
19namespace Ocean
20{
21
22namespace Platform
23{
24
25namespace Apple
26{
27
28namespace MacOS
29{
30
31/**
32 * This class implements a context menu for MacOS platforms.
33 * Mainly, this class wraps a NSMenu object.
34 * @ingroup platformapplemacos
35 */
37{
38 protected:
39
40 /**
41 * Definition of a vector holding a string.
42 */
43 typedef std::vector<std::string> Strings;
44
45 public:
46
47 /**
48 * Creates a new context menu object.
49 */
51
52 /**
53 * Disabled copy constructor preventing to copy a ContextMenu object.
54 * @param contextMenu The context menu to be copied
55 */
56 ContextMenu(const ContextMenu& contextMenu) = delete;
57
58 /**
59 * Creates a new context menu object.
60 * @param contextMenu The context menu to be moved
61 */
62 inline ContextMenu(ContextMenu&& contextMenu) noexcept;
63
64 /**
65 * Adds a new item to the context menu.
66 * @param text The text of the item to be added, "-" for a separator item
67 * @param enabled True, to enabled the item; False, to disable the item
68 * @return The index of the new item, with range [0, infinity)
69 */
70 int addItem(const std::string& text, const bool enabled = true);
71
72 /**
73 * Popups the context menu, blocks the main event queue, and does not return unti the user has made a decision.
74 * @return The index of the item the user selected, -1 if the user did not select any item
75 * @see addItem().
76 */
77 int popup();
78
79 /**
80 * Internal event functions for a selected menu item, should never be called from outside.
81 * @param item The item that has been selected
82 */
83 void onItemSelected(NSMenuItem* item);
84
85 /**
86 * Disabled assign operator preventing to assign a context menu.
87 * @param contextMenu The context menu to be assigned
88 * @return Reference to this object
89 */
90 ContextMenu& operator=(const ContextMenu& contextMenu) = delete;
91
92 /**
93 * Move operator.
94 * @param contextMenu The context menu to be moved
95 * @return Reference to this object
96 */
97 ContextMenu& operator=(ContextMenu&& contextMenu) noexcept;
98
99 protected:
100
101 /// The actual MacOS context menu wrapped by this class.
103
104 /// The items of the context menus.
106
107 /// The index of the item that has been selected by the user, -1 if no item has been selected.
109};
110
111ContextMenu::ContextMenu(ContextMenu&& contextMenu) noexcept :
113{
114 *this = std::move(contextMenu);
115}
116
117}
118
119}
120
121}
122
123}
124
125#endif // META_OCEAN_PLATFORM_APPLE_MACOS_CONTEXT_MENU_H
This class implements a context menu for MacOS platforms.
Definition ContextMenu.h:37
int contextSelectedIndex
The index of the item that has been selected by the user, -1 if no item has been selected.
Definition ContextMenu.h:108
Strings contextMenuItemTexts
The items of the context menus.
Definition ContextMenu.h:105
void onItemSelected(NSMenuItem *item)
Internal event functions for a selected menu item, should never be called from outside.
std::vector< std::string > Strings
Definition of a vector holding a string.
Definition ContextMenu.h:43
NSMenu * contextMenuNSMenu
The actual MacOS context menu wrapped by this class.
Definition ContextMenu.h:102
ContextMenu & operator=(const ContextMenu &contextMenu)=delete
Disabled assign operator preventing to assign a context menu.
int popup()
Popups the context menu, blocks the main event queue, and does not return unti the user has made a de...
ContextMenu(const ContextMenu &contextMenu)=delete
Disabled copy constructor preventing to copy a ContextMenu object.
int addItem(const std::string &text, const bool enabled=true)
Adds a new item to the context menu.
ContextMenu & operator=(ContextMenu &&contextMenu) noexcept
Move operator.
ContextMenu()
Creates a new context menu object.
The namespace covering the entire Ocean framework.
Definition Accessor.h:15