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 */ }
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); } }
/** * query_console_page_new * * Returns: a new #GtkWidget */ GtkWidget * query_console_page_new (TConnection *tcnc) { QueryConsolePage *tconsole; g_return_val_if_fail (T_IS_CONNECTION (tcnc), NULL); tconsole = QUERY_CONSOLE_PAGE (g_object_new (QUERY_CONSOLE_PAGE_TYPE, NULL)); tconsole->priv->tcnc = g_object_ref (tcnc); /* header */ GtkWidget *label; gchar *str; str = g_strdup_printf ("<b>%s</b>", _("Query editor")); label = gdaui_bar_new (str); g_free (str); gtk_box_pack_start (GTK_BOX (tconsole), label, FALSE, FALSE, 0); gtk_widget_show (label); tconsole->priv->header = GDAUI_BAR (label); /* main contents */ GtkWidget *vpaned; vpaned = gtk_paned_new (GTK_ORIENTATION_VERTICAL); tconsole->priv->vpaned = NULL; gtk_box_pack_start (GTK_BOX (tconsole), vpaned, TRUE, TRUE, 6); /* top paned for the editor */ GtkWidget *wid, *vbox, *hbox, *bbox, *hpaned, *button; hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_paned_pack1 (GTK_PANED (vpaned), hbox, TRUE, FALSE); hpaned = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL); gtk_box_pack_start (GTK_BOX (hbox), hpaned, TRUE, TRUE, 0); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_paned_pack1 (GTK_PANED (hpaned), vbox, TRUE, FALSE); wid = gtk_label_new (""); str = g_strdup_printf ("<b>%s</b>", _("SQL code to execute:")); gtk_label_set_markup (GTK_LABEL (wid), str); g_free (str); gtk_widget_set_halign (wid, GTK_ALIGN_START); gtk_widget_set_tooltip_markup (wid, QUERY_EDITOR_TOOLTIP); gtk_box_pack_start (GTK_BOX (vbox), wid, FALSE, FALSE, 0); wid = query_editor_new (); tconsole->priv->editor = QUERY_EDITOR (wid); gtk_box_pack_start (GTK_BOX (vbox), wid, TRUE, TRUE, 0); g_signal_connect (wid, "changed", G_CALLBACK (editor_changed_cb), tconsole); g_signal_connect (wid, "execute-request", G_CALLBACK (editor_execute_request_cb), tconsole); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); tconsole->priv->params_top = vbox; gtk_paned_pack2 (GTK_PANED (hpaned), vbox, FALSE, FALSE); wid = gtk_label_new (""); str = g_strdup_printf ("<b>%s</b>", _("Variables' values:")); gtk_label_set_markup (GTK_LABEL (wid), str); g_free (str); gtk_widget_set_halign (wid, GTK_ALIGN_START); gtk_box_pack_start (GTK_BOX (vbox), wid, FALSE, FALSE, 0); GtkWidget *sw; sw = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_NONE); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); tconsole->priv->params_form_box = gtk_viewport_new (NULL, NULL); gtk_widget_set_name (tconsole->priv->params_form_box, "gdaui-transparent-background"); gtk_viewport_set_shadow_type (GTK_VIEWPORT (tconsole->priv->params_form_box), GTK_SHADOW_NONE); gtk_container_add (GTK_CONTAINER (sw), tconsole->priv->params_form_box); gtk_box_pack_start (GTK_BOX (vbox), sw, TRUE, TRUE, 0); gtk_widget_set_size_request (tconsole->priv->params_form_box, 250, -1); wid = gtk_label_new (""); gtk_label_set_markup (GTK_LABEL (wid), VARIABLES_HELP); gtk_widget_set_halign (wid, GTK_ALIGN_START); gtk_container_add (GTK_CONTAINER (tconsole->priv->params_form_box), wid); tconsole->priv->params_form = wid; bbox = gtk_button_box_new (GTK_ORIENTATION_VERTICAL); gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_END); gtk_box_pack_start (GTK_BOX (hbox), bbox, FALSE, FALSE, 5); button = ui_make_small_button (FALSE, FALSE, _("Clear"), "_Clear", _("Clear the editor's\ncontents")); gtk_box_pack_start (GTK_BOX (bbox), button, FALSE, FALSE, 0); g_signal_connect (button, "clicked", G_CALLBACK (sql_clear_clicked_cb), tconsole); button = ui_make_small_button (TRUE, FALSE, _("Variables"), NULL, _("Show variables needed\nto execute SQL")); gtk_box_pack_start (GTK_BOX (bbox), button, FALSE, FALSE, 0); tconsole->priv->params_toggle = GTK_TOGGLE_BUTTON (button); g_signal_connect (button, "toggled", G_CALLBACK (sql_variables_clicked_cb), tconsole); button = ui_make_small_button (FALSE, FALSE, _("Execute"), "_Execute", _("Execute SQL in editor")); tconsole->priv->exec_button = button; gtk_box_pack_start (GTK_BOX (bbox), button, FALSE, FALSE, 0); g_signal_connect (button, "clicked", G_CALLBACK (sql_execute_clicked_cb), tconsole); button = ui_make_small_button (FALSE, FALSE, _("Indent"), NULL, _("Indent SQL in editor\n" "and make the code more readable\n" "(removes comments)")); tconsole->priv->indent_button = button; gtk_box_pack_start (GTK_BOX (bbox), button, FALSE, FALSE, 0); g_signal_connect (button, "clicked", G_CALLBACK (sql_indent_clicked_cb), tconsole); button = ui_make_small_button (FALSE, TRUE, _("Favorite"), NULL, _("Add SQL to favorite")); gtk_box_pack_start (GTK_BOX (bbox), button, FALSE, FALSE, 0); g_signal_connect (button, "clicked", G_CALLBACK (sql_favorite_clicked_cb), tconsole); /* bottom paned for the results and history */ hpaned = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL); gtk_paned_pack2 (GTK_PANED (vpaned), hpaned, TRUE, FALSE); /* bottom left */ vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_paned_pack1 (GTK_PANED (hpaned), vbox, FALSE, FALSE); wid = gtk_label_new (""); str = g_strdup_printf ("<b>%s</b>", _("Execution history:")); gtk_label_set_markup (GTK_LABEL (wid), str); g_free (str); gtk_widget_set_halign (wid, GTK_ALIGN_START); gtk_box_pack_start (GTK_BOX (vbox), wid, FALSE, FALSE, 0); wid = query_editor_new (); tconsole->priv->history = QUERY_EDITOR (wid); query_editor_set_mode (tconsole->priv->history, QUERY_EDITOR_HISTORY); gtk_widget_set_size_request (wid, 200, -1); gtk_box_pack_start (GTK_BOX (vbox), wid, TRUE, TRUE, 6); g_signal_connect (wid, "changed", G_CALLBACK (history_changed_cb), tconsole); bbox = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL); gtk_box_pack_start (GTK_BOX (vbox), bbox, FALSE, FALSE, 0); gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_END); button = ui_make_small_button (FALSE, FALSE, _("Copy"), "_Copy", _("Copy selected history\nto editor")); gtk_box_pack_start (GTK_BOX (bbox), button, FALSE, FALSE, 0); g_signal_connect (button, "clicked", G_CALLBACK (history_copy_clicked_cb), tconsole); tconsole->priv->history_copy_button = button; gtk_widget_set_sensitive (button, FALSE); button = ui_make_small_button (FALSE, FALSE, _("Clear"), "_Clear", _("Clear history")); gtk_box_pack_start (GTK_BOX (bbox), button, FALSE, FALSE, 0); g_signal_connect (button, "clicked", G_CALLBACK (history_clear_clicked_cb), tconsole); tconsole->priv->history_del_button = button; gtk_widget_set_sensitive (button, FALSE); /* bottom right */ vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8); gtk_paned_pack2 (GTK_PANED (hpaned), vbox, TRUE, FALSE); wid = gtk_label_new (""); str = g_strdup_printf ("<b>%s</b>", _("Execution Results:")); gtk_label_set_markup (GTK_LABEL (wid), str); g_free (str); gtk_widget_set_halign (wid, GTK_ALIGN_START); gtk_box_pack_start (GTK_BOX (vbox), wid, FALSE, FALSE, 0); wid = query_result_new (tconsole->priv->history); tconsole->priv->query_result = wid; gtk_box_pack_start (GTK_BOX (vbox), wid, TRUE, TRUE, 0); g_signal_connect (wid, "rerun-requested", G_CALLBACK (rerun_requested_cb), tconsole); /* show everything */ gtk_widget_show_all (vpaned); gtk_widget_hide (tconsole->priv->params_top); /* busy connection handling */ connection_status_changed_cb (tconsole->priv->tcnc, gda_connection_get_status (t_connection_get_cnc (tconsole->priv->tcnc)), tconsole); g_signal_connect (tconsole->priv->tcnc, "status-changed", G_CALLBACK (connection_status_changed_cb), tconsole); return (GtkWidget*) tconsole; }