From b8f2287b75f983058af49cba2d41a0247df4e85d Mon Sep 17 00:00:00 2001 From: Aleksey Lim Date: Sun, 23 Aug 2009 16:14:05 +0000 Subject: Reset model if count of objects was changed --- (limited to 'src') diff --git a/src/jarabe/journal/lazymodel.py b/src/jarabe/journal/lazymodel.py index 221a5d2..2243774 100644 --- a/src/jarabe/journal/lazymodel.py +++ b/src/jarabe/journal/lazymodel.py @@ -118,11 +118,7 @@ class LazyModel(gtk.GenericTreeModel): if self._view is not None: cursor = self._view.get_cursor() - try: - self._closing = True - self._view.set_model(None) - finally: - self._closing = False + self._unset_view_model() self._view = view self._cache = {} @@ -166,15 +162,6 @@ class LazyModel(gtk.GenericTreeModel): self._update_columns() - # TODO how to handle large update, - # commented for now since in TableView - # it works fine w/o these updates - # - #for i in range(self._last_count, count): - # self.emit('row-inserted', (i, ), self.get_iter((i, ))) - #for i in reversed(range(count, self._last_count)): - # self.emit('row-deleted', (i, )) - count = self._source.get_count() if self._frame[0] >= count: self._frame = (0, -1) @@ -183,8 +170,12 @@ class LazyModel(gtk.GenericTreeModel): self._cache = {} - for i in range(self._frame[0], self._frame[1]+1): - self.emit('row-changed', (i, ), self.get_iter((i, ))) + if self._last_count != count: + self._unset_view_model() + self._view.set_model(self) + else: + for i in range(self._frame[0], self._frame[1]+1): + self.emit('row-changed', (i, ), self.get_iter((i, ))) self._last_count = count @@ -202,6 +193,13 @@ class LazyModel(gtk.GenericTreeModel): pos = self.get_path(pos) return self._get_row(pos[0], frame or (pos, pos)) + def _unset_view_model(self): + try: + self._closing = True + self._view.set_model(None) + finally: + self._closing = False + def __delayed_fetch_cb(self, source, offset, metadata): if not offset in self._in_process: logging.debug('__delayed_fetch_cb: no offset=%s' % offset) diff --git a/src/jarabe/journal/tableview.py b/src/jarabe/journal/tableview.py index 7e69928..b9c158b 100644 --- a/src/jarabe/journal/tableview.py +++ b/src/jarabe/journal/tableview.py @@ -61,7 +61,7 @@ class TableView(SmoothTable): if self._model == model: return - if self._row_changed_id is not None: + if self._model is not None and self._row_changed_id is not None: self._model.disconnect(self._row_changed_id) self._model = model @@ -70,7 +70,9 @@ class TableView(SmoothTable): self._row_changed_id = \ self._model.connect('row-changed', self.__row_changed_cb) - self._resize() + if model is not None: + rows = math.ceil(float(model.iter_n_children(None)) / self.columns) + self.bin_rows = int(rows) model = gobject.property(type=object, getter=get_model, setter=set_model) @@ -109,11 +111,6 @@ class TableView(SmoothTable): return canvas - def _resize(self): - rows = int(math.ceil(float(self._model.iter_n_children(None)) / \ - self.columns)) - self.bin_rows = rows - def _do_fill_in(self, canvas, y, x, prepared_row=None): cell = canvas.table_view_cell -- cgit v0.9.1