blob: b74099f246ea5b7073b4074632e7b6ed3a26fc7c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
/* Starshatter: The Open Source Project
Copyright (c) 2021-2022, Starshatter: The Open Source Project Contributors
Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors
Copyright (c) 1997-2006, Destroyer Studios LLC.
AUTHOR: John DiCamillo
OVERVIEW
========
Simple menu hierarchy class
*/
#ifndef Menu_h
#define Menu_h
#include "Types.h"
#include "List.h"
#include "Text.h"
// +-------------------------------------------------------------------+
class Menu;
class MenuItem;
class MenuHistory;
// +-------------------------------------------------------------------+
class Menu
{
public:
static const char* TYPENAME() { return "Menu"; }
Menu() { }
Menu(Text t) : title(t) { }
virtual ~Menu() { items.destroy(); }
virtual Text GetTitle() const { return title; }
virtual void SetTitle(Text t) { title = t; }
virtual Menu* GetParent() const { return parent; }
virtual void SetParent(Menu* p) { parent = p; }
virtual void AddItem(Text label, DWORD value=0, bool enabled=true);
virtual void AddItem(MenuItem* item);
virtual void AddMenu(Text label, Menu* menu, DWORD value=0);
virtual MenuItem* GetItem(int index);
virtual void SetItem(int index, MenuItem* item);
virtual int NumItems() const;
virtual void ClearItems();
ListIter<MenuItem> GetItems() { return items; }
protected:
Text title;
List<MenuItem> items;
Menu* parent;
friend class MenuItem;
};
// +-------------------------------------------------------------------+
class MenuItem
{
public:
static const char* TYPENAME() { return "MenuItem"; }
MenuItem(Text label, DWORD value=0, bool enabled=true);
virtual ~MenuItem();
virtual Text GetText() const { return text; }
virtual void SetText(Text t) { text = t; }
virtual DWORD GetData() const { return data; }
virtual void SetData(DWORD d) { data = d; }
virtual int GetEnabled() const { return enabled; }
virtual void SetEnabled(int e) { enabled = e; }
virtual int GetSelected() const { return selected; }
virtual void SetSelected(int s) { selected = s; }
virtual Menu* GetMenu() const { return menu; }
virtual void SetMenu(Menu* m) { menu = m; }
virtual Menu* GetSubmenu() const { return submenu; }
virtual void SetSubmenu(Menu* s) { submenu = s; }
protected:
Text text;
DWORD data;
int enabled;
int selected;
Menu* menu;
Menu* submenu;
friend class Menu;
};
// +-------------------------------------------------------------------+
class MenuHistory
{
public:
static const char* TYPENAME() { return "MenuHistory"; }
MenuHistory() { }
virtual ~MenuHistory() { history.clear(); }
virtual Menu* GetCurrent();
virtual Menu* GetLevel(int n);
virtual Menu* Find(const char* title);
virtual void Pop();
virtual void Push(Menu* menu);
virtual void Clear();
private:
List<Menu> history;
};
#endif // Menu_h
|