[Sugar-devel] [PATCH] Fixes for Pippy layout: #1927

Anish Mangal anishmangal2002 at gmail.com
Thu May 6 01:03:21 EDT 2010


Changes
-------
[1] The pippy layout now scales according to screen size.
[2] Replaced [h,v]boxes by [h,v]panes to make them adjustable.
[3] Moved the [stop, run, clear] buttons to the activity toolbar.
[4] Added new icons for [stop, run, clear] toolbar buttons.
[5] When the toolbar [stop, run, clear] buttons are clicked, they flash colour momentarily (minimum 400 milliseconds)

Signed-off-by: Anish Mangal <anishmangal2002 at gmail.com>
---
 icons/eraser_bw.svg    |   84 +++++++++++++++++++++++++++++++
 icons/eraser_color.svg |   83 ++++++++++++++++++++++++++++++
 icons/run_bw.svg       |  114 +++++++++++++++++++++++++++++++++++++++++
 icons/run_color.svg    |  114 +++++++++++++++++++++++++++++++++++++++++
 icons/stopit_bw.svg    |  100 ++++++++++++++++++++++++++++++++++++
 icons/stopit_color.svg |   97 +++++++++++++++++++++++++++++++++++
 pippy_app.py           |  131 ++++++++++++++++++++++++++++++-----------------
 7 files changed, 675 insertions(+), 48 deletions(-)
 create mode 100644 icons/eraser_bw.svg
 create mode 100644 icons/eraser_color.svg
 create mode 100644 icons/run_bw.svg
 create mode 100644 icons/run_color.svg
 create mode 100644 icons/stopit_bw.svg
 create mode 100644 icons/stopit_color.svg

