Clapkit
Loading...
Searching...
No Matches
ckMenu.h
Go to the documentation of this file.
1/*
2 *
3 * Clapkit
4 * ----------------------------------------------------------------------
5 * A wrapper for creating a 'generalized' app for Classic MacOS
6 * that (hopefully) can be ported easily to other platforms.
7 *
8 * CKMenuBar & CKMenu
9 * ----------------------------------------------------------------------
10 * Defines a menu and its items.
11 *
12 */
13
14#pragma once
15
16#include "ckObject.h"
17#include "ckProperty.h"
18#include <Menus.h>
19#include <vector>
20
21class CKApp;
22class CKMenu;
23class CKMenuItem;
24
29class CKMenuBar : public CKObject {
30 public:
31 CKMenuBar(bool createStandardItems = false);
32 virtual ~CKMenuBar();
33 void AddMenu(CKMenu* item);
34 void AddSystemMenuItem(CKMenu* item);
35 void RemoveMenu(CKMenu* item);
36 bool HasMenu(CKMenu* item);
37 bool HasMenuItem(CKMenuItem* item);
38 CKMenu* GetStdFileMenu() { return this->__stdFile; }
39 CKMenu* GetStdEditMenu() { return this->__stdEdit; }
40
41 protected:
42 friend class CKApp;
43 std::vector<CKMenuItem*> appleMenuItems;
44 std::vector<CKMenu*> items;
45
46 private:
47 CKMenu* __stdFile = nullptr;
48 CKMenu* __stdEdit = nullptr;
49};
50
55class CKMenu : public CKObject {
56 public:
57 CKMenu(const char* text);
58 virtual ~CKMenu();
61 void SetText(const char* text);
62 void AddItem(CKMenuItem* item) {
63 this->items.get().push_back(item);
64 }
65 void PrependItem(CKMenuItem* item) {
66 this->items.get().insert(this->items.get().begin(), item);
67 }
68 void DeleteItem(CKMenuItem* item) {
69 auto& vec = this->items.get();
70 vec.erase(std::remove(vec.begin(), vec.end(), item), vec.end());
71 }
72
73 protected:
74 friend class CKApp;
75 char* text = nullptr;
77 MenuHandle __osMenuHandle;
78};
79
80enum class CKMenuItemType {
81 Standard = 0,
82 Separator = 1,
83 Quit,
84 Undo,
85 Cut,
86 Copy,
87 Paste,
88 Clear,
89};
90
95class CKMenuItem : public CKObject {
96 public:
99 virtual ~CKMenuItem();
100 void SetText(const char* text);
101 void DoCallback(CKApp* app);
102
103 protected:
104 friend class CKApp;
105 void __ReflectToOS();
106
107 public:
114
115 protected:
116 friend class CKApp;
117 char* text = nullptr;
118 MenuHandle __osMenuHandle;
120
121 private:
122 void __AttachObservers();
123};
CKMenuItemType
Definition ckMenu.h:80
Defines the main entry point for a Clapkit application.
Definition ckApp.h:57
Defines a menubar for the application.
Definition ckMenu.h:29
CKMenu * GetStdFileMenu()
Definition ckMenu.h:38
void AddSystemMenuItem(CKMenu *item)
Add the menu to Apple Menu (Classic Mac OS) or App Menu (OS X)
Definition ckMenu.cpp:73
CKMenu * GetStdEditMenu()
Definition ckMenu.h:39
std::vector< CKMenuItem * > appleMenuItems
Definition ckMenu.h:43
std::vector< CKMenu * > items
Definition ckMenu.h:44
bool HasMenu(CKMenu *item)
Check if item is already in this menubar.
Definition ckMenu.cpp:85
void RemoveMenu(CKMenu *item)
Remove item from the menu bar.
Definition ckMenu.cpp:79
virtual ~CKMenuBar()
Definition ckMenu.cpp:47
void AddMenu(CKMenu *item)
Add a menu item to the bar.
Definition ckMenu.cpp:61
bool HasMenuItem(CKMenuItem *item)
Check if item is already in this any of the menus.
Definition ckMenu.cpp:99
Defines an item on the menu (i.e. "Save", "Quit", etc..)
Definition ckMenu.h:95
void DoCallback(CKApp *app)
Definition ckMenu.cpp:182
char * text
Definition ckMenu.h:117
virtual ~CKMenuItem()
Definition ckMenu.cpp:171
void __ReflectToOS()
Definition ckMenu.cpp:262
CKEventHandlerFunc callback
Definition ckMenu.h:113
CKProperty< bool > modifierCtrl
Definition ckMenu.h:111
void SetText(const char *text)
Definition ckMenu.cpp:176
CKProperty< bool > modifierAlt
Definition ckMenu.h:110
CKProperty< bool > enabled
Definition ckMenu.h:108
CKProperty< CKMenuItemType > type
Definition ckMenu.h:112
CKProperty< char > shortcut
Definition ckMenu.h:109
short __osMenuItemID
Definition ckMenu.h:119
MenuHandle __osMenuHandle
Definition ckMenu.h:118
Defines an item on the menubar. (e.g. "File", "Edit" ..)
Definition ckMenu.h:55
short __osMenuID
Definition ckMenu.h:76
virtual ~CKMenu()
Definition ckMenu.cpp:131
MenuHandle __osMenuHandle
Definition ckMenu.h:77
char * text
Definition ckMenu.h:75
void SetText(const char *text)
Definition ckMenu.cpp:139
void PrependItem(CKMenuItem *item)
Definition ckMenu.h:65
void DeleteItem(CKMenuItem *item)
Definition ckMenu.h:68
CKProperty< bool > enabled
Definition ckMenu.h:59
CKProperty< std::vector< CKMenuItem * > > items
Definition ckMenu.h:60
void AddItem(CKMenuItem *item)
Definition ckMenu.h:62
Defines the base class for all controls and objects.
Definition ckObject.h:43
Defines an observable value.
Definition ckProperty.h:60
const T & get() const
Definition ckProperty.h:68
std::function< void(const CKEvent &)> CKEventHandlerFunc
Definition ckObject.h:32