Start implementing the panels.

This commit is contained in:
Marco Pesenti Gritti 2006-08-23 11:52:18 +02:00
parent 9f674ef232
commit f53af6af4c
12 changed files with 187 additions and 68 deletions

View File

@ -1,4 +1,4 @@
AC_INIT([Sugar],[0.20],[],[sugar]) AC_INIT([Sugar],[0.22],[],[sugar])
AC_PREREQ([2.59]) AC_PREREQ([2.59])
@ -39,6 +39,7 @@ activities/terminal/Makefile
shell/Makefile shell/Makefile
shell/data/Makefile shell/data/Makefile
shell/home/Makefile shell/home/Makefile
shell/panel/Makefile
shell/session/Makefile shell/session/Makefile
shell/PresenceService/Makefile shell/PresenceService/Makefile
sugar/Makefile sugar/Makefile

View File

@ -1,4 +1,4 @@
SUBDIRS = data session home PresenceService SUBDIRS = data session home panel PresenceService
bin_SCRIPTS = \ bin_SCRIPTS = \
sugar \ sugar \

View File

@ -17,6 +17,7 @@ from ChatController import ChatController
from sugar.activity import ActivityFactory from sugar.activity import ActivityFactory
from sugar.activity import Activity from sugar.activity import Activity
from FirstTimeDialog import FirstTimeDialog from FirstTimeDialog import FirstTimeDialog
from panel.PanelManager import PanelManager
from sugar import conf from sugar import conf
import sugar.logger import sugar.logger
@ -102,6 +103,8 @@ class Shell(gobject.GObject):
self._home_window.set_model(home_model) self._home_window.set_model(home_model)
self._set_zoom_level(Shell.ZOOM_HOME) self._set_zoom_level(Shell.ZOOM_HOME)
self._panel_manager = PanelManager(self)
def set_console(self, console): def set_console(self, console):
self._console = console self._console = console

View File

@ -7,7 +7,6 @@ from sugar.canvas.IconItem import IconColor
from sugar.canvas.DonutItem import DonutItem from sugar.canvas.DonutItem import DonutItem
from sugar.canvas.DonutItem import PieceItem from sugar.canvas.DonutItem import PieceItem
from sugar.canvas.DonutItem import PieceIcon from sugar.canvas.DonutItem import PieceIcon
from sugar import conf
class TasksItem(DonutItem): class TasksItem(DonutItem):
def __init__(self, shell): def __init__(self, shell):
@ -39,50 +38,16 @@ class TasksItem(DonutItem):
self._items[activity.get_id()] = item self._items[activity.get_id()] = item
class ActivityItem(IconItem):
ICON_SIZE = 30
def __init__(self, activity):
IconItem.__init__(self, activity.get_icon(),
IconColor('white'),
ActivityItem.ICON_SIZE)
self._activity = activity
def get_activity_id(self):
return self._activity.get_id()
class ActivityBar(goocanvas.Group):
def __init__(self, shell):
goocanvas.Group.__init__(self)
self._shell = shell
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):
item = ActivityItem(activity)
x = (ActivityItem.ICON_SIZE + 6) * self.get_n_children()
item.set_property('x', x)
self.add_child(item)
class Background(goocanvas.Group): class Background(goocanvas.Group):
def __init__(self): def __init__(self):
goocanvas.Group.__init__(self) goocanvas.Group.__init__(self)
item = goocanvas.Rect(width=1200, height=900, item = goocanvas.Rect(width=1200, height=900,
fill_color="#4f4f4f") fill_color="#d8d8d8")
self.add_child(item)
item = goocanvas.Rect(x=50, y=50, width=1100, height=800,
line_width=0, fill_color="#d8d8d8",
radius_x=30, radius_y=30)
self.add_child(item) self.add_child(item)
item = goocanvas.Text(text="My Activities", item = goocanvas.Text(text="My Activities",
x=60, y=10, fill_color="white", x=12, y=12, fill_color="black",
font="Sans 21") font="Sans 21")
self.add_child(item) self.add_child(item)
@ -95,10 +60,6 @@ class Model(goocanvas.CanvasModelSimple):
background = Background() background = Background()
root.add_child(background) root.add_child(background)
activity_bar = ActivityBar(shell)
activity_bar.translate(50, 860)
root.add_child(activity_bar)
tasks = TasksItem(shell) tasks = TasksItem(shell)
tasks.translate(600, 450) tasks.translate(600, 450)
root.add_child(tasks) root.add_child(tasks)
@ -119,12 +80,8 @@ class HomeView(goocanvas.CanvasView):
self.set_model(canvas_model) self.set_model(canvas_model)
def __item_view_created_cb(self, view, item_view, item): def __item_view_created_cb(self, view, item_view, item):
if isinstance(item, ActivityItem): if isinstance(item, PieceItem) or \
item_view.connect("button_press_event", isinstance(item, PieceIcon):
self.__activity_button_press_cb,
item.get_activity_id())
elif isinstance(item, PieceItem) or \
isinstance(item, PieceIcon):
item_view.connect("button_press_event", item_view.connect("button_press_event",
self.__task_button_press_cb) self.__task_button_press_cb)

View File

@ -0,0 +1,5 @@
from panel.Panel import Panel
class FriendsPanel(Panel):
def __init__(self, shell):
Panel.__init__(self)

7
shell/panel/Makefile.am Normal file
View File

