Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMorgan Collett <morgan.collett@gmail.com>2008-06-10 10:05:19 (GMT)
committer Morgan Collett <morgan.collett@gmail.com>2008-06-13 14:59:34 (GMT)
commit13e586794c0b1bc8af7b139e487eed8e0392f804 (patch)
tree1faa27731b137d829ca7ca538e7756748abf98c0 /src
parent9d89b4c0c07d5e337ff98a8aeedd6adcea8e96c8 (diff)
6298: Subclass InviteButton
Diffstat (limited to 'src')
-rw-r--r--src/view/frame/activitiestray.py277
1 files changed, 162 insertions, 115 deletions
diff --git a/src/view/frame/activitiestray.py b/src/view/frame/activitiestray.py
index da087d6..621f1ea 100644
--- a/src/view/frame/activitiestray.py
+++ b/src/view/frame/activitiestray.py
@@ -90,75 +90,66 @@ class ActivityButton(RadioToolButton):
self._icon.props.pulsing = False
home_activity.disconnect(self._notify_launching_hid)
-class InviteButton(ToolButton):
- """Invite to shared activity"""
+
+class BaseInviteButton(ToolButton):
def __init__(self, invite):
ToolButton.__init__(self)
-
self._invite = invite
- self._activity_model = activity_model = None
- self._private_channel = None
- if invite.get_activity_id():
- # shared activity
- mesh = shellmodel.get_instance().get_mesh()
- activity_model = mesh.get_activity(invite.get_activity_id())
- self._activity_model = activity_model
- self._bundle_id = activity_model.get_bundle_id()
- else:
- # private invite to 1-1 connection
- self._private_channel = invite.get_private_channel()
- self._bundle_id = invite.get_bundle_id()
-
self._icon = Icon()
- if activity_model:
- # shared activity
- self._icon.props.xo_color = activity_model.get_color()
- if activity_model.get_icon_name():
- self._icon.props.file = activity_model.get_icon_name()
- else:
- self._icon.props.icon_name = 'image-missing'
+ self.connect('clicked', self.__clicked_cb)
+ self.connect('destroy', self.__destroy_cb)
+ self._notif_icon = NotificationIcon()
+ self._notif_icon.connect('button-release-event',
+ self.__button_release_event_cb)
+
+ def __button_release_event_cb(self, icon, event):
+ self.emit('clicked')
+
+ def __clicked_cb(self, button):
+ if self._notif_icon is not None:
+ frame = view.frame.frame.get_instance()
+ frame.remove_notification(self._notif_icon)
+ self._notif_icon = None
+ self._launch()
+
+ def _launch(self):
+ """Launch the target of the invite"""
+ raise NotImplementedError
+
+ def __destroy_cb(self, button):
+ frame = view.frame.frame.get_instance()
+ frame.remove_notification(self._notif_icon)
+
+class ActivityInviteButton(BaseInviteButton):
+ """Invite to shared activity"""
+ def __init__(self, invite):
+ BaseInviteButton.__init__(self, invite)
+ mesh = shellmodel.get_instance().get_mesh()
+ activity_model = mesh.get_activity(invite.get_activity_id())
+ self._activity_model = activity_model
+ self._bundle_id = activity_model.get_bundle_id()
+
+ self._icon.props.xo_color = activity_model.get_color()
+ if activity_model.get_icon_name():
+ self._icon.props.file = activity_model.get_icon_name()
else:
- # private invite: displays with owner's colors
- self._icon.props.xo_color = profile.get_color()
- registry = activity.get_registry()
- activity_info = registry.get_activity(self._bundle_id)
- if activity_info:
- self._icon.props.file = activity_info.icon
- else:
- self._icon.props.icon_name = 'image-missing'
+ self._icon.props.icon_name = 'image-missing'
self.set_icon_widget(self._icon)
self._icon.show()
- palette = InvitePalette(invite)
+ palette = ActivityInvitePalette(invite)
palette.props.invoker = FrameWidgetInvoker(self)
palette.set_group_id('frame')
self.set_palette(palette)
- self.connect('clicked', self.__clicked_cb)
- self.connect('destroy', self.__destroy_cb)
-
- self._notif_icon = NotificationIcon()
- if activity_model:
- # shared activity
- self._notif_icon.props.xo_color = activity_model.get_color()
- if activity_model.get_icon_name():
- icon_name = activity_model.get_icon_name()
- self._notif_icon.props.icon_filename = icon_name
- else:
- self._notif_icon.props.icon_name = 'image-missing'
+ self._notif_icon.props.xo_color = activity_model.get_color()
+ if activity_model.get_icon_name():
+ icon_name = activity_model.get_icon_name()
+ self._notif_icon.props.icon_filename = icon_name
else:
- # private invite: displays with owner's colors
- self._notif_icon.props.xo_color = profile.get_color()
- registry = activity.get_registry()
- activity_info = registry.get_activity(self._bundle_id)
- if activity_info:
- self._notif_icon.props.icon_filename = activity_info.icon
- else:
- self._notif_icon.props.icon_name = 'image-missing'
- self._notif_icon.connect('button-release-event',
- self.__button_release_event_cb)
+ self._notif_icon.props.icon_name = 'image-missing'
- palette = InvitePalette(invite)
+ palette = ActivityInvitePalette(invite)
palette.props.invoker = WidgetInvoker(self._notif_icon)
palette.set_group_id('frame')
self._notif_icon.palette = palette
@@ -167,83 +158,136 @@ class InviteButton(ToolButton):
frame.add_notification(self._notif_icon,
view.frame.frame.TOP_LEFT)
- def __button_release_event_cb(self, icon, event):
- self.emit('clicked')
-
- def __clicked_cb(self, button):
- if self._notif_icon is not None:
- frame = view.frame.frame.get_instance()
- frame.remove_notification(self._notif_icon)
- self._notif_icon = None
-
+ def _launch(self):
+ """Join the activity in the invite."""
shell = view.Shell.get_instance()
- if self._activity_model:
- # shared activity
- shell.join_activity(self._activity_model.get_bundle_id(),
- self._activity_model.get_id())
- else:
- # private invite to 1-1 connection
- shell.start_activity_with_uri(self._bundle_id,
- self._private_channel)
+ shell.join_activity(self._activity_model.get_bundle_id(),
+ self._activity_model.get_id())
- def __destroy_cb(self, button):
- frame = view.frame.frame.get_instance()
- frame.remove_notification(self._notif_icon)
-
-class InvitePalette(Palette):
+
+class PrivateInviteButton(BaseInviteButton):
+ """Invite to a private one to one channel"""
def __init__(self, invite):
+ BaseInviteButton.__init__(self, invite)
+ self._private_channel = invite.get_private_channel()
+ self._bundle_id = invite.get_bundle_id()
- self._invite = invite
- self._activity_model = activity_model = None
- self._private_channel = None
- if invite.get_activity_id():
- # shared activity
- mesh = shellmodel.get_instance().get_mesh()
- activity_model = mesh.get_activity(invite.get_activity_id())
- self._activity_model = activity_model
- self._bundle_id = activity_model.get_bundle_id()
+ self._icon.props.xo_color = profile.get_color()
+ registry = activity.get_registry()
+ activity_info = registry.get_activity(self._bundle_id)
+ if activity_info:
+ self._icon.props.file = activity_info.icon
else:
- # private invite to 1-1 connection
- self._private_channel = invite.get_private_channel()
- self._bundle_id = invite.get_bundle_id()
+ self._icon.props.icon_name = 'image-missing'
+ self.set_icon_widget(self._icon)
+ self._icon.show()
- Palette.__init__(self, '')
+ palette = PrivateInvitePalette(invite)
+ palette.props.invoker = FrameWidgetInvoker(self)
+ palette.set_group_id('frame')
+ self.set_palette(palette)
+ self._notif_icon.props.xo_color = profile.get_color()
registry = activity.get_registry()
activity_info = registry.get_activity(self._bundle_id)
if activity_info:
- self.set_primary_text(activity_info.name)
+ self._notif_icon.props.icon_filename = activity_info.icon
else:
- self.set_primary_text(self._bundle_id)
+ self._notif_icon.props.icon_name = 'image-missing'
+
+ palette = PrivateInvitePalette(invite)
+ palette.props.invoker = WidgetInvoker(self._notif_icon)
+ palette.set_group_id('frame')
+ self._notif_icon.palette = palette
+
+ frame = view.frame.frame.get_instance()
+ frame.add_notification(self._notif_icon,
+ view.frame.frame.TOP_LEFT)
+
+ def _launch(self):
+ """Start the activity with private channel."""
+ shell = view.Shell.get_instance()
+ shell.start_activity_with_uri(self._bundle_id,
+ self._private_channel)
+
+
+class BaseInvitePalette(Palette):
+ """Palette for frame or notification icon for invites."""
+ def __init__(self):
+ Palette.__init__(self, '')
menu_item = MenuItem(_('Join'), icon_name='dialog-ok')
- menu_item.connect('activate', self.__join_activate_cb)
+ menu_item.connect('activate', self._join_activate_cb)
self.menu.append(menu_item)
menu_item.show()
menu_item = MenuItem(_('Decline'), icon_name='dialog-cancel')
- menu_item.connect('activate', self.__decline_activate_cb)
+ menu_item.connect('activate', self._decline_activate_cb)
self.menu.append(menu_item)
menu_item.show()
- def __join_activate_cb(self, menu_item):
- shell = view.Shell.get_instance()
- if self._activity_model:
- # shared activity
- shell.join_activity(self._activity_model.get_bundle_id(),
- self._activity_model.get_id())
+ def _join_activate_cb(self, menu_item):
+ raise NotImplementedError
+
+ def _decline_activate_cb(self, menu_item):
+ raise NotImplementedError
+
+
+class ActivityInvitePalette(BaseInvitePalette):
+ """Palette for shared activity invites."""
+
+ def __init__(self, invite):
+ BaseInvitePalette.__init__(self)
+
+ mesh = shellmodel.get_instance().get_mesh()
+ activity_model = mesh.get_activity(invite.get_activity_id())
+ self._activity_model = activity_model
+ self._bundle_id = activity_model.get_bundle_id()
+
+ registry = activity.get_registry()
+ activity_info = registry.get_activity(self._bundle_id)
+ if activity_info:
+ self.set_primary_text(activity_info.name)
else:
- # private invite to 1-1 connection
- shell.start_activity_with_uri(self._bundle_id,
- self._private_channel)
+ self.set_primary_text(self._bundle_id)
- def __decline_activate_cb(self, menu_item):
+ def _join_activate_cb(self, menu_item):
+ shell = view.Shell.get_instance()
+ shell.join_activity(self._activity_model.get_bundle_id(),
+ self._activity_model.get_id())
+
+ def _decline_activate_cb(self, menu_item):
invites = shellmodel.get_instance().get_invites()
- if self._activity_model:
- activity_id = self._activity_model.get_id()
- invites.remove_activity(activity_id)
+ activity_id = self._activity_model.get_id()
+ invites.remove_activity(activity_id)
+
+
+class PrivateInvitePalette(BaseInvitePalette):
+ """Palette for private channel invites."""
+
+ def __init__(self, invite):
+ BaseInvitePalette.__init__(self)
+
+ self._private_channel = invite.get_private_channel()
+ self._bundle_id = invite.get_bundle_id()
+
+ registry = activity.get_registry()
+ activity_info = registry.get_activity(self._bundle_id)
+ if activity_info:
+ self.set_primary_text(activity_info.name)
else:
- invites.remove_private_channel(self._private_channel)
+ self.set_primary_text(self._bundle_id)
+
+ def _join_activate_cb(self, menu_item):
+ shell = view.Shell.get_instance()
+ shell.start_activity_with_uri(self._bundle_id,
+ self._private_channel)
+ invites = shellmodel.get_instance().get_invites()
+ invites.remove_private_channel(self._private_channel)
+
+ def _decline_activate_cb(self, menu_item):
+ invites = shellmodel.get_instance().get_invites()
+ invites.remove_private_channel(self._private_channel)
class ActivitiesTray(HTray):
@@ -310,16 +354,19 @@ class ActivitiesTray(HTray):
def _add_invite(self, invite):
"""Add an invite (SugarInvite or PrivateInvite)"""
+ item = None
if invite.get_activity_id():
mesh = shellmodel.get_instance().get_mesh()
activity_model = mesh.get_activity(invite.get_activity_id())
- if not activity_model:
- return
- item = InviteButton(invite)
- item.connect('clicked', self.__invite_clicked_cb, invite)
- self.add_item(item)
- item.show()
- self._invite_to_item[invite] = item
+ if activity_model:
+ item = ActivityInviteButton(invite)
+ else:
+ item = PrivateInviteButton(invite)
+ if item is not None:
+ item.connect('clicked', self.__invite_clicked_cb, invite)
+ self.add_item(item)
+ item.show()
+ self._invite_to_item[invite] = item
def _remove_invite(self, invite):
self.remove_item(self._invite_to_item[invite])