diff --git a/icons/eraser_bw.svg b/icons/eraser_bw.svg
new file mode 100644
index 0000000..8409141
--- /dev/null
+++ b/icons/eraser_bw.svg
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.0"
+   width="44"
+   height="44"
+   id="svg2"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="eraser_bw.svg">
+  <metadata
+     id="metadata12">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="787"
+     inkscape:window-height="635"
+     id="namedview10"
+     showgrid="false"
+     inkscape:zoom="5.4883721"
+     inkscape:cx="26.978767"
+     inkscape:cy="26.011603"
+     inkscape:window-x="0"
+     inkscape:window-y="24"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg2" />
+  <defs
+     id="defs5">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 21.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="50 : 21.5 : 1"
+       inkscape:persp3d-origin="25 : 14.333333 : 1"
+       id="perspective14" />
+  </defs>
+  <g
+     transform="matrix(0.87048418,0,0,1.003782,0.58498874,1.169632)"
+     id="g3589"
+     style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
+    <path
+       d="M 36,25.875 36,17.5 48.5,4 47,14.5 36,25.875 z"
+       id="path2394"
+       style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <path
+       d="M 15,17.5 28.5,4 48.5,4 36,17.5 l -21,0 z"
+       id="path2390"
+       style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <path
+       d="M 22.800718,38.5 25.493716,28.5 36,17.5 36,25.875 22.800718,38.5 z"
+       id="path2392"
+       style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <path
+       d="M 3.9497307,28.5 15,17.5 l 21,0 -10.86535,11 -21.1849193,0 z"
+       id="path2388"
+       style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <path
+       d="m 0.26929982,38.5 3.59066428,-10 21.1849189,0 -2.603231,10 -22.17235218,0 z"
+       id="path2384"
+       style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+  </g>
+</svg>
diff --git a/icons/eraser_color.svg b/icons/eraser_color.svg
new file mode 100644
index 0000000..bda20d1
--- /dev/null
+++ b/icons/eraser_color.svg
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.0"
+   width="44"
+   height="44"
+   id="svg2"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="eraser_color.svg">
+  <metadata
+     id="metadata11">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="640"
+     inkscape:window-height="504"
+     id="namedview9"
+     showgrid="false"
+     inkscape:zoom="5.4883721"
+     inkscape:cx="25"
+     inkscape:cy="21.5"
+     inkscape:window-x="0"
+     inkscape:window-y="24"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg2" />
+  <defs
+     id="defs5">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 21.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="50 : 21.5 : 1"
+       inkscape:persp3d-origin="25 : 14.333333 : 1"
+       id="perspective13" />
+  </defs>
+  <g
+     id="g2819"
+     transform="matrix(0.87909457,0,0,1,0.01627991,0)">
+    <path
+       style="fill:#c44000;fill-opacity:1;stroke:#a00000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+       id="path2394"
+       d="m 36.61535,27.125 0,-8.375 12.5,-13.5 -1.5,10.5 -11,11.375 z" />
+    <path
+       style="fill:#c44000;fill-opacity:1;stroke:#a00000;stroke-width:1.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path2390"
+       d="m 15.61535,18.75 13.5,-13.5 20,0 -12.5,13.5 -21,0 z" />
+    <path
+       style="fill:#c4a000;fill-opacity:1;stroke:#a00000;stroke-width:1.5;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+       id="path2392"
+       d="m 23.416068,39.75 2.692998,-10 10.506284,-11 0,8.375 -13.199282,12.625 z" />
+    <path
+       style="fill:#c4a000;fill-opacity:1;stroke:#a00000;stroke-width:1.5;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+       id="path2388"
+       d="m 4.5650808,29.75 11.0502692,-11 21,0 -10.86535,11 -21.1849192,0 z" />
+    <path
+       style="fill:#e0d000;fill-opacity:1;stroke:#a00000;stroke-width:1.5;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+       id="path2384"
+       d="m 0.88464991,39.75 3.59066429,-10 21.1849188,0 -2.603231,10 -22.17235209,0 z" />
+  </g>
+</svg>
diff --git a/icons/run_bw.svg b/icons/run_bw.svg
new file mode 100644
index 0000000..35ea0cb
--- /dev/null
+++ b/icons/run_bw.svg
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   width="44"
+   height="44"
+   version="1.0"
+   sodipodi:docname="stopit_bw (copy).svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs5">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective9" />
+  </defs>
+  <sodipodi:namedview
+     inkscape:window-height="720"
+     inkscape:window-width="1278"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     guidetolerance="10.0"
+     gridtolerance="10.0"
+     objecttolerance="10.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base"
+     showgrid="false"
+     inkscape:zoom="2.8284271"
+     inkscape:cx="7.024162"
+     inkscape:cy="19.485782"
+     inkscape:window-x="0"
+     inkscape:window-y="24"
+     inkscape:current-layer="svg2"
+     inkscape:window-maximized="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2818" />
+  </sodipodi:namedview>
+  <path
+     sodipodi:type="star"
+     style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.50000000000000000;stroke-opacity:1"
+     id="path2386"
+     sodipodi:sides="8"
+     sodipodi:cx="6.154902"
+     sodipodi:cy="3.6254902"
+     sodipodi:r1="22.234058"
+     sodipodi:r2="20.541592"
+     sodipodi:arg1="0.36853512"
+     sodipodi:arg2="0.7612342"
+     inkscape:flatsided="true"
+     inkscape:rounded="0"
+     inkscape:randomized="0"
+     d="M 26.896078,11.635294 L 15.157342,23.955503 L -1.8549019,24.366666 L -14.175111,12.62793 L -14.586274,-4.3843137 L -2.8475378,-16.704523 L 14.164706,-17.115686 L 26.484915,-5.3769496 L 26.896078,11.635294 z"
+     transform="matrix(1.0676988,3.2621148e-2,-3.2621148e-2,1.0676988,15.546686,17.928289)" />
+  <path
+     sodipodi:type="star"
+     style="opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:3.31833665000000000;stroke-opacity:1"
+     id="path3158"
+     sodipodi:sides="8"
+     sodipodi:cx="6.154902"
+     sodipodi:cy="3.6254902"
+     sodipodi:r1="22.234058"
+     sodipodi:r2="20.541592"
+     sodipodi:arg1="0.36853512"
+     sodipodi:arg2="0.7612342"
+     inkscape:flatsided="true"
+     inkscape:rounded="0"
+     inkscape:randomized="0"
+     d="M 26.896078,11.635294 L 15.157342,23.955503 L -1.8549019,24.366666 L -14.175111,12.62793 L -14.586274,-4.3843137 L -2.8475378,-16.704523 L 14.164706,-17.115686 L 26.484915,-5.3769496 L 26.896078,11.635294 z"
+     transform="matrix(0.8982409,2.7775002e-2,-2.7443742e-2,0.9090831,16.347508,18.533176)" />
+  <path
+     sodipodi:type="star"
+     style="fill:#ffffff;fill-opacity:1"
+     id="path2824"
+     sodipodi:sides="3"
+     sodipodi:cx="5"
+     sodipodi:cy="15"
+     sodipodi:r1="14"
+     sodipodi:r2="7"
+     sodipodi:arg1="1.5707963"
+     sodipodi:arg2="2.6179939"
+     inkscape:flatsided="false"
+     inkscape:rounded="0"
+     inkscape:randomized="0"
+     d="M 5.0000004,29 -1.0621779,18.5 -7.1243558,8.0000003 5.0000002,8 17.124355,7.9999997 11.062178,18.5 5.0000004,29 z"
+     transform="matrix(-0.00257519,-0.78354679,0.82270363,-0.00245262,8.9373438,25.614132)" />
+</svg>
diff --git a/icons/run_color.svg b/icons/run_color.svg
new file mode 100644
index 0000000..753a746
--- /dev/null
+++ b/icons/run_color.svg
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   width="44"
+   height="44"
+   version="1.0"
+   sodipodi:docname="run_bw.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs5">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective9" />
+  </defs>
+  <sodipodi:namedview
+     inkscape:window-height="720"
+     inkscape:window-width="1278"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     guidetolerance="10.0"
+     gridtolerance="10.0"
+     objecttolerance="10.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base"
+     showgrid="false"
+     inkscape:zoom="2.8284271"
+     inkscape:cx="-56.261895"
+     inkscape:cy="19.485782"
+     inkscape:window-x="0"
+     inkscape:window-y="24"
+     inkscape:current-layer="svg2"
+     inkscape:window-maximized="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2818" />
+  </sodipodi:namedview>
+  <path
+     sodipodi:type="star"
+     style="opacity:1;fill:#008000;fill-opacity:1;stroke:none;stroke-width:1.50000000000000000;stroke-opacity:1"
+     id="path2386"
+     sodipodi:sides="8"
+     sodipodi:cx="6.154902"
+     sodipodi:cy="3.6254902"
+     sodipodi:r1="22.234058"
+     sodipodi:r2="20.541592"
+     sodipodi:arg1="0.36853512"
+     sodipodi:arg2="0.7612342"
+     inkscape:flatsided="true"
+     inkscape:rounded="0"
+     inkscape:randomized="0"
+     d="M 26.896078,11.635294 L 15.157342,23.955503 L -1.8549019,24.366666 L -14.175111,12.62793 L -14.586274,-4.3843137 L -2.8475378,-16.704523 L 14.164706,-17.115686 L 26.484915,-5.3769496 L 26.896078,11.635294 z"
+     transform="matrix(1.0676988,3.2621148e-2,-3.2621148e-2,1.0676988,15.546686,17.928289)" />
+  <path
+     sodipodi:type="star"
+     style="opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:3.31833665000000000;stroke-opacity:1"
+     id="path3158"
+     sodipodi:sides="8"
+     sodipodi:cx="6.154902"
+     sodipodi:cy="3.6254902"
+     sodipodi:r1="22.234058"
+     sodipodi:r2="20.541592"
+     sodipodi:arg1="0.36853512"
+     sodipodi:arg2="0.7612342"
+     inkscape:flatsided="true"
+     inkscape:rounded="0"
+     inkscape:randomized="0"
+     d="M 26.896078,11.635294 L 15.157342,23.955503 L -1.8549019,24.366666 L -14.175111,12.62793 L -14.586274,-4.3843137 L -2.8475378,-16.704523 L 14.164706,-17.115686 L 26.484915,-5.3769496 L 26.896078,11.635294 z"
+     transform="matrix(0.8982409,2.7775002e-2,-2.7443742e-2,0.9090831,16.347508,18.533176)" />
+  <path
+     sodipodi:type="star"
+     style="fill:#ffffff;fill-opacity:1"
+     id="path2824"
+     sodipodi:sides="3"
+     sodipodi:cx="5"
+     sodipodi:cy="15"
+     sodipodi:r1="14"
+     sodipodi:r2="7"
+     sodipodi:arg1="1.5707963"
+     sodipodi:arg2="2.6179939"
+     inkscape:flatsided="false"
+     inkscape:rounded="0"
+     inkscape:randomized="0"
+     d="M 5.0000004,29 -1.0621779,18.5 -7.1243558,8.0000003 5.0000002,8 17.124355,7.9999997 11.062178,18.5 5.0000004,29 z"
+     transform="matrix(-0.00257519,-0.78354679,0.82270363,-0.00245262,8.9373438,25.614132)" />
+</svg>
diff --git a/icons/stopit_bw.svg b/icons/stopit_bw.svg
new file mode 100644
index 0000000..6db8333
--- /dev/null
+++ b/icons/stopit_bw.svg
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   width="44"
+   height="44"
+   version="1.0"
+   sodipodi:docname="test.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs5">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective9" />
+  </defs>
+  <sodipodi:namedview
+     inkscape:window-height="720"
+     inkscape:window-width="1278"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     guidetolerance="10.0"
+     gridtolerance="10.0"
+     objecttolerance="10.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base"
+     showgrid="false"
+     inkscape:zoom="10"
+     inkscape:cx="7.024162"
+     inkscape:cy="19.082313"
+     inkscape:window-x="0"
+     inkscape:window-y="24"
+     inkscape:current-layer="svg2"
+     inkscape:window-maximized="0" />
+  <path
+     sodipodi:type="star"
+     style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.50000000000000000;stroke-opacity:1"
+     id="path2386"
+     sodipodi:sides="8"
+     sodipodi:cx="6.154902"
+     sodipodi:cy="3.6254902"
+     sodipodi:r1="22.234058"
+     sodipodi:r2="20.541592"
+     sodipodi:arg1="0.36853512"
+     sodipodi:arg2="0.7612342"
+     inkscape:flatsided="true"
+     inkscape:rounded="0"
+     inkscape:randomized="0"
+     d="M 26.896078,11.635294 L 15.157342,23.955503 L -1.8549019,24.366666 L -14.175111,12.62793 L -14.586274,-4.3843137 L -2.8475378,-16.704523 L 14.164706,-17.115686 L 26.484915,-5.3769496 L 26.896078,11.635294 z"
+     transform="matrix(1.0676988,3.2621148e-2,-3.2621148e-2,1.0676988,15.546686,17.928289)" />
+  <path
+     sodipodi:type="star"
+     style="opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:3.31833665000000000;stroke-opacity:1"
+     id="path3158"
+     sodipodi:sides="8"
+     sodipodi:cx="6.154902"
+     sodipodi:cy="3.6254902"
+     sodipodi:r1="22.234058"
+     sodipodi:r2="20.541592"
+     sodipodi:arg1="0.36853512"
+     sodipodi:arg2="0.7612342"
+     inkscape:flatsided="true"
+     inkscape:rounded="0"
+     inkscape:randomized="0"
+     d="M 26.896078,11.635294 L 15.157342,23.955503 L -1.8549019,24.366666 L -14.175111,12.62793 L -14.586274,-4.3843137 L -2.8475378,-16.704523 L 14.164706,-17.115686 L 26.484915,-5.3769496 L 26.896078,11.635294 z"
+     transform="matrix(0.8982409,2.7775002e-2,-2.7443742e-2,0.9090831,16.347508,18.533176)" />
+  <path
+     style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.5;stroke-opacity:1"
+     d="M 16.987782,36.466398 L 16.987782,31.060516 C 16.987782,31.060516 15.454015,30.38416 14.964253,29.880123 C 14.30166,29.198216 13.446606,27.097771 13.446606,27.097771 L 13.428206,15.466398 C 13.428206,15.466398 14.116058,14.43353 14.599464,14.48868 C 15.098301,14.545591 15.575838,15.466398 15.575838,15.466398 L 15.575838,21.466398 C 15.575838,21.466398 16.264462,22.047049 16.481899,22.038947 C 16.679317,22.031591 17.13801,21.466398 17.13801,21.466398 L 17.222322,11.716398 C 17.222322,11.716398 17.80243,10.809048 18.252488,10.825222 C 18.62827,10.838727 19.17994,11.716398 19.17994,11.716398 L 19.348567,18.466398 C 19.348567,18.466398 19.754261,19.166353 20.023077,19.17228 C 20.184998,19.17585 20.7451,18.466398 20.7451,18.466398 L 20.613273,8.4663984 C 20.613273,8.4663984 21.4426,7.4683451 21.793664,7.536987 C 22.138531,7.604417 22.80543,8.4663984 22.80543,8.4663984 L 22.889742,18.716398
+     C 22.889742,18.716398 23.339523,19.198362 23.564253,19.17228 C 23.760489,19.149505 24.325837,18.716398 24.325837,18.716398 L 24.325837,11.466398 C 24.325837,11.466398 24.989235,10.533447 25.437283,10.487967 C 25.887444,10.442273 26.575837,11.579069 26.575837,11.579069 L 26.575837,24.596716 L 28.454448,24.905614 C 28.454448,24.905614 29.743051,22.436507 30.646605,21.701692 C 31.411938,21.079285 32.676626,20.470888 33.644343,20.662327 C 34.030345,20.738688 34.571793,21.514664 34.571793,21.514664 C 34.571793,21.514664 32.320674,23.896383 31.630012,25.167755 C 31.114202,26.11726 30.873374,27.938957 30.177523,28.765645 C 29.629973,29.416148 28.579515,29.845615 27.845095,30.274092 C 27.061923,30.731012 25.45671,31.453727 25.45671,31.453727 L 25.419154,36.466398 L 16.987782,36.466398 z"
+     id="path3162"
+     sodipodi:nodetypes="ccsccsccsccsccsccsccsccscccsscsssccc" />
+</svg>
diff --git a/icons/stopit_color.svg b/icons/stopit_color.svg
new file mode 100644
index 0000000..476c3be
--- /dev/null
+++ b/icons/stopit_color.svg
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   width="44"
+   height="44"
+   version="1.0"
+   sodipodi:docname="stopiton.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs5">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective9" />
+  </defs>
+  <sodipodi:namedview
+     inkscape:window-height="1000"
+     inkscape:window-width="1679"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     guidetolerance="10.0"
+     gridtolerance="10.0"
+     objecttolerance="10.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base"
+     showgrid="false"
+     inkscape:zoom="10"
+     inkscape:cx="24.924162"
+     inkscape:cy="3.0823126"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:current-layer="svg2" />
+  <path
+     sodipodi:type="star"
+     style="opacity:1;fill:#d00000;fill-opacity:1;stroke:none;stroke-width:1.5;stroke-opacity:1"
+     id="path2386"
+     sodipodi:sides="8"
+     sodipodi:cx="6.154902"
+     sodipodi:cy="3.6254902"
+     sodipodi:r1="22.234058"
+     sodipodi:r2="20.541592"
+     sodipodi:arg1="0.36853512"
+     sodipodi:arg2="0.7612342"
+     inkscape:flatsided="true"
+     inkscape:rounded="0"
+     inkscape:randomized="0"
+     d="M 26.896078,11.635294 L 15.157342,23.955503 L -1.8549019,24.366666 L -14.175111,12.62793 L -14.586274,-4.3843137 L -2.8475378,-16.704523 L 14.164706,-17.115686 L 26.484915,-5.3769496 L 26.896078,11.635294 z"
+     transform="matrix(1.0676988,3.2621148e-2,-3.2621148e-2,1.0676988,15.546686,17.928289)" />
+  <path
+     sodipodi:type="star"
+     style="opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:3.31833665000000000;stroke-opacity:1"
+     id="path3158"
+     sodipodi:sides="8"
+     sodipodi:cx="6.154902"
+     sodipodi:cy="3.6254902"
+     sodipodi:r1="22.234058"
+     sodipodi:r2="20.541592"
+     sodipodi:arg1="0.36853512"
+     sodipodi:arg2="0.7612342"
+     inkscape:flatsided="true"
+     inkscape:rounded="0"
+     inkscape:randomized="0"
+     d="M 26.896078,11.635294 L 15.157342,23.955503 L -1.8549019,24.366666 L -14.175111,12.62793 L -14.586274,-4.3843137 L -2.8475378,-16.704523 L 14.164706,-17.115686 L 26.484915,-5.3769496 L 26.896078,11.635294 z"
+     transform="matrix(0.8982409,2.7775002e-2,-2.7443742e-2,0.9090831,16.347508,18.533176)" />
+  <path
+     style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.5;stroke-opacity:1"
+     d="M 16.987782,36.466398 L 16.987782,31.060516 C 16.987782,31.060516 15.454015,30.38416 14.964253,29.880123 C 14.30166,29.198216 13.446606,27.097771 13.446606,27.097771 L 13.428206,15.466398 C 13.428206,15.466398 14.116058,14.43353 14.599464,14.48868 C 15.098301,14.545591 15.575838,15.466398 15.575838,15.466398 L 15.575838,21.466398 C 15.575838,21.466398 16.264462,22.047049 16.481899,22.038947 C 16.679317,22.031591 17.13801,21.466398 17.13801,21.466398 L 17.222322,11.716398 C 17.222322,11.716398 17.80243,10.809048 18.252488,10.825222 C 18.62827,10.838727 19.17994,11.716398 19.17994,11.716398 L 19.348567,18.466398 C 19.348567,18.466398 19.754261,19.166353 20.023077,19.17228 C 20.184998,19.17585 20.7451,18.466398 20.7451,18.466398 L 20.613273,8.4663984 C 20.613273,8.4663984 21.4426,7.4683451 21.793664,7.536987 C 22.138531,7.604417 22.80543,8.4663984 22.80543,8.4663984
+     L 22.889742,18.716398 C 22.889742,18.716398 23.339523,19.198362 23.564253,19.17228 C 23.760489,19.149505 24.325837,18.716398 24.325837,18.716398 L 24.325837,11.466398 C 24.325837,11.466398 24.989235,10.533447 25.437283,10.487967 C 25.887444,10.442273 26.575837,11.579069 26.575837,11.579069 L 26.575837,24.596716 L 28.454448,24.905614 C 28.454448,24.905614 29.743051,22.436507 30.646605,21.701692 C 31.411938,21.079285 32.676626,20.470888 33.644343,20.662327 C 34.030345,20.738688 34.571793,21.514664 34.571793,21.514664 C 34.571793,21.514664 32.320674,23.896383 31.630012,25.167755 C 31.114202,26.11726 30.873374,27.938957 30.177523,28.765645 C 29.629973,29.416148 28.579515,29.845615 27.845095,30.274092 C 27.061923,30.731012 25.45671,31.453727 25.45671,31.453727 L 25.419154,36.466398 L 16.987782,36.466398 z"
+     id="path3162"
+     sodipodi:nodetypes="ccsccsccsccsccsccsccsccscccsscsssccc" />
+</svg>
diff --git a/pippy_app.py b/pippy_app.py
index abaf397..4835c57 100644
--- a/pippy_app.py
+++ b/pippy_app.py
@@ -38,9 +38,9 @@ from activity import ViewSourceActivity, TARGET_TYPE_TEXT
 from sugar.activity.activity import ActivityToolbox, \
      get_bundle_path, get_bundle_name
 from sugar.graphics import style
