Author: alink
Date: Sun Jul  6 00:44:42 2008
New Revision: 27772

URL: http://svn.gna.org/viewcvs/wesnoth?rev=27772&view=rev
Log:
Add a filter text box to the recall dialog
Filter works on type, name and level (but not xp)
allowing to see all level 2 units by just typing "2"
This also make the "rename unit" feature more useful :)

Modified:
    trunk/src/menu_events.cpp

Modified: trunk/src/menu_events.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/menu_events.cpp?rev=27772&r1=27771&r2=27772&view=diff
==============================================================================
--- trunk/src/menu_events.cpp (original)
+++ trunk/src/menu_events.cpp Sun Jul  6 00:44:42 2008
@@ -84,17 +84,18 @@
        class delete_recall_unit : public gui::dialog_button_action
        {
        public:
-               delete_recall_unit(game_display& disp, std::vector<unit>& 
units) : disp_(disp), units_(units) {}
+               delete_recall_unit(game_display& disp, gui::filter_textbox& 
filter, std::vector<unit>& units) : disp_(disp), filter_(filter), units_(units) 
{}
        private:
                gui::dialog_button_action::RESULT button_pressed(int 
menu_selection);
 
                game_display& disp_;
+               gui::filter_textbox& filter_;
                std::vector<unit>& units_;
        };
 
        gui::dialog_button_action::RESULT 
delete_recall_unit::button_pressed(int menu_selection)
        {
-               const size_t index = size_t(menu_selection);
+               const size_t index = size_t(filter_.get_index(menu_selection));
                if(index < units_.size()) {
                        const unit& u = units_[index];
 
@@ -119,6 +120,8 @@
                                        return gui::CONTINUE_DIALOG;
                                }
                        }
+                       // Remove the item from filter_textbox memory
+                       filter_.delete_item(menu_selection);
 
                        units_.erase(units_.begin() + index);
                        recorder.add_disband(index);
@@ -953,7 +956,7 @@
                } else if(recall_list.empty()) {
                        gui::message_dialog(*gui_,"",_("There are no troops 
available to recall\n(You must have veteran survivors from a previous 
scenario)")).show();
                } else {
-                       std::vector<std::string> options;
+                       std::vector<std::string> options, options_to_filter;
 
                        std::ostringstream heading;
                        heading << HEADING_PREFIX << COLUMN_SEPARATOR << 
_("Type")
@@ -965,9 +968,10 @@
                        
sorter.set_alpha_sort(1).set_alpha_sort(2).set_id_sort(3).set_numeric_sort(4);
 
                        options.push_back(heading.str());
+                       options_to_filter.push_back(options.back());
 
                        for(std::vector<unit>::const_iterator u = 
recall_list.begin(); u != recall_list.end(); ++u) {
-                               std::stringstream option;
+                               std::stringstream option, option_to_filter;
                                const std::string& name = u->name().empty() ? 
"-" : u->name();
 
                                option << IMAGE_PREFIX << u->absolute_image();
@@ -986,25 +990,37 @@
                                        option << u->max_experience();
                                }
 
+                               option_to_filter << u->type_name() << " " << 
name << " " << u->level();
+
                                options.push_back(option.str());
-                       }
-
-                       delete_recall_unit recall_deleter(*gui_,recall_list);
-                       gui::dialog_button_info 
delete_button(&recall_deleter,_("Dismiss Unit"));
+                               
options_to_filter.push_back(option_to_filter.str());
+                       }
+
                        int res = 0;
 
                        {
-                               dialogs::units_list_preview_pane 
unit_preview(*gui_,&map_,recall_list);
                                gui::dialog rmenu(*gui_,_("Recall") + 
get_title_suffix(team_num),
                                                  _("Select unit:") + 
std::string("\n"),
                                                  gui::OK_CANCEL,
                                                  gui::dialog::default_style);
+                               rmenu.set_menu(options, &sorter);
+
+                               gui::filter_textbox* filter = new 
gui::filter_textbox(gui_->video(),
+                               _("Filter: "), options, options_to_filter, 1, 
rmenu, 200);
+                               rmenu.set_textbox(filter);
+
+                               delete_recall_unit recall_deleter(*gui_, 
*filter, recall_list);
+                               gui::dialog_button_info 
delete_button(&recall_deleter,_("Dismiss Unit"));
+                               rmenu.add_button(delete_button);
+
                                rmenu.add_button(new 
help::help_button(*gui_,"recruit_and_recall"),
                                        gui::dialog::BUTTON_HELP);
-                               rmenu.set_menu(options, &sorter);
+
+                               dialogs::units_list_preview_pane 
unit_preview(*gui_,&map_,recall_list, filter);
                                rmenu.add_pane(&unit_preview);
-                               rmenu.add_button(delete_button);
+
                                res = rmenu.show();
+                               res = filter->get_index(res);
                        }
 
                        if(res >= 0) {


_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits

Reply via email to