Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWalter Bender <walter@sugarlabs.org>2014-01-11 18:27:54 (GMT)
committer Walter Bender <walter@sugarlabs.org>2014-01-11 18:27:54 (GMT)
commitcba2d6118b7802ffba0746577bb3e14a0d5e0c84 (patch)
treef5d93b665c82c214da0fcded6540baa112f23062
parentbba4333357e38acf642b808ef36b989a1d45364e (diff)
new icons for new exports
-rw-r--r--Notebook.py25
-rw-r--r--icons/pippy-create-bundle.svg54
-rw-r--r--icons/pippy-create-disutils.svg50
-rw-r--r--icons/pippy-create_bundle.svg34
-rw-r--r--icons/pippy-export-doc.svg (renamed from icons/pippy-export_doc.svg)0
-rw-r--r--icons/pippy-export-example.svg (renamed from icons/pippy-export_example.svg)0
-rw-r--r--icons/pippy-export-library.svg74
-rw-r--r--icons/pippy-import-doc.svg83
-rw-r--r--pippy_app.py153
9 files changed, 400 insertions, 73 deletions
diff --git a/Notebook.py b/Notebook.py
index 16eebe5..23b0be3 100644
--- a/Notebook.py
+++ b/Notebook.py
@@ -185,6 +185,19 @@ class SourceNotebook(AddNotebook):
text_view = tab[0]
return text_view
+ def _purify_file(self, label):
+ import unicodedata
+
+ if not label.endswith(".py"):
+ label = label + ".py"
+
+ label = label.replace(" ", "_")
+ if isinstance(label, unicode):
+ label = \
+ unicodedata.normalize('NFKD', label).encode('ascii', 'ignore')
+
+ return label
+
def get_all_data(self):
# Returns all the names of files and the buffer contents too.
names = []
@@ -196,13 +209,19 @@ class SourceNotebook(AddNotebook):
include_hidden_chars=True)
contents.append(text)
- label = self.get_tab_label(child).get_text()
- if not label.endswith(".py"):
- label = label + ".py"
+ label = self._purify_file(self.get_tab_label(child).get_text())
+
names.append(label)
return (names, contents)
+ def get_current_file_name(self):
+ child = self.get_nth_page(self.get_current_page())
+ label = self.get_tab_label(child).get_text()
+ label = self._purify_file(label)
+
+ return label
+
def child_exited_cb(self, *args):
"""Called whenever a child exits. If there's a handler, runadd it."""
h, self.activity._child_exited_handler = \
diff --git a/icons/pippy-create-bundle.svg b/icons/pippy-create-bundle.svg
new file mode 100644
index 0000000..43b089a
--- /dev/null
+++ b/icons/pippy-create-bundle.svg
@@ -0,0 +1,54 @@
+<?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"
+ version="1.1"
+ width="55"
+ height="55"
+ viewBox="0 0 55 55"
+ id="svg2"
+ xml:space="preserve"><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" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+ id="defs10" /><rect
+ width="22.039503"
+ height="22.039503"
+ x="-27.222408"
+ y="44.910072"
+ transform="matrix(0.83456543,-0.55090883,0.83456543,0.55090883,0,0)"
+ id="rect3936"
+ style="fill:none;stroke:#ffffff;stroke-width:2.08566689;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /><g
+ transform="matrix(1,0,0,-1,-27.367495,50.587259)"
+ id="g4770"
+ style="stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"><g
+ transform="translate(34.0803,-1006.42)"
+ id="g4772"
+ style="stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"><polyline
+ transform="matrix(-0.469241,0.469241,-0.469241,-0.469241,66.2906,1019.03)"
+ style="fill:none;stroke:#ffffff;stroke-width:3.01383209;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ points="51.562,15.306 41.17,16.188 42.053,5.794"
+ id="polyline4774" /><path
+ d="m 39.363241,1033.1291 -0.05636,9.9115 -8.750608,0.067"
+ id="path4776"
+ style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /></g></g><g
+ transform="translate(-8.8152101,-10.21213)"
+ id="g4709-6"
+ style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"><path
+ d="m 28.090497,40.381834 c 3.974667,-0.06221 9.878139,-1.753708 9.878139,-6.911631 0,-5.73755 -4.497322,-6.751378 -6.645938,-7.265877 -2.341015,-0.560569 -4.551388,-0.765446 -4.645545,-1.7177 -0.161426,-1.632578 0.768742,-2.268447 2.619566,-2.268447 0,0 4.402457,2.26367 8.142826,0.457274 1.05398,-0.509016 2.942197,-2.884533 2.942197,-4.523303 0,-1.639388 -6.094837,-3.533985 -7.944332,-3.533985 -1.850824,0 -3.424821,2.377206 -3.424821,2.377206 -3.700318,0 -7.401302,3.278776 -7.401302,6.557553 0,3.278158 3.417627,6.165937 7.653709,6.85261 1.962616,0.318142 3.729994,1.076753 3.3563,3.065286 -0.303435,1.614661 -1.696316,2.770905 -5.258386,2.736319 -2.749295,-0.02669 -6.417645,0.138525 -8.840139,-1.714654 -1.314772,-1.005784 -1.146531,-3.578075 -1.146531,-3.578075 0,0 -3.4034,0.162415 -2.757976,3.376412 0.965274,4.806741 6.251099,6.204027 13.472233,6.091012 z"
+ id="path2474-6"
+ style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /><path
+ d="M 37.438881,22.676071 C 35.697593,22.498722 33.050146,21.440194 32.481887,19.572788"
+ id="path2476-1"
+ style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /><circle
+ cx="35.805"
+ cy="10.96"
+ r="1.676"
+ transform="matrix(0.3489205,0,0,0.32478716,20.448838,13.620467)"
+ id="circle2478-8"
+ style="fill:none;stroke:#ffffff;stroke-width:5.94110632;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /></g></svg> \ No newline at end of file
diff --git a/icons/pippy-create-disutils.svg b/icons/pippy-create-disutils.svg
new file mode 100644
index 0000000..3f0717c
--- /dev/null
+++ b/icons/pippy-create-disutils.svg
@@ -0,0 +1,50 @@
+<?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"
+ version="1.1"
+ width="55"
+ height="55"
+ viewBox="0 0 55 55"
+ id="svg2"
+ xml:space="preserve"><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" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+ id="defs10" /><path
+ d="m 25.71298,32.769402 3.289473,-3.289473 6.578948,0 3.289473,3.289473 13.157895,0 0,20.394737 -26.315789,0 z"
+ id="path3854"
+ style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /><g
+ transform="matrix(1,0,0,-1,-27.367494,50.58726)"
+ id="g4770"
+ style="stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"><g
+ transform="translate(34.0803,-1006.42)"
+ id="g4772"
+ style="stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"><polyline
+ transform="matrix(-0.469241,0.469241,-0.469241,-0.469241,66.2906,1019.03)"
+ style="fill:none;stroke:#ffffff;stroke-width:3.01383209;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ points="51.562,15.306 41.17,16.188 42.053,5.794"
+ id="polyline4774" /><path
+ d="m 39.363241,1033.1291 -0.05636,9.9115 -8.750608,0.067"
+ id="path4776"
+ style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /></g></g><g
+ transform="translate(-8.815209,-10.212129)"
+ id="g4709-6"
+ style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"><path
+ d="m 28.090497,40.381834 c 3.974667,-0.06221 9.878139,-1.753708 9.878139,-6.911631 0,-5.73755 -4.497322,-6.751378 -6.645938,-7.265877 -2.341015,-0.560569 -4.551388,-0.765446 -4.645545,-1.7177 -0.161426,-1.632578 0.768742,-2.268447 2.619566,-2.268447 0,0 4.402457,2.26367 8.142826,0.457274 1.05398,-0.509016 2.942197,-2.884533 2.942197,-4.523303 0,-1.639388 -6.094837,-3.533985 -7.944332,-3.533985 -1.850824,0 -3.424821,2.377206 -3.424821,2.377206 -3.700318,0 -7.401302,3.278776 -7.401302,6.557553 0,3.278158 3.417627,6.165937 7.653709,6.85261 1.962616,0.318142 3.729994,1.076753 3.3563,3.065286 -0.303435,1.614661 -1.696316,2.770905 -5.258386,2.736319 -2.749295,-0.02669 -6.417645,0.138525 -8.840139,-1.714654 -1.314772,-1.005784 -1.146531,-3.578075 -1.146531,-3.578075 0,0 -3.4034,0.162415 -2.757976,3.376412 0.965274,4.806741 6.251099,6.204027 13.472233,6.091012 z"
+ id="path2474-6"
+ style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /><path
+ d="M 37.438881,22.676071 C 35.697593,22.498722 33.050146,21.440194 32.481887,19.572788"
+ id="path2476-1"
+ style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /><circle
+ cx="35.805"
+ cy="10.96"
+ r="1.676"
+ transform="matrix(0.3489205,0,0,0.32478716,20.448838,13.620467)"
+ id="circle2478-8"
+ style="fill:none;stroke:#ffffff;stroke-width:5.94110632;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /></g></svg> \ No newline at end of file
diff --git a/icons/pippy-create_bundle.svg b/icons/pippy-create_bundle.svg
deleted file mode 100644
index b5d0a26..0000000
--- a/icons/pippy-create_bundle.svg
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
- <!ENTITY fill_color "#FFFFFF">
- <!ENTITY stroke_color "#010101">
-]>
-<svg
- xmlns="http://www.w3.org/2000/svg"
- version="1.1"
- width="55"
- height="55"
- viewBox="0 0 55 55"
- id="svg2"
- xml:space="preserve"><rect
- width="29.497099"
- height="29.497099"
- x="-28.68516"
- y="32.139339"
- transform="matrix(0.83456543,-0.55090883,0.83456543,0.55090883,0,0)"
- id="rect3936"
- style="fill:&fill_color;;fill-opacity:1;stroke:&stroke_color;;stroke-width:3.64991689;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /><g
- transform="translate(0,-2)"
- id="g4709"><path
- d="m 28.090497,40.381834 c 3.974667,-0.06221 9.878139,-1.753708 9.878139,-6.911631 0,-5.73755 -4.497322,-6.751378 -6.645938,-7.265877 -2.341015,-0.560569 -4.551388,-0.765446 -4.645545,-1.7177 -0.161426,-1.632578 0.768742,-2.268447 2.619566,-2.268447 0,0 4.402457,2.26367 8.142826,0.457274 1.05398,-0.509016 2.942197,-2.884533 2.942197,-4.523303 0,-1.639388 -6.094837,-3.533985 -7.944332,-3.533985 -1.850824,0 -3.424821,2.377206 -3.424821,2.377206 -3.700318,0 -7.401302,3.278776 -7.401302,6.557553 0,3.278158 3.417627,6.165937 7.653709,6.85261 1.962616,0.318142 3.729994,1.076753 3.3563,3.065286 -0.303435,1.614661 -1.696316,2.770905 -5.258386,2.736319 -2.749295,-0.02669 -6.417645,0.138525 -8.840139,-1.714654 -1.314772,-1.005784 -1.146531,-3.578075 -1.146531,-3.578075 0,0 -3.4034,0.162415 -2.757976,3.376412 0.965274,4.806741 6.251099,6.204027 13.472233,6.091012 z"
- id="path2474"
- style="fill:&fill_color;;stroke:&stroke_color;;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /><path
- d="M 37.438881,22.676071 C 35.697593,22.498722 33.050146,21.440194 32.481887,19.572788"
- id="path2476"
- style="fill:&fill_color;;stroke:&stroke_color;;stroke-width:1.5;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /><circle
- cx="35.805"
- cy="10.96"
- r="1.676"
- transform="matrix(0.3489205,0,0,0.32478716,20.448838,13.620467)"
- id="circle2478"
- style="fill:&fill_color;;stroke:&stroke_color;;stroke-width:3.42034841;stroke-miterlimit:4;stroke-dasharray:none" /></g></svg> \ No newline at end of file
diff --git a/icons/pippy-export_doc.svg b/icons/pippy-export-doc.svg
index b8e8c86..b8e8c86 100644
--- a/icons/pippy-export_doc.svg
+++ b/icons/pippy-export-doc.svg
diff --git a/icons/pippy-export_example.svg b/icons/pippy-export-example.svg
index 014460b..014460b 100644
--- a/icons/pippy-export_example.svg
+++ b/icons/pippy-export-example.svg
diff --git a/icons/pippy-export-library.svg b/icons/pippy-export-library.svg
new file mode 100644
index 0000000..256cf47
--- /dev/null
+++ b/icons/pippy-export-library.svg
@@ -0,0 +1,74 @@
+<?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"
+ version="1.1"
+ width="55"
+ height="55"
+ viewBox="0 0 55 55"
+ id="Icon"
+ xml:space="preserve"
+ style="overflow:visible"><metadata
+ id="metadata17"><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="defs15" /><circle
+ cx="35.805"
+ cy="10.96"
+ r="1.676"
+ transform="matrix(0.66385342,0,0,0.61793751,-2.1883406,-1.1658202)"
+ id="circle2478"
+ style="fill:none;stroke:#ffffff;stroke-width:3.12263775;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /><g
+ transform="matrix(1,0,0,-1,-30.386574,49.171266)"
+ id="g4770"
+ style="stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"><g
+ transform="translate(34.0803,-1006.42)"
+ id="g4772"
+ style="stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"><polyline
+ transform="matrix(-0.469241,0.469241,-0.469241,-0.469241,66.2906,1019.03)"
+ style="fill:none;stroke:#ffffff;stroke-width:3.01383209;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ points="51.562,15.306 41.17,16.188 42.053,5.794"
+ id="polyline4774" /><path
+ d="m 39.363241,1033.1291 -0.05636,9.9115 -8.750608,0.067"
+ id="path4776"
+ style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /></g></g><g
+ transform="translate(-11.83429,-11.628123)"
+ id="g4709"
+ style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"><path
+ d="m 28.090497,40.381834 c 3.974667,-0.06221 9.878139,-1.753708 9.878139,-6.911631 0,-5.73755 -4.497322,-6.751378 -6.645938,-7.265877 -2.341015,-0.560569 -4.551388,-0.765446 -4.645545,-1.7177 -0.161426,-1.632578 0.768742,-2.268447 2.619566,-2.268447 0,0 4.402457,2.26367 8.142826,0.457274 1.05398,-0.509016 2.942197,-2.884533 2.942197,-4.523303 0,-1.639388 -6.094837,-3.533985 -7.944332,-3.533985 -1.850824,0 -3.424821,2.377206 -3.424821,2.377206 -3.700318,0 -7.401302,3.278776 -7.401302,6.557553 0,3.278158 3.417627,6.165937 7.653709,6.85261 1.962616,0.318142 3.729994,1.076753 3.3563,3.065286 -0.303435,1.614661 -1.696316,2.770905 -5.258386,2.736319 -2.749295,-0.02669 -6.417645,0.138525 -8.840139,-1.714654 -1.314772,-1.005784 -1.146531,-3.578075 -1.146531,-3.578075 0,0 -3.4034,0.162415 -2.757976,3.376412 0.965274,4.806741 6.251099,6.204027 13.472233,6.091012 z"
+ id="path2474-6"
+ style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /><path
+ d="M 37.438881,22.676071 C 35.697593,22.498722 33.050146,21.440194 32.481887,19.572788"
+ id="path2476-1"
+ style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /><circle
+ cx="35.805"
+ cy="10.96"
+ r="1.676"
+ transform="matrix(0.3489205,0,0,0.32478716,20.448838,13.620467)"
+ id="circle2478-8"
+ style="fill:none;stroke:#ffffff;stroke-width:5.94110632;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /></g><polygon
+ points="31.874,6.088 43.818,18.027 43.818,48.914 10.932,48.914 10.932,6.088 "
+ transform="matrix(0.57043764,0,0,0.57043764,27.123144,25.347613)"
+ id="polygon9"
+ style="fill:none;stroke:#ffffff;stroke-width:2.62955999;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /><polyline
+ id="polyline11"
+ points="43.818,18.027 31.874,18.027 31.874,6.088 "
+ style="fill:none;stroke:#ffffff;stroke-width:2.62955999;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ transform="matrix(0.57043764,0,0,0.57043764,27.123144,25.347613)" /><path
+ d="m 42.788977,49.853753 c 1.647156,0 4.093132,-0.780667 4.093132,-3.076727 0,-2.554081 -2.129913,-2.790096 -3.013183,-3.048668 -0.976245,-0.219786 -1.626525,-0.526495 -1.665586,-0.950388 -0.06684,-0.726751 0.318538,-1.009804 1.085451,-1.009804 0,0 1.824304,1.007879 3.374083,0.203556 0.436821,-0.226387 1.219137,-1.284055 1.219137,-2.013557 0,-0.729776 -2.525473,-1.57316 -3.291835,-1.57316 -0.766913,0 -1.419118,1.058218 -1.419118,1.058218 -1.533274,0 -3.066823,1.459553 -3.066823,2.919107 0,1.459279 1.466981,2.600844 3.220315,2.919108 0.815051,0.12901 1.49669,0.610668 1.341821,1.495863 -0.125709,0.718775 -0.823852,1.459554 -2.299911,1.459554 -1.169623,0 -3.658512,-0.06024 -4.055997,-1.122035 -0.255545,-0.683839 0.04621,-1.431771 0.429669,-1.431771 l -0.0074,-0.04402 c -0.390608,-0.04346 -1.526122,0.04402 -1.526122,1.503291 -2.75e-4,1.871068 2.515296,2.711425 5.582394,2.711425 z"
+ id="path3086"
+ style="fill:none;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /><path
+ d="m 46.662599,41.971997 c -0.721525,-0.07895 -1.818528,-0.550152 -2.053993,-1.381432"
+ id="path3088"
+ style="fill:none;stroke:#ffffff;stroke-width:1.5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /><circle
+ cx="35.805"
+ cy="10.96"
+ r="1.676"
+ transform="matrix(0.27507609,0,0,0.27507609,34.950134,36.510637)"
+ id="circle3090"
+ style="fill:none;stroke:#ffffff;stroke-width:5.45303679;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /></svg> \ No newline at end of file
diff --git a/icons/pippy-import-doc.svg b/icons/pippy-import-doc.svg
new file mode 100644
index 0000000..2026290
--- /dev/null
+++ b/icons/pippy-import-doc.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"
+ version="1.1"
+ width="55"
+ height="55"
+ viewBox="0 0 55 55"
+ id="svg2"
+ xml:space="preserve"><metadata
+ id="metadata27"><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="defs25" /><g
+ transform="translate(-28.621062,-0.03390309)"
+ id="g3789"><g
+ transform="matrix(0.55205508,0,0,0.55205508,75.618464,18.235971)"
+ id="g4382"
+ style="stroke:#ffffff;stroke-width:3.62282681;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"><g
+ transform="translate(-80.093659,12.220029)"
+ id="g4308"
+ style="fill:none;stroke:#ffffff;stroke-width:3.62282681;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"><g
+ id="g4310"
+ style="fill:none;stroke:#ffffff;stroke-width:3.62282681;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"><path
+ d="m 6.736,49.002 h 24.52 c 2.225,0 3.439,-1.447 3.439,-3.441 v -27.28 c 0,-1.73 -1.732,-3.441 -3.439,-3.441 h -4.389"
+ id="path4312"
+ style="fill:none;stroke:#ffffff;stroke-width:3.62282681;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /></g></g><g
+ transform="translate(-80.093659,12.220029)"
+ id="g4314"
+ style="fill:none;stroke:#ffffff;stroke-width:3.62282681;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"><g
+ id="g4316"
+ style="fill:none;stroke:#ffffff;stroke-width:3.62282681;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"><path
+ d="m 26.867,38.592 c 0,1.836 -1.345,3.201 -3.441,4.047 L 6.736,49.002 V 14.84 l 16.69,-8.599 c 2.228,-0.394 3.441,0.84 3.441,2.834 v 29.517 z"
+ id="path4318"
+ style="fill:none;stroke:#ffffff;stroke-width:3.62282681;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /></g></g><path
+ d="m -70.669659,54.827029 c 0,0 -1.351,-0.543 -2.702,-0.543 -1.351,0 -2.703,0.543 -2.703,0.543"
+ id="path4320"
+ style="fill:none;stroke:#ffffff;stroke-width:3.62282681;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /><path
+ d="m -70.669659,44.226029 c 0,0 -1.239,-0.543 -2.815,-0.543 -1.577,0 -2.59,0.543 -2.59,0.543"
+ id="path4322"
+ style="fill:none;stroke:#ffffff;stroke-width:3.62282681;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /><path
+ d="m -70.669659,33.898029 c 0,0 -1.125,-0.544 -2.927,-0.544 -1.802,0 -2.478,0.544 -2.478,0.544"
+ id="path4324"
+ style="fill:none;stroke:#ffffff;stroke-width:3.62282681;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /><line
+ id="line4326"
+ y2="23.725029"
+ y1="58.753029"
+ x2="-66.884659"
+ x1="-66.884659"
+ style="fill:none;stroke:#ffffff;stroke-width:3.62282681;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /></g><g
+ transform="matrix(0,-1,-1,0,71.401366,89.939026)"
+ id="g4770"
+ style="stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"><g
+ transform="translate(34.0803,-1006.42)"
+ id="g4772"
+ style="stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"><polyline
+ id="polyline4774"
+ points="51.562,15.306 41.17,16.188 42.053,5.794"
+ style="fill:none;stroke:#ffffff;stroke-width:3.01383209;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ transform="matrix(-0.469241,0.469241,-0.469241,-0.469241,66.2906,1019.03)" /><path
+ d="m 39.363241,1033.1291 -0.05636,9.9115 -8.750608,0.067"
+ id="path4776"
+ style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /></g></g></g><g
+ transform="translate(10.165712,-11.628123)"
+ id="g4709"
+ style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"><path
+ d="m 28.090497,40.381834 c 3.974667,-0.06221 9.878139,-1.753708 9.878139,-6.911631 0,-5.73755 -4.497322,-6.751378 -6.645938,-7.265877 -2.341015,-0.560569 -4.551388,-0.765446 -4.645545,-1.7177 -0.161426,-1.632578 0.768742,-2.268447 2.619566,-2.268447 0,0 4.402457,2.26367 8.142826,0.457274 1.05398,-0.509016 2.942197,-2.884533 2.942197,-4.523303 0,-1.639388 -6.094837,-3.533985 -7.944332,-3.533985 -1.850824,0 -3.424821,2.377206 -3.424821,2.377206 -3.700318,0 -7.401302,3.278776 -7.401302,6.557553 0,3.278158 3.417627,6.165937 7.653709,6.85261 1.962616,0.318142 3.729994,1.076753 3.3563,3.065286 -0.303435,1.614661 -1.696316,2.770905 -5.258386,2.736319 -2.749295,-0.02669 -6.417645,0.138525 -8.840139,-1.714654 -1.314772,-1.005784 -1.146531,-3.578075 -1.146531,-3.578075 0,0 -3.4034,0.162415 -2.757976,3.376412 0.965274,4.806741 6.251099,6.204027 13.472233,6.091012 z"
+ id="path2474-6"
+ style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /><path
+ d="M 37.438881,22.676071 C 35.697593,22.498722 33.050146,21.440194 32.481887,19.572788"
+ id="path2476-1"
+ style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /><circle
+ cx="35.805"
+ cy="10.96"
+ r="1.676"
+ transform="matrix(0.3489205,0,0,0.32478716,20.448838,13.620467)"
+ id="circle2478-8"
+ style="fill:none;stroke:#ffffff;stroke-width:5.94110632;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /></g></svg> \ No newline at end of file
diff --git a/pippy_app.py b/pippy_app.py
index 179f314..9148d42 100644
--- a/pippy_app.py
+++ b/pippy_app.py
@@ -26,6 +26,7 @@ import subprocess
from random import uniform
import locale
import json
+import sys
import dbus
from dbus.mainloop.glib import DBusGMainLoop
@@ -52,6 +53,7 @@ from sugar3.activity.activity import get_bundle_name
from sugar3.graphics.alert import NotifyAlert
from sugar3.graphics import style
from sugar3.graphics.toggletoolbutton import ToggleToolButton
+from sugar3.graphics.objectchooser import ObjectChooser
from jarabe.view.customizebundle import generate_unique_id
@@ -104,6 +106,8 @@ class PippyActivity(ViewSourceActivity, groupthink.sugar_tools.GroupActivity):
self.loaded_session = []
self.session_data = []
+ sys.path.append(os.path.join(self.get_activity_root(), "Library"))
+
def initialize_display(self):
self._logger = logging.getLogger('pippy-activity')
@@ -115,26 +119,38 @@ class PippyActivity(ViewSourceActivity, groupthink.sugar_tools.GroupActivity):
separator.show()
activity_toolbar.insert(separator, -1)
- export_doc_button = ToolButton('pippy-export_doc')
- export_doc_button.set_tooltip(_("Export as Pippy Document"))
+ import_py_button = ToolButton("pippy-import-doc")
+ import_py_button.set_tooltip(_("Import Python file to new tab"))
+ import_py_button.connect("clicked", self._import_py_cb)
+ import_py_button.show()
+ activity_toolbar.insert(import_py_button, -1)
+
+ export_doc_button = ToolButton('pippy-export-doc')
+ export_doc_button.set_tooltip(_("Export as Pippy document"))
export_doc_button.connect('clicked', self._export_document_cb)
export_doc_button.show()
activity_toolbar.insert(export_doc_button, -1)
- export_example_button = ToolButton('pippy-export_example')
- export_example_button.set_tooltip(_("Export as Pippy Example"))
+ save_as_library = ToolButton("pippy-export-library")
+ save_as_library.set_tooltip(_("Save this file to the Pippy library"))
+ save_as_library.connect("clicked", self._save_as_library)
+ save_as_library.show()
+ activity_toolbar.insert(save_as_library, -1)
+
+ export_example_button = ToolButton('pippy-export-example')
+ export_example_button.set_tooltip(_("Export as new Pippy example"))
export_example_button.connect('clicked', self._export_example_cb)
export_example_button.show()
activity_toolbar.insert(export_example_button, -1)
- create_bundle_button = ToolButton('pippy-create_bundle')
- create_bundle_button.set_tooltip(_("Create Activity Bundle"))
+ create_bundle_button = ToolButton('pippy-create-bundle')
+ create_bundle_button.set_tooltip(_("Create a Sugar activity bundle"))
create_bundle_button.connect('clicked', self._create_bundle_cb)
create_bundle_button.show()
activity_toolbar.insert(create_bundle_button, -1)
- export_disutils = ToolButton("pippy-create_bundle")
- export_disutils.set_tooltip(_("Export as disutils package"))
+ export_disutils = ToolButton("pippy-create-disutils")
+ export_disutils.set_tooltip(_("Export as a disutils package"))
export_disutils.connect("clicked", self.__export_disutils_cb)
export_disutils.show()
activity_toolbar.insert(export_disutils, -1)
@@ -416,18 +432,16 @@ class PippyActivity(ViewSourceActivity, groupthink.sugar_tools.GroupActivity):
self._reset_vte()
self.source_tabs.get_text_view().grab_focus()
- def _write_text_buffer(self, filename):
- text_buffer = self.source_tabs.get_text_buffer()
- start, end = text_buffer.get_bounds()
- text = text_buffer.get_text(start, end, True)
-
- with open(filename, 'w') as f:
- # write utf-8 coding prefix if there's not already one
- if re.match(r'coding[:=]\s*([-\w.]+)',
- '\n'.join(text.splitlines()[:2])) is None:
- f.write(PYTHON_PREFIX)
- for line in text:
- f.write(line)
+ def _write_all_buffers(self, tmp_dir):
+ data = self.source_tabs.get_all_data()
+ zipdata = zip(data[0], data[1])
+ for name, content in zipdata:
+ with open(os.path.join(tmp_dir, name), 'w') as f:
+ # write utf-8 coding prefix if there's not already one
+ if re.match(r'coding[:=]\s*([-\w.]+)',
+ '\n'.join(content.splitlines()[:2])) is None:
+ f.write(PYTHON_PREFIX)
+ f.write(content)
def _reset_vte(self):
self._vte.grab_focus()
@@ -463,8 +477,13 @@ class PippyActivity(ViewSourceActivity, groupthink.sugar_tools.GroupActivity):
self.outbox.show_all()
self.toggle_output.set_active(True)
- pippy_app_name = '%s/tmp/pippy_app.py' % self.get_activity_root()
- self._write_text_buffer(pippy_app_name)
+ pippy_tmp_dir = '%s/tmp/' % self.get_activity_root()
+ self._write_all_buffers(pippy_tmp_dir)
+
+ current_file = os.path.join(
+ pippy_tmp_dir,
+ self.source_tabs.get_current_file_name())
+
# write activity.py here too, to support pippy-based activities.
copy2('%s/activity.py' % get_bundle_path(),
'%s/tmp/activity.py' % self.get_activity_root())
@@ -472,7 +491,7 @@ class PippyActivity(ViewSourceActivity, groupthink.sugar_tools.GroupActivity):
self._pid = self._vte.fork_command_full(
Vte.PtyFlags.DEFAULT,
get_bundle_path(),
- ["/bin/sh", "-c", "python %s; sleep 1" % pippy_app_name,
+ ["/bin/sh", "-c", "python %s; sleep 1" % current_file,
"PYTHONPATH=%s/library:%s" % (get_bundle_path(),
os.getenv("PYTHONPATH", ""))],
["PYTHONPATH=%s/library:%s" % (get_bundle_path(),
@@ -488,9 +507,67 @@ class PippyActivity(ViewSourceActivity, groupthink.sugar_tools.GroupActivity):
except:
pass # process must already be dead.
+ def _save_as_library(self, button):
+ import unicodedata
+ library_dir = os.path.join(get_bundle_path(), "library")
+ file_name = self.source_tabs.get_current_file_name()
+ text_buffer = self.source_tabs.get_text_buffer()
+ content = text_buffer.get_text(
+ *text_buffer.get_bounds(),
+ include_hidden_chars=True)
+
+ if not os.path.isdir(library_dir):
+ os.mkdir(library_dir)
+
+ with open(os.path.join(library_dir, file_name), "w") as f:
+ f.write(content)
+ success = True
+
+ if success:
+ alert = NotifyAlert(5)
+ alert.props.title = _('Python File added to Library')
+ IMPORT_MESSAGE = _('The file you selected has been added'
+ ' to the library. Use "import {importname}"'
+ ' to import the library for using.')
+ alert.props.msg = IMPORT_MESSAGE.format(importname=file_name[:-3])
+ alert.connect('response', self.remove_alert_cb)
+ self.add_alert(alert)
+
def _export_document_cb(self, __):
self.copy()
+ def remove_alert_cb(self, alert, response_id):
+ self.remove_alert(alert)
+
+ def _import_py_cb(self, button):
+ chooser = ObjectChooser()
+ result = chooser.run()
+ if result is Gtk.ResponseType.ACCEPT:
+ dsitem = chooser.get_selected_object()
+ if dsitem.metadata['mime_type'] != "text/x-python":
+ alert = NotifyAlert(5)
+ alert.props.title = _('Error importing Python file')
+ alert.props.msg = _('The file you selected is not a '
+ 'Python file.')
+ alert.connect('response', self.remove_alert_cb)
+ self.add_alert(alert)
+ elif dsitem.object_id in self.session_data:
+ alert = NotifyAlert(5)
+ alert.props.title = _('Error importing Python file')
+ alert.props.msg = _('The file you selected is already '
+ 'open')
+ alert.connect('response', self.remove_alert_cb)
+ self.add_alert(alert)
+ else:
+ name = dsitem.metadata['title']
+ file_path = dsitem.get_file_path()
+ content = open(file_path, "r").read()
+
+ self.source_tabs.add_tab(name, content)
+ self.session_data.append(dsitem.object_id)
+
+ chooser.destroy()
+
def _create_bundle_cb(self, __):
from shutil import copytree, copy2, rmtree
from tempfile import mkdtemp
@@ -542,6 +619,19 @@ class PippyActivity(ViewSourceActivity, groupthink.sugar_tools.GroupActivity):
self._vte.feed("\r\n")
raise
+ def _write_text_buffer(self, filename):
+ text_buffer = self.source_tabs.get_text_buffer()
+ start, end = text_buffer.get_bounds()
+ text = text_buffer.get_text(start, end, True)
+
+ with open(filename, 'w') as f:
+ # write utf-8 coding prefix if there's not already one
+ if re.match(r'coding[:=]\s*([-\w.]+)',
+ '\n'.join(text.splitlines()[:2])) is None:
+ f.write(PYTHON_PREFIX)
+ for line in text:
+ f.write(line)
+
def __export_disutils_cb(self, button):
app_temp = os.path.join(self.get_activity_root(), "instance")
data = self.source_tabs.get_all_data()
@@ -558,8 +648,9 @@ class PippyActivity(ViewSourceActivity, groupthink.sugar_tools.GroupActivity):
from sugar3.graphics.icon import Icon
alert = Alert()
alert.props.title = _('Save as disutils package error')
- alert.props.msg = _('Please give your activity a meaningful \
-name before attempting to save it as an disutils package.')
+ alert.props.msg = _('Please give your activity a meaningful'
+ 'name before attempting to save it '
+ 'as an disutils package.')
ok_icon = Icon(icon_name='dialog-ok')
alert.add_button(Gtk.ResponseType.OK, _('Ok'), ok_icon)
alert.connect('response', self.dismiss_alert_cb)
@@ -731,10 +822,8 @@ Do you want to overwrite it?')
if dsitem is not None:
sessionlist.append([name, dsitem.object_id])
- print dsitem.object_id
else:
sessionlist.append([name, dsobject.object_id])
- print dsobject.object_id
self.metadata['mime_type'] = 'application/json'
_file.write(json.dumps(sessionlist))
@@ -744,7 +833,6 @@ Do you want to overwrite it?')
def load_from_journal(self, file_path):
if self.metadata['mime_type'] == 'text/x-python':
- print file_path
text = open(file_path).read()
# discard the '#!/usr/bin/python' and 'coding: utf-8' lines,
# if present
@@ -753,13 +841,7 @@ Do you want to overwrite it?')
self.initial_text_buffer = text
self.initial_title = self.metadata['title']
self.loaded_from_journal = self.py_file = True
- # We need to get the ds entry for the file we got.
- # So that we can add to session_data and save to it
- # for the corresponding tab.
- # TASKIDEA: Add import .py file in pippy
- # so that .py file can be packed in disutils package.
- # Like I have 3 files and need to have a file from
- # the journal. Then I will import it and export to disutils.
+
elif self.metadata['mime_type'] == "application/json":
data = json.loads(open(file_path).read())
for name, dsid in data:
@@ -928,7 +1010,6 @@ def main():
from shutil import copytree, copy2, rmtree
from sugar3 import profile
from sugar3.activity import bundlebuilder
- import sys
parser = OptionParser(usage='%prog [options] [title] [sourcefile]')
parser.add_option('-d', '--dir', dest='dir', default='.', metavar='DIR',