Skip to content

Commit

Permalink
Added default and cancel button to the Dialog
Browse files Browse the repository at this point in the history
  • Loading branch information
Grumbel committed Aug 27, 2014
1 parent 2b7cf1b commit 7831e81
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 17 deletions.
34 changes: 23 additions & 11 deletions src/gui/dialog.cpp
Expand Up @@ -30,6 +30,7 @@ Dialog::Dialog() :
m_text(),
m_buttons(),
m_selected_button(),
m_cancel_button(-1),
m_text_size()
{
}
Expand All @@ -53,17 +54,27 @@ Dialog::clear_buttons()
{
m_buttons.clear();
m_selected_button = 0;
m_cancel_button = -1;
}

void
Dialog::add_button(const std::string& text, const std::function<void ()>& callback, bool focus)
Dialog::add_default_button(const std::string& text, const std::function<void ()>& callback)
{
m_buttons.push_back({text, callback});
add_button(text, callback);
m_selected_button = m_buttons.size() - 1;
}

if (focus)
{
m_selected_button = m_buttons.size() - 1;
}
void
Dialog::add_cancel_button(const std::string& text, const std::function<void ()>& callback)
{
add_button(text, callback);
m_cancel_button = m_buttons.size() - 1;
}

void
Dialog::add_button(const std::string& text, const std::function<void ()>& callback)
{
m_buttons.push_back({text, callback});
}

int
Expand Down Expand Up @@ -104,9 +115,6 @@ Dialog::event(const SDL_Event& ev)
{
m_selected_button = new_button;
on_button_click(m_selected_button);

// warning: this will "delete this"
MenuManager::instance().set_dialog({});
}
}
break;
Expand Down Expand Up @@ -153,9 +161,12 @@ Dialog::process_input(const Controller& controller)
controller.pressed(Controller::MENU_SELECT))
{
on_button_click(m_selected_button);
}

// warning: this will "delete this"
MenuManager::instance().set_dialog({});
if (m_cancel_button != -1 &&
controller.pressed(Controller::MENU_BACK))
{
on_button_click(m_cancel_button);
}
}

Expand Down Expand Up @@ -230,6 +241,7 @@ Dialog::on_button_click(int button) const
{
m_buttons[button].callback();
}
MenuManager::instance().set_dialog({});
}

/* EOF */
13 changes: 11 additions & 2 deletions src/gui/dialog.hpp
Expand Up @@ -39,6 +39,7 @@ class Dialog
std::string m_text;
std::vector<Button> m_buttons;
int m_selected_button;
int m_cancel_button;

Sizef m_text_size;

Expand All @@ -47,9 +48,17 @@ class Dialog
virtual ~Dialog();

void set_text(const std::string& text);

void add_button(const std::string& text, const std::function<void ()>& callback = {});

/** The default gets focused when the dialog is first shown */
void add_default_button(const std::string& text, const std::function<void ()>& callback = {});

/** The cancel button can not only be activated by selecting it, but
via the MENU_BACK button */
void add_cancel_button(const std::string& text, const std::function<void ()>& callback = {});

void clear_buttons();
void add_button(const std::string& text, const std::function<void ()>& callback = {},
bool focus = false);

void event(const SDL_Event& event);
void process_input(const Controller& controller);
Expand Down
2 changes: 1 addition & 1 deletion src/supertux/menu/download_dialog.cpp
Expand Up @@ -25,7 +25,7 @@ DownloadDialog::DownloadDialog(TransferStatusPtr status) :
m_status(status),
m_title()
{
add_button(_("Abort Download"), [this]{
add_default_button(_("Abort Download"), [this]{
on_abort();
});

Expand Down
6 changes: 3 additions & 3 deletions src/supertux/menu/main_menu.cpp
Expand Up @@ -83,12 +83,12 @@ MainMenu::menu_action(MenuItem* item)
case MNID_QUITMAINMENU:
std::unique_ptr<Dialog> dialog(new Dialog);
dialog->set_text(_("Do you really want to quit SuperTux?"));
dialog->add_button(_("Cancel"));
dialog->add_button(_("Quit SuperTux"), [] {
dialog->add_cancel_button(_("Cancel"));
dialog->add_default_button(_("Quit SuperTux"), [] {
MenuManager::instance().clear_menu_stack();
ScreenManager::current()->quit(std::unique_ptr<ScreenFade>(new FadeOut(0.25)));
SoundManager::current()->stop_music(0.25);
}, true);
});
MenuManager::instance().set_dialog(std::move(dialog));
break;
}
Expand Down

0 comments on commit 7831e81

Please sign in to comment.