home *** CD-ROM | disk | FTP | other *** search
/ Enter 2005 March / ENTER.ISO / files / fwp-0.0.6-win32-installer.exe / Menu.h < prev    next >
Encoding:
C/C++ Source or Header  |  2004-12-18  |  2.8 KB  |  146 lines

  1. #ifndef __Menu_h__
  2. #define __Menu_h__
  3.  
  4. #include "DisplayInfo.h"
  5. #include "Input.h"
  6. #include "Sound.h"
  7.  
  8. #define MENU_MAX_MENU_ITEMS    32
  9. #define MENU_MAX_SUBMENUS    8
  10.  
  11. class MenuItem{
  12. public:
  13.     int x, y, width, height;
  14.     bool highlighted;
  15.     bool hasKeyboardFocus;
  16.  
  17.     MenuItem(int x, int y, int width, int height);
  18.     virtual ~MenuItem()=0;
  19.  
  20.     void deactivate();
  21.     void activate();
  22.     bool isActive();
  23.     
  24.     virtual void draw();
  25.     virtual void clicked();
  26.     virtual void clickedRight();
  27.     virtual void receiveKey(SDL_keysym* keysym);
  28. protected:
  29.     bool active;
  30. };
  31.  
  32. class TextButton:public MenuItem{
  33. public:
  34.     const char* label;
  35.  
  36.     TextButton(int x, int y, int width, int height, const char* label);
  37.     TextButton(int x, int y, const char* label);
  38.     ~TextButton();
  39.  
  40.     void draw();
  41.     void clicked();
  42.     void clickedRight();
  43.  
  44.     void setCallbackFunction(void (*func)(void));
  45. protected:
  46.     void (*callback)(void);
  47. };
  48.  
  49.  
  50. class ToggleButton:public MenuItem{
  51. public:
  52.     const char* label;
  53.  
  54.     ToggleButton(int x, int y, const char** items, int numItems, const char* label);
  55.     ~ToggleButton();
  56.  
  57.     void draw();
  58.     void clicked();
  59.     void clickedRight();
  60.  
  61.     const char* getSelectedItem();
  62.     int getIndex();
  63.     void setIndex(int newIndex);
  64.     void changeItems(const char** newItems, int newNumItems);
  65. protected:
  66.     const char** items;
  67.     int numItems;
  68.     int index;
  69. };
  70.  
  71.  
  72. class Textfield:public MenuItem{
  73. public:
  74.     const char* label;
  75.  
  76.     Textfield(int x, int y, int minChars, int maxChars, const char* label);
  77.     ~Textfield();
  78.  
  79.     void draw();
  80.     void clicked();
  81.     void clickedRight();
  82.     void receiveKey(SDL_keysym* keysym);
  83.  
  84.     char* getText();
  85.     void setText(const char* newText);
  86.  
  87. protected:
  88.     int minChars;
  89.     int maxChars;
  90.     char text[CON_MAX_STRING_LENGTH];
  91.     char inputStr[CON_MAX_STRING_LENGTH];
  92.     int inputStrIndex;
  93. };
  94.  
  95.  
  96.  
  97.  
  98. class Menu{
  99. public:
  100.     const char* name;
  101.  
  102.     Menu(const char* name);
  103.     virtual ~Menu();
  104.  
  105.     MenuItem* getMenuItem(int x, int y);
  106.     bool addMenuItem(MenuItem* item);
  107.     bool removeMenuItem(MenuItem* item);
  108.     bool deleteMenuItem(MenuItem* item);
  109.  
  110.     bool addSubmenu(Menu* submenu);
  111.     bool removeSubmenu(Menu* submenu);
  112.     bool deleteSubmenu(Menu* submenu);
  113.     void closeAllSubmenus();
  114.  
  115.     //virtual bool openAsSubmenu();
  116.     virtual bool open();
  117.     virtual bool close();
  118.     //virtual bool closeAsSubmenu();
  119.  
  120.     bool isOpened();
  121.  
  122.     virtual void draw();
  123.     virtual void drawBackground();
  124.  
  125.     virtual void handleKeyboardEvent(SDL_KeyboardEvent* event);
  126.     virtual void handleMouseMotionEvent(SDL_MouseMotionEvent* event);
  127.     virtual void handleMouseButtonEvent(SDL_MouseButtonEvent* event);
  128.  
  129.     static Mix_Chunk* pressButtonSound;
  130.     static Mix_Chunk* toggleSound;
  131.     static Mix_Chunk* errorSound;
  132.  
  133. protected:
  134.     MenuItem* menuItems[MENU_MAX_MENU_ITEMS];
  135.     Menu* submenus[MENU_MAX_SUBMENUS];
  136.  
  137.     bool opened;
  138.     bool allowConsole;
  139.  
  140.     virtual void mainLoop();
  141. };
  142.  
  143.  
  144.  
  145. #endif    /* __Menu_h__ */
  146.