Exemplo n.º 1
0
static GtkWidget *
relations_diagram_get_tab_label (BrowserPage *page, GtkWidget **out_close_button)
{
    GtkWidget *wid;
    RelationsDiagram *diagram;
    gchar *tab_name = NULL;
    GdkPixbuf *table_pixbuf;

    diagram = RELATIONS_DIAGRAM (page);
    if (diagram->priv->fav_id > 0) {
        TFavoritesAttributes fav;
        if (t_favorites_get (t_connection_get_favorites (diagram->priv->tcnc),
                             diagram->priv->fav_id, &fav, NULL)) {
            tab_name = g_strdup (fav.name);
            t_favorites_reset_attributes (&fav);
        }
    }
    if (!tab_name)
        tab_name = g_strdup (_("Diagram"));

    table_pixbuf = ui_get_pixbuf_icon (UI_ICON_DIAGRAM);
    wid = ui_make_tab_label_with_pixbuf (tab_name,
                                         table_pixbuf,
                                         out_close_button ? TRUE : FALSE, out_close_button);
    g_free (tab_name);
    return wid;
}
Exemplo n.º 2
0
/*
 * relations_diagram_set_fav_id
 *
 * Sets the favorite ID of @diagram: ensure every displayed information is up to date
 */
static void
relations_diagram_set_fav_id (RelationsDiagram *diagram, gint fav_id, GError **error)
{
    g_return_if_fail (IS_RELATIONS_DIAGRAM (diagram));
    TFavoritesAttributes fav;

    if ((fav_id >=0) &&
            t_favorites_get (t_connection_get_favorites (diagram->priv->tcnc),
                             fav_id, &fav, error)) {
        gchar *str, *tmp;
        tmp = g_markup_printf_escaped (_("'%s' diagram"), fav.name);
        str = g_strdup_printf ("<b>%s</b>\n%s", _("Relations diagram"), tmp);
        g_free (tmp);
        gdaui_bar_set_text (diagram->priv->header, str);
        g_free (str);

        diagram->priv->fav_id = fav.id;

        t_favorites_reset_attributes (&fav);
    }
    else {
        gchar *str;
        str = g_strdup_printf ("<b>%s</b>\n%s", _("Relations diagram"), _("Unsaved"));
        gdaui_bar_set_text (diagram->priv->header, str);
        g_free (str);
        diagram->priv->fav_id = -1;
    }
}
Exemplo n.º 3
0
static void
save_clicked_cb (GtkWidget *button, RelationsDiagram *diagram)
{
    gchar *str;

    if (!diagram->priv->popup_container) {
        GtkWidget *window, *wid, *hbox;

        window = popup_container_new (button);
        diagram->priv->popup_container = window;

        hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
        gtk_container_add (GTK_CONTAINER (window), hbox);
        wid = gtk_label_new ("");
        str = g_strdup_printf ("%s:", _("Canvas's name"));
        gtk_label_set_markup (GTK_LABEL (wid), str);
        g_free (str);
        gtk_box_pack_start (GTK_BOX (hbox), wid, FALSE, FALSE, 0);

        wid = gtk_entry_new ();
        gtk_box_pack_start (GTK_BOX (hbox), wid, FALSE, FALSE, 5);
        diagram->priv->name_entry = wid;
        if (diagram->priv->fav_id > 0) {
            TFavoritesAttributes fav;
            if (t_favorites_get (t_connection_get_favorites (diagram->priv->tcnc),
                                 diagram->priv->fav_id, &fav, NULL)) {
                gtk_entry_set_text (GTK_ENTRY (wid), fav.name);
                t_favorites_reset_attributes (&fav);
            }
        }

        g_signal_connect (wid, "activate",
                          G_CALLBACK (real_save_clicked_cb), diagram);

        wid = gtk_button_new_with_label (_("Save"));
        gtk_box_pack_start (GTK_BOX (hbox), wid, FALSE, FALSE, 0);
        g_signal_connect (wid, "clicked",
                          G_CALLBACK (real_save_clicked_cb), diagram);
        diagram->priv->real_save_button = wid;

        gtk_widget_show_all (hbox);
    }

    gtk_widget_show (diagram->priv->popup_container);
}
Exemplo n.º 4
0
static gboolean
tree_store_drag_drop_cb (G_GNUC_UNUSED GdauiTreeStore *store, const gchar *path,
			 GtkSelectionData *selection_data, QueryFavoriteSelector *tsel)
{
	TFavorites *bfav;
	TFavoritesAttributes fav;
	GError *error = NULL;
	gint pos;
	gboolean retval = TRUE;
	gint id;
	bfav = t_connection_get_favorites (tsel->priv->tcnc);

	id = t_favorites_find (bfav, 0, (gchar*) gtk_selection_data_get_data (selection_data),
			       &fav, NULL);
	if (id < 0) {
		memset (&fav, 0, sizeof (TFavoritesAttributes));
		fav.id = -1;
		fav.type = T_FAVORITES_QUERIES;
		fav.name = _("Unnamed query");
		fav.descr = NULL;
		fav.contents = (gchar*) gtk_selection_data_get_data (selection_data);
	}

	pos = atoi (path);
	/*g_print ("%s() path => %s, pos: %d\n", __FUNCTION__, path, pos);*/
	
	if (! t_favorites_add (bfav, 0, &fav, ORDER_KEY_QUERIES, pos, &error)) {
		ui_show_error ((GtkWindow*) gtk_widget_get_toplevel ((GtkWidget*) tsel),
			       _("Could not add favorite: %s"),
			       error && error->message ? error->message : _("No detail"));
		if (error)
			g_error_free (error);
		retval = FALSE;
	}
	
	if (id >= 0)
		t_favorites_reset_attributes (&fav);

	return retval;
}
Exemplo n.º 5
0
static void
sql_favorite_clicked_cb (G_GNUC_UNUSED GtkButton *button, QueryConsolePage *tconsole)
{
	GtkWidget *menu, *mitem;
	TFavorites *tfav;

	if (tconsole->priv->favorites_menu)
		gtk_widget_destroy (tconsole->priv->favorites_menu);

	menu = gtk_menu_new ();
	tconsole->priv->favorites_menu = menu;
	mitem = gtk_menu_item_new_with_label (_("New favorite"));
	g_signal_connect (mitem, "activate",
			  G_CALLBACK (sql_favorite_new_mitem_cb), tconsole);
	gtk_widget_show (mitem);
	gtk_menu_shell_append (GTK_MENU_SHELL (menu), mitem);

	tfav = t_connection_get_favorites (tconsole->priv->tcnc);
	if (tconsole->priv->fav_id >= 0) {
		TFavoritesAttributes fav;
		if (t_favorites_get (tfav, tconsole->priv->fav_id, &fav, NULL)) {
			gchar *str;
			str = g_strdup_printf (_("Modify favorite '%s'"), fav.name);
			mitem = gtk_menu_item_new_with_label (str);
			g_free (str);
			g_signal_connect (mitem, "activate",
					  G_CALLBACK (sql_favorite_modify_mitem_cb), tconsole);
			g_object_set_data_full (G_OBJECT (mitem), "favname",
						g_strdup (fav.name), g_free);
			g_object_set_data (G_OBJECT (mitem), "favid",
					   GINT_TO_POINTER (tconsole->priv->fav_id));
			gtk_widget_show (mitem);
			gtk_menu_shell_append (GTK_MENU_SHELL (menu), mitem);
			t_favorites_reset_attributes (&fav);
		}
	}

	GSList *allfav;
	allfav = t_favorites_list (tfav, 0, T_FAVORITES_QUERIES, ORDER_KEY_QUERIES, NULL);
	if (allfav) {
		GtkWidget *submenu;
		GSList *list;

		mitem = gtk_menu_item_new_with_label (_("Modify a favorite"));
		gtk_widget_show (mitem);
		gtk_menu_shell_append (GTK_MENU_SHELL (menu), mitem);

		submenu = gtk_menu_new ();
		gtk_menu_item_set_submenu (GTK_MENU_ITEM (mitem), submenu);
		for (list = allfav; list; list = list->next) {
			TFavoritesAttributes *fav;
			fav = (TFavoritesAttributes*) list->data;
			if (fav->id == tconsole->priv->fav_id)
				continue;
			gchar *str;
			str = g_strdup_printf (_("Modify favorite '%s'"), fav->name);
			mitem = gtk_menu_item_new_with_label (str);
			g_free (str);
			g_signal_connect (mitem, "activate",
					  G_CALLBACK (sql_favorite_modify_mitem_cb), tconsole);
			g_object_set_data_full (G_OBJECT (mitem), "favname",
						g_strdup (fav->name), g_free);
			g_object_set_data (G_OBJECT (mitem), "favid",
					   GINT_TO_POINTER (fav->id));
			gtk_widget_show (mitem);
			gtk_menu_shell_append (GTK_MENU_SHELL (submenu), mitem);
		}
		t_favorites_free_list (allfav);
	}

	gtk_menu_popup (GTK_MENU (menu), NULL, NULL,
			NULL, NULL, 0,
			gtk_get_current_event_time ());
}
Exemplo n.º 6
0
GtkWidget *
relations_diagram_new_with_fav_id (TConnection *tcnc, gint fav_id, GError **error)
{
    RelationsDiagram *diagram = NULL;
    TFavoritesAttributes fav;
    xmlDocPtr doc = NULL;

    if (! t_favorites_get (t_connection_get_favorites (tcnc),
                           fav_id, &fav, error))
        return FALSE;


    doc = xmlParseDoc (BAD_CAST fav.contents);
    if (!doc) {
        g_set_error (error, T_ERROR, T_INTERNAL_COMMAND_ERROR,
                     "%s", _("Error parsing favorite's contents"));
        goto out;
    }

    /* create diagram */
    diagram = RELATIONS_DIAGRAM (relations_diagram_new (tcnc));
    if (!diagram)
        goto out;
    gchar *str, *tmp;
    tmp = g_markup_printf_escaped (_("'%s' diagram"), fav.name);
    str = g_strdup_printf ("<b>%s</b>\n%s", _("Relations diagram"), tmp);
    g_free (tmp);
    gdaui_bar_set_text (diagram->priv->header, str);
    g_free (str);
    diagram->priv->fav_id = fav_id;
    relations_diagram_set_fav_id (diagram, fav_id, NULL);

    /* fill the diagram */
    xmlNodePtr root, node;
    root = xmlDocGetRootElement (doc);
    if (!root)
        goto out;
    for (node = root->children; node; node = node->next) {
        if (!strcmp ((gchar*) node->name, "table")) {
            xmlChar *schema;
            xmlChar *name;
            schema = xmlGetProp (node, BAD_CAST "schema");
            name = xmlGetProp (node, BAD_CAST "name");
            if (schema && name) {
                BrowserCanvasTable *table;
                GValue *v1, *v2;
                g_value_set_string ((v1 = gda_value_new (G_TYPE_STRING)), (gchar*) schema);
                g_value_set_string ((v2 = gda_value_new (G_TYPE_STRING)), (gchar*) name);
                xmlFree (schema);
                xmlFree (name);
                table = browser_canvas_db_relations_add_table (BROWSER_CANVAS_DB_RELATIONS (diagram->priv->canvas),
                        NULL, v1, v2);
                gda_value_free (v1);
                gda_value_free (v2);
                if (table) {
                    xmlChar *x, *y;
                    x = xmlGetProp (node, BAD_CAST "x");
                    y = xmlGetProp (node, BAD_CAST "y");
                    browser_canvas_translate_item (BROWSER_CANVAS (diagram->priv->canvas),
                                                   (BrowserCanvasItem*) table,
                                                   x ? g_ascii_strtod ((gchar*) x, NULL) : 0.,
                                                   y ? g_ascii_strtod ((gchar*) y, NULL) : 0.);
                    if (x)
                        xmlFree (x);
                    if (y)
                        xmlFree (y);
                }
            }
            else {
                if (schema)
                    xmlFree (schema);
                if (name)
                    xmlFree (name);
                g_set_error (error, T_ERROR, T_STORED_DATA_ERROR,
                             "%s", _("Missing table attribute in favorite's contents"));
                gtk_widget_destroy ((GtkWidget*) diagram);
                diagram = NULL;
                goto out;
            }
        }
    }

out:
    t_favorites_reset_attributes (&fav);
    if (doc)
        xmlFreeDoc (doc);
    return (GtkWidget*) diagram;
}