Differences between tepache and sweettepache: Difference between revisions
Jump to navigation
Jump to search
(Output of svn diff) |
(oops!) |
||
| Line 1: | Line 1: | ||
Index: sweettepache.py |
Index: sweettepache.py |
||
=================================================================== |
=================================================================== |
||
<pre> |
|||
--- sweettepache.py (revision 1) |
--- sweettepache.py (revision 1) |
||
+++ sweettepache.py (revision 2) |
+++ sweettepache.py (revision 2) |
||
| Line 465: | Line 466: | ||
""" |
""" |
||
SimpleGladeApp.py |
SimpleGladeApp.py |
||
</pre> |
|||
Latest revision as of 03:47, 21 February 2008
Index: sweettepache.py
=======================================================
--- sweettepache.py (revision 1)
+++ sweettepache.py (revision 2)
@@ -113,6 +113,7 @@
self.indent = 4 * " "
def write(self, output_file=None):
+ global options, status
module_code = ""
if output_file:
self.data["module"] = self.output_file = output_file
@@ -146,7 +147,64 @@
except IOError, e:
printerr(e)
return False
+
+ if not options.no_sugar:
+ activity_file = self.output_file[:-3] + 'Activity.py'
+ if os.path.isfile(activity_file):
+ shutil.copy(activity_file, activity_file + '.bak')
+ activity_code = sugar_activity_format % self.data
+
+
+ try:
+ self.output = codecs.open(activity_file, "w", "utf-8")
+ self.output.write(activity_code)
+ self.output.close()
+ except IOError, e:
+ printerr(e)
+ return False
+
+ #write setup.py format
+ setup_code = setup_format % self.data
+ try:
+ self.output = codecs.open("setup.py", "w", "utf-8")
+ self.output.write(setup_code)
+ self.output.close()
+ except IOError, e:
+ printerr(e)
+ return False
+
+ if not os.path.isdir('activity'):
+ #mkdir nameActivity.activity/activity
+ os.makedirs('activity')
+ os.chdir("activity")
+
+ if not options.no_icon:
+ #write nameActivity.activity/activity/activity-name.svg
+ icon_code = icon_format
+ icon_file = 'activity-' + self.output_file[:-3] + '.svg'
+ try:
+ self.output = codecs.open(icon_file, "w", "utf-8")
+ self.output.write(icon_code)
+ self.output.close()
+
+ except IOError, e:
+ printerr(e)
+ return False
+
+ #write nameActivity.activity/activity/activity.info
+ info_code = activity_info_format %self.data
+ info_file = 'activity.info'
+ try:
+ self.output = codecs.open(info_file, "w", "utf-8")
+ self.output.write(info_code)
+ self.output.close()
+ except IOError, e:
+ printerr(e)
+ return False
+
+ os.chdir(os.pardir)
+
return True
def parse(self):
@@ -347,60 +405,60 @@
open(source_filename, "w").write(normalized_source_data)
-def get_binaries_path():
- binaries_path_list = os.environ["PATH"].split(os.pathsep)
- if __WIN32__:
- try:
- import win32con
- import win32api
- import pywintypes
- gnu_path = ""
+def get_binaries_path():
+ binaries_path_list = os.environ["PATH"].split(os.pathsep)
+ if __WIN32__:
+ try:
+ import win32con
+ import win32api
+ import pywintypes
+ gnu_path = ""
try:
winreg_key = win32con.HKEY_LOCAL_MACHINE
- winreg_subkey = "SOFTWARE\\GnuWin32"
- h = win32api.RegOpenKey(winreg_key, winreg_subkey)
- gnu_path = win32api.RegQueryValueEx(h, "InstallPath")[0]
- win32api.RegCloseKey(h)
- gnu_path_bin = os.path.join(gnu_path, "bin")
- binaries_path_list.insert(0, gnu_path_bin)
- except pywintypes.error, e:
- printerr("You haven't installed any GnuWin32 program.")
- except ImportError:
- printerr("I can't look for programs in the win32 registry")
- printerr("The pywin32 extension should be installed")
- printerr("Download it from %s\n" % pywin32_home)
- return binaries_path_list
-
-def get_programs_paths(programs_list):
- if __WIN32__:
- exe_ext = ".exe"
- else:
- exe_ext = ""
- path_list = get_binaries_path()
+ winreg_subkey = "SOFTWARE\\GnuWin32"
+ h = win32api.RegOpenKey(winreg_key, winreg_subkey)
+ gnu_path = win32api.RegQueryValueEx(h, "InstallPath")[0]
+ win32api.RegCloseKey(h)
+ gnu_path_bin = os.path.join(gnu_path, "bin")
+ binaries_path_list.insert(0, gnu_path_bin)
+ except pywintypes.error, e:
+ printerr("You haven't installed any GnuWin32 program.")
+ except ImportError:
+ printerr("I can't look for programs in the win32 registry")
+ printerr("The pywin32 extension should be installed")
+ printerr("Download it from %s\n" % pywin32_home)
+ return binaries_path_list
+
+def get_programs_paths(programs_list):
+ if __WIN32__:
+ exe_ext = ".exe"
+ else:
+ exe_ext = ""
+ path_list = get_binaries_path()
programs_paths = [None,]*len(programs_list)
- for i,program in enumerate(programs_list):
+ for i,program in enumerate(programs_list):
for path in path_list:
program_path = os.path.join(path, program) + exe_ext
- if os.path.isfile(program_path):
- if " " in program_path:
+ if os.path.isfile(program_path):
+ if " " in program_path:
program_path = '"%s"' % program_path
programs_paths[i] = program_path
- return programs_paths
+ return programs_paths
def get_required_programs():
- program_names = ["diff", "patch"]
- package_names = ["diffutils", "patch"]
-
- programs_paths = get_programs_paths(program_names)
- for i,program_path in enumerate(programs_paths):
+ program_names = ["diff", "patch"]
+ package_names = ["diffutils", "patch"]
+
+ programs_paths = get_programs_paths(program_names)
+ for i,program_path in enumerate(programs_paths):
if not program_path:
- program, package = program_names[i], package_names[i]
- printerr("Required program %s could not be found" % program)
- printerr("Is the package %s installed?" % package)
- if __WIN32__:
+ program, package = program_names[i], package_names[i]
+ printerr("Required program %s could not be found" % program)
+ printerr("Is the package %s installed?" % package)
+ if __WIN32__:
printerr("Download it from %s" % gnuwin32_home)
return None
- return programs_paths
+ return programs_paths
def get_options_status():
usage = "usage: %prog [options] [GLADE_FILE] [OUTPUT_FILE]"
@@ -409,6 +467,9 @@
version = "1.0"
parser = optparse.OptionParser(usage=usage, version=version,
description=description)
+ parser.add_option("-i", "--no-icon", dest = "no_icon",
+ action="store_true",
+ help="I already have an activity icon")
parser.add_option("-g", "--glade", dest="glade_file",
help="file to parse")
parser.add_option("-o", "--output", dest="output_file",
@@ -416,6 +477,9 @@
parser.add_option("-n", "--no-helper", dest="no_helper",
action="store_true",
help="Do not write the helper module")
+ parser.add_option('-s', "--without-sugar", dest = "no_sugar",
+ action="store_true",
+ help="No sweetening needed")
parser.add_option("-t", "--use-tabs", dest="use_tabs",
action="store_true",
help="\
@@ -434,10 +498,11 @@
return options, status
def main():
- programs_paths = get_required_programs()
- if not programs_paths:
- return -1
- diff_bin, patch_bin = programs_paths
+ #programs_paths = get_required_programs()
+ #if not programs_paths:
+ # return -1
+ #diff_bin, patch_bin = programs_paths
+ global options, status
options, status = get_options_status()
if not status:
@@ -459,37 +524,35 @@
exists_output_file = os.path.exists(output_file)
exists_output_file_orig = os.path.exists(output_file_orig)
+ if exists_output_file:
+ #back up the original
+ shutil.copy(output_file, output_file_bak)
+
if not exists_output_file_orig and exists_output_file:
- printerr('File "%s" exists' % short_f)
- printerr('but "%s" does not.' % short_f_orig)
- printerr("That means your custom code would be overwritten.")
- printerr('Please manually remove "%s"' % short_f)
- printerr("from this directory.")
- printerr("Anyway, I\'ll create a backup for you in")
- printerr('"%s"' % short_f_bak)
- shutil.copy(output_file, output_file_bak)
- return -1
+ shutil.copy(output_file, output_file_orig)
+ exists_output_file_orig = True
+
if options.use_tabs:
code_writer.indent = "\t"
if exists_output_file_orig and exists_output_file:
if not options.use_tabs:
normalize_indentation(output_file_orig)
normalize_indentation(output_file)
- diff_command = "%s -U1 %s %s > %s"
- diff_args = (diff_bin, output_file_orig, output_file, diff_file)
- os.system(diff_command % diff_args)
- shutil.copy(output_file, output_file_bak)
if not code_writer.write(output_file):
os.remove(diff_file)
return -1
+ diff_command = "%s -U3 %s %s > %s"
+ diff_bin = "diff"
+ diff_args = (diff_bin, output_file, output_file_orig, diff_file)
+ os.system(diff_command % diff_args)
orig_callbacks = get_callbacks_from_code(output_file_orig)
callbacks = get_callbacks_from_code(output_file)
renamed_symbols = get_renamed_symbols(orig_callbacks, callbacks)
if renamed_symbols:
diff_apply_renamed_symbols(diff_file, renamed_symbols)
- shutil.copy(output_file, output_file_orig)
- patch_command = "%s -fp0 < %s"
- patch_args = (patch_bin, diff_file)
+ patch_command = "%s -fp0 %s < %s"
+ patch_bin = "patch"
+ patch_args = (patch_bin, output_file, diff_file)
if os.system(patch_command % patch_args):
os.remove(diff_file)
return -1
@@ -497,7 +560,6 @@
else:
if not code_writer.write(output_file):
return -1
- shutil.copy(output_file, output_file_orig)
os.chmod(output_file, 0755)
if not options.no_helper and not os.path.isfile(helper_module):
@@ -592,6 +654,9 @@
instance_format = '''\
%(t)s%(instance)s = %(class)s()
+%(t)swidget = %(instance)s.get_widget('%(root)s')
+%(t)swidget.connect("destroy", lambda w: gtk.main_quit())
+%(t)swidget.show()
'''
run_format = '''\
@@ -604,6 +669,134 @@
#-- main }
'''
+sugar_activity_format= """\
+import %(app_name)s
+
+from sugar.activity import activity
+
+class %(app_name)sActivity(activity.Activity):
+ def __init__(self, handle):
+ activity.Activity.__init__(self, handle)
+
+ self.testname = '%(app_name)s'
+ self.set_title(self.testname)
+
+ glade = %(app_name)s.%(class)s(root='vbox1')
+ self.vbox = glade.get_widget('vbox1')
+ widgets = self.get_children()
+ widget = widgets[0]
+ widget.pack_start(self.vbox)
+
+ toolbox = activity.ActivityToolbox(self)
+ self.set_toolbox(toolbox)
+ toolbox.show()
+"""
+
+setup_format= """\
+#!/usr/bin/env python
+from sugar.activity import bundlebuilder
+if __name__ == "__main__":
+ bundlebuilder.start("%(app_name)sActivity")
+"""
+
+icon_format= """\
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="50"
+ height="50"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.45.1"
+ sodipodi:docname="activity-gui.svg"
+ sodipodi:docbase="/home/tony/Documents/Activities/GUIActivity.activity/activity"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <metadata
+ id="metadata9">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs7" />
+ <sodipodi:namedview
+ inkscape:window-height="627"
+ inkscape:window-width="910"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10.0"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ inkscape:zoom="8.14"
+ inkscape:cx="25"
+ inkscape:cy="25"
+ inkscape:window-x="0"
+ inkscape:window-y="25"
+ inkscape:current-layer="svg2" />
+ <rect
+ x="0.26289925"
+ y="2.3513515"
+ width="48"
+ height="48"
+ style="fill:#ffffff;stroke:#000000;stroke-width:2"
+ id="rect4" />
+ <text
+ xml:space="preserve"
+ style="font-size:8px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="8.7223587"
+ y="12.776413"
+ id="text2161"><tspan
+ sodipodi:role="line"
+ id="tspan2163"
+ x="8.7223587"
+ y="12.776413" /></text>
+ <text
+ xml:space="preserve"
+ style="font-size:14px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="10.687961"
+ y="3.6855037"
+ id="text2165"><tspan
+ sodipodi:role="line"
+ x="10.687961"
+ y="3.6855037"
+ id="tspan2169"></tspan><tspan
+ sodipodi:role="line"
+ x="10.687961"
+ y="21.185504"
+ id="tspan2162">Test</tspan><tspan
+ sodipodi:role="line"
+ x="10.687961"
+ y="38.685504"
+ id="tspan2327">GUI</tspan></text>
+</svg>
+"""
+
+activity_info_format = """\
+[Activity]
+name = %(app_name)s
+service_name = org.laptop.%(app_name)sActivity
+class = %(app_name)sActivity.%(app_name)sActivity
+exec = sugar-activity %(app_name)sActivity.%(app_name)sActivity
+icon = activity-%(app_name)s
+activity_version = 1
+show_launcher = yes
+"""
+
SimpleGladeApp_content = '''\
"""
SimpleGladeApp.py