Extract the GnucashRegister widget into a separate file

It was interleaved in the gnucash-sheet.* sources making it harder to examine
This commit is contained in:
Geert Janssens 2017-03-10 11:55:27 +01:00
parent 5223ca8c81
commit 03699efe14
15 changed files with 707 additions and 563 deletions

View File

@ -557,6 +557,7 @@ src/register/register-gnome/gnucash-date-picker.c
src/register/register-gnome/gnucash-header.c
src/register/register-gnome/gnucash-item-edit.c
src/register/register-gnome/gnucash-item-list.c
src/register/register-gnome/gnucash-register.c
src/register/register-gnome/gnucash-scrolled-window.c
src/register/register-gnome/gnucash-sheet.c
src/register/register-gnome/gnucash-sheet-private.c

View File

@ -42,6 +42,7 @@
#include "gnc-date-edit.h"
#include "gnc-amount-edit.h"
#include "gnucash-sheet.h"
#include "gnucash-register.h"
#include "window-report.h"
#include "dialog-search.h"
#include "search-param.h"
@ -2417,9 +2418,8 @@ gnc_invoice_create_page (InvoiceWindow *iw, gpointer page)
/* Watch the order of operations, here... */
regWidget = gnucash_register_new (gnc_entry_ledger_get_table
(entry_ledger));
(entry_ledger), NULL);
gtk_widget_show(regWidget);
gnc_table_init_gui( regWidget, NULL);
frame = GTK_WIDGET (gtk_builder_get_object (builder, "ledger_frame"));
gtk_container_add (GTK_CONTAINER (frame), regWidget);

View File

