diff options
Diffstat (limited to 'listview.py')
-rwxr-xr-x | listview.py | 144 |
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() + |