Commit 5e094147 authored by Paolo Bacchilega's avatar Paolo Bacchilega
Browse files

[photo_importer] show the destination in the main dialog as well

parent 9b996f33
......@@ -31,7 +31,15 @@
#define GET_WIDGET(x) (_gtk_builder_get_widget (self->priv->builder, (x)))
/* Signals */
enum {
DESTINATION_CHANGED,
LAST_SIGNAL
};
static gpointer parent_class = NULL;
static guint signals[LAST_SIGNAL] = { 0 };
struct _GthImportPreferencesDialogPrivate {
......@@ -67,6 +75,18 @@ gth_import_preferences_dialog_class_init (GthImportPreferencesDialogClass *klass
object_class = (GObjectClass*) klass;
object_class->finalize = gth_import_preferences_dialog_finalize;
/* signals */
signals[DESTINATION_CHANGED] =
g_signal_new ("destination-changed",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GthImportPreferencesDialogClass, destination_changed),
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE,
0);
}
......@@ -170,54 +190,34 @@ create_example_file_data (void)
static void
update_destination (GthImportPreferencesDialog *self)
{
GFile *destination;
GthSubfolderType subfolder_type;
GthSubfolderFormat subfolder_format;
gboolean single_subfolder;
const char *custom_format;
GthFileData *example_data;
GTimeVal timeval;
GFile *destination_example;
char *uri;
char *example;
GthSubfolderType subfolder_type;
GthSubfolderFormat subfolder_format;
destination = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (GET_WIDGET ("destination_filechooserbutton")));
if (destination == NULL)
destination_example = gth_import_preferences_dialog_get_destination_example (self);
if (destination_example == NULL)
return;
subfolder_type = get_subfolder_type (self);
subfolder_format = gtk_combo_box_get_active (GTK_COMBO_BOX (self->priv->subfolder_format_list));
single_subfolder = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (GET_WIDGET ("single_subfolder_checkbutton")));
custom_format = gtk_entry_get_text (GTK_ENTRY (GET_WIDGET ("custom_format_entry")));
example_data = create_example_file_data ();
g_get_current_time (&timeval);
destination_example = gth_import_utils_get_file_destination (example_data,
destination,
subfolder_type,
subfolder_format,
single_subfolder,
custom_format,
self->priv->event,
timeval);
uri = g_file_get_parse_name (destination_example);
example = g_strdup_printf (_("example: %s"), uri);
gtk_label_set_text (GTK_LABEL (GET_WIDGET ("example_label")), example);
subfolder_type = get_subfolder_type (self);
gtk_widget_set_sensitive (GET_WIDGET ("single_subfolder_checkbutton"), subfolder_type != GTH_SUBFOLDER_TYPE_NONE);
gtk_widget_set_sensitive (self->priv->subfolder_type_list, subfolder_type != GTH_SUBFOLDER_TYPE_NONE);
gtk_widget_set_sensitive (self->priv->subfolder_format_list, subfolder_type != GTH_SUBFOLDER_TYPE_NONE);
gtk_widget_set_sensitive (GET_WIDGET ("subfolder_options_notebook"), subfolder_type != GTH_SUBFOLDER_TYPE_NONE);
subfolder_format = gtk_combo_box_get_active (GTK_COMBO_BOX (self->priv->subfolder_format_list));
gtk_notebook_set_current_page (GTK_NOTEBOOK (GET_WIDGET ("subfolder_options_notebook")), (subfolder_format == GTH_SUBFOLDER_FORMAT_CUSTOM) ? 1 : 0);
g_signal_emit (self, signals[DESTINATION_CHANGED], 0);
g_free (example);
g_free (uri);
g_object_unref (destination_example);
g_object_unref (example_data);
g_object_unref (destination);
}
......@@ -466,4 +466,46 @@ gth_import_preferences_dialog_set_event (GthImportPreferencesDialog *self,
{
g_free (self->priv->event);
self->priv->event = g_strdup (event);
g_signal_emit (self, signals[DESTINATION_CHANGED], 0);
}
GFile *
gth_import_preferences_dialog_get_destination_example (GthImportPreferencesDialog *self)
{
GFile *destination;
GthSubfolderType subfolder_type;
GthSubfolderFormat subfolder_format;
gboolean single_subfolder;
const char *custom_format;
GthFileData *example_data;
GTimeVal timeval;
GFile *destination_example;
destination = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (GET_WIDGET ("destination_filechooserbutton")));
if (destination == NULL)
return NULL;
subfolder_type = get_subfolder_type (self);
subfolder_format = gtk_combo_box_get_active (GTK_COMBO_BOX (self->priv->subfolder_format_list));
single_subfolder = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (GET_WIDGET ("single_subfolder_checkbutton")));
custom_format = gtk_entry_get_text (GTK_ENTRY (GET_WIDGET ("custom_format_entry")));
example_data = create_example_file_data ();
g_get_current_time (&timeval);
destination_example = gth_import_utils_get_file_destination (example_data,
destination,
subfolder_type,
subfolder_format,
single_subfolder,
custom_format,
self->priv->event,
timeval);
g_object_unref (example_data);
g_object_unref (destination);
return destination_example;
}
......@@ -47,12 +47,18 @@ struct _GthImportPreferencesDialog {
struct _GthImportPreferencesDialogClass {
GtkDialogClass parent_class;
/*< signals >*/
void (*destination_changed) (GthImportPreferencesDialog *self);
};
GType gth_import_preferences_dialog_get_type (void);
GtkWidget * gth_import_preferences_dialog_new (void);
void gth_import_preferences_dialog_set_event (GthImportPreferencesDialog *self,
const char *event);
GFile * gth_import_preferences_dialog_get_destination_example
(GthImportPreferencesDialog *self);
G_END_DECLS
......
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0"?>
<interface>
<requires lib="gtk+" version="2.16"/>
<!-- interface-naming-policy project-wide -->
......@@ -10,11 +10,13 @@
<child internal-child="vbox">
<object class="GtkVBox" id="dialog-vbox1">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<property name="spacing">2</property>
<child>
<object class="GtkVBox" id="vbox1">
<property name="visible">True</property>
<property name="border_width">5</property>
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
<object class="GtkHBox" id="source_selector_box">
......@@ -108,6 +110,7 @@
<child>
<object class="GtkVBox" id="vbox3">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
<object class="GtkHBox" id="filelist_box">
......@@ -129,7 +132,7 @@
<child>
<object class="GtkTable" id="tags_box">
<property name="visible">True</property>
<property name="n_rows">2</property>
<property name="n_rows">3</property>
<property name="n_columns">2</property>
<property name="column_spacing">6</property>
<property name="row_spacing">5</property>
......@@ -144,8 +147,8 @@
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
</packing>
</child>
<child>
......@@ -163,8 +166,8 @@
</child>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
......@@ -177,6 +180,8 @@
<property name="mnemonic_widget">event_entry</property>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
......@@ -184,7 +189,59 @@
<object class="GtkEntry" id="event_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char"></property>
<property name="invisible_char">&#x25CF;</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">_Destination:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">destination_button</property>
</object>
<packing>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkButton" id="destination_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Click to change the destination or set an automatic subfolder</property>
<child>
<object class="GtkHBox" id="hbox2">
<property name="visible">True</property>
<property name="spacing">6</property>
<child>
<object class="GtkImage" id="destination_icon">
<property name="visible">True</property>
<property name="icon_name">folder</property>
</object>
<packing>
<property name="expand">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="destination_label">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="ellipsize">start</property>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<packing>
<property name="left_attach">1</property>
......
......@@ -269,6 +269,29 @@ file_view_selection_changed_cb (GtkIconView *iconview,
}
static void
preferences_dialog_destination_changed_cb (GthImportPreferencesDialog *dialog,
DialogData *data)
{
GFile *destination_example;
destination_example = gth_import_preferences_dialog_get_destination_example (dialog);
if (destination_example != NULL) {
char *name;
name = g_file_get_parse_name (destination_example);
gtk_image_set_from_icon_name(GTK_IMAGE (GET_WIDGET("destination_icon")), "folder", GTK_ICON_SIZE_MENU);
gtk_label_set_text (GTK_LABEL (GET_WIDGET ("destination_label")), name);
g_free (name);
}
else {
gtk_image_set_from_icon_name(GTK_IMAGE (GET_WIDGET("destination_icon")), "dialog-error", GTK_ICON_SIZE_MENU);
gtk_label_set_text (GTK_LABEL (GET_WIDGET ("destination_label")), _("Invalid Destination"));
}
}
static void
list_ready_cb (GList *files,
GError *error,
......@@ -474,6 +497,15 @@ preferences_button_clicked_cb (GtkWidget *widget,
}
static void
event_entry_changed_cb (GtkEditable *editable,
DialogData *data)
{
gth_import_preferences_dialog_set_event (GTH_IMPORT_PREFERENCES_DIALOG (data->preferences_dialog),
gtk_entry_get_text (GTK_ENTRY (GET_WIDGET ("event_entry"))));
}
void
dlg_photo_importer (GthBrowser *browser,
GFile *source)
......@@ -615,6 +647,10 @@ dlg_photo_importer (GthBrowser *browser,
"selection_changed",
G_CALLBACK (file_view_selection_changed_cb),
data);
g_signal_connect (data->preferences_dialog,
"destination_changed",
G_CALLBACK (preferences_dialog_destination_changed_cb),
data);
g_signal_connect (GET_WIDGET ("preferences_button"),
"clicked",
G_CALLBACK (preferences_button_clicked_cb),
......@@ -623,6 +659,14 @@ dlg_photo_importer (GthBrowser *browser,
"entry-points-changed",
G_CALLBACK (entry_points_changed_cb),
data);
g_signal_connect_after (GET_WIDGET ("event_entry"),
"changed",
G_CALLBACK (event_entry_changed_cb),
data);
g_signal_connect (GET_WIDGET ("destination_button"),
"clicked",
G_CALLBACK (preferences_button_clicked_cb),
data);
/* Run dialog. */
......@@ -630,5 +674,8 @@ dlg_photo_importer (GthBrowser *browser,
gtk_window_set_modal (GTK_WINDOW (data->dialog), FALSE);
gtk_widget_show (data->dialog);
gth_import_preferences_dialog_set_event (GTH_IMPORT_PREFERENCES_DIALOG (data->preferences_dialog),
gtk_entry_get_text (GTK_ENTRY (GET_WIDGET ("event_entry"))));
update_source_list (data);
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment