/** * ui_formgrid_handle_user_prefs * @formgrid: a #UiFormGrid widget * @tcnc: (allow-none): a #TConnection, or %NULL to let @formgrid determine it itself * @stmt: the #GdaStatement which has been executed to produce the #GdaDataModel displayed in @formgrid * * Takes into account the UI preferences of the user */ void ui_formgrid_handle_user_prefs (UiFormGrid *formgrid, TConnection *tcnc, GdaStatement *stmt) { g_return_if_fail (UI_IS_FORMGRID (formgrid)); if (tcnc) g_return_if_fail (T_IS_CONNECTION (tcnc)); else { tcnc = get_t_connection (formgrid); if (!tcnc) return; } if (stmt) g_return_if_fail (GDA_IS_STATEMENT (stmt)); else return; GdaSqlStatement *sqlst; g_object_get ((GObject*) stmt, "structure", &sqlst, NULL); if (!sqlst) return; GError *lerror = NULL; if (((sqlst->stmt_type != GDA_SQL_STATEMENT_SELECT) && (sqlst->stmt_type != GDA_SQL_STATEMENT_COMPOUND)) || !t_connection_normalize_sql_statement (tcnc, sqlst, &lerror)) { if (lerror) g_print ("[%s]\n", lerror->message); goto out; } handle_user_prefs_for_sql_statement (formgrid, tcnc, sqlst); out: gda_sql_statement_free (sqlst); }
/** * vtable_dialog_new: * * Returns: a new #GtkWidget */ GtkWidget * vtable_dialog_new (GtkWindow *parent, TConnection *tcnc) { VtableDialog *dlg; g_return_val_if_fail (T_IS_CONNECTION (tcnc), NULL); dlg = VTABLE_DIALOG (g_object_new (VTABLE_DIALOG_TYPE, NULL)); dlg->priv->tcnc = g_object_ref (tcnc); if (parent) gtk_window_set_transient_for (GTK_WINDOW (dlg), parent); gtk_window_set_modal (GTK_WINDOW (dlg), TRUE); gtk_container_set_border_width (GTK_CONTAINER (dlg), SPACING * 2); gtk_window_set_title (GTK_WINDOW (dlg), _("Define LDAP search as a virtual table")); GtkWidget *dcontents; GtkWidget *label, *entry, *grid, *button; gchar *str; dcontents = gtk_dialog_get_content_area (GTK_DIALOG (dlg)); label = gtk_label_new (NULL); gtk_widget_set_halign (label, GTK_ALIGN_START); str = g_markup_printf_escaped ("<b>%s:</b>\n<small>%s</small>", _("Name of the virtual LDAP table to create"), _("Everytime data is selected from the virtual table which will " "be created, the LDAP search will be executed and data " "returned as the contents of the table.")); gtk_label_set_markup (GTK_LABEL (label), str); gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); g_free (str); gtk_box_pack_start (GTK_BOX (dcontents), label, FALSE, FALSE, SPACING); grid = gtk_grid_new (); gtk_grid_set_column_spacing (GTK_GRID (grid), SPACING); gtk_grid_set_row_spacing (GTK_GRID (grid), SPACING); gtk_box_pack_start (GTK_BOX (dcontents), grid, FALSE, FALSE, SPACING); label = gtk_label_new (_("Table name:")); gtk_widget_set_halign (label, GTK_ALIGN_START); gtk_grid_attach (GTK_GRID (grid), label, 0, 0, 1, 1); entry = gtk_entry_new (); gtk_grid_attach (GTK_GRID (grid), entry, 1, 0, 1, 1); dlg->priv->tname_entry = entry; label = gtk_label_new (_("Replace if exists:")); gtk_widget_set_halign (label, GTK_ALIGN_START); gtk_grid_attach (GTK_GRID (grid), label, 0, 1, 1, 1); button = gtk_check_button_new (); gtk_grid_attach (GTK_GRID (grid), button, 1, 1, 1, 1); dlg->priv->tname_replace = button; gtk_widget_show_all (dcontents); gtk_dialog_add_buttons (GTK_DIALOG (dlg), _("_Ok"), GTK_RESPONSE_OK, _("_Cancel"), GTK_RESPONSE_CANCEL, NULL); return (GtkWidget*) dlg; }
/** * class_properties_new: * * Returns: a new #GtkWidget */ GtkWidget * class_properties_new (TConnection *tcnc) { ClassProperties *cprop; g_return_val_if_fail (T_IS_CONNECTION (tcnc), NULL); cprop = CLASS_PROPERTIES (g_object_new (CLASS_PROPERTIES_TYPE, NULL)); cprop->priv->tcnc = g_object_ref (tcnc); 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); gtk_box_pack_start (GTK_BOX (cprop), sw, TRUE, TRUE, 0); GtkWidget *textview; textview = gtk_text_view_new (); gtk_container_add (GTK_CONTAINER (sw), textview); gtk_text_view_set_left_margin (GTK_TEXT_VIEW (textview), 5); gtk_text_view_set_right_margin (GTK_TEXT_VIEW (textview), 5); gtk_text_view_set_editable (GTK_TEXT_VIEW (textview), FALSE); gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (textview), FALSE); cprop->priv->text = gtk_text_view_get_buffer (GTK_TEXT_VIEW (textview)); cprop->priv->view = GTK_TEXT_VIEW (textview); gtk_widget_show_all (sw); gtk_text_buffer_create_tag (cprop->priv->text, "section", "weight", PANGO_WEIGHT_BOLD, "foreground", "blue", NULL); gtk_text_buffer_create_tag (cprop->priv->text, "error", "foreground", "red", NULL); gtk_text_buffer_create_tag (cprop->priv->text, "data", "left-margin", 20, NULL); gtk_text_buffer_create_tag (cprop->priv->text, "starter", "indent", -10, "left-margin", 20, NULL); g_signal_connect (textview, "key-press-event", G_CALLBACK (key_press_event), cprop); g_signal_connect (textview, "event-after", G_CALLBACK (event_after), cprop); g_signal_connect (textview, "motion-notify-event", G_CALLBACK (motion_notify_event), cprop); g_signal_connect (textview, "visibility-notify-event", G_CALLBACK (visibility_notify_event), cprop); class_properties_set_class (cprop, NULL); return (GtkWidget*) cprop; }
/** * ui_formgrid_set_connection * @formgrid: a #UiFormGrid widget * @tcnc: (allow-none): a #TConnection, or %NULL * * Tells @formgrid to use @tcnc as connection when actions have to be executed */ void ui_formgrid_set_connection (UiFormGrid *formgrid, TConnection *tcnc) { g_return_if_fail (UI_IS_FORMGRID (formgrid)); g_return_if_fail (!tcnc || T_IS_CONNECTION (tcnc)); if (formgrid->priv->tcnc) { g_object_unref (formgrid->priv->tcnc); formgrid->priv->tcnc = NULL; } if (tcnc) formgrid->priv->tcnc = g_object_ref (tcnc); }
/** * 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; }
/** * mgr_columns_new * @tcnc: a #TConnection object * @schema: the schema the table is in * @name: the table's name * * Creates a new #GdaTreeManager object which will add one tree node for column found in the * table @schema.@table * * Returns: a new #GdaTreeManager object */ GdaTreeManager* mgr_columns_new (TConnection *tcnc, const gchar *schema, const gchar *table) { MgrColumns *mgr; g_return_val_if_fail (T_IS_CONNECTION (tcnc), NULL); g_return_val_if_fail (schema, NULL); g_return_val_if_fail (table, NULL); mgr = (MgrColumns*) g_object_new (MGR_COLUMNS_TYPE, "browser-connection", tcnc, NULL); mgr->priv->schema = g_strdup (schema); mgr->priv->table_name = g_strdup (table); return (GdaTreeManager*) mgr; }
/** * objects_index_new: * * * * Returns: */ GtkWidget * objects_index_new (TConnection *tcnc) { ObjectsIndex *index; g_return_val_if_fail (T_IS_CONNECTION (tcnc), NULL); index = OBJECTS_INDEX (g_object_new (OBJECTS_INDEX_TYPE, NULL)); index->priv->tcnc = g_object_ref (tcnc); g_signal_connect (index->priv->tcnc, "meta-changed", G_CALLBACK (meta_changed_cb), index); /* header */ GtkWidget *hbox, *wid; hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start (GTK_BOX (index), hbox, FALSE, FALSE, 0); GtkWidget *label; gchar *str; str = g_strdup_printf ("<b>%s</b>", _("Tables' index")); label = gdaui_bar_new (str); g_free (str); gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0); gtk_widget_show (label); /* cloud */ GdaMetaStruct *mstruct; GtkWidget *cloud; mstruct = t_connection_get_meta_struct (index->priv->tcnc); cloud = objects_cloud_new (mstruct, OBJECTS_CLOUD_TYPE_TABLE); objects_cloud_show_schemas (OBJECTS_CLOUD (cloud), TRUE); gtk_box_pack_start (GTK_BOX (index), cloud, TRUE, TRUE, 0); index->priv->cloud = OBJECTS_CLOUD (cloud); g_signal_connect (cloud, "selected", G_CALLBACK (cloud_object_selected_cb), index); /* search entry */ wid = gdaui_bar_add_search_entry (GDAUI_BAR (label)); g_signal_connect (wid, "changed", G_CALLBACK (find_changed_cb), index); return (GtkWidget*) index; }
/** * 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; }
/** * filter_editor_new: * * Returns: a new #GtkWidget */ GtkWidget * filter_editor_new (TConnection *tcnc) { FilterEditor *feditor; GtkWidget *grid, *label, *entry; GdaDataModel *model; GList *values; GValue *v1, *v2; g_return_val_if_fail (T_IS_CONNECTION (tcnc), NULL); feditor = FILTER_EDITOR (g_object_new (FILTER_EDITOR_TYPE, NULL)); feditor->priv->tcnc = g_object_ref ((GObject*) tcnc); grid = gtk_grid_new (); gtk_grid_set_column_spacing (GTK_GRID (grid), 5); gtk_box_pack_start (GTK_BOX (feditor), grid, TRUE, TRUE, 0); label = gtk_label_new (_("Base DN:")); gtk_widget_set_halign (label, GTK_ALIGN_START); gtk_grid_attach (GTK_GRID (grid), label, 0, 0, 1, 1); label = gtk_label_new (_("Filter expression:")); gtk_widget_set_halign (label, GTK_ALIGN_START); gtk_grid_attach (GTK_GRID (grid), label, 0, 1, 1, 1); label = gtk_label_new (_("Attributes to fetch:")); gtk_widget_set_halign (label, GTK_ALIGN_START); gtk_grid_attach (GTK_GRID (grid), label, 0, 2, 1, 1); label = gtk_label_new (_("Search scope:")); gtk_widget_set_halign (label, GTK_ALIGN_START); gtk_grid_attach (GTK_GRID (grid), label, 0, 3, 1, 1); entry = gtk_entry_new (); gtk_widget_set_hexpand (entry, TRUE); gtk_grid_attach (GTK_GRID (grid), entry, 1, 0, 1, 1); feditor->priv->base_dn = entry; g_signal_connect (entry, "activate", G_CALLBACK (activated_cb), feditor); entry = gtk_entry_new (); gtk_widget_set_hexpand (entry, TRUE); gtk_grid_attach (GTK_GRID (grid), entry, 1, 1, 1, 1); feditor->priv->filter = entry; g_signal_connect (entry, "activate", G_CALLBACK (activated_cb), feditor); entry = gtk_entry_new (); gtk_widget_set_hexpand (entry, TRUE); gtk_grid_attach (GTK_GRID (grid), entry, 1, 2, 1, 1); feditor->priv->attributes = entry; g_signal_connect (entry, "activate", G_CALLBACK (activated_cb), feditor); model = gda_data_model_array_new_with_g_types (2, G_TYPE_INT, G_TYPE_STRING); g_value_set_string ((v1 = gda_value_new (G_TYPE_STRING)), "Base (search the base DN only)"); values = g_list_prepend (NULL, v1); g_value_set_int ((v2 = gda_value_new (G_TYPE_INT)), GDA_LDAP_SEARCH_BASE); values = g_list_prepend (values, v2); g_assert (gda_data_model_append_values (model, values, NULL) >= 0); gda_value_free (v1); gda_value_free (v2); g_value_set_string ((v1 = gda_value_new (G_TYPE_STRING)), "Onelevel (search immediate children of base DN only)"); values = g_list_prepend (NULL, v1); g_value_set_int ((v2 = gda_value_new (G_TYPE_INT)), GDA_LDAP_SEARCH_ONELEVEL); values = g_list_prepend (values, v2); g_assert (gda_data_model_append_values (model, values, NULL) >= 0); gda_value_free (v1); gda_value_free (v2); g_value_set_string ((v1 = gda_value_new (G_TYPE_STRING)), "Subtree (search of the base DN and the entire subtree below)"); values = g_list_prepend (NULL, v1); g_value_set_int ((v2 = gda_value_new (G_TYPE_INT)), GDA_LDAP_SEARCH_SUBTREE); values = g_list_prepend (values, v2); g_assert (gda_data_model_append_values (model, values, NULL) >= 0); gda_value_free (v1); gda_value_free (v2); gint cols[] = {1}; entry = gdaui_combo_new_with_model (model, 1, cols); gtk_widget_set_hexpand (entry, TRUE); g_object_unref (model); gtk_grid_attach (GTK_GRID (grid), entry, 1, 3, 1, 1); feditor->priv->scope = entry; filter_editor_clear (feditor); gtk_widget_show_all (grid); return (GtkWidget*) feditor; }
/** * 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; }