]> git.tdb.fi Git - ext/subsurface.git/commitdiff
Add preference option to chose if SAC and/or OTU should be in divelist
authorDirk Hohndel <dirk@hohndel.org>
Tue, 27 Sep 2011 17:16:40 +0000 (10:16 -0700)
committerDirk Hohndel <dirk@hohndel.org>
Tue, 27 Sep 2011 17:16:40 +0000 (10:16 -0700)
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
display-gtk.h
divelist.c
divelist.h
gtk-gui.c
main.c

index dee66368a5c3123874918528c1dba914e71f6ecc..ad437465cee2ba136af0d60ef4be8f2f22c734a6 100644 (file)
@@ -11,6 +11,13 @@ typedef struct {
        GtkWidget *bar;
 } progressbar_t;
 
+typedef struct {
+       gboolean sac;
+       gboolean otu;
+} visible_cols_t;
+
+extern visible_cols_t visible_cols;
+
 extern const char *divelist_font;
 extern void set_divelist_font(const char *);
 
index bb2a3e3a101a44017b28a7a6640a7d350e74218e..b43adfd0cd4728e6b50fefdcf6e46611ae10b015 100644 (file)
@@ -26,7 +26,7 @@ struct DiveList {
        GtkWidget    *container_widget;
        GtkListStore *model;
        GtkTreeViewColumn *date, *depth, *duration, *location;
-       GtkTreeViewColumn *temperature, *cylinder, *nitrox, *sac;
+       GtkTreeViewColumn *temperature, *cylinder, *nitrox, *sac, *otu;
        int changed;
 };
 
@@ -422,6 +422,13 @@ void update_dive_list_units(void)
        gtk_tree_model_foreach(model, set_one_dive, NULL);
 }
 
