diff options
-rw-r--r-- | src/jarabe/desktop/favoriteslayout.py | 22 | ||||
-rw-r--r-- | src/jarabe/desktop/friendview.py | 12 | ||||
-rw-r--r-- | src/jarabe/desktop/grid.py | 3 | ||||
-rw-r--r-- | src/jarabe/desktop/groupbox.py | 83 | ||||
-rw-r--r-- | src/jarabe/desktop/homebox.py | 2 | ||||
-rw-r--r-- | src/jarabe/desktop/homewindow.py | 10 | ||||
-rw-r--r-- | src/jarabe/desktop/meshbox.py | 132 | ||||
-rw-r--r-- | src/jarabe/desktop/transitionbox.py | 44 | ||||
-rw-r--r-- | src/jarabe/frame/clipboardpanelwindow.py | 4 | ||||
-rw-r--r-- | src/jarabe/frame/frame.py | 15 | ||||
-rw-r--r-- | src/jarabe/frame/framewindow.py | 55 | ||||
-rw-r--r-- | src/jarabe/intro/colorpicker.py | 9 | ||||
-rw-r--r-- | src/jarabe/intro/window.py | 97 |
13 files changed, 275 insertions, 213 deletions
diff --git a/src/jarabe/desktop/favoriteslayout.py b/src/jarabe/desktop/favoriteslayout.py index 3dfa472..db0ff8a 100644 --- a/src/jarabe/desktop/favoriteslayout.py +++ b/src/jarabe/desktop/favoriteslayout.py @@ -19,10 +19,10 @@ import logging import math import hashlib from gettext import gettext as _ +import random import gobject import gtk -import hippo from sugar.graphics import style @@ -175,6 +175,26 @@ class RandomLayout(FavoritesLayout): self._grid.move(icon, x / _CELL_SIZE, y / _CELL_SIZE, locked) FavoritesLayout.move_icon(self, icon, x, y, locked) + def allocate_icons(self, children, width, height): + icon_size = style.STANDARD_ICON_SIZE + + allocations = [] + for n in range(len(children)): + child = children[n] + x, y = self._calculate_position(icon_size, n, len(children), + width, height) + + allocation = gtk.gdk.Rectangle(int(x), int(y), icon_size, icon_size) + allocations.append(allocation) + + return allocations + + def _calculate_position(self, icon_size, child_n, child_total, + width, height): + x = random.randint(0, width) + y = random.randint(0, height) + return x,y + def do_allocate(self, x, y, width, height, req_width, req_height, origin_changed): for child in self.box.get_layout_children(): diff --git a/src/jarabe/desktop/friendview.py b/src/jarabe/desktop/friendview.py index 8dab35f..a084f38 100644 --- a/src/jarabe/desktop/friendview.py +++ b/src/jarabe/desktop/friendview.py @@ -15,7 +15,7 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -import hippo +import gtk from sugar.graphics.icon import CanvasIcon from sugar.graphics import style @@ -23,15 +23,17 @@ from sugar.graphics import style from jarabe.view.buddyicon import BuddyIcon from jarabe.model import bundleregistry +# TODO(rgs): use a gtk.Container so we can correctly +# position the activity related to the user. -class FriendView(hippo.CanvasBox): +class FriendView(gtk.VBox): def __init__(self, buddy, **kwargs): - hippo.CanvasBox.__init__(self, **kwargs) + gtk.VBox.__init__(self) self._buddy = buddy self._buddy_icon = BuddyIcon(buddy) self._buddy_icon.props.size = style.LARGE_ICON_SIZE - self.append(self._buddy_icon) + self.add(self._buddy_icon) self._activity_icon = CanvasIcon(size=style.LARGE_ICON_SIZE) self._activity_icon_visible = False @@ -71,7 +73,7 @@ class FriendView(hippo.CanvasBox): self._activity_icon.props.file_name = name self._activity_icon.props.xo_color = self._buddy.props.color if not self._activity_icon_visible: - self.append(self._activity_icon, hippo.PACK_EXPAND) + self.add(self._activity_icon) self._activity_icon_visible = True else: self._remove_activity_icon() diff --git a/src/jarabe/desktop/grid.py b/src/jarabe/desktop/grid.py index eab4033..ed35365 100644 --- a/src/jarabe/desktop/grid.py +++ b/src/jarabe/desktop/grid.py @@ -202,3 +202,6 @@ class Grid(_sugarext.Grid): def get_child_rect(self, child): return self._child_rects[child] + + def get_children(self): + return self._children diff --git a/src/jarabe/desktop/groupbox.py b/src/jarabe/desktop/groupbox.py index ed8f8ae..d74ec9d 100644 --- a/src/jarabe/desktop/groupbox.py +++ b/src/jarabe/desktop/groupbox.py @@ -17,8 +17,8 @@ import logging import gobject -import hippo import gconf +import gtk from sugar.graphics import style from sugar.graphics.icon import CanvasIcon @@ -28,25 +28,29 @@ from jarabe.view.buddymenu import BuddyMenu from jarabe.model.buddy import get_owner_instance from jarabe.model import friends from jarabe.desktop.friendview import FriendView -from jarabe.desktop.spreadlayout import SpreadLayout +from jarabe.desktop.grid import Grid +_CELL_SIZE = 4.0 -class GroupBox(hippo.Canvas): + +class GroupBox(gtk.Container): __gtype_name__ = 'SugarGroupBox' def __init__(self): logging.debug('STARTUP: Loading the group view') - gobject.GObject.__init__(self) + gtk.Container.__init__(self) - self._box = hippo.CanvasBox() - self._box.props.background_color = style.COLOR_WHITE.get_int() - self.set_root(self._box) + # TODO(rgs): how do you do this for a Container? + # self._box.props.background_color = style.COLOR_WHITE.get_int() self._friends = {} - self._layout = SpreadLayout() - self._box.set_layout(self._layout) + min_width, width = self.do_get_width_request() + min_height, height = self.do_get_height_request(width) + + self._grid = Grid(int(width / _CELL_SIZE), int(height / _CELL_SIZE)) + self._grid.connect('child-changed', self._grid_child_changed_cb) client = gconf.client_get_default() color = XoColor(client.get_string('/desktop/sugar/user/color')) @@ -56,7 +60,9 @@ class GroupBox(hippo.Canvas): self._owner_icon.props.size = style.LARGE_ICON_SIZE self._owner_icon.set_palette(BuddyMenu(get_owner_instance())) - self._layout.add(self._owner_icon) + width, height = self._get_child_grid_size(self._owner_icon) + self._grid.add(self._owner_icon, width, height) + self._owner_icon.set_parent(self) friends_model = friends.get_model() @@ -66,22 +72,58 @@ class GroupBox(hippo.Canvas): friends_model.connect('friend-added', self._friend_added_cb) friends_model.connect('friend-removed', self._friend_removed_cb) + def do_get_height_request(self, for_width): + return 0, gtk.gdk.screen_height() - style.GRID_CELL_SIZE + + def do_get_width_request(self): + return 0, gtk.gdk.screen_width() + def add_friend(self, buddy_info): icon = FriendView(buddy_info) - self._layout.add(icon) - + width, height = self._get_child_grid_size(icon) + self._grid.add(icon, width, height) self._friends[buddy_info.get_key()] = icon + if icon.flags() & gtk.REALIZED: + icon.set_parent_window(self.window) + icon.set_parent(self) def _friend_added_cb(self, data_model, buddy_info): self.add_friend(buddy_info) def _friend_removed_cb(self, data_model, key): icon = self._friends[key] - self._layout.remove(icon) + self._grid.remove(icon) del self._friends[key] icon.destroy() + def do_forall(self, include_internals, callback, data): + for widget in self._grid.get_children(): + callback(widget, data) + + def do_realize(self): + self.set_flags(self.flags() | gtk.REALIZED) + self.window = gtk.gdk.Window( + self.get_parent_window(), + width=self.allocation.width, + height=self.allocation.height, + window_type=gtk.gdk.WINDOW_CHILD, + wclass=gtk.gdk.INPUT_OUTPUT, + event_mask=self.get_events() | gtk.gdk.EXPOSURE_MASK + | gtk.gdk.BUTTON1_MOTION_MASK + | gtk.gdk.BUTTON_PRESS_MASK + | gtk.gdk.POINTER_MOTION_MASK + | gtk.gdk.POINTER_MOTION_HINT_MASK) + self.window.set_user_data(self) + self.style.attach(self.window) + self.style.set_background(self.window, gtk.STATE_NORMAL) + self.window.move_resize(*self.allocation) + self.gc = self.style.fg_gc[gtk.STATE_NORMAL] + self.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('white')) + def do_size_allocate(self, allocation): + if self.flags() & gtk.REALIZED: + self.window.move_resize(*allocation) + width = allocation.width height = allocation.height @@ -89,6 +131,17 @@ class GroupBox(hippo.Canvas): min_h_, icon_height = self._owner_icon.get_height_request(icon_width) x = (width - icon_width) / 2 y = (height - icon_height) / 2 - self._layout.move(self._owner_icon, x, y) + self._grid.move(self._owner_icon, x / _CELL_SIZE, y / _CELL_SIZE, locked=True) + + for child in self._grid.get_children(): + rect = self._grid.get_child_rect(child) + child.size_allocate(rect) + + def _get_child_grid_size(self, child): + min_width, width = child.get_width_request() + min_height, height = child.get_height_request(width) + + return int(width / _CELL_SIZE), int(height / _CELL_SIZE) - hippo.Canvas.do_size_allocate(self, allocation) + def _grid_child_changed_cb(self, grid, child): + child.emit_request_changed() diff --git a/src/jarabe/desktop/homebox.py b/src/jarabe/desktop/homebox.py index 661326e..2c76099 100644 --- a/src/jarabe/desktop/homebox.py +++ b/src/jarabe/desktop/homebox.py @@ -43,7 +43,7 @@ class HomeBox(gtk.VBox): def __init__(self): logging.debug('STARTUP: Loading the home view') - gobject.GObject.__init__(self) + gtk.VBox.__init__(self) self._favorites_view = favoritesview.FavoritesView() self._list_view = ActivitiesList() diff --git a/src/jarabe/desktop/homewindow.py b/src/jarabe/desktop/homewindow.py index cc81152..07deff7 100644 --- a/src/jarabe/desktop/homewindow.py +++ b/src/jarabe/desktop/homewindow.py @@ -66,15 +66,15 @@ class HomeWindow(gtk.Window): self.connect('key-release-event', self.__key_release_event_cb) self._home_box = HomeBox() - # self._group_box = GroupBox() - # self._mesh_box = MeshBox() - # self._transition_box = TransitionBox() + self._group_box = GroupBox() + self._mesh_box = MeshBox() + self._transition_box = TransitionBox() self.add(self._home_box) self._home_box.show() - # self._transition_box.connect('completed', - # self._transition_completed_cb) + self._transition_box.connect('completed', + self._transition_completed_cb) shell.get_model().zoom_level_changed.connect( self.__zoom_level_changed_cb) diff --git a/src/jarabe/desktop/meshbox.py b/src/jarabe/desktop/meshbox.py index 3d1e52a..6323cc4 100644 --- a/src/jarabe/desktop/meshbox.py +++ b/src/jarabe/desktop/meshbox.py @@ -21,7 +21,6 @@ from gettext import gettext as _ import logging import dbus -import hippo import glib import gobject import gtk @@ -36,8 +35,7 @@ from sugar.graphics.menuitem import MenuItem from jarabe.model import neighborhood from jarabe.model.buddy import get_owner_instance from jarabe.view.buddyicon import BuddyIcon -from jarabe.desktop.snowflakelayout import SnowflakeLayout -from jarabe.desktop.spreadlayout import SpreadLayout +from jarabe.desktop.grid import Grid from jarabe.desktop.networkviews import WirelessNetworkView from jarabe.desktop.networkviews import OlpcMeshView from jarabe.desktop.networkviews import SugarAdhocView @@ -62,10 +60,11 @@ _OLPC_MESH_ICON_NAME = 'network-mesh' _AUTOSEARCH_TIMEOUT = 1000 - -class ActivityView(hippo.CanvasBox): +# TODO(rgs): use a gtk.Container and emulate the Snowflake +# layouting algorithm of activities around a buddy. +class ActivityView(gtk.VBox): def __init__(self, model): - hippo.CanvasBox.__init__(self) + gtk.VBox.__init__(self) self._model = model self._model.connect('current-buddy-added', self.__buddy_added_cb) @@ -74,11 +73,8 @@ class ActivityView(hippo.CanvasBox): self._icons = {} self._palette = None - self._layout = SnowflakeLayout() - self.set_layout(self._layout) - self._icon = self._create_icon() - self._layout.add(self._icon, center=True) + self.add(self._icon) self._palette = self._create_palette() self._icon.set_palette(self._palette) @@ -127,7 +123,6 @@ class ActivityView(hippo.CanvasBox): def _add_buddy(self, buddy): icon = BuddyIcon(buddy, style.STANDARD_ICON_SIZE) self._icons[buddy.props.key] = icon - self._layout.add(icon) def __buddy_removed_cb(self, activity, buddy): icon = self._icons[buddy.props.key] @@ -396,6 +391,82 @@ class NetworkManagerObserver(object): if self._have_adhoc_networks: self._box.add_adhoc_networks(device) +_CELL_SIZE = 4.0 + +class MeshContainer(gtk.Container): + __gtype_name__ = 'SugarMeshContainer' + + def __init__(self): + gtk.Container.__init__(self) + + min_width, width = self.do_get_width_request() + min_height, height = self.do_get_height_request(width) + self._grid = Grid(int(width / _CELL_SIZE), int(height / _CELL_SIZE)) + self._grid.connect('child-changed', self._grid_child_changed_cb) + + def do_get_height_request(self, for_width): + return 0, gtk.gdk.screen_height() - style.GRID_CELL_SIZE + + def do_get_width_request(self): + return 0, gtk.gdk.screen_width() + + def move(self, child, x, y): + self._grid.move(child, x / _CELL_SIZE, y / _CELL_SIZE, locked=True) + + def add(self, icon): + width, height = self._get_child_grid_size(icon) + self._grid.add(icon, width, height) + if icon.flags() & gtk.REALIZED: + icon.set_parent_window(self.window) + icon.set_parent(self) + + def remove(self, icon): + self._grid.remove(icon) + icon.destroy() + + def do_forall(self, include_internals, callback, data): + for widget in self._grid.get_children(): + callback(widget, data) + + def do_realize(self): + self.set_flags(self.flags() | gtk.REALIZED) + self.window = gtk.gdk.Window( + self.get_parent_window(), + width=self.allocation.width, + height=self.allocation.height, + window_type=gtk.gdk.WINDOW_CHILD, + wclass=gtk.gdk.INPUT_OUTPUT, + event_mask=self.get_events() | gtk.gdk.EXPOSURE_MASK + | gtk.gdk.BUTTON1_MOTION_MASK + | gtk.gdk.BUTTON_PRESS_MASK + | gtk.gdk.POINTER_MOTION_MASK + | gtk.gdk.POINTER_MOTION_HINT_MASK) + self.window.set_user_data(self) + self.style.attach(self.window) + self.style.set_background(self.window, gtk.STATE_NORMAL) + self.window.move_resize(*self.allocation) + self.gc = self.style.fg_gc[gtk.STATE_NORMAL] + self.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('white')) + + def do_size_allocate(self, allocation): + if self.flags() & gtk.REALIZED: + self.window.move_resize(*allocation) + + width = allocation.width + height = allocation.height + + for child in self._grid.get_children(): + rect = self._grid.get_child_rect(child) + child.size_allocate(rect) + + def _get_child_grid_size(self, child): + min_width, width = child.get_width_request() + min_height, height = child.get_height_request(width) + + return int(width / _CELL_SIZE), int(height / _CELL_SIZE) + + def _grid_child_changed_cb(self, grid, child): + child.emit_request_changed() class MeshBox(gtk.VBox): __gtype_name__ = 'SugarMeshBox' @@ -403,7 +474,7 @@ class MeshBox(gtk.VBox): def __init__(self): logging.debug('STARTUP: Loading the mesh view') - gobject.GObject.__init__(self) + gtk.VBox.__init__(self) self.wireless_networks = {} self._adhoc_manager = None @@ -423,16 +494,9 @@ class MeshBox(gtk.VBox): self.pack_start(self._toolbar, expand=False) self._toolbar.show() - canvas = hippo.Canvas() - self.add(canvas) - canvas.show() - - self._layout_box = hippo.CanvasBox( \ - background_color=style.COLOR_WHITE.get_int()) - canvas.set_root(self._layout_box) - - self._layout = SpreadLayout() - self._layout_box.set_layout(self._layout) + self._mesh_container = MeshContainer() + self.add(self._mesh_container) + self._mesh_container.show() for buddy_model in self._model.get_buddies(): self._add_buddy(buddy_model) @@ -457,9 +521,10 @@ class MeshBox(gtk.VBox): min_h_, icon_height = self._owner_icon.get_height_request(icon_width) x = (width - icon_width) / 2 y = (height - icon_height) / 2 - style.GRID_CELL_SIZE - self._layout.move(self._owner_icon, x, y) + self._mesh_container.move(self._owner_icon, x, y) gtk.VBox.do_size_allocate(self, allocation) + self._mesh_container.do_size_allocate(allocation) def _buddy_added_cb(self, model, buddy_model): self._add_buddy(buddy_model) @@ -481,7 +546,7 @@ class MeshBox(gtk.VBox): icon = BuddyIcon(buddy_model) if buddy_model.is_owner(): self._owner_icon = icon - self._layout.add(icon) + self._mesh_container.add(icon) if hasattr(icon, 'set_filter'): icon.set_filter(self._query) @@ -491,9 +556,8 @@ class MeshBox(gtk.VBox): def _remove_buddy(self, buddy_model): logging.debug('MeshBox._remove_buddy') icon = self._buddies[buddy_model.props.key] - self._layout.remove(icon) + self._mesh_container.remove(icon) del self._buddies[buddy_model.props.key] - icon.destroy() def __buddy_notify_current_activity_cb(self, buddy_model, pspec): logging.debug('MeshBox.__buddy_notify_current_activity_cb %s', @@ -506,7 +570,7 @@ class MeshBox(gtk.VBox): def _add_activity(self, activity_model): icon = ActivityView(activity_model) - self._layout.add(icon) + self._mesh_container.add(icon) if hasattr(icon, 'set_filter'): icon.set_filter(self._query) @@ -515,9 +579,8 @@ class MeshBox(gtk.VBox): def _remove_activity(self, activity_model): icon = self._activities[activity_model.activity_id] - self._layout.remove(icon) + self._mesh_container.remove(icon) del self._activities[activity_model.activity_id] - icon.destroy() # add AP to its corresponding network icon on the desktop, # creating one if it doesn't already exist @@ -529,7 +592,7 @@ class MeshBox(gtk.VBox): # this is a new network icon = WirelessNetworkView(ap) self.wireless_networks[hash_value] = icon - self._layout.add(icon) + self._mesh_container.add(icon) if hasattr(icon, 'set_filter'): icon.set_filter(self._query) @@ -621,12 +684,12 @@ class MeshBox(gtk.VBox): def _add_adhoc_network_icon(self, channel): icon = SugarAdhocView(channel) - self._layout.add(icon) + self._mesh_container.add(icon) self._adhoc_networks.append(icon) def _add_olpc_mesh_icon(self, mesh_mgr, channel): icon = OlpcMeshView(mesh_mgr, channel) - self._layout.add(icon) + self._mesh_container.add(icon) self._mesh.append(icon) def enable_olpc_mesh(self, mesh_device): @@ -644,13 +707,12 @@ class MeshBox(gtk.VBox): logging.debug('removing OLPC mesh IBSS') net.remove_all_aps() net.disconnect() - self._layout.remove(net) - del self.wireless_networks[hash_value] + self._mesh_container.remove(net) def disable_olpc_mesh(self, mesh_device): for icon in self._mesh: icon.disconnect() - self._layout.remove(icon) + self._mesh_container.remove(icon) self._mesh = [] def suspend(self): diff --git a/src/jarabe/desktop/transitionbox.py b/src/jarabe/desktop/transitionbox.py index fd2112c..f490381 100644 --- a/src/jarabe/desktop/transitionbox.py +++ b/src/jarabe/desktop/transitionbox.py @@ -14,8 +14,8 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -import hippo import gobject +import gtk from sugar.graphics import style from sugar.graphics import animator @@ -36,35 +36,7 @@ class _Animation(animator.Animation): d = (self.end_size - self.start_size) * current self._icon.props.size = int(self.start_size + d) - -class _Layout(gobject.GObject, hippo.CanvasLayout): - __gtype_name__ = 'SugarTransitionBoxLayout' - - def __init__(self): - gobject.GObject.__init__(self) - self._box = None - - def do_set_box(self, box): - self._box = box - - def do_get_height_request(self, for_width): - return 0, 0 - - def do_get_width_request(self): - return 0, 0 - - def do_allocate(self, x, y, width, height, - req_width, req_height, origin_changed): - for child in self._box.get_layout_children(): - min_width, child_width = child.get_width_request() - min_height, child_height = child.get_height_request(child_width) - - child.allocate(x + (width - child_width) / 2, - y + (height - child_height) / 2, - child_width, child_height, origin_changed) - - -class TransitionBox(hippo.Canvas): +class TransitionBox(gtk.VBox): __gtype_name__ = 'SugarTransitionBox' __gsignals__ = { @@ -72,18 +44,14 @@ class TransitionBox(hippo.Canvas): } def __init__(self): - gobject.GObject.__init__(self) - - self._box = hippo.CanvasBox() - self._box.props.background_color = style.COLOR_WHITE.get_int() - self.set_root(self._box) + gtk.VBox.__init__(self) - self._layout = _Layout() - self._box.set_layout(self._layout) + # how do you send a message to a VBox about its background? + # self._box.props.background_color = style.COLOR_WHITE.get_int() self._my_icon = BuddyIcon(buddy=get_owner_instance(), size=style.XLARGE_ICON_SIZE) - self._box.append(self._my_icon) + self.pack_start(self._my_icon) self._animator = animator.Animator(0.3) self._animator.connect('completed', self._animation_completed_cb) diff --git a/src/jarabe/frame/clipboardpanelwindow.py b/src/jarabe/frame/clipboardpanelwindow.py index f5d537c..063dddc 100644 --- a/src/jarabe/frame/clipboardpanelwindow.py +++ b/src/jarabe/frame/clipboardpanelwindow.py @@ -18,7 +18,6 @@ import logging from urlparse import urlparse import gtk -import hippo from jarabe.frame.framewindow import FrameWindow from jarabe.frame.clipboardtray import ClipboardTray @@ -39,8 +38,7 @@ class ClipboardPanelWindow(FrameWindow): self._clipboard.connect('owner-change', self._owner_change_cb) self._clipboard_tray = ClipboardTray() - canvas_widget = hippo.CanvasWidget(widget=self._clipboard_tray) - self.append(canvas_widget, hippo.PACK_EXPAND) + self.append(self._clipboard_tray) # Receiving dnd drops self.drag_dest_set(0, [], 0) diff --git a/src/jarabe/frame/frame.py b/src/jarabe/frame/frame.py index 079eeeb..66fe894 100644 --- a/src/jarabe/frame/frame.py +++ b/src/jarabe/frame/frame.py @@ -18,7 +18,6 @@ import logging import gtk import gobject -import hippo from sugar.graphics import animator from sugar.graphics import style @@ -178,17 +177,12 @@ class Frame(object): def _create_top_panel(self): panel = self._create_panel(gtk.POS_TOP) - # 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() - panel.append(hippo.CanvasWidget(widget=zoom_toolbar, - box_width=4 * style.GRID_CELL_SIZE)) + panel.append(zoom_toolbar) zoom_toolbar.show() activities_tray = ActivitiesTray() - panel.append(hippo.CanvasWidget(widget=activities_tray), - hippo.PACK_EXPAND) + panel.append(activities_tray) activities_tray.show() return panel @@ -198,8 +192,7 @@ class Frame(object): # TODO: same issue as in _create_top_panel() devices_tray = DevicesTray() - panel.append(hippo.CanvasWidget(widget=devices_tray), - hippo.PACK_EXPAND) + panel.append(devices_tray) devices_tray.show() return panel @@ -208,7 +201,7 @@ class Frame(object): panel = self._create_panel(gtk.POS_RIGHT) tray = FriendsTray() - panel.append(hippo.CanvasWidget(widget=tray), hippo.PACK_EXPAND) + panel.append(tray) tray.show() return panel diff --git a/src/jarabe/frame/framewindow.py b/src/jarabe/frame/framewindow.py index c77e76c..389381f 100644 --- a/src/jarabe/frame/framewindow.py +++ b/src/jarabe/frame/framewindow.py @@ -15,7 +15,6 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA import gtk -import hippo from sugar.graphics import style @@ -39,54 +38,19 @@ class FrameWindow(gtk.Window): self.connect('enter-notify-event', self._enter_notify_cb) self.connect('leave-notify-event', self._leave_notify_cb) - self._canvas = hippo.Canvas() - self.add(self._canvas) - self._canvas.show() - - box = hippo.CanvasBox() - self._canvas.set_root(box) - - bg_box = hippo.CanvasBox( - border_color=style.COLOR_BUTTON_GREY.get_int()) - box.append(bg_box, hippo.PACK_EXPAND) - - self._bg = hippo.CanvasBox() - bg_box.append(self._bg, hippo.PACK_EXPAND) - padding = style.GRID_CELL_SIZE border = style.LINE_WIDTH if position == gtk.POS_TOP or position == gtk.POS_BOTTOM: - box.props.orientation = hippo.ORIENTATION_HORIZONTAL - box.props.padding_left = padding - box.props.padding_right = padding - box.props.padding_top = 0 - box.props.padding_bottom = 0 - self._bg.props.orientation = hippo.ORIENTATION_HORIZONTAL - self._bg.props.padding_left = border * 2 - self._bg.props.padding_right = border * 2 + self._bg = gtk.HBox() else: - box.props.orientation = hippo.ORIENTATION_VERTICAL - box.props.padding_left = 0 - box.props.padding_right = 0 - box.props.padding_top = padding - box.props.padding_bottom = padding - self._bg.props.orientation = hippo.ORIENTATION_VERTICAL - self._bg.props.padding_top = border * 2 - self._bg.props.padding_bottom = border * 2 - - if position == gtk.POS_TOP: - bg_box.props.orientation = hippo.ORIENTATION_HORIZONTAL - bg_box.props.border_bottom = border - elif position == gtk.POS_BOTTOM: - bg_box.props.orientation = hippo.ORIENTATION_HORIZONTAL - bg_box.props.border_top = border - elif position == gtk.POS_LEFT: - bg_box.props.orientation = hippo.ORIENTATION_VERTICAL - bg_box.props.border_right = border - elif position == gtk.POS_RIGHT: - bg_box.props.orientation = hippo.ORIENTATION_VERTICAL - bg_box.props.border_left = border + self._bg = gtk.VBox() + + self.add(self._bg) + self._bg.show() + + # TODO(rgs): set this border color on self._bg + # border_color=style.COLOR_BUTTON_GREY.get_int() self._update_size() @@ -94,7 +58,8 @@ class FrameWindow(gtk.Window): screen.connect('size-changed', self._size_changed_cb) def append(self, child, flags=0): - self._bg.append(child, flags) + # TODO(rgs): we are swalllowing the flags, we should do something + self._bg.add(child) def _update_size(self): if self._position == gtk.POS_TOP or self._position == gtk.POS_BOTTOM: diff --git a/src/jarabe/intro/colorpicker.py b/src/jarabe/intro/colorpicker.py index 997199b..0faae22 100644 --- a/src/jarabe/intro/colorpicker.py +++ b/src/jarabe/intro/colorpicker.py @@ -14,24 +14,23 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -import hippo +import gtk from sugar.graphics.icon import CanvasIcon from sugar.graphics import style from sugar.graphics.xocolor import XoColor -class ColorPicker(hippo.CanvasBox, hippo.CanvasItem): +class ColorPicker(gtk.HBox): def __init__(self, **kwargs): - hippo.CanvasBox.__init__(self, **kwargs) - self.props.orientation = hippo.ORIENTATION_HORIZONTAL + gtk.HBox.__init__(self) self._xo_color = None self._xo = CanvasIcon(size=style.XLARGE_ICON_SIZE, icon_name='computer-xo') self._set_random_colors() self._xo.connect('activated', self._xo_activated_cb) - self.append(self._xo) + self.add(self._xo) def _xo_activated_cb(self, item): self._set_random_colors() diff --git a/src/jarabe/intro/window.py b/src/jarabe/intro/window.py index df19fbf..d706dd3 100644 --- a/src/jarabe/intro/window.py +++ b/src/jarabe/intro/window.py @@ -22,7 +22,6 @@ import pwd import gtk import gobject -import hippo from sugar import env from sugar.graphics import style @@ -57,13 +56,13 @@ def create_profile(name, color=None): logging.error('Keypair exists, skip generation.') -class _Page(hippo.CanvasBox): +class _Page(gtk.HBox): __gproperties__ = { 'valid': (bool, None, None, False, gobject.PARAM_READABLE), } def __init__(self, **kwargs): - hippo.CanvasBox.__init__(self, **kwargs) + gtk.VBox.__init__(self) self.valid = False def set_valid(self, valid): @@ -80,27 +79,25 @@ class _Page(hippo.CanvasBox): class _NamePage(_Page): def __init__(self, intro): - _Page.__init__(self, xalign=hippo.ALIGNMENT_CENTER, + _Page.__init__(self, background_color=_BACKGROUND_COLOR.get_int(), - spacing=style.DEFAULT_SPACING, - orientation=hippo.ORIENTATION_HORIZONTAL,) - + spacing=style.DEFAULT_SPACING) self._intro = intro - label = hippo.CanvasText(text=_('Name:')) - self.append(label) + label = gtk.Label(_('Name:')) + self.add(label) - self._entry = CanvasEntry(box_width=style.zoom(300)) - self._entry.set_background(_BACKGROUND_COLOR.get_html()) + self._entry = gtk.Entry() + # self._entry.set_background(_BACKGROUND_COLOR.get_html()) self._entry.connect('notify::text', self._text_changed_cb) + self._entry.set_max_length(45) - widget = self._entry.props.widget - widget.set_max_length(45) - - self.append(self._entry) + self.add(self._entry) - if gtk.widget_get_default_direction() == gtk.TEXT_DIR_RTL: - self.reverse() + # TODO(rgs): Do we need to do something here or GTK handles this + # for us? + #if gtk.widget_get_default_direction() == gtk.TEXT_DIR_RTL: + # self.reverse() def _text_changed_cb(self, entry, pspec): valid = len(entry.props.text.strip()) > 0 @@ -118,16 +115,14 @@ class _NamePage(_Page): class _ColorPage(_Page): def __init__(self, **kwargs): - _Page.__init__(self, xalign=hippo.ALIGNMENT_CENTER, + _Page.__init__(self, background_color=_BACKGROUND_COLOR.get_int(), - spacing=style.DEFAULT_SPACING, - yalign=hippo.ALIGNMENT_CENTER, **kwargs) + spacing=style.DEFAULT_SPACING) - self._label = hippo.CanvasText(text=_('Click to change color:'), - xalign=hippo.ALIGNMENT_CENTER) - self.append(self._label) + self._label = gtk.Label(_('Click to change color:')) + self.add(self._label) - self._cp = colorpicker.ColorPicker(xalign=hippo.ALIGNMENT_CENTER) + self._cp = colorpicker.ColorPicker() self.append(self._cp) self._color = self._cp.get_color() @@ -137,7 +132,7 @@ class _ColorPage(_Page): return self._cp.get_color() -class _IntroBox(hippo.CanvasBox): +class _IntroBox(gtk.HBox): __gsignals__ = { 'done': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT])), @@ -150,8 +145,8 @@ class _IntroBox(hippo.CanvasBox): PAGE_LAST = PAGE_COLOR def __init__(self): - hippo.CanvasBox.__init__(self, padding=style.zoom(30), - background_color=_BACKGROUND_COLOR.get_int()) + # TODO(rgs): padding=style.zoom(30) + gtk.HBox.__init__(self) self._page = self.PAGE_NAME self._name_page = _NamePage(self) @@ -179,46 +174,53 @@ class _IntroBox(hippo.CanvasBox): elif self._page == self.PAGE_COLOR: self._current_page = self._color_page - self.append(self._current_page, hippo.PACK_EXPAND) + self.add(self._current_page) - button_box = hippo.CanvasBox(orientation=hippo.ORIENTATION_HORIZONTAL) + button_box = gtk.HBox() if self._page != self.PAGE_FIRST: - back_button = hippo.CanvasButton(text=_('Back')) + back_button = gtk.Button(_('Back')) image = Icon(icon_name='go-left') - back_button.props.widget.set_image(image) + back_button.set_image(image) back_button.connect('activated', self._back_activated_cb) - button_box.append(back_button) + button_box.add(back_button) - spacer = hippo.CanvasBox() - button_box.append(spacer, hippo.PACK_EXPAND) + # TODO(rgs): there surely is a more elegant way to do this + spacer = gtk.Label("") + spacer.set_size_request(10, 1) + button_box.add(spacer) - self._next_button = hippo.CanvasButton() + self._next_button = gtk.Button() image = Icon(icon_name='go-right') - self._next_button.props.widget.set_image(image) + self._next_button.set_image(image) if self._page == self.PAGE_LAST: - self._next_button.props.text = _('Done') + self._next_button.set_label(_('Done')) self._next_button.connect('activated', self._done_activated_cb) else: - self._next_button.props.text = _('Next') + self._next_button.set_label(_('Next')) self._next_button.connect('activated', self._next_activated_cb) self._current_page.activate() self._update_next_button() - button_box.append(self._next_button) + button_box.add(self._next_button) self._current_page.connect('notify::valid', self._page_valid_changed_cb) - self.append(button_box) + self.add(button_box) - if gtk.widget_get_default_direction() == gtk.TEXT_DIR_RTL: - button_box.reverse() + # TODO(rgs): Do we need to do something here or GTK handles this + # for us? + #if gtk.widget_get_default_direction() == gtk.TEXT_DIR_RTL: + # button_box.reverse() + + def remove_all(self): + for child in self.get_children(): + self.remove(child) def _update_next_button(self): - widget = self._next_button.props.widget - widget.props.sensitive = self._current_page.props.valid + self._next_button.set_sensitive(self._current_page.props.valid) def _page_valid_changed_cb(self, page, pspec): self._update_next_button() @@ -250,7 +252,6 @@ class _IntroBox(hippo.CanvasBox): self.emit('done', name, color) - class IntroWindow(gtk.Window): def __init__(self): gtk.Window.__init__(self) @@ -258,13 +259,11 @@ class IntroWindow(gtk.Window): self.props.decorated = False self.maximize() - self._canvas = hippo.Canvas() self._intro_box = _IntroBox() self._intro_box.connect('done', self._done_cb) - self._canvas.set_root(self._intro_box) - self.add(self._canvas) - self._canvas.show() + self.add(self._intro_box) + self._intro_box.show() self.connect('key-press-event', self.__key_press_cb) def _done_cb(self, box, name, color): |