Example #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;
}
/**
 * schema_browser_perspective_display_diagram
 *
 */
void
schema_browser_perspective_display_diagram (SchemaBrowserPerspective *bpers, gint fav_id)
{
	GtkWidget *diagram = NULL;

	if (fav_id >= 0) {
		gint ntabs, i;
		
		ntabs = gtk_notebook_get_n_pages (GTK_NOTEBOOK (bpers->priv->notebook));
		for (i = 0; i < ntabs; i++) {
			GtkWidget *child;
			child = gtk_notebook_get_nth_page (GTK_NOTEBOOK (bpers->priv->notebook), i);
			if (IS_RELATIONS_DIAGRAM (child)) {
				if (relations_diagram_get_fav_id (RELATIONS_DIAGRAM (child)) == fav_id) {
					gtk_notebook_set_current_page (GTK_NOTEBOOK (bpers->priv->notebook), i);
					return;
				}
			}
		}

		GError *error = NULL;
		diagram = relations_diagram_new_with_fav_id (browser_window_get_connection (bpers->priv->bwin),
							     fav_id, &error);
		if (! diagram) {
			ui_show_error ((GtkWindow*) gtk_widget_get_toplevel ((GtkWidget*) bpers),
					    error && error->message ? error->message :
					    _("Could not load diagram"));
			g_clear_error (&error);
		}
	}
	else
		diagram = relations_diagram_new (browser_window_get_connection (bpers->priv->bwin));

	if (diagram) {
		GtkWidget *close_btn;
		GtkWidget *tab_label;
		gint i;
		
		tab_label = browser_page_get_tab_label (BROWSER_PAGE (diagram), &close_btn);
		i = gtk_notebook_append_page (GTK_NOTEBOOK (bpers->priv->notebook), diagram, tab_label);
		g_signal_connect (close_btn, "clicked",
				  G_CALLBACK (close_button_clicked_cb), diagram);
		
		gtk_widget_show (diagram);

		tab_label = browser_page_get_tab_label (BROWSER_PAGE (diagram), NULL);
		gtk_notebook_set_menu_label (GTK_NOTEBOOK (bpers->priv->notebook), diagram, tab_label);

		gtk_notebook_set_current_page (GTK_NOTEBOOK (bpers->priv->notebook), i);
		gtk_notebook_set_tab_reorderable (GTK_NOTEBOOK (bpers->priv->notebook), diagram,
						  TRUE);
		gtk_notebook_set_tab_detachable (GTK_NOTEBOOK (bpers->priv->notebook), diagram,
						 TRUE);
	}
}
Example #3
0
/**
 * relations_diagram_new
 *
 * Returns: a new #GtkWidget
 */
GtkWidget *
relations_diagram_new (TConnection *tcnc)
{
    RelationsDiagram *diagram;

    g_return_val_if_fail (T_IS_CONNECTION (tcnc), NULL);

    diagram = RELATIONS_DIAGRAM (g_object_new (RELATIONS_DIAGRAM_TYPE, NULL));

    diagram->priv->tcnc = g_object_ref (tcnc);
    g_signal_connect (diagram->priv->tcnc, "meta-changed",
                      G_CALLBACK (meta_changed_cb), diagram);
    g_signal_connect (tcnc, "favorites-changed",
                      G_CALLBACK (favorites_changed_cb), diagram);


    /* header */
    GtkWidget *hbox, *wid;
    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
    gtk_box_pack_start (GTK_BOX (diagram), hbox, FALSE, FALSE, 0);

    GtkWidget *label;
    gchar *str;
    str = g_strdup_printf ("<b>%s</b>\n%s", _("Relations diagram"), _("Unsaved"));
    label = gdaui_bar_new (str);
    g_free (str);
    gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
    diagram->priv->header = GDAUI_BAR (label);

    wid = gdaui_bar_add_button_from_icon_name (GDAUI_BAR (label), "document-save");
    diagram->priv->save_button = wid;

    g_signal_connect (wid, "clicked",
                      G_CALLBACK (save_clicked_cb), diagram);

    gtk_widget_show_all (hbox);

    /* main contents */
    wid = browser_canvas_db_relations_new (NULL);
    diagram->priv->canvas = wid;
    gtk_box_pack_start (GTK_BOX (diagram), wid, TRUE, TRUE, 0);
    gtk_widget_show_all (wid);

    GdaMetaStruct *mstruct;
    mstruct = t_connection_get_meta_struct (diagram->priv->tcnc);
    if (mstruct)
        meta_changed_cb (diagram->priv->tcnc, mstruct, diagram);

    return (GtkWidget*) diagram;
}
Example #4
0
static void
action_view_contents_cb  (G_GNUC_UNUSED GSimpleAction *action, G_GNUC_UNUSED GVariant *state, gpointer data)
{
    RelationsDiagram *diagram;
    diagram = RELATIONS_DIAGRAM (data);

    gchar *str;
    str = browser_canvas_db_relations_items_to_data_manager (BROWSER_CANVAS_DB_RELATIONS (diagram->priv->canvas));
    g_print ("%s\n", str);

    if (str) {
        BrowserWindow *bwin;
        BrowserPerspective *pers;
        bwin = (BrowserWindow*) gtk_widget_get_toplevel ((GtkWidget*) diagram);
        pers = browser_window_change_perspective (bwin, _("Data manager"));

        data_manager_perspective_new_tab (DATA_MANAGER_PERSPECTIVE (pers), str);
        g_free (str);
    }
}
Example #5
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;
}