Ticket #1496: pippy_saveexample.patch
File pippy_saveexample.patch, 5.7 KB (added by geirea, 15 years ago) |
---|
-
pippy_app.py
diff --git a/pippy_app.py b/pippy_app.py index abaf397..7a9ea6f 100644
a b class PippyActivity(ViewSourceActivity): 77 77 menu_item.connect('activate', self.makebutton_cb) 78 78 palette.menu.append(menu_item) 79 79 menu_item.show() 80 menu_item = MenuItem(_('As Pippy Example')) 81 menu_item.set_image(Icon(file=('%s/activity/activity-icon.svg' % get_bundle_path()), icon_size=gtk.ICON_SIZE_MENU)) 82 menu_item.connect('activate', self.saveexamplebutton_cb) 83 palette.menu.append(menu_item) 84 menu_item.show() 85 80 86 self.set_toolbox(toolbox) 81 87 toolbox.show() 82 88 … … class PippyActivity(ViewSourceActivity): 88 94 sidebar = gtk.VBox() 89 95 self.model = gtk.TreeStore(gobject.TYPE_PYOBJECT, gobject.TYPE_STRING) 90 96 treeview = gtk.TreeView(self.model) 97 91 98 cellrenderer = gtk.CellRendererText() 92 99 treecolumn = gtk.TreeViewColumn(_("Examples"), cellrenderer, text=1) 93 100 treeview.get_selection().connect("changed", self.selection_cb) … … class PippyActivity(ViewSourceActivity): 117 124 self.model.set_value(_iter, 0, entry) 118 125 self.model.set_value(_iter, 1, entry["name"]) 119 126 127 # now add local examples 128 d = os.path.join(os.environ['SUGAR_ACTIVITY_ROOT'],'data') 129 direntry = { "name": _("My examples"), 130 "path": d + "/" } 131 self.example_iter = self.model.insert_before(None, None) 132 self.model.set_value(self.example_iter, 0, direntry) 133 self.model.set_value(self.example_iter, 1, direntry["name"]) 134 135 for _file in sorted(os.listdir(d)): 136 if _file.endswith('~'): continue # skip emacs backups 137 entry = { "name": _(_file.capitalize()), 138 "path": os.path.join(d, _file) } 139 _iter = self.model.insert_before(self.example_iter, None) 140 self.model.set_value(_iter, 0, entry) 141 self.model.set_value(_iter, 1, entry["name"]) 142 120 143 treeview.expand_all() 121 144 122 145 # Source buffer … … class PippyActivity(ViewSourceActivity): 217 240 hbox.pack_end(vbox) 218 241 self.set_canvas(hbox) 219 242 self.show_all() 220 221 243 222 244 self.hellotube = None 223 245 … … class PippyActivity(ViewSourceActivity): 252 274 def vte_drop_cb(self, widget, context, x, y, selection, targetType, time): 253 275 if targetType == TARGET_TYPE_TEXT: 254 276 self._vte.feed_child(selection.data) 277 255 278 def selection_cb(self, column): 256 279 self.save() 257 280 model, _iter = column.get_selected() … … class PippyActivity(ViewSourceActivity): 287 310 f.write(PYTHON_PREFIX) 288 311 for line in text: 289 312 f.write(line) 313 290 314 def _reset_vte(self): 291 315 self._vte.grab_focus() 292 316 self._vte.feed("\x1B[H\x1B[J\x1B[0;39m") … … class PippyActivity(ViewSourceActivity): 366 390 rmtree(app_temp, ignore_errors=True) # clean up! 367 391 raise 368 392 393 def saveexamplebutton_cb(self, __): 394 # get the name of this pippy program. 395 title = self.metadata['title'] 396 if title == _('Pippy Activity'): 397 from sugar.graphics.alert import Alert 398 from sugar.graphics.icon import Icon 399 alert = Alert() 400 alert.props.title =_ ('Save as Example Error') 401 alert.props.msg = _('Please give your activity a meaningful name before attempting to save it as an example.') 402 ok_icon = Icon(icon_name='dialog-ok') 403 alert.add_button(gtk.RESPONSE_OK, _('Ok'), ok_icon) 404 alert.connect('response', self.dismiss_alert_cb) 405 self.add_alert(alert) 406 return 407 self.stopbutton_cb(None) # try stopping old code first. 408 self._reset_vte() 409 self._vte.feed(_("Creating example...")) 410 self._vte.feed("\r\n") 411 local_data = os.path.join(os.environ['SUGAR_ACTIVITY_ROOT'],'data') 412 local_file = os.path.join(local_data,title) 413 if os.path.exists(local_file): 414 from sugar.graphics.alert import ConfirmationAlert 415 alert = ConfirmationAlert() 416 alert.props.title =_ ('Save as Example Warning') 417 alert.props.msg = _('This example already exists. Do you want to overwrite it?') 418 alert.connect('response', self.confirmation_alert_cb, local_file) 419 self.add_alert(alert) 420 else: 421 self.write_file(local_file) 422 self._reset_vte() 423 self._vte.feed(_("Saved as example.")) 424 self._vte.feed("\r\n") 425 self.add_to_example_list(local_file) 426 369 427 def child_exited_cb(self, *args): 370 428 """Called whenever a child exits. If there's a handler, run it.""" 371 429 h, self._child_exited_handler = self._child_exited_handler, None … … class PippyActivity(ViewSourceActivity): 408 466 def dismiss_alert_cb(self, alert, response_id): 409 467 self.remove_alert(alert) 410 468 469 def confirmation_alert_cb(self, alert, response_id, local_file): 470 self.remove_alert(alert) 471 if response_id is gtk.RESPONSE_OK: 472 self.write_file(local_file) 473 self._reset_vte() 474 self._vte.feed(_("Saved as example.")) 475 self._vte.feed("\r\n") 476 else: 477 self._reset_vte() 478 479 def add_to_example_list(self,local_file): 480 entry = { "name": _(os.path.basename(local_file)), 481 "path": local_file } 482 _iter = self.model.insert_before(self.example_iter, None) 483 self.model.set_value(_iter, 0, entry) 484 self.model.set_value(_iter, 1, entry["name"]) 485 411 486 def write_file(self, file_path): 412 487 self.metadata['mime_type'] = 'text/x-python' 413 488 global text_buffer