Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/listview.py
diff options
context:
space:
mode:
Diffstat (limited to 'listview.py')
-rwxr-xr-xlistview.py144
1 files changed, 144 insertions, 0 deletions
diff --git a/listview.py b/listview.py
new file mode 100755
index 0000000..67b6d6a
--- /dev/null
+++ b/listview.py
@@ -0,0 +1,144 @@
+#!/usr/bin/python
+
+# ZetCode PyGTK tutorial
+#
+# This example shows a TreeView widget
+# in a list view mode
+#
+# author: jan bodnar
+# website: zetcode.com
+# last edited: February 2009
+
+import sys, os
+import gtk
+import objectfetch
+import urllib2
+from BeautifulSoup import BeautifulSoup
+from xml.dom.minidom import parse, parseString
+from sugar.activity import activity
+from sugar.datastore import datastore
+from path import path
+
+ACTIVITYPATH = path(activity.get_bundle_path())
+global online
+online = False
+
+class PyApp(gtk.Window):
+ def __init__(self):
+ super(PyApp, self).__init__()
+ self.set_size_request(350, 250)
+ self.set_position(gtk.WIN_POS_CENTER)
+
+ self.connect("destroy", gtk.main_quit)
+ self.set_title("DataManager")
+
+ vbox = gtk.VBox(False, 8)
+
+ sw = gtk.ScrolledWindow()
+ sw.set_shadow_type(gtk.SHADOW_ETCHED_IN)
+ sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+
+ vbox.pack_start(sw, True, True, 0)
+
+ store = self.create_model()
+
+ treeView = gtk.TreeView(store)
+ treeView.connect("row-activated", self.on_activated)
+ treeView.set_rules_hint(True)
+ sw.add(treeView)
+
+ self.create_columns(treeView)
+ self.statusbar = gtk.Statusbar()
+
+ vbox.pack_start(self.statusbar, False, False, 0)
+
+ self.add(vbox)
+ self.show_all()
+
+
+ def create_model(self):
+ global online
+ store = gtk.ListStore(str, str, str)
+ #let's display objects from the schoolserver
+ pth = ACTIVITYPATH / 'xoconfig'
+ configf = open(pth, "r")
+ config = configf.read()
+ configf.close()
+ pos = config.find('[Server]')
+ if pos < 0:
+ print 'schoolserver not found'
+ xoserial = None
+ store.append(["schoolserver not found", "",""])
+ else:
+ pos = pos + 8
+ print 'config', config[pos:]
+ pos1 = pos + config[pos:].find("= ") + 2
+ pos2 = pos + config[pos:].find("@")
+ xoserial = config[pos1:pos2]
+ print 'xoserial', xoserial, config[pos1:pos2+1]
+ #temp for testing
+ xoserial = 'SHC84201F3B'
+ if xoserial:
+ url = "http://schoolserver/ds-restore/" + xoserial + "/datastore-latest"
+ print 'url', url
+ try:
+ response = urllib2.urlopen(url)
+ except:
+ print 'schoolserver not found'
+ response = None
+ if response:
+ soup = BeautifulSoup(response)
+ online = True
+ else:
+ print 'schoolserver not found at', url
+ if online:
+ print 'soup=', soup.prettify()
+ entries = soup.findAll("li")
+ print len(entries)
+ for i in range(10):
+ print len(entries[i].contents), entries[i].contents
+ colx = str(entries[i].contents[0])
+ pos1 = colx.find('<')
+ pos2 = colx.find('>')
+ col0 = colx[pos1:pos2]
+ col1 = 'col1' + colx[pos2+1:]
+ temp = entries[i].contents[1].split(' ')
+ col2 = 'col2:' + temp[0]
+ col3 = 'col3:' + temp[1]
+ store.append([col1, col2, col3])
+ #print 'sample', entries[0].toprettyxml()
+ #objects from the local datastore
+ results, count = datastore.find(dict())
+ print 'number of datastore items', count
+ for f in results:
+ obj = datastore.get(f.object_id)
+ f.destroy()
+ store.append([obj.get_file_path(), obj.metadata['title'], obj.metadata['mime_type']])
+ #ignore for the moment
+ return store
+
+
+ def create_columns(self, treeView):
+
+ rendererText = gtk.CellRendererText()
+ column = gtk.TreeViewColumn("Title", rendererText, text=1)
+ column.set_sort_column_id(0)
+ treeView.append_column(column)
+
+ rendererText = gtk.CellRendererText()
+ column = gtk.TreeViewColumn("Mime_type", rendererText, text=2)
+ column.set_sort_column_id(1)
+ treeView.append_column(column)
+
+
+ def on_activated(self, widget, row, col):
+
+ model = widget.get_model()
+ text = model[row][0] + ", " + model[row][1] + ", " + model[row][2]
+ self.statusbar.push(0, text)
+
+
+
+PyApp()
+gtk.main()
+