diff options
author | Tomeu Vizoso <tomeu@tomeuvizoso.net> | 2008-04-02 12:53:52 (GMT) |
---|---|---|
committer | Tomeu Vizoso <tomeu@tomeuvizoso.net> | 2008-04-02 12:53:52 (GMT) |
commit | 14f1ca9b8491dee343305066facf8e7ae24e381f (patch) | |
tree | 2a387daf635cf21c2843cd18b29bc6f72d781d87 /src | |
parent | b8dd3afcb84f86a94c41b1e29a851515e0009690 (diff) |
Make Frame, Shell and ShellModel singletons and remove all those references dragged around constructors.
Diffstat (limited to 'src')
-rw-r--r-- | src/main.py | 9 | ||||
-rw-r--r-- | src/model/shellmodel.py | 9 | ||||
-rw-r--r-- | src/shellservice.py | 9 | ||||
-rw-r--r-- | src/view/BuddyIcon.py | 5 | ||||
-rw-r--r-- | src/view/BuddyMenu.py | 21 | ||||
-rw-r--r-- | src/view/Shell.py | 30 | ||||
-rw-r--r-- | src/view/frame/activitiestray.py | 6 | ||||
-rw-r--r-- | src/view/frame/devicestray.py | 5 | ||||
-rw-r--r-- | src/view/frame/frame.py | 23 | ||||
-rw-r--r-- | src/view/frame/friendstray.py | 15 | ||||
-rw-r--r-- | src/view/frame/zoomtoolbar.py | 29 | ||||
-rw-r--r-- | src/view/home/FriendView.py | 4 | ||||
-rw-r--r-- | src/view/home/FriendsBox.py | 8 | ||||
-rw-r--r-- | src/view/home/HomeBox.py | 7 | ||||
-rw-r--r-- | src/view/home/HomeWindow.py | 9 | ||||
-rw-r--r-- | src/view/home/MeshBox.py | 19 | ||||
-rw-r--r-- | src/view/home/activitieslist.py | 12 | ||||
-rw-r--r-- | src/view/home/activitiesring.py | 43 | ||||
-rw-r--r-- | src/view/keyhandler.py | 27 |
19 files changed, 158 insertions, 132 deletions
diff --git a/src/main.py b/src/main.py index e785707..940be8f 100644 --- a/src/main.py +++ b/src/main.py @@ -32,8 +32,7 @@ from sugar import env from sugar import logger from sugar.profile import get_profile -from view.Shell import Shell -from model.shellmodel import ShellModel +import view.Shell from shellservice import ShellService from hardware import hardwaremanager from intro import intro @@ -139,9 +138,9 @@ def main(): print "Got Ctrl+C, continuing..." break - model = ShellModel() - shell = Shell(model) - service = ShellService(shell) + # TODO: move initializations from the Shell constructor to a start() method + shell = view.Shell.get_instance() + service = ShellService() try: gtk.main() diff --git a/src/model/shellmodel.py b/src/model/shellmodel.py index 5462e27..1834fcd 100644 --- a/src/model/shellmodel.py +++ b/src/model/shellmodel.py @@ -110,3 +110,12 @@ class ShellModel(gobject.GObject): if self._showing_desktop != showing_desktop: self._showing_desktop = showing_desktop self.notify('zoom-level') + +_instance = None + +def get_instance(): + global _instance + if not _instance: + _instance = ShellModel() + return _instance + diff --git a/src/shellservice.py b/src/shellservice.py index 458f941..add49d8 100644 --- a/src/shellservice.py +++ b/src/shellservice.py @@ -18,6 +18,9 @@ import dbus import os +from view import Shell +from model import shellmodel + _DBUS_SERVICE = "org.laptop.Shell" _DBUS_SHELL_IFACE = "org.laptop.Shell" _DBUS_OWNER_IFACE = "org.laptop.Shell.Owner" @@ -46,9 +49,9 @@ class ShellService(dbus.service.Object): _rainbow = None - def __init__(self, shell): - self._shell = shell - self._shell_model = shell.get_model() + def __init__(self): + self._shell = Shell.get_instance() + self._shell_model = shellmodel.get_instance() self._owner = self._shell_model.get_owner() self._owner.connect('nick-changed', self._owner_nick_changed_cb) diff --git a/src/view/BuddyIcon.py b/src/view/BuddyIcon.py index be79264..ccc9c46 100644 --- a/src/view/BuddyIcon.py +++ b/src/view/BuddyIcon.py @@ -21,17 +21,16 @@ from sugar.graphics import style from view.BuddyMenu import BuddyMenu class BuddyIcon(CanvasIcon): - def __init__(self, shell, buddy, size=style.STANDARD_ICON_SIZE): + def __init__(self, buddy, size=style.STANDARD_ICON_SIZE): CanvasIcon.__init__(self, icon_name='computer-xo', size=size) self._greyed_out = False - self._shell = shell self._buddy = buddy self._buddy.connect('appeared', self._buddy_presence_change_cb) self._buddy.connect('disappeared', self._buddy_presence_change_cb) self._buddy.connect('color-changed', self._buddy_presence_change_cb) - palette = BuddyMenu(shell, buddy) + palette = BuddyMenu(buddy) self.set_palette(palette) self._update_color() diff --git a/src/view/BuddyMenu.py b/src/view/BuddyMenu.py index d72ed5b..2bdb6d9 100644 --- a/src/view/BuddyMenu.py +++ b/src/view/BuddyMenu.py @@ -24,10 +24,12 @@ from sugar.graphics.menuitem import MenuItem from sugar.graphics.icon import Icon from sugar.presence import presenceservice +from model import shellmodel +import view.Shell + class BuddyMenu(Palette): - def __init__(self, shell, buddy): + def __init__(self, buddy): self._buddy = buddy - self._shell = shell Palette.__init__(self, buddy.get_nick()) self._active_activity_changed_hid = None @@ -36,15 +38,12 @@ class BuddyMenu(Palette): self._buddy.connect('icon-changed', self._buddy_icon_changed_cb) self._buddy.connect('nick-changed', self._buddy_nick_changed_cb) - owner = self._get_shell_model().get_owner() + owner = shellmodel.get_instance().get_owner() if not buddy.is_owner(): self._add_items() - def _get_shell_model(self): - return self._shell.get_model() - def _get_home_model(self): - return self._get_shell_model().get_home() + return shellmodel.get_instance().get_home() def __destroy_cb(self, menu): if self._active_activity_changed_hid is not None: @@ -54,7 +53,7 @@ class BuddyMenu(Palette): def _add_items(self): pservice = presenceservice.get_instance() - friends = self._get_shell_model().get_friends() + friends = shellmodel.get_instance().get_friends() if friends.has_buddy(self._buddy): menu_item = MenuItem(_('Remove friend'), 'list-remove') menu_item.connect('activate', self._remove_friend_cb) @@ -108,14 +107,14 @@ class BuddyMenu(Palette): self.set_primary_text(nick) def _make_friend_cb(self, menuitem): - friends = self._get_shell_model().get_friends() + friends = shellmodel.get_instance().get_friends() friends.make_friend(self._buddy) def _remove_friend_cb(self, menuitem): - friends = self._get_shell_model().get_friends() + friends = shellmodel.get_instance().get_friends() friends.remove(self._buddy) def _invite_friend_cb(self, menuitem): - activity = self._shell.get_current_activity() + activity = view.Shell.get_instance().get_current_activity() activity.invite(self._buddy) diff --git a/src/view/Shell.py b/src/view/Shell.py index 5c4c75c..cafbf60 100644 --- a/src/view/Shell.py +++ b/src/view/Shell.py @@ -35,10 +35,10 @@ from sugar import profile from sugar import env from view.ActivityHost import ActivityHost -from view.frame.frame import Frame +from view.frame import frame from view.keyhandler import KeyHandler from view.home.HomeWindow import HomeWindow -from model.shellmodel import ShellModel +from model import shellmodel # #3903 - this constant can be removed and assumed to be 1 when dbus-python # 0.82.3 is the only version used @@ -48,22 +48,22 @@ else: DBUS_PYTHON_TIMEOUT_UNITS_PER_SECOND = 1000 class Shell(gobject.GObject): - def __init__(self, model): + def __init__(self): gobject.GObject.__init__(self) self._activities_starting = Set() - self._model = model + self._model = shellmodel.get_instance() self._hosts = {} self._screen = wnck.screen_get_default() self._current_host = None self._pending_host = None self._screen_rotation = 0 - self._key_handler = KeyHandler(self) + self._key_handler = KeyHandler() - self._frame = Frame(self) + self._frame = frame.get_instance() - self._home_window = HomeWindow(self) + self._home_window = HomeWindow() self._home_window.show() home_model = self._model.get_home() @@ -152,7 +152,7 @@ class Shell(gobject.GObject): def notify_launch(self, bundle_id, activity_id): # Zoom to Home for launch feedback - self.set_zoom_level(ShellModel.ZOOM_HOME) + self.set_zoom_level(shellmodel.ShellModel.ZOOM_HOME) home_model = self._model.get_home() home_model.notify_activity_launch(activity_id, bundle_id) @@ -170,7 +170,7 @@ class Shell(gobject.GObject): activityfactory.create(activity_type) def take_activity_screenshot(self): - if self._model.get_zoom_level() != ShellModel.ZOOM_ACTIVITY: + if self._model.get_zoom_level() != shellmodel.ShellModel.ZOOM_ACTIVITY: return if self.get_frame().visible: return @@ -191,7 +191,7 @@ class Shell(gobject.GObject): self.take_activity_screenshot() - if level == ShellModel.ZOOM_ACTIVITY: + if level == shellmodel.ShellModel.ZOOM_ACTIVITY: if self._pending_host is not None: self._pending_host.present() self._screen.toggle_showing_desktop(False) @@ -219,7 +219,7 @@ class Shell(gobject.GObject): activity.get_window().activate(1) def close_current_activity(self): - if self._model.get_zoom_level() != ShellModel.ZOOM_ACTIVITY: + if self._model.get_zoom_level() != shellmodel.ShellModel.ZOOM_ACTIVITY: return home_model = self._model.get_home() @@ -282,3 +282,11 @@ class Shell(gobject.GObject): finally: os.remove(file_path) +_instance = None + +def get_instance(): + global _instance + if not _instance: + _instance = Shell() + return _instance + diff --git a/src/view/frame/activitiestray.py b/src/view/frame/activitiestray.py index 03d1e81..8fb746b 100644 --- a/src/view/frame/activitiestray.py +++ b/src/view/frame/activitiestray.py @@ -24,6 +24,7 @@ from sugar.graphics.tray import HTray from sugar.graphics.xocolor import XoColor from sugar.graphics.radiotoolbutton import RadioToolButton +from model import shellmodel from view.palettes import JournalPalette, CurrentActivityPalette from view.pulsingicon import PulsingIcon from view.frame.frameinvoker import FrameWidgetInvoker @@ -66,12 +67,11 @@ class ActivityButton(RadioToolButton): home_activity.disconnect(self._notify_launching_hid) class ActivitiesTray(HTray): - def __init__(self, shell): + def __init__(self): HTray.__init__(self) self._buttons = {} - self._shell = shell - self._home_model = shell.get_model().get_home() + self._home_model = shellmodel.get_instance().get_home() self._home_model.connect('activity-added', self.__activity_added_cb) self._home_model.connect('activity-removed', self.__activity_removed_cb) self._home_model.connect('pending-activity-changed', self.__activity_changed_cb) diff --git a/src/view/frame/devicestray.py b/src/view/frame/devicestray.py index 67da331..8a59709 100644 --- a/src/view/frame/devicestray.py +++ b/src/view/frame/devicestray.py @@ -26,13 +26,14 @@ from sugar.graphics.menuitem import MenuItem from view.frame.frameinvoker import FrameWidgetInvoker from view.devices import deviceview +from model import shellmodel class DevicesTray(HTray): - def __init__(self, shell): + def __init__(self): HTray.__init__(self) self._device_icons = {} - devices_model = shell.get_model().get_devices() + devices_model = shellmodel.get_instance().get_devices() for device in devices_model: self._add_device(device) diff --git a/src/view/frame/frame.py b/src/view/frame/frame.py index 5d06674..0cafeff 100644 --- a/src/view/frame/frame.py +++ b/src/view/frame/frame.py @@ -25,6 +25,7 @@ from sugar.graphics import style from sugar.graphics import palettegroup from sugar.clipboard import clipboardservice +import view.Shell from view.frame.eventarea import EventArea from view.frame.activitiestray import ActivitiesTray from view.frame.zoomtoolbar import ZoomToolbar @@ -88,7 +89,7 @@ class Frame(object): MODE_KEYBOARD = 1 MODE_NON_INTERACTIVE = 2 - def __init__(self, shell): + def __init__(self): self.mode = None self._palette_group = palettegroup.get_group('frame') @@ -99,7 +100,6 @@ class Frame(object): self._top_panel = None self._bottom_panel = None - self._shell = shell self.current_position = 0.0 self._animator = None @@ -142,7 +142,7 @@ class Frame(object): if self._animator: self._animator.stop() - self._shell.take_activity_screenshot() + view.Shell.get_instance().take_activity_screenshot() self.mode = mode @@ -168,12 +168,12 @@ class Frame(object): # TODO: setting box_width and hippo.PACK_EXPAND looks like a hack to me. # Why hippo isn't respecting the request size of these controls? - zoom_toolbar = ZoomToolbar(self._shell) + zoom_toolbar = ZoomToolbar() panel.append(hippo.CanvasWidget(widget=zoom_toolbar, box_width=4*style.GRID_CELL_SIZE)) zoom_toolbar.show() - activities_tray = ActivitiesTray(self._shell) + activities_tray = ActivitiesTray() panel.append(hippo.CanvasWidget(widget=activities_tray), hippo.PACK_EXPAND) activities_tray.show() @@ -184,7 +184,7 @@ class Frame(object): panel = self._create_panel(gtk.POS_BOTTOM) # TODO: same issue as in _create_top_panel() - devices_tray = DevicesTray(self._shell) + devices_tray = DevicesTray() panel.append(hippo.CanvasWidget(widget=devices_tray), hippo.PACK_EXPAND) devices_tray.show() @@ -193,7 +193,7 @@ class Frame(object): def _create_right_panel(self): panel = self._create_panel(gtk.POS_RIGHT) - tray = FriendsTray(self._shell) + tray = FriendsTray() panel.append(hippo.CanvasWidget(widget=tray), hippo.PACK_EXPAND) tray.show() @@ -280,3 +280,12 @@ class Frame(object): self._key_listener.key_press() visible = property(is_visible, None) + +_instance = None + +def get_instance(): + global _instance + if not _instance: + _instance = Frame() + return _instance + diff --git a/src/view/frame/friendstray.py b/src/view/frame/friendstray.py index 3e94fdb..d45bfb2 100644 --- a/src/view/frame/friendstray.py +++ b/src/view/frame/friendstray.py @@ -19,25 +19,26 @@ import hippo from sugar.presence import presenceservice from sugar.graphics.tray import VTray, TrayIcon +import view.Shell from view.BuddyMenu import BuddyMenu from view.frame.frameinvoker import FrameWidgetInvoker +from model import shellmodel from model.BuddyModel import BuddyModel class FriendIcon(TrayIcon): - def __init__(self, shell, buddy): + def __init__(self, buddy): TrayIcon.__init__(self, icon_name='computer-xo', xo_color=buddy.get_color()) - palette = BuddyMenu(shell, buddy) + palette = BuddyMenu(buddy) self.set_palette(palette) palette.set_group_id('frame') palette.props.invoker = FrameWidgetInvoker(self) class FriendsTray(VTray): - def __init__(self, shell): + def __init__(self): VTray.__init__(self) - self._shell = shell self._activity_ps = None self._joined_hid = -1 self._left_hid = -1 @@ -52,7 +53,7 @@ class FriendsTray(VTray): # Add initial activities the PS knows about self._pservice.get_activities_async(reply_handler=self._get_activities_cb) - home_model = shell.get_model().get_home() + home_model = shellmodel.get_instance().get_home() home_model.connect('pending-activity-changed', self._pending_activity_changed_cb) @@ -66,7 +67,7 @@ class FriendsTray(VTray): model = BuddyModel(buddy=buddy) - icon = FriendIcon(self._shell, model) + icon = FriendIcon(model) self.add_item(icon) icon.show() @@ -85,7 +86,7 @@ class FriendsTray(VTray): self._buddies = {} def __activity_appeared_cb(self, pservice, activity_ps): - activity = self._shell.get_current_activity() + activity = view.Shell.get_instance().get_current_activity() if activity and activity_ps.props.id == activity.get_id(): self._set_activity_ps(activity_ps, True) diff --git a/src/view/frame/zoomtoolbar.py b/src/view/frame/zoomtoolbar.py index e194354..946feac 100644 --- a/src/view/frame/zoomtoolbar.py +++ b/src/view/frame/zoomtoolbar.py @@ -22,25 +22,24 @@ import gtk from sugar.graphics.palette import Palette from sugar.graphics.radiotoolbutton import RadioToolButton +import view.Shell from view.frame.frameinvoker import FrameWidgetInvoker -from model.shellmodel import ShellModel +from model import shellmodel class ZoomToolbar(gtk.Toolbar): - def __init__(self, shell): + def __init__(self): gtk.Toolbar.__init__(self) - self._shell = shell - self._mesh_button = self._add_button('zoom-neighborhood', - _('Neighborhood'), ShellModel.ZOOM_MESH) + _('Neighborhood'), shellmodel.ShellModel.ZOOM_MESH) self._groups_button = self._add_button('zoom-groups', - _('Group'), ShellModel.ZOOM_FRIENDS) + _('Group'), shellmodel.ShellModel.ZOOM_FRIENDS) self._home_button = self._add_button('zoom-home', - _('Home'), ShellModel.ZOOM_HOME) + _('Home'), shellmodel.ShellModel.ZOOM_HOME) self._activity_button = self._add_button('zoom-activity', - _('Activity'), ShellModel.ZOOM_ACTIVITY) + _('Activity'), shellmodel.ShellModel.ZOOM_ACTIVITY) - shell_model = shell.get_model() + shell_model = shellmodel.get_instance() self._set_zoom_level(shell_model.props.zoom_level) shell_model.connect('notify::zoom-level', self.__notify_zoom_level_cb) @@ -65,21 +64,21 @@ class ZoomToolbar(gtk.Toolbar): def __level_clicked_cb(self, button, level): if not button.get_active(): return - if self._shell.get_model().props.zoom_level != level: - self._shell.set_zoom_level(level) + if shellmodel.get_instance().props.zoom_level != level: + view.Shell.get_instance().set_zoom_level(level) def __notify_zoom_level_cb(self, model, pspec): self._set_zoom_level(model.props.zoom_level) def _set_zoom_level(self, new_level): logging.debug('new zoom level: %r' % new_level) - if new_level == ShellModel.ZOOM_MESH: + if new_level == shellmodel.ShellModel.ZOOM_MESH: self._mesh_button.props.active = True - elif new_level == ShellModel.ZOOM_FRIENDS: + elif new_level == shellmodel.ShellModel.ZOOM_FRIENDS: self._groups_button.props.active = True - elif new_level == ShellModel.ZOOM_HOME: + elif new_level == shellmodel.ShellModel.ZOOM_HOME: self._home_button.props.active = True - elif new_level == ShellModel.ZOOM_ACTIVITY: + elif new_level == shellmodel.ShellModel.ZOOM_ACTIVITY: self._activity_button.props.active = True else: raise ValueError('Invalid zoom level: %r' % (new_level)) diff --git a/src/view/home/FriendView.py b/src/view/home/FriendView.py index 786589f..86b46c4 100644 --- a/src/view/home/FriendView.py +++ b/src/view/home/FriendView.py @@ -25,13 +25,13 @@ from sugar import activity from view.BuddyIcon import BuddyIcon class FriendView(hippo.CanvasBox): - def __init__(self, shell, buddy, **kwargs): + def __init__(self, buddy, **kwargs): hippo.CanvasBox.__init__(self, **kwargs) self._pservice = presenceservice.get_instance() self._buddy = buddy - self._buddy_icon = BuddyIcon(shell, buddy) + self._buddy_icon = BuddyIcon(buddy) self._buddy_icon.props.size = style.LARGE_ICON_SIZE self.append(self._buddy_icon) diff --git a/src/view/home/FriendsBox.py b/src/view/home/FriendsBox.py index 2ab5c04..a25415e 100644 --- a/src/view/home/FriendsBox.py +++ b/src/view/home/FriendsBox.py @@ -24,16 +24,16 @@ from sugar.graphics import style from sugar.graphics.icon import CanvasIcon from sugar.graphics.palette import Palette +from model import shellmodel from view.home.FriendView import FriendView from view.home.spreadlayout import SpreadLayout class FriendsBox(hippo.CanvasBox): __gtype_name__ = 'SugarFriendsBox' - def __init__(self, shell): + def __init__(self): hippo.CanvasBox.__init__(self, background_color=style.COLOR_WHITE.get_int()) - self._shell = shell self._friends = {} self._layout = SpreadLayout() @@ -46,7 +46,7 @@ class FriendsBox(hippo.CanvasBox): self._owner_icon.set_palette(palette) self._layout.add_center(self._owner_icon) - friends = self._shell.get_model().get_friends() + friends = shellmodel.get_instance().get_friends() for friend in friends: self.add_friend(friend) @@ -55,7 +55,7 @@ class FriendsBox(hippo.CanvasBox): friends.connect('friend-removed', self._friend_removed_cb) def add_friend(self, buddy_info): - icon = FriendView(self._shell, buddy_info) + icon = FriendView(buddy_info) self._layout.add(icon) self._friends[buddy_info.get_key()] = icon diff --git a/src/view/home/HomeBox.py b/src/view/home/HomeBox.py index 76fc9b1..39c24a4 100644 --- a/src/view/home/HomeBox.py +++ b/src/view/home/HomeBox.py @@ -33,10 +33,9 @@ _LIST_VIEW = 1 class HomeBox(hippo.CanvasBox, hippo.CanvasItem): __gtype_name__ = 'SugarHomeBox' - def __init__(self, shell): + def __init__(self): hippo.CanvasBox.__init__(self) - self._shell = shell self._ring_view = None self._list_view = None self._enable_xo_palette = False @@ -57,7 +56,7 @@ class HomeBox(hippo.CanvasBox, hippo.CanvasItem): self.remove(self._list_view) if self._ring_view is None: - self._ring_view = ActivitiesRing(self._shell) + self._ring_view = ActivitiesRing() if self._enable_xo_palette: self._ring_view.enable_xo_palette() @@ -68,7 +67,7 @@ class HomeBox(hippo.CanvasBox, hippo.CanvasItem): self.remove(self._ring_view) if self._list_view is None: - self._list_view = ActivitiesList(self._shell) + self._list_view = ActivitiesList() self.append(self._list_view, hippo.PACK_EXPAND) else: diff --git a/src/view/home/HomeWindow.py b/src/view/home/HomeWindow.py index 127b08b..607272e 100644 --- a/src/view/home/HomeWindow.py +++ b/src/view/home/HomeWindow.py @@ -33,12 +33,11 @@ _MESH_PAGE = 2 _TRANSITION_PAGE = 3 class HomeWindow(gtk.Window): - def __init__(self, shell): + def __init__(self): gtk.Window.__init__(self) self.add_accel_group(gtk.AccelGroup()) - self._shell = shell self._active = False self._level = ShellModel.ZOOM_HOME @@ -60,9 +59,9 @@ class HomeWindow(gtk.Window): self._motion_sid = self.connect('motion-notify-event', self._motion_notify_event_cb) - self._home_box = HomeBox(shell) - self._friends_box = FriendsBox(shell) - self._mesh_box = MeshBox(shell) + self._home_box = HomeBox() + self._friends_box = FriendsBox() + self._mesh_box = MeshBox() self._transition_box = TransitionBox() self._activate_view() diff --git a/src/view/home/MeshBox.py b/src/view/home/MeshBox.py index 40e39c6..cd0eee9 100644 --- a/src/view/home/MeshBox.py +++ b/src/view/home/MeshBox.py @@ -35,12 +35,14 @@ from sugar import profile from model import accesspointmodel from model.devices.network import mesh from model.devices.network import wireless +from model import shellmodel from hardware import hardwaremanager from hardware import nmclient from view.BuddyIcon import BuddyIcon from view.pulsingicon import CanvasPulsingIcon from view.home.snowflakelayout import SnowflakeLayout from view.home.spreadlayout import SpreadLayout +import view.Shell from hardware.nmclient import NM_802_11_CAP_PROTO_WEP, NM_802_11_CAP_PROTO_WPA, NM_802_11_CAP_PROTO_WPA2 @@ -230,10 +232,9 @@ class MeshDeviceView(CanvasPulsingIcon): self._update_state() class ActivityView(hippo.CanvasBox): - def __init__(self, shell, model): + def __init__(self, model): hippo.CanvasBox.__init__(self) - self._shell = shell self._model = model self._icons = {} @@ -296,7 +297,7 @@ class ActivityView(hippo.CanvasBox): def _clicked_cb(self, item): bundle_id = self._model.get_bundle_id() - self._shell.join_activity(bundle_id, self._model.get_id()) + view.Shell.get_instance().join_activity(bundle_id, self._model.get_id()) def set_filter(self, query): text_to_check = self._model.activity.props.name.lower() + \ @@ -395,11 +396,10 @@ class MeshToolbar(gtk.Toolbar): return False class MeshBox(hippo.CanvasBox): - def __init__(self, shell): + def __init__(self): hippo.CanvasBox.__init__(self) - self._shell = shell - self._model = shell.get_model().get_mesh() + self._model = shellmodel.get_instance().get_mesh() self._buddies = {} self._activities = {} self._access_points = {} @@ -496,7 +496,7 @@ class MeshBox(hippo.CanvasBox): del self._mesh[channel] def _add_alone_buddy(self, buddy_model): - icon = BuddyIcon(self._shell, buddy_model) + icon = BuddyIcon(buddy_model) if buddy_model.is_owner(): vertical_offset = - style.GRID_CELL_SIZE self._layout.add_center(icon, vertical_offset) @@ -533,15 +533,14 @@ class MeshBox(hippo.CanvasBox): elif activity_model.get_id() in self._activities: activity = self._activities[activity_model.get_id()] - icon = BuddyIcon(self._shell, buddy_model, - style.STANDARD_ICON_SIZE) + icon = BuddyIcon(buddy_model, style.STANDARD_ICON_SIZE) activity.add_buddy_icon(buddy_model.get_key(), icon) if hasattr(icon, 'set_filter'): icon.set_filter(self._query) def _add_activity(self, activity_model): - icon = ActivityView(self._shell, activity_model) + icon = ActivityView(activity_model) self._layout.add(icon) if hasattr(icon, 'set_filter'): diff --git a/src/view/home/activitieslist.py b/src/view/home/activitieslist.py index 2fa404d..afca51d 100644 --- a/src/view/home/activitieslist.py +++ b/src/view/home/activitieslist.py @@ -24,14 +24,15 @@ from sugar import activity from sugar.graphics import style from sugar.graphics.icon import CanvasIcon +import view.Shell + class ActivitiesList(hippo.CanvasScrollbars): __gtype_name__ = 'SugarActivitiesList' - def __init__(self, shell): + def __init__(self): hippo.CanvasScrollbars.__init__(self) self.set_policy(hippo.ORIENTATION_HORIZONTAL, hippo.SCROLLBAR_NEVER) - self._shell = shell self._box = hippo.CanvasBox(background_color=style.COLOR_WHITE.get_int()) self.set_root(self._box) @@ -55,7 +56,7 @@ class ActivitiesList(hippo.CanvasScrollbars): return def _add_activity(self, activity_info): - self._box.append(ActivityEntry(self._shell, activity_info)) + self._box.append(ActivityEntry(activity_info)) class ActivityEntry(hippo.CanvasBox, hippo.CanvasItem): __gtype_name__ = 'SugarActivityEntry' @@ -64,7 +65,7 @@ class ActivityEntry(hippo.CanvasBox, hippo.CanvasItem): _VERSION_COL_WIDTH = style.GRID_CELL_SIZE * 1 _DATE_COL_WIDTH = style.GRID_CELL_SIZE * 5 - def __init__(self, shell, activity_info): + def __init__(self, activity_info): hippo.CanvasBox.__init__(self, spacing=style.DEFAULT_SPACING, padding_top=style.DEFAULT_PADDING, padding_bottom=style.DEFAULT_PADDING, @@ -73,7 +74,6 @@ class ActivityEntry(hippo.CanvasBox, hippo.CanvasItem): box_height=style.GRID_CELL_SIZE, orientation=hippo.ORIENTATION_HORIZONTAL) - self._shell = shell self._activity_info = activity_info favorite_icon = FavoriteIcon(self._activity_info.favorite) @@ -125,7 +125,7 @@ class ActivityEntry(hippo.CanvasBox, hippo.CanvasItem): self.icon.props.fill_color = style.COLOR_TRANSPARENT.get_svg() def __icon_button_release_event_cb(self, icon, event): - self._shell.start_activity(self._activity_info.bundle_id) + view.Shell.get_instance().start_activity(self._activity_info.bundle_id) def get_bundle_id(self): return self._activity_info.bundle_id diff --git a/src/view/home/activitiesring.py b/src/view/home/activitiesring.py index 4566823..9d84e30 100644 --- a/src/view/home/activitiesring.py +++ b/src/view/home/activitiesring.py @@ -37,8 +37,10 @@ from sugar.profile import get_profile from sugar import env from sugar import activity +import view.Shell from view.palettes import JournalPalette, CurrentActivityPalette from view.home.MyIcon import MyIcon +from model import shellmodel from model.shellmodel import ShellModel from hardware import schoolserver @@ -47,16 +49,16 @@ _logger = logging.getLogger('ActivitiesRing') class ActivitiesRing(hippo.CanvasBox, hippo.CanvasItem): __gtype_name__ = 'SugarActivitiesRing' - def __init__(self, shell): + def __init__(self): hippo.CanvasBox.__init__(self, background_color=style.COLOR_WHITE.get_int()) - self._shell = shell - shell.get_model().connect('notify::state', self._shell_state_changed_cb) + shell_model = shellmodel.get_instance() + shell_model.connect('notify::state', self._shell_state_changed_cb) - self._my_icon = _MyIcon(shell, style.XLARGE_ICON_SIZE) + self._my_icon = _MyIcon(style.XLARGE_ICON_SIZE) self.append(self._my_icon, hippo.PACK_FIXED) - self._current_activity = CurrentActivityIcon(shell) + self._current_activity = CurrentActivityIcon() self.append(self._current_activity, hippo.PACK_FIXED) self.set_layout(RingLayout()) @@ -70,12 +72,12 @@ class ActivitiesRing(hippo.CanvasBox, hippo.CanvasItem): def _get_activities_cb(self, activity_list): for info in activity_list: if info.favorite and info.bundle_id != "org.laptop.JournalActivity": - self.append(ActivityIcon(self._shell, info)) + self.append(ActivityIcon(info)) def __activity_added_cb(self, activity_registry, activity_info): if activity_info.favorite and \ activity_info.bundle_id != "org.laptop.JournalActivity": - self.append(ActivityIcon(self._shell, activity_info)) + self.append(ActivityIcon(activity_info)) def _find_activity_icon(self, bundle_id, version): for icon in self.get_children(): @@ -98,7 +100,7 @@ class ActivitiesRing(hippo.CanvasBox, hippo.CanvasItem): if icon is not None and not activity_info.favorite: self.remove(icon) elif icon is None and activity_info.favorite: - self.append(ActivityIcon(self._shell, activity_info)) + self.append(ActivityIcon(activity_info)) def _shell_state_changed_cb(self, model, pspec): # FIXME implement this @@ -122,11 +124,10 @@ class ActivitiesRing(hippo.CanvasBox, hippo.CanvasItem): self._my_icon.enable_palette() class ActivityIcon(CanvasIcon): - def __init__(self, shell, activity_info): + def __init__(self, activity_info): CanvasIcon.__init__(self, cache=True, file_name=activity_info.icon) - self._shell = shell self._activity_info = activity_info - self.set_palette(ActivityPalette(shell, activity_info)) + self.set_palette(ActivityPalette(activity_info)) self.connect('hovering-changed', self.__hovering_changed_event_cb) self.connect('button-release-event', self.__button_release_event_cb) @@ -141,7 +142,7 @@ class ActivityIcon(CanvasIcon): self.props.fill_color = style.COLOR_TRANSPARENT.get_svg() def __button_release_event_cb(self, icon, event): - self._shell.start_activity(self._activity_info.bundle_id) + view.Shell.get_instance().start_activity(self._activity_info.bundle_id) def get_bundle_id(self): return self._activity_info.bundle_id @@ -152,7 +153,7 @@ class ActivityIcon(CanvasIcon): version = property(get_version, None) class ActivityPalette(Palette): - def __init__(self, shell, activity_info): + def __init__(self, activity_info): activity_icon = Icon(file=activity_info.icon, xo_color=get_profile().color, icon_size=gtk.ICON_SIZE_LARGE_TOOLBAR) @@ -160,7 +161,6 @@ class ActivityPalette(Palette): Palette.__init__(self, None, None, primary_text=activity_info.name, icon=activity_icon) - self._shell = shell self._activity_info = activity_info menu_item = MenuItem(_('Start'), 'activity-start') @@ -168,19 +168,21 @@ class ActivityPalette(Palette): self.menu.append(menu_item) menu_item.show() + """ menu_item = MenuItem(_('Start with'), 'activity-start') menu_item.props.sensitive = False #menu_item.connect('activate', self.__start_with_activate_cb) self.menu.append(menu_item) menu_item.show() + """ def __start_activate_cb(self, menu_item): - self._shell.start_activity(self._activity_info.bundle_id) + view.Shell.get_instance().start_activity(self._activity_info.bundle_id) class CurrentActivityIcon(CanvasIcon, hippo.CanvasItem): - def __init__(self, shell): + def __init__(self): CanvasIcon.__init__(self, cache=True) - self._home_model = shell.get_model().get_home() + self._home_model = shellmodel.get_instance().get_home() if self._home_model.get_pending_activity() is not None: self._update(self._home_model.get_pending_activity()) @@ -297,11 +299,10 @@ class RingLayout(gobject.GObject, hippo.CanvasLayout): origin_changed) class _MyIcon(MyIcon): - def __init__(self, shell, scale): + def __init__(self, scale): MyIcon.__init__(self, scale) self._power_manager = None - self._shell = shell self._profile = get_profile() def enable_palette(self): @@ -342,7 +343,7 @@ class _MyIcon(MyIcon): self.set_palette(palette) def _reboot_activate_cb(self, menuitem): - model = self._shell.get_model() + model = shellmodel.get_instance() model.props.state = ShellModel.STATE_SHUTDOWN pm = self._get_power_manager() @@ -356,7 +357,7 @@ class _MyIcon(MyIcon): pm.Reboot() def _shutdown_activate_cb(self, menuitem): - model = self._shell.get_model() + model = shellmodel.get_instance() model.props.state = ShellModel.STATE_SHUTDOWN pm = self._get_power_manager() diff --git a/src/view/keyhandler.py b/src/view/keyhandler.py index b07f46c..82b6b1c 100644 --- a/src/view/keyhandler.py +++ b/src/view/keyhandler.py @@ -22,9 +22,11 @@ import subprocess import dbus import gtk +from sugar._sugarext import KeyGrabber + from hardware import hardwaremanager +import view.Shell from model.shellmodel import ShellModel -from sugar._sugarext import KeyGrabber _BRIGHTNESS_STEP = 2 _VOLUME_STEP = 10 @@ -72,8 +74,7 @@ SPEECH_DBUS_PATH = '/org/laptop/Speech' SPEECH_DBUS_INTERFACE = 'org.laptop.Speech' class KeyHandler(object): - def __init__(self, shell): - self._shell = shell + def __init__(self): self._screen_rotation = 0 self._key_pressed = None self._keycode_pressed = 0 @@ -137,25 +138,25 @@ class KeyHandler(object): clipboard.request_text(self._primary_selection_cb) def handle_previous_window(self): - self._shell.activate_previous_activity() + view.Shell.get_instance().activate_previous_activity() def handle_next_window(self): - self._shell.activate_next_activity() + view.Shell.get_instance().activate_next_activity() def handle_close_window(self): - self._shell.close_current_activity() + view.Shell.get_instance().close_current_activity() def handle_zoom_mesh(self): - self._shell.set_zoom_level(ShellModel.ZOOM_MESH) + view.Shell.get_instance().set_zoom_level(ShellModel.ZOOM_MESH) def handle_zoom_friends(self): - self._shell.set_zoom_level(ShellModel.ZOOM_FRIENDS) + view.Shell.get_instance().set_zoom_level(ShellModel.ZOOM_FRIENDS) def handle_zoom_home(self): - self._shell.set_zoom_level(ShellModel.ZOOM_HOME) + view.Shell.get_instance().set_zoom_level(ShellModel.ZOOM_HOME) def handle_zoom_activity(self): - self._shell.set_zoom_level(ShellModel.ZOOM_ACTIVITY) + view.Shell.get_instance().set_zoom_level(ShellModel.ZOOM_ACTIVITY) def handle_brightness_max(self): self._change_brightness(value=_BRIGHTNESS_MAX) @@ -182,13 +183,13 @@ class KeyHandler(object): self._change_volume(step=-_VOLUME_STEP) def handle_screenshot(self): - self._shell.take_screenshot() + view.Shell.get_instance().take_screenshot() def handle_frame(self): - self._shell.get_frame().notify_key_press() + view.Shell.get_instance().get_frame().notify_key_press() def handle_overlay(self): - self._shell.toggle_chat_visibility() + view.Shell.get_instance().toggle_chat_visibility() def handle_rotate(self): states = [ 'normal', 'left', 'inverted', 'right'] |