Пример #1
0
static void
dsn_reset_cb (G_GNUC_UNUSED GSimpleAction *action, GVariant *state, gpointer data)
{
	GdauiDsnEditor *editor;
	editor = GDAUI_DSN_EDITOR (data);
	GdaDsnInfo *orig;
	orig = gda_config_get_dsn_info (editor->priv->name);
	gdaui_dsn_editor_set_dsn (editor, orig);
}
Пример #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);
}
Пример #3
0
static void
dsn_test_cb (G_GNUC_UNUSED GSimpleAction *action, GVariant *state, gpointer data)
{
	GdauiDsnEditor *editor;
	editor = GDAUI_DSN_EDITOR (data);

	GtkWidget *test_dialog = NULL;
	GdauiLogin* login = NULL;
	GdaConnection *cnc = NULL;
	gboolean auth_needed = gdaui_dsn_editor_need_authentication (editor);

	GtkWindow *parent = NULL;
	parent = (GtkWindow*) gtk_widget_get_ancestor (GTK_WIDGET (editor), GTK_TYPE_WINDOW);

	const gchar *dsn;
	dsn = editor->priv->name;
	if (auth_needed) {
		gchar *title;
		title = g_strdup_printf (_("Login for %s"), dsn);
		test_dialog = gdaui_login_dialog_new (title, parent);
		g_free (title);
		login = gdaui_login_dialog_get_login_widget (GDAUI_LOGIN_DIALOG (test_dialog));
		g_object_set (G_OBJECT (login), "dsn", dsn, NULL);
	}

	if (!auth_needed || gdaui_login_dialog_run (GDAUI_LOGIN_DIALOG (test_dialog))) {
		if (test_dialog)
			parent = GTK_WINDOW (test_dialog);

		GtkWidget *msgdialog;
		GError *error = NULL;
		const GdaDsnInfo *cinfo = NULL;

		if (login)
			cinfo = gdaui_login_get_connection_information (login);
		cnc = gda_connection_open_from_dsn (dsn,
						    cinfo ? cinfo->auth_string : NULL,
						    GDA_CONNECTION_OPTIONS_NONE, &error);
		if (cnc) {
			msgdialog = gtk_message_dialog_new_with_markup (parent,
									GTK_DIALOG_MODAL,
									GTK_MESSAGE_INFO, GTK_BUTTONS_OK,
									"<b>%s</b>",
									_("Connection successfully opened!"));
			gda_connection_close (cnc, NULL);
		}
		else {
			msgdialog = gtk_message_dialog_new_with_markup (parent,
									GTK_DIALOG_MODAL,
									GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
									"<b>%s:</b>\n%s",
									_("Could not open connection"),
									error->message ? error->message : _("No detail"));
			if (error)
				g_error_free (error);
		}

		gtk_dialog_run (GTK_DIALOG (msgdialog));
		gtk_widget_destroy (msgdialog);
	}
	if (test_dialog)
		gtk_widget_destroy (test_dialog);
}
Пример #4
0
GtkWidget *
dsn_config_new (void)
{
	DsnConfigPrivate *priv;
	GtkWidget *dsn;
	GtkWidget *label;
	GtkWidget *sw;
	gchar *title;
	GdaDataModel *model;

	priv = g_new0 (DsnConfigPrivate, 1);
	dsn = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
	gtk_widget_show (dsn);
        gtk_container_set_border_width (GTK_CONTAINER (dsn), 6);
	g_object_set_data_full (G_OBJECT (dsn), DSN_CONFIG_DATA, priv,
				(GDestroyNotify) free_private_data);

	/* title */
	title = g_strdup_printf ("<b>%s</b>\n%s", _("Data Sources"),
				 _("Data sources are the means by which database "
				 "connections are identified: all "
				 "the information needed to open a connection to "
				 "a specific database using a 'provider' is referenced using "
				 "a unique name."));
	priv->title = gdaui_bar_new (title);
	g_free (title);

	gdaui_bar_set_icon_from_resource (GDAUI_BAR (priv->title), "/images/gdaui-generic.png");

	gtk_box_pack_start (GTK_BOX (dsn), priv->title, FALSE, FALSE, 0);
	gtk_widget_show (priv->title);

	/* horizontal box for the provider list and its properties */
	GtkWidget *hbox;
	hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
	gtk_box_pack_start (GTK_BOX (dsn), hbox, TRUE, TRUE, 0);

	/* left part */
	GtkWidget *vbox;
	vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
	gtk_widget_set_size_request (vbox, 150, -1);
	gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);

	/* create the data source list */
	sw = gtk_scrolled_window_new (NULL, NULL);
	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), GTK_POLICY_AUTOMATIC,
					GTK_POLICY_AUTOMATIC);
	gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_IN);
	gtk_box_pack_start (GTK_BOX (vbox), sw, TRUE, TRUE, 0);

	model = gda_config_list_dsn ();
	priv->dsn_list = gdaui_raw_grid_new (model);
	gtk_tree_view_move_column_after (GTK_TREE_VIEW (priv->dsn_list),
					 gtk_tree_view_get_column (GTK_TREE_VIEW (priv->dsn_list), 1),
					 gtk_tree_view_get_column (GTK_TREE_VIEW (priv->dsn_list), 2));

	g_object_unref (model);
	g_object_set_data (G_OBJECT (dsn), "grid", priv->dsn_list);
	gdaui_data_proxy_column_set_editable (GDAUI_DATA_PROXY (priv->dsn_list), 0, FALSE);
	gdaui_data_selector_set_column_visible (GDAUI_DATA_SELECTOR (priv->dsn_list), -1, FALSE);
	gdaui_data_selector_set_column_visible (GDAUI_DATA_SELECTOR (priv->dsn_list), 0, TRUE);
	gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (priv->dsn_list), FALSE);
	g_object_set (priv->dsn_list, "info-cell-visible", FALSE, NULL);

	gtk_container_add (GTK_CONTAINER (sw), priv->dsn_list);

	g_signal_connect (priv->dsn_list, "selection-changed",
			  G_CALLBACK (list_selection_changed_cb), dsn);
	g_signal_connect (priv->dsn_list, "populate-popup",
			  G_CALLBACK (list_popup_cb), dsn);

	/* add/delete buttons */
	GtkWidget *toolbar;
	toolbar = gtk_toolbar_new ();
	gtk_toolbar_set_icon_size (GTK_TOOLBAR (toolbar), GTK_ICON_SIZE_SMALL_TOOLBAR);
	gtk_style_context_add_class (gtk_widget_get_style_context (toolbar), "inline-toolbar");
	gtk_box_pack_start (GTK_BOX (vbox), toolbar, FALSE, FALSE, 0);
	GtkToolItem *titem;
	titem = gtk_tool_button_new (NULL, NULL);
	gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (titem), "list-add-symbolic");
	gtk_actionable_set_action_name (GTK_ACTIONABLE (titem), "win.DatasourceNew");
	gtk_toolbar_insert (GTK_TOOLBAR (toolbar), titem, -1);
	titem = gtk_tool_button_new (NULL, NULL);
	gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (titem), "list-remove-symbolic");
	gtk_actionable_set_action_name (GTK_ACTIONABLE (titem), "win.DatasourceDelete");
	gtk_toolbar_insert (GTK_TOOLBAR (toolbar), titem, -1);

	/* create the data source's properties */
	GtkWidget *stack;
	stack = gtk_stack_new ();
	priv->stack = stack;
	gtk_box_pack_start (GTK_BOX (hbox), stack, TRUE, TRUE, 10);

	label = gtk_label_new (_("No data source selected."));
	gtk_stack_add_named (GTK_STACK (stack), label, ST_NOPROP);

	vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
	gtk_stack_add_named (GTK_STACK (stack), vbox, ST_PROP);

	GtkWidget *form;
	form = gdaui_dsn_editor_new ();
	priv->dsn_editor = GDAUI_DSN_EDITOR (form);
	gtk_box_pack_start (GTK_BOX (vbox), form, TRUE, TRUE, 0);
	g_signal_connect (priv->dsn_editor, "changed",
			  G_CALLBACK (dsn_editor_changed_cb), dsn);

	/* action buttons */
	GtkWidget *hbox2;
	hbox2 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
	gtk_box_pack_start (GTK_BOX (vbox), hbox2, FALSE, FALSE, 6);

	GtkWidget *bbox;
	bbox = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL);
	gtk_widget_set_hexpand (bbox, TRUE);
	gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_CENTER);
	gtk_box_pack_start (GTK_BOX (hbox2), bbox, FALSE, FALSE, 6);

	GtkWidget *button;
	button = gtk_toggle_button_new_with_label (_("Definition"));
	gtk_box_pack_start (GTK_BOX (bbox), button, FALSE, FALSE, 0);
	priv->view_buttons [GDAUI_DSN_EDITOR_PANE_DEFINITION] = GTK_TOGGLE_BUTTON (button);
	g_signal_connect (button, "toggled",
			  G_CALLBACK (view_toggled_cb), dsn);

	button = gtk_toggle_button_new_with_label (_("Parameters"));
	gtk_box_pack_start (GTK_BOX (bbox), button, FALSE, FALSE, 0);
	priv->view_buttons [GDAUI_DSN_EDITOR_PANE_PARAMS] = GTK_TOGGLE_BUTTON (button);
	g_signal_connect (button, "toggled",
			  G_CALLBACK (view_toggled_cb), dsn);

	button = gtk_toggle_button_new_with_label (_("Authentication"));
	gtk_box_pack_start (GTK_BOX (bbox), button, FALSE, FALSE, 0);
	priv->view_buttons [GDAUI_DSN_EDITOR_PANE_AUTH] = GTK_TOGGLE_BUTTON (button);
	g_signal_connect (button, "toggled",
			  G_CALLBACK (view_toggled_cb), dsn);

	button = gtk_button_new_from_icon_name ("document-save-symbolic", GTK_ICON_SIZE_BUTTON);
	gtk_box_pack_start (GTK_BOX (hbox2), button, FALSE, FALSE, 0);
	priv->commit_button = button;
	gtk_widget_set_sensitive (button, FALSE);
	gtk_widget_set_tooltip_text (button, _("Write changes made to the DSN"));
	g_signal_connect (button, "clicked",
			  G_CALLBACK (save_cb), dsn);

	gtk_widget_show_all (hbox);
	return dsn;
}