mirror of
https://github.com/Gnucash/gnucash.git
synced 2026-08-08 12:08:32 -05:00
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:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user