mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
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:
parent
5223ca8c81
commit
03699efe14
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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"
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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
|
||||
|
@ -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 \
|
||||
|
588
src/register/register-gnome/gnucash-register.c
Normal file
588
src/register/register-gnome/gnucash-register.c
Normal 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);
|
||||
}
|
||||
|
81
src/register/register-gnome/gnucash-register.h
Normal file
81
src/register/register-gnome/gnucash-register.h
Normal 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
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user