summaryrefslogtreecommitdiffhomepage
path: root/nGenEx/Menu.h
blob: 649784b9c79af6214aee12cfdd36d17f5b159d57 (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