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 sugar import profile
|
||||||
|
|
||||||
from model import bundleregistry
|
from model import bundleregistry
|
||||||
|
from frameinvoker import FrameCanvasInvoker
|
||||||
|
|
||||||
class ActivityButton(IconButton):
|
class ActivityButton(IconButton):
|
||||||
def __init__(self, activity):
|
def __init__(self, activity):
|
||||||
IconButton.__init__(self, icon_name=activity.get_icon())
|
IconButton.__init__(self, icon_name=activity.get_icon())
|
||||||
|
|
||||||
palette = Palette(activity.get_name())
|
palette = Palette(activity.get_name())
|
||||||
|
palette.props.invoker = FrameCanvasInvoker(self)
|
||||||
palette.set_group_id('frame')
|
palette.set_group_id('frame')
|
||||||
self.set_palette(palette)
|
self.set_palette(palette)
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@ sugar_PYTHON = \
|
|||||||
ActivitiesBox.py \
|
ActivitiesBox.py \
|
||||||
clipboardbox.py \
|
clipboardbox.py \
|
||||||
clipboardpanelwindow.py \
|
clipboardpanelwindow.py \
|
||||||
|
frameinvoker.py \
|
||||||
FriendsBox.py \
|
FriendsBox.py \
|
||||||
eventarea.py \
|
eventarea.py \
|
||||||
frame.py \
|
frame.py \
|
||||||
|
@ -336,3 +336,4 @@ class Frame(object):
|
|||||||
|
|
||||||
def notify_key_release(self):
|
def notify_key_release(self):
|
||||||
self._key_listener.key_release()
|
self._key_listener.key_release()
|
||||||
|
|
||||||
|
@ -373,7 +373,8 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem):
|
|||||||
|
|
||||||
def set_palette(self, palette):
|
def set_palette(self, palette):
|
||||||
self._palette = 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):
|
def set_tooltip(self, text):
|
||||||
self.set_palette(Palette(text))
|
self.set_palette(Palette(text))
|
||||||
|
@ -62,6 +62,7 @@ class Palette(gobject.GObject):
|
|||||||
def __init__(self, label, accel_path=None):
|
def __init__(self, label, accel_path=None):
|
||||||
gobject.GObject.__init__(self)
|
gobject.GObject.__init__(self)
|
||||||
|
|
||||||
|
self._invoker = None
|
||||||
self._group_id = None
|
self._group_id = None
|
||||||
self._up = False
|
self._up = False
|
||||||
self._position = self.AUTOMATIC
|
self._position = self.AUTOMATIC
|
||||||
@ -151,6 +152,14 @@ class Palette(gobject.GObject):
|
|||||||
else:
|
else:
|
||||||
raise AssertionError
|
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):
|
def _get_position(self, alignment):
|
||||||
# Invoker: x, y, width and height
|
# Invoker: x, y, width and height
|
||||||
inv_rect = self._invoker.get_rect()
|
inv_rect = self._invoker.get_rect()
|
||||||
@ -185,12 +194,12 @@ class Palette(gobject.GObject):
|
|||||||
|
|
||||||
def _in_screen(self, x, y):
|
def _in_screen(self, x, y):
|
||||||
[width, height] = self._menu.size_request()
|
[width, height] = self._menu.size_request()
|
||||||
screen_width = gtk.gdk.screen_width() - units.grid_to_pixels(1)
|
screen_area = self._invoker.get_screen_area()
|
||||||
screen_height = gtk.gdk.screen_height() - units.grid_to_pixels(1)
|
|
||||||
|
|
||||||
return x + width <= screen_width and \
|
return x >= screen_area.x and \
|
||||||
y + height <= screen_height and \
|
y >= screen_area.y and \
|
||||||
x >= units.grid_to_pixels(1) and y >= units.grid_to_pixels(1)
|
x + width <= screen_area.width and \
|
||||||
|
y + height <= screen_area.height
|
||||||
|
|
||||||
def _get_automatic_position(self):
|
def _get_automatic_position(self):
|
||||||
alignments = [ _BOTTOM_LEFT, _BOTTOM_RIGHT,
|
alignments = [ _BOTTOM_LEFT, _BOTTOM_RIGHT,
|
||||||
@ -203,6 +212,9 @@ class Palette(gobject.GObject):
|
|||||||
if self._in_screen(x, y):
|
if self._in_screen(x, y):
|
||||||
return x, y
|
return x, y
|
||||||
|
|
||||||
|
# We fail
|
||||||
|
return (0, 0)
|
||||||
|
|
||||||
def _show(self):
|
def _show(self):
|
||||||
x = y = 0
|
x = y = 0
|
||||||
|
|
||||||
@ -381,6 +393,11 @@ class Invoker(object):
|
|||||||
for listener in self._listeners:
|
for listener in self._listeners:
|
||||||
listener.invoker_mouse_leave()
|
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):
|
class WidgetInvoker(Invoker):
|
||||||
def __init__(self, widget):
|
def __init__(self, widget):
|
||||||
Invoker.__init__(self)
|
Invoker.__init__(self)
|
||||||
|
Loading…
Reference in New Issue
Block a user