diff options
Diffstat (limited to 'src/jarabe/journal/homogeneview.py')
-rw-r--r-- | src/jarabe/journal/homogeneview.py | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/src/jarabe/journal/homogeneview.py b/src/jarabe/journal/homogeneview.py new file mode 100644 index 0000000..764ecfe --- /dev/null +++ b/src/jarabe/journal/homogeneview.py @@ -0,0 +1,95 @@ +# Copyright (C) 2010, Aleksey Lim +# +# 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 St, Fifth Floor, Boston, MA 02110-1301 USA + +import gtk +import gobject +import logging + +from sugar.graphics import style +from sugar.graphics.roundbox import CanvasRoundBox + +from jarabe.journal.homogenetable import VHomogeneTable + + +class Cell(gtk.EventBox): + + def __init__(self): + gtk.EventBox.__init__(self) + self.select(False) + + def do_fill_in_cell_content(self, table, metadata): + # needs to be overriden + pass + + def do_fill_in(self, table, cell_index): + table.result_set.seek(cell_index) + self.do_fill_in_cell_content(table, table.result_set.read()) + if table.hover_selection: + self.select(table.cursor == cell_index) + + def select(self, selected): + if selected: + self.modify_bg(gtk.STATE_NORMAL, + style.COLOR_SELECTION_GREY.get_gdk_color()) + else: + self.modify_bg(gtk.STATE_NORMAL, + style.COLOR_WHITE.get_gdk_color()) + + +class HomogeneView(VHomogeneTable): + + __gsignals__ = { + 'entry-activated': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, + ([str])), + } + + def __init__(self, cell_class, **kwargs): + assert(issubclass(cell_class, Cell)) + + VHomogeneTable.__init__(self, cell_class, **kwargs) + + self._result_set = None + self.hover_selection = False + + self.connect('cursor-changed', self.__cursor_changed_cb) + + def get_result_set(self): + return self._result_set + + def set_result_set(self, result_set): + if self._result_set is result_set: + return + + self._result_set = result_set + + result_set_length = result_set.get_length() + if self.cell_count == result_set_length: + self.refill() + else: + self.cell_count = result_set_length + + result_set = property(get_result_set, set_result_set) + + def __cursor_changed_cb(self, table, old_cursor): + if not self.hover_selection: + return + old_cell = table[old_cursor] + if old_cell is not None: + old_cell.select(False) + new_cell = table[table.cursor] + if new_cell is not None: + new_cell.select(True) |