+from sugar.graphics.toolbutton import ToolButton
 
 from sugar.presence import presenceservice
-
 from sugar.presence.tubeconn import TubeConnection
 
 SERVICE = "org.laptop.Pippy"
@@ -53,6 +53,10 @@ PYTHON_PREFIX="""#!/usr/bin/python
 # -*- coding: utf-8 -*-
 """
 
+# get screen sizes
+SIZE_X = gtk.gdk.screen_width()
+SIZE_Y = gtk.gdk.screen_height()
+
 class PippyActivity(ViewSourceActivity):
     """Pippy Activity as specified in activity.info"""
     def __init__(self, handle):
@@ -62,6 +66,7 @@ class PippyActivity(ViewSourceActivity):
 
         # Top toolbar with share and close buttons:
         toolbox = ActivityToolbox(self)
+        activity_toolbar = toolbox.get_activity_toolbar()
         # add 'make bundle' entry to 'keep' palette.
         palette = toolbox.get_activity_toolbar().keep.get_palette()
         # XXX: should clear out old palette entries?
@@ -77,13 +82,61 @@ class PippyActivity(ViewSourceActivity):
         menu_item.connect('activate', self.makebutton_cb)
         palette.menu.append(menu_item)
         menu_item.show()
+
+        # The "go" button
+        goicon_bw = gtk.Image()
+        goicon_bw.set_from_file("%s/icons/run_bw.svg" % os.getcwd())
+        goicon_color = gtk.Image()
+        goicon_color.set_from_file("%s/icons/run_color.svg" % os.getcwd())
+        gobutton = ToolButton(label=_("_Run!"))
+        gobutton.props.accelerator = _('<alt>r')
+        gobutton.set_icon_widget(goicon_bw)
+        gobutton.set_tooltip("Run")
+        gobutton.connect('clicked', self.flash_cb, dict({'bw':goicon_bw,
+            'color':goicon_color}))
+        gobutton.connect('clicked', self.gobutton_cb)
+        activity_toolbar.insert(gobutton, 2)
+
+        # The "stop" button
+        stopicon_bw = gtk.Image()
+        stopicon_bw.set_from_file("%s/icons/stopit_bw.svg" % os.getcwd())
+        stopicon_color = gtk.Image()
+        stopicon_color.set_from_file("%s/icons/stopit_color.svg" % os.getcwd())
+        stopbutton = ToolButton(label=_("_Stop"))
+        stopbutton.props.accelerator = _('<alt>s')
+        stopbutton.set_icon_widget(stopicon_bw)
+        stopbutton.connect('clicked', self.flash_cb, dict({'bw':stopicon_bw,
+            'color':stopicon_color}))
+        stopbutton.connect('clicked', self.stopbutton_cb)
+        stopbutton.set_tooltip("Stop Running")
+        activity_toolbar.insert(stopbutton, 3)
+
+        # The "clear" button
+        clearicon_bw = gtk.Image()
+        clearicon_bw.set_from_file("%s/icons/eraser_bw.svg" % os.getcwd())
+        clearicon_color = gtk.Image()
+        clearicon_color.set_from_file("%s/icons/eraser_color.svg" % os.getcwd())
+        clearbutton = ToolButton(label=_("_Clear"))
+        clearbutton.props.accelerator = _('<alt>c')
+        clearbutton.set_icon_widget(clearicon_bw)
+        clearbutton.connect('clicked', self.clearbutton_cb)
+        clearbutton.connect('clicked', self.flash_cb, dict({'bw':clearicon_bw,
+            'color':clearicon_color}))
+        clearbutton.set_tooltip("Clear")
+        activity_toolbar.insert(clearbutton, 4)
+
+        # A vertical toolbar separator
+        separator = gtk.SeparatorToolItem()
+        separator.set_draw(True)
+        activity_toolbar.insert(separator, 5)
+
         self.set_toolbox(toolbox)
         toolbox.show()
 
         # Main layout.
