More work on transaction expansion.

git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@3254 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
Dave Peticolas 2000-12-07 07:51:32 +00:00
parent ceb181c26e
commit 4fbcb7f130
8 changed files with 218 additions and 192 deletions

View File

@ -389,7 +389,6 @@ xaccLedgerDisplayGeneral (Account *lead_account, GList *accounts,
regData = (xaccLedgerDisplay *) malloc (sizeof (xaccLedgerDisplay));
regData->leader = lead_account;
regData->redraw = NULL;
regData->destroy = NULL;
regData->get_parent = NULL;
regData->set_help = NULL;
@ -473,31 +472,6 @@ xaccLedgerDisplayRefresh (xaccLedgerDisplay *regData)
xaccSRLoadRegister (regData->ledger,
xaccQueryGetSplits (regData->query),
regData->leader);
/* hack alert -- this computation of totals is incorrect
* for multi-account ledgers */
/* OK, now tell this specific GUI window to redraw itself ... */
if (regData->redraw)
(regData->redraw) (regData);
}
/********************************************************************\
* refresh all the register windows, but only with the gui callback *
\********************************************************************/
void
xaccRegisterRefreshAllGUI (void)
{
xaccLedgerDisplay *ledger_display;
GList *node;
for (node = fullList; node; node = g_list_next(node))
{
ledger_display = node->data;
if (ledger_display->redraw)
(ledger_display->redraw) (ledger_display);
}
}
/********************************************************************\

View File

@ -56,7 +56,6 @@ struct _xaccLedgerDisplay
SplitRegister *ledger; /* main ledger window */
gpointer gui_hook; /* GUI-specific state */
void (*redraw) (xaccLedgerDisplay *); /* redraw callback */
void (*destroy) (xaccLedgerDisplay *); /* destroy callback */
gncUIWidget (*get_parent) (xaccLedgerDisplay *); /* get parent widget */
void (*set_help) (xaccLedgerDisplay *, const char *); /* help string */
@ -92,11 +91,6 @@ void xaccTransDisplayRefresh (Transaction *trans);
void xaccLedgerDisplayRefresh (xaccLedgerDisplay * ledger_display);
void xaccRegisterRefresh (SplitRegister *reg);
/* Call the user refresh callback for all registers. This does not
* perform a full refresh, i.e., it does not reload transactions.
* This is just for updating gui controls. */
void xaccRegisterRefreshAllGUI (void);
/* close the window */
void xaccLedgerDisplayClose (xaccLedgerDisplay * ledger_display);

View File

