Hook the Entry Ledger into the component manager

fix the 'account creation is not noticed' bug
set up closer to 'provide a query' interface


git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@6641 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
Derek Atkins
2002-01-23 23:05:11 +00:00
parent 566e52044c
commit cf012be7fd
9 changed files with 162 additions and 21 deletions
+7 -4
View File
@@ -320,7 +320,7 @@ gnc_invoice_window_refresh_handler (GHashTable *changes, gpointer user_data)
const EventInfo *info;
GncInvoice *invoice = iw_get_invoice (iw);
/* If there isn't a invoice behind us, close down */
/* If there isn't a invoice behind us, close down */
if (!invoice) {
gnc_close_gui_component (iw->component_id);
return;
@@ -433,9 +433,13 @@ gnc_invoice_new_window (GtkWidget *parent, GNCBook *bookp,
entry_ledger = gnc_entry_ledger_new (iw->book, GNCENTRY_INVOICE_VIEWER);
break;
}
entries = gncInvoiceGetEntries (invoice);
/* Set the entry_ledger's invoice */
gnc_entry_ledger_set_default_invoice (entry_ledger, invoice);
//entries = gncInvoiceGetEntries (invoice);
/* Set watches on entries */
gnc_entry_ledger_load (entry_ledger, entries);
//gnc_entry_ledger_load (entry_ledger, entries);
/* Watch the invoice of operations, here... */
gnucash_register_set_initial_rows( 10 );
@@ -572,7 +576,6 @@ gnc_invoice_new_window (GtkWidget *parent, GNCBook *bookp,
GNC_ID_NONE,
GNC_EVENT_MODIFY | GNC_EVENT_DESTROY);
gnc_entry_ledger_set_default_invoice (entry_ledger, invoice);
gnc_table_realize_gui (gnc_entry_ledger_get_table (entry_ledger));
gtk_widget_show_all (iw->dialog);
gnc_table_refresh_gui (gnc_entry_ledger_get_table (entry_ledger), TRUE);
+6 -4
View File
@@ -428,9 +428,13 @@ gnc_order_new_window (GtkWidget *parent, GNCBook *bookp,
entry_ledger = gnc_entry_ledger_new (ow->book, GNCENTRY_ORDER_VIEWER);
break;
}
entries = gncOrderGetEntries (order);
/* Set the order for the entry_ledger */
gnc_entry_ledger_set_default_order (entry_ledger, order);
/* Set watches on entries */
gnc_entry_ledger_load (entry_ledger, entries);
// entries = gncOrderGetEntries (order);
// gnc_entry_ledger_load (entry_ledger, entries);
/* Watch the order of operations, here... */
gnucash_register_set_initial_rows( 10 );
@@ -505,7 +509,6 @@ gnc_order_new_window (GtkWidget *parent, GNCBook *bookp,
/* Set the Reference */
gnc_order_owner_changed_cb (ow->owner_choice, ow);
/* We know that "order" (and "owner") exist now */
{
const char *string;
Timespec ts, ts_zero = {0,0};
@@ -543,7 +546,6 @@ gnc_order_new_window (GtkWidget *parent, GNCBook *bookp,
GNC_ID_NONE,
GNC_EVENT_MODIFY | GNC_EVENT_DESTROY);
gnc_entry_ledger_set_default_order (entry_ledger, order);
gnc_table_realize_gui (gnc_entry_ledger_get_table (entry_ledger));
gtk_widget_show_all (ow->dialog);
gnc_table_refresh_gui (gnc_entry_ledger_get_table (entry_ledger), TRUE);
+1
View File
@@ -5,6 +5,7 @@ pkglib_LTLIBRARIES = libgnc-business-ledger.la
libgnc_business_ledger_la_SOURCES = \
gncEntryLedger.c \
gncEntryLedgerControl.c \
gncEntryLedgerDisplay.c \
gncEntryLedgerLayout.c \
gncEntryLedgerLoad.c \
gncEntryLedgerModel.c
@@ -213,6 +213,8 @@ GncEntryLedger * gnc_entry_ledger_new (GNCBook *book, GncEntryLedgerType type)
}
}
/* Initialize Display */
gnc_entry_ledger_display_init (ledger);
return ledger;
}
@@ -221,6 +223,7 @@ void gnc_entry_ledger_destroy (GncEntryLedger *ledger)
{
if (!ledger) return;
gnc_entry_ledger_display_fini (ledger);
gnc_table_destroy (ledger->table);
g_free (ledger);
}
@@ -236,6 +239,7 @@ void gnc_entry_ledger_set_default_order (GncEntryLedger *ledger,
{
if (!ledger) return;
ledger->order = order;
gnc_entry_ledger_display_refresh (ledger);
}
void gnc_entry_ledger_set_default_invoice (GncEntryLedger *ledger,
@@ -243,6 +247,7 @@ void gnc_entry_ledger_set_default_invoice (GncEntryLedger *ledger,
{
if (!ledger) return;
ledger->invoice = invoice;
gnc_entry_ledger_display_refresh (ledger);
}
void gnc_entry_ledger_set_parent (GncEntryLedger *ledger, gncUIWidget parent)
@@ -271,12 +276,3 @@ gboolean gnc_entry_ledger_find_entry (GncEntryLedger *ledger, GncEntry *entry,
}
return FALSE;
}
void gnc_entry_ledger_redraw (GncEntryLedger *ledger)
{
/* XXX: FIXME -- Use a Query! */
if (ledger->order)
gnc_entry_ledger_load (ledger, gncOrderGetEntries (ledger->order));
if (ledger->invoice)
gnc_entry_ledger_load (ledger, gncInvoiceGetEntries (ledger->invoice));
}
@@ -71,6 +71,8 @@ GncEntry * gnc_entry_ledger_get_current_entry (GncEntryLedger *ledger);
/* Copy GncEntry information from the list to the rows of the Ledger. */
void gnc_entry_ledger_load (GncEntryLedger *ledger, GList *entry_list);
void gnc_entry_ledger_display_refresh (GncEntryLedger *ledger);
/* Get the Table */
Table * gnc_entry_ledger_get_table (GncEntryLedger *ledger);
@@ -47,7 +47,7 @@ static void gnc_entry_ledger_move_cursor (VirtualLocation *p_new_virt_loc,
VirtualCellLocation vcell_loc;
/* redraw */
gnc_entry_ledger_redraw (ledger);
gnc_entry_ledger_display_refresh (ledger);
if (ledger->traverse_to_new)
new_entry = gncEntryLookup (ledger->book, &ledger->blank_entry_guid);
@@ -199,13 +199,13 @@ static gboolean gnc_entry_ledger_traverse (VirtualLocation *p_new_virt_loc,
break;
}
// info->full_refresh = FALSE;
ledger->full_refresh = FALSE;
account = gnc_ui_new_accounts_from_name_window (name);
if (!account)
break;
// info->full_refresh = TRUE;
ledger->full_refresh = TRUE;
name = xaccAccountGetFullName (account, gnc_get_account_separator ());
gnc_combo_cell_set_value (cell, name);
@@ -0,0 +1,123 @@
/*
* gncEntryLedgerDisplay.c -- handle the display management for an Entry Ledger
* Copyright (C) 2002 Derek Atkins
* Author: Derek Atkins <warlord@MIT.EDU>
*/
#define _GNU_SOURCE
#include "config.h"
#include <glib.h>
#include "gnc-ui-util.h"
#include "gnc-component-manager.h"
#include "gncEntry.h"
#include "gncEntryLedger.h"
#include "gncEntryLedgerP.h"
#define ENTRYLEDGER_CLASS "entry-ledger-class"
/* Return the list of entries (NOTE: Should use a query here!) */
static GList *
gnc_entry_ledger_get_entries (GncEntryLedger *ledger)
{
if (ledger->order)
return (gncOrderGetEntries (ledger->order));
if (ledger->invoice)
return (gncInvoiceGetEntries (ledger->invoice));
// g_warning ("no invoice; no order. Who am I?");
return NULL;
}
static void
gnc_entry_ledger_refresh_internal (GncEntryLedger *ledger, GList *entries)
{
if (!ledger || ledger->loading)
return;
/* If not full refresh ok, just load the xfer cells */
if (!ledger->full_refresh) {
gnc_entry_ledger_load_xfer_cells (ledger);
return;
}
/* Viewers must always have at least one entry! */
if ((ledger->type == GNCENTRY_ORDER_VIEWER ||
ledger->type == GNCENTRY_INVOICE_VIEWER) && !entries)
return;
ledger->loading = TRUE;
gnc_entry_ledger_load (ledger, entries);
ledger->loading = FALSE;
}
static void
gnc_entry_ledger_set_watches (GncEntryLedger *ledger, GList *entries)
{
GList *node;
gnc_gui_component_clear_watches (ledger->component_id);
gnc_gui_component_watch_entity_type (ledger->component_id,
GNC_ID_ACCOUNT,
GNC_EVENT_MODIFY | GNC_EVENT_DESTROY);
for (node = entries; node; node = node->next)
{
GncEntry *entry = node->data;
gnc_gui_component_watch_entity (ledger->component_id,
gncEntryGetGUID (entry),
GNC_EVENT_MODIFY);
}
}
static void
refresh_handler (GHashTable *changes, gpointer user_data)
{
GncEntryLedger *ledger = user_data;
GList *entries;
if (ledger->loading)
return;
entries = gnc_entry_ledger_get_entries (ledger);
gnc_entry_ledger_set_watches (ledger, entries);
gnc_entry_ledger_refresh_internal (ledger, entries);
}
void
gnc_entry_ledger_display_init (GncEntryLedger *ledger)
{
if (!ledger) return;
ledger->full_refresh = TRUE;
ledger->component_id = gnc_register_gui_component (ENTRYLEDGER_CLASS,
refresh_handler,
NULL, ledger);
refresh_handler (NULL, ledger);
}
void
gnc_entry_ledger_display_fini (GncEntryLedger *ledger)
{
if (!ledger) return;
gnc_unregister_gui_component (ledger->component_id);
}
void
gnc_entry_ledger_display_refresh (GncEntryLedger *ledger)
{
if (!ledger || ledger->loading)
return;
gnc_entry_ledger_refresh_internal (ledger,
gnc_entry_ledger_get_entries (ledger));
}
@@ -126,6 +126,11 @@ static void load_xfer_type_cells (GncEntryLedger *ledger)
load_xfer_cell (cell, group);
}
void gnc_entry_ledger_load_xfer_cells (GncEntryLedger *ledger)
{
load_xfer_type_cells (ledger);
}
/* XXX (FIXME): This should be in a config file! */
/* Copy GncEntry information from the list to the rows of the Ledger. */
void gnc_entry_ledger_load (GncEntryLedger *ledger, GList *entry_list)
@@ -263,3 +268,4 @@ void gnc_entry_ledger_load (GncEntryLedger *ledger, GList *entry_list)
/* Set the confirmation callbacks and load the combo cells */
}
@@ -17,6 +17,10 @@ struct GncEntryLedger_s {
gboolean blank_entry_edited;
gboolean traverse_to_new;
gboolean loading; /* To keep from recursing from events */
gboolean full_refresh; /* Is a full refresh ok? */
gint component_id; /* To register for events */
Timespec last_date_entered;
gncUIWidget parent;
@@ -44,6 +48,10 @@ const char * gnc_entry_ledger_type_string_getter (char flag);
gboolean gnc_entry_ledger_find_entry (GncEntryLedger *ledger, GncEntry *entry,
VirtualCellLocation *vcell_loc);
void gnc_entry_ledger_redraw (GncEntryLedger *ledger);
void gnc_entry_ledger_load_xfer_cells (GncEntryLedger *ledger);
void gnc_entry_ledger_display_init (GncEntryLedger *ledger);
void gnc_entry_ledger_display_fini (GncEntryLedger *ledger);
#endif /* GNC_ENTRY_LEDGERP_H */