From 2e8ed1c8e5819ea00dac3f0484b5f923529dba4b Mon Sep 17 00:00:00 2001 From: Aleksey Lim Date: Sat, 22 Aug 2009 06:12:02 +0000 Subject: Do not set bin_rows less then rows in SmoothTable --- (limited to 'src') diff --git a/src/jarabe/journal/browse/smoothtable.py b/src/jarabe/journal/browse/smoothtable.py index 47777be..8b3ca4e 100644 --- a/src/jarabe/journal/browse/smoothtable.py +++ b/src/jarabe/journal/browse/smoothtable.py @@ -24,8 +24,6 @@ class SmoothTable(gtk.Container): __gsignals__ = { 'set-scroll-adjustments': (gobject.SIGNAL_RUN_FIRST, None, [gtk.Adjustment, gtk.Adjustment]), - 'fill-in': (gobject.SIGNAL_RUN_FIRST, None, - [gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT]), } def __init__(self, rows, columns, new_cell, fill_in): @@ -79,13 +77,16 @@ class SmoothTable(gtk.Container): return self._bin_rows def set_bin_rows(self, bin_rows): - self._bin_rows = bin_rows + self._bin_rows = max(self.rows, bin_rows) - if self._adj is not None: - self._setup_adjustment(force=True) - if self.flags() & gtk.REALIZED: - self._bin_window.resize(self.allocation.width, - int(self._adj.upper)) + if self._adj is None: + return + + for row in self._rows: + for cell in row: + cell.size_allocate(gtk.gdk.Rectangle(-1, -1, 0, 0)) + + self._setup_adjustment(force=True) bin_rows = property(get_bin_rows, set_bin_rows) @@ -251,18 +252,9 @@ class SmoothTable(gtk.Container): return int(self._adj.value) - int(self._adj.value) % self._cell_height def __adjustment_value_changed_cb(self, sender=None): - if not self.flags() & gtk.REALIZED or self._cell_height == 0: - return - - if self._adj.value < 0: - self._adj.value = 0 - self._adj.value_changed() - return - - bottom = self._adj.upper - (self.rows * self._cell_height) - if self._adj.value > bottom: - self._adj.value = bottom - self._adj.value_changed() + if not self.flags() & gtk.REALIZED or self._cell_height == 0 or \ + self._adj.value < 0 or self._adj.value > self._adj.upper - \ + (self.rows * self._cell_height): return spare_rows = [] diff --git a/src/jarabe/journal/browse/tableview.py b/src/jarabe/journal/browse/tableview.py index 362c6ba..b5d45cd 100644 --- a/src/jarabe/journal/browse/tableview.py +++ b/src/jarabe/journal/browse/tableview.py @@ -15,6 +15,7 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA import gtk +import math import hippo import gobject import logging @@ -55,15 +56,18 @@ class TableView(SmoothTable): def set_model(self, model): if self._model == model: return + if self._model: self._model.disconnect_by_func(self.__row_changed_cb) self._model.disconnect_by_func(self.__table_resized_cb) + self._model = model + if model: self._model.connect('row-changed', self.__row_changed_cb) - self._model.connect('row-inserted', self.__table_resized_cb) - self._model.connect('row-deleted', self.__table_resized_cb) - self.bin_rows = self._model.iter_n_children(None) / self.columns + self._model.connect('rows-reordered', self.__table_resized_cb) + + self._resize() model = gobject.property(type=object, getter=get_model, setter=set_model) @@ -101,7 +105,12 @@ class TableView(SmoothTable): return canvas - def _fill_in(self, canvas, y, x, row=None): + def _resize(self): + rows = int(math.ceil(float(self._model.iter_n_children(None)) / \ + self.columns)) + self.bin_rows = rows + + def _fill_in(self, canvas, y, x, prepared_row=None): cell = canvas.table_view_cell sel_box = canvas.table_view_cell_sel_box @@ -112,7 +121,7 @@ class TableView(SmoothTable): bg_color = COLOR_BACKGROUND sel_box.props.background_color = bg_color.get_int() - cell.row = row + cell.row = prepared_row if cell.row is None: cell_num = y * self.columns + x @@ -156,8 +165,7 @@ class TableView(SmoothTable): return row = self._model.get_row(path) - self._fill_in(canvas, y, x, row) - def __table_resized_cb(self, model=None, path=None, iter=None): - self.bin_rows = self._model.iter_n_children(None) / self.columns + def __table_resized_cb(self, model=None, path=None, iter=None, arg3=None): + self._resize() -- cgit v0.9.1