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