diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-09-04 11:49:49 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-09-04 11:49:49 -0700 |
commit | 230a13476d9af732cb60b2c0393feeadb5b39e67 (patch) | |
tree | 7858e505d87025beecc97379ad08376347f195c8 | |
parent | 550eb862fa6dbc1d07c6a3165634900421dd2ca6 (diff) | |
parent | 31123f63af0a2b6a9756b8496f56359d1c68a645 (diff) | |
download | subsurface-230a13476d9af732cb60b2c0393feeadb5b39e67.tar.gz |
Merge branch 'ui-improvements' of https://github.com/nathansamson/diveclog
* '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
-rw-r--r-- | display.h | 4 | ||||
-rw-r--r-- | divelist.c | 48 | ||||
-rw-r--r-- | info.c | 9 | ||||
-rw-r--r-- | main.c | 33 | ||||
-rw-r--r-- | parse-xml.c | 6 | ||||
-rw-r--r-- | profile.c | 8 |
6 files changed, 69 insertions, 39 deletions
@@ -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); diff --git a/divelist.c b/divelist.c index ba426588a..5baf589d3 100644 --- a/divelist.c +++ b/divelist.c @@ -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); @@ -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; } @@ -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); diff --git a/parse-xml.c b/parse-xml.c index 635bf56f2..a2c685ed5 100644 --- a/parse-xml.c +++ b/parse-xml.c @@ -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); @@ -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; } |