static void save_cb (GtkButton *button, GtkWidget *dsn) { DsnConfigPrivate *priv; priv = g_object_get_data (G_OBJECT (dsn), DSN_CONFIG_DATA); const GdaDsnInfo *newdsn; newdsn = gdaui_dsn_editor_get_dsn (priv->dsn_editor); GError *error = NULL; if (! gda_config_define_dsn (newdsn, &error)) { _gdaui_utility_show_error (NULL, _("Could not save DSN definition: %s"), error ? error->message : _("No detail")); g_clear_error (&error); } /* update reference DSN and UI */ GdaDsnInfo *dsn_info; dsn_info = gda_config_get_dsn_info (newdsn->name); gdaui_dsn_editor_set_dsn (priv->dsn_editor, dsn_info); }
static void dsn_copy_cb (G_GNUC_UNUSED GSimpleAction *action, GVariant *state, gpointer data) { GdauiDsnEditor *editor; editor = GDAUI_DSN_EDITOR (data); GtkWindow *parent = NULL; parent = (GtkWindow*) gtk_widget_get_ancestor (GTK_WIDGET (editor), GTK_TYPE_WINDOW); GtkWidget *dialog = NULL; dialog = gtk_dialog_new_with_buttons (_("Data source copy"), parent, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, _("Create data source"), GTK_RESPONSE_ACCEPT, _("_Cancel"), GTK_RESPONSE_REJECT, NULL); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_REJECT); GtkWidget *grid, *dlg_box, *label, *entry; dlg_box = gtk_dialog_get_content_area (GTK_DIALOG (dialog)); grid = gtk_grid_new (); gtk_box_pack_start (GTK_BOX (dlg_box), grid, TRUE, TRUE, 6); gtk_container_set_border_width (GTK_CONTAINER (grid), 0); gtk_grid_set_row_spacing (GTK_GRID (grid), 6); gtk_grid_set_column_spacing (GTK_GRID (grid), 5); gchar *str; str = g_strdup_printf (_("Define the named of the new data source which will be created as a copy " "of '%s':"), editor->priv->name); label = gtk_label_new (str); g_free (str); gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); gtk_grid_attach (GTK_GRID (grid), label, 0, 0, 2, 1); str = _gdaui_utility_markup_title (_("Data source name"), FALSE); label = gtk_label_new (""); gtk_label_set_markup (GTK_LABEL (label), str); g_free (str); gtk_widget_set_halign (label, GTK_ALIGN_START); gtk_grid_attach (GTK_GRID (grid), label, 0, 1, 1, 1); entry = gtk_entry_new (); guint i; for (i = 1; ; i++) { str = g_strdup_printf ("%s_%u", editor->priv->name, i); if (! gda_config_get_dsn_info (str)) { gtk_entry_set_text (GTK_ENTRY (entry), str); g_free (str); break; } g_free (str); } gtk_editable_set_editable (GTK_EDITABLE (entry), TRUE); g_signal_connect (entry, "changed", G_CALLBACK (copy_dlg_entry_changed_cb), dialog); gtk_widget_set_hexpand (entry, TRUE); gtk_grid_attach (GTK_GRID (grid), entry, 1, 1, 1, 1); gtk_widget_show_all (grid); if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) { const gchar *name; name = gtk_entry_get_text (GTK_ENTRY (entry)); GdaDsnInfo *dsn_info = NULL; GError *error = NULL; dsn_info = gda_config_get_dsn_info (editor->priv->name); if (dsn_info) { dsn_info = gda_dsn_info_copy (dsn_info); g_free (dsn_info->name); dsn_info->name = g_strdup (name); gda_config_define_dsn (dsn_info, &error); gda_dsn_info_free (dsn_info); } else g_set_error (&error, GDA_CONFIG_ERROR, GDA_CONFIG_DSN_NOT_FOUND_ERROR, ("DSN '%s' does not exist anymore"), editor->priv->name); if (error) { _gdaui_utility_show_error (GTK_WINDOW (dialog), _("Could not create data source: %s"), error->message); g_clear_error (&error); } } gtk_widget_destroy (dialog); }