Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@member.fsf.org>2010-01-26 17:17:26 (GMT)
committer Aleksey Lim <alsroot@member.fsf.org>2010-01-26 17:17:26 (GMT)
commit5ef41b00ce7a83f808a778d014f93c7448d5569b (patch)
treee2b5d938320a0981a00a00e0294dc11ee8da0918
parent9fd0d076d060022c5d5e67504ff767c748a313ec (diff)
Get rid of hippo in journal views
-rw-r--r--src/jarabe/journal/expandedentry.py9
-rw-r--r--src/jarabe/journal/listview.py8
-rw-r--r--src/jarabe/journal/widgets.py206
3 files changed, 118 insertions, 105 deletions
diff --git a/src/jarabe/journal/expandedentry.py b/src/jarabe/journal/expandedentry.py
index 048fecf..cd8322b 100644
--- a/src/jarabe/journal/expandedentry.py
+++ b/src/jarabe/journal/expandedentry.py
@@ -32,7 +32,7 @@ from sugar.graphics.entry import CanvasEntry
from sugar.graphics.canvastextview import CanvasTextView
from sugar.util import format_size
-from jarabe.journal.widgets import KeepIconCanvas
+from jarabe.journal.widgets import KeepIcon
from jarabe.journal.palettes import ObjectPalette, BuddyPalette
from jarabe.journal import misc
from jarabe.journal import model
@@ -99,7 +99,10 @@ class ExpandedEntry(hippo.CanvasBox):
# Header
- self._keep_icon = KeepIconCanvas(box_width=style.GRID_CELL_SIZE * 3 / 5)
+ keep_icon = KeepIcon()
+ keep_size = style.GRID_CELL_SIZE * 3 / 5
+ keep_icon.set_size_request(keep_size, keep_size)
+ self._keep_icon = hippo.CanvasWidget(widget=keep_icon)
header.append(self._keep_icon)
self._icon = None
@@ -140,7 +143,7 @@ class ExpandedEntry(hippo.CanvasBox):
return
self._metadata = metadata
- self._keep_icon.fill_in(metadata)
+ self._keep_icon.props.widget.fill_in(metadata)
self._icon = self._create_icon()
self._icon_box.clear()
diff --git a/src/jarabe/journal/listview.py b/src/jarabe/journal/listview.py
index 7c6735d..1072800 100644
--- a/src/jarabe/journal/listview.py
+++ b/src/jarabe/journal/listview.py
@@ -17,8 +17,6 @@
import gobject
import logging
-import hippo
-
from sugar.graphics import style
from jarabe.journal.homogeneview import HomogeneView
@@ -35,7 +33,7 @@ class _Cell(Cell):
row.props.spacing = style.DEFAULT_SPACING
self.add(row)
- self._keep = KeepIcon(box_width=style.GRID_CELL_SIZE)
+ self._keep = KeepIcon()
row.pack_start(self._keep, expand=False)
self._icon = ObjectIcon(
@@ -72,7 +70,7 @@ class _Cell(Cell):
class ListView(HomogeneView):
- def __init__(self):
- HomogeneView.__init__(self, _Cell)
+ def __init__(self, selection):
+ HomogeneView.__init__(self, _Cell, selection)
self.frame_size = (None, 1)
self.cell_size = (None, style.GRID_CELL_SIZE)
diff --git a/src/jarabe/journal/widgets.py b/src/jarabe/journal/widgets.py
index 32573ed..d4066cc 100644
--- a/src/jarabe/journal/widgets.py
+++ b/src/jarabe/journal/widgets.py
@@ -21,17 +21,15 @@ from gettext import gettext as _
import gtk
import gobject
-import hippo
import gconf
-import pango
import simplejson
from sugar.graphics import style
-from sugar.graphics.icon import CanvasIcon
from sugar.graphics.xocolor import XoColor
from sugar.graphics.palette import Invoker
from sugar.graphics.palette import WidgetInvoker
-from sugar.graphics import icon
+from sugar.graphics.icon import Icon
+from sugar.graphics.icon import get_surface
from jarabe.journal.entry import Entry
from jarabe.journal.palettes import BuddyPalette
@@ -42,62 +40,95 @@ from jarabe.journal import controler
from jarabe.journal import preview
-class KeepIconCanvas(CanvasIcon):
+class _Button(gtk.Alignment):
+
def __init__(self, **kwargs):
- CanvasIcon.__init__(self, icon_name='emblem-favorite',
- size=style.SMALL_ICON_SIZE,
- **kwargs)
+ gtk.Alignment.__init__(self, xalign=0.5, yalign=0.5, xscale=0, yscale=0)
self.metadata = None
- self._prelight = False
- self._keep_color = None
+ self.prelight = False
+
+ self.set_size_request(style.GRID_CELL_SIZE, -1)
+
+ box = gtk.EventBox()
+ box.props.visible_window = False
+ box.show()
+ self.add(box)
+
+ self.icon = Icon(**kwargs)
+ self.icon.show()
+ box.add(self.icon)
- self.connect_after('activated', self.__activated_cb)
- self.connect('motion-notify-event', self.__motion_notify_event_cb)
+ box.connect('enter-notify-event', self.__enter_notify_event_cb)
+ box.connect('leave-notify-event', self.__leave_notify_event_cb)
+ box.connect('button-release-event', self.__button_release_event_cb)
+
+ self.do_colors()
def fill_in(self, metadata):
self.metadata = metadata
+
+ def do_activate(self):
+ # stub
+ pass
+
+ def do_colors(self):
+ if self.prelight:
+ self.icon.props.fill_color = style.COLOR_BLACK.get_svg()
+ else:
+ self.icon.props.fill_color = style.COLOR_BUTTON_GREY.get_svg()
+
+ def __enter_notify_event_cb(self, widget, event):
+ self.prelight = True
+ self.do_colors()
+
+ def __leave_notify_event_cb(self, widget, event):
+ self.prelight = False
+ self.do_colors()
+
+ def __button_release_event_cb(self, widget, event):
+ if self.prelight:
+ self.do_activate()
+
+
+class KeepIcon(_Button):
+
+ def __init__(self):
+ self._keep_color = None
+
+ _Button.__init__(self,
+ icon_name='emblem-favorite',
+ pixel_size=style.SMALL_ICON_SIZE)
+
+ def fill_in(self, metadata):
+ _Button.fill_in(self, metadata)
+
keep = metadata.get('keep', "")
if keep.isdigit():
self._set_keep(int(keep))
else:
self._set_keep(0)
- def _set_keep(self, keep):
- if keep:
- client = gconf.client_get_default()
- color = client.get_string('/desktop/sugar/user/color')
- self._keep_color = XoColor(color)
- else:
- self._keep_color = None
-
- self._set_colors()
-
- def __motion_notify_event_cb(self, icon, event):
- if event.detail == hippo.MOTION_DETAIL_ENTER:
- self._prelight = True
- elif event.detail == hippo.MOTION_DETAIL_LEAVE:
- self._prelight = False
- self._set_colors()
-
- def _set_colors(self):
- if self._prelight:
+ def do_colors(self):
+ if self.prelight:
if self._keep_color is None:
- self.props.stroke_color = style.COLOR_BUTTON_GREY.get_svg()
- self.props.fill_color = style.COLOR_BUTTON_GREY.get_svg()
+ self.icon.props.stroke_color = \
+ style.COLOR_BUTTON_GREY.get_svg()
+ self.icon.props.fill_color = style.COLOR_BUTTON_GREY.get_svg()
else:
stroke_color = style.Color(self._keep_color.get_stroke_color())
fill_color = style.Color(self._keep_color.get_fill_color())
- self.props.stroke_color = fill_color.get_svg()
- self.props.fill_color = stroke_color.get_svg()
+ self.icon.props.stroke_color = fill_color.get_svg()
+ self.icon.props.fill_color = stroke_color.get_svg()
else:
if self._keep_color is None:
- self.props.stroke_color = style.COLOR_BUTTON_GREY.get_svg()
- self.props.fill_color = style.COLOR_TRANSPARENT.get_svg()
+ self.icon.props.stroke_color = \
+ style.COLOR_BUTTON_GREY.get_svg()
+ self.icon.props.fill_color = style.COLOR_TRANSPARENT.get_svg()
else:
- self.props.xo_color = self._keep_color
+ self.icon.props.xo_color = self._keep_color
- def __activated_cb(self, icon):
+ def do_activate(self):
if not model.is_editable(self.metadata):
return
@@ -111,9 +142,15 @@ class KeepIconCanvas(CanvasIcon):
self._set_keep(keep)
+ def _set_keep(self, keep):
+ if keep:
+ client = gconf.client_get_default()
+ color = client.get_string('/desktop/sugar/user/color')
+ self._keep_color = XoColor(color)
+ else:
+ self._keep_color = None
-def KeepIcon(**kwargs):
- return _CanvasToWidget(KeepIconCanvas, **kwargs)
+ self.do_colors()
class _JournalObject(gtk.EventBox):
@@ -132,11 +169,6 @@ class _JournalObject(gtk.EventBox):
self.modify_bg(gtk.STATE_NORMAL,
style.COLOR_WHITE.get_gdk_color())
- self.add_events(gtk.gdk.BUTTON_PRESS_MASK | \
- gtk.gdk.BUTTON_RELEASE_MASK | \
- gtk.gdk.LEAVE_NOTIFY_MASK | \
- gtk.gdk.ENTER_NOTIFY_MASK)
-
self.connect_after('button-release-event',
self.__button_release_event_cb)
@@ -178,7 +210,7 @@ class _JournalObject(gtk.EventBox):
if self._invoker.palette is not None:
self._invoker.palette.popdown(immediate=True)
- surface = icon.get_surface(
+ surface = get_surface(
file_name=misc.get_icon_name(self.metadata),
xo_color=misc.get_icon_color(self.metadata))
pixmap, bitmask = _surface_to_pixels(self.window, surface)
@@ -212,7 +244,7 @@ class ObjectIcon(_JournalObject):
def __init__(self, detail=True, paint_box=True, **kwargs):
_JournalObject.__init__(self, detail, paint_box)
- self._icon = icon.Icon(**kwargs)
+ self._icon = Icon(**kwargs)
self._icon.show()
self.add(self._icon)
@@ -292,9 +324,7 @@ class Buddies(gtk.Alignment):
buddies = buddies[:self._buddies_max]
def show(icon, buddy):
- icon.root.buddy = buddy
- nick_, color = buddy
- icon.root.props.xo_color = XoColor(color)
+ icon.set_buddy(buddy)
icon.show()
for icon in self._buddies:
@@ -304,7 +334,7 @@ class Buddies(gtk.Alignment):
icon.hide()
for buddy in buddies:
- icon = _CanvasToWidget(_BuddyIcon)
+ icon = _BuddyIcon()
show(icon, buddy)
self._buddies.add(icon)
@@ -325,69 +355,51 @@ class Timestamp(gtk.Label):
self.props.label = misc.get_date(metadata)
-class DetailsIconCanvas(CanvasIcon):
-
+class DetailsIcon(_Button):
def __init__(self):
- CanvasIcon.__init__(self,
- box_width=style.GRID_CELL_SIZE,
+ _Button.__init__(self,
icon_name='go-right',
- size=style.SMALL_ICON_SIZE,
+ pixel_size=style.SMALL_ICON_SIZE,
stroke_color=style.COLOR_TRANSPARENT.get_svg())
- self.metadata = None
-
- self.connect('motion-notify-event', self.__motion_notify_event_cb)
- self.connect_after('activated', self.__activated_cb)
-
- self._set_leave_color()
-
- def fill_in(self, metadata):
- self.metadata = metadata
-
- def _set_leave_color(self):
- self.props.fill_color = style.COLOR_BUTTON_GREY.get_svg()
-
- def __activated_cb(self, button):
- self._set_leave_color()
+ def do_activate(self):
+ self.prelight = False
+ self.do_colors()
controler.details.send(None, uid=self.metadata['uid'])
- def __motion_notify_event_cb(self, icon, event):
- if event.detail == hippo.MOTION_DETAIL_ENTER:
- icon.props.fill_color = style.COLOR_BLACK.get_svg()
- elif event.detail == hippo.MOTION_DETAIL_LEAVE:
- self._set_leave_color()
-
-def DetailsIcon(**kwargs):
- return _CanvasToWidget(DetailsIconCanvas, **kwargs)
-
-
-class _BuddyIcon(CanvasIcon):
+class _BuddyIcon(gtk.EventBox):
def __init__(self):
- CanvasIcon.__init__(self,
- icon_name='computer-xo',
- size=style.STANDARD_ICON_SIZE)
+ gtk.EventBox.__init__(self)
self.buddy = None
- def create_palette(self):
- return BuddyPalette(self.buddy)
+ self.props.visible_window = False
+ self._icon = Icon(
+ icon_name='computer-xo',
+ pixel_size=style.STANDARD_ICON_SIZE)
+ self._icon.show()
+ self.add(self._icon)
-class _CanvasToWidget(hippo.Canvas):
+ self._invoker = WidgetInvoker(self)
+ self._invoker._position_hint = Invoker.AT_CURSOR
- def __init__(self, canvas_class, **kwargs):
- hippo.Canvas.__init__(self)
+ self.connect('destroy', self.__destroy_cb)
- self.modify_bg(gtk.STATE_NORMAL,
- style.COLOR_WHITE.get_gdk_color())
+ def set_buddy(self, buddy):
+ self.buddy = buddy
+ self._invoker.palette = None
+ nick_, color = buddy
+ self._icon.props.xo_color = XoColor(color)
- self.root = canvas_class(**kwargs)
- self.set_root(self.root)
+ def create_palette(self):
+ return BuddyPalette(self.buddy)
- def fill_in(self, metadata):
- self.root.fill_in(metadata)
+ def __destroy_cb(self, icon):
+ if self._invoker is not None:
+ self._invoker.detach()
def _surface_to_pixels(drawable, surface):