Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/TurtleArtActivity.py
diff options
context:
space:
mode:
Diffstat (limited to 'TurtleArtActivity.py')
-rwxr-xr-xTurtleArtActivity.py128
1 files changed, 115 insertions, 13 deletions
diff --git a/TurtleArtActivity.py b/TurtleArtActivity.py
index 3c40d89..6fc4b50 100755
--- a/TurtleArtActivity.py
+++ b/TurtleArtActivity.py
@@ -3,32 +3,134 @@ import pygtk
pygtk.require('2.0')
import gtk
+from socket import *
+import sys
+import gobject
+
+serverHost = '192.168.1.101'
+serverPort = 5647
+
+import sugar
from sugar.activity import activity
+from sugar.activity import registry
+from sugar.graphics.toolbutton import ToolButton
+from sugar.datastore import datastore
+from sugar import profile
+from gettext import gettext as _
+
class TurtleArtActivity(activity.Activity):
def __init__(self, handle):
super(TurtleArtActivity,self).__init__(handle)
-
+# self.debug_init()
+
self.gamename = 'turtleart'
self.set_title("TurtleArt")
- toolbar = activity.ActivityToolbar(self)
- toolbar.show()
- self.set_toolbox(toolbar)
+
+ toolbox = activity.ActivityToolbox(self)
+ self.set_toolbox(toolbox)
+ self.projectToolbar = ProjectToolbar(self)
+ toolbox.add_toolbar( ('Project'), self.projectToolbar )
+ toolbox.show()
+
+ toolbox._activity_toolbar.keep.connect('clicked', self._keep_clicked_cb) # patch
self.connect('destroy', self._cleanup_cb)
-# self.connect('focus_in_event', self._focus_in)
-# self.connect('focus_out_event', self._focus_out)
-
+
canvas = gtk.EventBox()
- self.set_canvas(canvas)
+
+ sugar.graphics.window.Window.set_canvas(self, canvas)
+
ta.init(canvas, activity.get_bundle_path(),self)
-
+
+ if self._jobject and self._jobject.file_path:
+ self.read_file(self._jobject.file_path)
def _cleanup_cb(self, data=None):
return
- def _focus_in(self, event, data=None):
- return
+ def _keep_clicked_cb(self, button):
+ self.jobject_new_patch()
+
+ def write_file(self, file_path):
+ print "Writing file %s" % file_path
+ self.metadata['mime_type'] = 'application/x-tar'
+ import tarfile,os,tempfile
+ tar_fd = tarfile.open(file_path, 'w')
+ pngfd, pngfile = tempfile.mkstemp(".png")
+ tafd, tafile = tempfile.mkstemp(".ta")
+ del pngfd, tafd
+
+ try:
+ ta.save_data(tafile)
+ ta.save_pict(pngfile)
+ tar_fd.add(tafile, "ta_code.ta")
+ tar_fd.add(pngfile, "ta_image.png")
+
+ finally:
+ tar_fd.close()
+ os.remove(pngfile)
+ os.remove(tafile)
+
+ def read_file(self, file_path):
+ # Better be a tar file.
+ import tarfile,os,tempfile,shutil
+
+ print "Reading file %s" % file_path
+ tar_fd = tarfile.open(file_path, 'r')
+ tmpdir = tempfile.mkdtemp()
+
+ try:
+ # We'll get 'ta_code.ta' and 'ta_image.png'
+ tar_fd.extractall(tmpdir)
+ ta.load_files(os.path.join(tmpdir, 'ta_code.ta'), os.path.join(tmpdir, 'ta_image.png'))
+
+ finally:
+ shutil.rmtree(tmpdir)
+ tar_fd.close()
+
+ def debug_init(self):
+ s = socket(AF_INET, SOCK_STREAM) # create a TCP socket
+ s.connect((serverHost, serverPort)) # connect to server on the port
+ sys.stdout = s.makefile()
+ sys.stderr = sys.stdout
+ gobject.timeout_add(100, self.debug_tick)
+
+ def debug_tick(self):
+ sys.stdout.flush()
+ return True
+
+ def jobject_new_patch(self):
+ oldj = self._jobject
+ self._jobject = datastore.create()
+ self._jobject.metadata['title'] = oldj.metadata['title']
+ self._jobject.metadata['title_set_by_user'] = oldj.metadata['title_set_by_user']
+ self._jobject.metadata['activity'] = self.get_service_name()
+ self._jobject.metadata['activity_id'] = self.get_id()
+ self._jobject.metadata['keep'] = '0'
+ #self._jobject.metadata['buddies'] = ''
+ self._jobject.metadata['preview'] = ''
+ self._jobject.metadata['icon-color'] = profile.get_color().to_string()
+ self._jobject.file_path = ''
+ datastore.write(self._jobject,
+ reply_handler=self._internal_jobject_create_cb,
+ error_handler=self._internal_jobject_error_cb)
+
+
+class ProjectToolbar(gtk.Toolbar):
+ def __init__(self, pc):
+ gtk.Toolbar.__init__(self)
+ self.activity = pc
+
+ self.sampb = ToolButton( "stock-open" )
+ self.sampb.set_tooltip("samples")
+ self.sampb.props.sensitive = True
+ self.sampb.connect('clicked', self.do_samples)
+ self.insert(self.sampb, -1)
+ self.sampb.show()
+
+
+ def do_samples(self, button):
+ ta.load_file()
+# self.activity.jobject_new_patch()
- def _focus_out(self, event, data=None):
- return