/* * _gdaui_provider_auth_editor_set_provider * @auth: a #GdauiProviderAuthEditor widget * @provider: the provider to be used * * Updates the displayed fields in @auth to represent the required * and possible arguments that a connection to a database through * @provider would require */ void _gdaui_provider_auth_editor_set_provider (GdauiProviderAuthEditor *auth, const gchar *provider) { g_return_if_fail (GDAUI_IS_PROVIDER_AUTH_EDITOR (auth)); g_return_if_fail (auth->priv); auth->priv->pinfo = NULL; if (auth->priv->provider) g_free (auth->priv->provider); auth->priv->provider = NULL; auth->priv->auth_needed = FALSE; if (auth->priv->auth_widget) { gtk_widget_destroy (auth->priv->auth_widget); auth->priv->auth_widget = NULL; } if (provider) { auth->priv->pinfo = gda_config_get_provider_info (provider); if (auth->priv->pinfo) { auth->priv->provider = g_strdup (auth->priv->pinfo->id); if (auth->priv->pinfo->auth_params && auth->priv->pinfo->auth_params->holders) auth->priv->auth_needed = TRUE; } } if (auth->priv->auth_needed) { g_assert (auth->priv->pinfo); GdaSet *set; set = gda_set_copy (auth->priv->pinfo->auth_params); auth->priv->auth_widget = gdaui_basic_form_new (set); g_signal_connect (G_OBJECT (auth->priv->auth_widget), "holder-changed", G_CALLBACK (auth_form_changed), auth); g_object_unref (set); } if (auth->priv->auth_widget) { gtk_container_add (GTK_CONTAINER (auth), auth->priv->auth_widget); gtk_widget_show (auth->priv->auth_widget); if (auth->priv->labels_size_group) gdaui_basic_form_add_to_size_group (GDAUI_BASIC_FORM (auth->priv->auth_widget), auth->priv->labels_size_group, GDAUI_BASIC_FORM_LABELS); if (auth->priv->entries_size_group) gdaui_basic_form_add_to_size_group (GDAUI_BASIC_FORM (auth->priv->auth_widget), auth->priv->entries_size_group, GDAUI_BASIC_FORM_ENTRIES); } g_signal_emit_by_name (auth, "changed"); }
static void adapt_form_widget (GdauiProviderSpecEditor *spec) { /* destroy any previous widget */ if (spec->priv->form) { gtk_container_foreach (GTK_CONTAINER (spec), (GtkCallback) gtk_widget_destroy, NULL); spec->priv->form = NULL; } spec->priv->type = NO_PROVIDER; if (!spec->priv->provider) return; /* fetch DSN parameters */ GdaProviderInfo *pinfo; pinfo = gda_config_get_provider_info (spec->priv->provider); if (!pinfo) { g_warning (_("Unknown provider '%s'"), spec->priv->provider); return; } if (!pinfo->dsn_params) { g_warning (_("Provider '%s' does not report the required parameters for DSN"), spec->priv->provider); return; } /* create new widget */ GdaSet *dset; dset = gda_set_copy (pinfo->dsn_params); if (dset) { GtkWidget *wid; spec->priv->type = PROVIDER_FORM; wid = gdaui_basic_form_new (dset); g_object_set ((GObject*) wid, "show-actions", FALSE, NULL); g_object_unref (dset); spec->priv->form = wid; if (spec->priv->labels_size_group) gdaui_basic_form_add_to_size_group (GDAUI_BASIC_FORM (spec->priv->form), spec->priv->labels_size_group, GDAUI_BASIC_FORM_LABELS); if (spec->priv->entries_size_group) gdaui_basic_form_add_to_size_group (GDAUI_BASIC_FORM (spec->priv->form), spec->priv->entries_size_group, GDAUI_BASIC_FORM_ENTRIES); update_form_contents (spec); g_signal_connect (G_OBJECT (wid), "holder-changed", G_CALLBACK (dsn_form_changed), spec); gtk_widget_show (wid); gtk_container_add (GTK_CONTAINER (spec), wid); } }
static void plugins_combo_changed_cb (GtkComboBox *combo, TablePreferences *tpref) { GtkTreeIter iter; GtkWidget *old_options = NULL; if (tpref->priv->options_wid) { old_options = tpref->priv->options_wid; tpref->priv->options_wid = NULL; } if (gtk_combo_box_get_active_iter (combo, &iter)) { GdauiPlugin *plugin; GtkTreeModel *model; GError *error = NULL; model = gtk_combo_box_get_model (combo); gtk_tree_model_get (model, &iter, PL_COLUMN_PLUGIN, &plugin, -1); if (plugin && plugin->options_xml_spec) { GdaSet *plist; plist = gda_set_new_from_spec_string (plugin->options_xml_spec, &error); if (!plist) { g_warning ("Cannot parse XML spec for plugin options: %s", error && error->message ? error->message : "No detail"); g_clear_error (&error); } else { if (!old_options || (g_object_get_data (G_OBJECT (old_options), "plugin") != plugin)) { tpref->priv->options_wid = gdaui_basic_form_new (plist); g_object_set_data (G_OBJECT (tpref->priv->options_wid), "plugin", plugin); g_signal_connect (G_OBJECT (tpref->priv->options_wid), "holder-changed", G_CALLBACK (options_form_param_changed_cb), tpref); gtk_box_pack_start (GTK_BOX (tpref->priv->options_vbox), tpref->priv->options_wid, TRUE, TRUE, 0); } else { tpref->priv->options_wid = old_options; old_options = NULL; } g_object_unref (plist); } if (tpref->priv->options_wid) { plist = gdaui_basic_form_get_data_set (GDAUI_BASIC_FORM (tpref->priv->options_wid)); gtk_widget_hide (tpref->priv->options_none); gtk_widget_show (tpref->priv->options_wid); if (plist && !tpref->priv->save_plugin_changes) { /* load plugin options */ GtkTreeSelection *select; GtkTreeIter citer; select = gtk_tree_view_get_selection (tpref->priv->columns_treeview); if (gtk_tree_selection_get_selected (select, NULL, &citer)) { gchar *plugin_str; gtk_tree_model_get (GTK_TREE_MODEL (tpref->priv->columns_store), &citer, COLUMN_PLUGIN, &plugin_str, -1); /*g_print ("%p PLUGIN_STR:[%s]\n", tpref, plugin_str);*/ if (plugin_str) { GdaQuarkList *ql; GSList *list; gchar *tmp; for (tmp = plugin_str; *tmp && (*tmp != ':'); tmp++); if (*tmp == ':') { ql = gda_quark_list_new_from_string (tmp+1); for (list = plist->holders; list; list = list->next) { GdaHolder *holder = GDA_HOLDER (list->data); const gchar *cstr; cstr = gda_quark_list_find (ql, gda_holder_get_id (holder)); if (cstr) gda_holder_set_value_str (holder, NULL, cstr, NULL); else gda_holder_set_value (holder, NULL, NULL); } gda_quark_list_free (ql); } g_free (plugin_str); } } } } } if (tpref->priv->save_plugin_changes && tpref->priv->current_table && tpref->priv->current_column && ! browser_connection_set_table_column_attribute (tpref->priv->bcnc, tpref->priv->current_table, tpref->priv->current_column, BROWSER_CONNECTION_COLUMN_PLUGIN, plugin ? plugin->plugin_name : NULL, &error)) { TO_IMPLEMENT; /* FIXME: add a notice somewhere in the UI */ g_warning ("Error: %s\n", error && error->message ? error->message : _("No detail")); g_clear_error (&error); } set_preview_widget (tpref); } if (old_options) gtk_widget_destroy (old_options); if (! tpref->priv->options_wid) gtk_widget_show (tpref->priv->options_none); }
static void selection_changed_cb (GtkTreeSelection *select, BrowserConnectionsList *clist) { GtkTreeModel *model; GtkTreeIter iter; BrowserConnection *bcnc = NULL; const GdaDsnInfo *cncinfo = NULL; if (gtk_tree_selection_get_selected (select, &model, &iter)) { gtk_tree_model_get (model, &iter, COLUMN_BCNC, &bcnc, -1); cncinfo = browser_connection_get_information (bcnc); g_object_unref (bcnc); gtk_widget_set_sensitive (_clist->priv->close_cnc_button, TRUE); } else gtk_widget_set_sensitive (_clist->priv->close_cnc_button, FALSE); if (clist->priv->cnc_params_editor) { gtk_widget_destroy (clist->priv->cnc_params_editor); clist->priv->cnc_params_editor = NULL; } if (cncinfo && cncinfo->provider) { /* create GdaSet for parameters to display */ GdaSet *dset; GdaHolder *holder; dset = gda_set_new_inline (1, "PROVIDER_NAME", G_TYPE_STRING, cncinfo->provider); holder = GDA_HOLDER (dset->holders->data); g_object_set (G_OBJECT (holder), "name", _("Database provider"), NULL); GdaProviderInfo *pinfo; pinfo = gda_config_get_provider_info (cncinfo->provider); if (pinfo && pinfo->dsn_params) gda_set_merge_with_set (dset, pinfo->dsn_params); holder = gda_holder_new_inline (G_TYPE_STRING, "GDA_BROWSER_DICT_FILE", _("In memory")); g_object_set (G_OBJECT (holder), "name", _("Dictionary file"), "description", _("File used to store any information associated\n" "to this connection (favorites, descriptions, ...)"), NULL); gda_set_add_holder (dset, holder); g_object_unref (holder); if (bcnc) { const gchar *dict_file_name; dict_file_name = browser_connection_get_dictionary_file (bcnc); if (dict_file_name) gda_set_set_holder_value (dset, NULL, "GDA_BROWSER_DICT_FILE", dict_file_name); } /* create form */ GtkWidget *wid; wid = gdaui_basic_form_new (dset); g_object_set ((GObject*) wid, "show-actions", FALSE, NULL); gdaui_basic_form_entry_set_editable (GDAUI_BASIC_FORM (wid), NULL, FALSE); gtk_grid_attach (clist->priv->layout_grid, wid, 1, 2, 1, 1); gtk_widget_show (wid); clist->priv->cnc_params_editor = wid; /* fill GdaSet's parameters with values */ if (cncinfo->cnc_string) { gchar **array = NULL; array = g_strsplit (cncinfo->cnc_string, ";", 0); if (array) { gint index = 0; gchar *tok; gchar *value; gchar *name; for (index = 0; array[index]; index++) { name = strtok_r (array [index], "=", &tok); if (name) value = strtok_r (NULL, "=", &tok); else value = NULL; if (name && value) { GdaHolder *param; gda_rfc1738_decode (name); gda_rfc1738_decode (value); param = gda_set_get_holder (dset, name); if (param) g_assert (gda_holder_set_value_str (param, NULL, value, NULL)); } } g_strfreev (array); } } g_object_unref (dset); } }
GtkWidget * do_basic_form (GtkWidget *do_widget) { if (!window) { GtkWidget *vbox; GtkWidget *label; GtkWidget *form; window = gtk_dialog_new_with_buttons ("GdauiBasicForm", GTK_WINDOW (do_widget), 0, "Close", GTK_RESPONSE_NONE, NULL); g_signal_connect (window, "response", G_CALLBACK (gtk_widget_destroy), NULL); g_signal_connect (window, "destroy", G_CALLBACK (gtk_widget_destroyed), &window); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5); gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (window))), vbox, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (vbox), 5); label = gtk_label_new ("This example shows 2 GdauiBasicForm widgets operating on the\n" "same GdaSet. When a value is modified in one form, then it is\n" "automatically updated in the other form.\n\n" "Also the top form uses the default layout, while the bottom one\n" "uses a custom (2 columns) layout.\n" "The 'an int' entry is hidden in the top form."); gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); /* Create the demo widget */ GdaSet *set; gchar *filename; set = gda_set_new_inline (3, "a string", G_TYPE_STRING, "A string Value", "an int", G_TYPE_INT, 12, "a picture", GDA_TYPE_BINARY, NULL); form = gdaui_basic_form_new (set); gtk_box_pack_start (GTK_BOX (vbox), form, TRUE, TRUE, 0); gdaui_basic_form_entry_set_visible (GDAUI_BASIC_FORM (form), gda_set_get_holder (set, "an int"), FALSE); label = gtk_label_new ("2nd form is below:"); gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); form = gdaui_basic_form_new (set); gtk_box_pack_start (GTK_BOX (vbox), form, TRUE, TRUE, 0); filename = demo_find_file ("custom_layout.xml", NULL); gdaui_basic_form_set_layout_from_file (GDAUI_BASIC_FORM (form), filename, "simple"); g_free (filename); g_object_unref (set); } gboolean visible; g_object_get (G_OBJECT (window), "visible", &visible, NULL); if (!visible) gtk_widget_show_all (window); else { gtk_widget_destroy (window); window = NULL; } return window; }
static void sql_execute_clicked_cb (G_GNUC_UNUSED GtkButton *button, QueryConsolePage *tconsole) { gchar *sql; if (tconsole->priv->params_popup) gtk_widget_hide (tconsole->priv->params_popup); /* compute parameters if necessary */ if (tconsole->priv->params_compute_id > 0) { g_source_remove (tconsole->priv->params_compute_id); tconsole->priv->params_compute_id = 0; compute_params (tconsole); } if (tconsole->priv->params) { if (! gdaui_basic_form_is_valid (GDAUI_BASIC_FORM (tconsole->priv->params_form))) { GtkWidget *form, *cont; if (! tconsole->priv->params_popup) { tconsole->priv->params_popup = popup_container_new_with_func (popup_container_position_func); g_object_set_data (G_OBJECT (tconsole->priv->params_popup), "console", tconsole); GtkWidget *vbox, *label, *bbox, *button; gchar *str; vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_container_add (GTK_CONTAINER (tconsole->priv->params_popup), vbox); gtk_container_set_border_width (GTK_CONTAINER (tconsole->priv->params_popup), 10); label = gtk_label_new (""); str = g_strdup_printf ("<b>%s</b>:\n<small>%s</small>", _("Invalid variable's contents"), _("assign values to the following variables")); gtk_label_set_markup (GTK_LABEL (label), str); g_free (str); gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); cont = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_box_pack_start (GTK_BOX (vbox), cont, FALSE, FALSE, 10); g_object_set_data (G_OBJECT (tconsole->priv->params_popup), "cont", cont); bbox = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL); gtk_box_pack_start (GTK_BOX (vbox), bbox, FALSE, FALSE, 10); gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_END); button = gtk_button_new_from_icon_name ("system-run-symbolic", GTK_ICON_SIZE_BUTTON); gtk_box_pack_start (GTK_BOX (bbox), button, TRUE, TRUE, 0); g_signal_connect_swapped (button, "clicked", G_CALLBACK (gtk_widget_hide), tconsole->priv->params_popup); g_signal_connect (button, "clicked", G_CALLBACK (sql_execute_clicked_cb), tconsole); gtk_widget_set_sensitive (button, FALSE); g_object_set_data (G_OBJECT (tconsole->priv->params_popup), "exec", button); button = gtk_button_new_with_mnemonic (_("_Cancel")); gtk_box_pack_start (GTK_BOX (bbox), button, TRUE, TRUE, 0); g_signal_connect_swapped (button, "clicked", G_CALLBACK (gtk_widget_hide), tconsole->priv->params_popup); } else { form = g_object_get_data (G_OBJECT (tconsole->priv->params_popup), "form"); if (form) gtk_widget_destroy (form); } cont = g_object_get_data (G_OBJECT (tconsole->priv->params_popup), "cont"); form = gdaui_basic_form_new (tconsole->priv->params); g_object_set ((GObject*) form, "show-actions", TRUE, NULL); g_signal_connect (form, "holder-changed", G_CALLBACK (params_form_changed_cb), tconsole); g_signal_connect (form, "activated", G_CALLBACK (sql_execute_clicked_cb), tconsole); gtk_box_pack_start (GTK_BOX (cont), form, TRUE, TRUE, 0); g_object_set_data (G_OBJECT (tconsole->priv->params_popup), "form", form); gtk_widget_show_all (tconsole->priv->params_popup); return; } } sql = query_editor_get_all_text (tconsole->priv->editor); actually_execute (tconsole, sql, tconsole->priv->params, TRUE); g_free (sql); }
static gboolean compute_params (QueryConsolePage *tconsole) { gchar *sql; GdaBatch *batch; if (tconsole->priv->params) { t_connection_keep_variables (tconsole->priv->tcnc, tconsole->priv->params); g_object_unref (tconsole->priv->params); } tconsole->priv->params = NULL; if (tconsole->priv->params_form) { gtk_widget_destroy (tconsole->priv->params_form); tconsole->priv->params_form = NULL; } if (!tconsole->priv->parser) tconsole->priv->parser = t_connection_create_parser (tconsole->priv->tcnc); sql = query_editor_get_all_text (tconsole->priv->editor); batch = gda_sql_parser_parse_string_as_batch (tconsole->priv->parser, sql, NULL, NULL); g_free (sql); if (batch) { GError *error = NULL; gboolean show_variables = FALSE; if (gda_batch_get_parameters (batch, &(tconsole->priv->params), &error)) { if (tconsole->priv->params) { t_connection_define_ui_plugins_for_batch (tconsole->priv->tcnc, batch, tconsole->priv->params); show_variables = TRUE; tconsole->priv->params_form = gdaui_basic_form_new (tconsole->priv->params); g_object_set ((GObject*) tconsole->priv->params_form, "show-actions", TRUE, NULL); g_signal_connect (tconsole->priv->params_form, "activated", G_CALLBACK (params_form_activated_cb), tconsole); } else { tconsole->priv->params_form = gtk_label_new (""); gtk_label_set_markup (GTK_LABEL (tconsole->priv->params_form), VARIABLES_HELP); } } else { show_variables = TRUE; tconsole->priv->params_form = gtk_label_new (""); gtk_label_set_markup (GTK_LABEL (tconsole->priv->params_form), VARIABLES_HELP); } gtk_container_add (GTK_CONTAINER (tconsole->priv->params_form_box), tconsole->priv->params_form); gtk_widget_show (tconsole->priv->params_form); g_object_unref (batch); t_connection_load_variables (tconsole->priv->tcnc, tconsole->priv->params); if (tconsole->priv->params && show_variables && gda_set_is_valid (tconsole->priv->params, NULL)) show_variables = FALSE; if (show_variables && !gtk_toggle_button_get_active (tconsole->priv->params_toggle)) gtk_toggle_button_set_active (tconsole->priv->params_toggle, TRUE); } else { tconsole->priv->params_form = gtk_label_new (""); gtk_label_set_markup (GTK_LABEL (tconsole->priv->params_form), VARIABLES_HELP); gtk_container_add (GTK_CONTAINER (tconsole->priv->params_form_box), tconsole->priv->params_form); gtk_widget_show (tconsole->priv->params_form); } /* remove timeout */ tconsole->priv->params_compute_id = 0; return FALSE; }