+void update_dive_list_col_visibility(void)
+{
+               gtk_tree_view_column_set_visible(dive_list.sac, visible_cols.sac);
+               gtk_tree_view_column_set_visible(dive_list.otu, visible_cols.otu);
+               return;
+}
+
 static void fill_dive_list(void)
 {
        int i;
@@ -543,8 +550,8 @@ GtkWidget *dive_list_create(void)
        dive_list.temperature = divelist_column(&dive_list, DIVE_TEMPERATURE, UTF8_DEGREE "F", temperature_data_func, PANGO_ALIGN_RIGHT, TRUE);
        dive_list.cylinder = divelist_column(&dive_list, DIVE_CYLINDER, "Cyl", NULL, PANGO_ALIGN_CENTER, TRUE);
        dive_list.nitrox = divelist_column(&dive_list, DIVE_NITROX, "O" UTF8_SUBSCRIPT_2 "%", nitrox_data_func, PANGO_ALIGN_CENTER, TRUE);
-       dive_list.sac = divelist_column(&dive_list, DIVE_SAC, "SAC", sac_data_func, PANGO_ALIGN_CENTER, TRUE);
-       dive_list.sac = divelist_column(&dive_list, DIVE_OTU, "OTU", otu_data_func, PANGO_ALIGN_CENTER, FALSE);
+       dive_list.sac = divelist_column(&dive_list, DIVE_SAC, "SAC", sac_data_func, PANGO_ALIGN_CENTER, visible_cols.sac);
+       dive_list.otu = divelist_column(&dive_list, DIVE_OTU, "OTU", otu_data_func, PANGO_ALIGN_CENTER, visible_cols.otu);
        dive_list.location = divelist_column(&dive_list, DIVE_LOCATION, "Location", NULL, PANGO_ALIGN_LEFT, TRUE);
 
        fill_dive_list();
index 3151a69dbcab1453ab6c2fe523c2be922247ea01..2635b75419829012e291ef597f6f7efd962dc10f 100644 (file)
@@ -4,6 +4,7 @@
 struct dive;
 
 extern void dive_list_update_dives(void);
+extern void update_dive_list_col_visibility(void);
 extern void update_dive_list_units(void);
 extern void flush_divelist(struct dive *);
 
index 3994387acdf5f42f632451152e48b42671c4dde0..2a53f00e218bd26ddeb4c27bcbdedc17462febd5 100644 (file)
--- a/gtk-gui.c
+++ b/gtk-gui.c
@@ -33,6 +33,8 @@ struct units output_units;
 
 static GtkWidget *dive_profile;
 
+visible_cols_t visible_cols = {TRUE, FALSE};
+
 void repaint_dive(void)
 {
        update_dive(current_dive);
@@ -243,10 +245,19 @@ UNITCALLBACK(set_cuft, volume, CUFT)
 UNITCALLBACK(set_celsius, temperature, CELSIUS)
 UNITCALLBACK(set_fahrenheit, temperature, FAHRENHEIT)
 
+#define OPTIONCALLBACK(name, option) \
+static void name(GtkWidget *w, gpointer data) \
+{ \
+       option = GTK_TOGGLE_BUTTON(w)->active; \
+}
+
+OPTIONCALLBACK(otu_toggle, visible_cols.otu)
+OPTIONCALLBACK(sac_toggle, visible_cols.sac)
+
 static void preferences_dialog(GtkWidget *w, gpointer data)
 {
        int result;
-       GtkWidget *dialog, *font, *frame, *box;
+       GtkWidget *dialog, *font, *frame, *box, *button;
 
        menu_units = output_units;
 
@@ -283,6 +294,22 @@ static void preferences_dialog(GtkWidget *w, gpointer data)
                "Fahrenheit",  set_fahrenheit, (output_units.temperature == FAHRENHEIT),
                NULL);
 
+       frame = gtk_frame_new("Columns");
+       gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), frame, FALSE, FALSE, 5);
+
+       box = gtk_hbox_new(FALSE, 6);
+       gtk_container_add(GTK_CONTAINER(frame), box);
+
+       button = gtk_check_button_new_with_label("Show SAC");
+       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), visible_cols.sac);
+       gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 6);
+       g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(sac_toggle), NULL);
+
+       button = gtk_check_button_new_with_label("Show OTU");
+       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), visible_cols.otu);
+       gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 6);
+       g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(otu_toggle), NULL);
+
        font = gtk_font_button_new_with_font(divelist_font);
        gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), font, FALSE, FALSE, 5);
 
@@ -298,10 +325,13 @@ static void preferences_dialog(GtkWidget *w, gpointer data)
                output_units = menu_units;
                update_dive_list_units();
                repaint_dive();
+               update_dive_list_col_visibility();
                gconf_client_set_bool(gconf, GCONF_NAME(feet), output_units.length == FEET, NULL);
                gconf_client_set_bool(gconf, GCONF_NAME(psi), output_units.pressure == PSI, NULL);
                gconf_client_set_bool(gconf, GCONF_NAME(cuft), output_units.volume == CUFT, NULL);
                gconf_client_set_bool(gconf, GCONF_NAME(fahrenheit), output_units.temperature == FAHRENHEIT, NULL);
+               gconf_client_set_bool(gconf, GCONF_NAME(SAC), visible_cols.sac, NULL);
+               gconf_client_set_bool(gconf, GCONF_NAME(OTU), visible_cols.otu, NULL);
                gconf_client_set_string(gconf, GCONF_NAME(divelist_font), divelist_font, NULL);
        }
        gtk_widget_destroy(dialog);
diff --git a/main.c b/main.c
index ef6212ae234fd5a19ac41240f38d7ac49675f990..92eb9ee0992cccc37df60b0ee36b7095762ecacd 100644 (file)
--- a/main.c
+++ b/main.c
@@ -126,6 +126,7 @@ int main(int argc, char **argv)
        int i;
 
        output_units = SI_units;
+
        parse_xml_init();
 
        init_ui(argc, argv);