]> git.tdb.fi Git - ext/subsurface.git/blobdiff - gtk-gui.c
Adding the right header file for R_OK on Windows
[ext/subsurface.git] / gtk-gui.c
index b72aeca2b5f8bb2872fadf5872ed559a4437fb54..a20954dd6e7fdaabd0bc7f150a5ab3609a347e61 100644 (file)
--- a/gtk-gui.c
+++ b/gtk-gui.c
@@ -7,6 +7,7 @@
 #include <string.h>
 #include <stdlib.h>
 #include <time.h>
+#include <unistd.h>
 
 #include "dive.h"
 #include "divelist.h"
@@ -19,9 +20,9 @@ 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"
 const char *divelist_font;
 
 struct units output_units;
@@ -106,9 +107,9 @@ static void file_open(GtkWidget *w, gpointer data)
        gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(dialog), filter);
 
        if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
-               GSList *filenames;
+               GSList *filenames, *fn_glist;
                char *filename;
-               filenames = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(dialog));
+               filenames = fn_glist = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(dialog));
                
                GError *error = NULL;
                while(filenames != NULL) {
@@ -124,7 +125,7 @@ static void file_open(GtkWidget *w, gpointer data)
                        g_free(filename);
                        filenames = g_slist_next(filenames);
                }
-               g_slist_free(filenames);
+               g_slist_free(fn_glist);
                report_dives(FALSE);
        }
        gtk_widget_destroy(dialog);
@@ -161,7 +162,7 @@ static void ask_save_changes()
        dialog = gtk_dialog_new_with_buttons("Save Changes?",
                GTK_WINDOW(main_window), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
                GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
-               GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+               GTK_STOCK_NO, GTK_RESPONSE_NO,
                NULL);
        content = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
        label = gtk_label_new ("You have unsaved changes\nWould you like to save those before exiting the program?");
@@ -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)
@@ -514,11 +523,7 @@ static void about_dialog(GtkWidget *w, gpointer data)
        GdkPixbuf *logo = NULL;
 
        if (need_icon) {
-#if defined __linux__ || defined __APPLE__
-               GtkWidget *image = gtk_image_new_from_file("subsurface.svg");
-#elif defined WIN32
-               GtkWidget *image = gtk_image_new_from_file("subsurface.ico");
-#endif
+               GtkWidget *image = gtk_image_new_from_file(subsurface_icon_name());
 
                if (image) {
                        logo = gtk_image_get_pixbuf(GTK_IMAGE(image));
@@ -538,9 +543,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 +582,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 +605,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\" /> \
@@ -613,7 +653,6 @@ void init_ui(int *argcp, char ***argvp)
        GtkWidget *stats;
        GtkWidget *menubar;
        GtkWidget *vbox;
-       GtkWidget *hpane, *vpane;
        GdkScreen *screen;
        GtkIconTheme *icon_theme=NULL;
        GtkSettings *settings;
@@ -642,9 +681,6 @@ void init_ui(int *argcp, char ***argvp)
 
        divelist_font = subsurface_get_conf("divelist_font", PREF_STRING);
 
-       if (!divelist_font)
-               divelist_font = DIVELIST_DEFAULT_FONT;
-
        error_info_bar = NULL;
        win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        g_set_application_name ("subsurface");
@@ -659,12 +695,11 @@ void init_ui(int *argcp, char ***argvp)
                        gtk_window_set_default_icon_name ("subsurface");
                }
        }
-       if (need_icon)
-#if defined __linux__ || defined __APPLE__
-               gtk_window_set_icon_from_file(GTK_WINDOW(win), "subsurface.svg", NULL);
-#elif defined WIN32
-               gtk_window_set_icon_from_file(GTK_WINDOW(win), "subsurface.ico", NULL);
-#endif
+       if (need_icon) {
+               const char *icon_name = subsurface_icon_name();
+               if (!access(icon_name, R_OK))
+                       gtk_window_set_icon_from_file(GTK_WINDOW(win), icon_name, NULL);
+       }
        g_signal_connect(G_OBJECT(win), "delete-event", G_CALLBACK(on_delete), NULL);
        g_signal_connect(G_OBJECT(win), "destroy", G_CALLBACK(on_destroy), NULL);
        main_window = win;
@@ -674,7 +709,8 @@ void init_ui(int *argcp, char ***argvp)
        main_vbox = vbox;
 
        menubar = get_menubar_menu(win);
-       gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 0);
+
+       subsurface_ui_setup(settings, menubar, vbox);
 
        vpane = gtk_vpaned_new();
        gtk_box_pack_start(GTK_BOX(vbox), vpane, TRUE, TRUE, 3);
@@ -778,7 +814,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) {
@@ -815,7 +851,7 @@ int process_ui_events(void)
                        break;
                }
        }
-       return(ret);
+       return ret;
 }
 
 
@@ -870,7 +906,7 @@ static GtkEntry *dive_computer_device(GtkWidget *vbox)
 
        entry = gtk_entry_new();
        gtk_container_add(GTK_CONTAINER(frame), entry);
-       gtk_entry_set_text(GTK_ENTRY(entry), "/dev/ttyUSB0");
+       gtk_entry_set_text(GTK_ENTRY(entry), subsurface_USB_name());
 
        return GTK_ENTRY(entry);
 }