Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/activity.py
diff options
context:
space:
mode:
Diffstat (limited to 'activity.py')
-rw-r--r--activity.py69
1 files changed, 67 insertions, 2 deletions
diff --git a/activity.py b/activity.py
index fe3da0b..8639348 100644
--- a/activity.py
+++ b/activity.py
@@ -17,9 +17,14 @@
"""HelloWorld Activity: A case study for developing an activity."""
import gtk
+import os
+import sys
import logging
+import socket
+from time import sleep
from gettext import gettext as _
+#from multiprocessing import Process
from sugar.activity import activity
from sugar.graphics.toolbarbox import ToolbarBox
@@ -29,8 +34,26 @@ from sugar.activity.widgets import TitleEntry
from sugar.activity.widgets import StopButton
from sugar.activity.widgets import ShareButton
from sugar.activity.widgets import KeepButton
+from sugar.activity.widgets import ToolButton
from about import AboutButton
+try:
+ import webkit
+except ImportError:
+ try:
+ import webkit_local #from Agubrowser!
+ except ImportError:
+ print "You need webkit to use WebSDK."
+ sys.exit(0)
+from inspector import Inspector
+
+def PickUnusedPort():
+ s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ s.bind(('localhost', 0))
+ addr, port = s.getsockname()
+ s.close()
+ return port
+
class HelloWorldActivity(activity.Activity):
"""HelloWorldActivity class as specified in activity.info"""
@@ -41,6 +64,19 @@ class HelloWorldActivity(activity.Activity):
# we do not have collaboration features
# make the share option insensitive
self.max_participants = 1
+ self.port = PickUnusedPort()
+
+ #Potentially this could be a subprocess, need to test more
+ #self.serverpid = Process(target=self.server)
+ #self.serverpid.start()
+ #self.serverpid.join()
+
+ self.serverpid = os.fork()
+ if self.serverpid==0:
+ self.server()
+ print "Server quit. Exiting."
+ sys.exit(0)
+
# toolbar with the new toolbar redesign
toolbar_box = ToolbarBox()
@@ -67,6 +103,11 @@ class HelloWorldActivity(activity.Activity):
toolbar_box.toolbar.insert(separator, -1)
separator.show()
+ debug_button = ToolButton("activity-debug")
+ toolbar_box.toolbar.insert(debug_button, -1)
+ debug_button.connect('clicked', self.__debug_button_cb)
+ debug_button.show()
+
about_button = AboutButton(self)
toolbar_box.toolbar.insert(about_button, -1)
about_button.show()
@@ -80,5 +121,29 @@ class HelloWorldActivity(activity.Activity):
# label with the text, make the string translatable
label = gtk.Label(_("Hello World!"))
- self.set_canvas(label)
- label.show()
+
+ self.web_view = webkit.WebView()
+ sleep(1) # TODO implement throbber and callback
+ self.web_view.open("http://localhost:%s/www/index.html" % self.port)
+
+ settings = self.web_view.get_settings()
+ settings.set_property("enable-developer-extras", True)
+ self.inspector = Inspector(self.web_view.get_web_inspector())
+ self.inspector.set_title("WebSDK Inspector")
+
+ self.set_canvas(self.web_view)
+ self.web_view.show()
+
+ def __debug_button_cb(self, widget):
+ self.inspector.emit('inspect-web-view')
+ self.inspector.show()
+ return True
+
+ def can_close(self):
+ #self.serverpid.terminate()
+ os.kill(self.serverpid, 15)
+ return True
+
+ def server(self):
+ import appservice
+ appservice.start(self.port)