Keep the icon layout updated when adding buddies to the snow flake

This commit is contained in:
Marco Pesenti Gritti 2006-09-25 22:01:35 +02:00
parent 9619921735
commit 5b3eeb0a9c
2 changed files with 12 additions and 6 deletions

View File

@ -17,10 +17,12 @@ class IconLayout:
def add_icon(self, icon): def add_icon(self, icon):
self._icons.append(icon) self._icons.append(icon)
self._layout_icon(icon) self._layout_icon(icon)
self.update()
def remove_icon(self, icon): def remove_icon(self, icon):
self._icons.remove(icon) self._icons.remove(icon)
del self._constraints[icon] del self._constraints[icon]
self.update()
def _get_distance(self, icon1, icon2): def _get_distance(self, icon1, icon2):
[icon1_x, icon1_y] = self._constraints[icon1] [icon1_x, icon1_y] = self._constraints[icon1]
@ -74,15 +76,16 @@ class IconLayout:
matrix.translate(new_x, new_y) matrix.translate(new_x, new_y)
icon1.set_transform(matrix) icon1.set_transform(matrix)
def update(self):
tries = 10
self._spread_icons()
while not self._stable and tries > 0:
self._spread_icons()
tries -= 1
def _layout_icon(self, icon): def _layout_icon(self, icon):
[width, height] = icon.get_size_request() [width, height] = icon.get_size_request()
x = random.random() * (self._x2 - self._x1 - width) x = random.random() * (self._x2 - self._x1 - width)
y = random.random() * (self._y2 - self._y1 - height) y = random.random() * (self._y2 - self._y1 - height)
self._constraints[icon] = [x, y] self._constraints[icon] = [x, y]
tries = 10
self._spread_icons()
while not self._stable and tries > 0:
self._spread_icons()
tries -= 1

View File

@ -110,6 +110,7 @@ class MeshGroup(goocanvas.Group):
for activity in self._activities.values(): for activity in self._activities.values():
if activity.has_buddy_icon(name): if activity.has_buddy_icon(name):
activity.remove_buddy_icon(name) activity.remove_buddy_icon(name)
self._layout.update()
def _move_buddy(self, buddy_model, activity_model): def _move_buddy(self, buddy_model, activity_model):
name = buddy_model.get_name() name = buddy_model.get_name()
@ -125,6 +126,8 @@ class MeshGroup(goocanvas.Group):
icon.props.size = 60 icon.props.size = 60
activity.add_buddy_icon(buddy_model.get_name(), icon) activity.add_buddy_icon(buddy_model.get_name(), icon)
self._layout.update()
def _add_activity(self, activity_model): def _add_activity(self, activity_model):
icon = ActivityView(self._shell, self._menu_shell, activity_model) icon = ActivityView(self._shell, self._menu_shell, activity_model)
self.add_child(icon) self.add_child(icon)