aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Linus Torvalds <torvalds@linux-foundation.org>2011-09-04 11:49:49 -0700
committerGravatar Linus Torvalds <torvalds@linux-foundation.org>2011-09-04 11:49:49 -0700
commit230a13476d9af732cb60b2c0393feeadb5b39e67 (patch)
tree7858e505d87025beecc97379ad08376347f195c8
parent550eb862fa6dbc1d07c6a3165634900421dd2ca6 (diff)
parent31123f63af0a2b6a9756b8496f56359d1c68a645 (diff)
downloadsubsurface-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.h4
-rw-r--r--divelist.c48
-rw-r--r--info.c9
-rw-r--r--main.c33
-rw-r--r--parse-xml.c6
-rw-r--r--profile.c8
6 files changed, 69 insertions, 39 deletions
diff --git a/display.h b/display.h
index f336bd5ec..96fa29a5d 100644
--- 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);
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);
diff --git a/info.c b/info.c
index 9abbbec40..62a72e140 100644
--- 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 c9cda2b47..57c8f70e6 100644
--- 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);
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);
diff --git a/profile.c b/profile.c
index 7a0a20828..070e6fa70 100644
--- 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;
}