diff --git a/src/MultiLedger.c b/src/MultiLedger.c index 0dec350886..af76b1edf2 100644 --- a/src/MultiLedger.c +++ b/src/MultiLedger.c @@ -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); - } } /********************************************************************\ diff --git a/src/MultiLedger.h b/src/MultiLedger.h index ac5df37934..3fdd29c141 100644 --- a/src/MultiLedger.h +++ b/src/MultiLedger.h @@ -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); diff --git a/src/SplitLedger.c b/src/SplitLedger.c index 737df6f240..a180f598ae 100644 --- a/src/SplitLedger.c +++ b/src/SplitLedger.c @@ -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; diff --git a/src/SplitLedger.h b/src/SplitLedger.h index aca37c6d98..0bfe17206c 100644 --- a/src/SplitLedger.h +++ b/src/SplitLedger.h @@ -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, diff --git a/src/gnome/window-register.c b/src/gnome/window-register.c index a04de483ed..54a23e91ed 100644 --- a/src/gnome/window-register.c +++ b/src/gnome/window-register.c @@ -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); } /********************************************************************\ diff --git a/src/register/gnome/gnucash-sheet.c b/src/register/gnome/gnucash-sheet.c index e083f4bcfc..17e6facc56 100644 --- a/src/register/gnome/gnucash-sheet.c +++ b/src/register/gnome/gnucash-sheet.c @@ -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; } diff --git a/src/register/gnome/gnucash-sheet.h b/src/register/gnome/gnucash-sheet.h index 08fcfc4154..188ea59e1b 100644 --- a/src/register/gnome/gnucash-sheet.h +++ b/src/register/gnome/gnucash-sheet.h @@ -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 diff --git a/src/register/table-gnome.c b/src/register/table-gnome.c index 80a97001c1..23c84ad9c3 100644 --- a/src/register/table-gnome.c +++ b/src/register/table-gnome.c @@ -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