From 6fd5e76a576c0705b931bc31aa17f0f15c689bda Mon Sep 17 00:00:00 2001 From: Harald Judt Date: Thu, 24 May 2012 12:50:13 +0200 Subject: Further reorganize code and fix vertical mode. Let's do away with the two GtkBoxes and use only one. Some more code used for widget layout and presentation is moved to setup_monitor, additionally to more general code cleanup. Vertical mode layout is now consistent with the other plugins in regard to widget rotation etc. However, gtk_label_set_width_chars messes up the alignment in vertical mode and the label sizes would not be respected, so we set the label size manually using an arbitrary size of 60, which seems to have the same effect as the old method. --- panel-plugin/netload.c | 101 +++++++++++++++++++++++++---------------------- 1 files changed, 54 insertions(+), 47 deletions(-) diff --git a/panel-plugin/netload.c b/panel-plugin/netload.c index 7cef218..5517d68 100644 --- a/panel-plugin/netload.c +++ b/panel-plugin/netload.c @@ -35,6 +35,7 @@ #define BORDER 8 +#define LABEL_SIZE 60 #define LABEL_BORDER 2 #define PROGRESS_BAR_SIZE 8 @@ -84,7 +85,6 @@ typedef struct typedef struct { - GtkWidget *box; GtkWidget *label; GtkWidget *rcv_label; GtkWidget *sent_label; @@ -144,6 +144,12 @@ typedef struct } t_global_monitor; +static void monitor_set_orientation (XfcePanelPlugin *plugin, GtkOrientation orientation, + t_global_monitor *global); +static gboolean monitor_set_size(XfcePanelPlugin *plugin, int size, t_global_monitor *global); +static void setup_monitor(t_global_monitor *global, gboolean supress_warnings); + + /* ---------------------------------------------------------------------------------------------- */ static gboolean update_monitors(t_global_monitor *global) { @@ -297,29 +303,33 @@ static void monitor_set_orientation (XfcePanelPlugin *plugin, GtkOrientation ori } xfce_hvbox_set_orientation(XFCE_HVBOX(global->box), orientation); - xfce_hvbox_set_orientation(XFCE_HVBOX(global->monitor->box), orientation); - if (orientation == GTK_ORIENTATION_HORIZONTAL) + if (orientation != GTK_ORIENTATION_VERTICAL) { + gtk_label_set_angle(GTK_LABEL(global->monitor->label), 0); gtk_misc_set_alignment(GTK_MISC(global->monitor->rcv_label), 1.0f, 0.5f); gtk_misc_set_alignment(GTK_MISC(global->monitor->sent_label), 0.0f, 0.5f); + gtk_label_set_angle(GTK_LABEL(global->monitor->rcv_label), 0); + gtk_label_set_angle(GTK_LABEL(global->monitor->sent_label), 0); for (i = 0; i < SUM; i++) { gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(global->monitor->status[i]), GTK_PROGRESS_BOTTOM_TO_TOP); - gtk_widget_set_size_request(global->monitor->status[i], PROGRESS_BAR_SIZE, -1); } } else { - gtk_misc_set_alignment(GTK_MISC(global->monitor->rcv_label), 1.0f, 0.0f); - gtk_misc_set_alignment(GTK_MISC(global->monitor->sent_label), 1.0f, 1.0f); + gtk_label_set_angle(GTK_LABEL(global->monitor->label), 270); + gtk_label_set_angle(GTK_LABEL(global->monitor->rcv_label), 270); + gtk_label_set_angle(GTK_LABEL(global->monitor->sent_label), 270); + gtk_misc_set_alignment(GTK_MISC(global->monitor->rcv_label), 0.5f, 1.0f); + gtk_misc_set_alignment(GTK_MISC(global->monitor->sent_label), 0.5f, 0.0f); for (i = 0; i < SUM; i++) { gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(global->monitor->status[i]), GTK_PROGRESS_LEFT_TO_RIGHT); - gtk_widget_set_size_request(global->monitor->status[i], -1, PROGRESS_BAR_SIZE); } } + monitor_set_size(plugin, xfce_panel_plugin_get_size(plugin), global); run_update( global ); } @@ -356,6 +366,7 @@ static t_global_monitor * monitor_new(XfcePanelPlugin *plugin) { t_global_monitor *global; gint i; + GtkOrientation orientation = xfce_panel_plugin_get_orientation(plugin); global = g_new(t_global_monitor, 1); global->timeout_id = 0; @@ -398,54 +409,33 @@ static t_global_monitor * monitor_new(XfcePanelPlugin *plugin) } /* Create widget containers */ - global->box = xfce_hvbox_new(GTK_ORIENTATION_HORIZONTAL, FALSE, 0); + global->box = xfce_hvbox_new(orientation, FALSE, 0); gtk_widget_show(GTK_WIDGET(global->box)); - global->monitor->box = xfce_hvbox_new(GTK_ORIENTATION_HORIZONTAL, FALSE, 0); - gtk_container_set_border_width(GTK_CONTAINER(global->monitor->box), BORDER / 2); - gtk_widget_show(GTK_WIDGET(global->monitor->box)); + gtk_container_set_border_width(GTK_CONTAINER(global->box), BORDER / 2); /* Create the title label */ global->monitor->label = gtk_label_new(global->monitor->options.label_text); - gtk_box_pack_start(GTK_BOX(global->monitor->box), + gtk_box_pack_start(GTK_BOX(global->box), GTK_WIDGET(global->monitor->label), TRUE, FALSE, LABEL_BORDER); /* Create sent and received labels */ global->monitor->rcv_label = gtk_label_new("-"); - gtk_label_set_width_chars(GTK_LABEL(global->monitor->rcv_label), 7); global->monitor->sent_label = gtk_label_new("-"); - gtk_label_set_width_chars(GTK_LABEL(global->monitor->sent_label), 7); - gtk_box_pack_start(GTK_BOX(global->monitor->box), + gtk_box_pack_start(GTK_BOX(global->box), GTK_WIDGET(global->monitor->rcv_label), TRUE, FALSE, LABEL_BORDER); - gtk_misc_set_alignment(GTK_MISC(global->monitor->rcv_label), 1.0f, 0.5f); - gtk_misc_set_alignment(GTK_MISC(global->monitor->sent_label), 0.0f, 0.5f); /* Create the progress bars */ for (i = 0; i < SUM; i++) { global->monitor->status[i] = GTK_WIDGET(gtk_progress_bar_new()); - gtk_widget_modify_bg(GTK_WIDGET(global->monitor->status[i]), - GTK_STATE_PRELIGHT, - &global->monitor->options.color[i]); - gtk_widget_modify_bg(GTK_WIDGET(global->monitor->status[i]), - GTK_STATE_SELECTED, - &global->monitor->options.color[i]); - gtk_widget_modify_base(GTK_WIDGET(global->monitor->status[i]), - GTK_STATE_SELECTED, - &global->monitor->options.color[i]); - gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(global->monitor->status[i]), - GTK_PROGRESS_BOTTOM_TO_TOP); - gtk_box_pack_start(GTK_BOX(global->monitor->box), + gtk_box_pack_start(GTK_BOX(global->box), GTK_WIDGET(global->monitor->status[i]), FALSE, FALSE, 0); } - /* Add the progress bar container */ - gtk_box_pack_start(GTK_BOX(global->box), - GTK_WIDGET(global->monitor->box), FALSE, FALSE, 0); - /* Append sent label after the progress bars */ - gtk_box_pack_start(GTK_BOX(global->monitor->box), + gtk_box_pack_start(GTK_BOX(global->box), GTK_WIDGET(global->monitor->sent_label), TRUE, FALSE, LABEL_BORDER); @@ -459,6 +449,7 @@ static t_global_monitor * monitor_new(XfcePanelPlugin *plugin) static void setup_monitor(t_global_monitor *global, gboolean supress_warnings) { gint i; + GtkOrientation orientation = xfce_panel_plugin_get_orientation(global->plugin); if (global->timeout_id) g_source_remove(global->timeout_id); @@ -477,7 +468,7 @@ static void setup_monitor(t_global_monitor *global, gboolean supress_warnings) { gtk_widget_show(global->monitor->rcv_label); gtk_widget_show(global->monitor->sent_label); - gtk_box_set_child_packing(GTK_BOX(global->monitor->box), + gtk_box_set_child_packing(GTK_BOX(global->box), GTK_WIDGET(global->monitor->label), TRUE, FALSE, 0, GTK_PACK_START); } @@ -485,7 +476,7 @@ static void setup_monitor(t_global_monitor *global, gboolean supress_warnings) { gtk_widget_hide(global->monitor->rcv_label); gtk_widget_hide(global->monitor->sent_label); - gtk_box_set_child_packing(GTK_BOX(global->monitor->box), + gtk_box_set_child_packing(GTK_BOX(global->box), GTK_WIDGET(global->monitor->label), TRUE, FALSE, LABEL_BORDER, GTK_PACK_START); } @@ -503,7 +494,7 @@ static void setup_monitor(t_global_monitor *global, gboolean supress_warnings) gtk_widget_modify_fg(global->monitor->sent_label, GTK_STATE_NORMAL, NULL); } - /* Create the progress bars */ + /* Setup the progress bars */ for (i = 0; i < SUM; i++) { if (global->monitor->options.show_bars) @@ -514,6 +505,17 @@ static void setup_monitor(t_global_monitor *global, gboolean supress_warnings) else global->monitor->net_max[i] = global->monitor->options.max[i]; gtk_widget_show(global->monitor->status[i]); + + /* Set bar colors */ + gtk_widget_modify_bg(GTK_WIDGET(global->monitor->status[i]), + GTK_STATE_PRELIGHT, + &global->monitor->options.color[i]); + gtk_widget_modify_bg(GTK_WIDGET(global->monitor->status[i]), + GTK_STATE_SELECTED, + &global->monitor->options.color[i]); + gtk_widget_modify_base(GTK_WIDGET(global->monitor->status[i]), + GTK_STATE_SELECTED, + &global->monitor->options.color[i]); } else { @@ -539,6 +541,7 @@ static void setup_monitor(t_global_monitor *global, gboolean supress_warnings) } global->monitor->options.old_network_device = g_strdup(global->monitor->options.network_device); + monitor_set_orientation(global->plugin, orientation, global); run_update( global ); } @@ -668,21 +671,25 @@ static gboolean monitor_set_size(XfcePanelPlugin *plugin, int size, t_global_mon { gint i; - for (i = 0; i < SUM; i++) + if (xfce_panel_plugin_get_orientation (plugin) != GTK_ORIENTATION_VERTICAL) { - if (xfce_panel_plugin_get_orientation (plugin) == GTK_ORIENTATION_HORIZONTAL) - { + for (i = 0; i < SUM; i++) gtk_widget_set_size_request(GTK_WIDGET(global->monitor->status[i]), - BORDER, size - BORDER); - } - else - { + PROGRESS_BAR_SIZE, -1); + gtk_widget_set_size_request(GTK_WIDGET(global->monitor->rcv_label), LABEL_SIZE, size); + gtk_widget_set_size_request(GTK_WIDGET(global->monitor->sent_label), LABEL_SIZE, size); + gtk_widget_set_size_request(GTK_WIDGET(plugin), -1, size); + } + else + { + for (i = 0; i < SUM; i++) gtk_widget_set_size_request(GTK_WIDGET(global->monitor->status[i]), - size - BORDER, BORDER); - } + -1, PROGRESS_BAR_SIZE); + gtk_widget_set_size_request(GTK_WIDGET(global->monitor->rcv_label), size, LABEL_SIZE); + gtk_widget_set_size_request(GTK_WIDGET(global->monitor->sent_label), size, LABEL_SIZE); + gtk_widget_set_size_request(GTK_WIDGET(plugin), size, -1); } PRINT_DBG("monitor_set_size"); - setup_monitor(global, TRUE); return TRUE; } -- 1.7.8.6