Get back presence list to work

This commit is contained in:
Marco Pesenti Gritti 2006-10-05 17:09:38 +02:00
parent 847f69fce7
commit 6479962ca7
6 changed files with 43 additions and 24 deletions

View File

@ -4,7 +4,7 @@ from view.BuddyMenu import BuddyMenu
class BuddyIcon(MenuIcon): class BuddyIcon(MenuIcon):
def __init__(self, shell, menu_shell, buddy): def __init__(self, shell, menu_shell, buddy):
MenuIcon.__init__(self, menu_shell, icon_name='stock-buddy', MenuIcon.__init__(self, menu_shell, icon_name='stock-buddy',
color=buddy.get_color(), size=112) color=buddy.get_color())
self._shell = shell self._shell = shell
self._buddy = buddy self._buddy = buddy

View File

@ -5,6 +5,7 @@ import wnck
from view.frame.ActivitiesBox import ActivitiesBox from view.frame.ActivitiesBox import ActivitiesBox
from view.frame.ZoomBox import ZoomBox from view.frame.ZoomBox import ZoomBox
from view.frame.FriendsBox import FriendsBox
from view.frame.PanelWindow import PanelWindow from view.frame.PanelWindow import PanelWindow
from sugar.graphics.timeline import Timeline from sugar.graphics.timeline import Timeline
from sugar.graphics.menushell import MenuShell from sugar.graphics.menushell import MenuShell
@ -143,10 +144,13 @@ class Frame:
[x, y] = grid.point(1, 0) [x, y] = grid.point(1, 0)
bottom_panel.move(box, x, y) bottom_panel.move(box, x, y)
left_panel = self._create_panel(grid, 0, 1, 1, 10)
right_panel = self._create_panel(grid, 15, 1, 1, 10) right_panel = self._create_panel(grid, 15, 1, 1, 10)
box = FriendsBox(self._shell, self._menu_shell)
right_panel.append(box)
left_panel = self._create_panel(grid, 0, 1, 1, 10)
def _create_panel(self, grid, x, y, width, height): def _create_panel(self, grid, x, y, width, height):
panel = PanelWindow() panel = PanelWindow()

View File

@ -1,15 +1,16 @@
import hippo import hippo
from sugar.graphics.CanvasIcon import CanvasIcon from sugar.graphics.canvasicon import CanvasIcon
from sugar.graphics.iconcolor import IconColor from sugar.graphics.iconcolor import IconColor
from sugar.graphics import style
from sugar.presence import PresenceService from sugar.presence import PresenceService
from view.BuddyIcon import BuddyIcon from view.BuddyIcon import BuddyIcon
from model.BuddyModel import BuddyModel from model.BuddyModel import BuddyModel
from view.frame.MenuStrategy import MenuStrategy from view.frame.MenuStrategy import MenuStrategy
class RightPanel(hippo.CanvasBox): class FriendsBox(hippo.CanvasBox):
def __init__(self, shell, menu_shell): def __init__(self, shell, menu_shell):
CanvasBox.__init__(self) hippo.CanvasBox.__init__(self)
self._shell = shell self._shell = shell
self._menu_shell = menu_shell self._menu_shell = menu_shell
self._activity_ps = None self._activity_ps = None
@ -26,18 +27,18 @@ class RightPanel(hippo.CanvasBox):
def add(self, buddy): def add(self, buddy):
model = BuddyModel(buddy=buddy) model = BuddyModel(buddy=buddy)
icon = BuddyIcon(self._shell, self._menu_shell, model) icon = BuddyIcon(self._shell, self._menu_shell, model)
style.apply_stylesheet(icon, 'frame.BuddyIcon')
icon.set_menu_strategy(MenuStrategy()) icon.set_menu_strategy(MenuStrategy())
self.append(icon, 0) self.append(icon)
self._buddies[buddy.get_name()] = icon self._buddies[buddy.get_name()] = icon
def remove(self, buddy): def remove(self, buddy):
i = self.find_child(self._buddies[buddy.get_name()]) self.remove(self._buddies[buddy.get_name()])
self.remove_child(i)
def clear(self): def clear(self):
while (self.get_n_children() > 0): for item in self.get_children():
self.remove_child(0) self.remove(item)
self._buddies = {} self._buddies = {}
def __activity_appeared_cb(self, pservice, activity_ps): def __activity_appeared_cb(self, pservice, activity_ps):

