[dia] diagram-as-element: pre-selection of extensions for PROP_TYPE_FILE
- From: Hans Breuer <hans src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [dia] diagram-as-element: pre-selection of extensions for PROP_TYPE_FILE
- Date: Fri, 30 Jul 2010 15:08:49 +0000 (UTC)
commit ac3464f7ff0229651f3e6792f6ed3f13134e1871
Author: Hans Breuer <hans breuer org>
Date: Fri Jul 30 17:02:46 2010 +0200
diagram-as-element: pre-selection of extensions for PROP_TYPE_FILE
DONE:
- make diagrams directly selecteable in the properties dialog
file entry
- normalize filenames during save (parent diagram relative path)
(with earlier commit)
TODO:
- extend the renderer interface to get rid of the extra DiaImage,
at least for some renderers (DiaRenderer::set_matrix?)
- the image gets updated too often, something wrong with mtime check?
- allow to open the diagram stand-alone by context menu
- make new object available in the Misc sheet
lib/prop_text.c | 2 ++
lib/widgets.c | 31 +++++++++++++++++++++++++++++--
lib/widgets.h | 1 +
objects/Misc/diagram_as_object.c | 7 ++++++-
4 files changed, 38 insertions(+), 3 deletions(-)
---
diff --git a/lib/prop_text.c b/lib/prop_text.c
index b2227d3..248dc32 100644
--- a/lib/prop_text.c
+++ b/lib/prop_text.c
@@ -157,6 +157,8 @@ static GtkWidget *
fileprop_get_widget(StringProperty *prop, PropDialog *dialog)
{
GtkWidget *ret = dia_file_selector_new();
+ if (prop->common.extra_data)
+ dia_file_selector_set_extensions (DIAFILESELECTOR(ret), prop->common.extra_data);
prophandler_connect(&prop->common, G_OBJECT(ret), "value-changed");
return ret;
}
diff --git a/lib/widgets.c b/lib/widgets.c
index 1a3817a..41d7e7d 100644
--- a/lib/widgets.c
+++ b/lib/widgets.c
@@ -1369,6 +1369,7 @@ struct _DiaFileSelector
GtkButton *browse;
GtkWidget *dialog;
gchar *sys_filename;
+ gchar *pattern; /* for supported formats */
};
struct _DiaFileSelectorClass
@@ -1396,6 +1397,10 @@ dia_file_selector_unrealize(GtkWidget *widget)
g_free(fs->sys_filename);
fs->sys_filename = NULL;
}
+ if (fs->pattern) {
+ g_free (fs->pattern);
+ fs->pattern = NULL;
+ }
(* GTK_WIDGET_CLASS (gtk_type_class(gtk_hbox_get_type ()))->unrealize) (widget);
}
@@ -1471,7 +1476,10 @@ dia_file_selector_browse_pressed(GtkWidget *widget, gpointer data)
filter = gtk_file_filter_new ();
gtk_file_filter_set_name (filter, _("Supported Formats"));
- gtk_file_filter_add_pixbuf_formats (filter);
+ if (fs->pattern)
+ gtk_file_filter_add_pattern (filter, fs->pattern);
+ else /* fallback */
+ gtk_file_filter_add_pixbuf_formats (filter);
gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter);
filter = gtk_file_filter_new ();
@@ -1497,7 +1505,8 @@ dia_file_selector_init (DiaFileSelector *fs)
{
/* Here's where we set up the real thing */
fs->dialog = NULL;
- fs->sys_filename = NULL;
+ fs->sys_filename = NULL;
+ fs->pattern = NULL;
fs->entry = GTK_ENTRY(gtk_entry_new());
gtk_box_pack_start(GTK_BOX(fs), GTK_WIDGET(fs->entry), FALSE, TRUE, 0);
@@ -1545,6 +1554,24 @@ dia_file_selector_new ()
}
void
+dia_file_selector_set_extensions (DiaFileSelector *fs, const gchar **exts)
+{
+ GString *pattern = g_string_new ("*.");
+ int i = 0;
+
+ g_free (fs->pattern);
+
+ while (exts[i] != NULL) {
+ if (i != 0)
+ g_string_append (pattern, "|*.");
+ g_string_append (pattern, exts[i]);
+ ++i;
+ }
+ fs->pattern = pattern->str;
+ g_string_free (pattern, FALSE);
+}
+
+void
dia_file_selector_set_file(DiaFileSelector *fs, gchar *file)
{
/* filename is in system encoding */
diff --git a/lib/widgets.h b/lib/widgets.h
index 6af033a..07a8dda 100644
--- a/lib/widgets.h
+++ b/lib/widgets.h
@@ -120,6 +120,7 @@ void dia_arrow_selector_set_arrow (DiaArrowSelector *as,
GType dia_file_selector_get_type (void);
GtkWidget* dia_file_selector_new (void);
+void dia_file_selector_set_extensions (DiaFileSelector *fs, const gchar **exts);
void dia_file_selector_set_file (DiaFileSelector *fs, char *file);
const gchar *dia_file_selector_get_file (DiaFileSelector *fs);
diff --git a/objects/Misc/diagram_as_object.c b/objects/Misc/diagram_as_object.c
index 63cc7bd..78bf7a1 100644
--- a/objects/Misc/diagram_as_object.c
+++ b/objects/Misc/diagram_as_object.c
@@ -102,6 +102,8 @@ DiaObjectType diagram_as_element_type =
static void _dae_update_data (DiagramAsElement *dae);
+static const gchar *_extensions[] = { "dia", NULL };
+
static PropDescription _dae_props[] = {
ELEMENT_COMMON_PROPERTIES,
PROP_STD_LINE_WIDTH,
@@ -109,7 +111,7 @@ static PropDescription _dae_props[] = {
PROP_STD_FILL_COLOUR,
PROP_STD_SHOW_BACKGROUND,
{ "diagram_file", PROP_TYPE_FILE, PROP_FLAG_VISIBLE,
- N_("Diagram file"), NULL, NULL},
+ N_("Diagram file"), NULL, /* extra_data */_extensions },
PROP_DESC_END
};
static PropDescription *
@@ -352,6 +354,9 @@ _dae_load (ObjectNode obj_node, int version, const char *filename)
g_free (dae->filename);
dae->filename = filename;
g_free (dirname);
+
+ /* need to update again with new filenames */
+ _dae_update_data(dae);
}
return obj;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]