mirror of
https://github.com/wesnoth/wesnoth
synced 2025-05-03 17:51:05 +00:00
tunit_crteate: Port Filter functionality from Load Game dialog
This commit is contained in:
parent
e9cfef3b72
commit
0e45d64a71
@ -101,6 +101,7 @@ REGISTER_DIALOG(unit_create)
|
|||||||
tunit_create::tunit_create(display* disp)
|
tunit_create::tunit_create(display* disp)
|
||||||
: gender_(last_gender)
|
: gender_(last_gender)
|
||||||
, choice_(last_chosen_type_id)
|
, choice_(last_chosen_type_id)
|
||||||
|
, last_words_()
|
||||||
, disp_(disp)
|
, disp_(disp)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -113,10 +114,12 @@ void tunit_create::pre_show(CVideo& /*video*/, twindow& window)
|
|||||||
= find_widget<ttoggle_button>(&window, "female_toggle", false);
|
= find_widget<ttoggle_button>(&window, "female_toggle", false);
|
||||||
tlistbox& list = find_widget<tlistbox>(&window, "unit_type_list", false);
|
tlistbox& list = find_widget<tlistbox>(&window, "unit_type_list", false);
|
||||||
|
|
||||||
/**find_widget<ttext_box>(&window, "filter_box", false, true)
|
ttext_box* filter
|
||||||
.set_text_changed_callback(
|
= find_widget<ttext_box>(&window, "filter_box", false, true);
|
||||||
boost::bind(&tunit_create::filter_text_changed, this, _1, _2));**/
|
|
||||||
|
filter->set_text_changed_callback(
|
||||||
|
boost::bind(&tunit_create::filter_text_changed, this, _1, _2));
|
||||||
|
|
||||||
#ifdef GUI2_EXPERIMENTAL_LISTBOX
|
#ifdef GUI2_EXPERIMENTAL_LISTBOX
|
||||||
connect_signal_notify_modified(*list,
|
connect_signal_notify_modified(*list,
|
||||||
boost::bind(&tunit_create::list_item_clicked,
|
boost::bind(&tunit_create::list_item_clicked,
|
||||||
@ -240,12 +243,8 @@ void tunit_create::print_stats(std::stringstream& str, const int row)
|
|||||||
const unit_type* u = units_[static_cast<size_t>(row)];
|
const unit_type* u = units_[static_cast<size_t>(row)];
|
||||||
|
|
||||||
str << _("Level ") << u->level() << "\n";
|
str << _("Level ") << u->level() << "\n";
|
||||||
//str << unit_type::alignment_description(
|
|
||||||
// u->alignment(),
|
|
||||||
// u->genders().front()) << "\n";
|
|
||||||
//str << u->race()->name(u->genders().front()) << "\n";
|
|
||||||
|
|
||||||
str << "\n";
|
str << "\n ";
|
||||||
|
|
||||||
str << _("HP: ")
|
str << _("HP: ")
|
||||||
<< "<span color='#21e100'>" << u->hitpoints() << "/" << u->hitpoints() << "</span>" << "\n";
|
<< "<span color='#21e100'>" << u->hitpoints() << "/" << u->hitpoints() << "</span>" << "\n";
|
||||||
@ -324,9 +323,52 @@ void tunit_create::list_item_clicked(twindow& window)
|
|||||||
details.set_use_markup(true);
|
details.set_use_markup(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**bool tunit_create::filter_text_changed(ttext_* textbox, const std::string& text)
|
bool tunit_create::filter_text_changed(ttext_* textbox, const std::string& text)
|
||||||
{
|
{
|
||||||
}**/
|
twindow& window = *textbox->get_window();
|
||||||
|
|
||||||
|
tlistbox& list = find_widget<tlistbox>(&window, "unit_type_list", false);
|
||||||
|
|
||||||
|
const std::vector<std::string> words = utils::split(text, ' ');
|
||||||
|
|
||||||
|
if(words == last_words_)
|
||||||
|
return false;
|
||||||
|
last_words_ = words;
|
||||||
|
|
||||||
|
std::vector<bool> show_items(list.get_item_count(), true);
|
||||||
|
|
||||||
|
if(!text.empty()) {
|
||||||
|
for(unsigned int i = 0; i < list.get_item_count(); i++) {
|
||||||
|
tgrid* row = list.get_row_grid(i);
|
||||||
|
|
||||||
|
tgrid::iterator it = row->begin();
|
||||||
|
tlabel& type_label
|
||||||
|
= find_widget<tlabel>(*it, "unit_type", false);
|
||||||
|
|
||||||
|
bool found = false;
|
||||||
|
FOREACH(const AUTO & word, words)
|
||||||
|
{
|
||||||
|
found = std::search(type_label.label().str().begin(),
|
||||||
|
type_label.label().str().end(),
|
||||||
|
word.begin(),
|
||||||
|
word.end(),
|
||||||
|
chars_equal_insensitive)
|
||||||
|
!= type_label.label().str().end();
|
||||||
|
|
||||||
|
if(!found) {
|
||||||
|
// one word doesn't match, we don't reach words.end()
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
show_items[i] = found;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
list.set_row_shown(show_items);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void tunit_create::profile_button_callback(twindow& window)
|
void tunit_create::profile_button_callback(twindow& window)
|
||||||
{
|
{
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#define GUI_DIALOGS_UNIT_CREATE_HPP_INCLUDED
|
#define GUI_DIALOGS_UNIT_CREATE_HPP_INCLUDED
|
||||||
|
|
||||||
#include "gui/dialogs/dialog.hpp"
|
#include "gui/dialogs/dialog.hpp"
|
||||||
|
#include "gui/widgets/text.hpp"
|
||||||
#include "race.hpp"
|
#include "race.hpp"
|
||||||
#include "unit_types.hpp"
|
#include "unit_types.hpp"
|
||||||
|
|
||||||
@ -57,6 +58,8 @@ private:
|
|||||||
|
|
||||||
std::string choice_;
|
std::string choice_;
|
||||||
|
|
||||||
|
std::vector<std::string> last_words_;
|
||||||
|
|
||||||
display* disp_;
|
display* disp_;
|
||||||
|
|
||||||
/** Inherited from tdialog, implemented by REGISTER_DIALOG. */
|
/** Inherited from tdialog, implemented by REGISTER_DIALOG. */
|
||||||
@ -77,7 +80,7 @@ private:
|
|||||||
|
|
||||||
/** Callbacks */
|
/** Callbacks */
|
||||||
void list_item_clicked(twindow& window);
|
void list_item_clicked(twindow& window);
|
||||||
//void filter_text_changed(ttext_* textbox, const std::string& text);
|
bool filter_text_changed(ttext_* textbox, const std::string& text);
|
||||||
void profile_button_callback(twindow& window);
|
void profile_button_callback(twindow& window);
|
||||||
void gender_toggle_callback(twindow& window);
|
void gender_toggle_callback(twindow& window);
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user