8 static int sortfn(const void *_a, const void *_b)
10 const struct dive *a = *(void **)_a;
11 const struct dive *b = *(void **)_b;
13 if (a->when < b->when)
15 if (a->when > b->when)
21 * This doesn't really report anything at all. We just sort the
22 * dives, the GUI does the reporting
24 static void report_dives(void)
26 qsort(dive_table.dives, dive_table.nr, sizeof(struct dive *), sortfn);
29 static void parse_argument(const char *arg)
31 const char *p = arg+1;
39 fprintf(stderr, "Bad argument '%s'\n", arg);
45 static void on_destroy(GtkWidget* w, gpointer data)
50 static GtkTreeModel *fill_dive_list(void)
56 store = gtk_list_store_new(1, G_TYPE_STRING);
58 for (i = 0; i < dive_table.nr; i++) {
59 struct dive *dive = dive_table.dives[i];
61 gtk_list_store_append(store, &iter);
62 gtk_list_store_set(store, &iter,
67 return GTK_TREE_MODEL(store);
70 static GtkWidget *create_dive_list(void)
73 GtkCellRenderer *renderer;
76 list = gtk_tree_view_new();
78 renderer = gtk_cell_renderer_text_new();
79 gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(list),
80 -1, "Dive", renderer, "text", 0, NULL);
82 model = fill_dive_list();
83 gtk_tree_view_set_model(GTK_TREE_VIEW(list), model);
84 g_object_unref(model);
88 int main(int argc, char **argv)
94 GtkWidget *scrolled_window;
99 gtk_init(&argc, &argv);
101 for (i = 1; i < argc; i++) {
102 const char *a = argv[i];
113 win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
114 g_signal_connect(G_OBJECT(win), "destroy", G_CALLBACK(on_destroy), NULL);
116 /* HBOX for the list of dives and cairo window */
117 vbox=gtk_hbox_new(FALSE, 5);
118 gtk_container_set_border_width(GTK_CONTAINER(vbox), 5);
119 gtk_container_add(GTK_CONTAINER(win), vbox);
120 gtk_widget_show(vbox);
122 /* Scrolled window for the list goes into the vbox.. */
123 scrolled_window=gtk_scrolled_window_new(NULL, NULL);
124 gtk_widget_set_usize(scrolled_window, 150, 350);
125 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
126 gtk_container_add(GTK_CONTAINER(vbox), scrolled_window);
127 gtk_widget_show(scrolled_window);
129 /* Frame for dive profile */
130 frame = dive_profile_frame();
132 gtk_container_add(GTK_CONTAINER(vbox), frame);
134 /* Create the atual divelist */
135 divelist = create_dive_list();
137 /* .. and connect it to the scrolled window */
138 gtk_container_add(GTK_CONTAINER(scrolled_window), divelist);
140 gtk_widget_set_app_paintable(win, TRUE);
141 gtk_widget_show_all(win);