Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGabriel Eirea <gabriel@castalia.(none)>2009-10-11 15:22:29 (GMT)
committer Gabriel Eirea <gabriel@castalia.(none)>2009-10-11 15:22:29 (GMT)
commita9ccd09bb1b207d1cfa86ba0cf5888596acfcaed (patch)
tree95863e232748fe1fb5db9b1740d7470048f12591
parent0d622e6c2fe08c9d06ac03aa6d28e49b2f66da21 (diff)
Added "save as example" functionality
-rw-r--r--pippy_app.py77
1 files changed, 76 insertions, 1 deletions
diff --git a/pippy_app.py b/pippy_app.py
index abaf397..7a9ea6f 100644
--- a/pippy_app.py
+++ b/pippy_app.py
@@ -77,6 +77,12 @@ class PippyActivity(ViewSourceActivity):
menu_item.connect('activate', self.makebutton_cb)
palette.menu.append(menu_item)
menu_item.show()
+ menu_item = MenuItem(_('As Pippy Example'))
+ menu_item.set_image(Icon(file=('%s/activity/activity-icon.svg' % get_bundle_path()), icon_size=gtk.ICON_SIZE_MENU))
+ menu_item.connect('activate', self.saveexamplebutton_cb)
+ palette.menu.append(menu_item)
+ menu_item.show()
+
self.set_toolbox(toolbox)
toolbox.show()
@@ -88,6 +94,7 @@ class PippyActivity(ViewSourceActivity):
sidebar = gtk.VBox()
self.model = gtk.TreeStore(gobject.TYPE_PYOBJECT, gobject.TYPE_STRING)
treeview = gtk.TreeView(self.model)
+
cellrenderer = gtk.CellRendererText()
treecolumn = gtk.TreeViewColumn(_("Examples"), cellrenderer, text=1)
treeview.get_selection().connect("changed", self.selection_cb)
@@ -117,6 +124,22 @@ class PippyActivity(ViewSourceActivity):
self.model.set_value(_iter, 0, entry)
self.model.set_value(_iter, 1, entry["name"])
+ # now add local examples
+ d = os.path.join(os.environ['SUGAR_ACTIVITY_ROOT'],'data')
+ direntry = { "name": _("My examples"),
+ "path": d + "/" }
+ self.example_iter = self.model.insert_before(None, None)
+ self.model.set_value(self.example_iter, 0, direntry)
+ self.model.set_value(self.example_iter, 1, direntry["name"])
+
+ for _file in sorted(os.listdir(d)):
+ if _file.endswith('~'): continue # skip emacs backups
+ entry = { "name": _(_file.capitalize()),
+ "path": os.path.join(d, _file) }
+ _iter = self.model.insert_before(self.example_iter, None)
+ self.model.set_value(_iter, 0, entry)
+ self.model.set_value(_iter, 1, entry["name"])
+
treeview.expand_all()
# Source buffer
@@ -217,7 +240,6 @@ class PippyActivity(ViewSourceActivity):
hbox.pack_end(vbox)
self.set_canvas(hbox)
self.show_all()
-
self.hellotube = None
@@ -252,6 +274,7 @@ class PippyActivity(ViewSourceActivity):
def vte_drop_cb(self, widget, context, x, y, selection, targetType, time):
if targetType == TARGET_TYPE_TEXT:
self._vte.feed_child(selection.data)
+
def selection_cb(self, column):
self.save()
model, _iter = column.get_selected()
@@ -287,6 +310,7 @@ class PippyActivity(ViewSourceActivity):
f.write(PYTHON_PREFIX)
for line in text:
f.write(line)
+
def _reset_vte(self):
self._vte.grab_focus()
self._vte.feed("\x1B[H\x1B[J\x1B[0;39m")
@@ -366,6 +390,40 @@ class PippyActivity(ViewSourceActivity):
rmtree(app_temp, ignore_errors=True) # clean up!
raise
+ def saveexamplebutton_cb(self, __):
+ # get the name of this pippy program.
+ title = self.metadata['title']
+ if title == _('Pippy Activity'):
+ from sugar.graphics.alert import Alert
+ from sugar.graphics.icon import Icon
+ alert = Alert()
+ alert.props.title =_ ('Save as Example Error')
+ alert.props.msg = _('Please give your activity a meaningful name before attempting to save it as an example.')
+ ok_icon = Icon(icon_name='dialog-ok')
+ alert.add_button(gtk.RESPONSE_OK, _('Ok'), ok_icon)
+ alert.connect('response', self.dismiss_alert_cb)
+ self.add_alert(alert)
+ return
+ self.stopbutton_cb(None) # try stopping old code first.
+ self._reset_vte()
+ self._vte.feed(_("Creating example..."))
+ self._vte.feed("\r\n")
+ local_data = os.path.join(os.environ['SUGAR_ACTIVITY_ROOT'],'data')
+ local_file = os.path.join(local_data,title)
+ if os.path.exists(local_file):
+ from sugar.graphics.alert import ConfirmationAlert
+ alert = ConfirmationAlert()
+ alert.props.title =_ ('Save as Example Warning')
+ alert.props.msg = _('This example already exists. Do you want to overwrite it?')
+ alert.connect('response', self.confirmation_alert_cb, local_file)
+ self.add_alert(alert)
+ else:
+ self.write_file(local_file)
+ self._reset_vte()
+ self._vte.feed(_("Saved as example."))
+ self._vte.feed("\r\n")
+ self.add_to_example_list(local_file)
+
def child_exited_cb(self, *args):
"""Called whenever a child exits. If there's a handler, run it."""
h, self._child_exited_handler = self._child_exited_handler, None
@@ -408,6 +466,23 @@ class PippyActivity(ViewSourceActivity):
def dismiss_alert_cb(self, alert, response_id):
self.remove_alert(alert)
+ def confirmation_alert_cb(self, alert, response_id, local_file):
+ self.remove_alert(alert)
+ if response_id is gtk.RESPONSE_OK:
+ self.write_file(local_file)
+ self._reset_vte()
+ self._vte.feed(_("Saved as example."))
+ self._vte.feed("\r\n")
+ else:
+ self._reset_vte()
+
+ def add_to_example_list(self,local_file):
+ entry = { "name": _(os.path.basename(local_file)),
+ "path": local_file }
+ _iter = self.model.insert_before(self.example_iter, None)
+ self.model.set_value(_iter, 0, entry)
+ self.model.set_value(_iter, 1, entry["name"])
+
def write_file(self, file_path):
self.metadata['mime_type'] = 'text/x-python'
global text_buffer