From 83719838aa5bed8ccc8bb2c0c086298324db0844 Mon Sep 17 00:00:00 2001 From: Bryan Schumaker Date: Thu, 20 Oct 2011 18:46:54 -0400 Subject: [PATCH] ocarina: Refresh path list when library is updated I respond to the LIBRARY_REFRESH callback by creating new path panels to show the updated information. --- include/ocarina/settings.h | 1 + ocarina/callback.cpp | 2 ++ ocarina/settings/library.cpp | 24 +++++++++++++++++++----- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/include/ocarina/settings.h b/include/ocarina/settings.h index e643644b..11f69703 100644 --- a/include/ocarina/settings.h +++ b/include/ocarina/settings.h @@ -10,5 +10,6 @@ void settings_init(); void add_settings_page(string, GtkWidget *); void library_settings_init(); +void library_settings_refresh(); #endif /* OCARINA_SETTINGS_H */ diff --git a/ocarina/callback.cpp b/ocarina/callback.cpp index 3871ca9b..a4060f21 100644 --- a/ocarina/callback.cpp +++ b/ocarina/callback.cpp @@ -4,6 +4,7 @@ #include #include #include +#include void cb_play() { @@ -29,6 +30,7 @@ void cb_library_refresh() { println("Ocarina LIBRARY_REFRESH callback!"); ocarina_library_refresh(); + library_settings_refresh(); } void setup_callbacks() diff --git a/ocarina/settings/library.cpp b/ocarina/settings/library.cpp index 0fd75dba..5e67a125 100644 --- a/ocarina/settings/library.cpp +++ b/ocarina/settings/library.cpp @@ -1,5 +1,6 @@ #include +#include using namespace std; #include @@ -12,6 +13,8 @@ using namespace std; /* This is a gtk vbox */ static GtkWidget *library_settings = NULL; +static GtkWidget *path_panels = NULL; +static list path_widgets; static void on_click_add(GtkWidget *b, GdkEvent *e, gpointer d) { @@ -75,9 +78,8 @@ static void add_library_panel(GtkWidget *content) box_pack_start(panel_box, content, TRUE, TRUE, 0); box_pack_start(panel_box, sep, TRUE, TRUE, 0); - box_pack_start(library_settings, panel_box, FALSE, FALSE, 0); - - gtk_widget_show_all(panel_box); + box_pack_start(path_panels, panel_box, FALSE, FALSE, 0); + path_widgets.push_back(panel_box); } static void add_library_path(struct libsaria::library::PathInfo &info) @@ -88,18 +90,30 @@ static void add_library_path(struct libsaria::library::PathInfo &info) add_library_panel(main_box); } +void library_settings_refresh() +{ + while (path_widgets.size() != 0) { + gtk_widget_destroy(path_widgets.front()); + path_widgets.pop_front(); + } + + libsaria::library::for_each_path(add_library_path); + gtk_widget_show_all(library_settings); +} + void library_settings_init() { GtkWidget *button_row = gtk_hbox_new(FALSE, 0); library_settings = gtk_vbox_new(FALSE, 0); + path_panels = gtk_vbox_new(FALSE, 0); libsaria::library::for_each_path(add_library_path); + box_pack_start(library_settings, path_panels, FALSE, FALSE, 0); box_pack_start(library_settings, button_row, FALSE, FALSE, 0); box_pack_end(button_row, make_add_button(), FALSE, FALSE, 0); box_pack_end(button_row, make_update_button(), FALSE, FALSE, 0); - gtk_widget_show(library_settings); - gtk_widget_show(button_row); + gtk_widget_show_all(library_settings); add_settings_page("Library", library_settings); }