@ -0,0 +1,7 @@
sugardir = $(pkgdatadir)/shell/panel
sugar_PYTHON = \
__init__.py \
FriendsPanel.py \
Panel.py \
PanelManager.py \
VerbsPanel.py

53
shell/panel/Panel.py Normal file
View File

@ -0,0 +1,53 @@
import gtk
import goocanvas
class PanelModel(goocanvas.CanvasModelSimple):
BORDER = 4
def __init__(self, width, height):
goocanvas.CanvasModelSimple.__init__(self)
root = self.get_root_item()
item = goocanvas.Rect(x=0, y=0, width=width, height=height,
line_width=0, fill_color="#4f4f4f")
root.add_child(item)
class PanelView(goocanvas.CanvasView):
def construct(self):
canvas_model = PanelModel(self.get_allocation().width,
self.get_allocation().height)
self.set_model(canvas_model)
class Panel(gtk.Window):
def __init__(self):
gtk.Window.__init__(self)
self._view = PanelView()
self.add(self._view)
self._view.show()
self.connect('realize', self.__realize_cb)
def get_view(self):
return self._view
def get_model(self):
return self._view.get_model()
def get_border(self):
return PanelModel.BORDER
def get_height(self):
height = self._view.get_allocation().height
return height - self.get_border() * 2
def __realize_cb(self, window):
self.window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DOCK)
def construct(self):
self._view.construct()
def show(self):
gtk.Window.show(self)
self.construct()

View File

@ -0,0 +1,29 @@
import gtk
from panel.VerbsPanel import VerbsPanel
from panel.FriendsPanel import FriendsPanel
from panel.Panel import Panel
class PanelManager:
def __init__(self, shell):
size = 30
self._verbs_panel = VerbsPanel(shell)
self._verbs_panel.move(0, gtk.gdk.screen_height() - size)
self._verbs_panel.resize(gtk.gdk.screen_width(), size)
self._verbs_panel.show()
self._friends_panel = FriendsPanel(shell)
self._friends_panel.move(gtk.gdk.screen_width() - size, 0)
self._friends_panel.resize(size, gtk.gdk.screen_height())
self._friends_panel.show()
panel = Panel()
panel.move(0, 0)
panel.resize(gtk.gdk.screen_width(), size)
panel.show()
panel = Panel()
panel.move(0, 0)
panel.resize(size, gtk.gdk.screen_height())
panel.show()

64
shell/panel/VerbsPanel.py Normal file
View File

@ -0,0 +1,64 @@
import gtk
import goocanvas
from sugar.canvas.IconItem import IconItem
from sugar.canvas.IconItem import IconColor
from sugar import conf
from panel.Panel import Panel
class ActivityItem(IconItem):
def __init__(self, activity, size):
IconItem.__init__(self, activity.get_icon(),
IconColor('white'), 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):
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 VerbsPanel(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_model().get_root_item()
activity_bar = ActivityBar(self._shell, self.get_height())
activity_bar.translate(self.get_border(), self.get_border())
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)

0
shell/panel/__init__.py Normal file
View File

View File

@ -54,22 +54,6 @@ class XnestProcess(Process):
Process.start(self) Process.start(self)
os.environ['DISPLAY'] = ":%d" % (self._display) os.environ['DISPLAY'] = ":%d" % (self._display)
class DbusProcess(Process):
def __init__(self):
config = sugar.env.get_dbus_config()
cmd = "dbus-daemon --print-address --config-file %s" % config
Process.__init__(self, cmd)
def get_name(self):
return 'Dbus'
def start(self):
Process.start(self, True)
dbus_file = os.fdopen(self._stdout)
addr = dbus_file.readline().strip()
dbus_file.close()
os.environ["DBUS_SESSION_BUS_ADDRESS"] = addr
class Emulator: class Emulator:
"""The OLPC emulator""" """The OLPC emulator"""
def start(self): def start(self):
@ -84,6 +68,3 @@ class Emulator:
print 'Cannot run the emulator. You need to install \ print 'Cannot run the emulator. You need to install \
Xephyr or Xnest.' Xephyr or Xnest.'
sys.exit(0) sys.exit(0)
process = DbusProcess()
process.start()

View File

@ -9,6 +9,22 @@ from ConsoleWindow import ConsoleWindow
from session.Process import Process from session.Process import Process
import sugar.env import sugar.env
class DbusProcess(Process):
def __init__(self):
config = sugar.env.get_dbus_config()
cmd = "dbus-daemon --print-address --config-file %s" % config
Process.__init__(self, cmd)
def get_name(self):
return 'Dbus'
def start(self):
Process.start(self, True)
dbus_file = os.fdopen(self._stdout)
addr = dbus_file.readline().strip()
dbus_file.close()
os.environ["DBUS_SESSION_BUS_ADDRESS"] = addr
class MatchboxProcess(Process): class MatchboxProcess(Process):
def __init__(self): def __init__(self):
kbd_config = os.path.join(sugar.env.get_data_dir(), 'kbdconfig') kbd_config = os.path.join(sugar.env.get_data_dir(), 'kbdconfig')
@ -26,6 +42,9 @@ class Session:
"""Takes care of running the shell and all the sugar processes""" """Takes care of running the shell and all the sugar processes"""
def start(self): def start(self):
"""Start the session""" """Start the session"""
process = DbusProcess()
process.start()
process = MatchboxProcess() process = MatchboxProcess()
process.start() process.start()