Add the capability to set a sort object on a dialog to set_menu,

...and use it to rewrite the recall dialog as an instantiation of dialog.
This commit is contained in:
Eric S. Raymond 2007-07-06 10:49:28 +00:00
parent c87e038988
commit 63c59d44d0
4 changed files with 21 additions and 20 deletions

View file

@ -261,7 +261,6 @@ reduced_editor_sources = \
animated_editor.cpp \
astarnode.cpp \
astarsearch.cpp \
basic_dialog.cpp \
builder.cpp \
cavegen.cpp \
checksum.cpp \
@ -422,7 +421,6 @@ noinst_HEADERS = \
array.hpp \
astarnode.hpp \
attack_prediction.hpp \
basic_dialog.hpp \
builder.hpp \
cavegen.hpp \
checksum.hpp \

View file

@ -242,10 +242,10 @@ void dialog::set_textbox(const std::string& text_widget_label,
text_widget_->set_wrap(!editable_textbox);
}
void dialog::set_menu(const std::vector<std::string> &menu_items)
void dialog::set_menu(const std::vector<std::string> &menu_items, menu::sorter* sorter)
{
set_menu(new gui::menu(disp_.video(), menu_items, (type_==MESSAGE),
-1, dialog::max_menu_width, NULL, &menu::default_style, false));
-1, dialog::max_menu_width, sorter, &menu::default_style, false));
}
menu& dialog::get_menu()

View file

@ -194,7 +194,7 @@ public:
void set_image(dialog_image *const img) { delete image_; image_ = img; }
void set_image(surface surf, const std::string &caption="");
void set_menu(menu *const m) { if(menu_ != empty_menu) delete menu_; menu_ = m; }
void set_menu(const std::vector<std::string> & menu_items);
void set_menu(const std::vector<std::string> & menu_items, menu::sorter* sorter=NULL);
//add_pane - preview panes are not currently memory managed (for backwards compat)
void add_pane(preview_pane *const pp) { preview_panes_.push_back(pp); }

View file

@ -14,6 +14,7 @@
#include "global.hpp"
#include "construct_dialog.hpp"
#include "dialogs.hpp"
#include "game_display.hpp"
#include "game_config.hpp"
@ -749,10 +750,14 @@ namespace events{
std::vector<gui::preview_pane*> preview_panes;
preview_panes.push_back(&unit_preview);
recruit_res = gui::show_dialog(*gui_,NULL,_("Recruit"),
_("Select unit:") + std::string("\n"),
gui::OK_CANCEL,&items,&preview_panes,"",NULL,-1,NULL,-1,-1,
NULL,NULL,"recruit_and_recall");
gui::dialog rmenu(*gui_,_("Recruit"),
_("Select unit:") + std::string("\n"),
gui::OK_CANCEL,
&gui::dialog::default_style,
"recruit_and_recall");
rmenu.set_menu(items);
rmenu.set_panes(preview_panes);
recruit_res = rmenu.show();
}
if(recruit_res != -1) {
@ -889,21 +894,19 @@ namespace events{
delete_recall_unit recall_deleter(*gui_,recall_list);
gui::dialog_button_info delete_button(&recall_deleter,_("Dismiss Unit"));
std::vector<gui::dialog_button_info> buttons;
buttons.push_back(delete_button);
int res = 0;
{
dialogs::unit_preview_pane unit_preview(*gui_,&map_,recall_list);
std::vector<gui::preview_pane*> preview_panes;
preview_panes.push_back(&unit_preview);
res = gui::show_dialog(*gui_,NULL,_("Recall"),
_("Select unit:") + std::string("\n"),
gui::OK_CANCEL,&options,
&preview_panes,"",NULL,-1,
NULL,-1,-1,NULL,&buttons,"",&sorter);
gui::dialog rmenu(*gui_,_("Recall"),
_("Select unit:") + std::string("\n"),
gui::OK_CANCEL,
&gui::dialog::default_style,
"recruit_and_recall");
rmenu.set_menu(options, &sorter);
rmenu.add_pane(&unit_preview);
rmenu.add_button(delete_button);
res = rmenu.show();
}
if(res >= 0) {