From 44cdd3164cb959ab9418ac310b52388d8cc96ca7 Mon Sep 17 00:00:00 2001 From: Nedko Arnaudov Date: Sun, 21 Feb 2010 20:11:30 +0200 Subject: [PATCH] Use custom status icons (and more of them). Fixes #65 --- art/status_down.png | Bin 0 -> 894 bytes art/status_error.png | Bin 0 -> 952 bytes art/status_started.png | Bin 0 -> 1044 bytes art/status_stopped.png | Bin 0 -> 952 bytes art/status_unloaded.png | Bin 0 -> 894 bytes art/status_warning.png | Bin 0 -> 894 bytes gui/main.c | 88 +++++++++++++++++++++++++++++++--------- wscript | 5 +++ 8 files changed, 73 insertions(+), 20 deletions(-) create mode 100644 art/status_down.png create mode 100644 art/status_error.png create mode 100644 art/status_started.png create mode 100644 art/status_stopped.png create mode 100644 art/status_unloaded.png create mode 100644 art/status_warning.png diff --git a/art/status_down.png b/art/status_down.png new file mode 100644 index 0000000000000000000000000000000000000000..90e26e5bc439c627e86dc180fa33dfb4b7931238 GIT binary patch literal 894 zcmV-^1A+XBP)Wv1T zw+fJOUH1ae1wfP*0i)(On`w?oI&=F5KMs}&Z5b>0!U=EI+ZI=GoYphIXp;T%$T<~6$eJq1GKyRT;Vy1wOj{36X z^LPtobZoREF3#2kP*oBqPqk+ehBJNuJ22MT1E^?Au1x`~`8x4)HZLvJ!wtG=fB-~9 z+7q^wzITy(0{rpk`;FrFKBgj~mva|89;`Qq0{z?L1HueMM9s_#7_4o8DSBpZ)c>Cr8=fzls<$*KuE0DwPSqGc%K>EDH2BJrMVs0GhrEteTnk6$71n U&c>$oB>(^b07*qoM6N<$f+xtJQ~&?~ literal 0 HcmV?d00001 diff --git a/art/status_error.png b/art/status_error.png new file mode 100644 index 0000000000000000000000000000000000000000..2a7da6e2a8e3b8daf8e2a51968cfc8083b0a6628 GIT binary patch literal 952 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 U&c>$oB>(^b07*qoM6N<$f+xtJQ~&?~ literal 0 HcmV?d00001 diff --git a/art/status_warning.png b/art/status_warning.png new file mode 100644 index 0000000000000000000000000000000000000000..90e26e5bc439c627e86dc180fa33dfb4b7931238 GIT binary patch literal 894 zcmV-^1A+XBP)Wv1T zw+fJOUH1ae1wfP*0i)(On`w?oI&=F5KMs}&Z5b>0!U=EI+ZI=GoYphIXp;T%$T<~6$eJq1GKyRT;Vy1wOj{36X z^LPtobZoREF3#2kP*oBqPqk+ehBJNuJ22MT1E^?Au1x`~`8x4)HZLvJ!wtG=fB-~9 z+7q^wzITy(0{rpk`;FrFKBgj~mva|89;`Qq0{z?L1HueMM9s_#7_4o8DSBpZ)c>Cr8=fzls<$*KuE0DwPSqGc%K>EDH2BJrMVs0GhrEteTnk6$71n U&c>$oB>(^b07*qoM6N<$f+xtJQ~&?~ literal 0 HcmV?d00001 diff --git a/gui/main.c b/gui/main.c index 69141951..169f68e1 100644 --- a/gui/main.c +++ b/gui/main.c @@ -115,6 +115,14 @@ static unsigned int g_studio_state = STUDIO_STATE_UNKNOWN; static unsigned int g_jack_state = JACK_STATE_NA; +#define ABOUT_DIALOG_LOGO "ladish-logo-128x128.png" +#define STATUS_ICON_DOWN "status_down.png" /* temporary down during service restart */ +#define STATUS_ICON_UNLOADED "status_unloaded.png" +#define STATUS_ICON_STARTED "status_started.png" +#define STATUS_ICON_STOPPED "status_stopped.png" +#define STATUS_ICON_WARNING "status_warning.png" /* xruns */ +#define STATUS_ICON_ERROR "status_error.png" /* bad error */ + struct studio_list { int count; @@ -156,6 +164,42 @@ gtkmm_set_width_for_given_text (Gtk::Widget &w, const gchar *text, #endif +static GdkPixbuf * load_pixbuf_internal(const char * directory, const char * filename) +{ + char * fullpath; + GdkPixbuf * pixbuf; + + fullpath = catdup(directory, filename); + if (fullpath == NULL) + { + return NULL; + } + + pixbuf = gdk_pixbuf_new_from_file(fullpath, NULL); + + free(fullpath); + + return pixbuf; +} + +static GdkPixbuf * load_pixbuf(const char * filename) +{ + GdkPixbuf * pixbuf; + static const char * pixbuf_dirs[] = {"./art/", DATA_DIR "/", NULL}; + const char ** dir; + + for (dir = pixbuf_dirs; *dir != NULL; dir++) + { + pixbuf = load_pixbuf_internal(*dir, filename); + if (pixbuf != NULL) + { + return pixbuf; + } + } + + return NULL; +} + void set_latency_items_sensivity(bool sensitive) { gtk_widget_set_sensitive(GTK_WIDGET(g_menu_item_jack_latency_32), sensitive); @@ -667,8 +711,9 @@ bool studio_state_changed(char ** name_ptr_ptr) const char * status; const char * name; char * buffer; - const gchar * stock_id; + const char * status_image_path; const char * tooltip; + GdkPixbuf * pixbuf; gtk_widget_set_sensitive(g_menu_item_start_studio, g_studio_state == STUDIO_STATE_STOPPED); gtk_widget_set_sensitive(g_menu_item_stop_studio, g_studio_state == STUDIO_STATE_STARTED); @@ -681,14 +726,14 @@ bool studio_state_changed(char ** name_ptr_ptr) //gtk_widget_set_sensitive(g_menu_item_destroy_room, g_studio_loaded); //gtk_widget_set_sensitive(g_menu_item_load_project, g_studio_loaded); - stock_id = NULL; tooltip = NULL; + status_image_path = NULL; switch (g_jack_state) { case JACK_STATE_NA: tooltip = status = "JACK is sick"; - stock_id = GTK_STOCK_DIALOG_WARNING; + status_image_path = STATUS_ICON_ERROR; break; case JACK_STATE_STOPPED: status = "Stopped"; @@ -699,7 +744,7 @@ bool studio_state_changed(char ** name_ptr_ptr) default: status = "???"; tooltip = "Internal error - unknown jack state"; - stock_id = GTK_STOCK_DIALOG_WARNING; + status_image_path = STATUS_ICON_ERROR; } buffer = NULL; @@ -708,19 +753,21 @@ bool studio_state_changed(char ** name_ptr_ptr) { case STUDIO_STATE_NA: name = "ladishd is down"; + status_image_path = STATUS_ICON_DOWN; break; case STUDIO_STATE_SICK: case STUDIO_STATE_UNKNOWN: tooltip = name = "ladishd is sick"; - stock_id = GTK_STOCK_DIALOG_WARNING; + status_image_path = STATUS_ICON_ERROR; break; case STUDIO_STATE_UNLOADED: name = "No studio loaded"; + status_image_path = STATUS_ICON_UNLOADED; break; case STUDIO_STATE_CRASHED: status = "Crashed"; tooltip = "Crashed studio, save your work if you can and unload the studio"; - stock_id = GTK_STOCK_DIALOG_WARNING; + status_image_path = STATUS_ICON_ERROR; /* fall through */ case STUDIO_STATE_STOPPED: case STUDIO_STATE_STARTED: @@ -728,7 +775,7 @@ bool studio_state_changed(char ** name_ptr_ptr) { tooltip = "failed to get studio name"; log_error("%s", tooltip); - stock_id = GTK_STOCK_DIALOG_WARNING; + status_image_path = STATUS_ICON_ERROR; } else { @@ -736,11 +783,11 @@ bool studio_state_changed(char ** name_ptr_ptr) switch (g_studio_state) { case STUDIO_STATE_STARTED: - stock_id = GTK_STOCK_YES; + status_image_path = STATUS_ICON_STARTED; tooltip = "Studio is started"; break; case STUDIO_STATE_STOPPED: - stock_id = GTK_STOCK_NO; + status_image_path = STATUS_ICON_STOPPED; tooltip = "Studio is stopped"; break; } @@ -749,14 +796,22 @@ bool studio_state_changed(char ** name_ptr_ptr) default: name = "???"; tooltip = "Internal error - unknown studio state"; - stock_id = GTK_STOCK_DIALOG_WARNING; + status_image_path = STATUS_ICON_ERROR; } //gtk_progress_bar_set_text(GTK_PROGRESS_BAR(g_xrun_progress_bar), status); gtk_label_set_text(GTK_LABEL(g_studio_status_label), name); - log_error("status icon stock id: %s", stock_id); - gtk_image_set_from_stock(GTK_IMAGE(g_status_image), stock_id, GTK_ICON_SIZE_SMALL_TOOLBAR); + if (status_image_path == NULL || (pixbuf = load_pixbuf(status_image_path)) == NULL) + { + gtk_image_set_from_stock(GTK_IMAGE(g_status_image), GTK_STOCK_MISSING_IMAGE, GTK_ICON_SIZE_SMALL_TOOLBAR); + } + else + { + gtk_image_set_from_pixbuf(GTK_IMAGE(g_status_image), pixbuf); + g_object_unref(pixbuf); + } + //gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(g_status_tool_item), tooltip); if (g_jack_state == JACK_STATE_STARTED) @@ -1075,8 +1130,6 @@ static char * read_file_contents(const char * filename) return buffer; } -#define ABOUT_DIALOG_LOGO "ladish-logo-128x128.png" - static void show_about(void) { GtkWidget * dialog; @@ -1085,12 +1138,7 @@ static void show_about(void) const char * artists[] = {"Lapo Calamandrei", NULL}; char * license; - pixbuf = gdk_pixbuf_new_from_file("./art/" ABOUT_DIALOG_LOGO, NULL); - if (pixbuf == NULL) - { - pixbuf = gdk_pixbuf_new_from_file(DATA_DIR "/" ABOUT_DIALOG_LOGO, NULL); - } - + pixbuf = load_pixbuf(ABOUT_DIALOG_LOGO); license = read_file_contents(DATA_DIR "/COPYING"); dialog = get_gtk_builder_widget("about_win"); diff --git a/wscript b/wscript index 6a960770..e8201f4e 100644 --- a/wscript +++ b/wscript @@ -362,6 +362,11 @@ def build(bld): #for icon_size in icon_sizes: # install_as(os.path.normpath(bld.env()['DATADIR'] + '/icons/hicolor/' + icon_size + '/apps/'), bld.env()['APP_INSTALL_NAME'] + '.png', 'icons/' + icon_size + '/patchage.png') + status_images = [] + for status in ["down", "unloaded", "started", "stopped", "warning", "error"]: + status_images.append("art/status_" + status + ".png") + + bld.install_files(bld.env['DATA_DIR'], status_images) bld.install_files(bld.env['DATA_DIR'], "art/ladish-logo-128x128.png") bld.install_files(bld.env['DATA_DIR'], ["COPYING", "AUTHORS", "README", "NEWS"])