#303: Typo fixes from mathnerd314
[supertux.git] / src / gui / menu.cpp
index 31ee3fb..5338ba8 100644 (file)
@@ -48,11 +48,12 @@ static const float FLICK_CURSOR_TIME   = 0.5f;
 extern SDL_Surface* screen;
 
 std::vector<Menu*> Menu::last_menus;
+std::list<Menu*> Menu::all_menus;
 Menu* Menu::current_ = 0;
 Menu* Menu::previous = 0;
 Font* Menu::default_font;
 Font* Menu::active_font;
-Font* Menu::deactive_font;
+Font* Menu::inactive_font;
 Font* Menu::label_font;
 Font* Menu::field_font;
 
@@ -61,7 +62,7 @@ bool confirm_dialog(Surface *background, std::string text)
 {
   //Surface* cap_screen = Surface::CaptureScreen();
   Menu* dialog = new Menu;
-  dialog->add_deactive(-1, text);
+  dialog->add_inactive(-1, text);
   dialog->add_hl();
   dialog->add_entry(true, _("Yes"));
   dialog->add_entry(false, _("No"));
@@ -161,6 +162,19 @@ Menu::set_current(Menu* menu)
   // just to be sure...
   main_controller->reset();
 }
+
+void
+Menu::recalc_pos()
+{
+  if (current_)
+    current_->set_pos(SCREEN_WIDTH/2, SCREEN_HEIGHT/2);
+
+  for(std::list<Menu*>::iterator i = all_menus.begin(); i != all_menus.end(); ++i)
+    {
+      // FIXME: This is of course not quite right, since it ignores any previous set_pos() calls
+      (*i)->set_pos(SCREEN_WIDTH/2, SCREEN_HEIGHT/2);
+    }
+}
 \f
 MenuItem::MenuItem(MenuItemKind _kind, int _id)
   : kind(_kind) , id(_id)
@@ -215,6 +229,8 @@ std::string MenuItem::get_input_with_symbol(bool active_item)
 \f
 Menu::~Menu()
 {
+  all_menus.remove(this);
+
   for(std::vector<MenuItem*>::iterator i = items.begin();
       i != items.end(); ++i)
     delete *i;
@@ -228,6 +244,8 @@ Menu::~Menu()
 
 Menu::Menu()
 {
+  all_menus.push_back(this);
+
   hit_item = -1;
   menuaction = MENU_ACTION_NONE;
   delete_character = 0;
@@ -251,7 +269,7 @@ Menu::Menu()
 void
 Menu::set_pos(float x, float y, float rw, float rh)
 {
-  pos_x = x + get_width() * rw;
+  pos_x = x + get_width()  * rw;
   pos_y = y + get_height() * rh;
 }
 
@@ -262,13 +280,13 @@ Menu::additem(MenuItem* item)
   items.push_back(item);
 
   /* If a new menu is being built, the active item shouldn't be set to
-   * something that isnt selectable. Set the active_item to the first
-   * selectable item added
+   * something that isn't selectable. Set the active_item to the first
+   * selectable item added.
    */
   if (active_item == -1
       && item->kind != MN_HL
       && item->kind != MN_LABEL
-      && item->kind != MN_DEACTIVE) {
+      && item->kind != MN_INACTIVE) {
     active_item = items.size() - 1;
   }
 }
@@ -311,9 +329,9 @@ Menu::add_entry(int id, const std::string& text)
 }
 
 MenuItem*
