From ef26b736a36023304ef6f72d13d496a41b355422 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Orsini Date: Thu, 21 Aug 2014 12:10:40 +0200 Subject: [PATCH] hide/show sensors in the main window. --- src/glade/psensor.glade | 2 ++ src/glade/sensor-edit.glade | 1 + src/ui_sensorlist.c | 54 ++++++++++++++++++++++++++++++++++----------- src/ui_sensorpref.c | 21 +++++++++++++++++- 4 files changed, 64 insertions(+), 14 deletions(-) diff --git a/src/glade/psensor.glade b/src/glade/psensor.glade index 6ea304f..d70f9e9 100644 --- a/src/glade/psensor.glade +++ b/src/glade/psensor.glade @@ -177,6 +177,8 @@ + + diff --git a/src/glade/sensor-edit.glade b/src/glade/sensor-edit.glade index 9225d06..a949f0a 100644 --- a/src/glade/sensor-edit.glade +++ b/src/glade/sensor-edit.glade @@ -545,6 +545,7 @@ 4 0 True + 0 diff --git a/src/ui_sensorlist.c b/src/ui_sensorlist.c index e11498b..d2b254a 100644 --- a/src/ui_sensorlist.c +++ b/src/ui_sensorlist.c @@ -33,9 +33,10 @@ enum { COL_TEMP_MAX, COL_COLOR, COL_COLOR_STR, - COL_ENABLED, + COL_GRAPH_ENABLED, COL_EMPTY, COL_SENSOR, + COL_DISPLAY_ENABLED }; struct cb_data { @@ -46,7 +47,7 @@ struct cb_data { static int col_index_to_col(int idx) { if (idx == 5) - return COL_ENABLED; + return COL_GRAPH_ENABLED; else if (idx > 5) return -1; @@ -60,6 +61,7 @@ static void populate(struct ui_psensor *ui) GdkColor color; char *scolor; struct psensor **ordered_sensors, **s_cur, *s; + unsigned int enabled; ordered_sensors = ui_get_sensors_ordered_by_position(ui); store = ui->sensors_store; @@ -77,11 +79,14 @@ static void populate(struct ui_psensor *ui) scolor = gdk_color_to_string(&color); + enabled = config_is_sensor_enabled(s->id); + gtk_list_store_set(store, &iter, COL_NAME, s->name, COL_COLOR_STR, scolor, - COL_ENABLED, s->graph_enabled, + COL_GRAPH_ENABLED, s->graph_enabled, COL_SENSOR, s, + COL_DISPLAY_ENABLED, enabled, -1); free(scolor); } @@ -102,6 +107,8 @@ void ui_sensorlist_update(struct ui_psensor *ui, bool complete) populate(ui); model = gtk_tree_view_get_model(ui->sensors_tree); + model = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(model)); + store = ui->sensors_store; use_celsius = ui->config->temperature_unit == CELSIUS; @@ -249,7 +256,7 @@ static int clicked_cbk(GtkWidget *widget, GdkEventButton *event, gpointer data) config_set_sensor_color(s->id, s->color); config_sync(); } - } else if (coli >= 0 && coli != COL_ENABLED) { + } else if (coli >= 0 && coli != COL_GRAPH_ENABLED) { menu = create_sensor_popup(ui, s); gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, @@ -264,34 +271,55 @@ static void toggled_cbk(GtkCellRendererToggle *cell, gchar *path_str, gpointer data) { struct ui_psensor *ui; - GtkTreeModel *model; + GtkTreeModel *model, *fmodel; GtkTreeIter iter; GtkTreePath *path; - struct psensor *s; + struct psensor *s, *s2; + gboolean valid; ui = (struct ui_psensor *)data; - model = gtk_tree_view_get_model(ui->sensors_tree); + fmodel = gtk_tree_view_get_model(ui->sensors_tree); + path = gtk_tree_path_new_from_string(path_str); - gtk_tree_model_get_iter(model, &iter, path); + gtk_tree_model_get_iter(fmodel, &iter, path); - gtk_tree_model_get(model, &iter, COL_SENSOR, &s, -1); + gtk_tree_model_get(fmodel, &iter, COL_SENSOR, &s, -1); s->graph_enabled ^= 1; config_set_sensor_graph_enabled(s->id, s->graph_enabled); - gtk_list_store_set(GTK_LIST_STORE(model), &iter, - COL_ENABLED, s->graph_enabled, -1); - gtk_tree_path_free(path); + + model = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(fmodel)); + valid = gtk_tree_model_get_iter_first(model, &iter); + while (valid) { + gtk_tree_model_get(model, &iter, COL_SENSOR, &s2, -1); + + if (s == s2) + gtk_list_store_set(ui->sensors_store, + &iter, + COL_GRAPH_ENABLED, + s->graph_enabled, + -1); + valid = gtk_tree_model_iter_next(model, &iter); + } } void ui_sensorlist_create(struct ui_psensor *ui) { GtkCellRenderer *renderer; + GtkTreeModel *fmodel, *model; log_debug("ui_sensorlist_create()"); + model = gtk_tree_view_get_model(ui->sensors_tree); + fmodel = gtk_tree_model_filter_new(model, NULL); + gtk_tree_model_filter_set_visible_column(GTK_TREE_MODEL_FILTER(fmodel), + COL_DISPLAY_ENABLED); + + gtk_tree_view_set_model(ui->sensors_tree, fmodel); + renderer = gtk_cell_renderer_text_new(); gtk_tree_view_insert_column_with_attributes(ui->sensors_tree, -1, @@ -334,7 +362,7 @@ void ui_sensorlist_create(struct ui_psensor *ui) -1, _("Graph"), renderer, - "active", COL_ENABLED, + "active", COL_GRAPH_ENABLED, NULL); g_signal_connect(G_OBJECT(renderer), "toggled", (GCallback) toggled_cbk, ui); diff --git a/src/ui_sensorpref.c b/src/ui_sensorpref.c index 410d199..9e8447e 100644 --- a/src/ui_sensorpref.c +++ b/src/ui_sensorpref.c @@ -45,6 +45,7 @@ struct sensor_pref { int alarm_low_threshold; unsigned int appindicator_enabled; unsigned int appindicator_label_enabled; + unsigned int display_enabled; }; struct cb_data { @@ -64,6 +65,7 @@ sensor_pref_new(struct psensor *s, struct config *cfg) p->graph_enabled = s->graph_enabled; p->alarm_enabled = s->alarm_enabled; p->color = color_dup(s->color); + p->display_enabled = config_is_sensor_enabled(s->id); if (cfg->temperature_unit == CELSIUS) { p->alarm_high_threshold = s->alarm_high_threshold; @@ -134,6 +136,16 @@ void ui_sensorpref_draw_toggled_cb(GtkToggleButton *btn, gpointer data) p->graph_enabled = gtk_toggle_button_get_active(btn); } +void ui_sensorpref_display_toggled_cb(GtkToggleButton *btn, gpointer data) +{ + struct sensor_pref *p; + + p = get_selected_sensor_pref(GTK_TREE_VIEW(data)); + + if (p) + p->display_enabled = gtk_toggle_button_get_active(btn); +} + void ui_sensorpref_alarm_toggled_cb(GtkToggleButton *btn, gpointer data) { struct sensor_pref *p; @@ -209,7 +221,7 @@ update_pref(struct sensor_pref *p, struct config *cfg, GtkBuilder *builder) *w_chipname; GtkEntry *w_name; GtkToggleButton *w_draw, *w_alarm, *w_appindicator_enabled, - *w_appindicator_label_enabled; + *w_appindicator_label_enabled, *w_display; GtkColorButton *w_color; GtkSpinButton *w_high_threshold, *w_low_threshold; GdkColor *color; @@ -237,6 +249,11 @@ update_pref(struct sensor_pref *p, struct config *cfg, GtkBuilder *builder) "sensor_draw")); gtk_toggle_button_set_active(w_draw, p->graph_enabled); + w_display = GTK_TOGGLE_BUTTON(gtk_builder_get_object + (builder, + "sensor_enable_checkbox")); + gtk_toggle_button_set_active(w_display, p->display_enabled); + color = color_to_gdkcolor(p->color); w_color = GTK_COLOR_BUTTON(gtk_builder_get_object(builder, "sensor_color")); @@ -378,6 +395,8 @@ static void apply_pref(struct sensor_pref *p, int pos, struct config *cfg) p->appindicator_label_enabled); config_set_sensor_position(s->id, pos); + + config_set_sensor_enabled(s->id, p->display_enabled); } static void apply_prefs(GtkTreeModel *model, struct config *cfg) -- 2.7.4