Refactor frame stuff naming some

This commit is contained in:
Marco Pesenti Gritti
2006-09-01 15:11:52 +02:00
parent 4c80db6da0
commit a6f9241e95
10 changed files with 21 additions and 21 deletions
+74
View File
@@ -0,0 +1,74 @@
import gtk
import goocanvas
from sugar.canvas.IconItem import IconItem
from sugar.canvas.IconColor import IconColor
from sugar import conf
from frame.Panel import Panel
import logging
class ActivityItem(IconItem):
def __init__(self, activity, size):
icon_name = activity.get_icon()
if not icon_name:
act_type = activity.get_default_type()
raise RuntimeError("Activity %s did not have an icon!" % act_type)
IconItem.__init__(self, icon_name=icon_name,
color=IconColor('white'), size=size)
self._activity = activity
def get_activity_id(self):
return self._activity.get_id()
class ActivityBar(goocanvas.Group):
def __init__(self, shell, height):
goocanvas.Group.__init__(self)
self._shell = shell
self._height = height
registry = conf.get_activity_registry()
for activity in registry.list_activities():
if activity.get_show_launcher():
self.add_activity(activity)
def add_activity(self, activity):
# Need an icon to show up on the bar
if not activity.get_icon():
name = activity.get_name()
logging.info("Activity %s did not have an icon. Won't show it." % name)
return
item = ActivityItem(activity, self._height)
icon_size = self._height
x = (icon_size + 6) * self.get_n_children()
item.set_property('x', x)
self.add_child(item)
class BottomPanel(Panel):
def __init__(self, shell):
Panel.__init__(self)
self._shell = shell
view = self.get_view()
view.connect("item_view_created", self.__item_view_created_cb)
def construct(self):
Panel.construct(self)
root = self.get_root()
activity_bar = ActivityBar(self._shell, self.get_height())
root.add_child(activity_bar)
def __item_view_created_cb(self, view, item_view, item):
if isinstance(item, ActivityItem):
item_view.connect("button_press_event",
self.__activity_button_press_cb,
item.get_activity_id())
def __activity_button_press_cb(self, view, target, event, activity_id):
self._shell.start_activity(activity_id)
+55
View File
@@ -0,0 +1,55 @@
import gtk
import gobject
from frame.BottomPanel import BottomPanel
from frame.RightPanel import RightPanel
from frame.TopPanel import TopPanel
from frame.Panel import Panel
class Frame:
def __init__(self, shell, owner):
size = 30
self._verbs_panel = BottomPanel(shell)
self._verbs_panel.set_position(size, 0)
self._verbs_panel.move(0, gtk.gdk.screen_height() - size)
self._verbs_panel.resize(gtk.gdk.screen_width(), size)
self._friends_panel = RightPanel(shell, owner.get_friends())
self._friends_panel.move(gtk.gdk.screen_width() - size, size)
self._friends_panel.resize(size, gtk.gdk.screen_height() - size * 2)
self._top_panel = TopPanel(shell)
self._top_panel.set_position(size, 0)
self._top_panel.move(0, 0)
self._top_panel.resize(gtk.gdk.screen_width(), size)
self._left_panel = Panel()
self._left_panel.move(0, size)
self._left_panel.resize(size, gtk.gdk.screen_height() - size * 2)
def __hide_timeout_cb(self):
self.hide()
return False
def show_and_hide(self, seconds):
self.show()
gobject.timeout_add(seconds * 1000, self.__hide_timeout_cb)
def show(self):
self._verbs_panel.show()
self._friends_panel.show()
self._top_panel.show()
self._left_panel.show()
def hide(self):
self._verbs_panel.hide()
self._friends_panel.hide()
self._top_panel.hide()
self._left_panel.hide()
def toggle_visibility(self):
if self._verbs_panel.props.visible:
self.hide()
else:
self.show()
+8
View File
@@ -0,0 +1,8 @@
sugardir = $(pkgdatadir)/shell/panel
sugar_PYTHON = \
__init__.py \
RightPanel.py \
Panel.py \
Frame.py \
TopPanel.py \
BottomPanel.py
+72
View File
@@ -0,0 +1,72 @@
import gtk
import goocanvas
class PanelView(goocanvas.CanvasView):
BORDER = 4
def construct(self, x, y):
model = goocanvas.CanvasModelSimple()
root = model.get_root_item()
item = goocanvas.Rect(x=0, y=0,
width=self.get_allocation().width,
height=self.get_allocation().height,
line_width=0, fill_color="#4f4f4f")
root.add_child(item)
self._group = goocanvas.Group()
root.add_child(self._group)
self._group.translate(x + PanelView.BORDER, y + PanelView.BORDER)
self.set_model(model)
def get_root_group(self):
return self._group
class Panel(gtk.Window):
def __init__(self):
gtk.Window.__init__(self)
self._x = 0
self._y = 0
self._constructed = False
self._view = PanelView()
self.add(self._view)
self._view.show()
self.set_decorated(False)
self.realize()
self.window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG)
self.window.set_accept_focus(False)
screen = gtk.gdk.screen_get_default()
self.window.set_transient_for(screen.get_root_window())
def get_view(self):
return self._view
def get_root(self):
return self._view.get_root_group()
def get_height(self):
height = self._view.get_allocation().height
return height - PanelView.BORDER * 2
def get_width(self):
width = self._view.get_allocation().width
return width - PanelView.BORDER * 2
def set_position(self, x, y):
self._x = x
self._y = y
def construct(self):
self._view.construct(self._x, self._y)
self._constructed = True
def show(self):
gtk.Window.show(self)
if not self._constructed:
self.construct()
+173
View File
@@ -0,0 +1,173 @@
import goocanvas
from frame.Panel import Panel
from sugar.canvas.IconItem import IconItem
from sugar.canvas.IconColor import IconColor
from sugar.presence import PresenceService
class FriendsGroup(goocanvas.Group):
N_BUDDIES = 10
def __init__(self, shell, friends, width):
goocanvas.Group.__init__(self)
self._shell = shell
self._friends = friends
self._width = width
self._activity_ps = None
self._joined_hid = -1
self._left_hid = -1
self._pservice = PresenceService.get_instance()
self._pservice.connect('activity-appeared',
self.__activity_appeared_cb)
self._buddies = []
i = 0
while i < FriendsGroup.N_BUDDIES:
self.add_child(self._create_placeholder(i))
self._buddies.append(None)
i += 1
shell.connect('activity-changed', self.__activity_changed_cb)
def add(self, buddy):
i = 0
while i < FriendsGroup.N_BUDDIES:
if self._buddies[i] == None:
self._add_buddy(buddy, i)
break
i += 1
def remove(self, buddy):
i = 0
while i < FriendsGroup.N_BUDDIES:
if self._buddies[i] == buddy.get_name():
self._remove_buddy(buddy, i)
break
i += 1
def clear(self):
i = 0
while i < FriendsGroup.N_BUDDIES:
if self._buddies[i] != None:
self._remove_buddy(i)
i += 1
def _get_y(self, i):
return i * (self._width + 6)
def _add_buddy(self, buddy, i):
self.remove_child(i)
icon = IconItem(icon_name='stock-buddy',
color=IconColor(buddy.get_color()),
size=self._width, y=self._get_y(i))
icon.connect('clicked', self.__buddy_clicked_cb, buddy)
self.add_child(icon, i)
self._buddies[i] = buddy.get_name()
def _create_placeholder(self, i):
icon = IconItem(icon_name='stock-buddy', color=IconColor('white'),
y=self._get_y(i), size=self._width)
return icon
def _remove_buddy(self, i):
self.remove_child(i)
self.add_child(self._create_placeholder(i), i)
self._buddies[i] = None
def __activity_appeared_cb(self, pservice, activity_ps):
activity = self._shell.get_current_activity()
if activity_ps.get_id() == activity.get_id():
self._set_activity_ps(activity_ps)
def _set_activity_ps(self, activity_ps):
if self._activity_ps == activity_ps:
return
self._activity_ps = activity_ps
self.clear()
if self._joined_hid > 0:
self.disconnect(self._joined_hid)
self._joined_hid = -1
if self._left_hid > 0:
self.disconnect(self._left_hid)
self._left_hid = -1
if activity_ps != None:
for buddy in activity_ps.get_joined_buddies():
self.add(buddy)
self._joined_hid = activity_ps.connect(
'buddy-joined', self.__buddy_joined_cb)
self._left_hid = activity_ps.connect(
'buddy-left', self.__buddy_left_cb)
def __activity_changed_cb(self, group, activity):
activity_ps = self._pservice.get_activity(activity.get_id())
self._set_activity_ps(activity_ps)
def __buddy_joined_cb(self, activity, buddy):
self.add(buddy)
def __buddy_left_cb(self, activity, buddy):
self.remove(buddy)
def __buddy_clicked_cb(self, icon, buddy):
self._friends.add_buddy(buddy)
class ActionsBar(goocanvas.Group):
def __init__(self, shell, width):
goocanvas.Group.__init__(self)
self._width = width
self._shell = shell
self._y = 0
icon = IconItem(icon_name='stock-share', size=self._width)
icon.connect('clicked', self.__share_clicked_cb)
self.add_icon(icon)
icon = IconItem(icon_name='stock-invite', size=self._width)
icon.connect('clicked', self.__invite_clicked_cb)
self.add_icon(icon)
icon = IconItem(icon_name='stock-chat', size=self._width)
icon.connect('clicked', self.__chat_clicked_cb)
self.add_icon(icon)
def add_icon(self, icon):
icon.set_property('y', self._y)
self._y += (self._width + 6)
self.add_child(icon)
def __share_clicked_cb(self, item):
activity = self._shell.get_current_activity()
if activity != None:
activity.share()
def __invite_clicked_cb(self, item):
pass
def __chat_clicked_cb(self, item):
pass
class RightPanel(Panel):
def __init__(self, shell, friends):
Panel.__init__(self)
self._shell = shell
self._friends = friends
def construct(self):
Panel.construct(self)
root = self.get_root()
actions_bar = ActionsBar(self._shell, self.get_width())
root.add_child(actions_bar)
friends_group = FriendsGroup(self._shell, self._friends,
self.get_width())
friends_group.translate(0, 150)
root.add_child(friends_group)
+40
View File
@@ -0,0 +1,40 @@
import goocanvas
from frame.Panel import Panel
from sugar.canvas.IconItem import IconItem
import sugar
class ZoomBar(goocanvas.Group):
def __init__(self, shell, height):
goocanvas.Group.__init__(self)
self._height = height
self._shell = shell
self.add_zoom_level(sugar.ZOOM_ACTIVITY, 'stock-zoom-activity')
self.add_zoom_level(sugar.ZOOM_HOME, 'stock-zoom-home')
self.add_zoom_level(sugar.ZOOM_FRIENDS, 'stock-zoom-friends')
self.add_zoom_level(sugar.ZOOM_MESH, 'stock-zoom-mesh')
def add_zoom_level(self, level, icon_name):
icon = IconItem(icon_name=icon_name, size=self._height)
icon.connect('clicked', self.__level_clicked_cb, level)
icon_size = self._height
x = (icon_size + 6) * self.get_n_children()
icon.set_property('x', x)
self.add_child(icon)
def __level_clicked_cb(self, item, level):
self._shell.set_zoom_level(level)
class TopPanel(Panel):
def __init__(self, shell):
Panel.__init__(self)
self._shell = shell
def construct(self):
Panel.construct(self)
zoom_bar = ZoomBar(self._shell, self.get_height())
self.get_root().add_child(zoom_bar)
View File