summaryrefslogtreecommitdiff
path: root/noncore/games/sfcave-sdl/menu.h
Side-by-side diff
Diffstat (limited to 'noncore/games/sfcave-sdl/menu.h') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/games/sfcave-sdl/menu.h71
1 files changed, 71 insertions, 0 deletions
diff --git a/noncore/games/sfcave-sdl/menu.h b/noncore/games/sfcave-sdl/menu.h
new file mode 100644
index 0000000..08f7528
--- a/dev/null
+++ b/noncore/games/sfcave-sdl/menu.h
@@ -0,0 +1,71 @@
+#ifndef __MENU_H
+#define __MENU_H
+
+#include <list>
+using namespace std;
+
+#include <SDL.h>
+
+class SFCave;
+class StarField;
+class Menu;
+
+class MenuOption
+{
+public:
+ MenuOption( QString text, int id );
+ ~MenuOption();
+
+ void highlight( bool val ) { highlighted = val; }
+ int draw( SDL_Surface *screen, int y );
+ void setNextMenu( Menu *item, bool down = true );
+ Menu *getNextMenu() { return nextMenu; }
+ int getMenuId() { return menuId; }
+ bool isDownMenuTree() { return downMenuTree; }
+
+private:
+ int menuId;
+ QString menuText;
+ bool highlighted;
+ bool downMenuTree;
+
+ Menu *nextMenu;
+};
+
+class Menu
+{
+public:
+ Menu( SFCave *p );
+ ~Menu();
+
+ void draw( SDL_Surface *screen );
+ int handleKeys( SDL_KeyboardEvent & );
+ MenuOption *addMenuOption( QString text, int id );
+ void resetToTopMenu();
+ void initCurrentMenu();
+
+ void setStatusText( QString text ) { statusText = text; }
+
+protected:
+
+private:
+ static SDL_Surface * sfcaveTextImage;
+ int angle;
+
+ static Menu *mainMenu;
+ static Menu *currentMenu;
+ Menu *parentMenu;
+
+ StarField *stars;
+
+ QString statusText;
+
+ SFCave *parent;
+ list<MenuOption *> listItems;
+ MenuOption *currentMenuOption;
+
+ Menu( Menu* p );
+};
+
+
+#endif