-        hbox = gtk.HBox()
-        vbox = gtk.VBox()
-        
+        hpane = gtk.HPaned()
+        vpane = gtk.VPaned()
+
         # The sidebar.
         sidebar = gtk.VBox()
         self.model = gtk.TreeStore(gobject.TYPE_PYOBJECT, gobject.TYPE_STRING)
@@ -92,13 +145,13 @@ class PippyActivity(ViewSourceActivity):
         treecolumn = gtk.TreeViewColumn(_("Examples"), cellrenderer, text=1)
         treeview.get_selection().connect("changed", self.selection_cb)
         treeview.append_column(treecolumn)
-        treeview.set_size_request(220, 900)
+        treeview.set_size_request(int(SIZE_X * 0.3), SIZE_Y)
 
         # Create scrollbars around the view.
         scrolled = gtk.ScrolledWindow()
         scrolled.add(treeview)
         sidebar.pack_start(scrolled)
-        hbox.pack_start(sidebar)
+        hpane.add1(sidebar)
 
         root = os.path.join(get_bundle_path(), 'data')
         for d in sorted(os.listdir(root)):
@@ -108,7 +161,7 @@ class PippyActivity(ViewSourceActivity):
             olditer = self.model.insert_before(None, None)
             self.model.set_value(olditer, 0, direntry)
             self.model.set_value(olditer, 1, direntry["name"])
