X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=gtk-gui.c;h=ee3ad2ef11583109f80254007757833970e34fe5;hb=1531a37dd0b74fcb06ca06fd2f225d4a2d228a87;hp=985a70e04e0f29a7456a83c7caeea6311215b58d;hpb=f4d50ffa3b4237447093c1cef9cbe945d22ceb84;p=ext%2Fsubsurface.git diff --git a/gtk-gui.c b/gtk-gui.c index 985a70e..ee3ad2e 100644 --- a/gtk-gui.c +++ b/gtk-gui.c @@ -103,6 +103,8 @@ static void file_open(GtkWidget *w, gpointer data) filter = gtk_file_filter_new(); gtk_file_filter_add_pattern(filter, "*.xml"); gtk_file_filter_add_pattern(filter, "*.XML"); + gtk_file_filter_add_pattern(filter, "*.sda"); + gtk_file_filter_add_pattern(filter, "*.SDA"); gtk_file_filter_add_mime_type(filter, "text/xml"); gtk_file_filter_set_name(filter, "XML file"); gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(dialog), filter); @@ -203,6 +205,42 @@ static void quit(GtkWidget *w, gpointer data) gtk_main_quit(); } +GtkTreeViewColumn *tree_view_column(GtkWidget *tree_view, int index, const char *title, + data_func_t data_func, PangoAlignment align, gboolean visible) +{ + GtkCellRenderer *renderer; + GtkTreeViewColumn *col; + double xalign = 0.0; /* left as default */ + + renderer = gtk_cell_renderer_text_new(); + col = gtk_tree_view_column_new(); + + gtk_tree_view_column_set_title(col, title); + gtk_tree_view_column_set_sort_column_id(col, index); + gtk_tree_view_column_set_resizable(col, TRUE); + gtk_tree_view_column_pack_start(col, renderer, TRUE); + if (data_func) + gtk_tree_view_column_set_cell_data_func(col, renderer, data_func, (void *)(long)index, NULL); + else + gtk_tree_view_column_add_attribute(col, renderer, "text", index); + gtk_object_set(GTK_OBJECT(renderer), "alignment", align, NULL); + switch (align) { + case PANGO_ALIGN_LEFT: + xalign = 0.0; + break; + case PANGO_ALIGN_CENTER: + xalign = 0.5; + break; + case PANGO_ALIGN_RIGHT: + xalign = 1.0; + break; + } + gtk_cell_renderer_set_alignment(GTK_CELL_RENDERER(renderer), xalign, 0.5); + gtk_tree_view_column_set_visible(col, visible); + gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), col); + return col; +} + static void create_radio(GtkWidget *vbox, const char *name, ...) { va_list args; @@ -460,8 +498,8 @@ static void switch_page(GtkNotebook *notebook, gint arg1, gpointer user_data) repaint_dive(); } -static const char notebook_name[] = "123"; - +static const char notebook_group[] = "123"; +#define GRP_ID ((void *)notebook_group) typedef struct { char *name; GtkWidget *widget; @@ -500,8 +538,10 @@ static GtkNotebook *create_new_notebook_window(GtkNotebook *source, gtk_container_add(GTK_CONTAINER(win), vbox); notebook = gtk_notebook_new(); + gtk_notebook_set_group(GTK_NOTEBOOK(notebook), GRP_ID); gtk_widget_set_name(notebook, nbdp->name); - gtk_notebook_set_group_name(GTK_NOTEBOOK(notebook), notebook_name); + /* disallow drop events */ + gtk_drag_dest_set(notebook, 0, NULL, 0, 0); gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 6); gtk_widget_set_size_request(notebook, 450, 350); @@ -510,23 +550,16 @@ static GtkNotebook *create_new_notebook_window(GtkNotebook *source, } static void drag_cb(GtkWidget *widget, GdkDragContext *context, - gint x, gint y, - GtkSelectionData *selection_data, - guint info, guint time, + gint x, gint y, guint time, gpointer user_data) { GtkWidget *source; notebook_data_t *nbdp; - /* - * We don't actually really *use* this yet, but Dirk wants to - * do all the tabs as detatched tabs, and we'd need to use - * this all to figure out which window we're talking about. - */ source = gtk_drag_get_source_widget(context); - if (! strcmp(nbd[0].name,gtk_widget_get_name(source))) + if (nbd[0].name && ! strcmp(nbd[0].name,gtk_widget_get_name(source))) nbdp = nbd; - else if (! strcmp(nbd[1].name,gtk_widget_get_name(source))) + else if (nbd[1].name && ! strcmp(nbd[1].name,gtk_widget_get_name(source))) nbdp = nbd + 1; else /* HU? */ @@ -598,10 +631,10 @@ void init_ui(int argc, char **argv) /* Notebook for dive info vs profile vs .. */ notebook = gtk_notebook_new(); gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 6); - gtk_notebook_set_group_name(GTK_NOTEBOOK(notebook), notebook_name); + gtk_notebook_set_group(GTK_NOTEBOOK(notebook), GRP_ID); g_signal_connect(notebook, "create-window", G_CALLBACK(create_new_notebook_window), NULL); gtk_drag_dest_set(notebook, GTK_DEST_DEFAULT_ALL, ¬ebook_target, 1, GDK_ACTION_MOVE); - g_signal_connect(notebook, "drag-data-received", G_CALLBACK(drag_cb), notebook); + g_signal_connect(notebook, "drag-drop", G_CALLBACK(drag_cb), notebook); g_signal_connect(notebook, "switch-page", G_CALLBACK(switch_page), NULL); /* Create the actual divelist */ @@ -637,46 +670,6 @@ void run_ui(void) gtk_main(); } -/* get the filenames the user selects and call the parsing function - * on them - * return 0 if the user cancelled the dialog - */ -int open_import_file_dialog(char *filterpattern, char *filtertext, - void(* parse_function)(char *)) -{ - int ret=0; - - GtkWidget *dialog; - GtkFileFilter *filter = gtk_file_filter_new (); - gtk_file_filter_add_pattern (filter, filterpattern); - gtk_file_filter_set_name(filter, filtertext); - dialog = gtk_file_chooser_dialog_new("Open File", - GTK_WINDOW(main_window), - GTK_FILE_CHOOSER_ACTION_OPEN, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, - NULL); - gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), TRUE); - gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog),filter); - - if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { - GSList *filenames; - char *filename; - filenames = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(dialog)); - while(filenames != NULL) { - filename = (char *)filenames->data; - parse_function(filename); - g_free(filename); - filenames = g_slist_next(filenames); - } - g_slist_free(filenames); - ret = 1; - } - gtk_widget_destroy(dialog); - - return ret; -} - static gboolean expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data) { struct dive *dive = current_dive;