Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/jarabe/desktop/favoriteslayout.py22
-rw-r--r--src/jarabe/desktop/friendview.py12
-rw-r--r--src/jarabe/desktop/grid.py3
-rw-r--r--src/jarabe/desktop/groupbox.py83
-rw-r--r--src/jarabe/desktop/homebox.py2
-rw-r--r--src/jarabe/desktop/homewindow.py10
-rw-r--r--src/jarabe/desktop/meshbox.py132
-rw-r--r--src/jarabe/desktop/transitionbox.py44
-rw-r--r--src/jarabe/frame/clipboardpanelwindow.py4
-rw-r--r--src/jarabe/frame/frame.py15
-rw-r--r--src/jarabe/frame/framewindow.py55
-rw-r--r--src/jarabe/intro/colorpicker.py9
-rw-r--r--src/jarabe/intro/window.py97
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):