GncPluginPage * gnc_plugin_page_invoice_new (InvoiceWindow *iw) { GncPluginPageInvoicePrivate *priv; GncPluginPageInvoice *invoice_page; GncPluginPage *plugin_page; const GList *item; /* Is there an existing page? */ item = gnc_gobject_tracking_get_list(GNC_PLUGIN_PAGE_INVOICE_NAME); for ( ; item; item = g_list_next(item)) { invoice_page = (GncPluginPageInvoice *)item->data; priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(invoice_page); if (priv->iw == iw) return GNC_PLUGIN_PAGE(invoice_page); } invoice_page = g_object_new (GNC_TYPE_PLUGIN_PAGE_INVOICE, (char *)NULL); priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(invoice_page); priv->iw = iw; plugin_page = GNC_PLUGIN_PAGE(invoice_page); gnc_plugin_page_invoice_update_title(plugin_page); gnc_plugin_page_set_uri(plugin_page, "default:"); priv->component_manager_id = 0; return plugin_page; }
/** * 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_cmd_entryDown (GtkAction *action, GncPluginPageInvoice *plugin_page) { GncPluginPageInvoicePrivate *priv; g_return_if_fail(GNC_IS_PLUGIN_PAGE_INVOICE(plugin_page)); ENTER("(action %p, plugin_page %p)", action, plugin_page); priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(plugin_page); gnc_invoice_window_entryDownCB(NULL, priv->iw); 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); }
static void gnc_plugin_page_invoice_cmd_company_report (GtkAction *action, GncPluginPageInvoice *plugin_page) { GncPluginPageInvoicePrivate *priv; GtkWindow *parent; g_return_if_fail(GNC_IS_PLUGIN_PAGE_INVOICE(plugin_page)); ENTER("(action %p, plugin_page %p)", action, plugin_page); priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(plugin_page); parent = GTK_WINDOW (gnc_plugin_page_get_window (GNC_PLUGIN_PAGE (plugin_page))); gnc_invoice_window_report_owner_cb (parent, priv->iw); LEAVE(" "); }
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 void gnc_plugin_page_invoice_refresh_cb (GHashTable *changes, gpointer user_data) { GncPluginPageInvoice *page = user_data; GncPluginPageInvoicePrivate *priv; GtkWidget *reg; g_return_if_fail(GNC_IS_PLUGIN_PAGE_INVOICE(page)); /* We're only looking for forced updates here. */ if (changes) return; priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(page); reg = gnc_invoice_get_register(priv->iw); gnucash_register_refresh_from_prefs(GNUCASH_REGISTER(reg)); gtk_widget_queue_draw(priv->widget); }
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_redraw_help_cb (GnucashRegister *g_reg, GncPluginPageInvoice *invoice_page) { GncPluginPageInvoicePrivate *priv; GncWindow *window; const char *status; char *help; g_return_if_fail(GNC_IS_PLUGIN_PAGE_INVOICE(invoice_page)); window = GNC_WINDOW(GNC_PLUGIN_PAGE(invoice_page)->window); /* Get the text from the ledger */ priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(invoice_page); help = gnc_invoice_get_help(priv->iw); status = help ? help : g_strdup(""); gnc_window_set_status(window, GNC_PLUGIN_PAGE(invoice_page), status); g_free(help); }
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 void gnc_plugin_page_invoice_cmd_sort_changed (GtkAction *action, GtkRadioAction *current, GncPluginPageInvoice *plugin_page) { GncPluginPageInvoicePrivate *priv; invoice_sort_type_t value; ENTER("(action %p, radio action %p, plugin_page %p)", action, current, plugin_page); LEAVE("g_return testing..."); g_return_if_fail(GTK_IS_ACTION(action)); g_return_if_fail(GTK_IS_RADIO_ACTION(current)); g_return_if_fail(GNC_IS_PLUGIN_PAGE_INVOICE(plugin_page)); ENTER("...passed (action %p, radio action %p, plugin_page %p)", action, current, plugin_page); priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(plugin_page); value = gtk_radio_action_get_current_value(current); gnc_invoice_window_sort (priv->iw, value); 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; }