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