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; }
/* * 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; } }
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); }
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 ()); }
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; }