X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fgui%2Fmenu.hpp;h=66e5f774c36849dba096f1415a4615a4a2b1e986;hb=08813a74da6ac1fd045a105e4e8105f1d7f716f0;hp=3074bbe621690de072089f9bed778fe615a4c507;hpb=a54195a086e58adbbe333c7a683df632289e997f;p=supertux.git diff --git a/src/gui/menu.hpp b/src/gui/menu.hpp index 3074bbe62..66e5f774c 100644 --- a/src/gui/menu.hpp +++ b/src/gui/menu.hpp @@ -1,12 +1,10 @@ -// $Id$ -// // SuperTux // Copyright (C) 2006 Matthias Braun // -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -14,24 +12,17 @@ // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// along with this program. If not, see . -#ifndef SUPERTUX_MENU_H -#define SUPERTUX_MENU_H +#ifndef HEADER_SUPERTUX_GUI_MENU_HPP +#define HEADER_SUPERTUX_GUI_MENU_HPP -#include +#include #include -#include -#include -#include -#include - #include -#include "video/surface.hpp" +#include "gui/mousecursor.hpp" #include "video/font.hpp" -#include "mousecursor.hpp" bool confirm_dialog(Surface* background, std::string text); @@ -41,17 +32,17 @@ enum MenuItemKind { MN_GOTO, MN_TOGGLE, MN_BACK, - MN_DEACTIVE, + MN_INACTIVE, MN_TEXTFIELD, MN_NUMFIELD, MN_CONTROLFIELD, MN_STRINGSELECT, MN_LABEL, - MN_HL, /* horizontal line */ + MN_HL /* horizontal line */ }; class Menu; - + class MenuItem { public: @@ -79,29 +70,38 @@ public: std::string get_input_with_symbol(bool active_item); // returns the text with an input symbol private: - /// copy-construction not allowed - MenuItem(const MenuItem& ) { assert(false); } - /// assignment not allowed - void operator= (const MenuItem& ) { assert(false); } - /// keyboard key or joystick button bool input_flickering; + +private: + MenuItem(const MenuItem&); + MenuItem& operator=(const MenuItem&); }; - + class Menu { + static Color default_color; + static Color active_color; + static Color inactive_color; + static Color label_color; + static Color field_color; private: static std::vector last_menus; + + /** Pointers to all currently available menus, used to handle repositioning on window resize */ + static std::list all_menus; + static Menu* previous; static Menu* current_; - static void pop_current(); - public: /** Set the current menu, if pmenu is NULL, hide the current menu */ static void set_current(Menu* pmenu); static void push_current(Menu* pmenu); + static void pop_current(); + + static void recalc_pos(); /** Return the current active menu or NULL if none is active */ static Menu* current() @@ -139,13 +139,9 @@ private: char mn_input_char; float menu_repeat_time; -public: - static Font* default_font; - static Font* active_font; - static Font* deactive_font; - static Font* label_font; - static Font* field_font; + bool close; +public: std::vector items; Menu(); @@ -155,11 +151,12 @@ public: MenuItem* add_label(const std::string& text); MenuItem* add_entry(int id, const std::string& text); MenuItem* add_toggle(int id, const std::string& text, bool toggled = false); - MenuItem* add_deactive(int id, const std::string& text); + MenuItem* add_inactive(int id, const std::string& text); MenuItem* add_back(const std::string& text); MenuItem* add_submenu(const std::string& text, Menu* submenu, int id = -1); MenuItem* add_controlfield(int id, const std::string& text, const std::string& mapping = ""); + MenuItem* add_string_select(int id, const std::string& text); virtual void menu_action(MenuItem* item); @@ -188,6 +185,7 @@ public: void event(const SDL_Event& event); bool is_toggled(int id) const; + void set_toggled(int id, bool toggled); Menu* get_parent() const; @@ -212,3 +210,5 @@ private: }; #endif + +/* EOF */