/** * gdaui_login_set_connection_information: * @login: a #GdauiLogin object * @cinfo: a pointer to a structure representing the information to display. * * Changes the information displayed in @login, to represent @cinfo. * If @login's mode has %GDA_UI_LOGIN_HIDE_DIRECT_CONNECTION_MODE, then * if @cinfo->name is not %NULL it is displayed in the DSN selector, otherwise * a warning is shown and the result * is the same as having passed %NULL for the @cinfo argument. * * In any case @login's mode (set by gdaui_login_set_mode()) is not changed. */ void gdaui_login_set_connection_information (GdauiLogin *login, const GdaDsnInfo *cinfo) { g_return_if_fail (GDAUI_IS_LOGIN (login)); GdauiLoginPrivate *priv = gdaui_login_get_instance_private (login); if (!cinfo) { _gdaui_dsn_selector_set_dsn (GDAUI_DSN_SELECTOR (priv->dsn_selector), NULL); } else { GdaDsnInfo *info = NULL; if (cinfo->name) info = gda_config_get_dsn_info (cinfo->name); if (info) _gdaui_dsn_selector_set_dsn (GDAUI_DSN_SELECTOR (priv->dsn_selector), cinfo->name); else { /* force switch to */ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->rb_dsn), FALSE); } g_signal_handlers_block_by_func (priv->prov_selector, G_CALLBACK (prov_entry_changed_cb), login); gdaui_provider_selector_set_provider (GDAUI_PROVIDER_SELECTOR (priv->prov_selector), cinfo->provider); g_signal_handlers_unblock_by_func (priv->prov_selector, G_CALLBACK (prov_entry_changed_cb), login); _gdaui_provider_spec_editor_set_provider (GDAUI_PROVIDER_SPEC_EDITOR (priv->cnc_params_editor), cinfo->provider); _gdaui_provider_spec_editor_set_specs (GDAUI_PROVIDER_SPEC_EDITOR (priv->cnc_params_editor), cinfo->cnc_string); _gdaui_provider_auth_editor_set_provider (GDAUI_PROVIDER_AUTH_EDITOR (priv->auth_widget), cinfo->provider); _gdaui_provider_auth_editor_set_auth (GDAUI_PROVIDER_AUTH_EDITOR (priv->auth_widget), cinfo->auth_string); } }
static void dsn_entry_changed_cb (GdauiDsnSelector *sel, GdauiLogin *login) { GdauiLoginPrivate *priv = gdaui_login_get_instance_private (login); gchar *dsn; GdaDsnInfo *info = NULL; dsn = _gdaui_dsn_selector_get_dsn (sel); if (dsn) { info = gda_config_get_dsn_info (dsn); g_free (dsn); } /* update prov_selector */ g_signal_handlers_block_by_func (priv->prov_selector, G_CALLBACK (prov_entry_changed_cb), login); gdaui_provider_selector_set_provider (GDAUI_PROVIDER_SELECTOR (priv->prov_selector), info ? info->provider : NULL); g_signal_handlers_unblock_by_func (priv->prov_selector, G_CALLBACK (prov_entry_changed_cb), login); /* update auth editor */ _gdaui_provider_auth_editor_set_provider (GDAUI_PROVIDER_AUTH_EDITOR (priv->auth_widget), info ? info->provider : NULL); _gdaui_provider_auth_editor_set_auth (GDAUI_PROVIDER_AUTH_EDITOR (priv->auth_widget), info && info->auth_string ? info->auth_string : NULL); /* update spec editor */ _gdaui_provider_spec_editor_set_provider (GDAUI_PROVIDER_SPEC_EDITOR (priv->cnc_params_editor), info ? info->provider : NULL); _gdaui_provider_spec_editor_set_specs (GDAUI_PROVIDER_SPEC_EDITOR (priv->cnc_params_editor), info ? info->cnc_string : NULL); if (priv->auth_widget) gtk_widget_grab_focus (priv->auth_widget); g_signal_emit (login, gdaui_login_signals [CHANGED], 0, settings_are_valid (login)); }
/** * gdaui_dsn_editor_set_dsn * @editor: a #GdauiDsnEditor widget * @dsn_info: (allow-none): a #GdaDsnInfo pointer or %NULL * * * Requests that @editor update its contents with @dsn_info's contents */ void gdaui_dsn_editor_set_dsn (GdauiDsnEditor *editor, const GdaDsnInfo *dsn_info) { g_return_if_fail (GDAUI_IS_DSN_EDITOR (editor)); editor->priv->no_change_signal = TRUE; if (dsn_info) { GdaProviderInfo *pinfo; pinfo = gda_config_get_provider_info (dsn_info->provider); GdkPixbuf *pix; pix = support_create_pixbuf_for_provider (pinfo); if (pix) { gtk_image_set_from_pixbuf (GTK_IMAGE (editor->priv->icon), pix); g_object_unref (pix); } else gtk_image_clear (GTK_IMAGE (editor->priv->icon)); if (pinfo) gtk_widget_hide (editor->priv->warning); else gtk_widget_show (editor->priv->warning); gchar *tmp; tmp = g_markup_printf_escaped ("<big><b>%s</b></big>", dsn_info->name); gtk_label_set_markup (GTK_LABEL (editor->priv->wname), tmp); g_free (tmp); g_free (editor->priv->name); editor->priv->name = g_strdup (dsn_info->name); gdaui_provider_selector_set_provider (GDAUI_PROVIDER_SELECTOR (editor->priv->wprovider), dsn_info->provider); _gdaui_provider_spec_editor_set_provider (GDAUI_PROVIDER_SPEC_EDITOR (editor->priv->dsn_spec), dsn_info->provider); _gdaui_provider_spec_editor_set_specs (GDAUI_PROVIDER_SPEC_EDITOR (editor->priv->dsn_spec), dsn_info->cnc_string); gtk_text_buffer_set_text (gtk_text_view_get_buffer (GTK_TEXT_VIEW (editor->priv->wdesc)), dsn_info->description ? dsn_info->description : "", -1); _gdaui_provider_auth_editor_set_provider (GDAUI_PROVIDER_AUTH_EDITOR (editor->priv->dsn_auth), dsn_info->provider); _gdaui_provider_auth_editor_set_auth (GDAUI_PROVIDER_AUTH_EDITOR (editor->priv->dsn_auth), dsn_info->auth_string); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (editor->priv->is_system), dsn_info->is_system); if (dsn_info->is_system && !gda_config_can_modify_system_config ()) { gtk_widget_set_sensitive (editor->priv->wprovider, FALSE); gtk_text_view_set_editable (GTK_TEXT_VIEW (editor->priv->wdesc), pinfo ? TRUE : FALSE); gtk_widget_set_sensitive (editor->priv->dsn_spec, FALSE); gtk_widget_set_sensitive (editor->priv->dsn_auth, FALSE); gtk_widget_set_sensitive (editor->priv->is_system, FALSE); } else { gtk_widget_set_sensitive (editor->priv->wprovider, pinfo ? TRUE : FALSE); gtk_text_view_set_editable (GTK_TEXT_VIEW (editor->priv->wdesc), pinfo ? TRUE : FALSE); gtk_widget_set_sensitive (editor->priv->dsn_spec, TRUE); gtk_widget_set_sensitive (editor->priv->dsn_auth, TRUE); gtk_widget_set_sensitive (editor->priv->is_system, pinfo && gda_config_can_modify_system_config () ? TRUE : FALSE); } } else { gtk_image_clear (GTK_IMAGE (editor->priv->icon)); gtk_label_set_text (GTK_LABEL (editor->priv->wname), ""); gdaui_provider_selector_set_provider (GDAUI_PROVIDER_SELECTOR (editor->priv->wprovider), NULL); _gdaui_provider_spec_editor_set_provider (GDAUI_PROVIDER_SPEC_EDITOR (editor->priv->dsn_spec), NULL); gtk_text_buffer_set_text (gtk_text_view_get_buffer (GTK_TEXT_VIEW (editor->priv->wdesc)), "", -1); _gdaui_provider_auth_editor_set_provider (GDAUI_PROVIDER_AUTH_EDITOR (editor->priv->dsn_auth), NULL); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (editor->priv->is_system), FALSE); gtk_widget_set_sensitive (editor->priv->wprovider, FALSE); gtk_text_view_set_editable (GTK_TEXT_VIEW (editor->priv->wdesc), FALSE); gtk_widget_set_sensitive (editor->priv->dsn_spec, FALSE); gtk_widget_set_sensitive (editor->priv->dsn_auth, FALSE); gtk_widget_set_sensitive (editor->priv->is_system, FALSE); } editor->priv->no_change_signal = FALSE; g_signal_emit (editor, gdaui_dsn_editor_signals[CHANGED], 0, NULL); }