/** * Whenever the current page is changed, if an invoice page is * the current page, set focus on the sheet or notes field. */ static void gnc_plugin_page_invoice_main_window_page_changed (GncMainWindow *window, GncPluginPage *plugin_page, gpointer user_data) { // We continue only if the plugin_page is a valid if (!plugin_page || !GNC_IS_PLUGIN_PAGE(plugin_page)) return; if (gnc_main_window_get_current_page (window) == plugin_page) { GncPluginPageInvoice *page; GncPluginPageInvoicePrivate *priv; if (!GNC_IS_PLUGIN_PAGE_INVOICE(plugin_page)) return; page = GNC_PLUGIN_PAGE_INVOICE(plugin_page); priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(page); // The page changed signal is emitted multiple times so we need // to use an idle_add to change the focus to the sheet g_idle_remove_by_data (priv->iw); g_idle_add ((GSourceFunc)gnc_plugin_page_invoice_focus, priv->iw); } }
static void gnc_plugin_page_invoice_summarybar_position_changed(GConfEntry *entry, gpointer user_data) { GncPluginPage *plugin_page; GncPluginPageInvoice *page; GncPluginPageInvoicePrivate *priv; GtkPositionType position = GTK_POS_BOTTOM; gchar *conf_string; g_return_if_fail(user_data != NULL); plugin_page = GNC_PLUGIN_PAGE(user_data); page = GNC_PLUGIN_PAGE_INVOICE (user_data); priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(page); conf_string = gnc_gconf_get_string (GCONF_GENERAL, KEY_SUMMARYBAR_POSITION, NULL); if (conf_string) { position = gnc_enum_from_nick (GTK_TYPE_POSITION_TYPE, conf_string, GTK_POS_BOTTOM); g_free (conf_string); } gtk_box_reorder_child(GTK_BOX(priv->widget), plugin_page->summarybar, (position == GTK_POS_TOP ? 0 : -1) ); }
static void gnc_plugin_page_invoice_destroy_widget (GncPluginPage *plugin_page) { GncPluginPageInvoice *page; GncPluginPageInvoicePrivate *priv; ENTER("page %p", plugin_page); page = GNC_PLUGIN_PAGE_INVOICE (plugin_page); priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(page); gnc_gconf_general_remove_cb(KEY_SUMMARYBAR_POSITION, gnc_plugin_page_invoice_summarybar_position_changed, page); if (priv->widget == NULL) { LEAVE(""); return; } if (priv->component_manager_id) { gnc_unregister_gui_component(priv->component_manager_id); priv->component_manager_id = 0; } gtk_widget_hide(priv->widget); gnc_invoice_window_destroy_cb(priv->widget, priv->iw); priv->widget = NULL; LEAVE(""); }
static void gnc_plugin_page_invoice_window_changed (GncPluginPage *plugin_page, GtkWidget *window) { GncPluginPageInvoice *page; GncPluginPageInvoicePrivate *priv; g_return_if_fail (GNC_IS_PLUGIN_PAGE_INVOICE (plugin_page)); page = GNC_PLUGIN_PAGE_INVOICE(plugin_page); priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(page); gnc_invoice_window_changed (priv->iw, window); }
void gnc_plugin_page_invoice_update_title (GncPluginPage *plugin_page) { GncPluginPageInvoice *page; GncPluginPageInvoicePrivate *priv; gchar *title; g_return_if_fail(GNC_IS_PLUGIN_PAGE_INVOICE(plugin_page)); page = GNC_PLUGIN_PAGE_INVOICE(plugin_page); priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(page); title = gnc_invoice_get_title(priv->iw); main_window_update_page_name(plugin_page, title); g_free(title); }
static GtkWidget * gnc_plugin_page_invoice_create_widget (GncPluginPage *plugin_page) { GncPluginPageInvoice *page; GncPluginPageInvoicePrivate *priv; GtkWidget *regWidget, *widget; ENTER("page %p", plugin_page); page = GNC_PLUGIN_PAGE_INVOICE (plugin_page); priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(page); if (priv->widget != NULL) { LEAVE(""); return priv->widget; } priv->widget = gtk_vbox_new (FALSE, 0); gtk_widget_show (priv->widget); widget = gnc_invoice_create_page(priv->iw, page); gtk_widget_show (widget); gtk_box_pack_start(GTK_BOX (priv->widget), widget, TRUE, TRUE, 0); plugin_page->summarybar = gnc_invoice_window_create_summary_bar(priv->iw); gtk_box_pack_start(GTK_BOX (priv->widget), plugin_page->summarybar, FALSE, FALSE, 0); gnc_plugin_page_invoice_summarybar_position_changed(NULL, page); gnc_gconf_general_register_cb(KEY_SUMMARYBAR_POSITION, gnc_plugin_page_invoice_summarybar_position_changed, page); regWidget = gnc_invoice_get_register(priv->iw); if (regWidget) { g_signal_connect (G_OBJECT (regWidget), "redraw-help", G_CALLBACK (gnc_plugin_page_redraw_help_cb), page); } priv->component_manager_id = gnc_register_gui_component(GNC_PLUGIN_PAGE_INVOICE_NAME, gnc_plugin_page_invoice_refresh_cb, NULL, page); LEAVE(""); return priv->widget; }
static void gnc_plugin_page_invoice_summarybar_position_changed(gpointer prefs, gchar *pref, gpointer user_data) { GncPluginPage *plugin_page; GncPluginPageInvoice *page; GncPluginPageInvoicePrivate *priv; GtkPositionType position = GTK_POS_BOTTOM; g_return_if_fail(user_data != NULL); plugin_page = GNC_PLUGIN_PAGE(user_data); page = GNC_PLUGIN_PAGE_INVOICE (user_data); priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(page); if (gnc_prefs_get_bool (GNC_PREFS_GROUP_GENERAL, GNC_PREF_SUMMARYBAR_POSITION_TOP)) position = GTK_POS_TOP; gtk_box_reorder_child(GTK_BOX(priv->widget), plugin_page->summarybar, (position == GTK_POS_TOP ? 0 : -1) ); }
/** Save enough information about this invoice page that it can be * recreated next time the user starts gnucash. * * @param page The page to save. * * @param key_file A pointer to the GKeyFile data structure where the * page information should be written. * * @param group_name The group name to use when saving data. */ static void gnc_plugin_page_invoice_save_page (GncPluginPage *plugin_page, GKeyFile *key_file, const gchar *group_name) { GncPluginPageInvoice *invoice; GncPluginPageInvoicePrivate *priv; g_return_if_fail (GNC_IS_PLUGIN_PAGE_INVOICE(plugin_page)); g_return_if_fail (key_file != NULL); g_return_if_fail (group_name != NULL); ENTER("page %p, key_file %p, group_name %s", plugin_page, key_file, group_name); invoice = GNC_PLUGIN_PAGE_INVOICE(plugin_page); priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(invoice); gnc_invoice_save_page(priv->iw, key_file, group_name); LEAVE(" "); }
static void gnc_plugin_page_invoice_destroy_widget (GncPluginPage *plugin_page) { GncPluginPageInvoice *page; GncPluginPageInvoicePrivate *priv; ENTER("page %p", plugin_page); page = GNC_PLUGIN_PAGE_INVOICE (plugin_page); priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(page); gnc_prefs_remove_cb_by_func (GNC_PREFS_GROUP_GENERAL, GNC_PREF_SUMMARYBAR_POSITION_TOP, gnc_plugin_page_invoice_summarybar_position_changed, page); gnc_prefs_remove_cb_by_func (GNC_PREFS_GROUP_GENERAL, GNC_PREF_SUMMARYBAR_POSITION_BOTTOM, gnc_plugin_page_invoice_summarybar_position_changed, page); // Remove the page focus idle function if present g_idle_remove_by_data (priv->iw); if (priv->widget == NULL) { LEAVE(""); return; } if (priv->component_manager_id) { gnc_unregister_gui_component(priv->component_manager_id); priv->component_manager_id = 0; } gtk_widget_hide(priv->widget); gnc_invoice_window_destroy_cb(priv->widget, priv->iw); priv->widget = NULL; LEAVE(""); }
static GtkWidget * gnc_plugin_page_invoice_create_widget (GncPluginPage *plugin_page) { GncPluginPageInvoice *page; GncPluginPageInvoicePrivate *priv; GtkWidget *regWidget, *widget; GncMainWindow *window; ENTER("page %p", plugin_page); page = GNC_PLUGIN_PAGE_INVOICE (plugin_page); priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(page); if (priv->widget != NULL) { LEAVE(""); return priv->widget; } priv->widget = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_box_set_homogeneous (GTK_BOX (priv->widget), FALSE); // Set the style context for this page so it can be easily manipulated with css gnc_widget_set_style_context (GTK_WIDGET(priv->widget), "GncInvoicePage"); gtk_widget_show (priv->widget); widget = gnc_invoice_create_page(priv->iw, page); gtk_widget_show (widget); gtk_box_pack_start(GTK_BOX (priv->widget), widget, TRUE, TRUE, 0); plugin_page->summarybar = gnc_invoice_window_create_summary_bar(priv->iw); gtk_box_pack_start(GTK_BOX (priv->widget), plugin_page->summarybar, FALSE, FALSE, 0); gnc_plugin_page_invoice_summarybar_position_changed(NULL, NULL, page); gnc_prefs_register_cb (GNC_PREFS_GROUP_GENERAL, GNC_PREF_SUMMARYBAR_POSITION_TOP, gnc_plugin_page_invoice_summarybar_position_changed, page); gnc_prefs_register_cb (GNC_PREFS_GROUP_GENERAL, GNC_PREF_SUMMARYBAR_POSITION_BOTTOM, gnc_plugin_page_invoice_summarybar_position_changed, page); regWidget = gnc_invoice_get_register(priv->iw); if (regWidget) { g_signal_connect (G_OBJECT (regWidget), "redraw-help", G_CALLBACK (gnc_plugin_page_redraw_help_cb), page); } priv->component_manager_id = gnc_register_gui_component(GNC_PLUGIN_PAGE_INVOICE_NAME, gnc_plugin_page_invoice_refresh_cb, NULL, page); window = GNC_MAIN_WINDOW(GNC_PLUGIN_PAGE(plugin_page)->window); g_signal_connect(window, "page_changed", G_CALLBACK(gnc_plugin_page_invoice_main_window_page_changed), plugin_page); LEAVE(""); return priv->widget; }