|
@@ -10,6 +10,7 @@
|
|
|
|
|
|
struct SearchResult {
|
|
|
u32 code_point;
|
|
|
+ String code_point_string;
|
|
|
String display_text;
|
|
|
};
|
|
|
|
|
@@ -18,13 +19,16 @@ public:
|
|
|
CharacterSearchModel() { }
|
|
|
|
|
|
int row_count(GUI::ModelIndex const&) const override { return m_data.size(); }
|
|
|
- int column_count(GUI::ModelIndex const&) const override { return 1; }
|
|
|
+ int column_count(GUI::ModelIndex const&) const override { return 2; }
|
|
|
|
|
|
GUI::Variant data(GUI::ModelIndex const& index, GUI::ModelRole role) const override
|
|
|
{
|
|
|
auto& result = m_data.at(index.row());
|
|
|
- if (role == GUI::ModelRole::Display)
|
|
|
+ if (role == GUI::ModelRole::Display) {
|
|
|
+ if (index.column() == 0)
|
|
|
+ return result.code_point_string;
|
|
|
return result.display_text;
|
|
|
+ }
|
|
|
if (role == GUI::ModelRole::Custom)
|
|
|
return result.code_point;
|
|
|
return {};
|
|
@@ -52,15 +56,16 @@ CharacterSearchWidget::CharacterSearchWidget()
|
|
|
|
|
|
m_search_input = find_descendant_of_type_named<GUI::TextBox>("search_input");
|
|
|
m_search_button = find_descendant_of_type_named<GUI::Button>("search_button");
|
|
|
- m_results_list = find_descendant_of_type_named<GUI::ListView>("results_list");
|
|
|
+ m_results_table = find_descendant_of_type_named<GUI::TableView>("results_table");
|
|
|
|
|
|
m_search_input->on_return_pressed = [this] { search(); };
|
|
|
m_search_button->on_click = [this](auto) { search(); };
|
|
|
|
|
|
- m_results_list->horizontal_scrollbar().set_visible(false);
|
|
|
- m_results_list->set_model(adopt_ref(*new CharacterSearchModel()));
|
|
|
- m_results_list->on_activation = [&](GUI::ModelIndex const& index) {
|
|
|
- auto& model = static_cast<CharacterSearchModel&>(*m_results_list->model());
|
|
|
+ m_results_table->horizontal_scrollbar().set_visible(false);
|
|
|
+ m_results_table->set_column_headers_visible(false);
|
|
|
+ m_results_table->set_model(adopt_ref(*new CharacterSearchModel()));
|
|
|
+ m_results_table->on_activation = [&](GUI::ModelIndex const& index) {
|
|
|
+ auto& model = static_cast<CharacterSearchModel&>(*m_results_table->model());
|
|
|
auto code_point = model.data(index, GUI::ModelRole::Custom).as_u32();
|
|
|
if (on_character_selected)
|
|
|
on_character_selected(code_point);
|
|
@@ -75,7 +80,7 @@ void CharacterSearchWidget::search()
|
|
|
{
|
|
|
// TODO: Sort the results nicely. They're sorted by code-point for now, which is easy, but not the most useful.
|
|
|
// Sorting intelligently in a style similar to Assistant would be nicer.
|
|
|
- auto& model = static_cast<CharacterSearchModel&>(*m_results_list->model());
|
|
|
+ auto& model = static_cast<CharacterSearchModel&>(*m_results_table->model());
|
|
|
model.clear();
|
|
|
auto query = m_search_input->text();
|
|
|
if (query.is_empty())
|
|
@@ -83,9 +88,7 @@ void CharacterSearchWidget::search()
|
|
|
for_each_character_containing(query, [&](auto code_point, auto& display_name) {
|
|
|
StringBuilder builder;
|
|
|
builder.append_code_point(code_point);
|
|
|
- builder.append(" - ");
|
|
|
- builder.append(display_name);
|
|
|
|
|
|
- model.add_result({ code_point, builder.to_string() });
|
|
|
+ model.add_result({ code_point, builder.build(), display_name });
|
|
|
});
|
|
|
}
|