]> git.tdb.fi Git - ext/subsurface.git/commitdiff
Merge branch 'ui-improvements' of https://github.com/nathansamson/diveclog
authorLinus Torvalds <torvalds@linux-foundation.org>
Sun, 4 Sep 2011 18:49:49 +0000 (11:49 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sun, 4 Sep 2011 18:49:49 +0000 (11:49 -0700)
* 'ui-improvements' of https://github.com/nathansamson/diveclog:
  Split the dive list in columns. Columns are sortable now (name = date, depth, duration)
  Remove the redundant frames in the notebook. Closes #9
  Use a pane so the dive list can be made wider or smaller to the users wishes

display.h
divelist.c
info.c
main.c
parse-xml.c
profile.c

index f336bd5ec8ac60ba7b32cd82bfe5126a88bd2640..96fa29a5d574168b8d07b06b4410fff4a874de75 100644 (file)
--- a/display.h
+++ b/display.h
@@ -8,9 +8,9 @@
 extern int selected_dive;
 #define current_dive (get_dive(selected_dive))
 
-extern GtkWidget *dive_profile_frame(void);
+extern GtkWidget *dive_profile_widget(void);
 extern GtkWidget *dive_info_frame(void);
-extern GtkWidget *extended_dive_info_frame(void);
+extern GtkWidget *extended_dive_info_widget(void);
 extern GtkWidget *create_dive_list(void);
 extern void update_dive_info(struct dive *dive);
 extern void repaint_dive(void);
index ba426588a362738a9974cd22abe23834d716519e..5baf589d33d8c265ecfd5b76d9f7c3743893dadf 100644 (file)
@@ -1,5 +1,6 @@
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <time.h>
 
 #include "dive.h"
@@ -13,7 +14,7 @@ static void selection_cb(GtkTreeSelection *selection, GtkTreeModel *model)
        if (!gtk_tree_selection_get_selected(selection, NULL, &iter))
                return;
 
-       gtk_tree_model_get_value(model, &iter, 1, &value);
+       gtk_tree_model_get_value(model, &iter, 5, &value);
        selected_dive = g_value_get_int(&value);
        repaint_dive();
 }
@@ -26,10 +27,27 @@ static void fill_dive_list(GtkListStore *store)
        for (i = 0; i < dive_table.nr; i++) {
                struct dive *dive = dive_table.dives[i];
 
+               int len;
+               char buffer[256], *depth, *duration;
+               
+               len = snprintf(buffer, sizeof(buffer),
+                              "%d ft", to_feet(dive->maxdepth));
+               depth = malloc(len + 1);
+               memcpy(depth, buffer, len+1);
+               
+               len = snprintf(buffer, sizeof(buffer),
+                              "%d min", dive->duration.seconds / 60);
+               duration = malloc(len + 1);
+               memcpy(duration, buffer, len+1);
+
                gtk_list_store_append(store, &iter);
                gtk_list_store_set(store, &iter,
                        0, dive->name,
-                       1, i,
+                       1, depth,
+                       2, dive->maxdepth,
+                       3, duration,
+                       4, dive->duration.seconds,
+                       5, i,
                        -1);
        }
 }
@@ -43,7 +61,10 @@ GtkWidget *create_dive_list(void)
        GtkTreeViewColumn *col;
        GtkWidget         *scroll_window;
 
-       model = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_INT);
+       model = gtk_list_store_new(6, G_TYPE_STRING,
+                                  G_TYPE_STRING, G_TYPE_INT, 
+                                  G_TYPE_STRING, G_TYPE_INT,
+                                  G_TYPE_INT);
        tree_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(model));
        selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view));
 
@@ -54,11 +75,30 @@ GtkWidget *create_dive_list(void)
 
        renderer = gtk_cell_renderer_text_new();
        col = gtk_tree_view_column_new();
+       gtk_tree_view_column_set_title(col, "Name");
+       gtk_tree_view_column_set_sort_column_id(col, 0);
+       gtk_tree_view_column_set_resizable (col, TRUE);
        gtk_tree_view_column_pack_start(col, renderer, TRUE);
        gtk_tree_view_column_add_attribute(col, renderer, "text", 0);
        gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), col);
+       
+       renderer = gtk_cell_renderer_text_new();
+       col = gtk_tree_view_column_new();
+       gtk_tree_view_column_set_title(col, "Depth");
+       gtk_tree_view_column_set_sort_column_id(col, 2);
+       gtk_tree_view_column_pack_start(col, renderer, TRUE);
+       gtk_tree_view_column_add_attribute(col, renderer, "text", 1);
+       gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), col);
+       
+       renderer = gtk_cell_renderer_text_new();
+       col = gtk_tree_view_column_new();
+       gtk_tree_view_column_set_title(col, "Duration");
+       gtk_tree_view_column_set_sort_column_id(col, 4);
+       gtk_tree_view_column_pack_start(col, renderer, TRUE);
+       gtk_tree_view_column_add_attribute(col, renderer, "text", 3);
+       gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), col);
 
