Exemplo n.º 1
0
/*
 * _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");
}
Exemplo n.º 2
0
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);
	}
}
Exemplo n.º 3
0
/**
 * gda_repetitive_statement_append_set:
 * @rstmt: a #GdaRepetitiveStatement object
 * @values: a #GdaSet object with the values to be used
 * @make_copy: %TRUE if @values is copied, and %FALSE if @values is only ref'ed
 *
 * Specifies that @rstmt be executed one time with the values contained in @values. 
 *
 * A new #GdaSet to be used as the @values argument can be obtained using
 * gda_repetitive_statement_get_template_set().
 *
 * Returns: a new #GdaRepetitiveStatement object
 *
 * Since: 4.2
 */
gboolean
gda_repetitive_statement_append_set (GdaRepetitiveStatement *rstmt, GdaSet *values, gboolean make_copy)
{
	GdaSet *set;

	g_return_val_if_fail (GDA_IS_REPETITIVE_STATEMENT(rstmt), FALSE);
	g_return_val_if_fail (GDA_IS_SET (values), FALSE);

	GdaRepetitiveStatementPrivate *priv = gda_repetitive_statement_get_instance_private (rstmt);
	
	if (make_copy)
		set = gda_set_copy (values);
	else
		set = g_object_ref (values);
	priv->values_sets = g_slist_prepend (priv->values_sets, set);
	
	return TRUE;
}
Exemplo n.º 4
0
/**
 * base_tool_output_result_to_string:
 * @res: a #ToolCommandResult
 * @format: a #ToolOutputFormat format specification
 * @stream: (allow-none): a stream which the returned string will be put to, or %NULL
 * @options: (allow-none): a #GdaSet containing options, or %NULL
 *
 * Converts @res to a string
 *
 * Returns: (transfer full): a new string
 */
