[PATCH] New Toolbar for Physics Activity

akashg1611 akashg1611 at gmail.com
Sun Jun 20 15:41:05 EDT 2010


The following patch incorporates the new toolbar design in
the Physics Activity. Also attached is the SVG icon of the
Create button, as was required for the new toolbar.

Signed-off-by: akashg1611 <akashg1611 at gmail.com>
Reviewed-by: James Cameron <quozl at laptop.org>
---
 activity.py              |   76 ++++++++++++++++++++++++++--------------------
 icons/toolbar-create.svg |   44 ++++++++++++++++++++++++++
 2 files changed, 87 insertions(+), 33 deletions(-)
 create mode 100644 icons/toolbar-create.svg

diff --git a/activity.py b/activity.py
index 273a001..6032579 100644
--- a/activity.py
+++ b/activity.py
@@ -21,6 +21,10 @@ import olpcgames
 import pygame
 from sugar.graphics.radiotoolbutton import RadioToolButton
 from sugar.graphics.toolbutton import ToolButton
+from sugar.graphics.toolbarbox import ToolbarBox
+from sugar.graphics.toolbarbox import ToolbarButton
+from sugar.activity.widgets import ActivityToolbarButton
+from sugar.activity.widgets import StopButton
 from sugar.activity import activity
 from gettext import gettext as _
 import gtk
@@ -34,6 +38,43 @@ class PhysicsActivity(olpcgames.PyGameActivity):
         super(PhysicsActivity, self).__init__(handle)
         self.metadata['mime_type'] = 'application/x-physics-activity'
 
+        toolbar_box = ToolbarBox()
+
+        activity_button = ActivityToolbarButton(self)
+        toolbar_box.toolbar.insert(activity_button, 0)
+        activity_button.page.keep.props.accelerator = '<Ctrl><Shift>S'
+        activity_button.show()
+
+        create_toolbar = self._create_create_toolbar()
+        create_toolbar_button = ToolbarButton(
+                page=create_toolbar,
+                icon_name='toolbar-create')
+        create_toolbar.show()
+        toolbar_box.toolbar.insert(create_toolbar_button, -1)
+        create_toolbar_button.show()
+
+        stop_play = ToolButton('media-playback-stop')
+        stop_play_state = True
+        stop_play.set_tooltip(_("Stop"))
+        stop_play.set_accelerator(_('<ctrl>space'))
+        stop_play.connect('clicked', self.stop_play_cb)
+        toolbar_box.toolbar.insert(stop_play, -1)
+        stop_play.show()
+
+        separator = gtk.SeparatorToolItem()
+        separator.props.draw = False
+        separator.set_expand(True)
+        toolbar_box.toolbar.insert(separator, -1)
+        separator.show()
+
+        stop_button = StopButton(self)
+        stop_button.props.accelerator = '<Ctrl><Shift>Q'
+        toolbar_box.toolbar.insert(stop_button, -1)
+        stop_button.show()
+
+        self.set_toolbar_box(toolbar_box)
+        toolbar_box.show()
+
     def write_file(self, file_path):
         """Over-ride olpcgames write_file so that title keeps working.
         """
@@ -46,31 +87,8 @@ class PhysicsActivity(olpcgames.PyGameActivity):
         event.block()
         event.retire() # <- without this, title editing stops updating
 
-    # setup the toolbar
-    def build_toolbar(self):        
-        # make a toolbox
-        toolbox = activity.ActivityToolbox(self)
-         
-        # modify the Activity tab
-        activity_toolbar = toolbox.get_activity_toolbar()
-        activity_toolbar.share.props.visible = False
-        self.blocklist = [] 
-        # make a 'create' toolbar
+    def _create_create_toolbar(self):
         create_toolbar = gtk.Toolbar()
-        
-        # stop/play button
-        self.stop_play_state = True
-        self.stop_play = ToolButton('media-playback-stop')
-        self.stop_play.set_tooltip(_("Stop"))
-        self.stop_play.set_accelerator(_('<ctrl>space'))
-        self.stop_play.connect('clicked', self.stop_play_cb)
-        create_toolbar.insert(self.stop_play, 0)
-        self.stop_play.show()
-
-        separator = gtk.SeparatorToolItem()
-        create_toolbar.insert(separator, 1)
-        separator.show()
-        
         # make + add the component buttons
         self.radioList = {}
         firstButton = None
