Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@member.fsf.org>2009-07-30 11:29:52 (GMT)
committer Aleksey Lim <alsroot@member.fsf.org>2009-07-30 11:29:52 (GMT)
commita2f20f39ff359ecc3ea4430d0dfe7cb3d75dd320 (patch)
tree901e2fc5606104101071299ac47aaceeaf85ccfd
parente03fd4ddde95d8fcdf857f6cbdb0b05e9fd36471 (diff)
Fix review issues
-rw-r--r--examples/radiopalette.py34
-rw-r--r--src/sugar/activity/activity.py325
-rw-r--r--src/sugar/graphics/radiopalette.py49
-rw-r--r--src/sugar/graphics/style.py2
-rw-r--r--src/sugar/graphics/toolbar.py17
5 files changed, 251 insertions, 176 deletions
diff --git a/examples/radiopalette.py b/examples/radiopalette.py
index a553873..85b43ce 100644
--- a/examples/radiopalette.py
+++ b/examples/radiopalette.py
@@ -17,33 +17,30 @@ box.pack_start(toolbar, False)
text_view = gtk.TextView()
box.pack_start(text_view)
-def echo(button):
+def echo(button, label):
if not button.props.active:
return
- text_view.props.buffer.props.text += "\n" + button.props.tooltip
+ text_view.props.buffer.props.text += "\n" + label
# RadioMenuButton
palette = RadioPalette()
group = RadioToolButton(
- icon_name='document-open',
- tooltip='menu.document-open')
-group.connect('clicked', lambda button: echo(button))
+ icon_name='document-open')
+group.connect('clicked', lambda button: echo(button, 'document-open'))
palette.append(group, 'menu.document-open')
button = RadioToolButton(
icon_name='document-save',
- group=group,
- tooltip='menu.document-save')
-button.connect('clicked', lambda button: echo(button))
+ group=group)
+button.connect('clicked', lambda button: echo(button, 'document-save'))
palette.append(button, 'menu.document-save')
button = RadioToolButton(
icon_name='document-send',
- group=group,
- tooltip='menu.document-send')
-button.connect('clicked', lambda button: echo(button))
+ group=group)
+button.connect('clicked', lambda button: echo(button, 'document-send'))
palette.append(button, 'menu.document-send')
button = RadioMenuButton(palette=palette)
@@ -54,23 +51,20 @@ toolbar.insert(button, -1)
palette = RadioPalette()
group = RadioToolButton(
- icon_name='document-open',
- tooltip='menu.document-open')
-group.connect('clicked', lambda button: echo(button))
+ icon_name='document-open')
+group.connect('clicked', lambda button: echo(button, 'document-open'))
palette.append(group, 'menu.document-open')
button = RadioToolButton(
icon_name='document-save',
- group=group,
- tooltip='menu.document-save')
-button.connect('clicked', lambda button: echo(button))
+ group=group)
+button.connect('clicked', lambda button: echo(button, 'document-save'))
palette.append(button, 'menu.document-save')
button = RadioToolButton(
icon_name='document-send',
- group=group,
- tooltip='menu.document-send')
-button.connect('clicked', lambda button: echo(button))
+ group=group)
+button.connect('clicked', lambda button: echo(button, 'document-send'))
palette.append(button, 'menu.document-send')
button = RadioToolsButton(palette=palette)
diff --git a/src/sugar/activity/activity.py b/src/sugar/activity/activity.py
index 7b6c094..28bb935 100644
--- a/src/sugar/activity/activity.py
+++ b/src/sugar/activity/activity.py
@@ -61,7 +61,7 @@ import dbus
import dbus.service
import cjson
-from sugar import util
+from sugar import util
from sugar.presence import presenceservice
from sugar.activity.activityservice import ActivityService
from sugar.activity.namingalert import NamingAlert
@@ -101,6 +101,12 @@ class ActivityToolbar(gtk.Toolbar):
gtk.Toolbar.__init__(self)
self._activity = activity
+ self._updating_share = False
+
+ activity.connect('shared', self.__activity_shared_cb)
+ activity.connect('joined', self.__activity_shared_cb)
+ activity.connect('notify::max_participants',
+ self.__max_participants_changed_cb)
if activity.metadata:
self.title = gtk.Entry()
@@ -117,17 +123,66 @@ class ActivityToolbar(gtk.Toolbar):
self.insert(separator, -1)
separator.show()
- self.share = share_button(activity)
+ self.share = ToolComboBox(label_text=_('Share with:'))
+ self.share.combo.connect('changed', self.__share_changed_cb)
+ self.share.combo.append_item(SCOPE_PRIVATE, _('Private'), 'zoom-home')
+ self.share.combo.append_item(SCOPE_NEIGHBORHOOD, _('My Neighborhood'),
+ 'zoom-neighborhood')
self.insert(self.share, -1)
-
- self.keep = keep_button(activity)
+ self.share.show()
+
+ self._update_share()
+
+ self.keep = ToolButton(tooltip=_('Keep'))
+ client = gconf.client_get_default()
+ color = XoColor(client.get_string('/desktop/sugar/user/color'))
+ keep_icon = Icon(icon_name='document-save', xo_color=color)
+ self.keep.set_icon_widget(keep_icon)
+ keep_icon.show()
+ self.keep.props.accelerator = '<Ctrl>S'
+ self.keep.connect('clicked', self.__keep_clicked_cb)
self.insert(self.keep, -1)
+ self.keep.show()
- self.stop = stop_button(activity)
+ self.stop = ToolButton('activity-stop', tooltip=_('Stop'))
+ self.stop.props.accelerator = '<Ctrl>Q'
+ self.stop.connect('clicked', self.__stop_clicked_cb)
self.insert(self.stop, -1)
+ self.stop.show()
self._update_title_sid = None
+ def _update_share(self):
+ self._updating_share = True
+
+ if self._activity.props.max_participants == 1:
+ self.share.hide()
+
+ if self._activity.get_shared():
+ self.share.set_sensitive(False)
+ self.share.combo.set_active(1)
+ else:
+ self.share.set_sensitive(True)
+ self.share.combo.set_active(0)
+
+ self._updating_share = False
+
+ def __share_changed_cb(self, combo):
+ if self._updating_share:
+ return
+
+ model = self.share.combo.get_model()
+ it = self.share.combo.get_active_iter()
+ (scope, ) = model.get(it, 0)
+ if scope == SCOPE_NEIGHBORHOOD:
+ self._activity.share()
+
+ def __keep_clicked_cb(self, button):
+ self._activity.copy()
+
+ def __stop_clicked_cb(self, button):
+ self._activity.close()
+
def __jobject_updated_cb(self, jobject):
self.title.set_text(jobject['title'])
@@ -160,9 +215,15 @@ class ActivityToolbar(gtk.Toolbar):
self.insert(tool_item, -1)
tool_item.show()
+ def __activity_shared_cb(self, activity):
+ self._update_share()
+
+ def __max_participants_changed_cb(self, activity, pspec):
+ self._update_share()
+
class EditToolbar(gtk.Toolbar):
"""Provides the standard edit toolbar for Activities.
-
+
Members:
undo -- the undo button
redo -- the redo button
@@ -196,20 +257,30 @@ class EditToolbar(gtk.Toolbar):
def __init__(self):
gtk.Toolbar.__init__(self)
- self.undo = undo_button()
+ self.undo = ToolButton('edit-undo')
+ self.undo.set_tooltip(_('Undo'))
self.insert(self.undo, -1)
+ self.undo.show()
- self.redo = redo_button()
+ self.redo = ToolButton('edit-redo')
+ self.redo.set_tooltip(_('Redo'))
self.insert(self.redo, -1)
+ self.redo.show()
- self.separator = separator()
+ self.separator = gtk.SeparatorToolItem()
+ self.separator.set_draw(True)
self.insert(self.separator, -1)
+ self.separator.show()
- self.copy = copy_button()
+ self.copy = ToolButton('edit-copy')
+ self.copy.set_tooltip(_('Copy'))
self.insert(self.copy, -1)
+ self.copy.show()
- self.paste = paste_button()
+ self.paste = ToolButton('edit-paste')
+ self.paste.set_tooltip(_('Paste'))
self.insert(self.paste, -1)
+ self.paste.show()
class ActivityToolbox(Toolbox):
"""Creates the Toolbox for the Activity
@@ -962,6 +1033,126 @@ class Activity(Window, gtk.Container):
# DEPRECATED
_shared_activity = property(lambda self: self.shared_activity, None)
+class ActivityToolbarButton(ToolbarButton):
+ def __init__(self, activity, **kwargs):
+ from jarabe.journal.misc import get_icon_name
+
+ toolbar = ActivityToolbar(activity)
+ toolbar.stop.hide()
+
+ ToolbarButton.__init__(self, page=toolbar, **kwargs)
+
+ self.activity = activity
+
+ client = gconf.client_get_default()
+ color = XoColor(client.get_string('/desktop/sugar/user/color'))
+ icon = Icon(file=get_icon_name(activity.metadata), xo_color=color)
+ icon.show()
+ self.set_icon_widget(icon)
+
+ def expander(self):
+ separator = gtk.SeparatorToolItem()
+ separator.props.draw = False
+ separator.set_expand(True)
+ separator.show()
+ return separator
+
+ def stop_button(self, **kwargs):
+ stop = ToolButton('activity-stop', tooltip=_('Stop'), **kwargs)
+ stop.props.accelerator = '<Ctrl>Q'
+ stop.connect('clicked', self.__stop_button_clicked_cb)
+ stop.show()
+ return stop
+
+ def __stop_button_clicked_cb(self, button):
+ self.activity.close()
+
+ def undo_button(self, **kwargs):
+ undo = ToolButton('edit-undo', **kwargs)
+ undo.set_tooltip(_('Undo'))
+ undo.show()
+ return undo
+
+ def redo_button(self, **kwargs):
+ redo = ToolButton('edit-redo', **kwargs)
+ redo.set_tooltip(_('Redo'))
+ redo.show()
+ return redo
+
+ def separator(self, **kwargs):
+ separator = gtk.SeparatorToolItem(**kwargs)
+ separator.set_draw(True)
+ separator.show()
+ return separator
+
+ def copy_button(self, **kwargs):
+ copy = ToolButton('edit-copy', **kwargs)
+ copy.set_tooltip(_('Copy'))
+ copy.show()
+ return copy
+
+ def paste_button(self, **kwargs):
+ paste = ToolButton('edit-paste', **kwargs)
+ paste.set_tooltip(_('Paste'))
+ paste.show()
+ return paste
+
+ def share_button(self):
+ palette = RadioPalette()
+
+ private = RadioToolButton(
+ icon_name='zoom-home')
+ palette.append(private, _('Private'))
+
+ neighborhood = RadioToolButton(
+ icon_name='zoom-neighborhood',
+ group=private)
+ neighborhood_handle = neighborhood.connect('clicked',
+ self.__neighborhood_clicked_cb)
+ palette.append(neighborhood, _('My Neighborhood'))
+
+ self.activity.connect('shared', self.__update_share)
+ self.activity.connect('joined', self.__update_share)
+
+ share = RadioMenuButton(palette=palette)
+ share.show()
+
+ return share
+
+ def __neighborhood_clicked_cb(self, button):
+ self.activity.share()
+
+ def __update_share(self, activity):
+ neighborhood.handler_block(neighborhood_handle)
+ try:
+ if self.activity.get_shared():
+ private.props.sensitive = False
+ neighborhood.props.sensitive = False
+ neighborhood.props.active = True
+ else:
+ private.props.sensitive = True
+ neighborhood.props.sensitive = True
+ private.props.active = True
+ finally:
+ neighborhood.handler_unblock(neighborhood_handle)
+
+ def keep_button(self, **kwargs):
+ client = gconf.client_get_default()
+ color = XoColor(client.get_string('/desktop/sugar/user/color'))
+ keep_icon = Icon(icon_name='document-save', xo_color=color)
+ keep_icon.show()
+
+ keep = ToolButton(tooltip=_('Keep'), **kwargs)
+ keep.set_icon_widget(keep_icon)
+ keep.props.accelerator = '<Ctrl>S'
+ keep.connect('clicked', self.__keep_button_clicked)
+ keep.show()
+
+ return keep
+
+ def __keep_button_clicked(self, button):
+ self.activity.copy()
+
_session = None
def _get_session():
@@ -975,7 +1166,7 @@ def _get_session():
def get_bundle_name():
"""Return the bundle name for the current process' bundle"""
return os.environ['SUGAR_BUNDLE_NAME']
-
+
def get_bundle_path():
"""Return the bundle path for the current process' bundle"""
return os.environ['SUGAR_BUNDLE_PATH']
@@ -993,113 +1184,3 @@ def show_object_in_journal(object_id):
obj = bus.get_object(J_DBUS_SERVICE, J_DBUS_PATH)
journal = dbus.Interface(obj, J_DBUS_INTERFACE)
journal.ShowObject(object_id)
-
-def toolbar(activity):
- from jarabe.journal.misc import get_icon_name
-
- toolbar = ActivityToolbar(activity)
- toolbar.stop.hide()
- activity_button = ToolbarButton(page=toolbar)
- activity_button.show()
-
- client = gconf.client_get_default()
- color = XoColor(client.get_string('/desktop/sugar/user/color'))
- icon = Icon(file=get_icon_name(activity.metadata), xo_color=color)
- icon.show()
- activity_button.set_icon_widget(icon)
-
- return activity_button
-
-def expander():
- separator = gtk.SeparatorToolItem()
- separator.props.draw = False
- separator.set_expand(True)
- separator.show()
- return separator
-
-def stop_button(activity, **kwargs):
- stop = ToolButton('activity-stop', tooltip=_('Stop'), **kwargs)
- stop.props.accelerator = '<Ctrl>Q'
- stop.connect('clicked', lambda button: activity.close())
- stop.show()
- return stop
-
-def undo_button(**kwargs):
- undo = ToolButton('edit-undo', **kwargs)
- undo.set_tooltip(_('Undo'))
- undo.show()
- return undo
-
-def redo_button(**kwargs):
- redo = ToolButton('edit-redo', **kwargs)
- redo.set_tooltip(_('Redo'))
- redo.show()
- return redo
-
-def separator(**kwargs):
- separator = gtk.SeparatorToolItem(**kwargs)
- separator.set_draw(True)
- separator.show()
- return separator
-
-def copy_button(**kwargs):
- copy = ToolButton('edit-copy', **kwargs)
- copy.set_tooltip(_('Copy'))
- copy.show()
- return copy
-
-def paste_button(**kwargs):
- paste = ToolButton('edit-paste', **kwargs)
- paste.set_tooltip(_('Paste'))
- paste.show()
- return paste
-
-def share_button(activity, **kwargs):
- palette = RadioPalette()
-
- private = RadioToolButton(
- icon_name='zoom-home')
- palette.append(private, _('Private'))
-
- neighborhood = RadioToolButton(
- icon_name='zoom-neighborhood',
- group=private)
- neighborhood_handle = neighborhood.connect('clicked',
- lambda button: activity.share())
- palette.append(neighborhood, _('My Neighborhood'))
-
- def update_share():
- neighborhood.handler_block(neighborhood_handle)
- try:
- if activity.get_shared():
- private.props.sensitive = False
- neighborhood.props.sensitive = False
- neighborhood.props.active = True
- else:
- private.props.sensitive = True
- neighborhood.props.sensitive = True
- private.props.active = True
- finally:
- neighborhood.handler_unblock(neighborhood_handle)
-
- activity.connect('shared', lambda activity: update_share())
- activity.connect('joined', lambda activity: update_share())
-
- share = RadioMenuButton(palette=palette)
- share.show()
-
- return share
-
-def keep_button(activity, **kwargs):
- client = gconf.client_get_default()
- color = XoColor(client.get_string('/desktop/sugar/user/color'))
- keep_icon = Icon(icon_name='document-save', xo_color=color)
- keep_icon.show()
-
- keep = ToolButton(tooltip=_('Keep'), **kwargs)
- keep.set_icon_widget(keep_icon)
- keep.props.accelerator = '<Ctrl>S'
- keep.connect('clicked', lambda button: activity.copy())
- keep.show()
-
- return keep
diff --git a/src/sugar/graphics/radiopalette.py b/src/sugar/graphics/radiopalette.py
index b76ae4c..d9ca289 100644
--- a/src/sugar/graphics/radiopalette.py
+++ b/src/sugar/graphics/radiopalette.py
@@ -24,7 +24,7 @@ from sugar.graphics import style
from sugar.graphics.toolbutton import ToolButton
from sugar.graphics.palette import Palette
-class RadioPaletteButton(ToolButton):
+class RadioMenuButton(ToolButton):
def __init__(self, **kwargs):
ToolButton.__init__(self, **kwargs)
self.selected_button = None
@@ -39,10 +39,7 @@ class RadioPaletteButton(ToolButton):
return
self.props.palette.update_button()
-class RadioMenuButton(RadioPaletteButton):
- def __init__(self, **kwargs):
- RadioPaletteButton.__init__(self, **kwargs)
-
+ # We use do_clicked to have a chance to override it in RadioToolsButton
def do_clicked(self):
if not self.palette:
return
@@ -58,22 +55,21 @@ class RadioMenuButton(RadioPaletteButton):
return
if self.palette.is_up():
- type = gtk.ARROW_DOWN
- else:
type = gtk.ARROW_UP
+ else:
+ type = gtk.ARROW_DOWN
- a = self.allocation
+ alloc = self.allocation
+ x = alloc.x + alloc.width / 2 - style.TOOLBAR_ARROW_SIZE / 2
+ y = alloc.y + alloc.height - int(style.TOOLBAR_ARROW_SIZE * .85)
self.get_style().paint_arrow(event.window,
- gtk.STATE_NORMAL, gtk.SHADOW_IN, event.area, self,
+ gtk.STATE_NORMAL, gtk.SHADOW_NONE, event.area, self,
None, type, True,
- a.x + a.width/2 - style.TOOLBAR_ARROW_SIZE/2,
- a.y + a.height - style.TOOLBAR_ARROW_SIZE - \
- style._FOCUS_LINE_WIDTH,
- style.TOOLBAR_ARROW_SIZE, style.TOOLBAR_ARROW_SIZE)
+ x, y, style.TOOLBAR_ARROW_SIZE, style.TOOLBAR_ARROW_SIZE)
-class RadioToolsButton(RadioPaletteButton):
+class RadioToolsButton(RadioMenuButton):
def __init__(self, **kwargs):
- RadioPaletteButton.__init__(self, **kwargs)
+ RadioMenuButton.__init__(self, **kwargs)
def do_clicked(self):
if not self.selected_button:
@@ -84,26 +80,26 @@ class RadioPalette(Palette):
def __init__(self, **kwargs):
Palette.__init__(self, **kwargs)
- self.top = gtk.HBox()
- self.top.show()
- self.set_content(self.top)
+ self.button_box = gtk.HBox()
+ self.button_box.show()
+ self.set_content(self.button_box)
def append(self, button, label):
- children = self.top.get_children()
+ children = self.button_box.get_children()
- # palette's button should not have sub-palettes
- button.palette = None
+ if button.palette is not None:
+ raise RuntimeError("Palette's button should not have sub-palettes")
button.show()
button.connect('clicked', self.__clicked_cb)
- self.top.pack_start(button, fill=False)
+ self.button_box.pack_start(button, fill=False)
button.__palette_label = label
if not children:
self.__clicked_cb(button, True)
def update_button(self):
- for i in self.top.get_children():
+ for i in self.button_box.get_children():
self.__clicked_cb(i, True)
def __clicked_cb(self, button, quiet=False):
@@ -114,8 +110,11 @@ class RadioPalette(Palette):
if not quiet:
self.popdown(immediate=True)
- parent = self.invoker and self.invoker.parent
- if not isinstance(parent, RadioPaletteButton):
+ if self.invoker is not None:
+ parent = self.invoker.parent
+ else:
+ parent = None
+ if not isinstance(parent, RadioMenuButton):
return
parent.set_icon(button.props.icon_name)
diff --git a/src/sugar/graphics/style.py b/src/sugar/graphics/style.py
index 438aab7..a37b745 100644
--- a/src/sugar/graphics/style.py
+++ b/src/sugar/graphics/style.py
@@ -132,4 +132,4 @@ COLOR_TEXT_FIELD_GREY = Color('#E5E5E5')
PALETTE_CURSOR_DISTANCE = zoom(10)
-TOOLBAR_ARROW_SIZE = 8
+TOOLBAR_ARROW_SIZE = zoom(24)
diff --git a/src/sugar/graphics/toolbar.py b/src/sugar/graphics/toolbar.py
index abeceee..6e3666e 100644
--- a/src/sugar/graphics/toolbar.py
+++ b/src/sugar/graphics/toolbar.py
@@ -88,9 +88,9 @@ class ToolbarButton(ToolButton):
if not self.expanded or self.palette and self.palette.is_up():
ToolButton.do_expose_event(self, event)
if self.palette and self.palette.is_up():
- _paint_arrow(self, event, gtk.ARROW_DOWN)
- else:
_paint_arrow(self, event, gtk.ARROW_UP)
+ else:
+ _paint_arrow(self, event, gtk.ARROW_DOWN)
return
alloc = self.allocation
@@ -107,7 +107,7 @@ class ToolbarButton(ToolButton):
alloc.width - style._FOCUS_LINE_WIDTH*2, alloc.height)
gtk.ToolButton.do_expose_event(self, event)
- _paint_arrow(self, event, gtk.ARROW_DOWN)
+ _paint_arrow(self, event, gtk.ARROW_UP)
class Toolbar(gtk.VBox):
def __init__(self, padding=style.TOOLBOX_HORIZONTAL_PADDING):
@@ -394,10 +394,11 @@ def _align(box_class, widget):
return box
def _paint_arrow(widget, event, type):
- a = widget.allocation
+ alloc = widget.allocation
+ x = alloc.x + alloc.width / 2 - style.TOOLBAR_ARROW_SIZE / 2
+ y = alloc.y + alloc.height - int(style.TOOLBAR_ARROW_SIZE * .85)
+
widget.get_style().paint_arrow(event.window,
- gtk.STATE_NORMAL, gtk.SHADOW_IN, event.area, widget,
+ gtk.STATE_NORMAL, gtk.SHADOW_NONE, event.area, widget,
None, type, True,
- a.x + a.width/2 - style.TOOLBAR_ARROW_SIZE/2,
- a.y + a.height - style.TOOLBAR_ARROW_SIZE - style._FOCUS_LINE_WIDTH,
- style.TOOLBAR_ARROW_SIZE, style.TOOLBAR_ARROW_SIZE)
+ x, y, style.TOOLBAR_ARROW_SIZE, style.TOOLBAR_ARROW_SIZE)