Implement recommended file suffixes in dialog
authorPhilip Chimento <philip.chimento@gmail.com>
Sun, 12 Feb 2012 12:11:23 +0000 (13:11 +0100)
committerPhilip Chimento <philip.chimento@gmail.com>
Sun, 12 Feb 2012 12:11:23 +0000 (13:11 +0100)
When creating a file with glk_fileref_create_by_prompt(), there will
be a file filter active for the recommended file extension. For
fileusage_InputRecord and fileusage_Transcript, there will also be a
filter for text/plain files selectable. In any case there is also an
"All files" filter selectable.

libchimara/fileref.c

index 3db89a2445cbcb204dc64709a75ff38a3f095540..8bda95f8a9a90765685f1c42f722885dbf3be0d9 100644 (file)
@@ -261,6 +261,48 @@ glk_fileref_create_by_prompt(glui32 usage, glui32 fmode, glui32 rock)
                        return NULL;
        }
        
+       /* Set up a file filter with suggested extensions */
+       GtkFileFilter *filter = gtk_file_filter_new();
+       switch(usage & fileusage_TypeMask)
+       {
+               case fileusage_Data:
+                       gtk_file_filter_set_name(filter, _("Data files (*.glkdata)"));
+                       gtk_file_filter_add_pattern(filter, "*.glkdata");
+                       break;
+               case fileusage_SavedGame:
+                       gtk_file_filter_set_name(filter, _("Saved games (*.glksave)"));
+                       gtk_file_filter_add_pattern(filter, "*.glksave");
+                       break;
+               case fileusage_InputRecord:
+                       gtk_file_filter_set_name(filter, _("Text files (*.txt)"));
+                       gtk_file_filter_add_pattern(filter, "*.txt");
+                       break;
+               case fileusage_Transcript:
+                       gtk_file_filter_set_name(filter, _("Transcript files (*.txt)"));
+                       gtk_file_filter_add_pattern(filter, "*.txt");
+                       break;
+               default:
+                       ILLEGAL_PARAM("Unknown file usage: %u", usage);
+                       gdk_threads_leave();
+                       return NULL;
+       }
+       gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(chooser), filter);
+
+       /* Add a "text mode" filter for text files */
+       if((usage & fileusage_TypeMask) == fileusage_InputRecord || (usage & fileusage_TypeMask) == fileusage_Transcript)
+       {
+               filter = gtk_file_filter_new();
+               gtk_file_filter_set_name(filter, _("All text files"));
+               gtk_file_filter_add_mime_type(filter, "text/plain");
+               gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(chooser), filter);
+       }
+
+       /* Add another non-restricted filter */
+       filter = gtk_file_filter_new();
+       gtk_file_filter_set_name(filter, _("All files"));
+       gtk_file_filter_add_pattern(filter, "*");
+       gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(chooser), filter);
+
        if(glk_data->current_dir)
                gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(chooser), glk_data->current_dir);