@ -248,6 +248,7 @@ static void xaccSRSetTransVisible (SplitRegister *reg,
VirtualCellLocation vcell_loc,
gboolean visible,
gboolean only_blank_split);
static void xaccSRLoadXferCells (SplitRegister *reg, Account *base_account);
/** implementations *******************************************************/
@ -787,12 +788,30 @@ xaccSRExpandCurrentTrans (SplitRegister *reg, gboolean expand)
}
}
info->trans_expanded = expand;
gnc_table_set_virt_cell_cursor (reg->table,
reg->table->current_cursor_loc.vcell_loc,
sr_get_active_cursor (reg));
xaccSRSetTransVisible (reg, reg->table->current_cursor_loc.vcell_loc,
expand, FALSE);
gnc_table_refresh_gui (reg->table);
}
info->trans_expanded = expand;
gboolean
xaccSRCurrentTransExpanded (SplitRegister *reg)
{
SRInfo *info = xaccSRGetInfo (reg);
if (!reg)
return FALSE;
if (reg->style == REG_STYLE_AUTO_LEDGER ||
reg->style == REG_STYLE_JOURNAL)
return FALSE;
return info->trans_expanded;
}
/* ======================================================== */
@ -942,7 +961,8 @@ LedgerMoveCursor (Table *table, VirtualLocation *p_new_virt_loc)
/* in the mult-line and dynamic modes, we need to hide the old
* and show the new. */
if (((REG_STYLE_AUTO_LEDGER == reg->style) ||
(REG_STYLE_JOURNAL == reg->style)) &&
(REG_STYLE_JOURNAL == reg->style) ||
info->trans_expanded) &&
(old_trans_split != new_trans_split))
{
VirtualCellLocation vc_loc;
@ -953,11 +973,17 @@ LedgerMoveCursor (Table *table, VirtualLocation *p_new_virt_loc)
xaccSRSetTransVisible (reg, vc_loc, FALSE,
reg->style == REG_STYLE_JOURNAL);
xaccSRGetTransSplit (reg, new_virt_loc.vcell_loc, &vc_loc);
gnc_table_set_virt_cell_cursor (table, vc_loc,
sr_get_active_cursor (reg));
xaccSRSetTransVisible (reg, vc_loc, TRUE,
reg->style == REG_STYLE_JOURNAL);
if ((REG_STYLE_AUTO_LEDGER == reg->style) ||
(REG_STYLE_JOURNAL == reg->style))
{
xaccSRGetTransSplit (reg, new_virt_loc.vcell_loc, &vc_loc);
gnc_table_set_virt_cell_cursor (table, vc_loc,
sr_get_active_cursor (reg));
xaccSRSetTransVisible (reg, vc_loc, TRUE,
reg->style == REG_STYLE_JOURNAL);
}
info->trans_expanded = FALSE;
do_refresh = TRUE;
}
@ -4237,6 +4263,8 @@ xaccSRLoadRegister (SplitRegister *reg, Split **slist,
table->user_data = reg;
reg->destroy = LedgerDestroy;
xaccSRLoadXferCells (reg, default_source_acc);
}
/* ======================================================== */
@ -4316,7 +4344,7 @@ xaccLoadXferCell (ComboCell *cell,
/* ======================================================== */
void
static void
xaccSRLoadXferCells (SplitRegister *reg, Account *base_account)
{
AccountGroup *group;

View File

@ -175,10 +175,6 @@ gboolean xaccSRSaveRegEntry (SplitRegister *reg, gboolean do_commit);
* other split that belongs to this same tansaction. */
void xaccSRRedrawRegEntry (SplitRegister *reg);
/* The xaccSRLoadXferCells() method loads (or reloads) the transfer
* cells with appropriate entries. */
void xaccSRLoadXferCells (SplitRegister *reg, Account *base_account);
/* The xaccSRHasPendingChanges() method returns TRUE if the register
* has changed cells that have not been committed. */
gboolean xaccSRHasPendingChanges (SplitRegister *reg);
@ -205,6 +201,9 @@ void xaccSetSplitRegisterColorizeNegative (gboolean use_red);
/* Expand the current transaction if it is collapsed. */
void xaccSRExpandCurrentTrans (SplitRegister *reg, gboolean expand);
/* Return TRUE if current trans is expanded and style is REG_STYLE_LEDGER. */
gboolean xaccSRCurrentTransExpanded (SplitRegister *reg);
/* Private function, for MultiLedger.c only */
const char * xaccSRGetEntryHandler (VirtualLocation virt_loc,
short _cell_type,

View File

@ -83,10 +83,9 @@ struct _RegWindow
GtkWidget * statusbar;
GtkWidget * ledger_button;
GtkWidget * auto_ledger_button;
GtkWidget * journal_button;
GtkWidget * expand_button;
GtkWidget * split_button;
GtkWidget * split_menu_check;
GtkWidget * split_popup_check;
GtkWidget * balance_label;
GtkWidget * cleared_label;
@ -110,8 +109,7 @@ static int last_stock_width = 0;
/** PROTOTYPES ******************************************************/
RegWindow * regWindowLedger(xaccLedgerDisplay *ledger);
static void regRefresh(xaccLedgerDisplay *ledger);
static void gnc_register_redraw_all_cb (GnucashRegister *g_reg, gpointer data);
static void gnc_reg_refresh_toolbar(RegWindow *regData);
static void regDestroy(xaccLedgerDisplay *ledger);
static void regSetHelp(xaccLedgerDisplay *ledger, const char *help_str);
@ -268,60 +266,10 @@ static void
gnc_register_change_style (RegWindow *regData, SplitRegisterStyle style)
{
SplitRegister *reg = regData->ledger->ledger;
GtkCheckMenuItem *radio_button;
GtkToggleButton *expand_button;
if (style == reg->style)
return;
gtk_signal_handler_block_by_data (GTK_OBJECT (regData->ledger_button),
regData);
gtk_signal_handler_block_by_data (GTK_OBJECT (regData->auto_ledger_button),
regData);
gtk_signal_handler_block_by_data (GTK_OBJECT (regData->journal_button),
regData);
gtk_signal_handler_block_by_data (GTK_OBJECT (regData->expand_button),
regData);
expand_button = GTK_TOGGLE_BUTTON (regData->expand_button);
switch (style)
{
case REG_STYLE_LEDGER:
radio_button = GTK_CHECK_MENU_ITEM (regData->ledger_button);
gtk_toggle_button_set_active (expand_button, FALSE);
gtk_widget_set_sensitive (regData->expand_button, TRUE);
break;
case REG_STYLE_AUTO_LEDGER:
radio_button = GTK_CHECK_MENU_ITEM (regData->auto_ledger_button);
gtk_toggle_button_set_active (expand_button, TRUE);
gtk_widget_set_sensitive (regData->expand_button, TRUE);
break;
case REG_STYLE_JOURNAL:
radio_button = GTK_CHECK_MENU_ITEM (regData->journal_button);
gtk_toggle_button_set_active (expand_button, TRUE);
gtk_widget_set_sensitive (regData->expand_button, FALSE);
break;
default:
PERR ("Bad style");
radio_button = NULL;
break;
}
gtk_check_menu_item_set_active (radio_button, TRUE);
gtk_signal_handler_unblock_by_data (GTK_OBJECT (regData->ledger_button),
regData);
gtk_signal_handler_unblock_by_data (GTK_OBJECT (regData->auto_ledger_button),
regData);
gtk_signal_handler_unblock_by_data (GTK_OBJECT (regData->journal_button),
regData);
gtk_signal_handler_unblock_by_data (GTK_OBJECT (regData->expand_button),
regData);
xaccConfigSplitRegister (reg, reg->type, style, reg->use_double_line);
regData->ledger->dirty = TRUE;
@ -609,7 +557,7 @@ gnc_register_set_date_range(RegWindow *regData)
static void
gnc_register_date_cb(GtkWidget *widget, gpointer data)
{
RegWindow *regData = (RegWindow *) data;
RegWindow *regData = data;
gnc_register_set_date_range(regData);
@ -620,7 +568,7 @@ gnc_register_date_cb(GtkWidget *widget, gpointer data)
static void
show_all_cb(GtkWidget *widget, gpointer data)
{
RegWindow *regData = (RegWindow *) data;
RegWindow *regData = data;
RegDateWindow *regDateData;
GtkToggleButton *toggle;
@ -642,7 +590,7 @@ show_all_cb(GtkWidget *widget, gpointer data)
static void
gnc_register_today_cb(GtkWidget *widget, gpointer data)
{
RegWindow *regData = (RegWindow *) data;
RegWindow *regData = data;
RegDateWindow *regDateData;
assert(regData != NULL);
@ -656,7 +604,7 @@ gnc_register_today_cb(GtkWidget *widget, gpointer data)
static void
gnc_register_date_toggle_cb(GtkToggleButton *toggle, gpointer data)
{
RegWindow *regData = (RegWindow *) data;
RegWindow *regData = data;
gtk_widget_set_sensitive(regData->date_window->set_button, TRUE);
@ -890,8 +838,8 @@ gnc_register_create_tool_bar (RegWindow *regData)
GNOMEUIINFO_SEPARATOR,
{
GNOME_APP_UI_TOGGLEITEM,
N_("Expand"),
N_("Expand the current transaction"),
N_("Split"),
N_("Show all splits in the current transaction"),
expand_trans_cb, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_PIXMAP_BOOK_OPEN,
0, 0, NULL
@ -899,7 +847,7 @@ gnc_register_create_tool_bar (RegWindow *regData)
{
GNOME_APP_UI_ITEM,
N_("Blank"),
N_("Move to the blank transaction at the "\
N_("Move to the blank transaction at the " \
"bottom of the register"),
new_trans_cb, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_PIXMAP_NEW,
@ -952,7 +900,7 @@ gnc_register_create_tool_bar (RegWindow *regData)
regData->toolbar = toolbar;
regData->expand_button = toolbar_info[6].widget;
regData->split_button = toolbar_info[6].widget;
return toolbar;
}
@ -1041,15 +989,28 @@ gnc_register_jump_to_blank(RegWindow *regData)
static void
expand_trans_cb(GtkWidget *widget, gpointer data)
expand_trans_check_cb (GtkWidget *widget, gpointer data)
{
RegWindow *regData = data;
SplitRegisterStyle style;
gboolean expand;
style = GTK_TOGGLE_BUTTON (widget)->active ?
REG_STYLE_AUTO_LEDGER : REG_STYLE_LEDGER;
if (!regData)
return;
gnc_register_change_style (regData, style);
expand = GTK_CHECK_MENU_ITEM (widget)->active;
xaccSRExpandCurrentTrans (regData->ledger->ledger, expand);
}
static void
expand_trans_cb (GtkWidget *widget, gpointer data)
{
RegWindow *regData = data;
gboolean expand;
expand = GTK_TOGGLE_BUTTON (widget)->active;
xaccSRExpandCurrentTrans (regData->ledger->ledger, expand);
}
static void
@ -1071,7 +1032,7 @@ new_trans_cb(GtkWidget *widget, gpointer data)
static void
jump_cb(GtkWidget *widget, gpointer data)
{
RegWindow *regData = (RegWindow *) data;
RegWindow *regData = data;
Account *account;
Split *split;
@ -1139,7 +1100,7 @@ print_check_cb(GtkWidget * widget, gpointer data)
static void
gnc_register_scrub_cb(GtkWidget *widget, gpointer data)
{
RegWindow *regData = (RegWindow *) data;
RegWindow *regData = data;
Account *account = regData->ledger->leader;
if (account == NULL)
@ -1379,6 +1340,14 @@ gnc_register_create_menu_bar(RegWindow *regData, GtkWidget *statusbar)
0, 0, NULL
},
GNOMEUIINFO_SEPARATOR,
{
GNOME_APP_UI_TOGGLEITEM,
N_("_Split"),
N_("Show all splits in the current transaction"),
expand_trans_check_cb, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL,
0, 0, NULL
},
{
GNOME_APP_UI_ITEM,
N_("_Blank"),
@ -1445,9 +1414,7 @@ gnc_register_create_menu_bar(RegWindow *regData, GtkWidget *statusbar)
gnome_app_install_appbar_menu_hints(GNOME_APPBAR(statusbar),
register_window_menu);
regData->ledger_button = style_list[0].widget;
regData->auto_ledger_button = style_list[1].widget;
regData->journal_button = style_list[2].widget;
regData->split_menu_check = transaction_menu[6].widget;
/* Make sure the right style radio item is active */
{
@ -1492,11 +1459,11 @@ gnc_register_create_menu_bar(RegWindow *regData, GtkWidget *statusbar)
static GtkWidget *
gnc_register_create_popup_menu(RegWindow *regData)
gnc_register_create_popup_menu (RegWindow *regData)
{
GtkWidget *popup;
static GnomeUIInfo transaction_menu[] =
GnomeUIInfo transaction_menu[] =
{
{
GNOME_APP_UI_ITEM,
@ -1532,6 +1499,14 @@ gnc_register_create_popup_menu(RegWindow *regData)
0, 0, NULL
},
GNOMEUIINFO_SEPARATOR,
{
GNOME_APP_UI_TOGGLEITEM,
N_("_Split"),
N_("Show all splits in the current transaction"),
expand_trans_check_cb, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL,
0, 0, NULL
},
{
GNOME_APP_UI_ITEM,
N_("_Blank"),
@ -1553,9 +1528,11 @@ gnc_register_create_popup_menu(RegWindow *regData)
GNOMEUIINFO_END
};
gnc_fill_menu_with_data(transaction_menu, regData);
gnc_fill_menu_with_data (transaction_menu, regData);
popup = gnome_popup_menu_new(transaction_menu);
popup = gnome_popup_menu_new (transaction_menu);
regData->split_popup_check = transaction_menu[6].widget;
return popup;
}
@ -1598,13 +1575,13 @@ gnc_register_record_cb(GnucashRegister *reg, gpointer data)
}
/* First record the transaction. This will perform a refresh. */
recordCB(GTK_WIDGET(reg), data);
recordCB (GTK_WIDGET(reg), data);
/* Now move. */
if (goto_blank)
gnc_register_jump_to_blank(regData);
gnc_register_jump_to_blank (regData);
else
gnucash_register_goto_next_virt_row(reg);
gnucash_register_goto_next_virt_row (reg);
}
static void
@ -1697,7 +1674,7 @@ gnc_toolbar_change_cb(void *data)
* Return: regData - the register window instance *
\********************************************************************/
RegWindow *
regWindowLedger(xaccLedgerDisplay *ledger)
regWindowLedger (xaccLedgerDisplay *ledger)
{
RegWindow *regData;
GtkWidget *vbox;
@ -1713,7 +1690,6 @@ regWindowLedger(xaccLedgerDisplay *ledger)
regData = g_new(RegWindow, 1);
ledger->gui_hook = regData;
ledger->redraw = regRefresh;
ledger->destroy = regDestroy;
ledger->set_help = regSetHelp;
ledger->get_parent = gnc_register_get_parent;
@ -1807,6 +1783,8 @@ regWindowLedger(xaccLedgerDisplay *ledger)
gtk_signal_connect(GTK_OBJECT(register_widget), "activate_cursor",
GTK_SIGNAL_FUNC(gnc_register_record_cb), regData);
gtk_signal_connect(GTK_OBJECT(register_widget), "redraw_all",
GTK_SIGNAL_FUNC(gnc_register_redraw_all_cb), regData);
popup = gnc_register_create_popup_menu(regData);
gnucash_register_attach_popup(GNUCASH_REGISTER(register_widget),
@ -1869,84 +1847,118 @@ regWindowLedger(xaccLedgerDisplay *ledger)
static void
gnc_reg_refresh_toolbar(RegWindow *regData)
gnc_reg_refresh_toolbar (RegWindow *regData)
{
GtkToolbarStyle tbstyle;
if ((regData == NULL) || (regData->toolbar == NULL))
return;
tbstyle = gnc_get_toolbar_style();
tbstyle = gnc_get_toolbar_style ();
gtk_toolbar_set_style(GTK_TOOLBAR(regData->toolbar), tbstyle);
gtk_toolbar_set_style (GTK_TOOLBAR (regData->toolbar), tbstyle);
}
static void
regRefresh(xaccLedgerDisplay *ledger)
gnc_register_redraw_all_cb (GnucashRegister *g_reg, gpointer data)
{
RegWindow *regData = (RegWindow *) (ledger->gui_hook);
RegWindow *regData = data;
const gnc_commodity * currency;
GNCPrintAmountInfo print_info;
gboolean euro = gnc_lookup_boolean_option("International",
"Enable EURO support",
FALSE);
const gnc_commodity * currency = xaccAccountGetCurrency(ledger->leader);
gnc_numeric amount;
Account *leader;
char string[256];
gboolean reverse;
gboolean euro;
if (regData->window == NULL)
return;
leader = regData->ledger->leader;
euro = gnc_lookup_boolean_option ("International",
"Enable EURO support",
FALSE);
currency = xaccAccountGetCurrency (leader);
/* no EURO converson, if account is already EURO or no EURO currency */
if(currency != NULL)
if (currency != NULL)
euro = (euro && gnc_is_euro_currency(currency));
else
euro = FALSE;
xaccSRLoadXferCells(ledger->ledger, ledger->leader);
print_info = gnc_account_value_print_info (leader, TRUE);
print_info = gnc_account_value_print_info (ledger->leader, TRUE);
reverse = gnc_reverse_balance(leader);
if (regData->window != NULL)
if (regData->balance_label != NULL)
{
char string[256];
gboolean reverse = gnc_reverse_balance(ledger->leader);
gnc_numeric amount;
amount = xaccAccountGetBalance (leader);
if (reverse)
amount = gnc_numeric_neg (amount);
if (regData->balance_label != NULL)
xaccSPrintAmount(string, amount, print_info);
if (euro)
{
amount = xaccAccountGetBalance (ledger->leader);
if (reverse)
amount = gnc_numeric_neg (amount);
xaccSPrintAmount(string, amount, print_info);
if (euro)
{
strcat(string, " / ");
xaccSPrintAmount(string + strlen(string),
gnc_convert_to_euro(currency, amount),
gnc_commodity_print_info (gnc_get_euro (), TRUE));
}
gnc_set_label_color(regData->balance_label, amount);
gtk_label_set_text(GTK_LABEL(regData->balance_label), string);
strcat(string, " / ");
xaccSPrintAmount(string + strlen(string),
gnc_convert_to_euro(currency, amount),
gnc_commodity_print_info (gnc_get_euro (), TRUE));
}
if (regData->cleared_label != NULL)
gnc_set_label_color(regData->balance_label, amount);
gtk_label_set_text(GTK_LABEL(regData->balance_label), string);
}
if (regData->cleared_label != NULL)
{
amount = xaccAccountGetClearedBalance (leader);
if (reverse)
amount = gnc_numeric_neg (amount);
xaccSPrintAmount(string, amount, print_info);
if (euro)
{
amount = xaccAccountGetClearedBalance (ledger->leader);
if (reverse)
amount = gnc_numeric_neg (amount);
xaccSPrintAmount(string, amount, print_info);
if (euro)
{
strcat(string, " / ");
xaccSPrintAmount(string + strlen(string),
gnc_convert_to_euro(currency, amount),
gnc_commodity_print_info (gnc_get_euro (), TRUE));
}
gnc_set_label_color(regData->cleared_label, amount);
gtk_label_set_text(GTK_LABEL(regData->cleared_label), string);
strcat(string, " / ");
xaccSPrintAmount(string + strlen(string),
gnc_convert_to_euro(currency, amount),
gnc_commodity_print_info (gnc_get_euro (), TRUE));
}
gnc_reg_set_window_name(regData);
gnc_set_label_color(regData->cleared_label, amount);
gtk_label_set_text(GTK_LABEL(regData->cleared_label), string);
}
gnc_reg_set_window_name (regData);
{
gboolean expand;
gboolean sensitive;
expand = xaccSRCurrentTransExpanded (regData->ledger->ledger);
gtk_signal_handler_block_by_data
(GTK_OBJECT (regData->split_button), regData);
gtk_toggle_button_set_active
(GTK_TOGGLE_BUTTON (regData->split_button), expand);
gtk_signal_handler_unblock_by_data
(GTK_OBJECT (regData->split_button), regData);
gtk_signal_handler_block_by_data
(GTK_OBJECT (regData->split_menu_check), regData);
gtk_check_menu_item_set_active
(GTK_CHECK_MENU_ITEM (regData->split_menu_check), expand);
gtk_signal_handler_unblock_by_data
(GTK_OBJECT (regData->split_menu_check), regData);
gtk_check_menu_item_set_active
(GTK_CHECK_MENU_ITEM (regData->split_popup_check), expand);
sensitive = regData->ledger->ledger->style == REG_STYLE_LEDGER;
gtk_widget_set_sensitive (regData->split_button, sensitive);
}
}
@ -1985,7 +1997,7 @@ gnc_reg_save_size(RegWindow *regData)
static void
regDestroy(xaccLedgerDisplay *ledger)
{
RegWindow *regData = (RegWindow *) (ledger->gui_hook);
RegWindow *regData = ledger->gui_hook;
if (regData)
{
@ -2179,7 +2191,7 @@ xferCB(GtkWidget * w, gpointer data)
static void
editCB(GtkWidget * w, gpointer data)
{
RegWindow *regData = (RegWindow *) data;
RegWindow *regData = data;
xaccLedgerDisplay *ledger = regData->ledger;
Account *account = ledger->leader;
@ -2201,7 +2213,7 @@ editCB(GtkWidget * w, gpointer data)
static void
startRecnCB(GtkWidget * w, gpointer data)
{
RegWindow *regData = (RegWindow *) data;
RegWindow *regData = data;
xaccLedgerDisplay *ledger = regData->ledger;
Account *account = ledger->leader;
@ -2515,9 +2527,9 @@ deleteCB(GtkWidget *widget, gpointer data)
\********************************************************************/
static void duplicateCB(GtkWidget *w, gpointer data)
{
RegWindow *regData = (RegWindow *) data;
RegWindow *regData = data;
xaccSRDuplicateCurrent(regData->ledger->ledger);
xaccSRDuplicateCurrent (regData->ledger->ledger);
}
@ -2531,9 +2543,9 @@ static void duplicateCB(GtkWidget *w, gpointer data)
static void
cancelCB(GtkWidget *w, gpointer data)
{
RegWindow *regData = (RegWindow *) data;
RegWindow *regData = data;
xaccSRCancelCursorTransChanges(regData->ledger->ledger);
xaccSRCancelCursorTransChanges (regData->ledger->ledger);
}
@ -2568,15 +2580,15 @@ gnc_register_check_close(RegWindow *regData)
* Return: none *
\********************************************************************/
static void
closeCB(GtkWidget *widget, gpointer data)
closeCB (GtkWidget *widget, gpointer data)
{
RegWindow *regData = data;
gnc_register_check_close(regData);
gnc_register_check_close (regData);
gnc_reg_save_size(regData);
gnc_reg_save_size (regData);
gtk_widget_destroy(regData->window);
gtk_widget_destroy (regData->window);
}
/********************************************************************\

View File

@ -59,6 +59,7 @@ static void gnucash_sheet_stop_editing (GnucashSheet *sheet);
enum
{
ACTIVATE_CURSOR,
REDRAW_ALL,
LAST_SIGNAL
};
@ -554,6 +555,8 @@ gnucash_sheet_redraw_all (GnucashSheet *sheet)
gnome_canvas_request_redraw (GNOME_CANVAS (sheet), 0, 0,
sheet->width + 1, sheet->height + 1);
gtk_signal_emit_by_name (GTK_OBJECT (sheet->reg), "redraw_all");
}
@ -2127,8 +2130,20 @@ gnucash_register_class_init (GnucashRegisterClass *class)
gtk_marshal_NONE__NONE,
GTK_TYPE_NONE, 0);
register_signals[REDRAW_ALL] =
gtk_signal_new("redraw_all",
GTK_RUN_LAST,
object_class->type,
GTK_SIGNAL_OFFSET(GnucashRegisterClass,
redraw_all),
gtk_marshal_NONE__NONE,
GTK_TYPE_NONE, 0);
gtk_object_class_add_signals(object_class, register_signals,
LAST_SIGNAL);
class->activate_cursor = NULL;
class->redraw_all = NULL;
}

View File

@ -56,7 +56,8 @@ typedef struct
} SheetBlock;
typedef struct {
typedef struct
{
GnomeCanvas canvas;
GtkWidget *window;
@ -190,15 +191,18 @@ void gnucash_register_copy_clipboard (GnucashRegister *reg);
void gnucash_register_paste_clipboard (GnucashRegister *reg);
typedef struct {
typedef struct
{
GnomeCanvasClass parent_class;
} GnucashSheetClass;
typedef struct {
typedef struct
{
GtkTableClass parent_class;
void (*activate_cursor) (GnucashRegister *reg);
void (*redraw_all) (GnucashRegister *reg);
} GnucashRegisterClass;
#endif

View File

@ -208,7 +208,7 @@ gnc_table_refresh_cursor_gui (Table * table,
if (gnc_table_virtual_cell_out_of_bounds (table, vcell_loc))
return;
sheet = GNUCASH_SHEET(table->ui_data);
sheet = GNUCASH_SHEET (table->ui_data);
gnucash_sheet_cursor_set_from_table (sheet, do_scroll);
if (gnucash_sheet_block_set_from_table (sheet, vcell_loc))
@ -216,7 +216,7 @@ gnc_table_refresh_cursor_gui (Table * table,
g_warning ("woops");
gnucash_sheet_recompute_block_offsets (sheet);
gnucash_sheet_set_scroll_region (sheet);
gnucash_sheet_compute_visible_range(sheet);
gnucash_sheet_compute_visible_range (sheet);
gnucash_sheet_redraw_all (sheet);
}
else