Add some simple layout logic for the icons
This commit is contained in:
parent
db4553184e
commit
8722255b17
@ -8,9 +8,7 @@ import Theme
|
|||||||
class FriendIcon(IconItem):
|
class FriendIcon(IconItem):
|
||||||
def __init__(self, friend):
|
def __init__(self, friend):
|
||||||
IconItem.__init__(self, icon_name='stock-buddy',
|
IconItem.__init__(self, icon_name='stock-buddy',
|
||||||
color=friend.get_color(), size=96,
|
color=friend.get_color(), size=96)
|
||||||
x=random.random() * 2400,
|
|
||||||
y=random.random() * 1800)
|
|
||||||
self._friend = friend
|
self._friend = friend
|
||||||
|
|
||||||
def get_friend(self):
|
def get_friend(self):
|
||||||
@ -20,10 +18,12 @@ class FriendsGroup(goocanvas.Group):
|
|||||||
WIDTH = 1200.0 * 1.9
|
WIDTH = 1200.0 * 1.9
|
||||||
HEIGHT = 900.0 * 1.9
|
HEIGHT = 900.0 * 1.9
|
||||||
|
|
||||||
def __init__(self, data_model):
|
def __init__(self, icon_layout, data_model):
|
||||||
goocanvas.Group.__init__(self)
|
goocanvas.Group.__init__(self)
|
||||||
self._friend_to_child = {}
|
self._friend_to_child = {}
|
||||||
|
|
||||||
|
self._icon_layout = icon_layout
|
||||||
|
|
||||||
self._theme = Theme.get_instance()
|
self._theme = Theme.get_instance()
|
||||||
self._theme.connect("theme-changed", self.__theme_changed_cb)
|
self._theme.connect("theme-changed", self.__theme_changed_cb)
|
||||||
|
|
||||||
@ -48,10 +48,12 @@ class FriendsGroup(goocanvas.Group):
|
|||||||
icon = FriendIcon(friend)
|
icon = FriendIcon(friend)
|
||||||
self.add_child(icon)
|
self.add_child(icon)
|
||||||
self._friend_to_child[friend] = icon
|
self._friend_to_child[friend] = icon
|
||||||
|
self._icon_layout.add_icon(icon)
|
||||||
|
|
||||||
def remove_friend(self, friend):
|
def remove_friend(self, friend):
|
||||||
icon = self._friend_to_child[friend]
|
icon = self._friend_to_child[friend]
|
||||||
self.remove_child(self._root.find_child(icon))
|
self._icon_layout.remove_icon(icon)
|
||||||
|
self.remove_child(self.find_child(icon))
|
||||||
del self._friend_to_child[friend]
|
del self._friend_to_child[friend]
|
||||||
|
|
||||||
def __friend_added_cb(self, data_model, friend):
|
def __friend_added_cb(self, data_model, friend):
|
||||||
|
@ -5,6 +5,7 @@ import cairo
|
|||||||
from home.MeshGroup import MeshGroup
|
from home.MeshGroup import MeshGroup
|
||||||
from home.HomeGroup import HomeGroup
|
from home.HomeGroup import HomeGroup
|
||||||
from home.FriendsGroup import FriendsGroup
|
from home.FriendsGroup import FriendsGroup
|
||||||
|
from home.IconLayout import IconLayout
|
||||||
import sugar
|
import sugar
|
||||||
|
|
||||||
class HomeWindow(gtk.Window):
|
class HomeWindow(gtk.Window):
|
||||||
@ -21,12 +22,26 @@ class HomeWindow(gtk.Window):
|
|||||||
self._model = goocanvas.CanvasModelSimple()
|
self._model = goocanvas.CanvasModelSimple()
|
||||||
root = self._model.get_root_item()
|
root = self._model.get_root_item()
|
||||||
|
|
||||||
|
icon_layout = IconLayout(MeshGroup.WIDTH, MeshGroup.HEIGHT)
|
||||||
|
x1 = (self._width - FriendsGroup.WIDTH) / 2
|
||||||
|
y1 = (self._height - FriendsGroup.HEIGHT) / 2
|
||||||
|
x2 = x1 + FriendsGroup.WIDTH
|
||||||
|
y2 = y1 + FriendsGroup.HEIGHT
|
||||||
|
icon_layout.set_bounds(x1, y1, x2, y2)
|
||||||
|
|
||||||
data_model = model.get_mesh()
|
data_model = model.get_mesh()
|
||||||
self._mesh_group = MeshGroup(data_model)
|
self._mesh_group = MeshGroup(icon_layout, data_model)
|
||||||
root.add_child(self._mesh_group)
|
root.add_child(self._mesh_group)
|
||||||
|
|
||||||
|
icon_layout = IconLayout(FriendsGroup.WIDTH, FriendsGroup.HEIGHT)
|
||||||
|
x1 = (self._width - HomeGroup.WIDTH) / 2
|
||||||
|
y1 = (self._height - HomeGroup.HEIGHT) / 2
|
||||||
|
x2 = x1 + HomeGroup.WIDTH
|
||||||
|
y2 = y1 + HomeGroup.HEIGHT
|
||||||
|
icon_layout.set_bounds(x1, y1, x2, y2)
|
||||||
|
|
||||||
data_model = model.get_friends()
|
data_model = model.get_friends()
|
||||||
self._friends_group = FriendsGroup(data_model)
|
self._friends_group = FriendsGroup(icon_layout, data_model)
|
||||||
self._friends_group.translate((self._width - FriendsGroup.WIDTH) / 2,
|
self._friends_group.translate((self._width - FriendsGroup.WIDTH) / 2,
|
||||||
(self._height - FriendsGroup.HEIGHT) / 2)
|
(self._height - FriendsGroup.HEIGHT) / 2)
|
||||||
root.add_child(self._friends_group)
|
root.add_child(self._friends_group)
|
||||||
|
37
shell/home/IconLayout.py
Normal file
37
shell/home/IconLayout.py
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
import random
|
||||||
|
|
||||||
|
class IconLayout:
|
||||||
|
def __init__(self, width, height):
|
||||||
|
self._icons = []
|
||||||
|
self._width = width
|
||||||
|
self._height = height
|
||||||
|
|
||||||
|
def set_bounds(self, x1, y1, x2, y2):
|
||||||
|
self._x1 = x1
|
||||||
|
self._y1 = y1
|
||||||
|
self._x2 = x2
|
||||||
|
self._y2 = y2
|
||||||
|
|
||||||
|
def add_icon(self, icon):
|
||||||
|
self._icons.append(icon)
|
||||||
|
self._layout_icon(icon)
|
||||||
|
|
||||||
|
def remove_icon(self, icon):
|
||||||
|
self._icons.remove(icon)
|
||||||
|
|
||||||
|
def _is_valid_position(self, x, y):
|
||||||
|
if x < self._x1 or x > self._x2:
|
||||||
|
return True
|
||||||
|
if y < self._y1 or y > self._y2:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def _layout_icon(self, icon):
|
||||||
|
while True:
|
||||||
|
x = random.random() * self._width
|
||||||
|
y = random.random() * self._height
|
||||||
|
if self._is_valid_position(x, y):
|
||||||
|
break
|
||||||
|
|
||||||
|
icon.props.x = x
|
||||||
|
icon.props.y = y
|
@ -26,8 +26,11 @@ class MeshGroup(goocanvas.Group):
|
|||||||
WIDTH = 1200.0 * 3.5
|
WIDTH = 1200.0 * 3.5
|
||||||
HEIGHT = 900.0 * 3.5
|
HEIGHT = 900.0 * 3.5
|
||||||
|
|
||||||
def __init__(self, data_model):
|
def __init__(self, icon_layout, data_model):
|
||||||
goocanvas.Group.__init__(self)
|
goocanvas.Group.__init__(self)
|
||||||
|
|
||||||
|
self._icon_layout = icon_layout
|
||||||
|
|
||||||
self._theme = Theme.get_instance()
|
self._theme = Theme.get_instance()
|
||||||
self._theme.connect("theme-changed", self.__theme_changed_cb)
|
self._theme.connect("theme-changed", self.__theme_changed_cb)
|
||||||
|
|
||||||
@ -47,8 +50,7 @@ class MeshGroup(goocanvas.Group):
|
|||||||
|
|
||||||
def add_activity(self, activity):
|
def add_activity(self, activity):
|
||||||
item = ActivityItem(activity)
|
item = ActivityItem(activity)
|
||||||
item.set_property('x', random.random() * 1100)
|
self._icon_layout.add_icon(item)
|
||||||
item.set_property('y', random.random() * 800)
|
|
||||||
self.add_child(item)
|
self.add_child(item)
|
||||||
|
|
||||||
def __activity_added_cb(self, data_model, activity):
|
def __activity_added_cb(self, data_model, activity):
|
||||||
|
Loading…
Reference in New Issue
Block a user