New frameinvoker
This commit is contained in:
parent
739dbafa97
commit
ec929eb0ad
@ -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)
|
||||
|
||||
|
@ -4,6 +4,7 @@ sugar_PYTHON = \
|
||||
ActivitiesBox.py \
|
||||
clipboardbox.py \
|
||||
clipboardpanelwindow.py \
|
||||
frameinvoker.py \
|
||||
FriendsBox.py \
|
||||
eventarea.py \
|
||||
frame.py \
|
||||
|
@ -336,3 +336,4 @@ class Frame(object):
|
||||
|
||||
def notify_key_release(self):
|
||||
self._key_listener.key_release()
|
||||
|
||||
|
@ -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))
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user