@@ -87,15 +105,7 @@ class PhysicsActivity(olpcgames.PyGameActivity):
             create_toolbar.insert(button,-1)    
             button.show()
             self.radioList[button] = c.name
-
-        # add the toolbars to the toolbox
-        toolbox.add_toolbar(_("Create"),create_toolbar)
-        create_toolbar.show()       
-        
-        toolbox.show()
-        self.set_toolbox(toolbox)
-        toolbox.set_current_toolbar(1)
-        return activity_toolbar
+        return create_toolbar
 
     def stop_play_cb(self, button):
         pygame.event.post(olpcgames.eventwrap.Event(pygame.USEREVENT, action="stop_start_toggle"))
diff --git a/icons/toolbar-create.svg b/icons/toolbar-create.svg
new file mode 100644
index 0000000..ea7c0ce
--- /dev/null
+++ b/icons/toolbar-create.svg
@@ -0,0 +1,44 @@
+<?xml version="1.0" ?><!-- Created with Inkscape (http://www.inkscape.org/) --><!DOCTYPE svg  PUBLIC '-//W3C//DTD SVG 1.1//EN'  'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd' [
+	<!ENTITY stroke_color "none">
+	<!ENTITY fill_color "#ffffff">
+]><svg height="48pt" id="svg1" inkscape:version="0.47 r22583" sodipodi:docname="toolbar-create.svg" sodipodi:version="0.32" style="" version="1.0" width="48pt" x="0" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0">
+  <metadata id="metadata2985" style="">
+    <rdf:RDF style="">
+      <cc:Work rdf:about="" style="">
+        <dc:format style="">image/svg+xml</dc:format>
+        <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" style=""/>
+        <dc:title style=""/>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview bordercolor="#666666" borderopacity="1.0" horizgrid="false" id="base" inkscape:current-layer="svg1" inkscape:cx="-10.626905" inkscape:cy="21.859944" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:window-height="825" inkscape:window-maximized="1" inkscape:window-width="1440" inkscape:window-x="0" inkscape:window-y="24" inkscape:zoom="4.9119411" pagecolor="#ffffff" showgrid="false" snaptogrid="false" snaptoguides="false" style="" vertgrid="false"/>
+  <defs id="defs3" style="">
+    <inkscape:perspective id="perspective2987" inkscape:persp3d-origin="30 : 20 : 1" inkscape:vp_x="0 : 30 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="60 : 30 : 1" sodipodi:type="inkscape:persp3d" style=""/>
+    <linearGradient id="linearGradient570" style="">
+      <stop id="stop571" offset="0" style="stop-color:#ffffff;stop-opacity:1;"/>
+      <stop id="stop572" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/>
+    </linearGradient>
+    <linearGradient id="linearGradient563" style="">
+      <stop id="stop564" offset="0.00000000" style="stop-color:#666666;stop-opacity:1;"/>
+      <stop id="stop565" offset="1.00000000" style="stop-color:#666666;stop-opacity:1;"/>
+    </linearGradient>
+    <linearGradient gradientTransform="matrix(1.04498,0,0,0.9569561,-74.308708,-2.6466114)" gradientUnits="userSpaceOnUse" id="linearGradient566" style="" x1="23.402853" x2="35.835532" xlink:href="#linearGradient563" y1="23.747154" y2="36.390283"/>
+    <linearGradient id="linearGradient569" style="" x1="0.009905" x2="0.985224" xlink:href="#linearGradient570" y1="0.007809" y2="1.015625"/>
+    <linearGradient gradientTransform="scale(0.999995,1.000005)" id="linearGradient573" style="" x1="0.015742" x2="0.976382" xlink:href="#linearGradient570" y1="0.015626" y2="0.999995"/>
+    <linearGradient id="linearGradient575" style="" x1="0.006623" x2="0.973510" xlink:href="#linearGradient570" y1="0.007813" y2="0.984375"/>
+    <linearGradient gradientTransform="scale(1.2487241,0.80081741)" gradientUnits="userSpaceOnUse" id="linearGradient578" style="" x1="4.5679298" x2="11.042724" xlink:href="#linearGradient570" y1="46.001992" y2="52.375657"/>
+    <linearGradient id="linearGradient583" style="" x1="0.012999" x2="1.012987" xlink:href="#linearGradient570" y1="0.015680" y2="1.000001"/>
+    <linearGradient id="linearGradient637" style="" x1="0.07954545" x2="0.95454544" xlink:href="#linearGradient563" y1="0.06250000" y2="0.97656250"/>
+    <linearGradient id="linearGradient640" style="" x1="0.03225806" x2="0.99596775" xlink:href="#linearGradient563" y1="0.05468750" y2="1.00000000"/>
+    <linearGradient id="linearGradient645" style="" x1="0.010877" x2="0.989090" xlink:href="#linearGradient570" y1="0.038449" y2="0.987177"/>
+    <linearGradient id="linearGradient646" style="" x1="0.056578" x2="0.867923" xlink:href="#linearGradient570" y1="0.023450" y2="0.976563"/>
+    <linearGradient id="linearGradient647" style="" x1="0.000007" x2="0.951807" xlink:href="#linearGradient570" y1="0.000000" y2="0.984375"/>
+    <linearGradient id="linearGradient675" style="" x1="0.056605" x2="0.943396" xlink:href="#linearGradient570" y1="0.015625" y2="0.984375"/>
+    <linearGradient id="linearGradient676" style="" x1="0.011765" x2="1.011765" xlink:href="#linearGradient570" y1="-0.000000" y2="1.015625"/>
+    <linearGradient id="linearGradient684" style="" x1="0.09210526" x2="0.93421054" xlink:href="#linearGradient563" y1="0.12500000" y2="0.92187500"/>
+    <linearGradient id="linearGradient685" style="" x1="0.06603774" x2="0.94339621" xlink:href="#linearGradient563" y1="0.07812500" y2="0.95312500"/>
+  </defs>
+  <path d="m 1.6714541,46.028933 c 2.5395548,1.861985 4.9782017,-5.378683 9.5887409,1.564511 5.202194,7.839595 -2.2748278,8.004289 -1.5908585,11.218364 0.5434475,2.15168 7.8018915,0.78452 9.4836775,-1.356607 1.708234,-2.174518 -1.328528,-8.961765 0.686245,-11.589945 6.679753,-8.71269 16.362463,-17.130631 25.397539,-22.432085 2.941573,-1.725842 8.191049,3.04221 10.532509,1.349931 2.272038,-1.642373 4.894662,-10.122847 3.307654,-11.353779 C 56.639324,11.47279 52.997644,20.80289 48.606866,13.989506 44.186925,7.129412 
+	  52.142642,4.5631634 51.662085,1.862198 51.217131,-0.33348689 43.318205,0.8930759 41.301114,3.1327101 39.311696,5.3415778 39.98847,13.033259 37.810293,15.81846 31.052456,24.45924 23.378731,32.160168 14.492957,37.410639 11.915703,38.933488 7.3485542,34.119614 5.2533614,35.52793 3.0747599,36.992339 0.03942982,44.719057 1.6714541,46.028933 z" id="path636" sodipodi:nodetypes="cccsssscscssssc" style="font-size:12px;opacity:1.0;fill:&fill_color;;fill-rule:evenodd;stroke-width:12.5"/>
+  <path d="m 36.034635,17.45063 -4.701433,-2.805627 -4.976523,2.282375 1.215487,-5.338314 -3.708498,-4.0276614 5.452645,-0.4936332 2.684545,-4.7716069 2.154433,5.0332324 5.367638,1.0786459 -4.121133,3.6043422 0.632839,5.438247 z" id="path3942" inkscape:flatsided="false" inkscape:randomized="0" inkscape:rounded="0" sodipodi:arg1="0.9964915" sodipodi:arg2="1.62481" sodipodi:cx="31.555754" sodipodi:cy="10.528723" sodipodi:r1="8.2445841" sodipodi:r2="4.122292" sodipodi:sides="5" sodipodi:type="star" style="opacity:1.0;fill:&fill_color;;fill-opacity:1.0" transform="matrix(1.7410551,0,0,1.8060416,-29.492251,-3.6830718)"/>
+</svg>
-- 
1.7.1

-- 
James Cameron
http://quozl.linux.org.au/


More information about the Sugar-devel mailing list