descriptionentry = gtk_entry_new ();
imagelabel = gtk_label_new (_("Image:"));
- imageentry = vik_file_entry_new (GTK_FILE_CHOOSER_ACTION_OPEN);
+ imageentry = vik_file_entry_new (GTK_FILE_CHOOSER_ACTION_OPEN, VF_FILTER_IMAGE);
{
GtkCellRenderer *r;
case VIK_LAYER_WIDGET_FILEENTRY:
if ( param->type == VIK_LAYER_PARAM_STRING )
{
- rv = vik_file_entry_new (GTK_FILE_CHOOSER_ACTION_OPEN);
+ rv = vik_file_entry_new (GTK_FILE_CHOOSER_ACTION_OPEN, GPOINTER_TO_INT(param->widget_data));
if ( vlpd.s )
vik_file_entry_set_filename ( VIK_FILE_ENTRY(rv), vlpd.s );
}
case VIK_LAYER_WIDGET_FOLDERENTRY:
if ( param->type == VIK_LAYER_PARAM_STRING )
{
- rv = vik_file_entry_new (GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
+ rv = vik_file_entry_new (GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, VF_FILTER_NONE);
if ( vlpd.s )
vik_file_entry_set_filename ( VIK_FILE_ENTRY(rv), vlpd.s );
}
GtkWidget *entry, *button;
GtkWidget *file_selector;
GtkFileChooserAction action;
+ gint filter_type;
};
GType vik_file_entry_get_type (void)
return vs_type;
}
-GtkWidget *vik_file_entry_new (GtkFileChooserAction action)
+/**
+ * Create a file entry with an optional file filter
+ */
+GtkWidget *vik_file_entry_new (GtkFileChooserAction action, vf_filter_type filter_type)
{
VikFileEntry *vfe = VIK_FILE_ENTRY ( g_object_new ( VIK_FILE_ENTRY_TYPE, NULL ) );
vfe->entry = gtk_entry_new ();
gtk_box_pack_start ( GTK_BOX(vfe), vfe->button, FALSE, FALSE, 3 );
vfe->file_selector = NULL;
+ vfe->filter_type = filter_type;
return GTK_WIDGET(vfe);
}
NULL);
gtk_window_set_transient_for ( GTK_WINDOW(vfe->file_selector), GTK_WINDOW(win) );
gtk_window_set_destroy_with_parent ( GTK_WINDOW(vfe->file_selector), TRUE );
+
+ switch ( vfe->filter_type ) {
+ case VF_FILTER_IMAGE: {
+ GtkFileFilter *filter = gtk_file_filter_new ();
+ gtk_file_filter_set_name ( filter, _("JPG") );
+ gtk_file_filter_add_mime_type ( filter, "image/jpeg");
+ gtk_file_chooser_add_filter ( GTK_FILE_CHOOSER(vfe->file_selector), filter );
+
+ filter = gtk_file_filter_new ();
+ gtk_file_filter_set_name ( filter, _("PNG") );
+ gtk_file_filter_add_mime_type ( filter, "image/png");
+ gtk_file_chooser_add_filter ( GTK_FILE_CHOOSER(vfe->file_selector), filter );
+
+ break;
+ }
+ case VF_FILTER_MBTILES: {
+ GtkFileFilter *filter = gtk_file_filter_new ();
+ gtk_file_filter_set_name ( filter, _("MBTiles") );
+ gtk_file_filter_add_pattern ( filter, "*.sqlite" );
+ gtk_file_filter_add_pattern ( filter, "*.mbtiles" );
+ gtk_file_filter_add_pattern ( filter, "*.db3" );
+ gtk_file_chooser_add_filter ( GTK_FILE_CHOOSER(vfe->file_selector), filter );
+ break;
+ }
+ default: break;
+ }
+ if ( vfe->filter_type ) {
+ // Always have an catch all filter at the end
+ GtkFileFilter *filter = gtk_file_filter_new ();
+ gtk_file_filter_set_name( filter, _("All") );
+ gtk_file_filter_add_pattern ( filter, "*" );
+ gtk_file_chooser_add_filter (GTK_FILE_CHOOSER(vfe->file_selector), filter);
+ }
}
if ( gtk_dialog_run ( GTK_DIALOG(vfe->file_selector) ) == GTK_RESPONSE_ACCEPT )
GType vik_file_entry_get_type ();
-GtkWidget *vik_file_entry_new (GtkFileChooserAction action);
+typedef enum {
+ VF_FILTER_NONE = 0,
+ VF_FILTER_IMAGE, // JPG+PNG
+ VF_FILTER_MBTILES,
+ VF_FILTER_LAST
+} vf_filter_type;
+
+GtkWidget *vik_file_entry_new (GtkFileChooserAction action, vf_filter_type filter_type);
const gchar *vik_file_entry_get_filename ( VikFileEntry *vfe );
void vik_file_entry_set_filename ( VikFileEntry *vfe, const gchar *filename );
gtk_widget_set_tooltip_text ( GTK_WIDGET(yspin), _("the scale of the map in the Y direction (meters per pixel)") );
imagelabel = gtk_label_new ( _("Map Image:") );
- imageentry = vik_file_entry_new (GTK_FILE_CHOOSER_ACTION_OPEN);
+ imageentry = vik_file_entry_new (GTK_FILE_CHOOSER_ACTION_OPEN, VF_FILTER_IMAGE);
if (*vgl)
{
VikLayerParam maps_layer_params[] = {
{ VIK_LAYER_MAPS, "mode", VIK_LAYER_PARAM_UINT, VIK_LAYER_GROUP_NONE, N_("Map Type:"), VIK_LAYER_WIDGET_COMBOBOX, NULL, NULL, NULL, mode_default, NULL, NULL },
{ VIK_LAYER_MAPS, "directory", VIK_LAYER_PARAM_STRING, VIK_LAYER_GROUP_NONE, N_("Maps Directory:"), VIK_LAYER_WIDGET_FOLDERENTRY, NULL, NULL, NULL, directory_default, NULL, NULL },
- { VIK_LAYER_MAPS, "mapfile", VIK_LAYER_PARAM_STRING, VIK_LAYER_GROUP_NONE, N_("Map File:"), VIK_LAYER_WIDGET_FILEENTRY, NULL, NULL,
+ { VIK_LAYER_MAPS, "mapfile", VIK_LAYER_PARAM_STRING, VIK_LAYER_GROUP_NONE, N_("Map File:"), VIK_LAYER_WIDGET_FILEENTRY, GINT_TO_POINTER(VF_FILTER_MBTILES), NULL,
N_("An MBTiles file. Only applies when the map type method is 'MBTiles'"), file_default, NULL, NULL },
{ VIK_LAYER_MAPS, "alpha", VIK_LAYER_PARAM_UINT, VIK_LAYER_GROUP_NONE, N_("Alpha:"), VIK_LAYER_WIDGET_HSCALE, params_scales, NULL,
N_("Control the Alpha value for transparency effects"), alpha_default, NULL, NULL },