New frameinvoker

This commit is contained in:
Eduardo Silva 2007-07-06 10:51:18 -04:00
parent 739dbafa97
commit ec929eb0ad
5 changed files with 28 additions and 6 deletions

View File

@ -24,12 +24,14 @@ from sugar.graphics.iconbutton import IconButton
from sugar import profile
from model import bundleregistry
from frameinvoker import FrameCanvasInvoker
class ActivityButton(IconButton):
def __init__(self, activity):
IconButton.__init__(self, icon_name=activity.get_icon())
palette = Palette(activity.get_name())
palette.props.invoker = FrameCanvasInvoker(self)
palette.set_group_id('frame')
self.set_palette(palette)

View File

@ -4,6 +4,7 @@ sugar_PYTHON = \
ActivitiesBox.py \
clipboardbox.py \
clipboardpanelwindow.py \
frameinvoker.py \
FriendsBox.py \
eventarea.py \
frame.py \

View File

@ -336,3 +336,4 @@ class Frame(object):
def notify_key_release(self):
self._key_listener.key_release()

View File

@ -373,7 +373,8 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem):
def set_palette(self, palette):
self._palette = palette
self._palette.props.invoker = CanvasInvoker(self)
if not self._palette.props.invoker:
self._palette.props.invoker = CanvasInvoker(self)
def set_tooltip(self, text):
self.set_palette(Palette(text))

View File

@ -62,6 +62,7 @@ class Palette(gobject.GObject):
def __init__(self, label, accel_path=None):
gobject.GObject.__init__(self)
self._invoker = None
self._group_id = None
self._up = False
self._position = self.AUTOMATIC
@ -151,6 +152,14 @@ class Palette(gobject.GObject):
else:
raise AssertionError
def do_get_property(self, pspec):
if pspec.name == 'invoker':
return self._invoker
elif pspec.name == 'position':
return self._position
else:
raise AssertionError
def _get_position(self, alignment):
# Invoker: x, y, width and height
inv_rect = self._invoker.get_rect()
@ -185,12 +194,12 @@ class Palette(gobject.GObject):
def _in_screen(self, x, y):
[width, height] = self._menu.size_request()
screen_width = gtk.gdk.screen_width() - units.grid_to_pixels(1)
screen_height = gtk.gdk.screen_height() - units.grid_to_pixels(1)
screen_area = self._invoker.get_screen_area()
return x + width <= screen_width and \
y + height <= screen_height and \
x >= units.grid_to_pixels(1) and y >= units.grid_to_pixels(1)
return x >= screen_area.x and \
y >= screen_area.y and \
x + width <= screen_area.width and \
y + height <= screen_area.height
def _get_automatic_position(self):
alignments = [ _BOTTOM_LEFT, _BOTTOM_RIGHT,
@ -203,6 +212,9 @@ class Palette(gobject.GObject):
if self._in_screen(x, y):
return x, y
# We fail
return (0, 0)
def _show(self):
x = y = 0
@ -381,6 +393,11 @@ class Invoker(object):
for listener in self._listeners:
listener.invoker_mouse_leave()
def get_screen_area(self):
width = gtk.gdk.screen_width()
height = gtk.gdk.screen_height()
return gtk.gdk.Rectangle(0, 0, width, height)
class WidgetInvoker(Invoker):
def __init__(self, widget):
Invoker.__init__(self)