From be724488e6122946504472309ca6ef0ea6f18ec0 Mon Sep 17 00:00:00 2001 From: Aleksey Lim Date: Sun, 23 Aug 2009 17:14:18 +0000 Subject: Add thumbs view to ObjectChooser --- (limited to 'src') diff --git a/src/jarabe/journal/listview.py b/src/jarabe/journal/listview.py index d0bcc15..3366def 100644 --- a/src/jarabe/journal/listview.py +++ b/src/jarabe/journal/listview.py @@ -28,6 +28,7 @@ from sugar.graphics.icon import CellRendererIcon from sugar.graphics.xocolor import XoColor from sugar import util +from jarabe.journal.source import Source from jarabe.journal.listmodel import ListModel from jarabe.journal.palettes import ObjectPalette, BuddyPalette from jarabe.journal import model @@ -39,7 +40,10 @@ class ListView(gtk.TreeView): __gsignals__ = { 'detail-clicked': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, - ([object])) + ([object])), + 'entry-activated': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, + ([str])), } def __init__(self): @@ -73,6 +77,24 @@ class ListView(gtk.TreeView): self.connect('notify::hover-selection', self.__notify_hover_selection_cb) + self.connect('button-release-event', self.__button_release_event_cb) + + def __button_release_event_cb(self, tree_view, event): + if not tree_view.props.hover_selection: + return False + + if event.window != tree_view.get_bin_window(): + return False + + pos = tree_view.get_path_at_pos(event.x, event.y) + if pos is None: + return False + + path, column_, x_, y_ = pos + uid = tree_view.get_model()[path][Source.FIELD_UID] + self.emit('entry-activated', uid) + + return False def __notify_hover_selection_cb(self, widget, pspec): self.cell_icon.props.show_palette = not self.props.hover_selection diff --git a/src/jarabe/journal/objectchooser.py b/src/jarabe/journal/objectchooser.py index e0c0c26..57e9ceb 100644 --- a/src/jarabe/journal/objectchooser.py +++ b/src/jarabe/journal/objectchooser.py @@ -80,15 +80,16 @@ class ObjectChooser(gtk.Window): self._toolbar = SearchToolbar() self._toolbar.connect('query-changed', self.__query_changed_cb) + self._toolbar.connect('view-changed', self.__view_changed_cb) self._toolbar.set_size_request(-1, style.GRID_CELL_SIZE) vbox.pack_start(self._toolbar, expand=False) self._toolbar.show() - self._list_view = ObjectView() - self._list_view.props.hover_selection = True - self._list_view.connect('entry-activated', self.__entry_activated_cb) - vbox.pack_start(self._list_view) - self._list_view.show() + self._object_view = ObjectView() + self._object_view.props.hover_selection = True + self._object_view.connect('entry-activated', self.__entry_activated_cb) + vbox.pack_start(self._object_view) + self._object_view.show() self._toolbar.set_mount_point('/') @@ -126,7 +127,10 @@ class ObjectChooser(gtk.Window): return self._selected_object_id def __query_changed_cb(self, toolbar, query): - self._list_view.update_with_query(query) + self._object_view.update_with_query(query) + + def __view_changed_cb(self, sender, view): + self._object_view.change_view(view) def __volume_changed_cb(self, volume_toolbar, mount_point): logging.debug('Selected volume: %r.', mount_point) @@ -135,7 +139,7 @@ class ObjectChooser(gtk.Window): def __visibility_notify_event_cb(self, window, event): logging.debug('visibility_notify_event_cb %r', self) visible = event.state == gtk.gdk.VISIBILITY_FULLY_OBSCURED - self._list_view.set_is_visible(visible) + self._object_view.set_is_visible(visible) class TitleBox(VolumesToolbar): __gtype_name__ = 'TitleBox' diff --git a/src/jarabe/journal/objectview.py b/src/jarabe/journal/objectview.py index 3160c1c..ab04a5b 100644 --- a/src/jarabe/journal/objectview.py +++ b/src/jarabe/journal/objectview.py @@ -77,8 +77,7 @@ class ObjectView(gtk.Bin): view.modify_base(gtk.STATE_NORMAL, style.COLOR_WHITE.get_gdk_color()) view.connect('detail-clicked', self.__detail_clicked_cb) - view.connect('button-release-event', - self.__button_release_event_cb) + view.connect('entry-activated', self.__entry_activated_cb) view.show() widget = gtk.ScrolledWindow() @@ -291,23 +290,9 @@ class ObjectView(gtk.Bin): def __detail_clicked_cb(self, list_view, object_id): self.emit('detail-clicked', object_id) - def __button_release_event_cb(self, tree_view, event): - if not tree_view.props.hover_selection: - return False - - if event.window != tree_view.get_bin_window(): - return False - - pos = tree_view.get_path_at_pos(event.x, event.y) - if pos is None: - return False - - path, column_, x_, y_ = pos - uid = tree_view.get_model()[path][Source.FIELD_UID] + def __entry_activated_cb(self, sender, uid): self.emit('entry-activated', uid) - return False - def do_size_allocate(self, allocation): self.allocation = allocation self.child.size_allocate(allocation) diff --git a/src/jarabe/journal/tableview.py b/src/jarabe/journal/tableview.py index b9c158b..a2ce24b 100644 --- a/src/jarabe/journal/tableview.py +++ b/src/jarabe/journal/tableview.py @@ -31,7 +31,7 @@ class TableCell: def __init__(self): self.row = None - self.tree = None + self.table = None def do_fill_in(self): pass @@ -99,7 +99,7 @@ class TableView(SmoothTable): canvas.set_root(sel_box) cell = cell_class() - cell.tree = self + cell.table = self sel_box.append(cell, hippo.PACK_EXPAND) canvas.connect('enter-notify-event', diff --git a/src/jarabe/journal/thumbsview.py b/src/jarabe/journal/thumbsview.py index 9f7ebbd..73d04bb 100644 --- a/src/jarabe/journal/thumbsview.py +++ b/src/jarabe/journal/thumbsview.py @@ -48,6 +48,8 @@ class ThumbsCell(TableCell, hippo.CanvasBox): padding_top=style.DEFAULT_SPACING * 2, spacing=style.DEFAULT_PADDING) + self.connect('button-release-event', self.__button_release_event_cb) + # tools column tools_box = hippo.CanvasBox( @@ -80,13 +82,13 @@ class ThumbsCell(TableCell, hippo.CanvasBox): border_color=style.COLOR_BUTTON_GREY.get_int()) self.allocation_box.append(self.activity_box, hippo.PACK_FIXED) - self.thumb = ThumbCanvas( + self.thumb = ThumbCanvas(self, xalign=hippo.ALIGNMENT_START, yalign=hippo.ALIGNMENT_START) self.thumb.connect('detail-clicked', self.__detail_clicked_cb) self.activity_box.append(self.thumb, hippo.PACK_FIXED) - self.activity_icon = ActivityIcon( + self.activity_icon = ActivityIcon(self, xalign=hippo.ALIGNMENT_START, yalign=hippo.ALIGNMENT_START) self.activity_icon.connect('detail-clicked', self.__detail_clicked_cb) @@ -109,7 +111,7 @@ class ThumbsCell(TableCell, hippo.CanvasBox): self.date.props.text = self.row[Source.FIELD_MODIFY_TIME] or '' self.keep.props.keep = int(self.row[Source.FIELD_KEEP] or 0) == 1 - w, h = self.tree.thumb_size + w, h = self.table.thumb_size self.activity_box.props.box_width = w self.activity_box.props.box_height = h @@ -125,14 +127,14 @@ class ThumbsCell(TableCell, hippo.CanvasBox): if thumb is None: self.thumb.set_visible(False) self.activity_icon.set_visible(True) - self.activity_icon.set_metadata(self.row.metadata) + self.activity_icon.palette = None else: self.activity_icon.set_visible(False) self.thumb.set_visible(True) self.thumb.props.scale_width = w - style.LINE_WIDTH * 2 self.thumb.props.scale_height = h - style.LINE_WIDTH * 2 self.thumb.props.image = thumb - self.thumb.set_metadata(self.row.metadata) + self.thumb.palette = None self.thumb.allocate(w, h, True) self.activity_box.set_position(self.thumb, style.LINE_WIDTH, style.LINE_WIDTH) @@ -142,29 +144,31 @@ class ThumbsCell(TableCell, hippo.CanvasBox): model.write(self.row.metadata, update_mtime=False) def __detail_activated_cb(self, button): - self.tree.emit('detail-clicked', self.row[Source.FIELD_UID]) + self.table.emit('detail-clicked', self.row[Source.FIELD_UID]) def __detail_clicked_cb(self, sender, uid): - self.tree.emit('detail-clicked', uid) + self.table.emit('detail-clicked', uid) + + def __button_release_event_cb(self, sender, event): + if not self.table.props.hover_selection: + return False + uid = self.row[Source.FIELD_UID] + self.table.emit('entry-activated', uid) + return False class ActivityCanvas: - def __init__(self): - self._metadata = None + def __init__(self, cell): + self._cell = cell self.connect_after('button-release-event', self.__button_release_event_cb) self.palette = None - def set_metadata(self, metadata): - # pylint: disable-msg=W0201 - self.palette = None - self._metadata = metadata - def create_palette(self): - if self._metadata is None: - return None - palette = ObjectPalette(self._metadata, detail=True) + if self._cell.table.props.hover_selection: + return + palette = ObjectPalette(self._cell.row.metadata, detail=True) palette.connect('detail-clicked', self.__detail_clicked_cb) return palette @@ -172,7 +176,7 @@ class ActivityCanvas: self.emit('detail-clicked', uid) def __button_release_event_cb(self, button, event): - misc.resume(self._metadata) + misc.resume(self._cell.row.metadata) return True @@ -183,13 +187,12 @@ class ActivityIcon(ActivityCanvas, CanvasIcon): ([str])), } - def __init__(self, **kwargs): + def __init__(self, cell, **kwargs): CanvasIcon.__init__(self, **kwargs) - ActivityCanvas.__init__(self) - - def set_metadata(self, metadata): - ActivityCanvas.set_metadata(self, metadata) + ActivityCanvas.__init__(self, cell) + def create_palette(self): + metadata = self._cell.row.metadata self.props.file_name = misc.get_icon_name(metadata) if misc.is_activity_bundle(metadata): @@ -199,6 +202,8 @@ class ActivityIcon(ActivityCanvas, CanvasIcon): if 'icon-color' in metadata and metadata['icon-color']: self.props.xo_color = XoColor(self._metadata['icon-color']) + ActivityCanvas.create_palette(self) + class ThumbCanvas(ActivityCanvas, hippo.CanvasImage): @@ -207,9 +212,9 @@ class ThumbCanvas(ActivityCanvas, hippo.CanvasImage): ([str])), } - def __init__(self, **kwargs): + def __init__(self, cell, **kwargs): hippo.CanvasImage.__init__(self, **kwargs) - ActivityCanvas.__init__(self) + ActivityCanvas.__init__(self, cell) self._palette_invoker = CanvasInvoker() self._palette_invoker.attach(self) @@ -246,6 +251,9 @@ class ThumbsView(TableView): 'detail-clicked': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([object])), + 'entry-activated': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, + ([str])), } def __init__(self): -- cgit v0.9.1