View File

@ -1,7 +1,21 @@
import hippo
from sugar.graphics.grid import Grid from sugar.graphics.grid import Grid
class MenuStrategy: class MenuStrategy:
def get_menu_position(self, menu, x, y, width, height): def get_menu_position(self, menu, item):
[x, y] = item.get_context().translate_to_widget(item)
canvas = item
while (not isinstance(canvas, hippo.Canvas)):
canvas = canvas.get_context()
[origin_x, origin_y] = canvas.window.get_origin()
x += origin_x
y += origin_y
[width, height] = item.get_allocation()
grid = Grid() grid = Grid()
[grid_x1, grid_y1] = grid.fit_point(x, y) [grid_x1, grid_y1] = grid.fit_point(x, y)

View File

@ -23,11 +23,11 @@ frame_ActivityIcon = {
'size' : _standard_icon_size 'size' : _standard_icon_size
} }
ring_ActivityIcon = { frame_ZoomIcon = {
'size' : _medium_icon_size 'size' : _standard_icon_size
} }
frame_ZoomIcon = { frame_BuddyIcon = {
'size' : _standard_icon_size 'size' : _standard_icon_size
} }
@ -55,6 +55,10 @@ home_MyIcon = {
'size' : _xlarge_icon_size 'size' : _xlarge_icon_size
} }
ring_ActivityIcon = {
'size' : _medium_icon_size
}
friends_MyIcon = { friends_MyIcon = {
'size' : _large_icon_size 'size' : _large_icon_size
} }

View File

@ -4,8 +4,8 @@ import gobject
from sugar.graphics.canvasicon import CanvasIcon from sugar.graphics.canvasicon import CanvasIcon
class _MenuStrategy: class _MenuStrategy:
def get_menu_position(self, menu, x1, y1, x2, y2): def get_menu_position(self, menu, item):
return [x1, y1] return item.get_context().translate_to_widget(self)
class MenuIcon(CanvasIcon): class MenuIcon(CanvasIcon):
def __init__(self, menu_shell, **kwargs): def __init__(self, menu_shell, **kwargs):
@ -29,7 +29,7 @@ class MenuIcon(CanvasIcon):
def set_menu_strategy(self, strategy): def set_menu_strategy(self, strategy):
self._menu_strategy = strategy self._menu_strategy = strategy
def _popup(self, x1, y1, x2, y2): def _popup(self):
self.popdown() self.popdown()
self._menu_shell.set_active(None) self._menu_shell.set_active(None)
@ -41,7 +41,7 @@ class MenuIcon(CanvasIcon):
self._menu_leave_notify_event_cb) self._menu_leave_notify_event_cb)
strategy = self._menu_strategy strategy = self._menu_strategy
[x, y] = strategy.get_menu_position(self._menu, x1, y1, x2, y2) [x, y] = strategy.get_menu_position(self._menu, self)
self._menu.move(x, y) self._menu.move(x, y)
self._menu.show() self._menu.show()
@ -73,11 +73,7 @@ class MenuIcon(CanvasIcon):
def _motion_notify_enter(self): def _motion_notify_enter(self):
self._stop_popdown_timeout() self._stop_popdown_timeout()
self._popup()
[x, y] = self.get_context().translate_to_widget(self)
[width, height] = self.get_allocation()
self._popup(x, y, width, height)
def _motion_notify_leave(self): def _motion_notify_leave(self):
self._start_popdown_timeout() self._start_popdown_timeout()