@ -33,6 +33,7 @@
#include "gnc-gui-query.h"
#include "gnc-ui-util.h"
#include "qof.h"
#include "gnucash-register.h"
#include "gnucash-sheet.h"
#include "dialog-search.h"
#include "search-param.h"
@ -641,8 +642,8 @@ gnc_order_new_window (QofBook *bookp, OrderDialogType type,
// gnc_entry_ledger_load (entry_ledger, entries);
/* Watch the order of operations, here... */
regWidget = gnucash_register_new (gnc_entry_ledger_get_table (entry_ledger));
gnc_table_init_gui( regWidget, NULL);
regWidget = gnucash_register_new (gnc_entry_ledger_get_table (entry_ledger),
NULL);
ow->reg = GNUCASH_REGISTER (regWidget);
gnucash_sheet_set_window (gnucash_register_get_sheet (ow->reg), ow->dialog);
gnc_entry_ledger_set_parent (entry_ledger, ow->dialog);

View File

@ -37,7 +37,7 @@
#include "gnc-gobject-utils.h"
#include "gnc-gnome-utils.h"
#include "gnc-icons.h"
#include "gnucash-sheet.h"
#include "gnucash-register.h"
#include "gnc-prefs.h"
#include "gnc-ui-util.h"
#include "gnc-window.h"

View File

@ -52,6 +52,7 @@
#include "gnc-ui.h"
#include "gnome-utils/gnc-warnings.h"
#include "gnucash-sheet.h"
#include "gnucash-register.h"
#include "table-allgui.h"
#include "dialog-utils.h"
@ -401,9 +402,8 @@ gsr_create_table( GNCSplitReg *gsr )
/* FIXME: We'd really rather pass this down... */
sr = gnc_ledger_display_get_split_register( gsr->ledger );
register_widget = gnucash_register_new( sr->table );
register_widget = gnucash_register_new( sr->table, state_section );
gsr->reg = GNUCASH_REGISTER( register_widget );
gnc_table_init_gui( GTK_WIDGET(gsr->reg), state_section);
g_free (state_section);
gtk_box_pack_start (GTK_BOX (gsr), GTK_WIDGET(gsr->reg), TRUE, TRUE, 0);
gnucash_sheet_set_window (gnucash_register_get_sheet (gsr->reg), gsr->window);

View File

@ -30,7 +30,7 @@
#define GNC_SPLIT_REG_H
#include "gnc-ledger-display.h"
#include "gnucash-sheet.h"
#include "gnucash-register.h"
#define GNC_SPLIT_REG(obj) G_TYPE_CHECK_INSTANCE_CAST( obj, gnc_split_reg_get_type(), GNCSplitReg )
#define GNC_SPLIT_REG_CLASS(klass) G_TYPE_CHECK_CLASS_CAST( klass, gnc_split_reg_get_type(), GNCSplitRegClass )
@ -77,7 +77,7 @@ struct _GNCSplitReg
/** The current ledger display. **/
GNCLedgerDisplay *ledger;
/** The actual sheet widget. **/
/** The actual gnucash register widget. **/
GnucashRegister *reg;
gint numRows;

View File

@ -408,7 +408,7 @@ gboolean gnc_table_find_close_valid_cell (Table *table,
/** UI-specific functions *******************************/
/** Initialize the GUI from a table */
void gnc_table_init_gui (GtkWidget *widget, gchar * state_section);
void gnc_table_init_gui (Table *table);
void gnc_table_realize_gui (Table *table);

View File

@ -11,6 +11,7 @@ SET (register_gnome_SOURCES
gnucash-header.c
gnucash-item-edit.c
gnucash-item-list.c
gnucash-register.c
gnucash-scrolled-window.c
gnucash-sheet-private.c
gnucash-sheet.c
@ -28,6 +29,7 @@ SET (register_gnome_noinst_HEADERS
gnucash-header.h
gnucash-item-edit.h
gnucash-item-list.h
gnucash-register.h
gnucash-scrolled-window.h
gnucash-sheet.h
gnucash-sheetP.h

View File

@ -26,6 +26,7 @@ libgncmod_register_gnome_la_SOURCES = \
gnucash-header.c \
gnucash-item-edit.c \
gnucash-item-list.c \
gnucash-register.c \
gnucash-scrolled-window.c \
gnucash-sheet-private.c \
gnucash-sheet.c \
@ -42,6 +43,7 @@ noinst_HEADERS = \
gnucash-header.h \
gnucash-item-edit.h \
gnucash-item-list.h \
gnucash-register.h \
gnucash-scrolled-window.h \
gnucash-sheet.h \
gnucash-sheetP.h \

View File

@ -0,0 +1,588 @@
/********************************************************************\
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License as *
* published by the Free Software Foundation; either version 2 of *
* the License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License*
* along with this program; if not, contact: *
* *
* Free Software Foundation Voice: +1-617-542-5942 *
* 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 *
* Boston, MA 02110-1301, USA gnu@gnu.org *
* *
\********************************************************************/
/*
* The Gnucash Register widget
*
* Based heavily on the Gnumeric Sheet widget.
*
* Authors:
* Heath Martin <martinh@pegasus.cc.ucf.edu>
* Dave Peticolas <dave@krondo.com>
*/
#include "config.h"
#include <glib.h>
#include <glib/gprintf.h>
#include <gdk/gdkkeysyms.h>
#include "gnucash-register.h"
#include "gnucash-sheet.h"
#include "gnucash-sheetP.h"
#include "gnucash-cursor.h"
#include "gnucash-style.h"
#include "gnucash-header.h"
#include "gnucash-item-edit.h"
#include "split-register.h"
#include "gnc-engine.h" // For debugging, e.g. ENTER(), LEAVE()
#include "gnc-prefs.h"
#include "gnc-state.h"
/* Register signals */
enum
{
ACTIVATE_CURSOR,
REDRAW_ALL,
REDRAW_HELP,
LAST_SIGNAL
};
/** Static Globals *****************************************************/
/* This static indicates the debugging module that this .o belongs to. */
static QofLogModule log_module = GNC_MOD_REGISTER;
static GtkTable *register_parent_class;
static guint register_signals[LAST_SIGNAL];
struct _GnucashRegister
{
GtkTable table;
GtkWidget *hscrollbar;
GtkWidget *sheet;
gboolean hscrollbar_visible;
};
struct _GnucashRegisterClass
{
GtkTableClass parent_class;
void (*activate_cursor) (GnucashRegister *reg);
void (*redraw_all) (GnucashRegister *reg);
void (*redraw_help) (GnucashRegister *reg);
};
/** Implementation *****************************************************/
gboolean
gnucash_register_has_selection (GnucashRegister *reg)
{
GnucashSheet *sheet;
GncItemEdit *item_edit;
g_return_val_if_fail((reg != NULL), FALSE);
g_return_val_if_fail(GNUCASH_IS_REGISTER(reg), FALSE);
sheet = GNUCASH_SHEET(reg->sheet);
item_edit = GNC_ITEM_EDIT(sheet->item_editor);
return gnc_item_edit_get_has_selection(item_edit);
}
void
gnucash_register_cut_clipboard (GnucashRegister *reg)
{
GnucashSheet *sheet;
GncItemEdit *item_edit;
g_return_if_fail(reg != NULL);
g_return_if_fail(GNUCASH_IS_REGISTER(reg));
sheet = GNUCASH_SHEET(reg->sheet);
item_edit = GNC_ITEM_EDIT(sheet->item_editor);
gnc_item_edit_cut_clipboard(item_edit);
}
void
gnucash_register_copy_clipboard (GnucashRegister *reg)
{
GnucashSheet *sheet;
GncItemEdit *item_edit;
g_return_if_fail(reg != NULL);
g_return_if_fail(GNUCASH_IS_REGISTER(reg));
sheet = GNUCASH_SHEET(reg->sheet);
item_edit = GNC_ITEM_EDIT(sheet->item_editor);
gnc_item_edit_copy_clipboard(item_edit);
}
void
gnucash_register_paste_clipboard (GnucashRegister *reg)
{
GnucashSheet *sheet;
GncItemEdit *item_edit;
g_return_if_fail(reg != NULL);
g_return_if_fail(GNUCASH_IS_REGISTER(reg));
sheet = GNUCASH_SHEET(reg->sheet);
item_edit = GNC_ITEM_EDIT(sheet->item_editor);
gnc_item_edit_paste_clipboard (item_edit);
}
void
gnucash_register_refresh_from_prefs (GnucashRegister *reg)
{
GnucashSheet *sheet;
g_return_if_fail(reg != NULL);
g_return_if_fail(GNUCASH_IS_REGISTER(reg));
sheet = GNUCASH_SHEET(reg->sheet);
gnucash_sheet_refresh_from_prefs(sheet);
}
void
gnucash_register_goto_virt_cell (GnucashRegister *reg,
VirtualCellLocation vcell_loc)
{
GnucashSheet *sheet;
VirtualLocation virt_loc;
g_return_if_fail(reg != NULL);
g_return_if_fail(GNUCASH_IS_REGISTER(reg));
sheet = GNUCASH_SHEET(reg->sheet);
virt_loc.vcell_loc = vcell_loc;
virt_loc.phys_row_offset = 0;
virt_loc.phys_col_offset = 0;
gnucash_sheet_goto_virt_loc(sheet, virt_loc);
}
void
gnucash_register_goto_virt_loc (GnucashRegister *reg,
VirtualLocation virt_loc)
{
GnucashSheet *sheet;
g_return_if_fail(reg != NULL);
g_return_if_fail(GNUCASH_IS_REGISTER(reg));
sheet = GNUCASH_SHEET(reg->sheet);
gnucash_sheet_goto_virt_loc(sheet, virt_loc);
}
void
gnucash_register_goto_next_virt_row (GnucashRegister *reg)
{
GnucashSheet *sheet;
VirtualLocation virt_loc;
int start_virt_row;
g_return_if_fail (reg != NULL);
g_return_if_fail (GNUCASH_IS_REGISTER(reg));
sheet = GNUCASH_SHEET(reg->sheet);
gnucash_cursor_get_virt (GNUCASH_CURSOR(sheet->cursor), &virt_loc);
/* Move down one physical row at a time until we
* reach the next visible virtual cell. */
start_virt_row = virt_loc.vcell_loc.virt_row;
do
{
if (!gnc_table_move_vertical_position (sheet->table, &virt_loc, 1))
return;
}
while (start_virt_row == virt_loc.vcell_loc.virt_row);
if (virt_loc.vcell_loc.virt_row >= sheet->num_virt_rows)
return;
virt_loc.phys_row_offset = 0;
virt_loc.phys_col_offset = 0;
gnucash_sheet_goto_virt_loc (sheet, virt_loc);
}
void
gnucash_register_goto_next_matching_row (GnucashRegister *reg,
VirtualLocationMatchFunc match,
gpointer user_data)
{
GnucashSheet *sheet;
SheetBlockStyle *style;
VirtualLocation virt_loc;
g_return_if_fail (reg != NULL);
g_return_if_fail (GNUCASH_IS_REGISTER(reg));
g_return_if_fail (match != NULL);
sheet = GNUCASH_SHEET (reg->sheet);
gnucash_cursor_get_virt (GNUCASH_CURSOR(sheet->cursor), &virt_loc);
do
{
if (!gnc_table_move_vertical_position (sheet->table,
&virt_loc, 1))
return;
if (virt_loc.vcell_loc.virt_row >= sheet->num_virt_rows)
return;
style = gnucash_sheet_get_style (sheet, virt_loc.vcell_loc);
if (!style || !style->cursor)
return;
}
while (!match (virt_loc, user_data));
virt_loc.phys_row_offset = 0;
virt_loc.phys_col_offset = 0;
gnucash_sheet_goto_virt_loc (sheet, virt_loc);
}
static void
gnucash_register_update_hadjustment (GtkAdjustment *adj,
GnucashRegister *reg)
{
g_return_if_fail (reg != NULL);
g_return_if_fail (GNUCASH_IS_REGISTER(reg));
if (gtk_adjustment_get_upper (adj) - gtk_adjustment_get_lower (adj)
> gtk_adjustment_get_page_size (adj))
{
if (!reg->hscrollbar_visible)
{
gtk_widget_show(reg->hscrollbar);
reg->hscrollbar_visible = TRUE;
}
}
else
{
if (reg->hscrollbar_visible)
{
gtk_widget_hide(reg->hscrollbar);
reg->hscrollbar_visible = FALSE;
}
}
}
/*************************************************************/
static void
gnucash_register_class_init (GnucashRegisterClass *klass)
{
GObjectClass *gobject_class;
gobject_class = G_OBJECT_CLASS (klass);
register_parent_class = g_type_class_peek_parent (klass);
register_signals[ACTIVATE_CURSOR] =
g_signal_new("activate_cursor",
G_TYPE_FROM_CLASS(gobject_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET(GnucashRegisterClass,
activate_cursor),
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
register_signals[REDRAW_ALL] =
g_signal_new("redraw_all",
G_TYPE_FROM_CLASS(gobject_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET(GnucashRegisterClass,
redraw_all),
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
register_signals[REDRAW_HELP] =
g_signal_new("redraw_help",
G_TYPE_FROM_CLASS(gobject_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET(GnucashRegisterClass,
redraw_help),
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
klass->activate_cursor = NULL;
klass->redraw_all = NULL;
klass->redraw_help = NULL;
}
static void
gnucash_register_init (GnucashRegister *g_reg)
{
GtkTable *table = GTK_TABLE(g_reg);
gtk_widget_set_can_focus (GTK_WIDGET(table), FALSE);
gtk_widget_set_can_default (GTK_WIDGET(table), FALSE);
gtk_table_set_homogeneous (table, FALSE);
gtk_table_resize (table, 3, 2);
}
GType
gnucash_register_get_type (void)
{
static GType gnucash_register_type = 0;
if (!gnucash_register_type)
{
static const GTypeInfo gnucash_register_info =
{
sizeof (GnucashRegisterClass),
NULL, /* base_init */
NULL, /* base_finalize */
(GClassInitFunc) gnucash_register_class_init,
NULL, /* class_finalize */
NULL, /* class_data */
sizeof (GnucashRegister),
0, /* n_preallocs */
(GInstanceInitFunc) gnucash_register_init,
};
gnucash_register_type = g_type_register_static
(gtk_table_get_type (),
"GnucashRegister",
&gnucash_register_info, 0);
}
return gnucash_register_type;
}
void
gnucash_register_attach_popup (GnucashRegister *reg,
GtkWidget *popup,
gpointer data)
{
g_return_if_fail (GNUCASH_IS_REGISTER(reg));
g_return_if_fail (reg->sheet != NULL);
if (popup)
g_return_if_fail (GTK_IS_WIDGET(popup));
gnucash_sheet_set_popup (GNUCASH_SHEET (reg->sheet), popup, data);
}
/* Um, this function checks that data is not null but never uses it.
* Weird. Also, since this function only works with a GnucashRegister
* widget, maybe some of it should be moved to gnucash-sheet.c. */
/* Adding to previous note: Since data doesn't appear do anything and to
* align the function with save_state() I've removed the check for
* NULL and changed two calls in dialog_order.c and dialog_invoice.c
* to pass NULL as second parameter. */
static void
gnucash_register_configure (GnucashSheet *sheet, gchar * state_section)
{
GNCHeaderWidths widths;
GnucashRegister *greg;
Table *table;
GList *node;
gchar *key;
guint value;
GKeyFile *state_file = gnc_state_get_current();
// Stuff for per-register settings load.
g_return_if_fail (sheet != NULL);
g_return_if_fail (GNUCASH_IS_SHEET (sheet));
PINFO("state_section=%s",state_section);
ENTER("sheet=%p, data=%p", sheet, "");
table = sheet->table;
gnc_table_init_gui (table);
table->ui_data = sheet;
g_object_ref (sheet);
/* config the cell-block styles */
widths = gnc_header_widths_new ();
if (state_section && gnc_prefs_get_bool(GNC_PREFS_GROUP_GENERAL, GNC_PREF_SAVE_GEOMETRY))
{
node = gnc_table_layout_get_cells (table->layout);
for (; node; node = node->next)
{
BasicCell *cell = node->data;
if (cell->expandable)
continue;
/* Remember whether the column is visible */
key = g_strdup_printf("%s_width", cell->cell_name);
value = g_key_file_get_integer (state_file, state_section, key, NULL);
if (value != 0)
gnc_header_widths_set_width (widths, cell->cell_name, value);
g_free(key);
}
}
gnucash_sheet_create_styles (sheet);
gnucash_sheet_set_header_widths (sheet, widths);
gnucash_sheet_compile_styles (sheet);
gnucash_sheet_table_load (sheet, TRUE);
gnucash_sheet_cursor_set_from_table (sheet, TRUE);
gnucash_sheet_redraw_all (sheet);
gnc_header_widths_destroy (widths);
LEAVE(" ");
}
static GtkWidget *
gnucash_register_create_widget (Table *table)
{
GnucashRegister *reg;
GtkWidget *header;
GtkWidget *widget;
GtkWidget *sheet;
GtkWidget *scrollbar;
GtkWidget *box;
reg = g_object_new (GNUCASH_TYPE_REGISTER, NULL);
widget = GTK_WIDGET(reg);
sheet = gnucash_sheet_new (table);
reg->sheet = sheet;
GNUCASH_SHEET(sheet)->reg = widget;
header = gnc_header_new (GNUCASH_SHEET(sheet));
gtk_table_attach (GTK_TABLE(widget), header,
0, 1, 0, 1,
GTK_FILL | GTK_EXPAND | GTK_SHRINK,
GTK_FILL,
0, 0);
gtk_widget_show(header);
gtk_table_attach (GTK_TABLE(widget), sheet,
0, 1, 1, 2,
GTK_FILL | GTK_EXPAND | GTK_SHRINK,
GTK_FILL | GTK_EXPAND | GTK_SHRINK,
0, 0);
gtk_widget_show(sheet);
scrollbar = gtk_vscrollbar_new(GNUCASH_SHEET(sheet)->vadj);
gtk_table_attach (GTK_TABLE(widget), GTK_WIDGET(scrollbar),
1, 2, 0, 3,
GTK_FILL,
GTK_EXPAND | GTK_SHRINK | GTK_FILL,
0, 0);
gtk_widget_show(scrollbar);
scrollbar = gtk_hscrollbar_new(GNUCASH_SHEET(sheet)->hadj);
gtk_table_attach (GTK_TABLE(widget), GTK_WIDGET(scrollbar),
0, 1, 2, 3,
GTK_EXPAND | GTK_SHRINK | GTK_FILL,
GTK_FILL,
0, 0);
reg->hscrollbar = scrollbar;
gtk_widget_show(scrollbar);
reg->hscrollbar_visible = TRUE;
/* The gtkrc color helper widgets need to be part of a window
* hierarchy so they can be realized. Stick them in a box
* underneath the register, but don't show the box to the
* user. */
box = gtk_hbox_new(FALSE, 0);
gtk_widget_set_no_show_all(GTK_WIDGET(box), TRUE);
gtk_box_pack_start(GTK_BOX(box),
GNUCASH_SHEET(sheet)->header_color, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(box),
GNUCASH_SHEET(sheet)->primary_color, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(box),
GNUCASH_SHEET(sheet)->secondary_color, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(box),
GNUCASH_SHEET(sheet)->split_color, TRUE, TRUE, 0);
gtk_table_attach (GTK_TABLE(widget), box,
0, 1, 4, 5,
GTK_FILL | GTK_EXPAND | GTK_SHRINK,
GTK_FILL | GTK_EXPAND | GTK_SHRINK,
0, 0);
g_signal_connect (GNUCASH_SHEET(sheet)->hadj, "changed",
G_CALLBACK (gnucash_register_update_hadjustment), reg);
return widget;
}
GtkWidget *
gnucash_register_new (Table *table, gchar *state_section)
{
GnucashRegister *reg;
GtkWidget *header;
GtkWidget *widget;
GtkWidget *sheet;
GtkWidget *scrollbar;
GtkWidget *box;
widget = gnucash_register_create_widget(table);
reg = GNUCASH_REGISTER(widget);
gnucash_register_configure (GNUCASH_SHEET(reg->sheet), state_section);
return widget;
}
void gnucash_register_set_moved_cb (GnucashRegister *reg,
GFunc cb, gpointer cb_data)
{
GnucashSheet *sheet;
if (!reg || !reg->sheet)
return;
sheet = GNUCASH_SHEET(reg->sheet);
sheet->moved_cb = cb;
sheet->moved_cb_data = cb_data;
}
GnucashSheet *gnucash_register_get_sheet (GnucashRegister *reg)
{
g_return_val_if_fail (reg != NULL, NULL);
g_return_val_if_fail (GNUCASH_IS_REGISTER(reg), NULL);
return GNUCASH_SHEET(reg->sheet);
}

View File

@ -0,0 +1,81 @@
/********************************************************************\
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License as *
* published by the Free Software Foundation; either version 2 of *
* the License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License*
* along with this program; if not, contact: *
* *
* Free Software Foundation Voice: +1-617-542-5942 *
* 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 *
* Boston, MA 02110-1301, USA gnu@gnu.org *
* *
\********************************************************************/
#ifndef GNUCASH_REGISTER_H
#define GNUCASH_REGISTER_H
#include <gtk/gtk.h>
#include "split-register-model.h"
#include "table-allgui.h"
#include "gnucash-sheet.h"
/** @ingroup Register
* @addtogroup Gnome
* @{
*/
/** @file gnucash-sheet.h
* @brief Public declarations of GnucashRegister class.
*/
#define GNUCASH_TYPE_REGISTER (gnucash_register_get_type ())
#define GNUCASH_REGISTER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GNUCASH_TYPE_REGISTER, GnucashRegister))
#define GNUCASH_REGISTER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GNUCASH_TYPE_REGISTER))
#define GNUCASH_IS_REGISTER(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), GNUCASH_TYPE_REGISTER))
typedef struct _GnucashRegister GnucashRegister;
typedef struct _GnucashRegisterClass GnucashRegisterClass;
GType gnucash_register_get_type (void);
/** this already has scrollbars attached */
GtkWidget *gnucash_register_new (Table *table, gchar *state_section);
void gnucash_register_goto_virt_cell (GnucashRegister *reg,
VirtualCellLocation vcell_loc);
void gnucash_register_goto_virt_loc (GnucashRegister *reg,
VirtualLocation virt_loc);
void gnucash_register_goto_next_virt_row (GnucashRegister *reg);
typedef gboolean (*VirtualLocationMatchFunc) (VirtualLocation virt_loc,
gpointer user_data);
void gnucash_register_goto_next_matching_row (GnucashRegister *reg,
VirtualLocationMatchFunc match,
gpointer user_data);
void gnucash_register_attach_popup(GnucashRegister *reg, GtkWidget *popup,
gpointer data);
gboolean gnucash_register_has_selection (GnucashRegister *reg);
void gnucash_register_cut_clipboard (GnucashRegister *reg);
void gnucash_register_copy_clipboard (GnucashRegister *reg);
void gnucash_register_paste_clipboard (GnucashRegister *reg);
void gnucash_register_refresh_from_prefs (GnucashRegister *reg);
void gnucash_register_set_moved_cb (GnucashRegister *reg,
GFunc cb, gpointer cb_data);
GnucashSheet *gnucash_register_get_sheet (GnucashRegister *reg);
/** @} */
#endif

View File

@ -50,10 +50,10 @@
# include <gdk/gdkwin32.h>
#endif
#define DEFAULT_REGISTER_HEIGHT 400
#define DEFAULT_REGISTER_WIDTH 400
/* Used to calculate the minimum preferred height of the register window: */
#define DEFAULT_REGISTER_INITIAL_ROWS 10
#define DEFAULT_SHEET_HEIGHT 400
#define DEFAULT_SHEET_WIDTH 400
/* Used to calculate the minimum preferred height of the sheet layout: */
#define DEFAULT_SHEET_INITIAL_ROWS 10
/* Register signals */
@ -71,8 +71,6 @@ enum
/* This static indicates the debugging module that this .o belongs to. */
static QofLogModule log_module = GNC_MOD_REGISTER;
static GtkLayout *sheet_parent_class;
static GtkTable *register_parent_class;
static guint register_signals[LAST_SIGNAL];
/** Prototypes *********************************************************/
@ -181,7 +179,7 @@ gnucash_sheet_cursor_set_from_table (GnucashSheet *sheet, gboolean do_scroll)
}
static void
void
gnucash_sheet_set_popup (GnucashSheet *sheet, GtkWidget *popup, gpointer data)
{
if (popup)
@ -623,37 +621,6 @@ gnucash_sheet_vadjustment_value_changed (GtkAdjustment *adj,
}
static void
gnucash_sheet_hadjustment_changed (GtkAdjustment *adj,
GnucashSheet *sheet)
{
GnucashRegister *reg;
g_return_if_fail (sheet != NULL);
g_return_if_fail (GNUCASH_IS_SHEET(sheet));
reg = GNUCASH_REGISTER(sheet->reg);
g_return_if_fail (reg != NULL);
if (gtk_adjustment_get_upper (adj) - gtk_adjustment_get_lower (adj)
> gtk_adjustment_get_page_size (adj))
{
if (!reg->hscrollbar_visible)
{
gtk_widget_show(reg->hscrollbar);
reg->hscrollbar_visible = TRUE;
}
}
else
{
if (reg->hscrollbar_visible)
{
gtk_widget_hide(reg->hscrollbar);
reg->hscrollbar_visible = FALSE;
}
}
}
void
gnucash_sheet_redraw_all (GnucashSheet *sheet)
{
@ -742,8 +709,6 @@ gnucash_sheet_create (Table *table)
g_signal_connect (G_OBJECT (sheet->vadj), "value_changed",
G_CALLBACK (gnucash_sheet_vadjustment_value_changed), sheet);
g_signal_connect (G_OBJECT (sheet->hadj), "changed",
G_CALLBACK (gnucash_sheet_hadjustment_changed), sheet);
LEAVE("%p", sheet);
return sheet;
@ -752,7 +717,7 @@ gnucash_sheet_create (Table *table)
static gint
compute_optimal_width (GnucashSheet *sheet)
{
return DEFAULT_REGISTER_WIDTH;
return DEFAULT_SHEET_WIDTH;
}
@ -765,19 +730,19 @@ compute_optimal_height (GnucashSheet *sheet)
gint row_height;
if (!sheet)
return DEFAULT_REGISTER_HEIGHT;
return DEFAULT_SHEET_HEIGHT;
style = gnucash_sheet_get_style_from_cursor (sheet, CURSOR_HEADER);
if (!style)
return DEFAULT_REGISTER_HEIGHT;
return DEFAULT_SHEET_HEIGHT;
cd = gnucash_style_get_cell_dimensions (style, 0, 0);
if (cd == NULL)
return DEFAULT_REGISTER_HEIGHT;
return DEFAULT_SHEET_HEIGHT;
row_height = cd->pixel_height;
return row_height * DEFAULT_REGISTER_INITIAL_ROWS;
return row_height * DEFAULT_SHEET_INITIAL_ROWS;
}
@ -1356,7 +1321,6 @@ static gboolean
gnucash_button_press_event (GtkWidget *widget, GdkEventButton *event)
{
GnucashSheet *sheet;
GtkEditable *editable;
VirtualCell *vcell;
gboolean changed_cells;
@ -1458,67 +1422,7 @@ gnucash_button_press_event (GtkWidget *widget, GdkEventButton *event)
return button_1 || do_popup;
}
gboolean
gnucash_register_has_selection (GnucashRegister *reg)
{
GnucashSheet *sheet;
GncItemEdit *item_edit;
g_return_val_if_fail((reg != NULL), FALSE);
g_return_val_if_fail(GNUCASH_IS_REGISTER(reg), FALSE);
sheet = GNUCASH_SHEET(reg->sheet);
item_edit = GNC_ITEM_EDIT(sheet->item_editor);
return gnc_item_edit_get_has_selection(item_edit);
}
void
gnucash_register_cut_clipboard (GnucashRegister *reg)
{
GnucashSheet *sheet;
GncItemEdit *item_edit;
g_return_if_fail(reg != NULL);
g_return_if_fail(GNUCASH_IS_REGISTER(reg));
sheet = GNUCASH_SHEET(reg->sheet);
item_edit = GNC_ITEM_EDIT(sheet->item_editor);
gnc_item_edit_cut_clipboard(item_edit);
}
void
gnucash_register_copy_clipboard (GnucashRegister *reg)
{
GnucashSheet *sheet;
GncItemEdit *item_edit;
g_return_if_fail(reg != NULL);
g_return_if_fail(GNUCASH_IS_REGISTER(reg));
sheet = GNUCASH_SHEET(reg->sheet);
item_edit = GNC_ITEM_EDIT(sheet->item_editor);
gnc_item_edit_copy_clipboard(item_edit);
}
void
gnucash_register_paste_clipboard (GnucashRegister *reg)
{
GnucashSheet *sheet;
GncItemEdit *item_edit;
g_return_if_fail(reg != NULL);
g_return_if_fail(GNUCASH_IS_REGISTER(reg));
sheet = GNUCASH_SHEET(reg->sheet);
item_edit = GNC_ITEM_EDIT(sheet->item_editor);
gnc_item_edit_paste_clipboard (item_edit);
}
static void
gnucash_sheet_refresh_from_prefs (GnucashSheet *sheet)
{
g_return_if_fail(sheet != NULL);
@ -1532,18 +1436,6 @@ gnucash_sheet_refresh_from_prefs (GnucashSheet *sheet)
GNC_PREF_DRAW_VERT_LINES);
}
void
gnucash_register_refresh_from_prefs (GnucashRegister *reg)
{
GnucashSheet *sheet;
g_return_if_fail(reg != NULL);
g_return_if_fail(GNUCASH_IS_REGISTER(reg));
sheet = GNUCASH_SHEET(reg->sheet);
gnucash_sheet_refresh_from_prefs(sheet);
}
static gboolean
gnucash_sheet_clipboard_event (GnucashSheet *sheet, GdkEventKey *event)
{
@ -2102,7 +1994,7 @@ gnucash_sheet_delete_surrounding_cb (GtkIMContext *context, gint offset,
}
static void
void
gnucash_sheet_goto_virt_loc (GnucashSheet *sheet, VirtualLocation virt_loc)
{
Table *table;
@ -2127,111 +2019,6 @@ gnucash_sheet_goto_virt_loc (GnucashSheet *sheet, VirtualLocation virt_loc)
gnucash_sheet_cursor_move (sheet, virt_loc);
}
void
gnucash_register_goto_virt_cell (GnucashRegister *reg,
VirtualCellLocation vcell_loc)
{
GnucashSheet *sheet;
VirtualLocation virt_loc;
g_return_if_fail(reg != NULL);
g_return_if_fail(GNUCASH_IS_REGISTER(reg));
sheet = GNUCASH_SHEET(reg->sheet);
virt_loc.vcell_loc = vcell_loc;
virt_loc.phys_row_offset = 0;
virt_loc.phys_col_offset = 0;
gnucash_sheet_goto_virt_loc(sheet, virt_loc);
}
void
gnucash_register_goto_virt_loc (GnucashRegister *reg,
VirtualLocation virt_loc)
{
GnucashSheet *sheet;
g_return_if_fail(reg != NULL);
g_return_if_fail(GNUCASH_IS_REGISTER(reg));
sheet = GNUCASH_SHEET(reg->sheet);
gnucash_sheet_goto_virt_loc(sheet, virt_loc);
}
void
gnucash_register_goto_next_virt_row (GnucashRegister *reg)
{
GnucashSheet *sheet;
VirtualLocation virt_loc;
int start_virt_row;
g_return_if_fail (reg != NULL);
g_return_if_fail (GNUCASH_IS_REGISTER(reg));
sheet = GNUCASH_SHEET(reg->sheet);
gnucash_cursor_get_virt (GNUCASH_CURSOR(sheet->cursor), &virt_loc);
/* Move down one physical row at a time until we
* reach the next visible virtual cell. */
start_virt_row = virt_loc.vcell_loc.virt_row;
do
{
if (!gnc_table_move_vertical_position (sheet->table, &virt_loc, 1))
return;
}
while (start_virt_row == virt_loc.vcell_loc.virt_row);
if (virt_loc.vcell_loc.virt_row >= sheet->num_virt_rows)
return;
virt_loc.phys_row_offset = 0;
virt_loc.phys_col_offset = 0;
gnucash_sheet_goto_virt_loc (sheet, virt_loc);
}
void
gnucash_register_goto_next_matching_row (GnucashRegister *reg,
VirtualLocationMatchFunc match,
gpointer user_data)
{
GnucashSheet *sheet;
SheetBlockStyle *style;
VirtualLocation virt_loc;
g_return_if_fail (reg != NULL);
g_return_if_fail (GNUCASH_IS_REGISTER(reg));
g_return_if_fail (match != NULL);
sheet = GNUCASH_SHEET (reg->sheet);
gnucash_cursor_get_virt (GNUCASH_CURSOR(sheet->cursor), &virt_loc);
do
{
if (!gnc_table_move_vertical_position (sheet->table,
&virt_loc, 1))
return;
if (virt_loc.vcell_loc.virt_row >= sheet->num_virt_rows)
return;
style = gnucash_sheet_get_style (sheet, virt_loc.vcell_loc);
if (!style || !style->cursor)
return;
}
while (!match (virt_loc, user_data));
virt_loc.phys_row_offset = 0;
virt_loc.phys_col_offset = 0;
gnucash_sheet_goto_virt_loc (sheet, virt_loc);
}
SheetBlock *
gnucash_sheet_get_block (GnucashSheet *sheet, VirtualCellLocation vcell_loc)
{
@ -2823,204 +2610,3 @@ gnucash_sheet_new (Table *table)
return GTK_WIDGET(sheet);
}
static void
gnucash_register_class_init (GnucashRegisterClass *klass)
{
GObjectClass *gobject_class;
gobject_class = G_OBJECT_CLASS (klass);
register_parent_class = g_type_class_peek_parent (klass);
register_signals[ACTIVATE_CURSOR] =
g_signal_new("activate_cursor",
G_TYPE_FROM_CLASS(gobject_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET(GnucashRegisterClass,
activate_cursor),
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
register_signals[REDRAW_ALL] =
g_signal_new("redraw_all",
G_TYPE_FROM_CLASS(gobject_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET(GnucashRegisterClass,
redraw_all),
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
register_signals[REDRAW_HELP] =
g_signal_new("redraw_help",
G_TYPE_FROM_CLASS(gobject_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET(GnucashRegisterClass,
redraw_help),
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
klass->activate_cursor = NULL;
klass->redraw_all = NULL;
klass->redraw_help = NULL;
}
static void
gnucash_register_init (GnucashRegister *g_reg)
{
GtkTable *table = GTK_TABLE(g_reg);
gtk_widget_set_can_focus (GTK_WIDGET(table), FALSE);
gtk_widget_set_can_default (GTK_WIDGET(table), FALSE);
gtk_table_set_homogeneous (table, FALSE);
gtk_table_resize (table, 3, 2);
}
GType
gnucash_register_get_type (void)
{
static GType gnucash_register_type = 0;
if (!gnucash_register_type)
{
static const GTypeInfo gnucash_register_info =
{
sizeof (GnucashRegisterClass),
NULL, /* base_init */
NULL, /* base_finalize */
(GClassInitFunc) gnucash_register_class_init,
NULL, /* class_finalize */
NULL, /* class_data */
sizeof (GnucashRegister),
0, /* n_preallocs */
(GInstanceInitFunc) gnucash_register_init,
};
gnucash_register_type = g_type_register_static
(gtk_table_get_type (),
"GnucashRegister",
&gnucash_register_info, 0);
}
return gnucash_register_type;
}
void
gnucash_register_attach_popup (GnucashRegister *reg,
GtkWidget *popup,
gpointer data)
{
g_return_if_fail (GNUCASH_IS_REGISTER(reg));
g_return_if_fail (reg->sheet != NULL);
if (popup)
g_return_if_fail (GTK_IS_WIDGET(popup));
gnucash_sheet_set_popup (GNUCASH_SHEET (reg->sheet), popup, data);
}
GtkWidget *
gnucash_register_new (Table *table)
{
GnucashRegister *reg;
GtkWidget *header;
GtkWidget *widget;
GtkWidget *sheet;
GtkWidget *scrollbar;
GtkWidget *box;
reg = g_object_new (GNUCASH_TYPE_REGISTER, NULL);
widget = GTK_WIDGET(reg);
sheet = gnucash_sheet_new (table);
reg->sheet = sheet;
GNUCASH_SHEET(sheet)->reg = widget;
header = gnc_header_new (GNUCASH_SHEET(sheet));
gtk_table_attach (GTK_TABLE(widget), header,
0, 1, 0, 1,
GTK_FILL | GTK_EXPAND | GTK_SHRINK,
GTK_FILL,
0, 0);
gtk_widget_show(header);
gtk_table_attach (GTK_TABLE(widget), sheet,
0, 1, 1, 2,
GTK_FILL | GTK_EXPAND | GTK_SHRINK,
GTK_FILL | GTK_EXPAND | GTK_SHRINK,
0, 0);
gtk_widget_show(sheet);
scrollbar = gtk_vscrollbar_new(GNUCASH_SHEET(sheet)->vadj);
gtk_table_attach (GTK_TABLE(widget), GTK_WIDGET(scrollbar),
1, 2, 0, 3,
GTK_FILL,
GTK_EXPAND | GTK_SHRINK | GTK_FILL,
0, 0);
gtk_widget_show(scrollbar);
scrollbar = gtk_hscrollbar_new(GNUCASH_SHEET(sheet)->hadj);
gtk_table_attach (GTK_TABLE(widget), GTK_WIDGET(scrollbar),
0, 1, 2, 3,
GTK_EXPAND | GTK_SHRINK | GTK_FILL,
GTK_FILL,
0, 0);
reg->hscrollbar = scrollbar;
gtk_widget_show(scrollbar);
reg->hscrollbar_visible = TRUE;
/* The gtkrc color helper widgets need to be part of a window
* hierarchy so they can be realized. Stick them in a box
* underneath the register, but don't show the box to the
* user. */
box = gtk_hbox_new(FALSE, 0);
gtk_widget_set_no_show_all(GTK_WIDGET(box), TRUE);
gtk_box_pack_start(GTK_BOX(box),
GNUCASH_SHEET(sheet)->header_color, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(box),
GNUCASH_SHEET(sheet)->primary_color, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(box),
GNUCASH_SHEET(sheet)->secondary_color, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(box),
GNUCASH_SHEET(sheet)->split_color, TRUE, TRUE, 0);
gtk_table_attach (GTK_TABLE(widget), box,
0, 1, 4, 5,
GTK_FILL | GTK_EXPAND | GTK_SHRINK,
GTK_FILL | GTK_EXPAND | GTK_SHRINK,
0, 0);
return widget;
}
void gnucash_register_set_moved_cb (GnucashRegister *reg,
GFunc cb, gpointer cb_data)
{
GnucashSheet *sheet;
if (!reg || !reg->sheet)
return;
sheet = GNUCASH_SHEET(reg->sheet);
sheet->moved_cb = cb;
sheet->moved_cb_data = cb_data;
}
GnucashSheet *gnucash_register_get_sheet (GnucashRegister *reg)
{
g_return_val_if_fail (reg != NULL, NULL);
g_return_val_if_fail (GNUCASH_IS_REGISTER(reg), NULL);
return GNUCASH_SHEET(reg->sheet);
}

View File

@ -24,6 +24,7 @@
#include <gtk/gtk.h>
#include "split-register-model.h"
#include "table-allgui.h"
/** @ingroup Register
* @addtogroup Gnome
* @{
@ -36,12 +37,6 @@
#define CELL_HPADDING 5
#define GNUCASH_TYPE_REGISTER (gnucash_register_get_type ())
#define GNUCASH_REGISTER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GNUCASH_TYPE_REGISTER, GnucashRegister))
#define GNUCASH_REGISTER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GNUCASH_TYPE_REGISTER))
#define GNUCASH_IS_REGISTER(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), GNUCASH_TYPE_REGISTER))
#define GNUCASH_TYPE_SHEET (gnucash_sheet_get_type ())
#define GNUCASH_SHEET(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GNUCASH_TYPE_SHEET, GnucashSheet))
#define GNUCASH_SHEET_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GNUCASH_TYPE_SHEET))
@ -51,8 +46,6 @@
typedef struct _SheetBlockStyle SheetBlockStyle;
typedef struct _GnucashSheet GnucashSheet;
typedef struct _GnucashSheetClass GnucashSheetClass;
typedef struct _GnucashRegister GnucashRegister;
typedef struct _GnucashRegisterClass GnucashRegisterClass;
typedef struct
@ -74,11 +67,6 @@ void gnucash_sheet_table_load (GnucashSheet *sheet, gboolean do_scroll);
void gnucash_sheet_recompute_block_offsets (GnucashSheet *sheet);
GType gnucash_register_get_type (void);
/** this already has scrollbars attached */
GtkWidget *gnucash_register_new (Table *table);
SheetBlock *gnucash_sheet_get_block (GnucashSheet *sheet,
VirtualCellLocation vcell_loc);
@ -117,34 +105,7 @@ void gnucash_sheet_update_adjustments (GnucashSheet *sheet);
void gnucash_sheet_set_window (GnucashSheet *sheet, GtkWidget *window);
void gnucash_register_goto_virt_cell (GnucashRegister *reg,
VirtualCellLocation vcell_loc);
void gnucash_register_goto_virt_loc (GnucashRegister *reg,
VirtualLocation virt_loc);
void gnucash_register_goto_next_virt_row (GnucashRegister *reg);
typedef gboolean (*VirtualLocationMatchFunc) (VirtualLocation virt_loc,
gpointer user_data);
void gnucash_register_goto_next_matching_row (GnucashRegister *reg,
VirtualLocationMatchFunc match,
gpointer user_data);
void gnucash_register_attach_popup(GnucashRegister *reg, GtkWidget *popup,
gpointer data);
gboolean gnucash_register_has_selection (GnucashRegister *reg);
void gnucash_register_cut_clipboard (GnucashRegister *reg);
void gnucash_register_copy_clipboard (GnucashRegister *reg);
void gnucash_register_paste_clipboard (GnucashRegister *reg);
void gnucash_register_refresh_from_prefs (GnucashRegister *reg);
void gnucash_register_set_moved_cb (GnucashRegister *reg,
GFunc cb, gpointer cb_data);
GnucashSheet *gnucash_register_get_sheet (GnucashRegister *reg);
GdkColor *get_gtkrc_color (GnucashSheet *sheet, RegisterColor field_type);
/** @} */
#endif

View File

@ -131,27 +131,10 @@ struct _GnucashSheetClass
};
struct _GnucashRegister
{
GtkTable table;
GtkWidget *hscrollbar;
GtkWidget *sheet;
gboolean hscrollbar_visible;
};
struct _GnucashRegisterClass
{
GtkTableClass parent_class;
void (*activate_cursor) (GnucashRegister *reg);
void (*redraw_all) (GnucashRegister *reg);
void (*redraw_help) (GnucashRegister *reg);
};
GncItemEdit *gnucash_sheet_get_item_edit (GnucashSheet *sheet);
void gnucash_sheet_set_popup (GnucashSheet *sheet, GtkWidget *popup, gpointer data);
void gnucash_sheet_goto_virt_loc (GnucashSheet *sheet, VirtualLocation virt_loc);
void gnucash_sheet_refresh_from_prefs (GnucashSheet *sheet);
//Table *gnucash_sheet_get_table (GnucashSheet *sheet);
//gint gnucash_sheet_get_num_virt_rows (GnucashSheet *sheet);
//gint gnucash_sheet_get_num_virt_cols (GnucashSheet *sheet);

View File

@ -42,6 +42,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <glib-2.0/glib.h>
#include "gnucash-sheet.h"
#include "gnucash-sheetP.h"
@ -154,72 +155,10 @@ table_destroy_cb (Table *table)
to pass NULL as second parameter. */
void
gnc_table_init_gui (GtkWidget *widget, gchar * state_section)
gnc_table_init_gui (Table *table)
{
GNCHeaderWidths widths;
GnucashSheet *sheet;
GnucashRegister *greg;
Table *table;
GList *node;
gchar *key;
guint value;
GKeyFile *state_file = gnc_state_get_current();
// Stuff for per-register settings load.
g_return_if_fail (widget != NULL);
g_return_if_fail (GNUCASH_IS_REGISTER (widget));
PINFO("state_section=%s",state_section);
ENTER("widget=%p, data=%p", widget, "");
greg = GNUCASH_REGISTER (widget);
sheet = GNUCASH_SHEET (greg->sheet);
table = sheet->table;
table->gui_handlers.redraw_help = table_ui_redraw_cb;
table->gui_handlers.destroy = table_destroy_cb;
table->ui_data = sheet;
g_object_ref (sheet);
/* config the cell-block styles */
widths = gnc_header_widths_new ();
if (state_section && gnc_prefs_get_bool(GNC_PREFS_GROUP_GENERAL, GNC_PREF_SAVE_GEOMETRY))
{
node = gnc_table_layout_get_cells (table->layout);
for (; node; node = node->next)
{
BasicCell *cell = node->data;
if (cell->expandable)
continue;
/* Remember whether the column is visible */
key = g_strdup_printf("%s_width", cell->cell_name);
value = g_key_file_get_integer (state_file, state_section, key, NULL);
if (value != 0)
gnc_header_widths_set_width (widths, cell->cell_name, value);
g_free(key);
}
}
gnucash_sheet_create_styles (sheet);
gnucash_sheet_set_header_widths (sheet, widths);
gnucash_sheet_compile_styles (sheet);
gnucash_sheet_table_load (sheet, TRUE);
gnucash_sheet_cursor_set_from_table (sheet, TRUE);
gnucash_sheet_redraw_all (sheet);
gnc_header_widths_destroy (widths);
LEAVE(" ");
}
void