]> git.tdb.fi Git - ext/subsurface.git/blobdiff - gtk-gui.c
Add a xml file filter to the file open dialog
[ext/subsurface.git] / gtk-gui.c
index 4b994d17c722005706209fa46169f693ec1b3f27..7eb85cf806a1b5478429375eefd34d602d4c2dca 100644 (file)
--- a/gtk-gui.c
+++ b/gtk-gui.c
@@ -87,6 +87,8 @@ void report_error(GError* error)
 static void file_open(GtkWidget *w, gpointer data)
 {
        GtkWidget *dialog;
+       GtkFileFilter *filter;
+
        dialog = gtk_file_chooser_dialog_new("Open File",
                GTK_WINDOW(main_window),
                GTK_FILE_CHOOSER_ACTION_OPEN,
@@ -95,6 +97,13 @@ static void file_open(GtkWidget *w, gpointer data)
                NULL);
        gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), TRUE);
 
+       filter = gtk_file_filter_new();
+       gtk_file_filter_add_pattern(filter, "*.xml");
+       gtk_file_filter_add_pattern(filter, "*.XML");
+       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);
+
        if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
                GSList *filenames;
                char *filename;
@@ -338,9 +347,32 @@ static void renumber_dialog(GtkWidget *w, gpointer data)
        gtk_widget_destroy(dialog);
 }
 
+static void about_dialog(GtkWidget *w, gpointer data)
+{
+       const char *logo_property = NULL;
+       GdkPixbuf *logo = NULL;
+       GtkWidget *image = gtk_image_new_from_file("icon.svg");
+
+       if (image) {
+               logo = gtk_image_get_pixbuf(GTK_IMAGE(image));
+               logo_property = "logo";
+       }
+
+       gtk_show_about_dialog(NULL,
+               "program-name", "SubSurface",
+               "comments", "Half-arsed divelog software in C",
+               "license", "GPLv2",
+               "version", "1.0",
+               "copyright", "Linus Torvalds 2011",
+               /* Must be last: */
+               logo_property, logo,
+               NULL);
+}
+
 static GtkActionEntry menu_items[] = {
        { "FileMenuAction", GTK_STOCK_FILE, "File", NULL, NULL, NULL},
        { "LogMenuAction",  GTK_STOCK_FILE, "Log", NULL, NULL, NULL},
+       { "HelpMenuAction", GTK_STOCK_HELP, "Help", NULL, NULL, NULL},
        { "OpenFile",       GTK_STOCK_OPEN, NULL,   "<control>O", NULL, G_CALLBACK(file_open) },
        { "SaveFile",       GTK_STOCK_SAVE, NULL,   "<control>S", NULL, G_CALLBACK(file_save) },
        { "Print",          GTK_STOCK_PRINT, NULL,  "<control>P", NULL, G_CALLBACK(do_print) },
@@ -348,6 +380,7 @@ static GtkActionEntry menu_items[] = {
        { "Preferences",    NULL, "Preferences", NULL, NULL, G_CALLBACK(preferences_dialog) },
        { "Renumber",       NULL, "Renumber", NULL, NULL, G_CALLBACK(renumber_dialog) },
        { "Quit",           GTK_STOCK_QUIT, NULL,   "<control>Q", NULL, G_CALLBACK(quit) },
+       { "About",           GTK_STOCK_ABOUT, NULL,  NULL, NULL, G_CALLBACK(about_dialog) },
 };
 static gint nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
 
@@ -368,6 +401,9 @@ static const gchar* ui_string = " \
                        <menu name=\"LogMenu\" action=\"LogMenuAction\"> \
                                <menuitem name=\"Renumber\" action=\"Renumber\" /> \
                        </menu> \
+                       <menu name=\"Help\" action=\"HelpMenuAction\"> \
+                               <menuitem name=\"About\" action=\"About\" /> \
+                       </menu> \
                </menubar> \
        </ui> \
 ";