]> git.tdb.fi Git - ext/subsurface.git/blobdiff - gtk-gui.c
Fixing whitespace, line wrapping
[ext/subsurface.git] / gtk-gui.c
index 22f6870dd62912254b3ede2cb68448a34a385b09..dce537232fdbd9ba81ca5dfb69b332f28d269228 100644 (file)
--- a/gtk-gui.c
+++ b/gtk-gui.c
@@ -19,6 +19,7 @@ GtkWidget *main_window;
 GtkWidget *main_vbox;
 GtkWidget *error_info_bar;
 GtkWidget *error_label;
+GtkWidget *vpane, *hpane;
 int        error_count;
 
 #define DIVELIST_DEFAULT_FONT "Sans 8"
@@ -201,17 +202,25 @@ static void quit(GtkWidget *w, gpointer data)
 }
 
 GtkTreeViewColumn *tree_view_column(GtkWidget *tree_view, int index, const char *title,
-                               data_func_t data_func, PangoAlignment align, gboolean visible)
+                               data_func_t data_func, unsigned int flags)
 {
        GtkCellRenderer *renderer;
        GtkTreeViewColumn *col;
        double xalign = 0.0; /* left as default */
+       PangoAlignment align;
+       gboolean visible;
+
+       align = (flags & ALIGN_LEFT) ? PANGO_ALIGN_LEFT :
+               (flags & ALIGN_RIGHT) ? PANGO_ALIGN_RIGHT :
+               PANGO_ALIGN_CENTER;
+       visible = !(flags & INVISIBLE);
 
        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);
+       if (!(flags & UNSORTABLE))
+               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)
@@ -538,9 +547,34 @@ static void about_dialog(GtkWidget *w, gpointer data)
                NULL);
 }
 
+static void view_list(GtkWidget *w, gpointer data)
+{
+       gtk_paned_set_position(GTK_PANED(vpane), 0);
+}
+
+static void view_profile(GtkWidget *w, gpointer data)
+{
+       gtk_paned_set_position(GTK_PANED(hpane), 0);
+       gtk_paned_set_position(GTK_PANED(vpane), 65535);
+}
+
+static void view_info(GtkWidget *w, gpointer data)
+{
+       gtk_paned_set_position(GTK_PANED(vpane), 65535);
+       gtk_paned_set_position(GTK_PANED(hpane), 65535);
+}
+
+/* Ooh. I don't know how to get the half-way size. So I'm just using random numbers */
+static void view_three(GtkWidget *w, gpointer data)
+{
+       gtk_paned_set_position(GTK_PANED(hpane), 400);
+       gtk_paned_set_position(GTK_PANED(vpane), 200);
+}
+
 static GtkActionEntry menu_items[] = {
        { "FileMenuAction", GTK_STOCK_FILE, "File", NULL, NULL, NULL},
        { "LogMenuAction",  GTK_STOCK_FILE, "Log", NULL, NULL, NULL},
+       { "ViewMenuAction",  GTK_STOCK_FILE, "View", NULL, NULL, NULL},
        { "FilterMenuAction",  GTK_STOCK_FILE, "Filter", NULL, NULL, NULL},
        { "HelpMenuAction", GTK_STOCK_HELP, "Help", NULL, NULL, NULL},
        { "OpenFile",       GTK_STOCK_OPEN, NULL,   "<control>O", NULL, G_CALLBACK(file_open) },
@@ -552,6 +586,10 @@ static GtkActionEntry menu_items[] = {
        { "SelectEvents",   NULL, "SelectEvents", NULL, NULL, G_CALLBACK(selectevents_dialog) },
        { "Quit",           GTK_STOCK_QUIT, NULL,   "<control>Q", NULL, G_CALLBACK(quit) },
        { "About",          GTK_STOCK_ABOUT, NULL,  NULL, NULL, G_CALLBACK(about_dialog) },
+       { "ViewList",       NULL, "List",  "<control>1", NULL, G_CALLBACK(view_list) },
+       { "ViewProfile",    NULL, "Profile", "<control>2", NULL, G_CALLBACK(view_profile) },
+       { "ViewInfo",       NULL, "Info", "<control>3", NULL, G_CALLBACK(view_info) },
+       { "ViewThree",       NULL, "Three", "<control>4", NULL, G_CALLBACK(view_three) },
 };
 static gint nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
 
@@ -571,6 +609,12 @@ static const gchar* ui_string = " \
                        </menu> \
                        <menu name=\"LogMenu\" action=\"LogMenuAction\"> \
                                <menuitem name=\"Renumber\" action=\"Renumber\" /> \
+                               <menu name=\"View\" action=\"ViewMenuAction\"> \
+                                       <menuitem name=\"List\" action=\"ViewList\" /> \
+                                       <menuitem name=\"Profile\" action=\"ViewProfile\" /> \
+                                       <menuitem name=\"Info\" action=\"ViewInfo\" /> \
+                                       <menuitem name=\"Paned\" action=\"ViewThree\" /> \
+                               </menu> \
                        </menu> \
                        <menu name=\"FilterMenu\" action=\"FilterMenuAction\"> \
                                <menuitem name=\"SelectEvents\" action=\"SelectEvents\" /> \
@@ -603,89 +647,6 @@ static void switch_page(GtkNotebook *notebook, gint arg1, gpointer user_data)
        repaint_dive();
 }
 