-                
+
             for _file in sorted(os.listdir(os.path.join(root, d))):
                 if _file.endswith('~'): continue # skip emacs backups
                 entry = { "name": _(_file.capitalize()),
@@ -141,7 +194,7 @@ class PippyActivity(ViewSourceActivity):
 
         # The GTK source view window
         self.text_view = gtksourceview2.View(text_buffer)
-        self.text_view.set_size_request(900, 350)
+        self.text_view.set_size_request(0, int(SIZE_Y * 0.5))
         self.text_view.set_editable(True)
         self.text_view.set_cursor_visible(True)
         self.text_view.set_show_line_numbers(True)
@@ -161,42 +214,15 @@ class PippyActivity(ViewSourceActivity):
         codesw.set_policy(gtk.POLICY_AUTOMATIC,
                       gtk.POLICY_AUTOMATIC)
         codesw.add(self.text_view)
-        vbox.pack_start(codesw)
-
-        # An hbox for the buttons
-        buttonhbox = gtk.HBox()
-
-        # The "go" button
-        goicon = gtk.Image()
-        goicon.set_from_stock(gtk.STOCK_YES, gtk.ICON_SIZE_BUTTON)
-        gobutton = gtk.Button(label=_("_Run!"))
-        gobutton.set_image(goicon)
-        gobutton.connect('clicked', self.gobutton_cb)
-        gobutton.set_size_request(650, 2)
-        buttonhbox.pack_start(gobutton)
-
-        # The "stop" button
-        stopbutton = gtk.Button(stock=gtk.STOCK_STOP)
-        stopbutton.connect('clicked', self.stopbutton_cb)
-        stopbutton.set_size_request(200, 2)
-        buttonhbox.pack_start(stopbutton)
-
-        # The "clear" button
-        clearbutton = gtk.Button(stock=gtk.STOCK_CLEAR)
-        clearbutton.connect('clicked', self.clearbutton_cb)
-        clearbutton.set_size_request(150, 2)
-        buttonhbox.pack_end(clearbutton)
-
-        vbox.pack_start(buttonhbox)
+        vpane.add1(codesw)
 
         # An hbox to hold the vte window and its scrollbar.
         outbox = gtk.HBox()
-        
+
         # The vte python window
         self._vte = vte.Terminal()
         self._vte.set_encoding('utf-8')
         self._vte.set_size(30, 5)
-        self._vte.set_size_request(200, 300)
         font = 'Monospace ' + str(font_zoom(style.FONT_SIZE))
         self._vte.set_font(pango.FontDescription(font))
         self._vte.set_colors(gtk.gdk.color_parse ('#000000'),
@@ -209,16 +235,15 @@ class PippyActivity(ViewSourceActivity):
                                 gtk.gdk.ACTION_COPY)
         self._vte.connect('drag_data_received', self.vte_drop_cb)
         outbox.pack_start(self._vte)
-        
+
         outsb = gtk.VScrollbar(self._vte.get_adjustment())
         outsb.show()
         outbox.pack_start(outsb, False, False, 0)
-        vbox.pack_end(outbox)
-        hbox.pack_end(vbox)
-        self.set_canvas(hbox)
+        vpane.add2(outbox)
+        hpane.add2(vpane)
+        self.set_canvas(hpane)
         self.show_all()
 
-        
         self.hellotube = None
 
         # get the Presence Service
@@ -231,7 +256,7 @@ class PippyActivity(ViewSourceActivity):
         except TypeError:
             self._logger.debug('No Telepathy CM, offline')
         self.initiating = None
-        
+
         self.connect('shared', self._shared_cb)
 
         # Buddy object for you
@@ -265,7 +290,17 @@ class PippyActivity(ViewSourceActivity):
         self.stopbutton_cb(None)
         self._reset_vte()
         self.text_view.grab_focus()
-        
+
+    def timer_cb(self, button, icons):
+        button.set_icon_widget(icons['bw'])
+        button.show_all()
+        return False
+
+    def flash_cb(self, button, icons):
+        button.set_icon_widget(icons['color'])
+        button.show_all()
+        gobject.timeout_add(400, self.timer_cb, button, icons)
+
     def clearbutton_cb(self, button):
         self.save()
         global text_buffer
@@ -295,10 +330,10 @@ class PippyActivity(ViewSourceActivity):
         from shutil import copy2
         self.stopbutton_cb(button) # try stopping old code first.
         self._reset_vte()
-        
+
         # FIXME: We're losing an odd race here
         # gtk.main_iteration(block=False)
-        
+
         pippy_app_name = '%s/tmp/pippy_app.py' % self.get_activity_root()
         self._write_text_buffer(pippy_app_name)
         # write activity.py here too, to support pippy-based activities.
@@ -415,14 +450,14 @@ class PippyActivity(ViewSourceActivity):
         text = text_buffer.get_text(start, end)
         _file = open(file_path, 'w')
         _file.write(text)
-    
+
     def read_file(self, file_path):
         text = open(file_path).read()
         # discard the '#!/usr/bin/python' and 'coding: utf-8' lines, if present
         text = re.sub(r'^' + re.escape(PYTHON_PREFIX), '', text)
         global text_buffer
         text_buffer.set_text(text)
-        
+
     def _shared_cb(self, activity):
         self._logger.debug('My activity was shared')
         self.initiating = True
-- 
1.6.3.3



More information about the Sugar-devel mailing list