make joystick_options_menu and key_options_menu part of joystickkeyboardcontroller...
[supertux.git] / src / control / joystickkeyboardcontroller.cpp
index 761c6a0..d007cc1 100644 (file)
@@ -45,7 +45,9 @@ JoystickKeyboardController::JoystickKeyboardController() :
   jump_with_up_joy(),
   jump_with_up_kbd(),
   wait_for_key(-1), 
-  wait_for_joystick(-1)
+  wait_for_joystick(-1),
+  key_options_menu(0),
+  joystick_options_menu(0)
 {
   // initialize default keyboard map
   keymap[SDLK_LEFT]     = LEFT;
@@ -108,6 +110,8 @@ JoystickKeyboardController::~JoystickKeyboardController()
     if(*i != 0)
       SDL_JoystickClose(*i);
   }
+  delete key_options_menu;
+  delete joystick_options_menu;
 }
 
 void
@@ -171,6 +175,22 @@ JoystickKeyboardController::updateAvailableJoysticks()
   }
 }
 
+KeyboardMenu*
+JoystickKeyboardController::get_key_options_menu()
+{
+       if (!key_options_menu)
+               key_options_menu = new KeyboardMenu(this);
+       return key_options_menu;
+}
+
+JoystickMenu*
+JoystickKeyboardController::get_joystick_options_menu()
+{
+       if (!joystick_options_menu)
+               joystick_options_menu = new JoystickMenu(this);
+       return joystick_options_menu;
+}
+
 void
 JoystickKeyboardController::read(const Reader& lisp)
 {
@@ -353,7 +373,7 @@ JoystickKeyboardController::process_button_event(const SDL_JoyButtonEvent& jbutt
     if(jbutton.state == SDL_PRESSED)
     {
       bind_joybutton(jbutton.button, (Control)wait_for_joystick);
-      MenuStorage::get_joystick_options_menu()->update();
+      get_joystick_options_menu()->update();
       reset();
       wait_for_joystick = -1;
     }
@@ -380,7 +400,7 @@ JoystickKeyboardController::process_axis_event(const SDL_JoyAxisEvent& jaxis)
       else
         bind_joyaxis(jaxis.axis + 1, Control(wait_for_joystick));
 
-      MenuStorage::get_joystick_options_menu()->update();
+      get_joystick_options_menu()->update();
       wait_for_joystick = -1;
     }
   }
@@ -436,7 +456,7 @@ JoystickKeyboardController::process_hat_event(const SDL_JoyHatEvent& jhat)
     if (changed & SDL_HAT_RIGHT && jhat.value & SDL_HAT_RIGHT)
       bind_joyhat(SDL_HAT_RIGHT, (Control)wait_for_joystick);
 
-    MenuStorage::get_joystick_options_menu()->update();
+    get_joystick_options_menu()->update();
     wait_for_joystick = -1;
   }
   else
@@ -563,14 +583,14 @@ JoystickKeyboardController::process_menu_key_event(const SDL_Event& event)
       bind_key(event.key.keysym.sym, (Control) wait_for_key);
     }
     reset();
-    MenuStorage::get_key_options_menu()->update();
+    get_key_options_menu()->update();
     wait_for_key = -1;
     return;
   }
   if(wait_for_joystick >= 0) {
     if(event.key.keysym.sym == SDLK_ESCAPE) {
       reset();
-      MenuStorage::get_joystick_options_menu()->update();
+      get_joystick_options_menu()->update();
       wait_for_joystick = -1;
     }
     return;