-       g_object_set(G_OBJECT(tree_view), "headers-visible", FALSE,
+       g_object_set(G_OBJECT(tree_view), "headers-visible", TRUE,
                                          "search-column", 0,
                                          "rules-hint", FALSE,
                                          NULL);
diff --git a/info.c b/info.c
index 9abbbec400e58efff5b11cdc9044e933e68f04f9..62a72e1405815ba958eac8a1b1e3db4b0f47a4c7 100644 (file)
--- a/info.c
+++ b/info.c
@@ -181,21 +181,16 @@ static GtkTextBuffer *text_view(GtkWidget *box, const char *label, gboolean expa
        return buffer;
 }
 
-GtkWidget *extended_dive_info_frame(void)
+GtkWidget *extended_dive_info_widget(void)
 {
-       GtkWidget *frame;
        GtkWidget *vbox;
 
-       frame = gtk_frame_new("Extended dive info");
-       gtk_widget_show(frame);
-
        vbox = gtk_vbox_new(FALSE, 5);
-       gtk_container_add(GTK_CONTAINER(frame), vbox);
 
        location = text_entry(vbox, "Location");
        notes = text_view(vbox, "Notes", TRUE);
 
        /* Add extended info here: name, description, yadda yadda */
        update_dive_info(current_dive);
-       return frame;
+       return vbox;
 }
diff --git a/main.c b/main.c
index c9cda2b472ec56db5398b2aa729e768ed4cb8bc3..57c8f70e66a92a67c22c263a9c2ca737e378313a 100644 (file)
--- a/main.c
+++ b/main.c
@@ -174,9 +174,11 @@ int main(int argc, char **argv)
        int i;
        GtkWidget *win;
        GtkWidget *divelist;
-       GtkWidget *table;
+       GtkWidget *paned;
+       GtkWidget *info_box;
        GtkWidget *notebook;
        GtkWidget *frame;
+       GtkWidget *dive_info;
        GtkWidget *menubar;
        GtkWidget *vbox;
 
@@ -206,34 +208,33 @@ int main(int argc, char **argv)
        menubar = get_menubar_menu(win);
        gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 0);
 
-       /* Table for the list of dives, cairo window, and dive info */
-       table = gtk_table_new(2, 2, FALSE);
-       gtk_container_set_border_width(GTK_CONTAINER(table), 5);
-       gtk_box_pack_end(GTK_BOX(vbox), table, TRUE, TRUE, 0);
-       gtk_widget_show(table);
+       /* HPane for left the dive list, and right the dive info */
+       paned = gtk_hpaned_new();
+       gtk_box_pack_end(GTK_BOX(vbox), paned, TRUE, TRUE, 0);
 
        /* Create the atual divelist */
        divelist = create_dive_list();
-       gtk_table_attach(GTK_TABLE(table), divelist, 0, 1, 0, 2,
-               0, GTK_FILL | GTK_SHRINK | GTK_EXPAND, 0, 0);
+       gtk_paned_add1(GTK_PANED(paned), divelist);
+
+       /* VBox for dive info, and tabs */
+       info_box = gtk_vbox_new(FALSE, 5);
+       gtk_paned_add2(GTK_PANED(paned), info_box);
 
        /* Frame for minimal dive info */
        frame = dive_info_frame();
-       gtk_table_attach(GTK_TABLE(table), frame, 1, 2, 0, 1,
-                GTK_FILL | GTK_SHRINK | GTK_EXPAND, 0, 0, 0);
+       gtk_box_pack_start(GTK_BOX(info_box), frame, FALSE, TRUE, 5);
 
        /* Notebook for dive info vs profile vs .. */
        notebook = gtk_notebook_new();
-       gtk_table_attach_defaults(GTK_TABLE(table), notebook, 1, 2, 1, 2);
+       gtk_box_pack_start(GTK_BOX(info_box), notebook, TRUE, TRUE, 5);
 
        /* Frame for dive profile */
-       frame = dive_profile_frame();
-       gtk_notebook_append_page(GTK_NOTEBOOK(notebook), frame, gtk_label_new("Dive Profile"));
-       dive_profile = frame;
+       dive_profile = dive_profile_widget();
+       gtk_notebook_append_page(GTK_NOTEBOOK(notebook), dive_profile, gtk_label_new("Dive Profile"));
 
        /* Frame for extended dive info */
-       frame = extended_dive_info_frame();
-       gtk_notebook_append_page(GTK_NOTEBOOK(notebook), frame, gtk_label_new("Extended dive Info"));
+       dive_info = extended_dive_info_widget();
+       gtk_notebook_append_page(GTK_NOTEBOOK(notebook), dive_info, gtk_label_new("Extended dive Info"));
 
        gtk_widget_set_app_paintable(win, TRUE);
        gtk_widget_show_all(win);
index 635bf56f208b24730761c8e60143dc54e064bd4a..a2c685ed523ed39b2b9b692f92760d175e4a61a3 100644 (file)
@@ -693,11 +693,9 @@ static char *generate_name(struct dive *dive)
 
        len = snprintf(buffer, sizeof(buffer),
                "%04d-%02d-%02d "
-               "%02d:%02d:%02d "
-               "(%d ft, %d min)",
+               "%02d:%02d:%02d",
                tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday,
-               tm->tm_hour, tm->tm_min, tm->tm_sec,
-               to_feet(dive->maxdepth), dive->duration.seconds / 60);
+               tm->tm_hour, tm->tm_min, tm->tm_sec);
        p = malloc(len+1);
        if (!p)
                exit(1);
index 7a0a20828f07c433ed3625bc54bcd8def420619e..070e6fa7054445e26031335c4c1b5e1ac35ccbff 100644 (file)
--- a/profile.c
+++ b/profile.c
@@ -195,17 +195,13 @@ static gboolean expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer
        return FALSE;
 }
 
-GtkWidget *dive_profile_frame(void)
+GtkWidget *dive_profile_widget(void)
 {
-       GtkWidget *frame;
        GtkWidget *da;
 
-       frame = gtk_frame_new("Dive profile");
-       gtk_widget_show(frame);
        da = gtk_drawing_area_new();
        gtk_widget_set_size_request(da, 450, 350);
        g_signal_connect(da, "expose_event", G_CALLBACK(expose_event), NULL);
-       gtk_container_add(GTK_CONTAINER(frame), da);
 
-       return frame;
+       return da;
 }