summaryrefslogtreecommitdiffhomepage
path: root/nGenEx/Menu.h
blob: 1c10f8c34be820a54872af96a1adefb9b7c50a49 (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
124
/*  Project nGenEx
	Destroyer Studios LLC
	Copyright © 1997-2004. All Rights Reserved.

	SUBSYSTEM:    nGenEx.lib
	FILE:         Menu.h
	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