static void notebook_remove_page_cb (GtkNotebook *nb, GtkWidget *page, gint pagenb, BrowserPerspective *bpers) { if (customization_data_exists (G_OBJECT (bpers))) { gint current_index; GtkWidget *current_page = NULL; current_index = gtk_notebook_get_current_page (nb); if (current_index >= 0) current_page = gtk_notebook_get_nth_page (nb, current_index); g_print ("\tNotebook, removing page %d, current page is now %d\n", pagenb, current_index); /* REM: we need to uncustomize _both_ the removed page and the new page, and customize * again the new page to avoid discrepancies */ if (current_page && IS_BROWSER_PAGE (current_page)) browser_page_uncustomize (BROWSER_PAGE (current_page)); if (page && IS_BROWSER_PAGE (page)) browser_page_uncustomize (BROWSER_PAGE (page)); if (current_page && IS_BROWSER_PAGE (current_page)) browser_page_customize (BROWSER_PAGE (current_page), customization_data_get_toolbar (G_OBJECT (bpers)), customization_data_get_header_bar (G_OBJECT (bpers))); } }
/** * schema_browser_perspective_display_diagram * */ void schema_browser_perspective_display_diagram (SchemaBrowserPerspective *bpers, gint fav_id) { GtkWidget *diagram = NULL; if (fav_id >= 0) { gint ntabs, i; ntabs = gtk_notebook_get_n_pages (GTK_NOTEBOOK (bpers->priv->notebook)); for (i = 0; i < ntabs; i++) { GtkWidget *child; child = gtk_notebook_get_nth_page (GTK_NOTEBOOK (bpers->priv->notebook), i); if (IS_RELATIONS_DIAGRAM (child)) { if (relations_diagram_get_fav_id (RELATIONS_DIAGRAM (child)) == fav_id) { gtk_notebook_set_current_page (GTK_NOTEBOOK (bpers->priv->notebook), i); return; } } } GError *error = NULL; diagram = relations_diagram_new_with_fav_id (browser_window_get_connection (bpers->priv->bwin), fav_id, &error); if (! diagram) { ui_show_error ((GtkWindow*) gtk_widget_get_toplevel ((GtkWidget*) bpers), error && error->message ? error->message : _("Could not load diagram")); g_clear_error (&error); } } else diagram = relations_diagram_new (browser_window_get_connection (bpers->priv->bwin)); if (diagram) { GtkWidget *close_btn; GtkWidget *tab_label; gint i; tab_label = browser_page_get_tab_label (BROWSER_PAGE (diagram), &close_btn); i = gtk_notebook_append_page (GTK_NOTEBOOK (bpers->priv->notebook), diagram, tab_label); g_signal_connect (close_btn, "clicked", G_CALLBACK (close_button_clicked_cb), diagram); gtk_widget_show (diagram); tab_label = browser_page_get_tab_label (BROWSER_PAGE (diagram), NULL); gtk_notebook_set_menu_label (GTK_NOTEBOOK (bpers->priv->notebook), diagram, tab_label); gtk_notebook_set_current_page (GTK_NOTEBOOK (bpers->priv->notebook), i); gtk_notebook_set_tab_reorderable (GTK_NOTEBOOK (bpers->priv->notebook), diagram, TRUE); gtk_notebook_set_tab_detachable (GTK_NOTEBOOK (bpers->priv->notebook), diagram, TRUE); } }
/** * browser_perspective_uncustomize: * @perspective: an object implementing the #BrowserPerspective interface * * Remove any optional custom UI elements which have been added * when browser_perspective_customize() was called. */ void browser_perspective_uncustomize (BrowserPerspective *perspective) { g_return_if_fail (IS_BROWSER_PERSPECTIVE (perspective)); /* Current BrowserPage */ GtkNotebook *nb; nb = (GtkNotebook*) browser_perspective_get_notebook (perspective); if (nb) { gint current_index; current_index = gtk_notebook_get_current_page (nb); if (current_index >= 0) { GtkWidget *current_page; current_page = gtk_notebook_get_nth_page (nb, current_index); if (current_page && IS_BROWSER_PAGE (current_page)) browser_page_uncustomize (BROWSER_PAGE (current_page)); } } if (BROWSER_PERSPECTIVE_GET_CLASS (perspective)->i_uncustomize) (BROWSER_PERSPECTIVE_GET_CLASS (perspective)->i_uncustomize) (perspective); else { g_print ("Default browser_perspective_uncustomize for %s\n", G_OBJECT_CLASS_NAME (G_OBJECT_GET_CLASS (perspective))); if (customization_data_exists (G_OBJECT (perspective))) customization_data_release (G_OBJECT (perspective)); } }
/** * schema_browser_perspective_display_table_info * * Display (and create if necessary) a new page for the table's properties */ void schema_browser_perspective_display_table_info (SchemaBrowserPerspective *bpers, const gchar *table_schema, const gchar *table_name, G_GNUC_UNUSED const gchar *table_short_name) { g_return_if_fail (IS_SCHEMA_BROWSER_PERSPECTIVE (bpers)); gint ntabs, i; ntabs = gtk_notebook_get_n_pages (GTK_NOTEBOOK (bpers->priv->notebook)); for (i = 0; i < ntabs; i++) { GtkWidget *child; child = gtk_notebook_get_nth_page (GTK_NOTEBOOK (bpers->priv->notebook), i); if (IS_TABLE_INFO (child)) { if (!strcmp (table_schema, table_info_get_table_schema (TABLE_INFO (child))) && !strcmp (table_name, table_info_get_table_name (TABLE_INFO (child)))) { gtk_notebook_set_current_page (GTK_NOTEBOOK (bpers->priv->notebook), i); return; } } } GtkWidget *ti; ti = table_info_new (browser_window_get_connection (bpers->priv->bwin), table_schema, table_name); if (ti) { GtkWidget *close_btn; GtkWidget *tab_label; gint i; tab_label = browser_page_get_tab_label (BROWSER_PAGE (ti), &close_btn); i = gtk_notebook_append_page (GTK_NOTEBOOK (bpers->priv->notebook), ti, tab_label); g_signal_connect (close_btn, "clicked", G_CALLBACK (close_button_clicked_cb), ti); gtk_widget_show (ti); tab_label = browser_page_get_tab_label (BROWSER_PAGE (ti), NULL); gtk_notebook_set_menu_label (GTK_NOTEBOOK (bpers->priv->notebook), ti, tab_label); gtk_notebook_set_current_page (GTK_NOTEBOOK (bpers->priv->notebook), i); gtk_notebook_set_tab_reorderable (GTK_NOTEBOOK (bpers->priv->notebook), ti, TRUE); gtk_notebook_set_tab_detachable (GTK_NOTEBOOK (bpers->priv->notebook), ti, TRUE); } }
static void notebook_switch_page_cb (GtkNotebook *nb, GtkWidget *page, gint pagenb, BrowserPerspective *bpers) { if (customization_data_exists (G_OBJECT (bpers))) { gint current_index; current_index = gtk_notebook_get_current_page (nb); g_print ("\tNotebook, current page %d switching to %d\n", current_index, pagenb); if (current_index >= 0) { GtkWidget *current_page; current_page = gtk_notebook_get_nth_page (nb, current_index); if (current_page && IS_BROWSER_PAGE (current_page)) browser_page_uncustomize (BROWSER_PAGE (current_page)); } if (pagenb >= 0) { GtkWidget *next_page; next_page = gtk_notebook_get_nth_page (nb, pagenb); if (next_page && IS_BROWSER_PAGE (next_page)) browser_page_customize (BROWSER_PAGE (next_page), customization_data_get_toolbar (G_OBJECT (bpers)), customization_data_get_header_bar (G_OBJECT (bpers))); } } }
/** * browser_perspective_customize: * @perspective: an object implementing the #BrowserPerspective interface * @toolbar: (allow-none): * @header: (allow-none): * * Add optional custom UI elements to @toolbar, @header and @menu. any call to the * browser_perspective_uncustomize() function will undo all the customizations to * these elements */ void browser_perspective_customize (BrowserPerspective *perspective, GtkToolbar *toolbar, GtkHeaderBar *header) { g_return_if_fail (IS_BROWSER_PERSPECTIVE (perspective)); if (BROWSER_PERSPECTIVE_GET_CLASS (perspective)->i_customize) (BROWSER_PERSPECTIVE_GET_CLASS (perspective)->i_customize) (perspective, toolbar, header); /* Current BrowserPage */ GtkNotebook *nb; nb = (GtkNotebook*) browser_perspective_get_notebook (perspective); if (nb) { gint current_index; current_index = gtk_notebook_get_current_page (nb); if (current_index >= 0) { GtkWidget *current_page; current_page = gtk_notebook_get_nth_page (nb, current_index); if (current_page && IS_BROWSER_PAGE (current_page)) browser_page_customize (BROWSER_PAGE (current_page), toolbar, header); } } }