Example #1
0
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);
}
Example #2
0
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);
}