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 19:05:22 (GMT)
committer Walter Bender <walter@sugarlabs.org>2014-01-11 19:05:22 (GMT)
commit554ba43f435dc8e5761ae8bf7d86f678483c8144 (patch)
tree8be3a09586ebf45b8630009495bc4c22d015557d
parent7d0f3ba1f113a83c651f71605d305879109a7df2 (diff)
restore missing patch for bundle icon
-rw-r--r--pippy_app.py181
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']