/** * 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 field_changed_cb (GtkWidget *widget, GdauiDsnEditor *config) { if (widget == config->priv->wprovider) { /* replace the expander's contents */ const gchar *pname; pname = gdaui_provider_selector_get_provider (GDAUI_PROVIDER_SELECTOR (config->priv->wprovider)); _gdaui_provider_spec_editor_set_provider (GDAUI_PROVIDER_SPEC_EDITOR (config->priv->dsn_spec), pname); _gdaui_provider_auth_editor_set_provider (GDAUI_PROVIDER_AUTH_EDITOR (config->priv->dsn_auth), pname); GdaProviderInfo *pinfo; pinfo = gda_config_get_provider_info (pname); GdkPixbuf *pix; pix = support_create_pixbuf_for_provider (pinfo); if (pix) { gtk_image_set_from_pixbuf (GTK_IMAGE (config->priv->icon), pix); g_object_unref (pix); } else gtk_image_clear (GTK_IMAGE (config->priv->icon)); if (pinfo) gtk_widget_hide (config->priv->warning); else gtk_widget_show (config->priv->warning); } if (! config->priv->no_change_signal) g_signal_emit (config, gdaui_dsn_editor_signals[CHANGED], 0, NULL); }
static void gdaui_provider_spec_editor_set_property (GObject *object, guint param_id, const GValue *value, GParamSpec *pspec) { GdauiProviderSpecEditor *spec; spec = GDAUI_PROVIDER_SPEC_EDITOR (object); switch(param_id) { case PROP_PROVIDER: _gdaui_provider_spec_editor_set_provider (spec, g_value_get_string (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); break; } }
static void prov_entry_changed_cb (GdauiProviderSelector *sel, GdauiLogin *login) { GdauiLoginPrivate *priv = gdaui_login_get_instance_private (login); const gchar *prov; g_signal_handlers_block_by_func (priv->dsn_selector, G_CALLBACK (dsn_entry_changed_cb), login); _gdaui_dsn_selector_set_dsn (GDAUI_DSN_SELECTOR (priv->dsn_selector), NULL); g_signal_handlers_unblock_by_func (priv->dsn_selector, G_CALLBACK (dsn_entry_changed_cb), login); prov = gdaui_provider_selector_get_provider (sel); _gdaui_provider_spec_editor_set_provider (GDAUI_PROVIDER_SPEC_EDITOR (priv->cnc_params_editor), prov); _gdaui_provider_auth_editor_set_provider (GDAUI_PROVIDER_AUTH_EDITOR (priv->auth_widget), prov); if (priv->auth_widget) gtk_widget_grab_focus (priv->auth_widget); g_signal_emit (login, gdaui_login_signals [CHANGED], 0, settings_are_valid (login)); }
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); }
static void provider_changed_cb (G_GNUC_UNUSED GtkWidget *combo, GdauiDsnAssistant *assistant) { GdaServerOperation *op; const gchar *provider; /* clean any previous Provider specific stuff */ if (assistant->priv->newdb_params) { gtk_widget_destroy (assistant->priv->newdb_params); assistant->priv->newdb_params = NULL; } if (assistant->priv->create_db_op) { g_object_unref (assistant->priv->create_db_op); assistant->priv->create_db_op = NULL; } if (!assistant->priv->size_group) assistant->priv->size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); /* is the database creation supported by the chosen provider? */ op = get_specs_database_creation (assistant); if (op) { assistant->priv->newdb_params = g_object_new (GDAUI_TYPE_SERVER_OPERATION, "hide-single-header", TRUE, "server-operation", op, NULL); gtk_widget_show (assistant->priv->newdb_params); gtk_container_add (GTK_CONTAINER (assistant->priv->newdb_box), assistant->priv->newdb_params); assistant->priv->create_db_op = op; gtk_widget_set_sensitive (assistant->priv->choose_toggle, TRUE); } else { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (assistant->priv->choose_toggle), FALSE); gtk_widget_set_sensitive (assistant->priv->choose_toggle, FALSE); } /* dsn spec for the selected provider */ provider = gdaui_provider_selector_get_provider (GDAUI_PROVIDER_SELECTOR (assistant->priv->general_provider)); g_assert (provider); if (!assistant->priv->provider_detail) { assistant->priv->provider_detail = _gdaui_provider_spec_editor_new (provider); gtk_box_pack_start (GTK_BOX (assistant->priv->provider_container), assistant->priv->provider_detail, TRUE, TRUE, 0); gtk_widget_show (assistant->priv->provider_detail); g_signal_connect (assistant->priv->provider_detail, "changed", G_CALLBACK (dsn_spec_changed_cb), assistant); _gdaui_provider_spec_editor_add_to_size_group (GDAUI_PROVIDER_SPEC_EDITOR (assistant->priv->provider_detail), assistant->priv->size_group, GDAUI_BASIC_FORM_LABELS); } else _gdaui_provider_spec_editor_set_provider (GDAUI_PROVIDER_SPEC_EDITOR (assistant->priv->provider_detail), provider); /* dsn authentication for the selected provider */ if (!assistant->priv->auth_detail) { assistant->priv->auth_detail = _gdaui_provider_auth_editor_new (provider); gtk_box_pack_start (GTK_BOX (assistant->priv->auth_container), assistant->priv->auth_detail, TRUE, TRUE, 0); gtk_widget_show (assistant->priv->auth_detail); g_signal_connect (assistant->priv->auth_detail, "changed", G_CALLBACK (dsn_auth_changed_cb), assistant); _gdaui_provider_auth_editor_add_to_size_group (GDAUI_PROVIDER_AUTH_EDITOR (assistant->priv->auth_detail), assistant->priv->size_group, GDAUI_BASIC_FORM_LABELS); } else _gdaui_provider_auth_editor_set_provider (GDAUI_PROVIDER_AUTH_EDITOR (assistant->priv->auth_detail), provider); }