[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Pspp-cvs] pspp lib/gtksheetChangeLog lib/gtksheetgsheet-c...
From: |
John Darrington |
Subject: |
[Pspp-cvs] pspp lib/gtksheetChangeLog lib/gtksheetgsheet-c... |
Date: |
Mon, 19 Jun 2006 10:16:51 +0000 |
CVSROOT: /sources/pspp
Module name: pspp
Changes by: John Darrington <jmd> 06/06/19 10:16:51
Modified files:
lib/gtksheet : ChangeLog gsheet-column-iface.c
gsheet-column-iface.h gsheet-hetero-column.c
gsheet-row-iface.c gsheet-row-iface.h
gsheet-uniform-column.c gsheet-uniform-row.c
gtksheet.c gtksheet.h
src/data : ChangeLog casefile.c format.c
src/ui/gui : ChangeLog automake.mk data-sheet.c data-sheet.h
menu-actions.c psppire-data-store.c
psppire-data-store.h psppire-dict.c
psppire-dict.h psppire-var-store.c psppire.c
Added files:
src/ui/gui : TODO psppire-case-file.c psppire-case-file.h
Log message:
Implemented data-store using a casefile instead of an array of cases.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/pspp/lib/gtksheet/ChangeLog?cvsroot=pspp&r1=1.9&r2=1.10
http://cvs.savannah.gnu.org/viewcvs/pspp/lib/gtksheet/gsheet-column-iface.c?cvsroot=pspp&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/pspp/lib/gtksheet/gsheet-column-iface.h?cvsroot=pspp&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/pspp/lib/gtksheet/gsheet-hetero-column.c?cvsroot=pspp&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/pspp/lib/gtksheet/gsheet-row-iface.c?cvsroot=pspp&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/pspp/lib/gtksheet/gsheet-row-iface.h?cvsroot=pspp&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/pspp/lib/gtksheet/gsheet-uniform-column.c?cvsroot=pspp&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/pspp/lib/gtksheet/gsheet-uniform-row.c?cvsroot=pspp&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/pspp/lib/gtksheet/gtksheet.c?cvsroot=pspp&r1=1.10&r2=1.11
http://cvs.savannah.gnu.org/viewcvs/pspp/lib/gtksheet/gtksheet.h?cvsroot=pspp&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/pspp/src/data/ChangeLog?cvsroot=pspp&r1=1.53&r2=1.54
http://cvs.savannah.gnu.org/viewcvs/pspp/src/data/casefile.c?cvsroot=pspp&r1=1.11&r2=1.12
http://cvs.savannah.gnu.org/viewcvs/pspp/src/data/format.c?cvsroot=pspp&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/pspp/src/ui/gui/ChangeLog?cvsroot=pspp&r1=1.18&r2=1.19
http://cvs.savannah.gnu.org/viewcvs/pspp/src/ui/gui/automake.mk?cvsroot=pspp&r1=1.8&r2=1.9
http://cvs.savannah.gnu.org/viewcvs/pspp/src/ui/gui/data-sheet.c?cvsroot=pspp&r1=1.7&r2=1.8
http://cvs.savannah.gnu.org/viewcvs/pspp/src/ui/gui/data-sheet.h?cvsroot=pspp&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/pspp/src/ui/gui/menu-actions.c?cvsroot=pspp&r1=1.9&r2=1.10
http://cvs.savannah.gnu.org/viewcvs/pspp/src/ui/gui/psppire-data-store.c?cvsroot=pspp&r1=1.12&r2=1.13
http://cvs.savannah.gnu.org/viewcvs/pspp/src/ui/gui/psppire-data-store.h?cvsroot=pspp&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/pspp/src/ui/gui/psppire-dict.c?cvsroot=pspp&r1=1.6&r2=1.7
http://cvs.savannah.gnu.org/viewcvs/pspp/src/ui/gui/psppire-dict.h?cvsroot=pspp&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/pspp/src/ui/gui/psppire-var-store.c?cvsroot=pspp&r1=1.11&r2=1.12
http://cvs.savannah.gnu.org/viewcvs/pspp/src/ui/gui/psppire.c?cvsroot=pspp&r1=1.12&r2=1.13
http://cvs.savannah.gnu.org/viewcvs/pspp/src/ui/gui/TODO?cvsroot=pspp&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/pspp/src/ui/gui/psppire-case-file.c?cvsroot=pspp&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/pspp/src/ui/gui/psppire-case-file.h?cvsroot=pspp&rev=1.1
Patches:
Index: lib/gtksheet/ChangeLog
===================================================================
RCS file: /sources/pspp/pspp/lib/gtksheet/ChangeLog,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- lib/gtksheet/ChangeLog 30 May 2006 12:01:33 -0000 1.9
+++ lib/gtksheet/ChangeLog 19 Jun 2006 10:16:51 -0000 1.10
@@ -1,3 +1,11 @@
+Mon Jun 19 18:03:21 WST 2006 John Darrington <address@hidden>
+
+ * gsheet-column-iface.c gsheet-column-iface.h
+ gsheet-hetero-column.c gsheet-row-iface.c gsheet-row-iface.h
+ gsheet-uniform-column.c gsheet-uniform-row.c gtksheet.c
+ gtksheet.h: Fixed some warnings. Corrected errors updating
+ row/column titles
+
Di Mai 30 19:51:19 WST 2006 John Darrington <address@hidden>
* gtksheet.c gtksheet.h: constness. Removed dependence on glib2.10
Index: lib/gtksheet/gsheet-column-iface.c
===================================================================
RCS file: /sources/pspp/pspp/lib/gtksheet/gsheet-column-iface.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- lib/gtksheet/gsheet-column-iface.c 25 May 2006 10:29:14 -0000 1.3
+++ lib/gtksheet/gsheet-column-iface.c 19 Jun 2006 10:16:51 -0000 1.4
@@ -99,61 +99,58 @@
inline void
-g_sheet_column_set_width (GSheetColumn *column,
- gint col, gint size, const GtkSheet *sheet)
+g_sheet_column_set_width (GSheetColumn *column, gint col, gint size,
+ gpointer data)
{
g_return_if_fail (G_IS_SHEET_COLUMN (column));
if ((G_SHEET_COLUMN_GET_IFACE (column)->set_width) )
- (G_SHEET_COLUMN_GET_IFACE (column)->set_width) (column, col,
- size, sheet);
+ (G_SHEET_COLUMN_GET_IFACE (column)->set_width) (column, col, size, data);
}
inline gint
-g_sheet_column_get_width (const GSheetColumn *column,
- gint col, const GtkSheet *sheet)
+g_sheet_column_get_width (const GSheetColumn *column, gint col, gpointer data)
{
g_return_val_if_fail (G_IS_SHEET_COLUMN (column), -1);
g_assert (G_SHEET_COLUMN_GET_IFACE (column)->get_width);
- return (G_SHEET_COLUMN_GET_IFACE (column)->get_width) (column, col,
- sheet);
+ return (G_SHEET_COLUMN_GET_IFACE (column)->get_width) (column, col, data);
}
inline gboolean
g_sheet_column_get_visibility(const GSheetColumn *column,
- gint col, const GtkSheet *sheet)
+ gint col, gpointer data)
{
g_return_val_if_fail (G_IS_SHEET_COLUMN (column), FALSE);
g_assert (G_SHEET_COLUMN_GET_IFACE (column)->get_visibility);
return (G_SHEET_COLUMN_GET_IFACE (column)->get_visibility) (column,
- col, sheet);
+ col, data);
}
inline gboolean
g_sheet_column_get_sensitivity(const GSheetColumn *column,
- gint col, const GtkSheet *sheet)
+ gint col, gpointer data)
{
g_return_val_if_fail (G_IS_SHEET_COLUMN (column), FALSE);
g_assert (G_SHEET_COLUMN_GET_IFACE (column)->get_sensitivity);
return (G_SHEET_COLUMN_GET_IFACE (column)->get_sensitivity) (column,
- col, sheet);
+ col, data);
}
inline GtkSheetButton *
g_sheet_column_get_button(const GSheetColumn *column,
- gint col, const GtkSheet *sheet)
+ gint col, gpointer data)
{
GtkSheetButton *button = gtk_sheet_button_new();
@@ -162,20 +159,20 @@
g_return_val_if_fail (G_IS_SHEET_COLUMN (column), FALSE);
if ( iface->get_button_label)
- button->label = iface->get_button_label(column, col, sheet);
+ button->label = iface->get_button_label(column, col, data);
return button;
}
inline GtkJustification
g_sheet_column_get_justification(const GSheetColumn *column,
- gint col, const GtkSheet *sheet)
+ gint col, gpointer data)
{
g_return_val_if_fail (G_IS_SHEET_COLUMN (column), FALSE);
g_assert (G_SHEET_COLUMN_GET_IFACE (column)->get_justification);
- return (G_SHEET_COLUMN_GET_IFACE (column)->get_justification) (column, col,
sheet);
+ return (G_SHEET_COLUMN_GET_IFACE (column)->get_justification) (column, col,
data);
}
@@ -183,76 +180,76 @@
inline gint
g_sheet_column_get_left_text_column (const GSheetColumn *column,
- gint col, const GtkSheet *sheet)
+ gint col, gpointer data)
{
g_return_val_if_fail (G_IS_SHEET_COLUMN (column), -1);
if ( ! G_SHEET_COLUMN_GET_IFACE (column)->get_left_text_column)
return col;
- return (G_SHEET_COLUMN_GET_IFACE (column)->get_left_text_column) (column,
col, sheet);
+ return (G_SHEET_COLUMN_GET_IFACE (column)->get_left_text_column) (column,
col, data);
}
inline gint
g_sheet_column_get_right_text_column (const GSheetColumn *column,
- gint col, const GtkSheet *sheet)
+ gint col, gpointer data)
{
g_return_val_if_fail (G_IS_SHEET_COLUMN (column), -1);
if ( ! G_SHEET_COLUMN_GET_IFACE (column)->get_right_text_column)
return col;
- return (G_SHEET_COLUMN_GET_IFACE (column)->get_right_text_column) (column,
col, sheet);
+ return (G_SHEET_COLUMN_GET_IFACE (column)->get_right_text_column) (column,
col, data);
}
inline void
g_sheet_column_set_left_text_column (const GSheetColumn *column,
- gint col, gint i, const GtkSheet
*sheet)
+ gint col, gint i, gpointer data)
{
g_return_if_fail (G_IS_SHEET_COLUMN (column));
if ( G_SHEET_COLUMN_GET_IFACE (column)->set_left_text_column)
- (G_SHEET_COLUMN_GET_IFACE (column)->set_left_text_column) (column, col, i,
sheet);
+ (G_SHEET_COLUMN_GET_IFACE (column)->set_left_text_column) (column, col, i,
data);
}
inline void
g_sheet_column_set_right_text_column (const GSheetColumn *column,
- gint col, gint i, const GtkSheet
*sheet)
+ gint col, gint i, gpointer data)
{
g_return_if_fail (G_IS_SHEET_COLUMN (column));
if ( G_SHEET_COLUMN_GET_IFACE (column)->set_right_text_column)
- (G_SHEET_COLUMN_GET_IFACE (column)->set_right_text_column) (column, col,
i, sheet);
+ (G_SHEET_COLUMN_GET_IFACE (column)->set_right_text_column) (column, col,
i, data);
}
inline gint
-g_sheet_column_get_column_count(const GSheetColumn *geo, const GtkSheet *sheet)
+g_sheet_column_get_column_count(const GSheetColumn *geo, gpointer data)
{
g_return_val_if_fail (G_IS_SHEET_COLUMN (geo), -1);
g_assert ( G_SHEET_COLUMN_GET_IFACE (geo)->get_column_count);
- return (G_SHEET_COLUMN_GET_IFACE (geo)->get_column_count) (geo, sheet);
+ return (G_SHEET_COLUMN_GET_IFACE (geo)->get_column_count) (geo, data);
}
inline gint
-g_sheet_column_start_pixel(const GSheetColumn *geo, gint col, const GtkSheet
*sheet)
+g_sheet_column_start_pixel(const GSheetColumn *geo, gint col, gpointer data)
{
gint i;
gint start_pixel = 0;
g_return_val_if_fail (G_IS_SHEET_COLUMN (geo), -1);
g_return_val_if_fail (col <
- g_sheet_column_get_column_count(geo, sheet),-1);
+ g_sheet_column_get_column_count(geo, data),-1);
for ( i = 0 ; i < col ; ++i )
{
- if ( g_sheet_column_get_visibility(geo, i, sheet))
- start_pixel += g_sheet_column_get_width(geo, i, sheet);
+ if ( g_sheet_column_get_visibility(geo, i, data))
+ start_pixel += g_sheet_column_get_width(geo, i, data);
}
return start_pixel;
@@ -262,7 +259,7 @@
inline void
-g_sheet_column_columns_deleted(GSheetColumn *geo,
+g_sheet_column_columns_changed(GSheetColumn *geo,
gint first, gint n_columns)
{
g_return_if_fail (G_IS_SHEET_COLUMN (geo));
@@ -270,3 +267,7 @@
g_signal_emit (geo, sheet_column_signals[COLUMNS_CHANGED], 0,
first, n_columns);
}
+
+
+
+
Index: lib/gtksheet/gsheet-column-iface.h
===================================================================
RCS file: /sources/pspp/pspp/lib/gtksheet/gsheet-column-iface.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- lib/gtksheet/gsheet-column-iface.h 25 May 2006 10:29:14 -0000 1.2
+++ lib/gtksheet/gsheet-column-iface.h 19 Jun 2006 10:16:51 -0000 1.3
@@ -47,37 +47,37 @@
gint col, gint n_columns);
/* Virtual Table */
- gint (* get_width) (const GSheetColumn *gcolumn, gint col, const GtkSheet *);
- void (* set_width) (GSheetColumn *gcolumn, gint col, gint width, const
GtkSheet *);
+ gint (* get_width) (const GSheetColumn *gcolumn, gint col, gpointer data);
+ void (* set_width) (GSheetColumn *gcolumn, gint col, gint width, gpointer
data);
- gboolean (* get_visibility) (const GSheetColumn *gcolumn, gint col, const
GtkSheet *);
- gboolean (* get_sensitivity) (const GSheetColumn *gcolumn, gint col, const
GtkSheet *);
- const GtkSheetButton * (* get_button) (const GSheetColumn *gcolumn, gint
col, const GtkSheet *);
- GtkJustification (* get_justification) (const GSheetColumn *gcolumn, gint
col, const GtkSheet *);
+ gboolean (* get_visibility) (const GSheetColumn *gcolumn, gint col, gpointer
data);
+ gboolean (* get_sensitivity) (const GSheetColumn *gcolumn, gint col,
gpointer data);
+ const GtkSheetButton * (* get_button) (const GSheetColumn *gcolumn, gint
col, gpointer data);
+ GtkJustification (* get_justification) (const GSheetColumn *gcolumn, gint
col, gpointer data);
gint (*get_left_text_column) (const GSheetColumn *gcolumn,
- gint col, const GtkSheet *);
+ gint col, gpointer data);
gint (*get_right_text_column) (const GSheetColumn *gcolumn,
- gint col, const GtkSheet *);
+ gint col, gpointer data);
void (* set_left_text_column) (const GSheetColumn *gcolumn,
- gint col, gint i, const GtkSheet *);
+ gint col, gint i, gpointer data);
void (* set_right_text_column) (const GSheetColumn *gcolumn,
- gint col, gint i, const GtkSheet *);
+ gint col, gint i, gpointer data);
- gint (* get_column_count) (const GSheetColumn *geo, const GtkSheet *);
+ gint (* get_column_count) (const GSheetColumn *geo, gpointer data);
- GtkStateType (*get_button_state)(const GSheetColumn *geo, gint col, const
GtkSheet *);
- gchar * (*get_button_label)(const GSheetColumn *geo, gint col, const
GtkSheet *);
+ GtkStateType (*get_button_state)(const GSheetColumn *geo, gint col,
gpointer data);
+ gchar * (*get_button_label)(const GSheetColumn *geo, gint col, gpointer
data);
gboolean (*get_button_visibility)(const GSheetColumn *geo,
- gint col, const GtkSheet *);
+ gint col, gpointer data);
const GtkSheetChild * (*get_button_child)(const GSheetColumn *geo,
- gint col, const GtkSheet *);
+ gint col, gpointer data);
GtkJustification * (*get_button_justification)(const GSheetColumn *geo,
- gint col, const GtkSheet *);
+ gint col, gpointer data);
};
@@ -85,48 +85,47 @@
inline gint g_sheet_column_get_width (const GSheetColumn *gcolumn,
- gint col, const GtkSheet *sheet);
+ gint col, gpointer data);
inline void g_sheet_column_set_width (GSheetColumn *gcolumn,
- gint col, gint size, const GtkSheet
*sheet);
+ gint col, gint size, gpointer data);
inline gboolean g_sheet_column_get_visibility(const GSheetColumn *gcolumn,
- gint col, const GtkSheet *sheet);
+ gint col, gpointer data);
inline gboolean g_sheet_column_get_sensitivity(const GSheetColumn *gcolumn,
- gint col, const GtkSheet *sheet);
+ gint col, gpointer data);
inline GtkSheetButton *g_sheet_column_get_button(const GSheetColumn *gcolumn,
- gint col, const GtkSheet *sheet);
+ gint col, gpointer data);
-inline GtkJustification g_sheet_column_get_justification(const GSheetColumn
*gcolumn, gint col, const GtkSheet *sheet);
+inline GtkJustification g_sheet_column_get_justification(const GSheetColumn
*gcolumn, gint col, gpointer data);
inline gint g_sheet_column_get_left_text_column (const GSheetColumn *gcolumn,
- gint col, const GtkSheet *sheet);
+ gint col, gpointer data);
inline gint g_sheet_column_get_right_text_column (const GSheetColumn *gcolumn,
- gint col, const GtkSheet *sheet);
+ gint col, gpointer data);
inline void g_sheet_column_set_left_text_column (const GSheetColumn *gcolumn,
- gint col, gint i, const GtkSheet
*sheet);
+ gint col, gint i, gpointer data);
inline void g_sheet_column_set_right_text_column (const GSheetColumn *gcolumn,
- gint col, gint i, const GtkSheet
*sheet);
+ gint col, gint i, gpointer data);
-inline gint g_sheet_column_get_column_count(const GSheetColumn *geo, const
GtkSheet *sheet);
+inline gint g_sheet_column_get_column_count(const GSheetColumn *geo, gpointer
data);
-inline gint g_sheet_column_start_pixel(const GSheetColumn *geo, gint col,
const GtkSheet *sheet);
+inline gint g_sheet_column_start_pixel(const GSheetColumn *geo, gint col,
gpointer data);
-inline void g_sheet_column_columns_deleted(GSheetColumn *geo,
+inline void g_sheet_column_columns_changed(GSheetColumn *geo,
gint first, gint n_columns);
-
G_END_DECLS
#endif /* __G_SHEET_COLUMN_IFACE_H__ */
Index: lib/gtksheet/gsheet-hetero-column.c
===================================================================
RCS file: /sources/pspp/pspp/lib/gtksheet/gsheet-hetero-column.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- lib/gtksheet/gsheet-hetero-column.c 25 May 2006 10:29:14 -0000 1.4
+++ lib/gtksheet/gsheet-hetero-column.c 19 Jun 2006 10:16:51 -0000 1.5
@@ -104,7 +104,7 @@
}
static gint
-g_sheet_hetero_column_get_width(const GSheetColumn *geom, gint i)
+g_sheet_hetero_column_get_width(const GSheetColumn *geom, gint i, gpointer
data)
{
GSheetHeteroColumn *hg = G_SHEET_HETERO_COLUMN(geom);
@@ -114,14 +114,14 @@
}
static gint
-g_sheet_hetero_column_get_sensitivity(const GSheetColumn *geom, gint u)
+g_sheet_hetero_column_get_sensitivity(const GSheetColumn *geom, gint u,
gpointer data)
{
return TRUE;
}
static gint
-g_sheet_hetero_column_get_visibility(const GSheetColumn *geom, gint u)
+g_sheet_hetero_column_get_visibility(const GSheetColumn *geom, gint u,
gpointer data)
{
return TRUE;
}
@@ -129,7 +129,7 @@
static gchar *
-g_sheet_hetero_column_get_button_label(const GSheetColumn *geom, gint u)
+g_sheet_hetero_column_get_button_label(const GSheetColumn *geom, gint u,
gpointer data)
{
GSheetHeteroColumn *hg = G_SHEET_HETERO_COLUMN(geom);
@@ -138,7 +138,7 @@
static GtkJustification
-g_sheet_hetero_column_get_justification(const GSheetColumn *geom, gint u)
+g_sheet_hetero_column_get_justification(const GSheetColumn *geom, gint u,
gpointer data)
{
return GTK_JUSTIFY_FILL;
}
@@ -146,7 +146,7 @@
static gint
-g_sheet_hetero_column_get_column_count(const GSheetColumn *geom)
+g_sheet_hetero_column_get_column_count(const GSheetColumn *geom, gpointer data)
{
GSheetHeteroColumn *hg = G_SHEET_HETERO_COLUMN(geom);
@@ -184,12 +184,24 @@
g_free(hg->col);
}
+static void
+hetero_column_set_width(GSheetColumn *geo,
+ gint i, gint size, gpointer data)
+{
+ GSheetHeteroColumn *hg = G_SHEET_HETERO_COLUMN(geo);
+
+ g_return_if_fail(i < hg->n_columns);
+
+ hg->col[i].width = size;
+}
+
+
static void
g_sheet_column_init (GSheetColumnIface *iface)
{
iface->get_width = g_sheet_hetero_column_get_width ;
- iface->set_width = g_sheet_hetero_column_set_width ;
+ iface->set_width = hetero_column_set_width ;
iface->get_sensitivity = g_sheet_hetero_column_get_sensitivity ;
iface->get_visibility = g_sheet_hetero_column_get_visibility ;
iface->get_justification = g_sheet_hetero_column_get_justification;
@@ -213,13 +225,15 @@
-void
+
+inline void
g_sheet_hetero_column_set_width(GSheetHeteroColumn *geo,
gint i, gint size)
{
- g_return_if_fail(i < geo->n_columns);
+ GSheetColumn *iface = G_SHEET_COLUMN(geo);
- geo->col[i].width = size;
+ hetero_column_set_width(iface, i, size, 0);
}
+
Index: lib/gtksheet/gsheet-row-iface.c
===================================================================
RCS file: /sources/pspp/pspp/lib/gtksheet/gsheet-row-iface.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- lib/gtksheet/gsheet-row-iface.c 25 May 2006 10:29:14 -0000 1.3
+++ lib/gtksheet/gsheet-row-iface.c 19 Jun 2006 10:16:51 -0000 1.4
@@ -103,60 +103,60 @@
void
g_sheet_row_set_height (GSheetRow *row_geo,
- gint row, gint size, const GtkSheet *sheet)
+ gint row, gint size, gpointer data)
{
g_return_if_fail (G_IS_SHEET_ROW (row_geo));
if ((G_SHEET_ROW_GET_IFACE (row_geo)->set_height) )
(G_SHEET_ROW_GET_IFACE (row_geo)->set_height) (row_geo, row,
- size, sheet);
+ size, data);
}
gint
g_sheet_row_get_height (const GSheetRow *row_geo,
- gint row, const GtkSheet *sheet)
+ gint row, gpointer data)
{
g_return_val_if_fail (G_IS_SHEET_ROW (row_geo), -1);
g_assert (G_SHEET_ROW_GET_IFACE (row_geo)->get_height);
return (G_SHEET_ROW_GET_IFACE (row_geo)->get_height) (row_geo, row,
- sheet);
+ data);
}
gboolean
g_sheet_row_get_visibility(const GSheetRow *row_geo,
- gint row, const GtkSheet *sheet)
+ gint row, gpointer data)
{
g_return_val_if_fail (G_IS_SHEET_ROW (row_geo), FALSE);
g_assert (G_SHEET_ROW_GET_IFACE (row_geo)->get_visibility);
return (G_SHEET_ROW_GET_IFACE (row_geo)->get_visibility) (row_geo,
- row, sheet);
+ row, data);
}
gboolean
g_sheet_row_get_sensitivity(const GSheetRow *row_geo,
- gint row, const GtkSheet *sheet)
+ gint row, gpointer data)
{
g_return_val_if_fail (G_IS_SHEET_ROW (row_geo), FALSE);
g_assert (G_SHEET_ROW_GET_IFACE (row_geo)->get_sensitivity);
return (G_SHEET_ROW_GET_IFACE (row_geo)->get_sensitivity) (row_geo,
- row, sheet);
+ row, data);
}
GtkSheetButton *
g_sheet_row_get_button(const GSheetRow *row_geo,
- gint row, const GtkSheet *sheet)
+ gint row, gpointer data)
{
GtkSheetButton *button = gtk_sheet_button_new();
@@ -165,20 +165,20 @@
g_return_val_if_fail (G_IS_SHEET_ROW (row_geo), FALSE);
if ( iface->get_button_label)
- button->label = iface->get_button_label(row_geo, row, sheet);
+ button->label = iface->get_button_label(row_geo, row, data);
return button;
}
gint
-g_sheet_row_get_row_count(const GSheetRow *geo, const GtkSheet *sheet)
+g_sheet_row_get_row_count(const GSheetRow *geo, gpointer data)
{
g_return_val_if_fail (G_IS_SHEET_ROW (geo), -1);
g_assert ( G_SHEET_ROW_GET_IFACE (geo)->get_row_count);
- return (G_SHEET_ROW_GET_IFACE (geo)->get_row_count) (geo, sheet);
+ return (G_SHEET_ROW_GET_IFACE (geo)->get_row_count) (geo, data);
}
/**
@@ -195,7 +195,7 @@
*/
gint
-g_sheet_row_start_pixel(const GSheetRow *geo, gint row, const GtkSheet *sheet)
+g_sheet_row_start_pixel(const GSheetRow *geo, gint row, gpointer data)
{
gint i;
gint start_pixel = 0;
@@ -203,15 +203,15 @@
g_return_val_if_fail (G_IS_SHEET_ROW (geo), -1);
g_return_val_if_fail (row >= 0, -1);
g_return_val_if_fail (row <
- g_sheet_row_get_row_count(geo, sheet),-1);
+ g_sheet_row_get_row_count(geo, data),-1);
if ( G_SHEET_ROW_GET_IFACE(geo)->top_ypixel)
- return (G_SHEET_ROW_GET_IFACE(geo)->top_ypixel)(geo, row, sheet);
+ return (G_SHEET_ROW_GET_IFACE(geo)->top_ypixel)(geo, row, data);
for ( i = 0 ; i < row ; ++i )
{
- if ( g_sheet_row_get_visibility(geo, i, sheet))
- start_pixel += g_sheet_row_get_height(geo, i, sheet);
+ if ( g_sheet_row_get_visibility(geo, i, data))
+ start_pixel += g_sheet_row_get_height(geo, i, data);
}
return start_pixel;
@@ -220,29 +220,29 @@
gint
g_sheet_row_pixel_to_row(const GSheetRow *geo, gint pixel,
- const GtkSheet *s)
+ gpointer data)
{
gint i, cy;
g_return_val_if_fail (G_IS_SHEET_ROW (geo), -1);
g_return_val_if_fail (pixel >= 0, -1) ;
if ( G_SHEET_ROW_GET_IFACE(geo)->pixel_to_row)
- return (G_SHEET_ROW_GET_IFACE(geo)->pixel_to_row)(geo, pixel, s);
+ return (G_SHEET_ROW_GET_IFACE(geo)->pixel_to_row)(geo, pixel, data);
cy = 0;
- for (i = 0; i < g_sheet_row_get_row_count(geo, s); ++i )
+ for (i = 0; i < g_sheet_row_get_row_count(geo, data); ++i )
{
if (pixel >= cy &&
- pixel <= (cy + g_sheet_row_get_height(geo, i, s)) &&
- g_sheet_row_get_visibility(geo, i, s))
+ pixel <= (cy + g_sheet_row_get_height(geo, i, data)) &&
+ g_sheet_row_get_visibility(geo, i, data))
return i;
- if(g_sheet_row_get_visibility(geo, i, s))
- cy += g_sheet_row_get_height(geo, i, s);
+ if(g_sheet_row_get_visibility(geo, i, data))
+ cy += g_sheet_row_get_height(geo, i, data);
}
/* no match */
- return g_sheet_row_get_row_count(geo, s) - 1;
+ return g_sheet_row_get_row_count(geo, data) - 1;
}
Index: lib/gtksheet/gsheet-row-iface.h
===================================================================
RCS file: /sources/pspp/pspp/lib/gtksheet/gsheet-row-iface.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- lib/gtksheet/gsheet-row-iface.h 25 May 2006 10:29:14 -0000 1.2
+++ lib/gtksheet/gsheet-row-iface.h 19 Jun 2006 10:16:51 -0000 1.3
@@ -50,36 +50,36 @@
gint row, gint n_rows);
/* Virtual Table */
- gint (* get_height) (const GSheetRow *grow, gint row, const GtkSheet *);
+ gint (* get_height) (const GSheetRow *grow, gint row, gpointer);
void (* set_height) (GSheetRow *grow, gint row, gint height,
- const GtkSheet *);
+ gpointer);
gboolean (* get_visibility) (const GSheetRow *grow, gint row,
- const GtkSheet *);
+ gpointer);
gboolean (* get_sensitivity) (const GSheetRow *grow, gint row,
- const GtkSheet *);
+ gpointer);
const GtkSheetButton * (* get_button) (const GSheetRow *grow, gint row,
- const GtkSheet *);
+ gpointer);
- gint (* get_row_count) (const GSheetRow *geo, const GtkSheet *);
+ gint (* get_row_count) (const GSheetRow *geo, gpointer);
GtkStateType (*get_button_state)(const GSheetRow *geo, gint row,
- const GtkSheet *);
+ gpointer);
gchar * (*get_button_label)(const GSheetRow *geo, gint row,
- const GtkSheet *);
+ gpointer);
gboolean (*get_button_visibility)(const GSheetRow *geo,
- gint row, const GtkSheet *);
+ gint row, gpointer);
const GtkSheetChild * (*get_button_child)(const GSheetRow *geo,
- gint row, const GtkSheet *);
+ gint row, gpointer);
- guint (*top_ypixel)(const GSheetRow *geo, gint row, const GtkSheet *);
- gint (*pixel_to_row)(const GSheetRow *geo, guint pixel, const GtkSheet *);
+ guint (*top_ypixel)(const GSheetRow *geo, gint row, gpointer);
+ gint (*pixel_to_row)(const GSheetRow *geo, guint pixel, gpointer);
};
@@ -87,33 +87,33 @@
gint g_sheet_row_get_height (const GSheetRow *grow,
- gint row, const GtkSheet *sheet);
+ gint row, gpointer);
void g_sheet_row_set_height (GSheetRow *grow,
- gint row, gint size, const GtkSheet
*sheet);
+ gint row, gint size, gpointer);
gboolean g_sheet_row_get_visibility(const GSheetRow *grow,
- gint row, const GtkSheet *sheet);
+ gint row, gpointer);
gboolean g_sheet_row_get_sensitivity(const GSheetRow *grow,
- gint row, const GtkSheet *sheet);
+ gint row, gpointer);
GtkSheetButton *g_sheet_row_get_button(const GSheetRow *grow,
- gint row, const GtkSheet *sheet);
+ gint row, gpointer);
-gint g_sheet_row_get_row_count(const GSheetRow *geo, const GtkSheet *sheet);
+gint g_sheet_row_get_row_count(const GSheetRow *geo, gpointer);
/* Return the top pixel of row ROW */
gint g_sheet_row_start_pixel(const GSheetRow *geo, gint row,
- const GtkSheet *sheet);
+ gpointer);
/* Return the row contained by pixel PIXEL */
gint g_sheet_row_pixel_to_row(const GSheetRow *geo, gint pixel,
- const GtkSheet *sheet);
+ gpointer);
void g_sheet_row_rows_deleted(GSheetRow *geo,
Index: lib/gtksheet/gsheet-uniform-column.c
===================================================================
RCS file: /sources/pspp/pspp/lib/gtksheet/gsheet-uniform-column.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- lib/gtksheet/gsheet-uniform-column.c 4 Apr 2006 12:43:21 -0000
1.2
+++ lib/gtksheet/gsheet-uniform-column.c 19 Jun 2006 10:16:51 -0000
1.3
@@ -96,7 +96,7 @@
}
static gint
-g_sheet_uniform_column_get_width(const GSheetColumn *geom, gint u)
+g_sheet_uniform_column_get_width(const GSheetColumn *geom, gint u, gpointer
data)
{
GSheetUniformColumn *ug = G_SHEET_UNIFORM_COLUMN(geom);
@@ -104,7 +104,7 @@
}
static gint
-g_sheet_uniform_column_get_sensitivity(const GSheetColumn *geom, gint u)
+g_sheet_uniform_column_get_sensitivity(const GSheetColumn *geom, gint u,
gpointer data)
{
GSheetUniformColumn *ug = G_SHEET_UNIFORM_COLUMN(geom);
@@ -113,7 +113,7 @@
static gint
-g_sheet_uniform_column_get_visibility(const GSheetColumn *geom, gint u)
+g_sheet_uniform_column_get_visibility(const GSheetColumn *geom, gint u,
gpointer data)
{
GSheetUniformColumn *ug = G_SHEET_UNIFORM_COLUMN(geom);
@@ -121,32 +121,25 @@
}
-static const gchar *
-g_sheet_uniform_column_get_button_label(const GSheetColumn *geom, gint u)
+static gchar *
+g_sheet_uniform_column_get_button_label(const GSheetColumn *geom, gint u,
gpointer data)
{
- static gchar *label;
-
- g_free(label);
- label = g_strdup_printf("%d", u);
+ gchar *label = g_strdup_printf("%d", u);
return label;
}
static GtkJustification
-g_sheet_uniform_column_get_justification(const GSheetColumn *geom, gint u)
+g_sheet_uniform_column_get_justification(const GSheetColumn *geom, gint u,
gpointer data)
{
- /*
- GSheetUniformColumn *ug = G_SHEET_UNIFORM_COLUMN(geom);
- */
-
return GTK_JUSTIFY_FILL;
}
static gint
-g_sheet_uniform_column_get_column_count(const GSheetColumn *geom)
+g_sheet_uniform_column_get_column_count(const GSheetColumn *geom, gpointer
data)
{
GSheetUniformColumn *ug = G_SHEET_UNIFORM_COLUMN(geom);
Index: lib/gtksheet/gsheet-uniform-row.c
===================================================================
RCS file: /sources/pspp/pspp/lib/gtksheet/gsheet-uniform-row.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- lib/gtksheet/gsheet-uniform-row.c 25 May 2006 10:29:14 -0000 1.3
+++ lib/gtksheet/gsheet-uniform-row.c 19 Jun 2006 10:16:51 -0000 1.4
@@ -95,7 +95,7 @@
}
static gint
-g_sheet_uniform_row_get_height(const GSheetRow *geom, gint u)
+g_sheet_uniform_row_get_height(const GSheetRow *geom, gint u, gpointer data)
{
GSheetUniformRow *ug = G_SHEET_UNIFORM_ROW(geom);
@@ -103,7 +103,7 @@
}
static gboolean
-g_sheet_uniform_row_get_sensitivity(const GSheetRow *geom, gint u)
+g_sheet_uniform_row_get_sensitivity(const GSheetRow *geom, gint u, gpointer
data)
{
GSheetUniformRow *ug = G_SHEET_UNIFORM_ROW(geom);
@@ -112,7 +112,7 @@
static gboolean
-g_sheet_uniform_row_get_visibility(const GSheetRow *geom, gint u)
+g_sheet_uniform_row_get_visibility(const GSheetRow *geom, gint u, gpointer
data)
{
GSheetUniformRow *ug = G_SHEET_UNIFORM_ROW(geom);
@@ -120,8 +120,8 @@
}
-static const gchar *
-g_sheet_uniform_row_get_button_label(const GSheetRow *geom, gint u)
+static gchar *
+g_sheet_uniform_row_get_button_label(const GSheetRow *geom, gint u, gpointer
data)
{
gchar *label = g_strdup_printf("%d", u);
@@ -131,7 +131,7 @@
static gint
-g_sheet_uniform_row_get_row_count(const GSheetRow *geom)
+g_sheet_uniform_row_get_row_count(const GSheetRow *geom, gpointer data)
{
GSheetUniformRow *ug = G_SHEET_UNIFORM_ROW(geom);
@@ -164,23 +164,23 @@
static guint
-g_sheet_uniform_row_top_ypixel(GSheetRow *geo, gint row, const GtkSheet *sheet)
+g_sheet_uniform_row_top_ypixel(const GSheetRow *geo, gint row, gpointer data)
{
GSheetUniformRow *ug = G_SHEET_UNIFORM_ROW(geo);
return row * ug->height;
}
-static guint
-g_sheet_uniform_row_pixel_to_row(GSheetRow *geo,
- gint pixel, const GtkSheet *sheet)
+static gint
+g_sheet_uniform_row_pixel_to_row(const GSheetRow *geo, guint pixel,
+ gpointer data)
{
GSheetUniformRow *ug = G_SHEET_UNIFORM_ROW(geo);
gint row = pixel / ug->height;
- if (row >= g_sheet_uniform_row_get_row_count(geo))
- row = g_sheet_uniform_row_get_row_count(geo) -1;
+ if (row >= g_sheet_uniform_row_get_row_count(geo, data))
+ row = g_sheet_uniform_row_get_row_count(geo, data) -1;
return row;
}
Index: lib/gtksheet/gtksheet.c
===================================================================
RCS file: /sources/pspp/pspp/lib/gtksheet/gtksheet.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -b -r1.10 -r1.11
--- lib/gtksheet/gtksheet.c 30 May 2006 12:01:33 -0000 1.10
+++ lib/gtksheet/gtksheet.c 19 Jun 2006 10:16:51 -0000 1.11
@@ -60,7 +60,6 @@
#include "gtkextra-marshal.h"
#include "gsheetmodel.h"
-
/* sheet flags */
enum
{
@@ -104,6 +103,10 @@
#define DEFAULT_COLUMN_WIDTH 80
+static void gtk_sheet_column_title_button_draw(GtkSheet *sheet, gint column);
+
+static void gtk_sheet_row_title_button_draw(GtkSheet *sheet, gint row);
+
static gboolean gtk_sheet_cell_empty (const GtkSheet *sheet, gint row, gint
col);
@@ -178,20 +181,20 @@
static gint
-yyy_row_is_visible(GtkSheet *sheet, gint row)
+yyy_row_is_visible(const GtkSheet *sheet, gint row)
{
GSheetRow *row_geo = sheet->row_geometry;
- return g_sheet_row_get_visibility(row_geo, row, sheet);
+ return g_sheet_row_get_visibility(row_geo, row, 0);
}
static gint
-yyy_row_is_sensitive(GtkSheet *sheet, gint row)
+yyy_row_is_sensitive(const GtkSheet *sheet, gint row)
{
GSheetRow *row_geo = sheet->row_geometry;
- return g_sheet_row_get_sensitivity(row_geo, row, sheet);
+ return g_sheet_row_get_sensitivity(row_geo, row, 0);
}
@@ -201,7 +204,7 @@
{
GSheetRow *row_geo = sheet->row_geometry;
- return g_sheet_row_get_row_count(row_geo, sheet);
+ return g_sheet_row_get_row_count(row_geo, 0);
}
static inline gint
@@ -209,15 +212,15 @@
{
GSheetRow *row_geo = sheet->row_geometry;
- return g_sheet_row_get_height(row_geo, row, sheet);
+ return g_sheet_row_get_height(row_geo, row, 0);
}
static gint
-yyy_row_top_ypixel(GtkSheet *sheet, gint row)
+yyy_row_top_ypixel(const GtkSheet *sheet, gint row)
{
GSheetRow *geo = sheet->row_geometry;
- gint y = g_sheet_row_start_pixel(geo, row, sheet);
+ gint y = g_sheet_row_start_pixel(geo, row, 0);
if ( sheet->column_titles_visible )
y += sheet->column_title_area.height;
@@ -228,7 +231,7 @@
/* Return the row containing pixel Y */
static gint
-yyy_row_ypixel_to_row(GtkSheet *sheet, gint y)
+yyy_row_ypixel_to_row(const GtkSheet *sheet, gint y)
{
GSheetRow *geo = sheet->row_geometry;
@@ -239,15 +242,14 @@
if(y < cy) return 0;
-
- return g_sheet_row_pixel_to_row(geo, y - cy, sheet);
+ return g_sheet_row_pixel_to_row(geo, y - cy, 0);
}
/* gives the top pixel of the given row in context of
* the sheet's voffset */
static inline gint
-ROW_TOP_YPIXEL(GtkSheet *sheet, gint row)
+ROW_TOP_YPIXEL(const GtkSheet *sheet, gint row)
{
return (sheet->voffset + yyy_row_top_ypixel(sheet, row));
}
@@ -256,26 +258,29 @@
/* returns the row index from a y pixel location in the
* context of the sheet's voffset */
static inline gint
-ROW_FROM_YPIXEL(GtkSheet *sheet, gint y)
+ROW_FROM_YPIXEL(const GtkSheet *sheet, gint y)
{
return (yyy_row_ypixel_to_row(sheet, y));
}
static inline GtkSheetButton *
-xxx_column_button(GtkSheet *sheet, gint col)
+xxx_column_button(const GtkSheet *sheet, gint col)
{
GSheetColumn *col_geo = sheet->column_geometry;
+ if ( col < 0 ) return NULL ;
- return g_sheet_column_get_button(col_geo, col, sheet);
+ return g_sheet_column_get_button(col_geo, col, 0);
}
static inline gint
-xxx_column_left_xpixel(GtkSheet *sheet, gint col)
+xxx_column_left_xpixel(const GtkSheet *sheet, gint col)
{
GSheetColumn *geo = sheet->column_geometry;
- gint x = g_sheet_column_start_pixel(geo, col, sheet);
+ /* FIXME: Get rid of this nasty cast.
+ In fact, get rid of this entire variable */
+ gint x = g_sheet_column_start_pixel(geo, col, (GtkSheet *) sheet);
if ( sheet->row_titles_visible )
x += sheet->row_title_area.width;
@@ -288,7 +293,9 @@
{
GSheetColumn *col_geo = sheet->column_geometry;
- return g_sheet_column_get_width(col_geo, col, sheet);
+ /* FIXME: Get rid of this nasty cast.
+ In fact, get rid of this entire variable */
+ return g_sheet_column_get_width(col_geo, col, (GtkSheet *)sheet);
}
@@ -312,7 +319,7 @@
{
GSheetColumn *col_geo = sheet->column_geometry;
- return g_sheet_column_get_left_text_column(col_geo, col, sheet);
+ return g_sheet_column_get_left_text_column(col_geo, col, 0);
}
static inline void
@@ -320,7 +327,7 @@
{
GSheetColumn *col_geo = sheet->column_geometry;
- g_sheet_column_set_right_text_column(col_geo, col, i, sheet);
+ g_sheet_column_set_right_text_column(col_geo, col, i, 0);
}
static inline gint
@@ -328,7 +335,7 @@
{
GSheetColumn *col_geo = sheet->column_geometry;
- return g_sheet_column_get_right_text_column(col_geo, col, sheet);
+ return g_sheet_column_get_right_text_column(col_geo, col, 0);
}
static inline GtkJustification
@@ -336,31 +343,31 @@
{
GSheetColumn *col_geo = sheet->column_geometry;
- return g_sheet_column_get_justification(col_geo, col, sheet);
+ return g_sheet_column_get_justification(col_geo, col, 0);
}
static inline gint
-xxx_column_is_visible(GtkSheet *sheet, gint col)
+xxx_column_is_visible(const GtkSheet *sheet, gint col)
{
GSheetColumn *col_geo = sheet->column_geometry;
- return g_sheet_column_get_visibility(col_geo, col, sheet);
+ return g_sheet_column_get_visibility(col_geo, col, 0);
}
static inline gint
-xxx_column_is_sensitive(GtkSheet *sheet, gint col)
+xxx_column_is_sensitive(const GtkSheet *sheet, gint col)
{
GSheetColumn *col_geo = sheet->column_geometry;
- return g_sheet_column_get_sensitivity(col_geo, col, sheet);
+ return g_sheet_column_get_sensitivity(col_geo, col, 0);
}
/* gives the left pixel of the given column in context of
* the sheet's hoffset */
static inline gint
-COLUMN_LEFT_XPIXEL(GtkSheet *sheet, gint ncol)
+COLUMN_LEFT_XPIXEL(const GtkSheet *sheet, gint ncol)
{
return (sheet->hoffset + xxx_column_left_xpixel(sheet, ncol));
}
@@ -370,13 +377,13 @@
{
GSheetColumn *col_geo = sheet->column_geometry;
- return g_sheet_column_get_column_count(col_geo, sheet);
+ return g_sheet_column_get_column_count(col_geo, 0);
}
/* returns the column index from a x pixel location in the
* context of the sheet's hoffset */
static inline gint
-COLUMN_FROM_XPIXEL (GtkSheet * sheet,
+COLUMN_FROM_XPIXEL (const GtkSheet * sheet,
gint x)
{
gint i, cx;
@@ -448,15 +455,15 @@
#define MAX_VISIBLE_COLUMN(sheet) sheet->view.coli
-static inline gint
-POSSIBLE_XDRAG(GtkSheet *sheet, gint x, gint *drag_column)
+static inline gboolean
+POSSIBLE_XDRAG(const GtkSheet *sheet, gint x, gint *drag_column)
{
gint column, xdrag;
column=COLUMN_FROM_XPIXEL(sheet, x);
*drag_column=column;
- xdrag=COLUMN_LEFT_XPIXEL(sheet,column)+CELL_SPACING;
+ xdrag = COLUMN_LEFT_XPIXEL(sheet, column)+CELL_SPACING;
if(x <= xdrag+DRAG_WIDTH/2 && column != 0){
while(! xxx_column_is_visible(sheet, column-1) && column>0) column--;
*drag_column=column-1;
@@ -470,8 +477,8 @@
return FALSE;
}
-static inline gint
-POSSIBLE_YDRAG(GtkSheet *sheet, gint y, gint *drag_row)
+static inline gboolean
+POSSIBLE_YDRAG(const GtkSheet *sheet, gint y, gint *drag_row)
{
gint row, ydrag;
@@ -494,57 +501,75 @@
return FALSE;
}
-static inline gint POSSIBLE_DRAG(GtkSheet *sheet, gint x, gint y,
+static inline gboolean
+POSSIBLE_DRAG(const GtkSheet *sheet, gint x, gint y,
gint *drag_row, gint *drag_column)
{
gint ydrag, xdrag;
- *drag_column=COLUMN_FROM_XPIXEL(sheet,x);
- *drag_row=ROW_FROM_YPIXEL(sheet,y);
+ /* Can't drag if nothing is selected */
+ if ( sheet->range.row0 < 0 || sheet->range.rowi < 0 ||
+ sheet->range.col0 < 0 || sheet->range.coli < 0 )
+ return FALSE;
+
+ *drag_column = COLUMN_FROM_XPIXEL(sheet, x);
+ *drag_row = ROW_FROM_YPIXEL(sheet, y);
- if(x>=COLUMN_LEFT_XPIXEL(sheet,sheet->range.col0)-DRAG_WIDTH/2 &&
- x<=COLUMN_LEFT_XPIXEL(sheet,sheet->range.coli)+
- xxx_column_width(sheet, sheet->range.coli) + DRAG_WIDTH/2){
+ if(x >= COLUMN_LEFT_XPIXEL(sheet, sheet->range.col0) - DRAG_WIDTH/2 &&
+ x <= COLUMN_LEFT_XPIXEL(sheet, sheet->range.coli) +
+ xxx_column_width(sheet, sheet->range.coli) + DRAG_WIDTH/2)
+ {
ydrag=ROW_TOP_YPIXEL(sheet,sheet->range.row0);
- if(y>=ydrag-DRAG_WIDTH/2 && y<=ydrag+DRAG_WIDTH/2){
- *drag_row=sheet->range.row0;
+ if(y >= ydrag - DRAG_WIDTH/2 && y <= ydrag + DRAG_WIDTH/2)
+ {
+ *drag_row = sheet->range.row0;
return TRUE;
}
- ydrag=ROW_TOP_YPIXEL(sheet,sheet->range.rowi)+
+ ydrag = ROW_TOP_YPIXEL(sheet, sheet->range.rowi) +
yyy_row_height(sheet, sheet->range.rowi);
- if(y>=ydrag-DRAG_WIDTH/2 && y<=ydrag+DRAG_WIDTH/2){
- *drag_row=sheet->range.rowi;
+ if(y >= ydrag - DRAG_WIDTH/2 && y <= ydrag+DRAG_WIDTH/2)
+ {
+ *drag_row = sheet->range.rowi;
return TRUE;
}
}
- if(y>=ROW_TOP_YPIXEL(sheet,sheet->range.row0)-DRAG_WIDTH/2 &&
- y<=ROW_TOP_YPIXEL(sheet,sheet->range.rowi)+
- yyy_row_height(sheet, sheet->range.rowi)+DRAG_WIDTH/2){
- xdrag=COLUMN_LEFT_XPIXEL(sheet,sheet->range.col0);
- if(x>=xdrag-DRAG_WIDTH/2 && x<=xdrag+DRAG_WIDTH/2){
- *drag_column=sheet->range.col0;
+ if(y >= ROW_TOP_YPIXEL(sheet, sheet->range.row0) - DRAG_WIDTH/2 &&
+ y <= ROW_TOP_YPIXEL(sheet, sheet->range.rowi) +
+ yyy_row_height(sheet, sheet->range.rowi) + DRAG_WIDTH/2)
+ {
+ xdrag = COLUMN_LEFT_XPIXEL(sheet, sheet->range.col0);
+ if(x >= xdrag-DRAG_WIDTH/2 && x <= xdrag + DRAG_WIDTH/2)
+ {
+ *drag_column = sheet->range.col0;
return TRUE;
}
- xdrag=COLUMN_LEFT_XPIXEL(sheet,sheet->range.coli)+
+ xdrag = COLUMN_LEFT_XPIXEL(sheet, sheet->range.coli) +
xxx_column_width(sheet, sheet->range.coli);
- if(x>=xdrag-DRAG_WIDTH/2 && x<=xdrag+DRAG_WIDTH/2){
- *drag_column=sheet->range.coli;
+ if(x >= xdrag - DRAG_WIDTH/2 && x <= xdrag + DRAG_WIDTH/2)
+ {
+ *drag_column = sheet->range.coli;
return TRUE;
}
}
return FALSE;
}
-static inline gint POSSIBLE_RESIZE(GtkSheet *sheet, gint x, gint y,
+static inline gboolean
+POSSIBLE_RESIZE(const GtkSheet *sheet, gint x, gint y,
gint *drag_row, gint *drag_column)
{
gint xdrag, ydrag;
- xdrag=COLUMN_LEFT_XPIXEL(sheet,sheet->range.coli)+
+ /* Can't drag if nothing is selected */
+ if ( sheet->range.row0 < 0 || sheet->range.rowi < 0 ||
+ sheet->range.col0 < 0 || sheet->range.coli < 0 )
+ return FALSE;
+
+ xdrag = COLUMN_LEFT_XPIXEL(sheet,sheet->range.coli)+
xxx_column_width(sheet, sheet->range.coli);
- ydrag=ROW_TOP_YPIXEL(sheet,sheet->range.rowi)+
+ ydrag = ROW_TOP_YPIXEL(sheet,sheet->range.rowi)+
yyy_row_height(sheet, sheet->range.rowi);
if(sheet->state == GTK_SHEET_COLUMN_SELECTED)
@@ -637,7 +662,7 @@
static gint gtk_sheet_move_query (GtkSheet *sheet,
gint row, gint column);
static void gtk_sheet_real_select_range (GtkSheet * sheet,
- GtkSheetRange * range);
+ const GtkSheetRange * range);
static void gtk_sheet_real_unselect_range (GtkSheet * sheet,
const GtkSheetRange * range);
static void gtk_sheet_extend_selection (GtkSheet *sheet,
@@ -713,8 +738,6 @@
static void size_allocate_row_title_buttons (GtkSheet * sheet);
-static void gtk_sheet_button_draw (GtkSheet *sheet,
- gint row, gint column);
static void size_allocate_global_button (GtkSheet *sheet);
static void gtk_sheet_button_size_request (GtkSheet *sheet,
const GtkSheetButton *button,
@@ -1104,10 +1127,10 @@
sheet->sheet_entry=NULL;
sheet->pixmap=NULL;
- sheet->range.row0=0;
- sheet->range.rowi=0;
- sheet->range.col0=0;
- sheet->range.coli=0;
+ sheet->range.row0 = 0;
+ sheet->range.rowi = 0;
+ sheet->range.col0 = 0;
+ sheet->range.coli = 0;
sheet->state=GTK_SHEET_NORMAL;
@@ -1143,6 +1166,7 @@
columns_inserted_deleted_callback (GSheetModel *model, gint first_column, gint
n_columns,
gpointer data)
{
+ gint i;
GtkSheet *sheet = GTK_SHEET(data);
GtkSheetRange range;
@@ -1157,22 +1181,39 @@
range.coli = xxx_column_count(sheet) - 1;
range.rowi = yyy_row_count(sheet) - 1;
+ sheet->view.col0 =
+ COLUMN_FROM_XPIXEL(sheet, sheet->row_title_area.width + 1);
+
+ sheet->view.coli =
+ COLUMN_FROM_XPIXEL(sheet, sheet->sheet_window_width);
+
+ if ( sheet->view.coli > range.coli)
+ sheet->view.coli = range.coli;
+
+ adjust_scrollbars(sheet);
+
if (sheet->active_cell.col >= model_columns)
gtk_sheet_activate_cell(sheet, sheet->active_cell.row, model_columns - 1);
+ for(i = first_column; i <= MAX_VISIBLE_COLUMN(sheet); i++)
+ gtk_sheet_column_title_button_draw(sheet, i);
+
gtk_sheet_range_draw(sheet, &range);
}
/* Callback which occurs whenever rows are inserted/deleted in the model */
static void
-rows_inserted_deleted_callback (GSheetModel *m, gint first_row, gint n_rows,
+rows_inserted_deleted_callback (GSheetModel *model, gint first_row, gint
n_rows,
gpointer data)
{
+ gint i;
GtkSheet *sheet = GTK_SHEET(data);
GtkSheetRange range;
+ gint model_rows = g_sheet_model_get_row_count(model);
+
/* Need to update all the rows starting from the first row and onwards.
* Previous rows are unchanged, so don't need to be updated.
*/
@@ -1181,8 +1222,23 @@
range.rowi = yyy_row_count(sheet) - 1;
range.coli = xxx_column_count(sheet) - 1;
- gtk_sheet_range_draw(sheet, &range);
+ sheet->view.row0 =
+ ROW_FROM_YPIXEL(sheet, sheet->column_title_area.height + 1);
+ sheet->view.rowi =
+ ROW_FROM_YPIXEL(sheet, sheet->sheet_window_height - 1);
+
+ if ( sheet->view.rowi > range.rowi)
+ sheet->view.rowi = range.rowi;
+
+ adjust_scrollbars(sheet);
+
+ if (sheet->active_cell.row >= model_rows)
+ gtk_sheet_activate_cell(sheet, model_rows - 1, sheet->active_cell.col);
+
+ for(i = first_row; i <= MAX_VISIBLE_ROW(sheet); i++)
+ gtk_sheet_row_title_button_draw(sheet, i);
+ gtk_sheet_range_draw(sheet, &range);
}
/*
@@ -1291,21 +1347,35 @@
}
-
+/* Call back for when the column titles have changed.
+ FIRST is the first column changed.
+ N_COLUMNS is the number of columns which have changed, or -1, which
+ indicates that the column has changed to its right-most extremity
+ */
static void
column_titles_changed(GtkWidget *w, gint first, gint n_columns, gpointer data)
{
GtkSheet *sheet = GTK_SHEET(data);
+ gboolean extremity = FALSE;
+ if ( n_columns == -1 )
+ {
+ extremity = TRUE;
+ n_columns = xxx_column_count(sheet) - 1 ;
+ }
- if(!GTK_SHEET_IS_FROZEN(sheet)){
+ if(!GTK_SHEET_IS_FROZEN(sheet))
+ {
gint i;
- for ( i = first ; i <= MAX_VISIBLE_COLUMN(sheet) ; ++i )
+ for ( i = first ; i <= first + n_columns ; ++i )
{
- gtk_sheet_button_draw(sheet, -1, i);
+ gtk_sheet_column_title_button_draw(sheet, i);
gtk_signal_emit(GTK_OBJECT(sheet), sheet_signals[CHANGED], -1, i);
}
}
+ if ( extremity)
+ gtk_sheet_column_title_button_draw(sheet, -1);
+
}
static void
@@ -1401,10 +1471,7 @@
"changed",
G_CALLBACK(gtk_sheet_entry_changed),
sheet);
-
-
}
-
}
void
@@ -2117,24 +2184,21 @@
}
sheet->state=GTK_SHEET_ROW_SELECTED;
- sheet->range.row0=row;
- sheet->range.col0=0;
- sheet->range.rowi=row;
+ sheet->range.row0 = row;
+ sheet->range.col0 = 0;
+ sheet->range.rowi = row;
sheet->range.coli = xxx_column_count(sheet) - 1;
- sheet->active_cell.row=row;
- sheet->active_cell.col=0;
+ sheet->active_cell.row = row;
+ sheet->active_cell.col = 0;
gtk_signal_emit (GTK_OBJECT (sheet), sheet_signals[SELECT_ROW], row);
gtk_sheet_real_select_range(sheet, NULL);
-
}
void
-gtk_sheet_select_column (GtkSheet * sheet,
- gint column)
+gtk_sheet_select_column (GtkSheet * sheet, gint column)
{
-
g_return_if_fail (sheet != NULL);
g_return_if_fail (GTK_IS_SHEET (sheet));
@@ -2151,16 +2215,15 @@
}
sheet->state=GTK_SHEET_COLUMN_SELECTED;
- sheet->range.row0=0;
- sheet->range.col0=column;
- sheet->range.rowi= yyy_row_count(sheet) - 1;
- sheet->range.coli=column;
- sheet->active_cell.row=0;
- sheet->active_cell.col=column;
+ sheet->range.row0 = 0;
+ sheet->range.col0 = column;
+ sheet->range.rowi = yyy_row_count(sheet) - 1;
+ sheet->range.coli = column;
+ sheet->active_cell.row = 0;
+ sheet->active_cell.col = column;
gtk_signal_emit (GTK_OBJECT (sheet), sheet_signals[SELECT_COLUMN], column);
gtk_sheet_real_select_range(sheet, NULL);
-
}
void
@@ -2519,6 +2582,7 @@
{
if(sheet->hadjustment != hadjustment)
gtk_sheet_set_hadjustment (sheet, hadjustment);
+
if(sheet->vadjustment != vadjustment)
gtk_sheet_set_vadjustment (sheet, vadjustment);
}
@@ -3308,15 +3372,16 @@
{
drawing_range.row0=MIN_VISIBLE_ROW(sheet);
drawing_range.col0=MIN_VISIBLE_COLUMN(sheet);
- drawing_range.rowi=MAX_VISIBLE_ROW(sheet);
+ drawing_range.rowi=MIN(MAX_VISIBLE_ROW(sheet), yyy_row_count(sheet) - 1);
drawing_range.coli=MAX_VISIBLE_COLUMN(sheet);
-/*
+
+
gdk_draw_rectangle (sheet->pixmap,
GTK_WIDGET(sheet)->style->white_gc,
TRUE,
0,0,
sheet->sheet_window_width,sheet->sheet_window_height);
-*/
+
}
else
{
@@ -3412,7 +3477,8 @@
gtk_sheet_draw_backing_pixmap(sheet, drawing_range);
- if(sheet->state != GTK_SHEET_NORMAL && gtk_sheet_range_isvisible(sheet,
sheet->range))
+ if(sheet->state != GTK_SHEET_NORMAL &&
+ gtk_sheet_range_isvisible(sheet, sheet->range))
gtk_sheet_range_draw_selection(sheet, drawing_range);
if(sheet->state == GTK_STATE_NORMAL &&
@@ -3466,18 +3532,21 @@
area.width= xxx_column_width(sheet, j);
area.height=yyy_row_height(sheet, i);
- if(i==sheet->range.row0){
+ if(i==sheet->range.row0)
+ {
area.y=area.y+2;
area.height=area.height-2;
}
if(i==sheet->range.rowi) area.height=area.height-3;
- if(j==sheet->range.col0){
+ if(j==sheet->range.col0)
+ {
area.x=area.x+2;
area.width=area.width-2;
}
if(j==sheet->range.coli) area.width=area.width-3;
- if(i!=sheet->active_cell.row || j!=sheet->active_cell.col){
+ if(i!=sheet->active_cell.row || j!=sheet->active_cell.col)
+ {
gdk_draw_rectangle (sheet->sheet_window,
sheet->xor_gc,
TRUE,
@@ -3490,7 +3559,6 @@
}
gtk_sheet_draw_border(sheet, sheet->range);
-
}
static void
@@ -3507,20 +3575,21 @@
height=ROW_TOP_YPIXEL(sheet, range.rowi)-y+yyy_row_height(sheet, range.rowi);
- if(range.row0==sheet->range.row0){
+ if(range.row0 == sheet->range.row0)
+ {
y=y-5;
height=height+5;
}
- if(range.rowi==sheet->range.rowi) height=height+5;
- if(range.col0==sheet->range.col0){
- x=x-5;
- width=width+5;
+ if(range.rowi==sheet->range.rowi) height = height + 5;
+ if(range.col0==sheet->range.col0)
+ {
+ x = x-5;
+ width = width+5;
}
- if(range.coli==sheet->range.coli) width=width+5;
-
+ if(range.coli == sheet->range.coli) width = width + 5;
- width=MIN(width, sheet->sheet_window_width-x);
- height=MIN(height, sheet->sheet_window_height-y);
+ width = MIN(width, sheet->sheet_window_width - x);
+ height = MIN(height, sheet->sheet_window_height - y);
x--;
y--;
@@ -4094,14 +4163,14 @@
gtk_sheet_real_unselect_range(sheet, NULL);
}
- sheet->range.row0=row;
- sheet->range.col0=col;
- sheet->range.rowi=row;
- sheet->range.coli=col;
- sheet->active_cell.row=row;
- sheet->active_cell.col=col;
- sheet->selection_cell.row=row;
- sheet->selection_cell.col=col;
+ sheet->range.row0 = row;
+ sheet->range.col0 = col;
+ sheet->range.rowi = row;
+ sheet->range.coli = col;
+ sheet->active_cell.row = row;
+ sheet->active_cell.col = col;
+ sheet->selection_cell.row = row;
+ sheet->selection_cell.col = col;
#if 0
row_button_set(sheet, row);
column_button_set(sheet, col);
@@ -4658,7 +4727,7 @@
static void
gtk_sheet_real_select_range (GtkSheet * sheet,
- GtkSheetRange * range)
+ const GtkSheetRange * range)
{
gint state;
@@ -4666,10 +4735,12 @@
if(range==NULL) range=&sheet->range;
+ memcpy(&sheet->range, range, sizeof(*range));
+
if(range->row0 < 0 || range->rowi < 0) return;
if(range->col0 < 0 || range->coli < 0) return;
- state=sheet->state;
+ state = sheet->state;
#if 0
if(state==GTK_SHEET_COLUMN_SELECTED || state==GTK_SHEET_RANGE_SELECTED){
@@ -4755,7 +4826,8 @@
{
gtk_sheet_real_unselect_range(sheet, NULL);
sheet->state = GTK_STATE_NORMAL;
- gtk_sheet_activate_cell(sheet, sheet->active_cell.row,
sheet->active_cell.col);
+ gtk_sheet_activate_cell(sheet,
+ sheet->active_cell.row, sheet->active_cell.col);
}
@@ -4766,16 +4838,14 @@
g_return_if_fail (sheet != NULL);
g_return_if_fail (GTK_WIDGET_REALIZED(GTK_WIDGET(sheet)));
- if(range==NULL){
- range=&sheet->range;
- }
+ if( range == NULL)
+ range = &sheet->range;
if(range->row0 < 0 || range->rowi < 0) return;
if(range->col0 < 0 || range->coli < 0) return;
- if (gtk_sheet_range_isvisible (sheet, *range)){
+ if (gtk_sheet_range_isvisible (sheet, *range))
gtk_sheet_draw_backing_pixmap(sheet, *range);
- }
#if 0
for(i=range->col0; i<=range->coli; i++){
@@ -4787,6 +4857,11 @@
}
#endif
+ sheet->range.row0 = -1;
+ sheet->range.rowi = -1;
+ sheet->range.col0 = -1;
+ sheet->range.coli = -1;
+
gtk_sheet_position_children(sheet);
}
@@ -4806,29 +4881,34 @@
if (GTK_WIDGET_DRAWABLE (widget))
{
- range.row0=ROW_FROM_YPIXEL(sheet,event->area.y);
- range.col0=COLUMN_FROM_XPIXEL(sheet,event->area.x);
- range.rowi=ROW_FROM_YPIXEL(sheet,event->area.y+event->area.height);
- range.coli=COLUMN_FROM_XPIXEL(sheet,event->area.x+event->area.width);
+ range.row0 = ROW_FROM_YPIXEL(sheet, event->area.y);
+ range.col0 = COLUMN_FROM_XPIXEL(sheet, event->area.x);
+ range.rowi = ROW_FROM_YPIXEL(sheet, event->area.y + event->area.height);
+ range.coli = COLUMN_FROM_XPIXEL(sheet, event->area.x +
event->area.width);
/* exposure events on the sheet */
-
- if(event->window == sheet->row_title_window &&
sheet->row_titles_visible){
+ if(event->window == sheet->row_title_window &&
+ sheet->row_titles_visible)
+ {
gint i;
for(i = MIN_VISIBLE_ROW(sheet); i <= MAX_VISIBLE_ROW(sheet); i++)
- gtk_sheet_button_draw(sheet,i,-1);
+ gtk_sheet_row_title_button_draw(sheet, i);
}
- if(event->window == sheet->column_title_window &&
sheet->column_titles_visible){
+ if(event->window == sheet->column_title_window &&
+ sheet->column_titles_visible)
+ {
gint i;
for(i = MIN_VISIBLE_COLUMN(sheet); i <= MAX_VISIBLE_COLUMN(sheet);
i++)
- gtk_sheet_button_draw(sheet,-1,i);
+ gtk_sheet_column_title_button_draw(sheet, i);
}
- if (event->window == sheet->sheet_window){
+ if (event->window == sheet->sheet_window)
+ {
gtk_sheet_draw_backing_pixmap(sheet, range);
- if(sheet->state != GTK_SHEET_NORMAL){
+ if(sheet->state != GTK_SHEET_NORMAL)
+ {
if(gtk_sheet_range_isvisible(sheet, sheet->range))
gtk_sheet_draw_backing_pixmap(sheet, sheet->range);
if(GTK_SHEET_IN_RESIZE(sheet) || GTK_SHEET_IN_DRAG(sheet))
@@ -4840,17 +4920,15 @@
draw_xor_rectangle(sheet, sheet->drag_range);
}
- if((!GTK_SHEET_IN_XDRAG(sheet)) && (!GTK_SHEET_IN_YDRAG(sheet))){
+ if((!GTK_SHEET_IN_XDRAG(sheet)) && (!GTK_SHEET_IN_YDRAG(sheet)))
+ {
if(sheet->state == GTK_SHEET_NORMAL){
gtk_sheet_draw_active_cell(sheet);
if(!GTK_SHEET_IN_SELECTION(sheet))
gtk_widget_queue_draw(sheet->sheet_entry);
}
}
-
-
}
-
}
if(sheet->state != GTK_SHEET_NORMAL && GTK_SHEET_IN_SELECTION(sheet))
@@ -5285,82 +5363,106 @@
GtkSheet *sheet;
GdkModifierType mods;
GdkCursorType new_cursor;
- gint x, y, row, column;
+ gint x, y;
+ gint row, column;
g_return_val_if_fail (widget != NULL, FALSE);
g_return_val_if_fail (GTK_IS_SHEET (widget), FALSE);
g_return_val_if_fail (event != NULL, FALSE);
-
sheet = GTK_SHEET (widget);
/* selections on the sheet */
x = event->x;
y = event->y;
- if(event->window == sheet->column_title_window &&
gtk_sheet_columns_resizable(sheet)){
+ if(event->window == sheet->column_title_window &&
+ gtk_sheet_columns_resizable(sheet))
+ {
gtk_widget_get_pointer(widget, &x, &y);
- if(!GTK_SHEET_IN_SELECTION(sheet) && POSSIBLE_XDRAG(sheet, x, &column)){
- new_cursor=GDK_SB_H_DOUBLE_ARROW;
- if(new_cursor != sheet->cursor_drag->type){
+ if(!GTK_SHEET_IN_SELECTION(sheet) &&
+ POSSIBLE_XDRAG(sheet, x, &column))
+ {
+ new_cursor = GDK_SB_H_DOUBLE_ARROW;
+ if(new_cursor != sheet->cursor_drag->type)
+ {
gdk_cursor_destroy(sheet->cursor_drag);
- sheet->cursor_drag=gdk_cursor_new(GDK_SB_H_DOUBLE_ARROW);
- gdk_window_set_cursor(sheet->column_title_window,sheet->cursor_drag);
+ sheet->cursor_drag = gdk_cursor_new(GDK_SB_H_DOUBLE_ARROW);
+ gdk_window_set_cursor(sheet->column_title_window,
+ sheet->cursor_drag);
}
- }else{
- new_cursor=GDK_TOP_LEFT_ARROW;
- if(!GTK_SHEET_IN_XDRAG(sheet) && new_cursor != sheet->cursor_drag->type){
+ }
+ else
+ {
+ new_cursor = GDK_TOP_LEFT_ARROW;
+ if(!GTK_SHEET_IN_XDRAG(sheet) &&
+ new_cursor != sheet->cursor_drag->type)
+ {
gdk_cursor_destroy(sheet->cursor_drag);
- sheet->cursor_drag=gdk_cursor_new(GDK_TOP_LEFT_ARROW);
- gdk_window_set_cursor(sheet->column_title_window,sheet->cursor_drag);
+ sheet->cursor_drag = gdk_cursor_new(GDK_TOP_LEFT_ARROW);
+ gdk_window_set_cursor(sheet->column_title_window,
+ sheet->cursor_drag);
}
}
}
- if(event->window == sheet->row_title_window &&
gtk_sheet_rows_resizable(sheet)){
+ if(event->window == sheet->row_title_window &&
+ gtk_sheet_rows_resizable(sheet))
+ {
gtk_widget_get_pointer(widget, &x, &y);
- if(!GTK_SHEET_IN_SELECTION(sheet) && POSSIBLE_YDRAG(sheet,y, &column)){
- new_cursor=GDK_SB_V_DOUBLE_ARROW;
+ if(!GTK_SHEET_IN_SELECTION(sheet) && POSSIBLE_YDRAG(sheet,y, &column))
+ {
+ new_cursor = GDK_SB_V_DOUBLE_ARROW;
if(new_cursor != sheet->cursor_drag->type){
gdk_cursor_destroy(sheet->cursor_drag);
- sheet->cursor_drag=gdk_cursor_new(GDK_SB_V_DOUBLE_ARROW);
- gdk_window_set_cursor(sheet->row_title_window,sheet->cursor_drag);
+ sheet->cursor_drag = gdk_cursor_new(GDK_SB_V_DOUBLE_ARROW);
+ gdk_window_set_cursor(sheet->row_title_window, sheet->cursor_drag);
}
- }else{
- new_cursor=GDK_TOP_LEFT_ARROW;
- if(!GTK_SHEET_IN_YDRAG(sheet) && new_cursor != sheet->cursor_drag->type){
+ }
+ else
+ {
+ new_cursor = GDK_TOP_LEFT_ARROW;
+ if(!GTK_SHEET_IN_YDRAG(sheet) &&
+ new_cursor != sheet->cursor_drag->type)
+ {
gdk_cursor_destroy(sheet->cursor_drag);
- sheet->cursor_drag=gdk_cursor_new(GDK_TOP_LEFT_ARROW);
- gdk_window_set_cursor(sheet->row_title_window,sheet->cursor_drag);
+ sheet->cursor_drag = gdk_cursor_new(GDK_TOP_LEFT_ARROW);
+ gdk_window_set_cursor(sheet->row_title_window,
sheet->cursor_drag);
}
}
}
- new_cursor=GDK_PLUS;
- if(!POSSIBLE_DRAG(sheet,x,y,&row,&column) && !GTK_SHEET_IN_DRAG(sheet) &&
- !POSSIBLE_RESIZE(sheet,x,y,&row,&column) && !GTK_SHEET_IN_RESIZE(sheet) &&
- event->window == sheet->sheet_window &&
- new_cursor != sheet->cursor_drag->type){
+ new_cursor = GDK_PLUS;
+ if( event->window == sheet->sheet_window &&
+ !POSSIBLE_DRAG(sheet, x, y, &row, &column) &&
+ !GTK_SHEET_IN_DRAG(sheet) &&
+ !POSSIBLE_RESIZE(sheet, x, y, &row, &column) &&
+ !GTK_SHEET_IN_RESIZE(sheet) &&
+ new_cursor != sheet->cursor_drag->type)
+ {
gdk_cursor_destroy(sheet->cursor_drag);
- sheet->cursor_drag=gdk_cursor_new(GDK_PLUS);
- gdk_window_set_cursor(sheet->sheet_window,sheet->cursor_drag);
+ sheet->cursor_drag = gdk_cursor_new(GDK_PLUS);
+ gdk_window_set_cursor(sheet->sheet_window, sheet->cursor_drag);
}
- new_cursor=GDK_TOP_LEFT_ARROW;
- if(!(POSSIBLE_RESIZE(sheet,x,y,&row,&column) || GTK_SHEET_IN_RESIZE(sheet))
&&
- (POSSIBLE_DRAG(sheet, x,y,&row,&column) || GTK_SHEET_IN_DRAG(sheet)) &&
- event->window == sheet->sheet_window &&
- new_cursor != sheet->cursor_drag->type){
+ new_cursor = GDK_TOP_LEFT_ARROW;
+ if( event->window == sheet->sheet_window &&
+ !(POSSIBLE_RESIZE(sheet,x,y,&row,&column) || GTK_SHEET_IN_RESIZE(sheet))
&& (POSSIBLE_DRAG(sheet, x,y,&row,&column) || GTK_SHEET_IN_DRAG(sheet)) &&
+
+ new_cursor != sheet->cursor_drag->type)
+ {
gdk_cursor_destroy(sheet->cursor_drag);
sheet->cursor_drag=gdk_cursor_new(GDK_TOP_LEFT_ARROW);
gdk_window_set_cursor(sheet->sheet_window,sheet->cursor_drag);
}
new_cursor=GDK_SIZING;
- if(!GTK_SHEET_IN_DRAG(sheet) &&
- (POSSIBLE_RESIZE(sheet,x,y,&row,&column) || GTK_SHEET_IN_RESIZE(sheet)) &&
- event->window == sheet->sheet_window &&
- new_cursor != sheet->cursor_drag->type){
+ if( event->window == sheet->sheet_window &&
+ !GTK_SHEET_IN_DRAG(sheet) &&
+ (POSSIBLE_RESIZE(sheet, x, y, &row, &column) ||
+ GTK_SHEET_IN_RESIZE(sheet)) &&
+ new_cursor != sheet->cursor_drag->type)
+ {
gdk_cursor_destroy(sheet->cursor_drag);
sheet->cursor_drag=gdk_cursor_new(GDK_SIZING);
gdk_window_set_cursor(sheet->sheet_window,sheet->cursor_drag);
@@ -5369,7 +5471,8 @@
gdk_window_get_pointer (widget->window, &x, &y, &mods);
if(!(mods & GDK_BUTTON1_MASK)) return FALSE;
- if (GTK_SHEET_IN_XDRAG (sheet)){
+ if (GTK_SHEET_IN_XDRAG (sheet))
+ {
if (event->is_hint || event->window != widget->window)
gtk_widget_get_pointer (widget, &x, NULL);
else
@@ -5385,7 +5488,8 @@
return TRUE;
}
- if (GTK_SHEET_IN_YDRAG (sheet)){
+ if (GTK_SHEET_IN_YDRAG (sheet))
+ {
if (event->is_hint || event->window != widget->window)
gtk_widget_get_pointer (widget, NULL, &y);
else
@@ -5401,7 +5505,8 @@
return TRUE;
}
- if (GTK_SHEET_IN_DRAG(sheet)){
+ if (GTK_SHEET_IN_DRAG(sheet))
+ {
GtkSheetRange aux;
column=COLUMN_FROM_XPIXEL(sheet,x)-sheet->drag_cell.col;
row=ROW_FROM_YPIXEL(sheet,y)-sheet->drag_cell.row;
@@ -5411,14 +5516,16 @@
sheet->y_drag=y;
aux=sheet->range;
if(aux.row0+row >= 0 && aux.rowi+row < yyy_row_count(sheet) &&
- aux.col0+column >= 0 && aux.coli+column < xxx_column_count(sheet)){
+ aux.col0+column >= 0 && aux.coli+column < xxx_column_count(sheet))
+ {
aux=sheet->drag_range;
- sheet->drag_range.row0=sheet->range.row0+row;
- sheet->drag_range.col0=sheet->range.col0+column;
- sheet->drag_range.rowi=sheet->range.rowi+row;
- sheet->drag_range.coli=sheet->range.coli+column;
+ sheet->drag_range.row0 = sheet->range.row0 + row;
+ sheet->drag_range.col0 = sheet->range.col0 + column;
+ sheet->drag_range.rowi = sheet->range.rowi + row;
+ sheet->drag_range.coli = sheet->range.coli + column;
if(aux.row0 != sheet->drag_range.row0 ||
- aux.col0 != sheet->drag_range.col0){
+ aux.col0 != sheet->drag_range.col0)
+ {
draw_xor_rectangle (sheet, aux);
draw_xor_rectangle (sheet, sheet->drag_range);
}
@@ -5426,7 +5533,8 @@
return TRUE;
}
- if (GTK_SHEET_IN_RESIZE(sheet)){
+ if (GTK_SHEET_IN_RESIZE(sheet))
+ {
GtkSheetRange aux;
gint v_h, current_col, current_row, col_threshold, row_threshold;
v_h=1;
@@ -5441,20 +5549,25 @@
/*use half of column width resp. row height as threshold to expand
selection*/
col_threshold = COLUMN_LEFT_XPIXEL(sheet,current_col)+xxx_column_width
(sheet,current_col)/2;
- if (column > 0){
+ if (column > 0)
+ {
if (x < col_threshold)
column-=1;
}
- else if (column < 0){
+ else if (column < 0)
+ {
if (x > col_threshold)
column+=1;
}
- row_threshold = ROW_TOP_YPIXEL(sheet,current_row)+yyy_row_height
(sheet, current_row)/2;
- if (row > 0){
+ row_threshold = ROW_TOP_YPIXEL(sheet,current_row) +
+ yyy_row_height (sheet, current_row)/2;
+ if (row > 0)
+ {
if(y < row_threshold)
row-=1;
}
- else if (row < 0){
+ else if (row < 0)
+ {
if(y > row_threshold)
row+=1;
}
@@ -6088,7 +6201,7 @@
if(!GTK_WIDGET_DRAWABLE(sheet)) return;
for (i = MIN_VISIBLE_COLUMN(sheet); i <= MAX_VISIBLE_COLUMN(sheet); i++)
- gtk_sheet_button_draw(sheet,-1,i);
+ gtk_sheet_column_title_button_draw(sheet, i);
}
static void
@@ -6129,7 +6242,11 @@
if(!GTK_WIDGET_DRAWABLE(sheet)) return;
for(i = MIN_VISIBLE_ROW(sheet); i <= MAX_VISIBLE_ROW(sheet); i++)
- gtk_sheet_button_draw(sheet,i,-1);
+ {
+ if ( i >= yyy_row_count(sheet))
+ break;
+ gtk_sheet_row_title_button_draw(sheet, i);
+ }
}
@@ -6325,50 +6442,46 @@
widget = GTK_WIDGET(sheet);
- if(sheet->sheet_entry){
+ if(sheet->sheet_entry)
+ {
/* avoids warnings */
gtk_widget_ref(sheet->sheet_entry);
gtk_widget_unparent(sheet->sheet_entry);
gtk_widget_destroy(sheet->sheet_entry);
}
- if(sheet->entry_type){
-
- if(!g_type_is_a (sheet->entry_type, GTK_TYPE_ENTRY)){
-
+ if(sheet->entry_type)
+ {
+ if(!g_type_is_a (sheet->entry_type, GTK_TYPE_ENTRY))
+ {
parent = GTK_WIDGET(gtk_type_new(sheet->entry_type));
sheet->sheet_entry = parent;
entry = gtk_sheet_get_entry (sheet);
- if(GTK_IS_ENTRY(entry)) found_entry = TRUE;
-
- } else {
-
+ if(GTK_IS_ENTRY(entry))
+ found_entry = TRUE;
+ }
+ else
+ {
parent = GTK_WIDGET(gtk_type_new(sheet->entry_type));
entry = parent;
found_entry = TRUE;
-
}
- if(!found_entry){
-
+ if(!found_entry)
+ {
g_warning ("Entry type must be GtkEntry subclass, using default");
entry = gtk_item_entry_new();
sheet->sheet_entry = entry;
-
- } else {
-
+ }
+ else
sheet->sheet_entry = parent;
-
}
-
-
- } else {
-
+ else
+ {
entry = gtk_item_entry_new();
sheet->sheet_entry = entry;
-
}
gtk_widget_size_request(sheet->sheet_entry, NULL);
@@ -6461,101 +6574,41 @@
return (sheet->sheet_entry);
}
-#if 0
-/* BUTTONS */
-static void
-row_button_set (GtkSheet *sheet, gint row)
-{
- if(sheet->row[row].button.state == GTK_STATE_ACTIVE) return;
-
- sheet->row[row].button.state = GTK_STATE_ACTIVE;
- gtk_sheet_button_draw(sheet, row, -1);
-
-}
-
-static void
-row_button_release (GtkSheet *sheet, gint row)
-{
- if(sheet->row[row].button.state == GTK_STATE_NORMAL) return;
-
- sheet->row[row].button.state = GTK_STATE_NORMAL;
- gtk_sheet_button_draw(sheet, row, -1);
-}
-#endif
static void
-gtk_sheet_button_draw (GtkSheet *sheet, gint row, gint column)
+gtk_sheet_button_draw(GtkSheet *sheet, GdkWindow *window,
+ GtkSheetButton *button, gboolean is_sensitive,
+ GdkRectangle allocation)
{
- GdkWindow *window = NULL;
GtkShadowType shadow_type;
- guint width = 0, height = 0;
- gint x = 0, y = 0;
- gint index = 0;
gint text_width = 0, text_height = 0;
- GtkSheetButton *button = NULL;
GtkSheetChild *child = NULL;
- GdkRectangle allocation;
- gboolean is_sensitive = FALSE;
+ PangoAlignment align = PANGO_ALIGN_LEFT;
+
+ gboolean rtl ;
+
gint state = 0;
gint len = 0;
gchar *line = 0;
- PangoAlignment align = PANGO_ALIGN_LEFT;
- gboolean rtl;
+ g_return_if_fail(sheet != NULL);
+ g_return_if_fail(button != NULL);
rtl = gtk_widget_get_direction(GTK_WIDGET(sheet)) == GTK_TEXT_DIR_RTL;
- if(!GTK_WIDGET_REALIZED(GTK_WIDGET(sheet))) return;
-
- if(row >= 0 && !yyy_row_is_visible(sheet, row)) return;
- if(column >= 0 && ! xxx_column_is_visible(sheet, column)) return;
- if(row >= 0 && !sheet->row_titles_visible) return;
- if(column >= 0 && !sheet->column_titles_visible) return;
- if(column>=0 && column < MIN_VISIBLE_COLUMN(sheet)) return;
- if(column>=0 && column > MAX_VISIBLE_COLUMN(sheet)) return;
- if(row>=0 && row < MIN_VISIBLE_ROW(sheet)) return;
- if(row>=0 && row > MAX_VISIBLE_ROW(sheet)) return;
- if( (row == -1) && (column == -1) ) return;
-
- if(row==-1){
- window=sheet->column_title_window;
- button= xxx_column_button(sheet, column);
- index=column;
- x = COLUMN_LEFT_XPIXEL(sheet, column)+CELL_SPACING;
- if(sheet->row_titles_visible) x -= sheet->row_title_area.width;
- y = 0;
- width = xxx_column_width(sheet, column);
- height = sheet->column_title_area.height;
- is_sensitive=xxx_column_is_sensitive(sheet, column);
- }
- if(column==-1){
- window=sheet->row_title_window;
- button = yyy_row_button(sheet, row);
- index=row;
- x = 0;
- y = ROW_TOP_YPIXEL(sheet, row)+CELL_SPACING;
- if(sheet->column_titles_visible) y-=sheet->column_title_area.height;
- width = sheet->row_title_area.width;
- height = yyy_row_height(sheet, row);
- is_sensitive=yyy_row_is_sensitive(sheet, row);
- }
-
- allocation.x = x;
- allocation.y = y;
- allocation.width = width;
- allocation.height = height;
-
gdk_window_clear_area (window,
- x, y,
- width, height);
+ allocation.x, allocation.y,
+ allocation.width, allocation.height);
gtk_paint_box (sheet->button->style, window,
GTK_STATE_NORMAL, GTK_SHADOW_OUT,
&allocation, GTK_WIDGET(sheet->button),
- "buttondefault", x, y, width, height);
+ "buttondefault",
+ allocation.x, allocation.y,
+ allocation.width, allocation.height);
state = button->state;
- if(!is_sensitive) state=GTK_STATE_INSENSITIVE;
+ if(!is_sensitive) state = GTK_STATE_INSENSITIVE;
if (state == GTK_STATE_ACTIVE)
shadow_type = GTK_SHADOW_IN;
@@ -6566,9 +6619,12 @@
gtk_paint_box (sheet->button->style, window,
button->state, shadow_type,
&allocation, GTK_WIDGET(sheet->button),
- "button", x, y, width, height);
+ "button",
+ allocation.x, allocation.y,
+ allocation.width, allocation.height);
- if(button->label_visible){
+ if(button->label_visible)
+ {
text_height=DEFAULT_ROW_HEIGHT(GTK_WIDGET(sheet))-2*CELLOFFSET;
@@ -6576,13 +6632,13 @@
&allocation);
gdk_gc_set_clip_rectangle(GTK_WIDGET(sheet)->style->white_gc, &allocation);
- y += 2*sheet->button->style->ythickness;
+ allocation.y += 2*sheet->button->style->ythickness;
if(button->label && strlen(button->label)>0){
gchar *words = 0;
PangoLayout *layout = NULL;
- gint real_x = x, real_y = y;
+ gint real_x = allocation.x, real_y = allocation.y;
words=button->label;
line = g_new(gchar, 1);
@@ -6601,16 +6657,16 @@
layout = gtk_widget_create_pango_layout (GTK_WIDGET(sheet),
line);
switch(button->justification){
case GTK_JUSTIFY_LEFT:
- real_x = x + CELLOFFSET;
+ real_x = allocation.x + CELLOFFSET;
align = rtl ? PANGO_ALIGN_RIGHT : PANGO_ALIGN_LEFT;
break;
case GTK_JUSTIFY_RIGHT:
- real_x = x + width - text_width - CELLOFFSET;
+ real_x = allocation.x + allocation.width - text_width -
CELLOFFSET;
align = rtl ? PANGO_ALIGN_LEFT : PANGO_ALIGN_RIGHT;
break;
case GTK_JUSTIFY_CENTER:
default:
- real_x = x + (width - text_width)/2;
+ real_x = allocation.x + (allocation.width - text_width)/2;
align = rtl ? PANGO_ALIGN_RIGHT : PANGO_ALIGN_LEFT;
pango_layout_set_justify (layout, TRUE);
}
@@ -6643,19 +6699,20 @@
}
- if((child = button->child) && (child->widget)){
+ if((child = button->child) && (child->widget))
+ {
child->x = allocation.x;
child->y = allocation.y;
- child->x += (width - child->widget->requisition.width) / 2;
- child->y += (height - child->widget->requisition.height) / 2;
+ child->x += (allocation.width - child->widget->requisition.width) / 2;
+ child->y += (allocation.height - child->widget->requisition.height) / 2;
allocation.x = child->x;
allocation.y = child->y;
allocation.width = child->widget->requisition.width;
allocation.height = child->widget->requisition.height;
- x = child->x;
- y = child->y;
+ allocation.x = child->x;
+ allocation.y = child->y;
gtk_widget_set_state(child->widget, button->state);
@@ -6669,9 +6726,87 @@
}
gtk_sheet_button_free(button);
+}
+
+
+/* COLUMN value of -1 indicates that the area to the right of the rightmost
+ button should be redrawn */
+static void
+gtk_sheet_column_title_button_draw(GtkSheet *sheet, gint column)
+{
+ GdkWindow *window = NULL;
+ GdkRectangle allocation;
+ GtkSheetButton *button = NULL;
+ gboolean is_sensitive = FALSE;
+
+ if(!GTK_WIDGET_REALIZED(GTK_WIDGET(sheet))) return;
+
+ if(column >= 0 && ! xxx_column_is_visible(sheet, column)) return;
+ if(column >= 0 && !sheet->column_titles_visible) return;
+ if(column>=0 && column < MIN_VISIBLE_COLUMN(sheet)) return;
+ if(column>=0 && column > MAX_VISIBLE_COLUMN(sheet)) return;
+
+ window = sheet->column_title_window;
+ allocation.y = 0;
+ allocation.height = sheet->column_title_area.height;
+
+ if ( column == -1 )
+ {
+ const gint cols = xxx_column_count(sheet) ;
+ allocation.x = COLUMN_LEFT_XPIXEL(sheet, cols - 1)
+ ;
+ allocation.width = sheet->column_title_area.width
+ + sheet->column_title_area.x
+ - allocation.x;
+
+ gdk_window_clear_area (window,
+ allocation.x, allocation.y,
+ allocation.width, allocation.height);
+ }
+ else
+ {
+ button = xxx_column_button(sheet, column);
+ allocation.x = COLUMN_LEFT_XPIXEL(sheet, column) + CELL_SPACING;
+ if(sheet->row_titles_visible)
+ allocation.x -= sheet->row_title_area.width;
+
+ allocation.width = xxx_column_width(sheet, column);
+ is_sensitive = xxx_column_is_sensitive(sheet, column);
+ gtk_sheet_button_draw(sheet, window, button,
+ is_sensitive, allocation);
+ }
}
+static void
+gtk_sheet_row_title_button_draw(GtkSheet *sheet, gint row)
+{
+ GdkWindow *window = NULL;
+ GdkRectangle allocation;
+ GtkSheetButton *button = NULL;
+ gboolean is_sensitive = FALSE;
+
+
+ if(!GTK_WIDGET_REALIZED(GTK_WIDGET(sheet))) return;
+
+ if(row >= 0 && !yyy_row_is_visible(sheet, row)) return;
+ if(row >= 0 && !sheet->row_titles_visible) return;
+ if(row>=0 && row < MIN_VISIBLE_ROW(sheet)) return;
+ if(row>=0 && row > MAX_VISIBLE_ROW(sheet)) return;
+
+
+ window=sheet->row_title_window;
+ button = yyy_row_button(sheet, row);
+ allocation.x = 0;
+ allocation.y = ROW_TOP_YPIXEL(sheet, row) + CELL_SPACING;
+ if(sheet->column_titles_visible)
+ allocation.y -= sheet->column_title_area.height;
+ allocation.width = sheet->row_title_area.width;
+ allocation.height = yyy_row_height(sheet, row);
+ is_sensitive = yyy_row_is_sensitive(sheet, row);
+
+ gtk_sheet_button_draw(sheet, window, button, is_sensitive, allocation);
+}
/* SCROLLBARS
*
@@ -6785,9 +6920,9 @@
if(GTK_SHEET_IS_FROZEN(sheet)) return;
- row=ROW_FROM_YPIXEL(sheet,sheet->column_title_area.height + CELL_SPACING);
+ row = ROW_FROM_YPIXEL(sheet,sheet->column_title_area.height + CELL_SPACING);
if(!sheet->column_titles_visible)
- row=ROW_FROM_YPIXEL(sheet,CELL_SPACING);
+ row=ROW_FROM_YPIXEL(sheet, CELL_SPACING);
old_value = -sheet->voffset;
@@ -6797,8 +6932,9 @@
y = g_sheet_row_start_pixel(sheet->row_geometry, new_row, sheet);
if (adjustment->value > sheet->old_vadjustment && sheet->old_vadjustment >
0. &&
- yyy_row_height(sheet, row) > sheet->vadjustment->step_increment){
-/* This avoids embarrassing twitching */
+ yyy_row_height(sheet, row) > sheet->vadjustment->step_increment)
+ {
+ /* This avoids embarrassing twitching */
if(row == new_row && row != yyy_row_count(sheet) - 1 &&
adjustment->value - sheet->old_vadjustment >=
sheet->vadjustment->step_increment &&
@@ -6808,8 +6944,10 @@
}
}
-/* Negative old_adjustment enforces the redraw, otherwise avoid spureous
redraw */
- if(sheet->old_vadjustment >= 0. && row == new_row){
+ /* Negative old_adjustment enforces the redraw, otherwise avoid
+ spureous redraw */
+ if(sheet->old_vadjustment >= 0. && row == new_row)
+ {
sheet->old_vadjustment = sheet->vadjustment->value;
return;
}
@@ -6818,14 +6956,17 @@
adjustment->value=y;
- if(new_row == 0){
- sheet->vadjustment->step_increment= yyy_row_height(sheet, 0);
- }else{
- sheet->vadjustment->step_increment=
+ if(new_row == 0)
+ {
+ sheet->vadjustment->step_increment = yyy_row_height(sheet, 0);
+ }
+ else
+ {
+ sheet->vadjustment->step_increment =
MIN(yyy_row_height(sheet, new_row), yyy_row_height(sheet, new_row-1));
}
- sheet->vadjustment->value=adjustment->value;
+ sheet->vadjustment->value = adjustment->value;
value = adjustment->value;
@@ -6842,8 +6983,8 @@
sheet->voffset = -value;
- sheet->view.row0=ROW_FROM_YPIXEL(sheet, sheet->column_title_area.height+1);
- sheet->view.rowi=ROW_FROM_YPIXEL(sheet, sheet->sheet_window_height-1);
+ sheet->view.row0=ROW_FROM_YPIXEL(sheet, sheet->column_title_area.height + 1);
+ sheet->view.rowi=ROW_FROM_YPIXEL(sheet, sheet->sheet_window_height - 1);
if(!sheet->column_titles_visible)
sheet->view.row0=ROW_FROM_YPIXEL(sheet, 1);
@@ -7106,7 +7247,7 @@
width = min_width;
xxx_set_column_width(sheet, column, width);
- sheet->view.coli=COLUMN_FROM_XPIXEL(sheet, sheet->sheet_window_width);
+ sheet->view.coli = COLUMN_FROM_XPIXEL(sheet, sheet->sheet_window_width);
size_allocate_column_title_buttons (sheet);
return width;
@@ -7931,6 +8072,8 @@
inline void
gtk_sheet_button_free(GtkSheetButton *button)
{
+ if (!button) return ;
+
g_free(button->label);
g_free(button);
}
Index: lib/gtksheet/gtksheet.h
===================================================================
RCS file: /sources/pspp/pspp/lib/gtksheet/gtksheet.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- lib/gtksheet/gtksheet.h 30 May 2006 12:01:33 -0000 1.5
+++ lib/gtksheet/gtksheet.h 19 Jun 2006 10:16:51 -0000 1.6
@@ -437,7 +437,7 @@
/* scroll the viewing area of the sheet to the given column
* and row; row_align and col_align are between 0-1 representing the
- * location the row should appear on the screnn, 0.0 being top or left,
+ * location the row should appear on the screen, 0.0 being top or left,
* 1.0 being bottom or right; if row or column is negative then there
* is no change */
void
Index: src/data/ChangeLog
===================================================================
RCS file: /sources/pspp/pspp/src/data/ChangeLog,v
retrieving revision 1.53
retrieving revision 1.54
diff -u -b -r1.53 -r1.54
--- src/data/ChangeLog 9 Jun 2006 22:51:23 -0000 1.53
+++ src/data/ChangeLog 19 Jun 2006 10:16:51 -0000 1.54
@@ -1,3 +1,10 @@
+Mon Jun 19 18:05:42 WST 2006 John Darrington <address@hidden>
+
+ * casefile.c (casefile_get_random_reader): Nasty hack to get around
+ the mode assertion.
+
+ * format.c: Removed tortological assertion.
+
Fri Jun 9 12:20:09 2006 Ben Pfaff <address@hidden>
Reform string library.
Index: src/data/casefile.c
===================================================================
RCS file: /sources/pspp/pspp/src/data/casefile.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- src/data/casefile.c 8 Jun 2006 04:32:58 -0000 1.11
+++ src/data/casefile.c 19 Jun 2006 10:16:51 -0000 1.12
@@ -545,8 +545,14 @@
struct casereader *
casefile_get_random_reader (const struct casefile *cf)
{
- struct casereader *reader = casefile_get_reader (cf);
+ struct casefile *mutable_casefile = (struct casefile*) cf;
+ struct casereader *reader;
+
+ enum { WRITE, READ } mode = cf->mode ;
+ reader = casefile_get_reader (cf);
reader->random = true;
+ mutable_casefile->mode = mode;
+
return reader;
}
Index: src/data/format.c
===================================================================
RCS file: /sources/pspp/pspp/src/data/format.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- src/data/format.c 9 Jun 2006 19:11:58 -0000 1.5
+++ src/data/format.c 19 Jun 2006 10:16:51 -0000 1.6
@@ -385,7 +385,6 @@
bool
alignment_is_valid(enum alignment a)
{
- if ( a < 0 ) return false;
if ( a >= n_ALIGN) return false;
return true;
}
Index: src/ui/gui/ChangeLog
===================================================================
RCS file: /sources/pspp/pspp/src/ui/gui/ChangeLog,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -b -r1.18 -r1.19
--- src/ui/gui/ChangeLog 4 Jun 2006 08:02:44 -0000 1.18
+++ src/ui/gui/ChangeLog 19 Jun 2006 10:16:51 -0000 1.19
@@ -1,3 +1,14 @@
+Mon Jun 19 18:10:53 WST 2006 John Darrington <address@hidden>
+
+ * psppire-case-file.c psppire-case-file.h (new files)
+
+ * automake.mk data-sheet.c data-sheet.h menu-actions.c
+ psppire-data-store.c psppire-data-store.h psppire-dict.c
+ psppire-dict.h psppire-var-store.c psppire.c
+
+ Replaced psppire-case-array.c with psppire-case-file.c, so as to
+ allow an arbitrary number of cases to be represented.
+
Sun Jun 4 15:50:28 WST 2006 John Darrington <address@hidden>
* psppire-var-store.c, psppire.c, var-sheet.c : Unlimited the number of
Index: src/ui/gui/automake.mk
===================================================================
RCS file: /sources/pspp/pspp/src/ui/gui/automake.mk,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- src/ui/gui/automake.mk 4 May 2006 10:09:32 -0000 1.8
+++ src/ui/gui/automake.mk 19 Jun 2006 10:16:51 -0000 1.9
@@ -38,8 +38,8 @@
src/ui/gui/helper.h \
src/ui/gui/missing-val-dialog.c \
src/ui/gui/missing-val-dialog.h \
- src/ui/gui/psppire-case-array.c \
- src/ui/gui/psppire-case-array.h \
+ src/ui/gui/psppire-case-file.c \
+ src/ui/gui/psppire-case-file.h \
src/ui/gui/psppire-data-store.c \
src/ui/gui/psppire-data-store.h \
src/ui/gui/psppire-dict.c \
Index: src/ui/gui/data-sheet.c
===================================================================
RCS file: /sources/pspp/pspp/src/ui/gui/data-sheet.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
--- src/ui/gui/data-sheet.c 27 May 2006 08:36:10 -0000 1.7
+++ src/ui/gui/data-sheet.c 19 Jun 2006 10:16:51 -0000 1.8
@@ -128,11 +128,7 @@
{
GtkWidget *sheet;
- const gint rows = 10046;
-
- GObject *row_geometry = g_sheet_uniform_row_new(25, rows);
-
- sheet = gtk_sheet_new(G_SHEET_ROW(row_geometry),
+ sheet = gtk_sheet_new(G_SHEET_ROW(data_store),
G_SHEET_COLUMN(data_store), "data sheet", 0);
Index: src/ui/gui/data-sheet.h
===================================================================
RCS file: /sources/pspp/pspp/src/ui/gui/data-sheet.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- src/ui/gui/data-sheet.h 15 Mar 2006 03:29:11 -0000 1.2
+++ src/ui/gui/data-sheet.h 19 Jun 2006 10:16:51 -0000 1.3
@@ -23,7 +23,6 @@
#define DATA_SHEET_H
#include <gtksheet/gtksheet.h>
-#include "psppire-case-array.h"
#include "psppire-dict.h"
void psppire_data_sheet_clear(GtkSheet *sheet);
Index: src/ui/gui/menu-actions.c
===================================================================
RCS file: /sources/pspp/pspp/src/ui/gui/menu-actions.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- src/ui/gui/menu-actions.c 31 May 2006 07:38:03 -0000 1.9
+++ src/ui/gui/menu-actions.c 19 Jun 2006 10:16:51 -0000 1.10
@@ -25,6 +25,7 @@
#define N_(msgid) msgid
+#include <data/casefile.h>
#include <data/file-handle-def.h>
#include <data/sys-file-reader.h>
#include <data/case.h>
@@ -50,8 +51,6 @@
extern PsppireDict *the_dictionary ;
-extern PsppireCaseArray *the_cases ;
-
static struct file_handle *psppire_handle = 0;
@@ -75,19 +74,31 @@
g_free(title);
}
-
+/* Clear the active file and set the data and var sheets to
+ reflect this.
+ */
gboolean
clear_file(void)
{
- GtkWidget *data_sheet = get_widget_assert(xml, "data_sheet");
- GtkWidget *var_sheet = get_widget_assert(xml, "variable_sheet");
+ PsppireDataStore *data_store ;
+ GtkSheet *data_sheet = GTK_SHEET(get_widget_assert(xml, "data_sheet"));
+ GtkSheet *var_sheet = GTK_SHEET(get_widget_assert(xml, "variable_sheet"));
+
+ gtk_sheet_set_active_cell(data_sheet, -1, -1);
+ gtk_sheet_set_active_cell(var_sheet, 0, 0);
+
+ if ( GTK_WIDGET_REALIZED(GTK_WIDGET(data_sheet)))
+ gtk_sheet_unselect_range(data_sheet);
+
+ if ( GTK_WIDGET_REALIZED(GTK_WIDGET(var_sheet)))
+ gtk_sheet_unselect_range(var_sheet);
- gtk_sheet_set_active_cell(GTK_SHEET(data_sheet), -1, -1);
+ gtk_sheet_moveto(data_sheet, 0, 0, 0.0, 0.0);
+ gtk_sheet_moveto(var_sheet, 0, 0, 0.0, 0.0);
- gtk_sheet_set_active_cell(GTK_SHEET(var_sheet), 0, 0);
+ data_store = PSPPIRE_DATA_STORE(gtk_sheet_get_model(data_sheet));
- psppire_dict_clear(the_dictionary);
- psppire_case_array_clear(the_cases);
+ psppire_data_store_clear(data_store);
psppire_set_window_title(gettext(untitled));
@@ -107,23 +118,13 @@
-static gboolean
-populate_case_from_reader(struct ccase *c, gpointer aux)
-{
- struct sfm_reader *reader = aux;
-
- return sfm_read_case(reader, c);
-}
-
-
/* Load a system file.
Return TRUE if successfull
*/
gboolean
load_system_file(const gchar *file_name)
{
- int ni ;
- gint case_num;
+ int var_cnt ;
PsppireVarStore *var_store ;
PsppireDataStore *data_store ;
@@ -134,12 +135,10 @@
GtkWidget *data_sheet = get_widget_assert(xml, "data_sheet");
GtkWidget *var_sheet = get_widget_assert(xml, "variable_sheet");
-
g_assert(data_sheet);
g_assert(var_sheet);
- if ( psppire_handle )
- fh_free(psppire_handle);
+ clear_file();
psppire_handle =
fh_create_file (handle_name, file_name, fh_default_properties());
@@ -151,7 +150,6 @@
return FALSE;
}
-
reader = sfm_open_reader (psppire_handle, &new_dict, &ri);
if ( ! reader )
@@ -172,26 +170,37 @@
psppire_data_store_set_dictionary(data_store,
the_dictionary);
- psppire_case_array_clear(data_store->cases);
-
-
psppire_set_window_title(basename(file_name));
- ni = dict_get_next_value_idx(the_dictionary->dict);
- if ( ni == 0 )
+ var_cnt = dict_get_next_value_idx(the_dictionary->dict);
+ if ( var_cnt == 0 )
return FALSE;
- for(case_num=0;;case_num++)
+
+ for(;;)
+ {
+ struct ccase c;
+ case_create(&c, var_cnt);
+ if ( 0 == sfm_read_case (reader, &c) )
+ {
+ case_destroy(&c);
+ break;
+ }
+
+ if ( !psppire_case_file_append_case(data_store->case_file, &c) )
{
- if (!psppire_case_array_append_case(the_cases,
- populate_case_from_reader,
- reader))
+ g_warning("Cannot write case to casefile\n");
break;
}
+ case_destroy(&c);
+
+ }
sfm_close_reader(reader);
+ psppire_case_file_get_case_count(data_store->case_file);
+
return TRUE;
}
@@ -396,6 +405,7 @@
switch (page)
{
case PAGE_DATA_SHEET:
+#if 0
{
GtkSheet *data_sheet = GTK_SHEET(get_widget_assert(xml, "data_sheet"));
PsppireDataStore *data_store =
@@ -406,6 +416,7 @@
blank_case, the_dictionary);
}
break;
+#endif
case PAGE_VAR_SHEET:
{
GtkSheet *var_sheet =
@@ -430,6 +441,7 @@
page = gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook));
switch ( page)
{
+#if 0
case PAGE_DATA_SHEET:
{
GtkSheet *data_sheet = GTK_SHEET(get_widget_assert(xml, "data_sheet"));
@@ -442,6 +454,7 @@
- data_sheet->range.row0 );
}
break;
+#endif
case PAGE_VAR_SHEET:
{
GtkSheet *var_sheet =
Index: src/ui/gui/psppire-data-store.c
===================================================================
RCS file: /sources/pspp/pspp/src/ui/gui/psppire-data-store.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- src/ui/gui/psppire-data-store.c 30 May 2006 12:01:33 -0000 1.12
+++ src/ui/gui/psppire-data-store.c 19 Jun 2006 10:16:51 -0000 1.13
@@ -23,10 +23,11 @@
#include <string.h>
#include <stdlib.h>
#include <gettext.h>
-#define _(msgid) gettext (msgid)
+#define _(msgid) gettext(msgid)
#define N_(msgid) msgid
-
+#include <data/casefile.h>
+#include <data/case.h>
#include <gtksheet/gtksheet.h>
#include <gtksheet/gsheetmodel.h>
@@ -50,9 +51,11 @@
static void psppire_data_store_class_init (PsppireDataStoreClass *class);
static void psppire_data_store_sheet_model_init (GSheetModelIface *iface);
static void psppire_data_store_sheet_column_init (GSheetColumnIface *iface);
+static void psppire_data_store_sheet_row_init (GSheetRowIface *iface);
+
static void psppire_data_store_finalize (GObject *object);
-static const gchar *psppire_data_store_get_string(GSheetModel *sheet_model,
gint row, gint column);
+static gchar *psppire_data_store_get_string(const GSheetModel *sheet_model,
gint row, gint column);
static gboolean psppire_data_store_set_string(GSheetModel *model,
const gchar *text, gint row, gint
column);
@@ -63,6 +66,7 @@
#define MIN_COLUMNS 10
+#define TRAILING_ROWS 10
static GObjectClass *parent_class = NULL;
@@ -100,6 +104,12 @@
NULL
};
+ static const GInterfaceInfo sheet_row_info =
+ {
+ (GInterfaceInitFunc) psppire_data_store_sheet_row_init,
+ NULL,
+ NULL
+ };
data_store_type = g_type_register_static (G_TYPE_OBJECT,
"PsppireDataStore",
@@ -113,6 +123,9 @@
G_TYPE_SHEET_COLUMN,
&sheet_column_info);
+ g_type_add_interface_static (data_store_type,
+ G_TYPE_SHEET_ROW,
+ &sheet_row_info);
}
return data_store_type;
@@ -144,7 +157,7 @@
{
const PsppireDataStore *store = PSPPIRE_DATA_STORE(model);
- return psppire_case_array_get_n_cases(store->cases);
+ return psppire_case_file_get_case_count(store->case_file);
}
@@ -152,11 +165,11 @@
psppire_data_store_init (PsppireDataStore *data_store)
{
data_store->dict = 0;
- data_store->cases = 0;
+ data_store->case_file = 0;
}
const PangoFontDescription *
-psppire_data_store_get_font_desc(GSheetModel *model,
+psppire_data_store_get_font_desc(const GSheetModel *model,
gint row, gint column)
{
PsppireDataStore *store = PSPPIRE_DATA_STORE(model);
@@ -215,8 +228,10 @@
g_sheet_model_range_changed (G_SHEET_MODEL(store),
casenum, -1,
- psppire_case_array_get_n_cases(store->cases),
+
psppire_case_file_get_case_count(store->case_file),
-1);
+
+ g_sheet_model_rows_inserted (G_SHEET_MODEL(store), casenum, 1);
}
@@ -231,7 +246,6 @@
g_sheet_model_range_changed (G_SHEET_MODEL(store),
casenum, -1,
casenum, -1);
-
}
@@ -244,12 +258,11 @@
store = PSPPIRE_DATA_STORE(data);
- g_sheet_column_columns_deleted(G_SHEET_COLUMN(store),
- var_num, n_vars);
-
g_sheet_model_columns_deleted (G_SHEET_MODEL(store), var_num, n_vars);
-}
+ g_sheet_column_columns_changed(G_SHEET_COLUMN(store),
+ var_num, -1);
+}
static void
insert_variable_callback(GObject *obj, gint var_num, gpointer data)
@@ -267,8 +280,14 @@
-1);
*/
+#if 0
psppire_case_array_resize(store->cases,
dict_get_next_value_idx (store->dict->dict));
+#endif
+
+ g_sheet_column_columns_changed(G_SHEET_COLUMN(store),
+ var_num, 1);
+
g_sheet_model_columns_inserted (G_SHEET_MODEL(store), var_num, 1);
}
@@ -284,23 +303,12 @@
* Return value: a new #PsppireDataStore
**/
PsppireDataStore *
-psppire_data_store_new (PsppireDict *dict, PsppireCaseArray *cases)
+psppire_data_store_new (PsppireDict *dict)
{
PsppireDataStore *retval;
retval = g_object_new (GTK_TYPE_DATA_STORE, NULL);
- retval->cases = cases;
- g_signal_connect(cases, "cases-deleted", G_CALLBACK(delete_cases_callback),
- retval);
-
- g_signal_connect(cases, "case-inserted", G_CALLBACK(insert_case_callback),
- retval);
-
-
- g_signal_connect(cases, "case-changed", G_CALLBACK(changed_case_callback),
- retval);
-
psppire_data_store_set_dictionary(retval, dict);
@@ -320,14 +328,33 @@
void
psppire_data_store_set_dictionary(PsppireDataStore *data_store, PsppireDict
*dict)
{
+ gint var_cnt = psppire_dict_get_next_value_idx(dict);
#if 0
if ( data_store->dict ) g_object_unref(data_store->dict);
#endif
data_store->dict = dict;
- psppire_case_array_resize(data_store->cases,
- dict_get_next_value_idx (data_store->dict->dict));
+ if ( data_store->case_file)
+ {
+ g_object_unref(data_store->case_file);
+ data_store->case_file = 0;
+ }
+
+ data_store->case_file = psppire_case_file_new(var_cnt);
+
+ g_signal_connect(data_store->case_file, "cases-deleted",
+ G_CALLBACK(delete_cases_callback),
+ data_store);
+
+ g_signal_connect(data_store->case_file, "case-inserted",
+ G_CALLBACK(insert_case_callback),
+ data_store);
+
+
+ g_signal_connect(data_store->case_file, "case-changed",
+ G_CALLBACK(changed_case_callback),
+ data_store);
g_signal_connect(dict, "variable-inserted",
@@ -340,6 +367,8 @@
/* The entire model has changed */
g_sheet_model_range_changed (G_SHEET_MODEL(data_store), -1, -1, -1, -1);
+
+ g_sheet_column_columns_changed(G_SHEET_COLUMN(data_store), 0, -1);
}
static void
@@ -351,10 +380,11 @@
}
-static const gchar *
-psppire_data_store_get_string(GSheetModel *model, gint row, gint column)
+static gchar *
+psppire_data_store_get_string(const GSheetModel *model, gint row, gint column)
{
- const char *text;
+ gint idx;
+ char *text;
const struct fmt_spec *fp ;
const struct PsppireVariable *pv ;
const union value *v ;
@@ -362,19 +392,19 @@
PsppireDataStore *store = PSPPIRE_DATA_STORE(model);
g_return_val_if_fail(store->dict, NULL);
- g_return_val_if_fail(store->cases, NULL);
+ g_return_val_if_fail(store->case_file, NULL);
if (column >= psppire_dict_get_var_cnt(store->dict))
return NULL;
- if ( row >= psppire_case_array_get_n_cases(store->cases))
+ if ( row >= psppire_case_file_get_case_count(store->case_file))
return NULL;
-
pv = psppire_dict_get_variable(store->dict, column);
- v = psppire_case_array_get_value(store->cases, row,
- psppire_variable_get_index(pv));
+ idx = psppire_variable_get_index(pv);
+
+ v = psppire_case_file_get_value(store->case_file, row, idx);
if ( store->show_labels)
{
@@ -409,51 +439,23 @@
static gboolean
-set_null_string_value(union value *val, gpointer data)
-{
- strcpy(val->s, "");
- return TRUE;
-}
-
-static gboolean
-set_sysmis_value(union value *val, gpointer data)
-{
- val->f = SYSMIS;
- return TRUE;
-}
-
-
-static gboolean
psppire_data_store_clear_datum(GSheetModel *model,
gint row, gint col)
{
PsppireDataStore *store = PSPPIRE_DATA_STORE(model);
+ union value v;
const struct PsppireVariable *pv = psppire_dict_get_variable(store->dict,
col);
const gint index = psppire_variable_get_index(pv) ;
if ( psppire_variable_get_type(pv) == NUMERIC)
- psppire_case_array_set_value(store->cases, row, index, set_sysmis_value,0);
+ v.f = SYSMIS;
else
- psppire_case_array_set_value(store->cases, row, index,
set_null_string_value,0);
- return TRUE;
-}
-
-
-static gboolean
-fillit(union value *val, gpointer data)
-{
- struct data_in *d_in = data;
+ memcpy(v.s, "", MAX_SHORT_STRING);
- d_in->v = val;
-
- if ( ! data_in(d_in) )
- {
- g_warning("Cant encode string\n");
- return FALSE;
- }
+ psppire_case_file_set_value(store->case_file, row, index, &v);
return TRUE;
}
@@ -467,20 +469,25 @@
psppire_data_store_set_string(GSheetModel *model,
const gchar *text, gint row, gint col)
{
- gint r;
PsppireDataStore *store = PSPPIRE_DATA_STORE(model);
const struct PsppireVariable *pv = psppire_dict_get_variable(store->dict,
col);
g_return_val_if_fail(pv, FALSE);
- for(r = psppire_case_array_get_n_cases(store->cases) ; r <= row ; ++r )
+#if 0
+ /* Allow the user to insert a lot of blank cases, simply by skipping rows */
+ for(r = psppire_case_file_get_case_count(store->case_file); r <= row ; ++r)
{
+
gint c;
+
psppire_case_array_insert_case(store->cases, r, 0, 0);
+
for (c = 0 ; c < psppire_dict_get_var_cnt(store->dict); ++c )
psppire_data_store_clear_datum(model, r, c);
}
+#endif
{
const gint index = psppire_variable_get_index(pv);
@@ -493,7 +500,15 @@
d_in.format = * psppire_variable_get_write_spec(pv);
d_in.flags = 0;
- psppire_case_array_set_value(store->cases, row, index, fillit, &d_in);
+ /*
+ if ( ! data_in(&d_in) )
+ {
+ g_warning("Cannot encode string");
+ return FALSE;
+ }
+ */
+
+ psppire_case_file_set_value(store->case_file, row, index, &d_in) ;
}
return TRUE;
@@ -558,17 +573,30 @@
if ( ! writer)
return;
+#if 0
psppire_case_array_iterate_case(store->cases, write_case, writer);
+#endif
sfm_close_writer(writer);
}
+void
+psppire_data_store_clear(PsppireDataStore *data_store)
+{
+ psppire_case_file_clear(data_store->case_file);
+
+ psppire_dict_clear(data_store->dict);
+}
+
+
+
+
/* Column related funcs */
static gint
-geometry_get_column_count(const GSheetColumn *geom)
+geometry_get_column_count(const GSheetColumn *geom, gpointer data)
{
PsppireDataStore *ds = PSPPIRE_DATA_STORE(geom);
@@ -645,7 +673,7 @@
static GtkJustification
-geometry_get_justification(const GSheetColumn *geom, gint unit)
+geometry_get_justification(const GSheetColumn *geom, gint unit, gpointer data)
{
PsppireDataStore *ds = PSPPIRE_DATA_STORE(geom);
const struct PsppireVariable *pv ;
@@ -664,10 +692,11 @@
static const gchar null_var_name[]=N_("var");
-static const gchar *
-geometry_get_button_label(const GSheetColumn *geom, gint unit)
+static gchar *
+geometry_get_column_button_label(const GSheetColumn *geom, gint unit,
+ gpointer data)
{
- const gchar *text;
+ gchar *text;
struct PsppireVariable *pv ;
PsppireDataStore *ds = PSPPIRE_DATA_STORE(geom);
@@ -683,7 +712,7 @@
static gboolean
-geometry_get_sensitivity(const GSheetColumn *geom, gint unit)
+geometry_get_sensitivity(const GSheetColumn *geom, gint unit, gpointer data)
{
PsppireDataStore *ds = PSPPIRE_DATA_STORE(geom);
@@ -702,5 +731,72 @@
iface->get_sensitivity = geometry_get_sensitivity;
iface->get_justification = geometry_get_justification;
- iface->get_button_label = geometry_get_button_label;
+ iface->get_button_label = geometry_get_column_button_label;
+}
+
+
+/* Row related funcs */
+
+static gint
+geometry_get_row_count(const GSheetRow *geom, gpointer data)
+{
+ PsppireDataStore *ds = PSPPIRE_DATA_STORE(geom);
+
+ return TRAILING_ROWS + psppire_case_file_get_case_count(ds->case_file);
+}
+
+
+static gint
+geometry_get_height(const GSheetRow *geom, gint unit, gpointer data)
+{
+ return 25;
+}
+
+
+static gboolean
+geometry_get_row_sensitivity(const GSheetRow *geom, gint unit, gpointer data)
+{
+ PsppireDataStore *ds = PSPPIRE_DATA_STORE(geom);
+
+
+ return (unit < psppire_case_file_get_case_count(ds->case_file));
+}
+
+
+static gchar *
+geometry_get_row_button_label(const GSheetRow *geom, gint unit, gpointer data)
+{
+ gchar *text;
+ gchar *s;
+ PsppireDataStore *ds = PSPPIRE_DATA_STORE(geom);
+
+ if ( unit >
+ TRAILING_ROWS + psppire_case_file_get_case_count(ds->case_file))
+ return 0;
+
+ s = g_strdup_printf(_("%d"), unit);
+
+ text = pspp_locale_to_utf8(s, -1, 0);
+
+ g_free(s);
+
+ return text;
}
+
+
+static void
+psppire_data_store_sheet_row_init (GSheetRowIface *iface)
+{
+ iface->get_row_count = geometry_get_row_count;
+
+ iface->get_height = geometry_get_height;
+ iface->set_height = 0;
+ iface->get_visibility = always_true;
+ iface->get_sensitivity = geometry_get_row_sensitivity;
+
+ iface->get_button_label = geometry_get_row_button_label;
+}
+
+
+
+
Index: src/ui/gui/psppire-data-store.h
===================================================================
RCS file: /sources/pspp/pspp/src/ui/gui/psppire-data-store.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- src/ui/gui/psppire-data-store.h 15 Mar 2006 03:29:11 -0000 1.2
+++ src/ui/gui/psppire-data-store.h 19 Jun 2006 10:16:51 -0000 1.3
@@ -24,7 +24,7 @@
#include <gtksheet/gsheetmodel.h>
#include "psppire-dict.h"
-#include "psppire-case-array.h"
+#include "psppire-case-file.h"
#ifdef __cplusplus
extern "C" {
@@ -58,7 +58,7 @@
/*< private >*/
PsppireDict *dict;
- PsppireCaseArray *cases;
+ PsppireCaseFile *case_file;
PangoFontDescription *font_desc;
gboolean show_labels;
@@ -79,7 +79,7 @@
inline GType psppire_data_store_get_type (void) G_GNUC_CONST;
-PsppireDataStore *psppire_data_store_new (PsppireDict *dict,
PsppireCaseArray *cases);
+PsppireDataStore *psppire_data_store_new (PsppireDict *dict);
void psppire_data_store_set_dictionary(PsppireDataStore *data_store,
PsppireDict *dict);
void psppire_data_store_set_font(PsppireDataStore *store, PangoFontDescription
*fd);
@@ -87,6 +87,11 @@
void psppire_data_store_show_labels(PsppireDataStore *store, gboolean
show_labels);
+void psppire_data_store_clear(PsppireDataStore *data_store);
+
+
+
+
struct file_handle;
void psppire_data_store_create_system_file(PsppireDataStore *store,
Index: src/ui/gui/psppire-dict.c
===================================================================
RCS file: /sources/pspp/pspp/src/ui/gui/psppire-dict.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- src/ui/gui/psppire-dict.c 20 May 2006 13:18:28 -0000 1.6
+++ src/ui/gui/psppire-dict.c 19 Jun 2006 10:16:51 -0000 1.7
@@ -306,7 +306,6 @@
{
/* new variable */
dict_create_var(d->dict, name, 0);
- g_print("Emitting variable-inserted signal\n");
g_signal_emit(d, signal[VARIABLE_INSERTED], 0, idx);
}
}
@@ -421,3 +420,10 @@
return TRUE;
}
+
+
+inline gint
+psppire_dict_get_next_value_idx (const PsppireDict *dict)
+{
+ return dict_get_next_value_idx(dict->dict);
+}
Index: src/ui/gui/psppire-dict.h
===================================================================
RCS file: /sources/pspp/pspp/src/ui/gui/psppire-dict.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- src/ui/gui/psppire-dict.h 15 May 2006 12:03:58 -0000 1.3
+++ src/ui/gui/psppire-dict.h 19 Jun 2006 10:16:51 -0000 1.4
@@ -100,6 +100,8 @@
gboolean psppire_dict_check_name(const PsppireDict *dict,
const gchar *name, gboolean report);
+gint psppire_dict_get_next_value_idx (const PsppireDict *dict);
+
G_END_DECLS
Index: src/ui/gui/psppire-var-store.c
===================================================================
RCS file: /sources/pspp/pspp/src/ui/gui/psppire-var-store.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- src/ui/gui/psppire-var-store.c 4 Jun 2006 08:02:44 -0000 1.11
+++ src/ui/gui/psppire-var-store.c 19 Jun 2006 10:16:51 -0000 1.12
@@ -46,13 +46,14 @@
#include <data/value-labels.h>
+#define TRAILING_ROWS 40
static void psppire_var_store_init (PsppireVarStore
*var_store);
static void psppire_var_store_class_init (PsppireVarStoreClass
*class);
static void psppire_var_store_sheet_model_init (GSheetModelIface
*iface);
static void psppire_var_store_finalize (GObject
*object);
-static gchar *psppire_var_store_get_string(GSheetModel *sheet_model, gint row,
gint column);
+static gchar *psppire_var_store_get_string(const GSheetModel *sheet_model,
gint row, gint column);
static gboolean psppire_var_store_clear(GSheetModel *model, gint row, gint
col);
@@ -60,6 +61,7 @@
static gboolean psppire_var_store_set_string(GSheetModel *model,
const gchar *text, gint row, gint
column);
+static gint psppire_var_store_get_row_count(const GSheetModel * model);
static gchar *text_for_column(const struct PsppireVariable *pv, gint c, GError
**err);
@@ -185,7 +187,7 @@
}
static gboolean
-psppire_var_store_is_editable(GSheetModel *model, gint row, gint column)
+psppire_var_store_is_editable(const GSheetModel *model, gint row, gint column)
{
PsppireVarStore *store = PSPPIRE_VAR_STORE(model);
return psppire_var_store_item_editable(store, row, column);
@@ -193,7 +195,7 @@
static const GdkColor *
-psppire_var_store_get_foreground(GSheetModel *model, gint row, gint column)
+psppire_var_store_get_foreground(const GSheetModel *model, gint row, gint
column)
{
PsppireVarStore *store = PSPPIRE_VAR_STORE(model);
@@ -205,7 +207,7 @@
const PangoFontDescription *
-psppire_var_store_get_font_desc(GSheetModel *model,
+psppire_var_store_get_font_desc(const GSheetModel *model,
gint row, gint column)
{
PsppireVarStore *store = PSPPIRE_VAR_STORE(model);
@@ -218,6 +220,7 @@
static void
psppire_var_store_sheet_model_init (GSheetModelIface *iface)
{
+ iface->get_row_count = psppire_var_store_get_row_count;
iface->free_strings = TRUE;
iface->get_string = psppire_var_store_get_string;
iface->set_string = psppire_var_store_set_string;
@@ -317,7 +320,7 @@
}
static gchar *
-psppire_var_store_get_string(GSheetModel *model, gint row, gint column)
+psppire_var_store_get_string(const GSheetModel *model, gint row, gint column)
{
PsppireVarStore *store = PSPPIRE_VAR_STORE(model);
@@ -674,25 +677,51 @@
}
+static gint
+psppire_var_store_get_row_count(const GSheetModel * model)
+{
+ gint rows = 0;
+ PsppireVarStore *vs = PSPPIRE_VAR_STORE(model);
+
+ if (vs->dict)
+ rows = psppire_dict_get_var_cnt(vs->dict);
+
+ return rows ;
+}
/* Row related funcs */
static gint
-geometry_get_row_count(const GSheetRow *geom)
+geometry_get_row_count(const GSheetRow *geom, gpointer data)
{
+ gint rows = 0;
PsppireVarStore *vs = PSPPIRE_VAR_STORE(geom);
- return psppire_dict_get_var_cnt(vs->dict)+ 40;
+ if (vs->dict)
+ rows = psppire_dict_get_var_cnt(vs->dict);
+
+ return rows + TRAILING_ROWS;
}
static gint
-geometry_get_height(const GSheetRow *geom)
+geometry_get_height(const GSheetRow *geom, gint row, gpointer data)
{
return 25;
}
+static gboolean
+geometry_is_sensitive(const GSheetRow *geom, gint row, gpointer data)
+{
+ PsppireVarStore *vs = PSPPIRE_VAR_STORE(geom);
+
+ if ( ! vs->dict)
+ return FALSE;
+
+ return row < psppire_dict_get_var_cnt(vs->dict);
+}
+
static
gboolean always_true()
{
@@ -700,8 +729,8 @@
}
-static const gchar *
-geometry_get_button_label(const GSheetRow *geom, gint unit)
+static gchar *
+geometry_get_button_label(const GSheetRow *geom, gint unit, gpointer data)
{
gchar *label = g_strdup_printf(_("%d"), unit);
@@ -716,7 +745,7 @@
iface->get_height = geometry_get_height;
iface->set_height = 0;
iface->get_visibility = always_true;
- iface->get_sensitivity = always_true;
+ iface->get_sensitivity = geometry_is_sensitive;
iface->get_button_label = geometry_get_button_label;
}
Index: src/ui/gui/psppire.c
===================================================================
RCS file: /sources/pspp/pspp/src/ui/gui/psppire.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- src/ui/gui/psppire.c 4 Jun 2006 08:02:44 -0000 1.12
+++ src/ui/gui/psppire.c 19 Jun 2006 10:16:51 -0000 1.13
@@ -36,15 +36,12 @@
#include "helper.h"
#include "data-sheet.h"
#include "var-sheet.h"
-#include "psppire-case-array.h"
#include "message-dialog.h"
GladeXML *xml;
PsppireDict *the_dictionary = 0;
-PsppireCaseArray *the_cases = 0;
-
PsppireDataStore *data_store = 0;
@@ -120,10 +117,7 @@
/* Create the model for the var_sheet */
var_store = psppire_var_store_new(the_dictionary);
- /* Create the model for the data sheet */
- the_cases = psppire_case_array_new(100000, 20);
-
- data_store = psppire_data_store_new(the_dictionary, the_cases);
+ data_store = psppire_data_store_new(the_dictionary);
/* load the interface */
xml = glade_xml_new(PKGDATADIR "/psppire.glade", NULL, NULL);
Index: src/ui/gui/TODO
===================================================================
RCS file: src/ui/gui/TODO
diff -N src/ui/gui/TODO
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/ui/gui/TODO 19 Jun 2006 10:16:51 -0000 1.1
@@ -0,0 +1,23 @@
+* Crashes when resizing rows/columns when no cell is selected.
+
+* Blank cell reference when deselecting cells. (Eg New command).
+
+* Strip leading/trailing whitespace on data in cells.
+
+* Cell Ref Entry populate/depopulate.
+
+* Case weights.
+
+* Resizing of string variables.
+
+* Goto Variable / Goto Case.
+
+* Widen columns in var sheet as necessary to accomodate non-english
translations.
+
+Wishlist
+========
+
+* Cut/Paste Buffer. Cut and paste: a) Between psppire instances. b) From
other applications.
+
+* In datasheet, add tooltips to column buttons, so that hovering over a column
button displays
+ the label for that variable.
Index: src/ui/gui/psppire-case-file.c
===================================================================
RCS file: src/ui/gui/psppire-case-file.c
diff -N src/ui/gui/psppire-case-file.c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/ui/gui/psppire-case-file.c 19 Jun 2006 10:16:51 -0000 1.1
@@ -0,0 +1,248 @@
+/*
+ PSPPIRE --- A Graphical User Interface for PSPP
+ Copyright (C) 2006 Free Software Foundation
+ Written by John Darrington
+
+ 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, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA. */
+
+
+#include <string.h>
+#include <stdlib.h>
+
+#include "psppire-object.h"
+#include "psppire-case-file.h"
+
+#include <gtksheet/gtkextra-marshal.h>
+
+#include <data/case.h>
+#include <data/casefile.h>
+#include <data/data-in.h>
+
+/* --- prototypes --- */
+static void psppire_case_file_class_init (PsppireCaseFileClass *class);
+static void psppire_case_file_init (PsppireCaseFile *case_file);
+static void psppire_case_file_finalize (GObject *object);
+
+
+/* --- variables --- */
+static GObjectClass *parent_class = NULL;
+
+enum {CASE_CHANGED,
+ CASE_INSERTED,
+ CASES_DELETED,
+ n_SIGNALS};
+
+static guint signal[n_SIGNALS];
+
+
+/* --- functions --- */
+/**
+ * psppire_case_file_get_type:
+ * @returns: the type ID for accelerator groups.
+ */
+GType
+psppire_case_file_get_type (void)
+{
+ static GType object_type = 0;
+
+ if (!object_type)
+ {
+ static const GTypeInfo object_info = {
+ sizeof (PsppireCaseFileClass),
+ (GBaseInitFunc) NULL,
+ (GBaseFinalizeFunc) NULL,
+ (GClassInitFunc) psppire_case_file_class_init,
+ NULL, /* class_finalize */
+ NULL, /* class_data */
+ sizeof (PsppireCaseFile),
+ 0, /* n_preallocs */
+ (GInstanceInitFunc) psppire_case_file_init,
+ };
+
+ object_type = g_type_register_static (G_TYPE_PSPPIRE_OBJECT,
"PsppireCaseFile",
+ &object_info, 0);
+ }
+
+ return object_type;
+}
+
+
+static void
+psppire_case_file_class_init (PsppireCaseFileClass *class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (class);
+
+ parent_class = g_type_class_peek_parent (class);
+
+ object_class->finalize = psppire_case_file_finalize;
+
+ signal[CASE_CHANGED] =
+ g_signal_new ("case_changed",
+ G_TYPE_FROM_CLASS(class),
+ G_SIGNAL_RUN_FIRST,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_VOID__INT,
+ G_TYPE_NONE,
+ 1,
+ G_TYPE_INT);
+
+
+ signal[CASE_INSERTED] =
+ g_signal_new ("case_inserted",
+ G_TYPE_FROM_CLASS(class),
+ G_SIGNAL_RUN_FIRST,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_VOID__INT,
+ G_TYPE_NONE,
+ 1,
+ G_TYPE_INT);
+
+
+ signal[CASES_DELETED] =
+ g_signal_new ("cases_deleted",
+ G_TYPE_FROM_CLASS(class),
+ G_SIGNAL_RUN_FIRST,
+ 0,
+ NULL, NULL,
+ gtkextra_VOID__INT_INT,
+ G_TYPE_NONE,
+ 2,
+ G_TYPE_INT, G_TYPE_INT);
+}
+
+static void
+psppire_case_file_finalize (GObject *object)
+{
+ PsppireCaseFile *cf = PSPPIRE_CASE_FILE (object);
+
+ if ( cf->casefile)
+ casefile_destroy(cf->casefile);
+
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+psppire_case_file_init (PsppireCaseFile *cf)
+{
+ cf->casefile = 0;
+}
+
+/**
+ * psppire_case_file_new:
+ * @returns: a new #PsppireCaseFile object
+ *
+ * Creates a new #PsppireCaseFile.
+ */
+PsppireCaseFile*
+psppire_case_file_new (gint var_cnt)
+{
+ PsppireCaseFile *cf = g_object_new (G_TYPE_PSPPIRE_CASE_FILE, NULL);
+
+ cf->casefile = casefile_create(var_cnt);
+
+ return cf;
+}
+
+
+
+/* Append a case to the case file */
+gboolean
+psppire_case_file_append_case(PsppireCaseFile *cf,
+ struct ccase *c)
+{
+ bool result ;
+ gint posn ;
+
+ g_return_val_if_fail(cf, FALSE);
+ g_return_val_if_fail(cf->casefile, FALSE);
+
+ posn = casefile_get_case_cnt(cf->casefile);
+
+ result = casefile_append(cf->casefile, c);
+
+ g_signal_emit(cf, signal[CASE_INSERTED], 0, posn);
+
+ return result;
+}
+
+
+inline gint
+psppire_case_file_get_case_count(const PsppireCaseFile *cf)
+{
+ g_return_val_if_fail(cf, FALSE);
+
+ if ( ! cf->casefile)
+ return 0;
+
+ return casefile_get_case_cnt(cf->casefile);
+}
+
+/* Return the IDXth value from case CASENUM.
+ The return value must not be freed or written to
+ */
+const union value *
+psppire_case_file_get_value(const PsppireCaseFile *cf, gint casenum, gint idx)
+{
+ const union value *v;
+ struct ccase c;
+ struct casereader *reader = casefile_get_random_reader (cf->casefile);
+
+ casereader_seek(reader, casenum);
+
+ casereader_read(reader, &c);
+
+ v = case_data(&c, idx);
+ casereader_destroy(reader);
+ case_destroy(&c);
+
+ return v;
+}
+
+void
+psppire_case_file_clear(PsppireCaseFile *cf)
+{
+ casefile_destroy(cf->casefile);
+ cf->casefile = 0;
+ g_signal_emit(cf, signal[CASES_DELETED], 0, 0, -1);
+}
+
+/* Set the IDXth value of case C using FF and DATA */
+gboolean
+psppire_case_file_set_value(PsppireCaseFile *cf, gint casenum, gint idx,
+ struct data_in *d_in)
+{
+ struct ccase cc ;
+
+ struct casereader *reader = casefile_get_random_reader (cf->casefile);
+
+ casereader_seek(reader, casenum);
+ casereader_read(reader, &cc);
+
+ /* Cast away const in flagrant abuse of the casefile */
+ d_in->v = (union value *) case_data(&cc, idx);
+
+ if ( ! data_in(d_in) )
+ g_warning("Cant set value\n");
+
+ case_destroy(&cc);
+ casereader_destroy(reader);
+
+ g_signal_emit(cf, signal[CASE_CHANGED], 0, casenum);
+
+ return TRUE;
+}
Index: src/ui/gui/psppire-case-file.h
===================================================================
RCS file: src/ui/gui/psppire-case-file.h
diff -N src/ui/gui/psppire-case-file.h
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/ui/gui/psppire-case-file.h 19 Jun 2006 10:16:51 -0000 1.1
@@ -0,0 +1,90 @@
+/*
+ PSPPIRE --- A Graphical User Interface for PSPP
+ Copyright (C) 2006 Free Software Foundation
+ Written by John Darrington
+
+ 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, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA. */
+
+
+#ifndef __CASE_FILE_H__
+#define __CASE_FILE_H__
+
+
+#include <glib-object.h>
+#include <glib.h>
+
+
+
+G_BEGIN_DECLS
+
+
+/* --- type macros --- */
+#define G_TYPE_PSPPIRE_CASE_FILE (psppire_case_file_get_type ())
+#define PSPPIRE_CASE_FILE(object) (G_TYPE_CHECK_INSTANCE_CAST
((object), G_TYPE_PSPPIRE_CASE_FILE, PsppireCaseFile))
+#define PSPPIRE_CASE_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass),
G_TYPE_PSPPIRE_CASE_FILE, PsppireCaseFileClass))
+#define G_IS_PSPPIRE_CASE_FILE(object) (G_TYPE_CHECK_INSTANCE_TYPE
((object), G_TYPE_PSPPIRE_CASE_FILE))
+#define G_IS_PSPPIRE_CASE_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE
((klass), G_TYPE_PSPPIRE_CASE_FILE))
+#define PSPPIRE_CASE_FILE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj),
G_TYPE_PSPPIRE_CASE_FILE, PsppireCaseFileClass))
+
+
+
+
+/* --- typedefs & structures --- */
+typedef struct _PsppireCaseFile PsppireCaseFile;
+typedef struct _PsppireCaseFileClass PsppireCaseFileClass;
+
+struct ccase;
+struct casefile;
+
+struct _PsppireCaseFile
+{
+ GObject parent;
+
+ struct casefile *casefile;
+};
+
+
+struct _PsppireCaseFileClass
+{
+ GObjectClass parent_class;
+};
+
+
+/* -- PsppireCaseFile --- */
+GType psppire_case_file_get_type (void);
+
+PsppireCaseFile *psppire_case_file_new (gint var_cnt);
+
+gboolean psppire_case_file_append_case(PsppireCaseFile *cf,
+ struct ccase *c);
+
+gint psppire_case_file_get_case_count(const PsppireCaseFile *cf);
+
+
+const union value * psppire_case_file_get_value(const PsppireCaseFile *cf,
+ gint c, gint idx);
+
+struct data_in;
+
+gboolean psppire_case_file_set_value(PsppireCaseFile *cf, gint c, gint idx,
+ struct data_in *d_in);
+
+void psppire_case_file_clear(PsppireCaseFile *cf);
+
+
+G_END_DECLS
+
+#endif /* __PSPPIRE_CASE_FILE_H__ */
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Pspp-cvs] pspp lib/gtksheetChangeLog lib/gtksheetgsheet-c...,
John Darrington <=