mirror of
https://github.com/zebrajr/SamRewritten.git
synced 2025-12-06 00:19:47 +01:00
Implement stats search bar
This commit is contained in:
parent
1072ca4653
commit
1b3cee08a8
|
|
@ -175,6 +175,62 @@ Give it some time, eventually it'll finish downloading all the pretty icons!</pr
|
|||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<object class="GtkBox" id="fetch_stats_placeholder">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkSeparator">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="opacity">0</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinner">
|
||||
<property name="width_request">34</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="hexpand">False</property>
|
||||
<property name="vexpand">False</property>
|
||||
<property name="active">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">SamRewritten is currently fetching your stats.</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="padding">7</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSeparator">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="opacity">0</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<object class="GtkBox" id="no_achievements_found_placeholder">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
|
|
@ -285,6 +341,61 @@ Did you make a typo?</property>
|
|||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<object class="GtkBox" id="no_stats_found_placeholder">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkSeparator">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="opacity">0</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="pixel_size">34</property>
|
||||
<property name="icon_name">face-crying</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">No stats found!
|
||||
Did you make a typo? Or maybe this game has no stats.</property>
|
||||
<property name="justify">center</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSeparator">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="opacity">0</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<object class="GtkPopoverMenu" id="popovermenu">
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
|
|
@ -431,6 +542,20 @@ Did you make a typo?</property>
|
|||
<property name="position">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSearchEntry" id="stat_search_bar">
|
||||
<property name="can_focus">True</property>
|
||||
<property name="width_chars">26</property>
|
||||
<property name="primary_icon_name">edit-find-symbolic</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">False</property>
|
||||
<property name="placeholder_text" translatable="yes">Name of the stat...</property>
|
||||
<property name="input_hints">GTK_INPUT_HINT_NO_SPELLCHECK | GTK_INPUT_HINT_NONE</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkMenuButton">
|
||||
<property name="visible">True</property>
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ MainPickerWindow::MainPickerWindow(GtkApplicationWindow* cobject, const Glib::Re
|
|||
m_builder->get_widget("game_list", m_game_list);
|
||||
m_builder->get_widget("game_search_bar", m_game_search_bar);
|
||||
m_builder->get_widget("achievement_search_bar", m_achievement_search_bar);
|
||||
m_builder->get_widget("stat_search_bar", m_stat_search_bar);
|
||||
m_builder->get_widget("achievement_list", m_achievement_list);
|
||||
m_builder->get_widget("stat_list", m_stat_list);
|
||||
m_builder->get_widget("about_dialog", m_about_dialog);
|
||||
|
|
@ -44,6 +45,8 @@ MainPickerWindow::MainPickerWindow(GtkApplicationWindow* cobject, const Glib::Re
|
|||
m_game_list->signal_row_activated().connect(sigc::mem_fun(this, &MainPickerWindow::on_game_row_activated));
|
||||
m_game_search_bar->signal_search_changed().connect(sigc::mem_fun(this, &MainPickerWindow::on_game_search_changed));
|
||||
m_achievement_search_bar->signal_search_changed().connect(sigc::mem_fun(this, &MainPickerWindow::on_achievement_search_changed));
|
||||
m_stat_search_bar->signal_search_changed().connect(sigc::mem_fun(this, &MainPickerWindow::on_stat_search_changed));
|
||||
m_achievement_and_stat_notebook->signal_switch_page().connect(sigc::mem_fun(this, &MainPickerWindow::on_page_switched));
|
||||
m_refresh_games_button->signal_clicked().connect(sigc::mem_fun(this, &MainPickerWindow::on_refresh_games_button_clicked));
|
||||
m_refresh_achievements_button->signal_clicked().connect(sigc::mem_fun(this, &MainPickerWindow::on_refresh_achievements_button_clicked));
|
||||
m_back_button->signal_clicked().connect(sigc::mem_fun(this, &MainPickerWindow::on_back_button_clicked));
|
||||
|
|
@ -114,6 +117,36 @@ MainPickerWindow::on_achievement_search_changed() {
|
|||
}
|
||||
// => on_achievement_search_changed
|
||||
|
||||
void
|
||||
MainPickerWindow::on_stat_search_changed() {
|
||||
const std::string filter_text = m_stat_search_bar->get_text();
|
||||
m_stat_list->show_all();
|
||||
|
||||
if ( filter_text.empty() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
for ( StatBoxRow* row : m_stat_list_rows ) {
|
||||
// stats don't have names, so use ids
|
||||
if ( !strstri(row->get_stat().id, filter_text) ) {
|
||||
row->hide();
|
||||
}
|
||||
}
|
||||
}
|
||||
// => on_stat_search_changed
|
||||
|
||||
void
|
||||
MainPickerWindow::on_page_switched(Widget* page, guint page_number) {
|
||||
// We only have two pages
|
||||
if (page_number == 0) {
|
||||
m_achievement_search_bar->set_visible(true);
|
||||
m_stat_search_bar->set_visible(false);
|
||||
} else {
|
||||
m_achievement_search_bar->set_visible(false);
|
||||
m_stat_search_bar->set_visible(true);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
MainPickerWindow::on_game_row_activated(Gtk::ListBoxRow* row) {
|
||||
AppBoxRow* game_row = static_cast<AppBoxRow*>(row);
|
||||
|
|
@ -391,6 +424,7 @@ void
|
|||
MainPickerWindow::switch_to_achievement_page() {
|
||||
m_back_button->set_visible(true);
|
||||
m_achievement_search_bar->set_visible(true);
|
||||
m_stat_search_bar->set_visible(false);
|
||||
m_store_button->set_visible(true);
|
||||
m_refresh_achievements_button->set_visible(true);
|
||||
m_unlock_all_achievements_button->set_visible(true);
|
||||
|
|
@ -411,6 +445,7 @@ void
|
|||
MainPickerWindow::switch_to_games_page() {
|
||||
m_back_button->set_visible(false);
|
||||
m_achievement_search_bar->set_visible(false);
|
||||
m_stat_search_bar->set_visible(false);
|
||||
m_store_button->set_visible(false);
|
||||
m_refresh_achievements_button->set_visible(false);
|
||||
m_unlock_all_achievements_button->set_visible(false);
|
||||
|
|
@ -422,6 +457,7 @@ MainPickerWindow::switch_to_games_page() {
|
|||
|
||||
m_main_stack->set_visible_child(*m_game_list_view);
|
||||
m_achievement_search_bar->set_text("");
|
||||
m_stat_search_bar->set_text("");
|
||||
reset_achievement_list();
|
||||
reset_stat_list();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -136,6 +136,8 @@ private:
|
|||
// Gtk Callbacks
|
||||
void on_game_search_changed();
|
||||
void on_achievement_search_changed();
|
||||
void on_stat_search_changed();
|
||||
void on_page_switched(Widget* page, guint page_number);
|
||||
void on_game_row_activated(Gtk::ListBoxRow* row);
|
||||
void on_refresh_games_button_clicked();
|
||||
void on_refresh_achievements_button_clicked();
|
||||
|
|
@ -169,6 +171,7 @@ private:
|
|||
Gtk::Stack *m_main_stack;
|
||||
Gtk::SearchEntry *m_game_search_bar;
|
||||
Gtk::SearchEntry *m_achievement_search_bar;
|
||||
Gtk::SearchEntry *m_stat_search_bar;
|
||||
Gtk::ScrolledWindow *m_game_list_view;
|
||||
Gtk::Notebook *m_achievement_and_stat_notebook;
|
||||
Gtk::Box *m_fetch_games_placeholder;
|
||||
|
|
|
|||
|
|
@ -16,12 +16,13 @@ public:
|
|||
StatBoxRow(const StatValue_t& stat);
|
||||
virtual ~StatBoxRow();
|
||||
|
||||
StatValue_t get_stat() { return m_data; };
|
||||
private:
|
||||
/**
|
||||
* Interpret a change in the text field
|
||||
*/
|
||||
void on_new_value_changed(void);
|
||||
|
||||
private:
|
||||
StatValue_t m_data;
|
||||
Gtk::SpinButton m_new_value_entry;
|
||||
Gtk::Box m_invalid_conversion_box;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user