Implement popup menu for friends

This commit is contained in:
Marco Pesenti Gritti
2006-09-14 13:03:11 +02:00
parent 8f6baf6239
commit fe69dec4ad
4 changed files with 158 additions and 15 deletions
+37 -9
View File
@@ -5,6 +5,8 @@ import goocanvas
from sugar.canvas.IconItem import IconItem
from home.IconLayout import IconLayout
from home.MyIcon import MyIcon
from BuddyPopup import BuddyPopup
from sugar.canvas.Grid import Grid
class FriendIcon(IconItem):
def __init__(self, friend):
@@ -31,19 +33,45 @@ class FriendsGroup(goocanvas.Group):
for friend in self._friends:
self.add_friend(friend)
friends.connect('friend-added', self.__friend_added_cb)
def __friend_clicked_cb(self, icon):
activity = self._shell.get_current_activity()
buddy = icon.get_friend().get_buddy()
if buddy != None:
activity.invite(buddy)
friends.connect('friend-added', self._friend_added_cb)
def add_friend(self, friend):
icon = FriendIcon(friend)
icon.connect('clicked', self.__friend_clicked_cb)
icon.connect('popup', self._friend_popup_cb)
icon.connect('popdown', self._friend_popdown_cb)
self.add_child(icon)
self._icon_layout.add_icon(icon)
def __friend_added_cb(self, data_model, friend):
def _friend_added_cb(self, data_model, friend):
self.add_friend(friend)
def _friend_popup_cb(self, icon, x1, y1, x2, y2):
grid = Grid()
self._popup = BuddyPopup(self._shell, grid, icon.get_friend())
[grid_x1, grid_y1] = grid.convert_from_screen(x1, y1)
[grid_x2, grid_y2] = grid.convert_from_screen(x2, y2)
if grid_x2 + self._popup.get_width() + 1 > Grid.ROWS:
grid_x = grid_x1 - self._popup.get_width() + 1
else:
grid_x = grid_x2 - 1
grid_y = grid_y1
if grid_y < 0:
grid_y = 0
if grid_y + self._popup.get_width() > Grid.ROWS:
grid_y = Grid.ROWS - self._popup.get_width()
grid.set_constraints(self._popup, grid_x, grid_y,
self._popup.get_width(), self._popup.get_height())
self._popup.show()
def _friend_popdown_cb(self, friend):
self._popup.popdown()
self._popup = None