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
21
class
CKApp
;
22
class
CKMenu
;
23
class
CKMenuItem
;
24
29
class
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
55
class
CKMenu
:
public
CKObject
{
56
public
:
57
CKMenu
(
const
char
*
text
);
58
virtual
~CKMenu
();
59
CKProperty<bool>
enabled
=
true
;
60
CKProperty<std::vector<CKMenuItem*>
>
items
;
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
;
76
short
__osMenuID
;
77
MenuHandle
__osMenuHandle
;
78
};
79
80
enum class
CKMenuItemType
{
81
Standard
= 0,
82
Separator
= 1,
83
Quit
,
84
Undo
,
85
Cut
,
86
Copy
,
87
Paste
,
88
Clear
,
89
};
90
95
class
CKMenuItem
:
public
CKObject
{
96
public
:
97
CKMenuItem
(
const
char
*
text
,
char
shortcut
,
CKEventHandlerFunc
callback
);
98
CKMenuItem
(
CKMenuItemType
type
);
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
:
108
CKProperty<bool>
enabled
=
true
;
109
CKProperty<char>
shortcut
= 0;
110
CKProperty<bool>
modifierAlt
=
false
;
111
CKProperty<bool>
modifierCtrl
=
false
;
112
CKProperty<CKMenuItemType>
type
=
CKMenuItemType::Standard
;
113
CKEventHandlerFunc
callback
=
nullptr
;
114
115
protected
:
116
friend
class
CKApp
;
117
char
*
text
=
nullptr
;
118
MenuHandle
__osMenuHandle
;
119
short
__osMenuItemID
;
120
121
private
:
122
void
__AttachObservers();
123
};
CKMenuItemType
CKMenuItemType
Definition
ckMenu.h:80
CKMenuItemType::Separator
@ Separator
CKMenuItemType::Quit
@ Quit
CKMenuItemType::Undo
@ Undo
CKMenuItemType::Paste
@ Paste
CKMenuItemType::Copy
@ Copy
CKMenuItemType::Clear
@ Clear
CKMenuItemType::Cut
@ Cut
CKMenuItemType::Standard
@ Standard
ckObject.h
ckProperty.h
CKApp
Defines the main entry point for a Clapkit application.
Definition
ckApp.h:57
CKMenuBar
Defines a menubar for the application.
Definition
ckMenu.h:29
CKMenuBar::GetStdFileMenu
CKMenu * GetStdFileMenu()
Definition
ckMenu.h:38
CKMenuBar::AddSystemMenuItem
void AddSystemMenuItem(CKMenu *item)
Add the menu to Apple Menu (Classic Mac OS) or App Menu (OS X)
Definition
ckMenu.cpp:73
CKMenuBar::GetStdEditMenu
CKMenu * GetStdEditMenu()
Definition
ckMenu.h:39
CKMenuBar::appleMenuItems
std::vector< CKMenuItem * > appleMenuItems
Definition
ckMenu.h:43
CKMenuBar::items
std::vector< CKMenu * > items
Definition
ckMenu.h:44
CKMenuBar::HasMenu
bool HasMenu(CKMenu *item)
Check if item is already in this menubar.
Definition
ckMenu.cpp:85
CKMenuBar::RemoveMenu
void RemoveMenu(CKMenu *item)
Remove item from the menu bar.
Definition
ckMenu.cpp:79
CKMenuBar::~CKMenuBar
virtual ~CKMenuBar()
Definition
ckMenu.cpp:47
CKMenuBar::AddMenu
void AddMenu(CKMenu *item)
Add a menu item to the bar.
Definition
ckMenu.cpp:61
CKMenuBar::HasMenuItem
bool HasMenuItem(CKMenuItem *item)
Check if item is already in this any of the menus.
Definition
ckMenu.cpp:99
CKMenuItem
Defines an item on the menu (i.e. "Save", "Quit", etc..)
Definition
ckMenu.h:95
CKMenuItem::DoCallback
void DoCallback(CKApp *app)
Definition
ckMenu.cpp:182
CKMenuItem::text
char * text
Definition
ckMenu.h:117
CKMenuItem::~CKMenuItem
virtual ~CKMenuItem()
Definition
ckMenu.cpp:171
CKMenuItem::__ReflectToOS
void __ReflectToOS()
Definition
ckMenu.cpp:262
CKMenuItem::callback
CKEventHandlerFunc callback
Definition
ckMenu.h:113
CKMenuItem::modifierCtrl
CKProperty< bool > modifierCtrl
Definition
ckMenu.h:111
CKMenuItem::SetText
void SetText(const char *text)
Definition
ckMenu.cpp:176
CKMenuItem::modifierAlt
CKProperty< bool > modifierAlt
Definition
ckMenu.h:110
CKMenuItem::enabled
CKProperty< bool > enabled
Definition
ckMenu.h:108
CKMenuItem::type
CKProperty< CKMenuItemType > type
Definition
ckMenu.h:112
CKMenuItem::shortcut
CKProperty< char > shortcut
Definition
ckMenu.h:109
CKMenuItem::__osMenuItemID
short __osMenuItemID
Definition
ckMenu.h:119
CKMenuItem::__osMenuHandle
MenuHandle __osMenuHandle
Definition
ckMenu.h:118
CKMenu
Defines an item on the menubar. (e.g. "File", "Edit" ..)
Definition
ckMenu.h:55
CKMenu::__osMenuID
short __osMenuID
Definition
ckMenu.h:76
CKMenu::~CKMenu
virtual ~CKMenu()
Definition
ckMenu.cpp:131
CKMenu::__osMenuHandle
MenuHandle __osMenuHandle
Definition
ckMenu.h:77
CKMenu::text
char * text
Definition
ckMenu.h:75
CKMenu::SetText
void SetText(const char *text)
Definition
ckMenu.cpp:139
CKMenu::PrependItem
void PrependItem(CKMenuItem *item)
Definition
ckMenu.h:65
CKMenu::DeleteItem
void DeleteItem(CKMenuItem *item)
Definition
ckMenu.h:68
CKMenu::enabled
CKProperty< bool > enabled
Definition
ckMenu.h:59
CKMenu::items
CKProperty< std::vector< CKMenuItem * > > items
Definition
ckMenu.h:60
CKMenu::AddItem
void AddItem(CKMenuItem *item)
Definition
ckMenu.h:62
CKObject
Defines the base class for all controls and objects.
Definition
ckObject.h:43
CKProperty
Defines an observable value.
Definition
ckProperty.h:60
CKProperty::get
const T & get() const
Definition
ckProperty.h:68
CKEventHandlerFunc
std::function< void(const CKEvent &)> CKEventHandlerFunc
Definition
ckObject.h:32
include
ckMenu.h
Generated by
1.9.8