From 1a1321ce12a028bd7e3fc05adb7951b38c193f0a Mon Sep 17 00:00:00 2001 From: John Darrington Date: Sat, 26 Jan 2013 12:46:50 +0100 Subject: [PATCH] Added property for the backend --- src/ui/gui/psppire-spreadsheet-model.c | 61 +++++++++++++++++++++----- src/ui/gui/psppire-spreadsheet-model.h | 6 ++- src/ui/gui/sheet-test.c | 16 +++++-- 3 files changed, 69 insertions(+), 14 deletions(-) diff --git a/src/ui/gui/psppire-spreadsheet-model.c b/src/ui/gui/psppire-spreadsheet-model.c index d5915a3db5..20a8a66e7e 100644 --- a/src/ui/gui/psppire-spreadsheet-model.c +++ b/src/ui/gui/psppire-spreadsheet-model.c @@ -20,6 +20,8 @@ #include "psppire-spreadsheet-model.h" +#include "data/spreadsheet-reader.h" + static void psppire_spreadsheet_model_init (PsppireSpreadsheetModel *spreadsheetModel); static void psppire_spreadsheet_model_class_init (PsppireSpreadsheetModelClass *class); @@ -71,6 +73,35 @@ psppire_spreadsheet_model_get_type (void) } +/* Properties */ +enum +{ + PROP_0, + PROP_SPREADSHEET +}; + + +static void +psppire_spreadsheet_model_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + PsppireSpreadsheetModel *spreadsheetModel = PSPPIRE_SPREADSHEET_MODEL (object); + + switch (prop_id) + { + case PROP_SPREADSHEET: + spreadsheetModel->spreadsheet = g_value_get_pointer (value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + }; +} + + + static void psppire_spreadsheet_model_dispose (GObject *object) { @@ -87,9 +118,23 @@ psppire_spreadsheet_model_class_init (PsppireSpreadsheetModelClass *class) { GObjectClass *object_class; + GParamSpec *spreadsheet_spec = + g_param_spec_pointer ("spreadsheet", + "Spreadsheet", + "The spreadsheet that this model represents", + G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE); + parent_class = g_type_class_peek_parent (class); object_class = (GObjectClass*) class; + object_class->set_property = psppire_spreadsheet_model_set_property; + + g_object_class_install_property (object_class, + PROP_SPREADSHEET, + spreadsheet_spec); + + + object_class->finalize = psppire_spreadsheet_model_finalize; object_class->dispose = psppire_spreadsheet_model_dispose; } @@ -104,9 +149,11 @@ psppire_spreadsheet_model_init (PsppireSpreadsheetModel *spreadsheetModel) GtkTreeModel* -psppire_spreadsheet_model_new (void) +psppire_spreadsheet_model_new (struct spreadsheet *sp) { - return g_object_new (psppire_spreadsheet_model_get_type (), NULL); + return g_object_new (psppire_spreadsheet_model_get_type (), + "spreadsheet", sp, + NULL); } @@ -174,7 +221,7 @@ tree_model_iter_next (GtkTreeModel *model, GtkTreeIter *iter) g_print ("%s %d\n", __FUNCTION__, iter->user_data); - if ( iter->user_data >= 5 - 1) + if ( iter->user_data >= spreadsheetModel->spreadsheet->sheets - 1) return FALSE; iter->user_data++; @@ -209,16 +256,10 @@ tree_model_nth_child (GtkTreeModel *model, GtkTreeIter *iter, if ( parent ) return FALSE; - if ( n >= 5) + if ( n >= spreadsheetModel->spreadsheet->sheets) return FALSE; iter->stamp = spreadsheetModel->stamp; - /* - iter->user_data = psppire_dict_get_variable (dict, n); - - if ( !iter->user_data) - return FALSE; - */ return TRUE; } diff --git a/src/ui/gui/psppire-spreadsheet-model.h b/src/ui/gui/psppire-spreadsheet-model.h index 5956f32e11..94be3c397e 100644 --- a/src/ui/gui/psppire-spreadsheet-model.h +++ b/src/ui/gui/psppire-spreadsheet-model.h @@ -53,6 +53,8 @@ typedef struct _PsppireSpreadsheetModel PsppireSpreadsheetModel; typedef struct _PsppireSpreadsheetModelClass PsppireSpreadsheetModelClass; +struct spreadsheet; + struct _PsppireSpreadsheetModel { GObject parent; @@ -60,6 +62,7 @@ struct _PsppireSpreadsheetModel /*< private >*/ gint stamp; + struct spreadsheet *spreadsheet; gboolean dispose_has_run ; }; @@ -73,7 +76,8 @@ struct _PsppireSpreadsheetModelClass GType psppire_spreadsheet_model_get_type (void) G_GNUC_CONST; -GtkTreeModel * psppire_spreadsheet_model_new (void); + +GtkTreeModel * psppire_spreadsheet_model_new (struct spreadsheet *sp); G_END_DECLS diff --git a/src/ui/gui/sheet-test.c b/src/ui/gui/sheet-test.c index 45f1061a06..ab6a8c879f 100644 --- a/src/ui/gui/sheet-test.c +++ b/src/ui/gui/sheet-test.c @@ -6,6 +6,8 @@ #include "psppire-spreadsheet-model.h" +#include "data/gnumeric-reader.h" + #define N 10 static GtkListStore * @@ -27,8 +29,6 @@ make_store () return list_store; } - - int main (int argc, char *argv[] ) { @@ -37,8 +37,18 @@ main (int argc, char *argv[] ) GtkTreeModel *tm; gtk_init (&argc, &argv); + if ( argc < 2) + g_error ("Usage: prog file\n"); + + struct spreadsheet *sp = gnumeric_probe (argv[1]); + + if (sp == NULL) + { + g_error ("%s is not a gnumeric file\n", argv[1]); + return 0; + } - tm = psppire_spreadsheet_model_new (); + tm = psppire_spreadsheet_model_new (sp); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (window), 10); -- 2.30.2