static gboolean prop_save_timeout (LdapFavoriteSelector *fsel) { TFavorites *bfav; TFavoritesAttributes fav; GError *error = NULL; gboolean allok; bfav = t_connection_get_favorites (fsel->priv->tcnc); memset (&fav, 0, sizeof (TFavoritesAttributes)); fav.id = fsel->priv->properties_id; fav.type = T_FAVORITES_LDAP_DN; fav.name = (gchar*) gtk_entry_get_text (GTK_ENTRY (fsel->priv->properties_name)); fav.descr = (gchar*) gtk_entry_get_text (GTK_ENTRY (fsel->priv->properties_descr)); fav.contents = (gchar*) gtk_entry_get_text (GTK_ENTRY (fsel->priv->properties_name)); allok = t_favorites_add (bfav, 0, &fav, ORDER_KEY_LDAP, fsel->priv->properties_position, &error); if (! allok) { ui_show_error ((GtkWindow*) gtk_widget_get_toplevel ((GtkWidget*) fsel), _("Could not add favorite: %s"), error && error->message ? error->message : _("No detail")); if (error) g_error_free (error); } fsel->priv->prop_save_timeout = 0; return FALSE; /* remove timeout */ }
/* * 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 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; }
static void query_favorite_selector_dispose (GObject *object) { QueryFavoriteSelector *tsel = (QueryFavoriteSelector *) object; /* free memory */ if (tsel->priv) { if (tsel->priv->idle_update_favorites != 0) g_source_remove (tsel->priv->idle_update_favorites); if (tsel->priv->tree) g_object_unref (tsel->priv->tree); if (tsel->priv->tcnc) { g_signal_handlers_disconnect_by_func (t_connection_get_favorites (tsel->priv->tcnc), G_CALLBACK (favorites_changed_cb), tsel); g_object_unref (tsel->priv->tcnc); } if (tsel->priv->popup_properties) gtk_widget_destroy (tsel->priv->popup_properties); if (tsel->priv->popup_menu) gtk_widget_destroy (tsel->priv->popup_menu); if (tsel->priv->prop_save_timeout) g_source_remove (tsel->priv->prop_save_timeout); g_free (tsel->priv); tsel->priv = NULL; } parent_class->dispose (object); }
static void favorite_delete_selected (LdapFavoriteSelector *fsel) { GtkTreeModel *model; GtkTreeSelection *select; GtkTreeIter iter; select = gtk_tree_view_get_selection (GTK_TREE_VIEW (fsel->priv->treeview)); if (gtk_tree_selection_get_selected (select, &model, &iter)) { TFavorites *bfav; TFavoritesAttributes fav; GError *lerror = NULL; memset (&fav, 0, sizeof (TFavoritesAttributes)); gtk_tree_model_get (model, &iter, COLUMN_ID, &(fav.id), -1); bfav = t_connection_get_favorites (fsel->priv->tcnc); if (!t_favorites_delete (bfav, 0, &fav, NULL)) { ui_show_error ((GtkWindow*) gtk_widget_get_toplevel ((GtkWidget*)fsel), _("Could not remove favorite: %s"), lerror && lerror->message ? lerror->message : _("No detail")); if (lerror) g_error_free (lerror); } } }
static void sql_favorite_new_mitem_cb (G_GNUC_UNUSED GtkMenuItem *mitem, QueryConsolePage *tconsole) { TFavorites *tfav; TFavoritesAttributes fav; GError *error = NULL; GdaSet *set; GtkWidget *dlg, *form; gint response; const GValue *cvalue; set = gda_set_new_inline (1, _("Favorite's name"), G_TYPE_STRING, _("Unnamed query")); dlg = gdaui_basic_form_new_in_dialog (set, (GtkWindow*) gtk_widget_get_toplevel (GTK_WIDGET (tconsole)), _("Name of the favorite to create"), _("Enter the name of the favorite to create")); form = g_object_get_data (G_OBJECT (dlg), "form"); g_signal_connect (form, "activated", G_CALLBACK (fav_form_name_activated_cb), dlg); response = gtk_dialog_run (GTK_DIALOG (dlg)); if (response == GTK_RESPONSE_REJECT) { g_object_unref (set); gtk_widget_destroy (dlg); return; } memset (&fav, 0, sizeof (fav)); fav.id = -1; fav.type = T_FAVORITES_QUERIES; fav.contents = query_editor_get_all_text (tconsole->priv->editor); cvalue = gda_set_get_holder_value (set, _("Favorite's name")); fav.name = (gchar*) g_value_get_string (cvalue); tfav = t_connection_get_favorites (tconsole->priv->tcnc); if (! t_favorites_add (tfav, 0, &fav, ORDER_KEY_QUERIES, G_MAXINT, &error)) { ui_show_error ((GtkWindow*) gtk_widget_get_toplevel ((GtkWidget*) tconsole), _("Could not add favorite: %s"), error && error->message ? error->message : _("No detail")); if (error) g_error_free (error); } else tconsole->priv->fav_id = fav.id; g_free (fav.contents); g_object_unref (set); gtk_widget_destroy (dlg); }
/** * schema_browser_perspective_new * * Creates new #BrowserPerspective widget which */ BrowserPerspective * schema_browser_perspective_new (BrowserWindow *bwin) { TConnection *tcnc; BrowserPerspective *bpers; SchemaBrowserPerspective *perspective; gboolean fav_supported; bpers = (BrowserPerspective*) g_object_new (TYPE_SCHEMA_BROWSER_PERSPECTIVE, NULL); perspective = (SchemaBrowserPerspective*) bpers; tcnc = browser_window_get_connection (bwin); fav_supported = t_connection_get_favorites (tcnc) ? TRUE : FALSE; perspective->priv->bwin = bwin; /* contents */ GtkWidget *paned, *wid, *nb; paned = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL); if (fav_supported) { wid = favorite_selector_new (tcnc); g_signal_connect (wid, "selection-changed", G_CALLBACK (fav_selection_changed_cb), bpers); gtk_paned_add1 (GTK_PANED (paned), wid); gtk_paned_set_position (GTK_PANED (paned), DEFAULT_FAVORITES_SIZE); perspective->priv->favorites = wid; } nb = browser_perspective_create_notebook (bpers); perspective->priv->notebook = nb; gtk_paned_add2 (GTK_PANED (paned), nb); wid = objects_index_new (tcnc); g_signal_connect (wid, "selection-changed", G_CALLBACK (objects_index_selection_changed_cb), bpers); gtk_notebook_append_page (GTK_NOTEBOOK (nb), wid, ui_make_tab_label_with_icon (_("Index"), "help-about", FALSE, NULL)); gtk_notebook_set_tab_reorderable (GTK_NOTEBOOK (nb), wid, TRUE); gtk_notebook_set_group_name (GTK_NOTEBOOK (nb), "schema-browser"); gtk_notebook_set_menu_label (GTK_NOTEBOOK (nb), wid, ui_make_tab_label_with_icon (_("Index"), "help-about", FALSE, NULL)); gtk_box_pack_start (GTK_BOX (bpers), paned, TRUE, TRUE, 0); gtk_widget_show_all (paned); if (perspective->priv->favorites && !perspective->priv->favorites_shown) gtk_widget_hide (perspective->priv->favorites); return bpers; }
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 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; }
static void favorite_delete_selected (QueryFavoriteSelector *tsel) { GtkTreeModel *model; GtkTreeSelection *select; GtkTreeIter iter; select = gtk_tree_view_get_selection (GTK_TREE_VIEW (tsel->priv->treeview)); if (gtk_tree_selection_get_selected (select, &model, &iter)) { TFavorites *bfav; TFavoritesAttributes fav; GError *lerror = NULL; memset (&fav, 0, sizeof (TFavoritesAttributes)); gtk_tree_model_get (model, &iter, COLUMN_ID, &(fav.id), -1); bfav = t_connection_get_favorites (tsel->priv->tcnc); if (! t_favorites_delete (bfav, 0, &fav, NULL)) { ui_show_error ((GtkWindow*) gtk_widget_get_toplevel ((GtkWidget*)tsel), _("Could not remove favorite: %s"), lerror && lerror->message ? lerror->message : _("No detail")); if (lerror) g_error_free (lerror); } else { /* remove any associated action */ gint id; gchar *tmp; tmp = g_strdup_printf ("QUERY%d", fav.id); id = t_favorites_find (bfav, 0, tmp, &fav, NULL); if (id >= 0) { t_favorites_delete (bfav, 0, &fav, NULL); /*g_print ("ACTION_DELETED %d: %s\n", fav.id, tmp);*/ } g_free (tmp); } } }
/* * POPUP */ static void real_save_clicked_cb (GtkWidget *button, RelationsDiagram *diagram) { gchar *str; str = browser_canvas_serialize_items (BROWSER_CANVAS (diagram->priv->canvas)); GError *lerror = NULL; TFavorites *bfav; TFavoritesAttributes fav; memset (&fav, 0, sizeof (TFavoritesAttributes)); fav.id = diagram->priv->fav_id; fav.type = T_FAVORITES_DIAGRAMS; fav.name = gtk_editable_get_chars (GTK_EDITABLE (diagram->priv->name_entry), 0, -1); if (!*fav.name) { g_free (fav.name); fav.name = g_strdup (_("Diagram")); } fav.contents = str; gtk_widget_hide (diagram->priv->popup_container); bfav = t_connection_get_favorites (diagram->priv->tcnc); if (! t_favorites_add (bfav, 0, &fav, ORDER_KEY_SCHEMA, G_MAXINT, &lerror)) { ui_show_error ((GtkWindow*) gtk_widget_get_toplevel (button), "<b>%s:</b>\n%s", _("Could not save diagram"), lerror && lerror->message ? lerror->message : _("No detail")); if (lerror) g_error_free (lerror); } relations_diagram_set_fav_id (diagram, fav.id, NULL); g_free (fav.name); g_free (str); }
static void sql_favorite_modify_mitem_cb (G_GNUC_UNUSED GtkMenuItem *mitem, QueryConsolePage *tconsole) { TFavorites *tfav; TFavoritesAttributes fav; GError *error = NULL; memset (&fav, 0, sizeof (fav)); fav.id = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (mitem), "favid")); fav.type = T_FAVORITES_QUERIES; fav.contents = query_editor_get_all_text (tconsole->priv->editor); fav.name = g_object_get_data (G_OBJECT (mitem), "favname"); tfav = t_connection_get_favorites (tconsole->priv->tcnc); if (! t_favorites_add (tfav, 0, &fav, ORDER_KEY_QUERIES, G_MAXINT, &error)) { ui_show_error ((GtkWindow*) gtk_widget_get_toplevel ((GtkWidget*) tconsole), _("Could not add favorite: %s"), error && error->message ? error->message : _("No detail")); if (error) g_error_free (error); } g_free (fav.contents); }
/** * query_favorite_selector_new * * Returns: a new #GtkWidget */ GtkWidget * query_favorite_selector_new (TConnection *tcnc) { QueryFavoriteSelector *tsel; GdaTreeManager *manager; g_return_val_if_fail (T_IS_CONNECTION (tcnc), NULL); tsel = QUERY_FAVORITE_SELECTOR (g_object_new (QUERY_FAVORITE_SELECTOR_TYPE, NULL)); tsel->priv->tcnc = g_object_ref (tcnc); g_signal_connect (t_connection_get_favorites (tsel->priv->tcnc), "favorites-changed", G_CALLBACK (favorites_changed_cb), tsel); /* create tree managers */ tsel->priv->tree = gda_tree_new (); manager = mgr_favorites_new (tcnc, T_FAVORITES_QUERIES, ORDER_KEY_QUERIES); gda_tree_add_manager (tsel->priv->tree, manager); g_object_unref (manager); /* update the tree's contents */ if (! gda_tree_update_all (tsel->priv->tree, NULL)) { if (tsel->priv->idle_update_favorites == 0) tsel->priv->idle_update_favorites = g_idle_add ((GSourceFunc) idle_update_favorites, tsel); } /* header */ GtkWidget *label; gchar *str; str = g_strdup_printf ("<b>%s</b>", _("Favorites")); label = gdaui_bar_new (str); g_free (str); gdaui_bar_set_icon_from_resource (GDAUI_BAR (label), "/images/gda-browser-bookmark.png"); gtk_box_pack_start (GTK_BOX (tsel), label, FALSE, FALSE, 0); gtk_widget_show (label); /* tree model */ GtkTreeModel *model; GtkWidget *treeview; GtkCellRenderer *renderer; GtkTreeViewColumn *column; model = gdaui_tree_store_new (tsel->priv->tree, 7, G_TYPE_INT, MGR_FAVORITES_POSITION_ATT_NAME, G_TYPE_OBJECT, "icon", G_TYPE_STRING, MGR_FAVORITES_CONTENTS_ATT_NAME, G_TYPE_UINT, MGR_FAVORITES_TYPE_ATT_NAME, G_TYPE_INT, MGR_FAVORITES_ID_ATT_NAME, G_TYPE_STRING, MGR_FAVORITES_NAME_ATT_NAME, G_TYPE_STRING, "summary"); treeview = ui_make_tree_view (model); tsel->priv->treeview = treeview; g_object_unref (model); /* icon */ column = gtk_tree_view_column_new (); renderer = gtk_cell_renderer_pixbuf_new (); gtk_tree_view_column_pack_start (column, renderer, FALSE); gtk_tree_view_column_add_attribute (column, renderer, "pixbuf", COLUMN_ICON); g_object_set ((GObject*) renderer, "yalign", 0., NULL); /* text */ renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_cell_data_func (column, renderer, (GtkTreeCellDataFunc) cell_data_func, NULL, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED); /* scrolled window packing */ GtkWidget *sw; sw = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_ETCHED_IN); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); gtk_container_add (GTK_CONTAINER (sw), treeview); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeview), FALSE); gtk_box_pack_start (GTK_BOX (tsel), sw, TRUE, TRUE, 0); gtk_widget_show_all (sw); g_signal_connect (G_OBJECT (treeview), "row-activated", G_CALLBACK (selection_changed_cb), tsel); g_signal_connect (G_OBJECT (treeview), "key-press-event", G_CALLBACK (key_press_event_cb), tsel); g_signal_connect (G_OBJECT (treeview), "popup-menu", G_CALLBACK (popup_menu_cb), tsel); g_signal_connect (G_OBJECT (treeview), "button-press-event", G_CALLBACK (button_press_event_cb), tsel); /* DnD */ gtk_tree_view_enable_model_drag_dest (GTK_TREE_VIEW (treeview), dbo_table, G_N_ELEMENTS (dbo_table), GDK_ACTION_COPY); gtk_tree_view_enable_model_drag_source (GTK_TREE_VIEW (treeview), GDK_BUTTON1_MASK, dbo_table, G_N_ELEMENTS (dbo_table), GDK_ACTION_COPY | GDK_ACTION_MOVE); g_signal_connect (model, "drag-drop", G_CALLBACK (tree_store_drag_drop_cb), tsel); g_signal_connect (model, "drag-can-drag", G_CALLBACK (tree_store_drag_can_drag_cb), tsel); g_signal_connect (model, "drag-get", G_CALLBACK (tree_store_drag_get_cb), tsel); return (GtkWidget*) tsel; }
static void properties_activated_cb (GtkMenuItem *mitem, QueryFavoriteSelector *tsel) { if (! tsel->priv->popup_properties) { GtkWidget *pcont, *vbox, *hbox, *label, *entry, *text, *grid; gchar *str; pcont = popup_container_new (GTK_WIDGET (mitem)); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_container_add (GTK_CONTAINER (pcont), vbox); label = gtk_label_new (""); str = g_strdup_printf ("<b>%s:</b>", _("Favorite's properties")); gtk_label_set_markup (GTK_LABEL (label), str); g_free (str); gtk_widget_set_halign (label, GTK_ALIGN_START); gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); /* HIG */ gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 5); label = gtk_label_new (" "); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); grid = gtk_grid_new (); gtk_box_pack_start (GTK_BOX (hbox), grid, TRUE, TRUE, 0); label = gtk_label_new (""); str = g_strdup_printf ("<b>%s:</b>", _("Name")); gtk_label_set_markup (GTK_LABEL (label), str); g_free (str); gtk_widget_set_halign (label, GTK_ALIGN_START); gtk_grid_attach (GTK_GRID (grid), label, 0, 0, 1, 1); label = gtk_label_new (""); str = g_strdup_printf ("<b>%s:</b>", _("SQL Code")); gtk_label_set_markup (GTK_LABEL (label), str); g_free (str); gtk_widget_set_halign (label, GTK_ALIGN_START); gtk_grid_attach (GTK_GRID (grid), label, 0, 1, 1, 1); label = gtk_label_new (""); str = g_strdup_printf ("<b>%s:</b>", _("Is action")); gtk_label_set_markup (GTK_LABEL (label), str); g_free (str); gtk_widget_set_tooltip_text (label, _("Check this option to make this favorite an action\n" "which can be proposed for execution from grids\n" "containing data. The parameters required to execute\n" "the query will be defined from the row selected in the grid")); gtk_widget_set_halign (label, GTK_ALIGN_START); gtk_grid_attach (GTK_GRID (grid), label, 0, 2, 1, 1); entry = gtk_entry_new (); gtk_grid_attach (GTK_GRID (grid), entry, 1, 0, 1, 1); tsel->priv->properties_name = entry; g_signal_connect (entry, "changed", G_CALLBACK (property_changed_cb), tsel); text = query_editor_new (); query_editor_show_tooltip (QUERY_EDITOR (text), FALSE); gtk_widget_set_size_request (GTK_WIDGET (text), 400, 300); gtk_grid_attach (GTK_GRID (grid), text, 1, 1, 1, 1); tsel->priv->properties_text = text; g_signal_connect (text, "changed", G_CALLBACK (property_changed_cb), tsel); entry = gtk_check_button_new (); gtk_grid_attach (GTK_GRID (grid), entry, 1, 2, 1, 1); tsel->priv->properties_action = entry; g_signal_connect (entry, "toggled", G_CALLBACK (property_changed_cb), tsel); tsel->priv->popup_properties = pcont; gtk_widget_show_all (vbox); } /* adjust contents */ GtkTreeSelection *selection; GtkTreeModel *model; GtkTreeIter iter; selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tsel->priv->treeview)); if (gtk_tree_selection_get_selected (selection, &model, &iter)) { gchar *name, *contents; gtk_tree_model_get (model, &iter, COLUMN_ID, &(tsel->priv->properties_id), COLUMN_POSITION, &(tsel->priv->properties_position), COLUMN_NAME, &name, COLUMN_CONTENTS, &contents, -1); g_signal_handlers_block_by_func (tsel->priv->properties_name, G_CALLBACK (property_changed_cb), tsel); gtk_entry_set_text (GTK_ENTRY (tsel->priv->properties_name), name); g_signal_handlers_unblock_by_func (tsel->priv->properties_name, G_CALLBACK (property_changed_cb), tsel); g_free (name); g_signal_handlers_block_by_func (tsel->priv->properties_text, G_CALLBACK (property_changed_cb), tsel); query_editor_set_text (QUERY_EDITOR (tsel->priv->properties_text), contents); g_signal_handlers_unblock_by_func (tsel->priv->properties_text, G_CALLBACK (property_changed_cb), tsel); g_free (contents); /* action, if any */ g_signal_handlers_block_by_func (tsel->priv->properties_action, G_CALLBACK (property_changed_cb), tsel); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tsel->priv->properties_action), FALSE); if (tsel->priv->properties_id >= 0) { gint id; gchar *tmp; TFavorites *bfav; TFavoritesAttributes fav; bfav = t_connection_get_favorites (tsel->priv->tcnc); tmp = g_strdup_printf ("QUERY%d", tsel->priv->properties_id); id = t_favorites_find (bfav, 0, tmp, &fav, NULL); if (id >= 0) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tsel->priv->properties_action), TRUE); /*g_print ("ACTION_USED %d: %s\n", fav.id, tmp);*/ } g_free (tmp); } g_signal_handlers_unblock_by_func (tsel->priv->properties_action, G_CALLBACK (property_changed_cb), tsel); gtk_widget_show (tsel->priv->popup_properties); } }
static gboolean prop_save_timeout (QueryFavoriteSelector *tsel) { TFavorites *bfav; TFavoritesAttributes fav; GError *error = NULL; gboolean allok, actiondel = TRUE; bfav = t_connection_get_favorites (tsel->priv->tcnc); memset (&fav, 0, sizeof (TFavoritesAttributes)); fav.id = tsel->priv->properties_id; fav.type = T_FAVORITES_QUERIES; fav.name = (gchar*) gtk_entry_get_text (GTK_ENTRY (tsel->priv->properties_name)); fav.descr = NULL; fav.contents = query_editor_get_all_text (QUERY_EDITOR (tsel->priv->properties_text)); allok = t_favorites_add (bfav, 0, &fav, ORDER_KEY_QUERIES, tsel->priv->properties_position, &error); if (! allok) { 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); } g_free (fav.contents); if (allok && (fav.id >= 0)) { gboolean is_action; gint qid = fav.id; is_action = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (tsel->priv->properties_action)); if (is_action) { fav.id = -1; fav.type = T_FAVORITES_ACTIONS; fav.name = (gchar*) gtk_entry_get_text (GTK_ENTRY (tsel->priv->properties_name)); fav.descr = NULL; fav.contents = g_strdup_printf ("QUERY%d", qid); allok = t_favorites_add (bfav, 0, &fav, -1, tsel->priv->properties_position, &error); if (! allok) { ui_show_error ((GtkWindow*) gtk_widget_get_toplevel ((GtkWidget*) tsel), _("Could not add action: %s"), error && error->message ? error->message : _("No detail")); if (error) g_error_free (error); } else actiondel = FALSE; /*g_print ("ACTION_ADDED %d: %s\n", fav.id, fav.contents);*/ g_free (fav.contents); } } if (actiondel && (tsel->priv->properties_id >= 0)) { /* remove action */ gint id; gchar *tmp; tmp = g_strdup_printf ("QUERY%d", tsel->priv->properties_id); id = t_favorites_find (bfav, 0, tmp, &fav, NULL); if (id >= 0) { t_favorites_delete (bfav, 0, &fav, NULL); /*g_print ("ACTION_DELETED %d: %s\n", fav.id, tmp);*/ } g_free (tmp); } tsel->priv->prop_save_timeout = 0; return FALSE; /* remove timeout */ }
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; }
static void form_grid_populate_popup_cb (GtkWidget *wid, GtkMenu *menu, UiFormGrid *formgrid) { /* add actions to execute to menu */ GdaDataModelIter *iter; TConnection *tcnc = NULL; tcnc = get_t_connection (formgrid); if (!tcnc) return; iter = gdaui_data_selector_get_data_set (GDAUI_DATA_SELECTOR (formgrid->priv->raw_grid)); /* actions */ GSList *actions_list, *list; actions_list = t_favorites_actions_get (t_connection_get_favorites (tcnc), tcnc, GDA_SET (iter)); if (actions_list) { GtkWidget *mitem, *submenu; mitem = gtk_menu_item_new_with_label (_("Execute action")); gtk_widget_show (mitem); gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), mitem); submenu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (mitem), submenu); for (list = actions_list; list; list = list->next) { TFavoritesAction *act = (TFavoritesAction*) list->data; mitem = gtk_menu_item_new_with_label (act->name); gtk_widget_show (mitem); gtk_menu_shell_append (GTK_MENU_SHELL (submenu), mitem); g_object_set_data_full (G_OBJECT (mitem), "action", act, (GDestroyNotify) t_favorites_action_free); g_signal_connect (mitem, "activate", G_CALLBACK (execute_action_mitem_cb), formgrid); } g_slist_free (actions_list); } #ifdef HAVE_LDAP /* LDAP specific */ if (t_connection_is_ldap (tcnc)) { GdaHolder *dnh; dnh = gda_set_get_holder (GDA_SET (iter), "dn"); if (dnh) { const GValue *cvalue; cvalue = gda_holder_get_value (GDA_HOLDER (dnh)); if (!cvalue && (G_VALUE_TYPE (cvalue) != G_TYPE_STRING)) dnh = NULL; } if (!dnh) { GSList *list; for (list = GDA_SET (iter)->holders; list; list = list->next) { const GValue *cvalue; cvalue = gda_holder_get_value (GDA_HOLDER (list->data)); if (cvalue && (G_VALUE_TYPE (cvalue) == G_TYPE_STRING) && gda_ldap_is_dn (g_value_get_string (cvalue))) { dnh = GDA_HOLDER (list->data); break; } } } if (dnh) { const GValue *cvalue; cvalue = gda_holder_get_value (dnh); GtkWidget *mitem; mitem = gtk_menu_item_new_with_label (_("View LDAP entry's details")); gtk_widget_show (mitem); gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), mitem); g_object_set_data_full (G_OBJECT (mitem), "dn", g_value_dup_string (cvalue), g_free); g_signal_connect (mitem, "activate", G_CALLBACK (ldap_view_dn_mitem_cb), formgrid); } } #endif if (wid == formgrid->priv->raw_form) { GtkWidget *mitem; gboolean add_scale; g_object_get (G_OBJECT (formgrid->priv->overlay_form), "add-scale", &add_scale, NULL); mitem = gtk_check_menu_item_new_with_label (_("Zoom...")); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (mitem), add_scale); gtk_widget_show (mitem); gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), mitem); g_signal_connect (mitem, "toggled", G_CALLBACK (zoom_form_mitem_cb), formgrid); } else if (wid == formgrid->priv->raw_grid) { GtkWidget *mitem; gboolean add_scale; g_object_get (G_OBJECT (formgrid->priv->overlay_grid), "add-scale", &add_scale, NULL); mitem = gtk_check_menu_item_new_with_label (_("Zoom...")); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (mitem), add_scale); gtk_widget_show (mitem); gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), mitem); g_signal_connect (mitem, "toggled", G_CALLBACK (zoom_grid_mitem_cb), formgrid); } }
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 ()); }