-static const char notebook_group[] = "123";
-#define GRP_ID ((void *)notebook_group)
-typedef struct {
-       char *name;
-       GtkWidget *widget;
-       GtkWidget *box;
-       gulong delete_handler;
-       gulong destroy_handler;
-} notebook_data_t;
-
-static notebook_data_t nbd[2]; /* we rip at most two notebook pages off */
-
-static GtkNotebook *create_new_notebook_window(GtkNotebook *source,
-               GtkWidget *page,
-               gint x, gint y, gpointer data)
-{
-       GtkWidget *win, *notebook, *vbox;
-       notebook_data_t *nbdp;
-       GtkAllocation allocation;
-
-       /* pick the right notebook page data and return if both are detached */
-       if (nbd[0].widget == NULL)
-               nbdp = nbd;
-       else if (nbd[1].widget == NULL)
-               nbdp = nbd + 1;
-       else
-               return NULL;
-
-       nbdp->name = strdup(gtk_widget_get_name(page));
-       nbdp->widget = win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
-       gtk_window_set_title(GTK_WINDOW(win), nbdp->name);
-       gtk_window_move(GTK_WINDOW(win), x, y);
-
-       /* Destroying the dive list will kill the application */
-       nbdp->delete_handler = g_signal_connect(G_OBJECT(win), "delete-event", G_CALLBACK(on_delete), NULL);
-       nbdp->destroy_handler = g_signal_connect(G_OBJECT(win), "destroy", G_CALLBACK(on_destroy), NULL);
-
-       nbdp->box = vbox = gtk_vbox_new(FALSE, 0);
-       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);
-       /* 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_get_allocation(page, &allocation);
-       gtk_window_set_default_size(GTK_WINDOW(win), allocation.width, allocation.height);
-
-       gtk_widget_show_all(win);
-       return GTK_NOTEBOOK(notebook);
-}
-
-static gboolean drag_cb(GtkWidget *widget, GdkDragContext *context,
-       gint x, gint y, guint time,
-       gpointer user_data)
-{
-       GtkWidget *source;
-       notebook_data_t *nbdp;
-
-       gtk_drag_finish(context, TRUE, TRUE, time);
-       source = gtk_drag_get_source_widget(context);
-       if (nbd[0].name && ! strcmp(nbd[0].name,gtk_widget_get_name(source)))
-               nbdp = nbd;
-       else if (nbd[1].name && ! strcmp(nbd[1].name,gtk_widget_get_name(source)))
-               nbdp = nbd + 1;
-       else /* just on ourselves */
-               return TRUE;
-
-       /* we no longer need the widget - but getting rid of this is hard;
-        * remove the signal handler, remove the notebook from the box
-        * then destroy the widget (and clear out our data structure) */
-       g_signal_handler_disconnect(nbdp->widget,nbdp->delete_handler);
-       g_signal_handler_disconnect(nbdp->widget,nbdp->destroy_handler);
-       gtk_container_remove(GTK_CONTAINER(nbdp->box), source);
-       gtk_widget_destroy(nbdp->widget);
-       nbdp->widget = NULL;
-       free(nbdp->name);
-       nbdp->name = NULL;
-
-       return TRUE;
-}
-
 void init_ui(int *argcp, char ***argvp)
 {
        GtkWidget *win;
@@ -696,13 +657,9 @@ void init_ui(int *argcp, char ***argvp)
        GtkWidget *stats;
        GtkWidget *menubar;
        GtkWidget *vbox;
-       GtkWidget *hpane, *vpane;
        GdkScreen *screen;
        GtkIconTheme *icon_theme=NULL;
        GtkSettings *settings;
-       static const GtkTargetEntry notebook_target = {
-               "GTK_NOTEBOOK_TAB", GTK_TARGET_SAME_APP, 0
-       };
 
        gtk_init(argcp, argvp);
        settings = gtk_settings_get_default();
@@ -771,10 +728,6 @@ void init_ui(int *argcp, char ***argvp)
        /* Notebook for dive info vs profile vs .. */
        notebook = gtk_notebook_new();
        gtk_paned_add1(GTK_PANED(hpane), notebook);
-       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, &notebook_target, 1, GDK_ACTION_MOVE);
-       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 */
@@ -868,7 +821,7 @@ static gboolean expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer
        gc.cr = gdk_cairo_create(widget->window);
        g_object_set(widget, "has-tooltip", TRUE, NULL);
        g_signal_connect(widget, "query-tooltip", G_CALLBACK(profile_tooltip), &drawing_area);
-       set_source_rgb(&gc, 0, 0, 0);
+       init_profile_background(&gc);
        cairo_paint(gc.cr);
 
        if (dive) {