-Menu::add_deactive(int id, const std::string& text)
+Menu::add_inactive(int id, const std::string& text)
 {
-  MenuItem* item = new MenuItem(MN_DEACTIVE, id);
+  MenuItem* item = new MenuItem(MN_INACTIVE, id);
   item->text = text;
   additem(item);
   return item;
@@ -372,7 +390,7 @@ Menu::clear()
 void
 Menu::update()
 {
-  int menu_height = get_height();
+  int menu_height = (int) get_height();
   if (menu_height > SCREEN_HEIGHT)
     { // Scrolling
       int scroll_offset = (menu_height - SCREEN_HEIGHT) / 2 + 32;
@@ -450,7 +468,7 @@ Menu::update()
           active_item = int(items.size())-1;
       } while ((items[active_item]->kind == MN_HL
                 || items[active_item]->kind == MN_LABEL
-                || items[active_item]->kind == MN_DEACTIVE)
+                || items[active_item]->kind == MN_INACTIVE)
                && (active_item != last_active_item));
 
       break;
@@ -463,7 +481,7 @@ Menu::update()
           active_item = 0;
       } while ((items[active_item]->kind == MN_HL
                 || items[active_item]->kind == MN_LABEL
-                || items[active_item]->kind == MN_DEACTIVE)
+                || items[active_item]->kind == MN_INACTIVE)
                && (active_item != last_active_item));
 
       break;
@@ -474,6 +492,8 @@ Menu::update()
           items[active_item]->selected--;
         else
           items[active_item]->selected = items[active_item]->list.size()-1;
+        
+        menu_action(items[active_item]);
       }
       break;
 
@@ -483,6 +503,8 @@ Menu::update()
           items[active_item]->selected++;
         else
           items[active_item]->selected = 0;
+        
+        menu_action(items[active_item]);
       }
       break;
 
@@ -507,6 +529,15 @@ Menu::update()
           menu_action(items[active_item]);
           break;
 
+        case MN_STRINGSELECT:
+          if(items[active_item]->selected+1 < items[active_item]->list.size())
+              items[active_item]->selected++;
+          else
+            items[active_item]->selected = 0;
+
+          menu_action(items[active_item]);
+          break;
+
         case MN_TEXTFIELD:
         case MN_NUMFIELD:
           menuaction = MENU_ACTION_DOWN;
@@ -530,7 +561,7 @@ Menu::update()
         {
           int i = items[active_item]->input.size();
 
-          while(delete_character > 0)  /* remove charactes */
+          while(delete_character > 0)  /* remove characters */
           {
             items[active_item]->input.resize(i-1);
             delete_character--;
@@ -622,10 +653,10 @@ Menu::draw_item(DrawingContext& context, int index)
 
   switch (pitem.kind)
     {
-    case MN_DEACTIVE:
+    case MN_INACTIVE:
       {
-        context.draw_text(deactive_font, pitem.text,
-                          Vector(pos_x, y_pos - int(deactive_font->get_height()/2)),
+        context.draw_text(inactive_font, pitem.text,
+                          Vector(pos_x, y_pos - int(inactive_font->get_height()/2)),
                           ALIGN_CENTER, LAYER_GUI);
         break;
       }
@@ -810,8 +841,8 @@ Menu::draw(DrawingContext& context)
 
   if (!items[active_item]->help.empty())
     {
-      int text_width  = default_font->get_text_width(items[active_item]->help);
-      int text_height = default_font->get_text_height(items[active_item]->help);
+      int text_width  = (int) default_font->get_text_width(items[active_item]->help);
+      int text_height = (int) default_font->get_text_height(items[active_item]->help);
       
       Rect text_rect(pos_x - text_width/2 - 8, 
                      SCREEN_HEIGHT - 48 - text_height/2 - 4,
@@ -880,6 +911,12 @@ Menu::is_toggled(int id) const
   return get_item_by_id(id).toggled;
 }
 
+void
+Menu::set_toggled(int id, bool toggled)
+{
+  get_item_by_id(id).toggled = toggled;
+}
+
 Menu*
 Menu::get_parent() const
 {
@@ -928,7 +965,7 @@ Menu::event(const SDL_Event& event)
             /* only change the mouse focus to a selectable item */
             if ((items[new_active_item]->kind != MN_HL)
                 && (items[new_active_item]->kind != MN_LABEL)
-                && (items[new_active_item]->kind != MN_DEACTIVE))
+                && (items[new_active_item]->kind != MN_INACTIVE))
               active_item = new_active_item;
 
             if(MouseCursor::current())