diff options
author | Sascha Silbe <sascha-org-sugar-git@silbe.org> | 2009-03-27 18:48:23 (GMT) |
---|---|---|
committer | Sascha Silbe <sascha-org-sugar-git@silbe.org> | 2009-03-27 18:48:23 (GMT) |
commit | c5f008a76831bc99c45bfdb7ec2e7259044a957d (patch) | |
tree | 25fc6e95c5d83f9ea9dc7a4b7077effe16811734 | |
parent | 9e945efb04439a31bb3dd9e92b7ebc0ba377c6a0 (diff) |
Proof of Concept GUI code (main window only)
-rwxr-xr-x | gtktest.py | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/gtktest.py b/gtktest.py new file mode 100755 index 0000000..d707264 --- /dev/null +++ b/gtktest.py @@ -0,0 +1,106 @@ +#!/usr/bin/env python +import os +import sys +import gobject +import gtk + +PROGNAME = "soas-assimilator" + + +class tMainWindow (gtk.Window) : + + _listColumns = [ + ('status', str, gtk.CellRendererText), + ('device', str, gtk.CellRendererText), + ('image', str, gtk.CellRendererText), + ('model', str, gtk.CellRendererText), + ('color', str, None), + ] + _colorColIdx = len(_listColumns)-1 + _colorMap = { + 'writing': '#FFFF00', + 'finished': '#00FF00', + 'error': '#FF0000', + } + + def __init__(self, model, title) : + gtk.Window.__init__(self) + self._model = model + self.set_title(title) + self._initWidgets() + + def setStatus(self, device, status, image, model) : + row = self._findRow(device) + if row is None : + row = self._listModel.append() + + self._listModel[row] = (status, device, image, model, self._colorMap[status]) + + def _initWidgets(self) : + self._vbox = gtk.VBox() + self.add(self._vbox) + self._scrolledList = gtk.ScrolledWindow() + self._scrolledList.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + self._vbox.pack_start(self._scrolledList) + self._listModel = gtk.ListStore(*[_type for (name, _type, r) in self._listColumns]) + self._listView = gtk.TreeView(self._listModel) + self._listView.set_rules_hint(True) + self._scrolledList.add(self._listView) + self._addListColumns() + self.show_all() + + def _addListColumns(self) : + for (idx, (name, _type, renderer)) in enumerate(self._listColumns) : + if not renderer : + continue + + r = renderer() + r.set_property('background-set', True) + if (_type == bool) : + col = gtk.TreeViewColumn(name, r, active=idx, background=self._colorColIdx) + else : + col = gtk.TreeViewColumn(name, r, text=idx, background=self._colorColIdx) + + col.set_sort_column_id(idx) + self._listView.append_column(col) + + def _findRow(self, device) : + for idx in range(len(self._listModel)) : + if (self._listModel[idx][1] == device) : + return idx + + +class tModel (object) : + + def __init__(self, imageprefix) : + self.imageprefix = imageprefix + + +class tApp (object) : + + def __init__(self) : + self._model = tModel("test") + self._win = tMainWindow(self._model, PROGNAME) + self._win.setStatus("/dev/sda", "writing", "test-1gb.img", "FOOBAR STICK") + self._win.setStatus("/dev/sdb", "finished", "test-1gb.img", "SL STICK") + self._win.connect('destroy', lambda *w: self._close()) + + def run(self) : + gtk.main() + + def _close(self) : + gtk.main_quit() + + +def printSyntax(myName) : + print "Syntax: %s" % (myName,) + return 100 + +def main(myName, args) : + if args : + return printSyntax(myName) + + tApp().run() + + +sys.exit(main(sys.argv[0], sys.argv[1:])) |