gchar *
base_tool_output_result_to_string (ToolCommandResult *res, ToolOutputFormat format,
                                   FILE *stream, GdaSet *options)
{
    switch (res->type) {
    case BASE_TOOL_COMMAND_RESULT_DATA_MODEL:
        return base_tool_output_data_model_to_string (res->u.model, format, stream, options);

    case BASE_TOOL_COMMAND_RESULT_SET: {
        GSList *list;
        GString *string;
        xmlNodePtr node;
        xmlBufferPtr buffer;
        gchar *str;

        if (format & BASE_TOOL_OUTPUT_FORMAT_DEFAULT) {
            string = g_string_new ("");
            for (list = res->u.set->holders; list; list = list->next) {
                const GValue *value;
                gchar *tmp;
                const gchar *cstr;
                GdaHolder *h;
                h = GDA_HOLDER (list->data);

                cstr = gda_holder_get_id (h);
                value = gda_holder_get_value (h);
                if (!strcmp (cstr, "IMPACTED_ROWS")) {
                    g_string_append_printf (string, "%s: ",
                                            _("Number of rows impacted"));
                    tmp = gda_value_stringify (value);
                    g_string_append_printf (string, "%s", tmp);
                    g_free (tmp);
                }
                else if (!strcmp (cstr, "EXEC_DELAY")) {
                    g_string_append_printf (string, "%s: ",
                                            _("Execution delay"));
                    gdouble etime;
                    etime = g_value_get_double (value);
                    g_string_append_printf (string, "%.03f s", etime);
                }
                else {
                    tmp = g_markup_escape_text (cstr, -1);
                    g_string_append_printf (string, "%s: ", tmp);
                    g_free (tmp);

                    tmp = gda_value_stringify (value);
                    g_string_append_printf (string, "%s", tmp);
                    g_free (tmp);
                }
                g_string_append (string, "\n");
            }
            str = string->str;
            g_string_free (string, FALSE);
            return str;
        }
        else if (format & BASE_TOOL_OUTPUT_FORMAT_XML) {
            buffer = xmlBufferCreate ();
            node = xmlNewNode (NULL, BAD_CAST "parameters");
            for (list = res->u.set->holders; list; list = list->next) {
                const GValue *value;
                xmlNodePtr pnode, vnode;

                pnode = xmlNewNode (NULL, BAD_CAST "parameter");
                xmlAddChild (node, pnode);
                xmlSetProp (pnode, BAD_CAST "name",
                            BAD_CAST gda_holder_get_id (GDA_HOLDER (list->data)));
                value = gda_holder_get_value (GDA_HOLDER (list->data));
                vnode = gda_value_to_xml (value);
                xmlAddChild (pnode, vnode);
            }
            xmlNodeDump (buffer, NULL, node, 0, 1);
            str = g_strdup ((gchar *) xmlBufferContent (buffer));
            xmlBufferFree (buffer);
            xmlFreeNode (node);
            return str;
        }
        else if (format & BASE_TOOL_OUTPUT_FORMAT_HTML) {
            buffer = xmlBufferCreate ();
            node = xmlNewNode (NULL, BAD_CAST "ul");
            for (list = res->u.set->holders; list; list = list->next) {
                const GValue *value;
                xmlNodePtr pnode, vnode;

                pnode = xmlNewNode (NULL, BAD_CAST "li");
                xmlAddChild (node, pnode);
                xmlSetProp (pnode, BAD_CAST "name",
                            BAD_CAST gda_holder_get_id (GDA_HOLDER (list->data)));
                value = gda_holder_get_value (GDA_HOLDER (list->data));
                vnode = gda_value_to_xml (value);
                xmlAddChild (pnode, vnode);
            }
            xmlNodeDump (buffer, NULL, node, 0, 1);
            str = g_strdup ((gchar *) xmlBufferContent (buffer));
            xmlBufferFree (buffer);
            xmlFreeNode (node);
            return str;
        }
        else if (format & BASE_TOOL_OUTPUT_FORMAT_CSV) {
            string = g_string_new ("");
            for (list = res->u.set->holders; list; list = list->next) {
                const GValue *value;
                gchar *tmp;
                const gchar *cstr;
                GdaHolder *h;
                h = GDA_HOLDER (list->data);

                cstr = gda_holder_get_id (h);
                value = gda_holder_get_value (h);
                if (!strcmp (cstr, "IMPACTED_ROWS")) {
                    g_string_append_printf (string, "\"%s\",",
                                            _("Number of rows impacted"));
                    tmp = gda_value_stringify (value);
                    g_string_append_printf (string, "\"%s\"", tmp);
                    g_free (tmp);
                }
                else if (!strcmp (cstr, "EXEC_DELAY")) {
                    g_string_append_printf (string, "\"%s\",",
                                            _("Execution delay"));
                    gdouble etime;
                    etime = g_value_get_double (value);
                    g_string_append_printf (string, "\"%.03f s\"", etime);
                }
                else {
                    tmp = g_markup_escape_text (cstr, -1);
                    g_string_append_printf (string, "\"%s\",", tmp);
                    g_free (tmp);

                    tmp = gda_value_stringify (value);
                    g_string_append_printf (string, "\"%s\"", tmp);
                    g_free (tmp);
                }
                g_string_append (string, "\n");
            }
            str = string->str;
            g_string_free (string, FALSE);
            return str;
        }
        else {
            TO_IMPLEMENT;
            return NULL;
        }
    }

    case BASE_TOOL_COMMAND_RESULT_TREE: {
        GdaSet *options2, *merge = NULL;

        options2 = g_object_get_data ((GObject*) res->u.tree, "BASE_TOOL_OUTPUT_OPTIONS");
        if (options && options2) {
            merge = gda_set_copy (options2);
            gda_set_merge_with_set (merge, options);
        }
        gchar *tmp;
        tmp = tree_to_string (res->u.tree, format, stream, merge ? merge : (options ? options : options2));
        if (merge)
            g_object_unref (merge);
        return tmp;
    }

    case BASE_TOOL_COMMAND_RESULT_TXT: {
        xmlNodePtr node;
        xmlBufferPtr buffer;
        gchar *str;

        if ((format & BASE_TOOL_OUTPUT_FORMAT_DEFAULT) ||
                (format & BASE_TOOL_OUTPUT_FORMAT_CSV))
            return g_strdup (res->u.txt->str);
        else if (format & BASE_TOOL_OUTPUT_FORMAT_XML) {
            buffer = xmlBufferCreate ();
            node = xmlNewNode (NULL, BAD_CAST "txt");
            xmlNodeSetContent (node, BAD_CAST res->u.txt->str);
            xmlNodeDump (buffer, NULL, node, 0, 1);
            str = g_strdup ((gchar *) xmlBufferContent (buffer));
            xmlBufferFree (buffer);
            xmlFreeNode (node);
            return str;
        }
        else if (format & BASE_TOOL_OUTPUT_FORMAT_HTML) {
            buffer = xmlBufferCreate ();
            node = xmlNewNode (NULL, BAD_CAST "p");
            xmlNodeSetContent (node, BAD_CAST res->u.txt->str);
            xmlNodeDump (buffer, NULL, node, 0, 1);
            str = g_strdup ((gchar *) xmlBufferContent (buffer));
            xmlBufferFree (buffer);
            xmlFreeNode (node);
            return str;
        }
        else {
            TO_IMPLEMENT;
            return NULL;
        }
    }

    case BASE_TOOL_COMMAND_RESULT_EMPTY:
        return g_strdup ("");

    case BASE_TOOL_COMMAND_RESULT_MULTIPLE: {
        GSList *list;
        GString *string = NULL;
        gchar *str;

        for (list = res->u.multiple_results; list; list = list->next) {
            ToolCommandResult *tres = (ToolCommandResult*) list->data;
            gchar *tmp;

            tmp = base_tool_output_result_to_string (tres,
                    format & BASE_TOOL_OUTPUT_FORMAT_COLOR_TERM ? TRUE : FALSE,
                    stream, options);
            if (!string)
                string = g_string_new (tmp);
            else {
                g_string_append_c (string, '\n');
                g_string_append (string, tmp);
            }
            g_free (tmp);
        }
        if (string) {
            str = string->str;
            g_string_free (string, FALSE);
        }
        else
            str = g_strdup ("");
        return str;
    }

    case BASE_TOOL_COMMAND_RESULT_HELP: {
        if (format & BASE_TOOL_OUTPUT_FORMAT_XML) {
            xmlBufferPtr buffer;
            gchar *str;
            buffer = xmlBufferCreate ();
            xmlNodeDump (buffer, NULL, res->u.xml_node, 0, 1);
            str = g_strdup ((gchar *) xmlBufferContent (buffer));
            xmlBufferFree (buffer);
            return str;
        }
        else if (format & BASE_TOOL_OUTPUT_FORMAT_HTML) {
            TO_IMPLEMENT;
            return NULL;
        }
        else {
            gint width = -1;
            gboolean term_color;
            if (format & BASE_TOOL_OUTPUT_FORMAT_DEFAULT)
                base_tool_input_get_size (&width, NULL);
            term_color = format & BASE_TOOL_OUTPUT_FORMAT_COLOR_TERM ? TRUE : FALSE;
            return base_tool_help_to_string (res, width, term_color);
        }
        break;
    }

    default:
        g_assert_not_reached ();
        return NULL;
    }
}