diff options
author | Gabriel Eirea <gabriel@castalia.(none)> | 2009-10-11 15:22:29 (GMT) |
---|---|---|
committer | Gabriel Eirea <gabriel@castalia.(none)> | 2009-10-11 15:22:29 (GMT) |
commit | a9ccd09bb1b207d1cfa86ba0cf5888596acfcaed (patch) | |
tree | 95863e232748fe1fb5db9b1740d7470048f12591 | |
parent | 0d622e6c2fe08c9d06ac03aa6d28e49b2f66da21 (diff) |
Added "save as example" functionality
-rw-r--r-- | pippy_app.py | 77 |
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 |