X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-spreadsheet-model.c;h=bd186ca46d4f8ed57bd541467cdb8a5c3915a0b5;hb=6e80abcaeb7c361477eff4b8a578e54f1def81c4;hp=5c004a8446f90999e1ca17e1ab8570d1c8e3a407;hpb=c0f256a4ff6d51ab0ce34c30fc12681686a41033;p=pspp diff --git a/src/ui/gui/psppire-spreadsheet-model.c b/src/ui/gui/psppire-spreadsheet-model.c index 5c004a8446..bd186ca46d 100644 --- a/src/ui/gui/psppire-spreadsheet-model.c +++ b/src/ui/gui/psppire-spreadsheet-model.c @@ -1,5 +1,5 @@ /* PSPPIRE - a graphical user interface for PSPP. - Copyright (C) 2013 Free Software Foundation + Copyright (C) 2013, 2014 Free Software Foundation 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 @@ -14,10 +14,17 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ +/* This file implements a GtkTreeModel. It allows GtkComboBox and + GtkTreeView to display the names and non-empty cell ranges of the + sheets aka "Tables" of spreadsheet files. + It doesn't take any notice of the spreadsheet data itself. +*/ #include #include +#include + #include #define _(msgid) gettext (msgid) #define N_(msgid) msgid @@ -99,6 +106,7 @@ psppire_spreadsheet_model_set_property (GObject * object, { case PROP_SPREADSHEET: spreadsheetModel->spreadsheet = g_value_get_pointer (value); + spreadsheet_ref (spreadsheetModel->spreadsheet); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -110,6 +118,14 @@ psppire_spreadsheet_model_set_property (GObject * object, static void psppire_spreadsheet_model_dispose (GObject * object) { + PsppireSpreadsheetModel *spreadsheetModel = PSPPIRE_SPREADSHEET_MODEL (object); + + if (!spreadsheetModel->dispose_has_run) + { + spreadsheet_unref (spreadsheetModel->spreadsheet); + + spreadsheetModel->dispose_has_run = TRUE; + } } static void @@ -205,7 +221,7 @@ tree_model_get_iter (GtkTreeModel * model, GtkTreeIter * iter, n = indices[0]; iter->stamp = spreadsheetModel->stamp; - iter->user_data = (gpointer) n; + iter->user_data = (gpointer) (intptr_t) n; return TRUE; } @@ -220,7 +236,7 @@ tree_model_iter_next (GtkTreeModel *model, GtkTreeIter *iter) if (iter == NULL) return FALSE; - if ((gint) iter->user_data >= spreadsheetModel->spreadsheet->n_sheets - 1) + if ((intptr_t) iter->user_data >= spreadsheetModel->spreadsheet->n_sheets - 1) { iter->user_data = NULL; iter->stamp = 0; @@ -249,7 +265,7 @@ tree_model_get_value (GtkTreeModel * model, GtkTreeIter * iter, { const char *x = spreadsheet_get_sheet_name (spreadsheetModel->spreadsheet, - (gint) iter->user_data); + (intptr_t) iter->user_data); g_value_set_string (value, x); } @@ -258,7 +274,7 @@ tree_model_get_value (GtkTreeModel * model, GtkTreeIter * iter, { char *x = spreadsheet_get_sheet_range (spreadsheetModel->spreadsheet, - (gint) iter->user_data); + (intptr_t) iter->user_data); g_value_set_string (value, x ? x : _("(empty)")); g_free (x); @@ -285,7 +301,7 @@ tree_model_nth_child (GtkTreeModel * model, GtkTreeIter * iter, return FALSE; iter->stamp = spreadsheetModel->stamp; - iter->user_data = (gpointer) n; + iter->user_data = (gpointer) (intptr_t) n; return TRUE; } @@ -314,7 +330,7 @@ tree_model_get_path (GtkTreeModel * model, GtkTreeIter * iter) PsppireSpreadsheetModel *spreadsheetModel = PSPPIRE_SPREADSHEET_MODEL (model); GtkTreePath *path; - gint index = (gint) iter->user_data; + gint index = (intptr_t) iter->user_data; g_return_val_if_fail (iter->stamp == spreadsheetModel->stamp, NULL);