00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "config.h"
00025
00026 #include <gtk/gtk.h>
00027 #include <glib/gi18n.h>
00028
00029 #include "gnc-plugin.h"
00030 #include "dialog-invoice.h"
00031 #include "gnc-plugin-page-invoice.h"
00032
00033 #include "dialog-account.h"
00034 #include "gnc-component-manager.h"
00035 #include "gnc-gconf-utils.h"
00036 #include "gnc-gobject-utils.h"
00037 #include "gnc-gnome-utils.h"
00038 #include "gnc-icons.h"
00039 #include "gnucash-sheet.h"
00040 #include "gnc-ui-util.h"
00041 #include "gnc-window.h"
00042
00043
00044 static QofLogModule log_module = GNC_MOD_GUI;
00045
00046 static void gnc_plugin_page_invoice_class_init (GncPluginPageInvoiceClass *klass);
00047 static void gnc_plugin_page_invoice_init (GncPluginPageInvoice *plugin_page);
00048 static void gnc_plugin_page_invoice_finalize (GObject *object);
00049
00050 static GtkWidget *gnc_plugin_page_invoice_create_widget (GncPluginPage *plugin_page);
00051 static void gnc_plugin_page_invoice_destroy_widget (GncPluginPage *plugin_page);
00052 static void gnc_plugin_page_invoice_save_page (GncPluginPage *plugin_page, GKeyFile *file, const gchar *group);
00053 static GncPluginPage *gnc_plugin_page_invoice_recreate_page (GtkWidget *window, GKeyFile *file, const gchar *group);
00054 static void gnc_plugin_page_invoice_window_changed (GncPluginPage *plugin_page, GtkWidget *window);
00055
00056 static void gnc_plugin_page_invoice_summarybar_position_changed(GConfEntry *entry, gpointer user_data);
00057
00058 void gnc_plugin_page_invoice_start_toggle_cb(GtkToggleButton *toggle, gpointer data);
00059 void gnc_plugin_page_invoice_end_toggle_cb(GtkToggleButton *toggle, gpointer data);
00060 void gnc_plugin_page_invoice_today_cb(GtkButton *buttontoggle, gpointer data);
00061
00062
00063 static void gnc_plugin_page_invoice_cmd_new_invoice (GtkAction *action, GncPluginPageInvoice *plugin_page);
00064 static void gnc_plugin_page_invoice_cmd_new_account (GtkAction *action, GncPluginPageInvoice *plugin_page);
00065 static void gnc_plugin_page_invoice_cmd_print (GtkAction *action, GncPluginPageInvoice *plugin_page);
00066 static void gnc_plugin_page_invoice_cmd_cut (GtkAction *action, GncPluginPageInvoice *plugin_page);
00067 static void gnc_plugin_page_invoice_cmd_copy (GtkAction *action, GncPluginPageInvoice *plugin_page);
00068 static void gnc_plugin_page_invoice_cmd_paste (GtkAction *action, GncPluginPageInvoice *plugin_page);
00069 static void gnc_plugin_page_invoice_cmd_edit (GtkAction *action, GncPluginPageInvoice *plugin_page);
00070 static void gnc_plugin_page_invoice_cmd_post (GtkAction *action, GncPluginPageInvoice *plugin_page);
00071 static void gnc_plugin_page_invoice_cmd_unpost (GtkAction *action, GncPluginPageInvoice *plugin_page);
00072
00073 static void gnc_plugin_page_invoice_cmd_sort_changed (GtkAction *action,
00074 GtkRadioAction *current,
00075 GncPluginPageInvoice *plugin_page);
00076
00077 static void gnc_plugin_page_invoice_cmd_enter (GtkAction *action, GncPluginPageInvoice *plugin_page);
00078 static void gnc_plugin_page_invoice_cmd_cancel (GtkAction *action, GncPluginPageInvoice *plugin_page);
00079 static void gnc_plugin_page_invoice_cmd_delete (GtkAction *action, GncPluginPageInvoice *plugin_page);
00080 static void gnc_plugin_page_invoice_cmd_blank (GtkAction *action, GncPluginPageInvoice *plugin_page);
00081 static void gnc_plugin_page_invoice_cmd_duplicate (GtkAction *action, GncPluginPageInvoice *plugin_page);
00082 static void gnc_plugin_page_invoice_cmd_pay_invoice (GtkAction *action, GncPluginPageInvoice *plugin_page);
00083 static void gnc_plugin_page_invoice_cmd_company_report (GtkAction *action, GncPluginPageInvoice *plugin_page);
00084
00085 static void gnc_plugin_page_redraw_help_cb( GnucashRegister *gsr, GncPluginPageInvoice *invoice_page );
00086 static void gnc_plugin_page_invoice_refresh_cb (GHashTable *changes, gpointer user_data);
00087
00088
00089
00090
00091
00092 static GtkActionEntry gnc_plugin_page_invoice_actions [] =
00093 {
00094
00095 { "FakeToplevel", NULL, "", NULL, NULL, NULL },
00096 { "SortOrderAction", NULL, N_("Sort _Order"), NULL, NULL, NULL },
00097
00098
00099 { "FileNewInvoiceAction", GTK_STOCK_NEW, N_("New _Invoice"), "",
00100 N_("Create a new invoice"),
00101 G_CALLBACK (gnc_plugin_page_invoice_cmd_new_invoice) },
00102 { "FileNewAccountAction", GNC_STOCK_NEW_ACCOUNT, N_("New _Account..."), NULL,
00103 N_("Create a new account"),
00104 G_CALLBACK (gnc_plugin_page_invoice_cmd_new_account) },
00105 { "FilePrintAction", GTK_STOCK_PRINT, N_("Print Invoice"), "<control>p",
00106 N_("Make a printable invoice"),
00107 G_CALLBACK (gnc_plugin_page_invoice_cmd_print) },
00108
00109
00110 { "EditCutAction", GTK_STOCK_CUT, N_("_Cut"), NULL,
00111 NULL,
00112 G_CALLBACK (gnc_plugin_page_invoice_cmd_cut) },
00113 { "EditCopyAction", GTK_STOCK_COPY, N_("Copy"), NULL,
00114 NULL,
00115 G_CALLBACK (gnc_plugin_page_invoice_cmd_copy) },
00116 { "EditPasteAction", GTK_STOCK_PASTE, N_("_Paste"), NULL,
00117 NULL,
00118 G_CALLBACK (gnc_plugin_page_invoice_cmd_paste) },
00119 { "EditEditInvoiceAction", GNC_STOCK_INVOICE_EDIT, N_("_Edit Invoice"), NULL,
00120 N_("Edit this invoice"),
00121 G_CALLBACK (gnc_plugin_page_invoice_cmd_edit) },
00122 { "EditPostInvoiceAction", GNC_STOCK_INVOICE_POST, N_("_Post Invoice"), NULL,
00123 N_("Post this Invoice to your Chart of Accounts"),
00124 G_CALLBACK (gnc_plugin_page_invoice_cmd_post) },
00125 { "EditUnpostInvoiceAction", GNC_STOCK_INVOICE_UNPOST, N_("_Unpost Invoice"), NULL,
00126 N_("Unpost this Invoice and make it editable"),
00127 G_CALLBACK (gnc_plugin_page_invoice_cmd_unpost) },
00128
00129
00130 { "RecordEntryAction", GTK_STOCK_ADD, N_("_Enter"), NULL,
00131 N_("Record the current entry"),
00132 G_CALLBACK (gnc_plugin_page_invoice_cmd_enter) },
00133 { "CancelEntryAction", GTK_STOCK_CANCEL, N_("_Cancel"), NULL,
00134 N_("Cancel the current entry"),
00135 G_CALLBACK (gnc_plugin_page_invoice_cmd_cancel) },
00136 { "DeleteEntryAction", GTK_STOCK_DELETE, N_("_Delete"), NULL,
00137 N_("Delete the current entry"),
00138 G_CALLBACK (gnc_plugin_page_invoice_cmd_delete) },
00139 { "BlankEntryAction", GTK_STOCK_GOTO_BOTTOM, N_("_Blank"), NULL,
00140 N_("Move to the blank entry at the bottom of the Invoice"),
00141 G_CALLBACK (gnc_plugin_page_invoice_cmd_blank) },
00142 { "DuplicateEntryAction", GTK_STOCK_COPY, N_("Dup_licate Entry"), NULL,
00143 N_("Make a copy of the current entry"),
00144 G_CALLBACK (gnc_plugin_page_invoice_cmd_duplicate) },
00145
00146
00147 { "ToolsProcessPaymentAction", NULL, N_("_Pay Invoice"), NULL,
00148 N_("Enter a payment for the owner of this Invoice"),
00149 G_CALLBACK (gnc_plugin_page_invoice_cmd_pay_invoice) },
00150
00151
00152 { "ReportsCompanyReportAction", NULL, N_("_Company Report"), NULL,
00153 N_("Open a company report window for the owner of this Invoice"),
00154 G_CALLBACK (gnc_plugin_page_invoice_cmd_company_report) },
00155 };
00156 static guint gnc_plugin_page_invoice_n_actions = G_N_ELEMENTS (gnc_plugin_page_invoice_actions);
00157
00158 static GtkRadioActionEntry radio_entries [] =
00159 {
00160 { "SortStandardAction", NULL, N_("_Standard"), NULL, "Keep normal invoice order", BY_STANDARD },
00161 { "SortDateAction", NULL, N_("_Date"), NULL, "Sort by date", BY_DATE },
00162 { "SortDateEntryAction", NULL, N_("Date of _Entry"), NULL, "Sort by the date of entry", BY_DATE_ENTERED },
00163 { "SortQuantityAction", NULL, N_("_Quantity"), NULL, "Sort by quantity", BY_QTY },
00164 { "SortPriceAction", NULL, N_("_Price"), NULL, "Sort by price", BY_PRICE },
00165 { "SortDescriptionAction", NULL, N_("Descri_ption"), NULL, "Sort by description", BY_DESC },
00166 };
00167 static guint n_radio_entries = G_N_ELEMENTS (radio_entries);
00168
00169 static const gchar *posted_actions[] = {
00170 "FilePrintAction",
00171 NULL
00172 };
00173
00174 static const gchar *unposted_actions[] = {
00175 "EditCutAction",
00176 "EditPasteAction",
00177 "EditEditInvoiceAction",
00178 "EditPostInvoiceAction",
00179 "RecordEntryAction",
00180 "CancelEntryAction",
00181 "DeleteEntryAction",
00182 "DuplicateEntryAction",
00183 "BlankEntryAction",
00184 NULL
00185 };
00186
00187 static const gchar *can_unpost_actions[] = {
00188 "EditUnpostInvoiceAction",
00189 NULL
00190 };
00191
00193 static action_toolbar_labels toolbar_labels[] = {
00194 { "RecordEntryAction", N_("Enter") },
00195 { "CancelEntryAction", N_("Cancel") },
00196 { "DeleteEntryAction", N_("Delete") },
00197 { "DuplicateEntryAction", N_("Duplicate") },
00198 { "BlankEntryAction", N_("Blank") },
00199 { "EditPostInvoiceAction", N_("Post") },
00200 { "EditUnpostInvoiceAction", N_("Unpost") },
00201 { NULL, NULL },
00202 };
00203
00204
00205
00206
00207
00208
00209 typedef struct GncPluginPageInvoicePrivate
00210 {
00211 InvoiceWindow *iw;
00212
00213 GtkWidget *widget;
00214
00215 gint component_manager_id;
00216 } GncPluginPageInvoicePrivate;
00217
00218 #define GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(o) \
00219 (G_TYPE_INSTANCE_GET_PRIVATE ((o), GNC_TYPE_PLUGIN_PAGE_INVOICE, GncPluginPageInvoicePrivate))
00220
00221 static GObjectClass *parent_class = NULL;
00222
00223
00224
00225
00226
00227 GType
00228 gnc_plugin_page_invoice_get_type (void)
00229 {
00230 static GType gnc_plugin_page_invoice_type = 0;
00231
00232 if (gnc_plugin_page_invoice_type == 0) {
00233 static const GTypeInfo our_info = {
00234 sizeof (GncPluginPageInvoiceClass),
00235 NULL,
00236 NULL,
00237 (GClassInitFunc) gnc_plugin_page_invoice_class_init,
00238 NULL,
00239 NULL,
00240 sizeof (GncPluginPageInvoice),
00241 0,
00242 (GInstanceInitFunc) gnc_plugin_page_invoice_init
00243 };
00244
00245 gnc_plugin_page_invoice_type = g_type_register_static (GNC_TYPE_PLUGIN_PAGE,
00246 "GncPluginPageInvoice",
00247 &our_info, 0);
00248 }
00249
00250 return gnc_plugin_page_invoice_type;
00251 }
00252
00253 GncPluginPage *
00254 gnc_plugin_page_invoice_new (InvoiceWindow *iw)
00255 {
00256 GncPluginPageInvoicePrivate *priv;
00257 GncPluginPageInvoice *invoice_page;
00258 GncPluginPage *plugin_page;
00259 const GList *item;
00260
00261
00262 item = gnc_gobject_tracking_get_list(GNC_PLUGIN_PAGE_INVOICE_NAME);
00263 for ( ; item; item = g_list_next(item)) {
00264 invoice_page = (GncPluginPageInvoice *)item->data;
00265 priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(invoice_page);
00266 if (priv->iw == iw)
00267 return GNC_PLUGIN_PAGE(invoice_page);
00268 }
00269
00270 invoice_page = g_object_new (GNC_TYPE_PLUGIN_PAGE_INVOICE, (char *)NULL);
00271 priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(invoice_page);
00272 priv->iw = iw;
00273
00274 plugin_page = GNC_PLUGIN_PAGE(invoice_page);
00275 gnc_plugin_page_invoice_update_title(plugin_page);
00276 gnc_plugin_page_set_uri(plugin_page, "default:");
00277
00278 priv->component_manager_id = 0;
00279 return plugin_page;
00280 }
00281
00282 static void
00283 gnc_plugin_page_invoice_class_init (GncPluginPageInvoiceClass *klass)
00284 {
00285 GObjectClass *object_class = G_OBJECT_CLASS (klass);
00286 GncPluginPageClass *gnc_plugin_class = GNC_PLUGIN_PAGE_CLASS(klass);
00287
00288 parent_class = g_type_class_peek_parent (klass);
00289
00290 object_class->finalize = gnc_plugin_page_invoice_finalize;
00291
00292 gnc_plugin_class->tab_icon = NULL;
00293 gnc_plugin_class->plugin_name = GNC_PLUGIN_PAGE_INVOICE_NAME;
00294 gnc_plugin_class->create_widget = gnc_plugin_page_invoice_create_widget;
00295 gnc_plugin_class->destroy_widget = gnc_plugin_page_invoice_destroy_widget;
00296 gnc_plugin_class->save_page = gnc_plugin_page_invoice_save_page;
00297 gnc_plugin_class->recreate_page = gnc_plugin_page_invoice_recreate_page;
00298 gnc_plugin_class->window_changed = gnc_plugin_page_invoice_window_changed;
00299
00300 g_type_class_add_private(klass, sizeof(GncPluginPageInvoicePrivate));
00301 }
00302
00303 static void
00304 gnc_plugin_page_invoice_init (GncPluginPageInvoice *plugin_page)
00305 {
00306 GncPluginPageInvoicePrivate *priv;
00307 GncPluginPage *parent;
00308 GtkActionGroup *action_group;
00309 gboolean use_new;
00310
00311 priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(plugin_page);
00312
00313
00314 parent = GNC_PLUGIN_PAGE(plugin_page);
00315 use_new = gnc_gconf_get_bool(GCONF_SECTION_INVOICE, KEY_USE_NEW, NULL);
00316 g_object_set(G_OBJECT(plugin_page),
00317 "page-name", _("Invoice"),
00318 "page-uri", "default:",
00319 "ui-description", "gnc-plugin-page-invoice-ui.xml",
00320 "use-new-window", use_new,
00321 (char *)NULL);
00322
00323
00324 gnc_plugin_page_add_book(parent, gnc_get_current_book());
00325
00326
00327 action_group =
00328 gnc_plugin_page_create_action_group(parent,
00329 "GncPluginPageInvoiceActions");
00330 gtk_action_group_add_actions (action_group, gnc_plugin_page_invoice_actions,
00331 gnc_plugin_page_invoice_n_actions, plugin_page);
00332 gtk_action_group_add_radio_actions (action_group,
00333 radio_entries, n_radio_entries,
00334 REG_STYLE_LEDGER,
00335 G_CALLBACK(gnc_plugin_page_invoice_cmd_sort_changed),
00336 plugin_page);
00337
00338 gnc_plugin_init_short_names (action_group, toolbar_labels);
00339 }
00340
00341 static void
00342 gnc_plugin_page_invoice_finalize (GObject *object)
00343 {
00344 GncPluginPageInvoice *page;
00345 GncPluginPageInvoicePrivate *priv;
00346
00347 g_return_if_fail (GNC_IS_PLUGIN_PAGE_INVOICE (object));
00348
00349 ENTER("object %p", object);
00350 page = GNC_PLUGIN_PAGE_INVOICE (object);
00351 priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(page);
00352
00353 G_OBJECT_CLASS (parent_class)->finalize (object);
00354 LEAVE(" ");
00355 }
00356
00357
00358 void
00359 gnc_plugin_page_invoice_update_menus (GncPluginPage *page, gboolean is_posted, gboolean can_unpost)
00360 {
00361 GtkActionGroup *action_group;
00362
00363 g_return_if_fail(GNC_IS_PLUGIN_PAGE_INVOICE(page));
00364
00365 action_group = gnc_plugin_page_get_action_group(page);
00366 gnc_plugin_update_actions (action_group, posted_actions,
00367 "sensitive", is_posted);
00368 gnc_plugin_update_actions (action_group, unposted_actions,
00369 "sensitive", !is_posted);
00370 gnc_plugin_update_actions (action_group, can_unpost_actions,
00371 "sensitive", can_unpost);
00372 }
00373
00374
00375
00376
00377 static GtkWidget *
00378 gnc_plugin_page_invoice_create_widget (GncPluginPage *plugin_page)
00379 {
00380 GncPluginPageInvoice *page;
00381 GncPluginPageInvoicePrivate *priv;
00382 GtkWidget *regWidget, *widget;
00383
00384 ENTER("page %p", plugin_page);
00385 page = GNC_PLUGIN_PAGE_INVOICE (plugin_page);
00386 priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(page);
00387 if (priv->widget != NULL)
00388 {
00389 LEAVE("");
00390 return priv->widget;
00391 }
00392
00393 priv->widget = gtk_vbox_new (FALSE, 0);
00394 gtk_widget_show (priv->widget);
00395
00396 widget = gnc_invoice_create_page(priv->iw, page);
00397 gtk_widget_show (widget);
00398 gtk_box_pack_start(GTK_BOX (priv->widget), widget, TRUE, TRUE, 0);
00399
00400 plugin_page->summarybar = gnc_invoice_window_create_summary_bar(priv->iw);
00401 gtk_box_pack_start(GTK_BOX (priv->widget), plugin_page->summarybar, FALSE, FALSE, 0);
00402 gnc_plugin_page_invoice_summarybar_position_changed(NULL, page);
00403 gnc_gconf_general_register_cb(KEY_SUMMARYBAR_POSITION,
00404 gnc_plugin_page_invoice_summarybar_position_changed, page);
00405
00406 regWidget = gnc_invoice_get_register(priv->iw);
00407 if (regWidget) {
00408 g_signal_connect (G_OBJECT (regWidget), "redraw-help",
00409 G_CALLBACK (gnc_plugin_page_redraw_help_cb), page);
00410 }
00411
00412 priv->component_manager_id =
00413 gnc_register_gui_component(GNC_PLUGIN_PAGE_INVOICE_NAME,
00414 gnc_plugin_page_invoice_refresh_cb,
00415 NULL, page);
00416
00417 LEAVE("");
00418 return priv->widget;
00419 }
00420
00421 static void
00422 gnc_plugin_page_invoice_destroy_widget (GncPluginPage *plugin_page)
00423 {
00424 GncPluginPageInvoice *page;
00425 GncPluginPageInvoicePrivate *priv;
00426
00427 ENTER("page %p", plugin_page);
00428 page = GNC_PLUGIN_PAGE_INVOICE (plugin_page);
00429 priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(page);
00430
00431 gnc_gconf_general_remove_cb(KEY_SUMMARYBAR_POSITION,
00432 gnc_plugin_page_invoice_summarybar_position_changed, page);
00433
00434 if (priv->widget == NULL)
00435 {
00436 LEAVE("");
00437 return;
00438 }
00439
00440 if (priv->component_manager_id) {
00441 gnc_unregister_gui_component(priv->component_manager_id);
00442 priv->component_manager_id = 0;
00443 }
00444
00445 gtk_widget_hide(priv->widget);
00446 gnc_invoice_window_destroy_cb(priv->widget, priv->iw);
00447 priv->widget = NULL;
00448 LEAVE("");
00449 }
00450
00460 static void
00461 gnc_plugin_page_invoice_save_page (GncPluginPage *plugin_page,
00462 GKeyFile *key_file,
00463 const gchar *group_name)
00464 {
00465 GncPluginPageInvoice *invoice;
00466 GncPluginPageInvoicePrivate *priv;
00467
00468 g_return_if_fail (GNC_IS_PLUGIN_PAGE_INVOICE(plugin_page));
00469 g_return_if_fail (key_file != NULL);
00470 g_return_if_fail (group_name != NULL);
00471
00472 ENTER("page %p, key_file %p, group_name %s", plugin_page, key_file,
00473 group_name);
00474
00475 invoice = GNC_PLUGIN_PAGE_INVOICE(plugin_page);
00476 priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(invoice);
00477
00478 gnc_invoice_save_page(priv->iw, key_file, group_name);
00479 LEAVE(" ");
00480 }
00481
00482
00483
00493 static GncPluginPage *
00494 gnc_plugin_page_invoice_recreate_page (GtkWidget *window,
00495 GKeyFile *key_file,
00496 const gchar *group_name)
00497 {
00498 GncPluginPage *page;
00499
00500 g_return_val_if_fail(GNC_IS_MAIN_WINDOW(window), NULL);
00501 g_return_val_if_fail(key_file, NULL);
00502 g_return_val_if_fail(group_name, NULL);
00503 ENTER("key_file %p, group_name %s", key_file, group_name);
00504
00505
00506 page = gnc_invoice_recreate_page(GNC_MAIN_WINDOW(window),
00507 key_file, group_name);
00508
00509 LEAVE(" ");
00510 return page;
00511 }
00512
00513
00514 static void
00515 gnc_plugin_page_invoice_window_changed (GncPluginPage *plugin_page,
00516 GtkWidget *window)
00517 {
00518 GncPluginPageInvoice *page;
00519 GncPluginPageInvoicePrivate *priv;
00520
00521 g_return_if_fail (GNC_IS_PLUGIN_PAGE_INVOICE (plugin_page));
00522
00523 page = GNC_PLUGIN_PAGE_INVOICE(plugin_page);
00524 priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(page);
00525 gnc_invoice_window_changed (priv->iw, window);
00526 }
00527
00528
00529 static void
00530 gnc_plugin_page_invoice_summarybar_position_changed(GConfEntry *entry,
00531 gpointer user_data)
00532 {
00533 GncPluginPage *plugin_page;
00534 GncPluginPageInvoice *page;
00535 GncPluginPageInvoicePrivate *priv;
00536 GtkPositionType position = GTK_POS_BOTTOM;
00537 gchar *conf_string;
00538
00539 g_return_if_fail(user_data != NULL);
00540
00541 plugin_page = GNC_PLUGIN_PAGE(user_data);
00542 page = GNC_PLUGIN_PAGE_INVOICE (user_data);
00543 priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(page);
00544
00545 conf_string = gnc_gconf_get_string (GCONF_GENERAL,
00546 KEY_SUMMARYBAR_POSITION, NULL);
00547 if (conf_string) {
00548 position = gnc_enum_from_nick (GTK_TYPE_POSITION_TYPE,
00549 conf_string, GTK_POS_BOTTOM);
00550 g_free (conf_string);
00551 }
00552
00553 gtk_box_reorder_child(GTK_BOX(priv->widget),
00554 plugin_page->summarybar,
00555 (position == GTK_POS_TOP ? 0 : -1) );
00556 }
00557
00558
00559
00560
00561
00562
00563 static void
00564 gnc_plugin_page_invoice_cmd_new_invoice (GtkAction *action,
00565 GncPluginPageInvoice *plugin_page)
00566 {
00567 GncPluginPageInvoicePrivate *priv;
00568
00569 g_return_if_fail(GNC_IS_PLUGIN_PAGE_INVOICE(plugin_page));
00570
00571 ENTER("(action %p, plugin_page %p)", action, plugin_page);
00572 priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(plugin_page);
00573 gnc_invoice_window_new_invoice_cb(NULL, priv->iw);
00574 LEAVE(" ");
00575 }
00576
00577 static void
00578 gnc_plugin_page_invoice_cmd_new_account (GtkAction *action,
00579 GncPluginPageInvoice *plugin_page)
00580 {
00581 g_return_if_fail(GNC_IS_PLUGIN_PAGE_INVOICE(plugin_page));
00582
00583 ENTER("(action %p, plugin_page %p)", action, plugin_page);
00584 gnc_ui_new_account_window (gnc_get_current_book(), NULL);
00585 LEAVE(" ");
00586 }
00587
00588 static void
00589 gnc_plugin_page_invoice_cmd_print (GtkAction *action,
00590 GncPluginPageInvoice *plugin_page)
00591 {
00592 GncPluginPageInvoicePrivate *priv;
00593
00594 g_return_if_fail(GNC_IS_PLUGIN_PAGE_INVOICE(plugin_page));
00595
00596 ENTER("(action %p, plugin_page %p)", action, plugin_page);
00597 priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(plugin_page);
00598 gnc_invoice_window_printCB(NULL, priv->iw);
00599 LEAVE(" ");
00600 }
00601
00602 static void
00603 gnc_plugin_page_invoice_cmd_cut (GtkAction *action,
00604 GncPluginPageInvoice *plugin_page)
00605 {
00606 GncPluginPageInvoicePrivate *priv;
00607
00608 g_return_if_fail(GNC_IS_PLUGIN_PAGE_INVOICE(plugin_page));
00609
00610 ENTER("(action %p, plugin_page %p)", action, plugin_page);
00611 priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(plugin_page);
00612 gnc_invoice_window_cut_cb(NULL, priv->iw);
00613 LEAVE(" ");
00614 }
00615
00616 static void
00617 gnc_plugin_page_invoice_cmd_copy (GtkAction *action,
00618 GncPluginPageInvoice *plugin_page)
00619 {
00620 GncPluginPageInvoicePrivate *priv;
00621
00622 g_return_if_fail(GNC_IS_PLUGIN_PAGE_INVOICE(plugin_page));
00623
00624 ENTER("(action %p, plugin_page %p)", action, plugin_page);
00625 priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(plugin_page);
00626 gnc_invoice_window_copy_cb(NULL, priv->iw);
00627 LEAVE(" ");
00628 }
00629
00630 static void
00631 gnc_plugin_page_invoice_cmd_paste (GtkAction *action,
00632 GncPluginPageInvoice *plugin_page)
00633 {
00634 GncPluginPageInvoicePrivate *priv;
00635
00636 g_return_if_fail(GNC_IS_PLUGIN_PAGE_INVOICE(plugin_page));
00637
00638 ENTER("(action %p, plugin_page %p)", action, plugin_page);
00639 priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(plugin_page);
00640 gnc_invoice_window_paste_cb(NULL, priv->iw);
00641 LEAVE(" ");
00642 }
00643
00644 static void
00645 gnc_plugin_page_invoice_cmd_edit (GtkAction *action,
00646 GncPluginPageInvoice *plugin_page)
00647 {
00648 GncPluginPageInvoicePrivate *priv;
00649
00650 g_return_if_fail(GNC_IS_PLUGIN_PAGE_INVOICE(plugin_page));
00651
00652 ENTER("(action %p, plugin_page %p)", action, plugin_page);
00653 priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(plugin_page);
00654 gnc_invoice_window_editCB(NULL, priv->iw);
00655 LEAVE(" ");
00656 }
00657
00658 static void
00659 gnc_plugin_page_invoice_cmd_post (GtkAction *action,
00660 GncPluginPageInvoice *plugin_page)
00661 {
00662 GncPluginPageInvoicePrivate *priv;
00663
00664 g_return_if_fail(GNC_IS_PLUGIN_PAGE_INVOICE(plugin_page));
00665
00666 ENTER("(action %p, plugin_page %p)", action, plugin_page);
00667 priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(plugin_page);
00668 gnc_invoice_window_postCB(NULL, priv->iw);
00669 LEAVE(" ");
00670 }
00671
00672 static void
00673 gnc_plugin_page_invoice_cmd_unpost (GtkAction *action,
00674 GncPluginPageInvoice *plugin_page)
00675 {
00676 GncPluginPageInvoicePrivate *priv;
00677
00678 g_return_if_fail(GNC_IS_PLUGIN_PAGE_INVOICE(plugin_page));
00679
00680 ENTER("(action %p, plugin_page %p)", action, plugin_page);
00681 priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(plugin_page);
00682 gnc_invoice_window_unpostCB(NULL, priv->iw);
00683 LEAVE(" ");
00684 }
00685
00686 static void
00687 gnc_plugin_page_invoice_cmd_sort_changed (GtkAction *action,
00688 GtkRadioAction *current,
00689 GncPluginPageInvoice *plugin_page)
00690 {
00691 GncPluginPageInvoicePrivate *priv;
00692 invoice_sort_type_t value;
00693
00694 ENTER("(action %p, radio action %p, plugin_page %p)",
00695 action, current, plugin_page);
00696 LEAVE("g_return testing...");
00697
00698 g_return_if_fail(GTK_IS_ACTION(action));
00699 g_return_if_fail(GTK_IS_RADIO_ACTION(current));
00700 g_return_if_fail(GNC_IS_PLUGIN_PAGE_INVOICE(plugin_page));
00701
00702 ENTER("...passed (action %p, radio action %p, plugin_page %p)",
00703 action, current, plugin_page);
00704 priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(plugin_page);
00705 value = gtk_radio_action_get_current_value(current);
00706 gnc_invoice_window_sort (priv->iw, value);
00707 LEAVE(" ");
00708 }
00709
00710
00711 static void
00712 gnc_plugin_page_invoice_cmd_enter (GtkAction *action,
00713 GncPluginPageInvoice *plugin_page)
00714 {
00715 GncPluginPageInvoicePrivate *priv;
00716
00717 g_return_if_fail(GNC_IS_PLUGIN_PAGE_INVOICE(plugin_page));
00718
00719 ENTER("(action %p, plugin_page %p)", action, plugin_page);
00720 priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(plugin_page);
00721 gnc_invoice_window_recordCB(NULL, priv->iw);
00722 LEAVE(" ");
00723 }
00724
00725 static void
00726 gnc_plugin_page_invoice_cmd_cancel (GtkAction *action,
00727 GncPluginPageInvoice *plugin_page)
00728 {
00729 GncPluginPageInvoicePrivate *priv;
00730
00731 g_return_if_fail(GNC_IS_PLUGIN_PAGE_INVOICE(plugin_page));
00732
00733 ENTER("(action %p, plugin_page %p)", action, plugin_page);
00734 priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(plugin_page);
00735 gnc_invoice_window_cancelCB(NULL, priv->iw);
00736 LEAVE(" ");
00737 }
00738
00739 static void
00740 gnc_plugin_page_invoice_cmd_delete (GtkAction *action,
00741 GncPluginPageInvoice *plugin_page)
00742 {
00743 GncPluginPageInvoicePrivate *priv;
00744
00745 g_return_if_fail(GNC_IS_PLUGIN_PAGE_INVOICE(plugin_page));
00746
00747 ENTER("(action %p, plugin_page %p)", action, plugin_page);
00748 priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(plugin_page);
00749 gnc_invoice_window_deleteCB(NULL, priv->iw);
00750 LEAVE(" ");
00751 }
00752
00753 static void
00754 gnc_plugin_page_invoice_cmd_blank (GtkAction *action,
00755 GncPluginPageInvoice *plugin_page)
00756 {
00757 GncPluginPageInvoicePrivate *priv;
00758
00759 g_return_if_fail(GNC_IS_PLUGIN_PAGE_INVOICE(plugin_page));
00760
00761 ENTER("(action %p, plugin_page %p)", action, plugin_page);
00762 priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(plugin_page);
00763 gnc_invoice_window_blankCB(NULL, priv->iw);
00764 LEAVE(" ");
00765 }
00766
00767 static void
00768 gnc_plugin_page_invoice_cmd_duplicate (GtkAction *action,
00769 GncPluginPageInvoice *plugin_page)
00770 {
00771 GncPluginPageInvoicePrivate *priv;
00772
00773 g_return_if_fail(GNC_IS_PLUGIN_PAGE_INVOICE(plugin_page));
00774
00775 ENTER("(action %p, plugin_page %p)", action, plugin_page);
00776 priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(plugin_page);
00777 gnc_invoice_window_duplicateCB(NULL, priv->iw);
00778 LEAVE(" ");
00779 }
00780
00781 static void
00782 gnc_plugin_page_invoice_cmd_pay_invoice (GtkAction *action,
00783 GncPluginPageInvoice *plugin_page)
00784 {
00785 GncPluginPageInvoicePrivate *priv;
00786
00787 g_return_if_fail(GNC_IS_PLUGIN_PAGE_INVOICE(plugin_page));
00788
00789 ENTER("(action %p, plugin_page %p)", action, plugin_page);
00790 priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(plugin_page);
00791 gnc_invoice_window_payment_cb(NULL, priv->iw);
00792 LEAVE(" ");
00793 }
00794
00795 static void
00796 gnc_plugin_page_invoice_cmd_company_report (GtkAction *action,
00797 GncPluginPageInvoice *plugin_page)
00798 {
00799 GncPluginPageInvoicePrivate *priv;
00800
00801 g_return_if_fail(GNC_IS_PLUGIN_PAGE_INVOICE(plugin_page));
00802
00803 ENTER("(action %p, plugin_page %p)", action, plugin_page);
00804 priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(plugin_page);
00805 gnc_invoice_window_report_owner_cb(NULL, priv->iw);
00806 LEAVE(" ");
00807 }
00808
00809
00810
00811
00812
00813 static void
00814 gnc_plugin_page_redraw_help_cb (GnucashRegister *g_reg,
00815 GncPluginPageInvoice *invoice_page)
00816 {
00817 GncPluginPageInvoicePrivate *priv;
00818 GncWindow *window;
00819 const char *status;
00820 char *help;
00821
00822 g_return_if_fail(GNC_IS_PLUGIN_PAGE_INVOICE(invoice_page));
00823
00824 window = GNC_WINDOW(GNC_PLUGIN_PAGE(invoice_page)->window);
00825
00826
00827 priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(invoice_page);
00828 help = gnc_invoice_get_help(priv->iw);
00829 status = help ? help : g_strdup("");
00830 gnc_window_set_status(window, GNC_PLUGIN_PAGE(invoice_page), status);
00831 g_free(help);
00832 }
00833
00834
00835 void
00836 gnc_plugin_page_invoice_update_title (GncPluginPage *plugin_page)
00837 {
00838 GncPluginPageInvoice *page;
00839 GncPluginPageInvoicePrivate *priv;
00840 gchar *title;
00841
00842 g_return_if_fail(GNC_IS_PLUGIN_PAGE_INVOICE(plugin_page));
00843
00844 page = GNC_PLUGIN_PAGE_INVOICE(plugin_page);
00845 priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(page);
00846 title = gnc_invoice_get_title(priv->iw);
00847 gnc_plugin_page_set_page_name(plugin_page, title);
00848 g_free(title);
00849 }
00850
00851 static void
00852 gnc_plugin_page_invoice_refresh_cb (GHashTable *changes, gpointer user_data)
00853 {
00854 GncPluginPageInvoice *page = user_data;
00855 GncPluginPageInvoicePrivate *priv;
00856 GtkWidget *reg;
00857
00858 g_return_if_fail(GNC_IS_PLUGIN_PAGE_INVOICE(page));
00859
00860
00861 if (changes)
00862 return;
00863
00864 priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(page);
00865 reg = gnc_invoice_get_register(priv->iw);
00866 gnucash_register_refresh_from_gconf(GNUCASH_REGISTER(reg));
00867 gtk_widget_queue_draw(priv->widget);
00868 }