/** * 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; }
/** * 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; }
static void gdaui_bar_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { GdauiBar *bar = GDAUI_BAR (object); switch (prop_id) { case PROP_TEXT: g_value_set_string (value, gdaui_bar_get_text (bar)); break; case PROP_SHOW_ICON: g_value_set_boolean (value, gdaui_bar_get_show_icon (bar)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
/** * 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; }
GtkWidget * provider_config_new (void) { ProviderConfigPrivate *priv; GtkWidget *provider; GtkWidget *box; GtkWidget *image; GtkWidget *label; GtkWidget *sw; gchar *title; GdaDataModel *model; priv = g_new0 (ProviderConfigPrivate, 1); provider = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_widget_show (provider); gtk_container_set_border_width (GTK_CONTAINER (provider), 6); g_object_set_data_full (G_OBJECT (provider), PROVIDER_CONFIG_DATA, priv, (GDestroyNotify) g_free); /* title */ title = g_strdup_printf ("<b>%s</b>\n%s", _("Providers"), _("Installed providers")); priv->title = gdaui_bar_new (title); g_free (title); gchar *path; path = gda_gbr_get_file_path (GDA_DATA_DIR, LIBGDA_ABI_NAME, "pixmaps", "gdaui-generic.png", NULL); gdaui_bar_set_icon_from_file (GDAUI_BAR (priv->title), path); g_free (path); gtk_box_pack_start (GTK_BOX (provider), priv->title, FALSE, FALSE, 0); gtk_widget_show (priv->title); /* create the provider list */ sw = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_box_pack_start (GTK_BOX (provider), sw, TRUE, TRUE, 0); model = gda_config_list_providers (); priv->provider_list = gdaui_raw_grid_new (model); g_object_unref (model); gdaui_data_proxy_column_set_editable (GDAUI_DATA_PROXY (priv->provider_list), 0, FALSE); gdaui_data_selector_set_column_visible (GDAUI_DATA_SELECTOR (priv->provider_list), 2, FALSE); g_object_set (G_OBJECT (priv->provider_list), "info-cell-visible", FALSE, NULL); gtk_container_add (GTK_CONTAINER (sw), priv->provider_list); gtk_widget_show_all (sw); /* add tip */ box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); gtk_widget_show (box); gtk_container_set_border_width (GTK_CONTAINER (box), 6); gtk_box_pack_start (GTK_BOX (provider), box, FALSE, FALSE, 0); image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_INFO, GTK_ICON_SIZE_DIALOG); gtk_widget_show (image); gtk_box_pack_start (GTK_BOX (box), image, FALSE, FALSE, 0); label = gtk_label_new (_("Providers are addons that actually implement the access " "to each database using the means provided by each database vendor.")); gtk_widget_show (label); gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); gtk_box_pack_start (GTK_BOX (box), label, TRUE, FALSE, 0); return provider; }
GtkWidget * dsn_config_new (void) { DsnConfigPrivate *priv; GtkWidget *dsn; GtkWidget *label; GtkWidget *sw; gchar *title; GdaDataModel *model; priv = g_new0 (DsnConfigPrivate, 1); dsn = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); gtk_widget_show (dsn); gtk_container_set_border_width (GTK_CONTAINER (dsn), 6); g_object_set_data_full (G_OBJECT (dsn), DSN_CONFIG_DATA, priv, (GDestroyNotify) free_private_data); /* title */ title = g_strdup_printf ("<b>%s</b>\n%s", _("Data Sources"), _("Data sources are the means by which database " "connections are identified: all " "the information needed to open a connection to " "a specific database using a 'provider' is referenced using " "a unique name.")); priv->title = gdaui_bar_new (title); g_free (title); gdaui_bar_set_icon_from_resource (GDAUI_BAR (priv->title), "/images/gdaui-generic.png"); gtk_box_pack_start (GTK_BOX (dsn), priv->title, FALSE, FALSE, 0); gtk_widget_show (priv->title); /* horizontal box for the provider list and its properties */ GtkWidget *hbox; hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start (GTK_BOX (dsn), hbox, TRUE, TRUE, 0); /* left part */ GtkWidget *vbox; vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_widget_set_size_request (vbox, 150, -1); gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0); /* create the data source list */ sw = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_IN); gtk_box_pack_start (GTK_BOX (vbox), sw, TRUE, TRUE, 0); model = gda_config_list_dsn (); priv->dsn_list = gdaui_raw_grid_new (model); gtk_tree_view_move_column_after (GTK_TREE_VIEW (priv->dsn_list), gtk_tree_view_get_column (GTK_TREE_VIEW (priv->dsn_list), 1), gtk_tree_view_get_column (GTK_TREE_VIEW (priv->dsn_list), 2)); g_object_unref (model); g_object_set_data (G_OBJECT (dsn), "grid", priv->dsn_list); gdaui_data_proxy_column_set_editable (GDAUI_DATA_PROXY (priv->dsn_list), 0, FALSE); gdaui_data_selector_set_column_visible (GDAUI_DATA_SELECTOR (priv->dsn_list), -1, FALSE); gdaui_data_selector_set_column_visible (GDAUI_DATA_SELECTOR (priv->dsn_list), 0, TRUE); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (priv->dsn_list), FALSE); g_object_set (priv->dsn_list, "info-cell-visible", FALSE, NULL); gtk_container_add (GTK_CONTAINER (sw), priv->dsn_list); g_signal_connect (priv->dsn_list, "selection-changed", G_CALLBACK (list_selection_changed_cb), dsn); g_signal_connect (priv->dsn_list, "populate-popup", G_CALLBACK (list_popup_cb), dsn); /* add/delete buttons */ GtkWidget *toolbar; toolbar = gtk_toolbar_new (); gtk_toolbar_set_icon_size (GTK_TOOLBAR (toolbar), GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_style_context_add_class (gtk_widget_get_style_context (toolbar), "inline-toolbar"); gtk_box_pack_start (GTK_BOX (vbox), toolbar, FALSE, FALSE, 0); GtkToolItem *titem; titem = gtk_tool_button_new (NULL, NULL); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (titem), "list-add-symbolic"); gtk_actionable_set_action_name (GTK_ACTIONABLE (titem), "win.DatasourceNew"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), titem, -1); titem = gtk_tool_button_new (NULL, NULL); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (titem), "list-remove-symbolic"); gtk_actionable_set_action_name (GTK_ACTIONABLE (titem), "win.DatasourceDelete"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), titem, -1); /* create the data source's properties */ GtkWidget *stack; stack = gtk_stack_new (); priv->stack = stack; gtk_box_pack_start (GTK_BOX (hbox), stack, TRUE, TRUE, 10); label = gtk_label_new (_("No data source selected.")); gtk_stack_add_named (GTK_STACK (stack), label, ST_NOPROP); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_stack_add_named (GTK_STACK (stack), vbox, ST_PROP); GtkWidget *form; form = gdaui_dsn_editor_new (); priv->dsn_editor = GDAUI_DSN_EDITOR (form); gtk_box_pack_start (GTK_BOX (vbox), form, TRUE, TRUE, 0); g_signal_connect (priv->dsn_editor, "changed", G_CALLBACK (dsn_editor_changed_cb), dsn); /* action buttons */ GtkWidget *hbox2; hbox2 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); gtk_box_pack_start (GTK_BOX (vbox), hbox2, FALSE, FALSE, 6); GtkWidget *bbox; bbox = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL); gtk_widget_set_hexpand (bbox, TRUE); gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_CENTER); gtk_box_pack_start (GTK_BOX (hbox2), bbox, FALSE, FALSE, 6); GtkWidget *button; button = gtk_toggle_button_new_with_label (_("Definition")); gtk_box_pack_start (GTK_BOX (bbox), button, FALSE, FALSE, 0); priv->view_buttons [GDAUI_DSN_EDITOR_PANE_DEFINITION] = GTK_TOGGLE_BUTTON (button); g_signal_connect (button, "toggled", G_CALLBACK (view_toggled_cb), dsn); button = gtk_toggle_button_new_with_label (_("Parameters")); gtk_box_pack_start (GTK_BOX (bbox), button, FALSE, FALSE, 0); priv->view_buttons [GDAUI_DSN_EDITOR_PANE_PARAMS] = GTK_TOGGLE_BUTTON (button); g_signal_connect (button, "toggled", G_CALLBACK (view_toggled_cb), dsn); button = gtk_toggle_button_new_with_label (_("Authentication")); gtk_box_pack_start (GTK_BOX (bbox), button, FALSE, FALSE, 0); priv->view_buttons [GDAUI_DSN_EDITOR_PANE_AUTH] = GTK_TOGGLE_BUTTON (button); g_signal_connect (button, "toggled", G_CALLBACK (view_toggled_cb), dsn); button = gtk_button_new_from_icon_name ("document-save-symbolic", GTK_ICON_SIZE_BUTTON); gtk_box_pack_start (GTK_BOX (hbox2), button, FALSE, FALSE, 0); priv->commit_button = button; gtk_widget_set_sensitive (button, FALSE); gtk_widget_set_tooltip_text (button, _("Write changes made to the DSN")); g_signal_connect (button, "clicked", G_CALLBACK (save_cb), dsn); gtk_widget_show_all (hbox); return dsn; }
/** * favorite_selector_new * * Returns: a new #GtkWidget */ GtkWidget * favorite_selector_new (BrowserConnection *bcnc) { FavoriteSelector *tsel; GdaTreeManager *manager; g_return_val_if_fail (BROWSER_IS_CONNECTION (bcnc), NULL); tsel = FAVORITE_SELECTOR (g_object_new (FAVORITE_SELECTOR_TYPE, NULL)); tsel->priv->bcnc = g_object_ref (bcnc); g_signal_connect (browser_connection_get_favorites (tsel->priv->bcnc), "favorites-changed", G_CALLBACK (favorites_changed_cb), tsel); /* create tree managers */ tsel->priv->tree = gda_tree_new (); manager = mgr_favorites_new (bcnc, GDA_TOOLS_FAVORITES_TABLES | GDA_TOOLS_FAVORITES_DIAGRAMS, ORDER_KEY_SCHEMA); gda_tree_add_manager (tsel->priv->tree, manager); g_object_unref (manager); /* update the tree's contents */ 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_pixbuf (GDAUI_BAR (label), browser_get_pixbuf_icon (BROWSER_ICON_BOOKMARK)); 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, 5, G_TYPE_STRING, "markup", 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); treeview = browser_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); /* text */ renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_add_attribute (column, renderer, "markup", COLUMN_MARKUP); gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column); /* 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); /* 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; }
/** * 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; }