Tweaks for first demo of GUI
[sfa-gui.git] / SfaBrowser.py
1 from Sink import Sink, SinkInfo
2 from pyjamas.ui.Tree import Tree, TreeItem
3 from pyjamas.ui.PopupPanel import PopupPanel
4 from pyjamas.ui.HTML import HTML
5 from SfaData import PlanetLabData
6
7 class PopupRecord(PopupPanel):
8     def __init__(self, record):
9         PopupPanel.__init__(self, True)
10         contents = HTML("<pre>" + record + "</pre>")
11         self.setWidget(contents)
12         
13         self.setStyleName("ks-popups-Popup")
14
15 class SfaItem(TreeItem):
16     def __init__(self, hrn, kind):
17         self.kind = kind
18         self.hrn = hrn
19         last = hrn.split('.')[-1]
20         if self.kind == "(authority)":
21             self.label = "<b>%s</b>" % last
22         elif self.kind == "(slice)":
23             self.label = "<u><i>%s</i></u>" % last
24         elif self.kind == "(user)":
25             self.label = "%s" % last
26         else:
27             self.label = "<b>%s</b>" % last
28
29         TreeItem.__init__(self, self.label)
30
31         if self.kind == "(authority)":
32             self.addItem(PendingItem())
33
34 class PendingItem(TreeItem):
35     def __init__(self):
36         TreeItem.__init__(self, "Please wait...")
37
38     def isPendingItem(self):
39         return True
40
41 class SfaBrowser(Sink):
42     def __init__(self):
43
44         Sink.__init__(self)
45
46         self.data = PlanetLabData()
47
48         self.tree = Tree()
49         
50         item = SfaItem("plc", "(authority)")
51         self.tree.addItem(item)
52
53         item = SfaItem("ple", "(authority)")
54         self.tree.addItem(item)
55
56         self.tree.addTreeListener(self)
57
58         self.initWidget(self.tree)
59
60
61     def onTreeItemSelected(self, item):
62         record = self.data.getRecord(item.hrn)
63         p = PopupRecord(record)
64         left = item.getAbsoluteLeft() + 10
65         top = item.getAbsoluteTop() + 10
66         p.setPopupPosition(left, top)
67         p.show()
68
69     def onTreeItemStateChanged(self, item):
70         self.tree.moveFocus(item)
71         child = item.getChild(0)
72         if hasattr(child, "isPendingItem"):
73             item.removeItem(child)
74             hrns = sorted(self.data.listChildren(item.hrn), 
75                           key=lambda hrn: hrn[0])
76             for (hrn, kind) in hrns:
77                 item.addItem(SfaItem(hrn, kind))
78
79     def onShow(self):
80         pass
81
82
83 def init():
84     return SinkInfo("Browse SFA", "SFA Hierarchy Browser", SfaBrowser)