diff options
author | Walter Bender <walter@sugarlabs.org> | 2014-01-11 19:05:22 (GMT) |
---|---|---|
committer | Walter Bender <walter@sugarlabs.org> | 2014-01-11 19:05:22 (GMT) |
commit | 554ba43f435dc8e5761ae8bf7d86f678483c8144 (patch) | |
tree | 8be3a09586ebf45b8630009495bc4c22d015557d | |
parent | 7d0f3ba1f113a83c651f71605d305879109a7df2 (diff) |
restore missing patch for bundle icon
-rw-r--r-- | pippy_app.py | 181 |
1 files changed, 74 insertions, 107 deletions
diff --git a/pippy_app.py b/pippy_app.py index 9148d42..f66a438 100644 --- a/pippy_app.py +++ b/pippy_app.py @@ -51,9 +51,12 @@ from sugar3.activity.widgets import StopButton from sugar3.activity.activity import get_bundle_path from sugar3.activity.activity import get_bundle_name from sugar3.graphics.alert import NotifyAlert +from sugar3.graphics.alert import ConfirmationAlert +from sugar3.graphics.alert import Alert from sugar3.graphics import style -from sugar3.graphics.toggletoolbutton import ToggleToolButton +from sugar3.graphics.icon import Icon from sugar3.graphics.objectchooser import ObjectChooser +from sugar3.graphics.toggletoolbutton import ToggleToolButton from jarabe.view.customizebundle import generate_unique_id @@ -64,6 +67,7 @@ import groupthink.sugar_tools import groupthink.gtk_tools from FileDialog import FileDialog +from IconDialog import IconDialog text_buffer = None # magic prefix to use utf-8 source encoding @@ -82,7 +86,7 @@ SIZE_Y = Gdk.Screen.height() groupthink_mimetype = 'pickle/groupthink-pippy' -from Notebook import SourceNotebook, AddNotebook +from Notebook import SourceNotebook DISUTILS_SETUP_SCRIPT = """#!/usr/bin/python # -*- coding: utf-8 -*- @@ -386,7 +390,6 @@ class PippyActivity(ViewSourceActivity, groupthink.sugar_tools.GroupActivity): def _select_func_cb(self, path): text_buffer = self.source_tabs.get_text_buffer() if text_buffer.get_modified(): - from sugar3.graphics.alert import ConfirmationAlert alert = ConfirmationAlert() alert.props.title = _('Example selection Warning') alert.props.msg = _('You have modified the currently selected file. \ @@ -508,7 +511,6 @@ class PippyActivity(ViewSourceActivity, groupthink.sugar_tools.GroupActivity): 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() @@ -569,15 +571,13 @@ class PippyActivity(ViewSourceActivity, groupthink.sugar_tools.GroupActivity): chooser.destroy() def _create_bundle_cb(self, __): - from shutil import copytree, copy2, rmtree + from shutil import rmtree from tempfile import mkdtemp # get the name of this pippy program. title = self.metadata['title'].replace('.py', '') title = title.replace('-', '') if title == 'Pippy Activity': - from sugar3.graphics.alert import Alert - from sugar3.graphics.icon import Icon alert = Alert() alert.props.title = _('Save as Activity Error') alert.props.msg = _('Please give your activity a meaningful name ' @@ -588,36 +588,59 @@ class PippyActivity(ViewSourceActivity, groupthink.sugar_tools.GroupActivity): self.add_alert(alert) return - self.stopbutton_cb(None) # try stopping old code first. - self._reset_vte() - self.outbox.show_all() - self._vte.feed(_("Creating activity bundle...")) - self._vte.feed("\r\n") - TMPDIR = 'instance' - app_temp = mkdtemp('.activity', 'Pippy', - os.path.join(self.get_activity_root(), TMPDIR)) - sourcefile = os.path.join(app_temp, 'xyzzy.py') - # invoke ourself to build the activity bundle. - self._logger.debug('writing out source file: %s' % sourcefile) + alert_icon = Alert() + ok_icon = Icon(icon_name='dialog-ok') + alert_icon.add_button(Gtk.ResponseType.OK, _('Ok'), ok_icon) + alert_icon.props.title = _('Activity icon') + alert_icon.props.msg = _('Please select an activity icon.') + + def internal_callback(window=None, event=None): + icon = "%s/activity/activity-default.svg" % (get_bundle_path()) + if window: + icon = window.get_icon() + self.stopbutton_cb(None) # try stopping old code first. + self._reset_vte() + self._vte.feed(_("Creating activity bundle...")) + self._vte.feed("\r\n") - # write out application code - self._write_text_buffer(sourcefile) + TMPDIR = 'instance' + app_temp = mkdtemp('.activity', 'Pippy', + os.path.join(self.get_activity_root(), TMPDIR)) + sourcefile = os.path.join(app_temp, 'xyzzy.py') + # invoke ourself to build the activity bundle. + self._logger.debug('writing out source file: %s' % sourcefile) + + # write out application code + self._write_text_buffer(sourcefile) + + try: + # FIXME: vte invocation was raising errors. + # Switched to subprocss + output = subprocess.check_output( + ["/usr/bin/python", + "%s/pippy_app.py" % get_bundle_path(), + '-p', '%s/library' % get_bundle_path(), + '-d', app_temp, title, sourcefile, icon]) + self._vte.feed(output) + self._vte.feed("\r\n") + self.bundle_cb(title, app_temp) + except subprocess.CalledProcessError: + rmtree(app_temp, ignore_errors=True) # clean up! + self._vte.feed(_('Save as Activity Error')) + self._vte.feed("\r\n") + raise - try: - # FIXME: vte invocation was raising errors. Switched to subprocess - output = subprocess.check_output( - ["/usr/bin/python", - "%s/pippy_app.py" % get_bundle_path(), - '-p', '%s/library' % get_bundle_path(), - '-d', app_temp, title, sourcefile]) - self._vte.feed(output) - self._vte.feed("\r\n") - self.bundle_cb(title, app_temp) - except subprocess.CalledProcessError: - rmtree(app_temp, ignore_errors=True) # clean up! - self._vte.feed(_('Save as Activity Error')) - self._vte.feed("\r\n") - raise + def alert_response(alert, response_id): + self.remove_alert(alert) + + def dialog(): + dialog = IconDialog() + dialog.connect('destroy', internal_callback) + + GObject.idle_add(dialog) + + alert_icon.connect('response', alert_response) + self.add_alert(alert_icon) def _write_text_buffer(self, filename): text_buffer = self.source_tabs.get_text_buffer() @@ -665,7 +688,7 @@ class PippyActivity(ViewSourceActivity, groupthink.sugar_tools.GroupActivity): os.chdir(app_temp) - output = subprocess.check_output( + subprocess.check_output( [ "/usr/bin/python", os.path.join(app_temp, "setup.py"), @@ -709,7 +732,6 @@ name before attempting to save it as an example.') 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 sugar3.graphics.alert import ConfirmationAlert alert = ConfirmationAlert() alert.props.title = _('Save as Example Warning') alert.props.msg = _('This example already exists. \ @@ -717,11 +739,11 @@ 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) + 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.""" @@ -885,64 +907,6 @@ stroke="&stroke_color;" stroke-linecap="round" stroke-width="3"/> """ -PIPPY_DEFAULT_ICON = \ -"""<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" -"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [ - <!ENTITY ns_svg "http://www.w3.org/2000/svg"> - <!ENTITY ns_xlink "http://www.w3.org/1999/xlink"> - <!ENTITY stroke_color "#000000"> - <!ENTITY fill_color "#FFFFFF"> -]><!--"--> -<svg version="1.1" id="Pippy_activity" xmlns="&ns_svg;" - xmlns:xlink="&ns_xlink;" width="47.585" height="49.326" - viewBox="0 0 47.585 49.326" overflow="visible" - enable-background="new 0 0 47.585 49.326" - xml:space="preserve"> -<path - fill="&fill_color;" stroke="&stroke_color;" stroke-width="2" d="M - 30.689595,16.460324 L 24.320145,12.001708 L 2.7550028,23.830689 L - 23.319231,38.662412 L 45.157349,26.742438 L 36.877062,21.100925" - id="path3195" /> -<path - fill="&fill_color;" stroke="&stroke_color;" stroke-width="2" - nodetypes="cscscssscsssssccc" - d="M 12.201296,21.930888 C 13.063838,20.435352 17.035411,18.617621 - 20.372026,18.965837 C 22.109464,19.147161 24.231003,20.786115 - 24.317406,21.584638 C 24.401593,22.43057 25.386617,24.647417 - 26.88611,24.600494 C 28.114098,24.562065 28.61488,23.562481 - 28.992123,22.444401 C 28.992123,22.444401 28.564434,17.493894 - 31.897757,15.363536 C 32.836646,14.763482 35.806711,14.411448 - 37.249047,15.221493 C 38.691382,16.031536 37.648261,19.495598 - 36.785717,20.991133 C 35.923174,22.48667 32.967872,24.980813 - 32.967872,24.980813 C 31.242783,27.971884 29.235995,28.5001 - 26.338769,28.187547 C 23.859153,27.920046 22.434219,26.128159 - 21.837191,24.708088 C 21.323835,23.487033 20.047743,22.524906 - 18.388178,22.52176 C 17.218719,22.519542 14.854476,23.017137 - 16.212763,25.620664 C 16.687174,26.53 18.919175,28.917592 - 21.08204,29.521929 C 22.919903,30.035455 26.713699,31.223552 - 30.30027,31.418089 C 26.770532,33.262079 21.760623,32.530604 - 18.909599,31.658168 C 17.361253,30.887002 9.0350995,26.651992 - 12.201296,21.930888 z " - id="path2209" /> -<path - fill="&fill_color;" stroke="&stroke_color;" stroke-width="1" - d="M 37.832194,18.895786 C 36.495131,19.851587 34.017797,22.097672 32.3528, - 21.069911" - id="path2211" - transform-center-y="-3.6171625" - transform-center-x="-0.50601649" /> -<circle - fill="&stroke_color;" stroke="none" stroke-width="0" - cx="33.926998" - cy="6.073" - r="1.927" - id="circle2213" - transform="matrix(0.269108,-0.4665976,-0.472839,-0.2655557,26.503175, - 35.608682)" - /> -</svg> -""" ############# ACTIVITY META-INFORMATION ############### # this is used by Pippy to generate a bundle for itself. @@ -964,7 +928,6 @@ def pippy_activity_extra_files(): for name in files: fn = os.path.join(root, name).replace(bp + '/', '') extra[fn] = open(os.path.join(root, name), 'r').read() - extra['activity/activity-default.svg'] = PIPPY_DEFAULT_ICON return extra @@ -1008,21 +971,22 @@ def main(): from pyclbr import readmodule_ex from tempfile import mkdtemp from shutil import copytree, copy2, rmtree - from sugar3 import profile from sugar3.activity import bundlebuilder - parser = OptionParser(usage='%prog [options] [title] [sourcefile]') + parser = OptionParser(usage='%prog [options] [title] [sourcefile] [icon]') parser.add_option('-d', '--dir', dest='dir', default='.', metavar='DIR', help='Put generated bundle in the specified directory.') parser.add_option('-p', '--pythonpath', dest='path', action='append', default=[], metavar='DIR', help='Append directory to python search path.') + (options, args) = parser.parse_args() - if len(args) != 2: - parser.error('The title and sourcefile arguments are required.') + if len(args) < 3: + parser.error('The title, sourcefile and icon arguments are required.') title = args[0] sourcefile = args[1] + icon_path = args[2] pytitle = re.sub(r'[^A-Za-z0-9_]', '', title) if re.match(r'[0-9]', pytitle) is not None: pytitle = '_' + pytitle # first character cannot be numeric @@ -1033,12 +997,15 @@ def main(): if not sourcedir: sourcedir = '.' module, ext = os.path.splitext(basename) + f = open(icon_path, 'r') + icon = f.read() + f.close() # things we look for: bundle_info = { 'version': 1, 'extra_files': {}, 'news': 'No news.', - 'icon': PIPPY_DEFAULT_ICON, + 'icon': icon, 'class': 'activity.VteActivity', 'bundle_id': ('org.sugarlabs.pippy.%s%d' % (generate_unique_id(), @@ -1114,8 +1081,8 @@ def main(): print('Finally\r\n') if __name__ == '__main__': - from gettext import gettext as _ import sys + from gettext import gettext as _ if False: # change this to True to test within Pippy sys.argv = sys.argv + ['-d', '/tmp', 'Pippy', '/home/olpc/pippy_app.py'] |