Merge branch 'master' of ssh://git.onelab.eu/git/sfa-gui
[sfa-gui.git] / SfaBrowser.py
index 778b448..b2053e3 100644 (file)
@@ -1,13 +1,92 @@
 from Sink import Sink, SinkInfo
+from pyjamas.ui.Tree import Tree, TreeItem
+from pyjamas.ui.PopupPanel import PopupPanel
 from pyjamas.ui.HTML import HTML
+from SfaData import PlanetLabData
+
+def alwaysDelegateFocus(elem):
+    return True
+
+class PopupRecord(PopupPanel):
+    def __init__(self, record):
+        PopupPanel.__init__(self, True)
+        contents = HTML("<pre>" + record + "</pre>")
+        self.setWidget(contents)
+        self.setStyleName("ks-popups-Popup")
+
+class SfaItem(TreeItem):
+    def __init__(self, hrn, kind, truncate = True):
+        self.kind = kind
+        self.hrn = hrn
+        if truncate:
+            hrn = hrn.split('.')[-1]
+        if self.kind == "(authority)":
+            self.label = "<b>%s</b>" % hrn
+        elif self.kind == "(slice)":
+            self.label = "<u><i>%s</i></u>" % hrn
+        elif self.kind == "(user)":
+            self.label = "%s" % hrn
+        else:
+            self.label = "<b>%s</b>" % hrn
+
+        TreeItem.__init__(self, self.label)
+
+        if self.kind == "(authority)":
+            self.addItem(PendingItem())
+
+class PendingItem(TreeItem):
+    def __init__(self):
+        TreeItem.__init__(self, "Please wait...")
+
+    def isPendingItem(self):
+        return True
 
 class SfaBrowser(Sink):
     def __init__(self):
 
         Sink.__init__(self)
 
-        text="Not implemented yet"
-        self.initWidget(HTML(text, True))
+        self.data = PlanetLabData()
+
+        self.tree = Tree()
+        self.tree.shouldTreeDelegateFocusToElement = alwaysDelegateFocus
+        
+        item = SfaItem("plc", "(authority)", truncate = False)
+        self.tree.addItem(item)
+
+        item = SfaItem("plc.glc", "(authority)", truncate = False)
+        self.tree.addItem(item)
+
+        item = SfaItem("plc.vini", "(authority)", truncate = False)
+        self.tree.addItem(item)
+
+        item = SfaItem("ple", "(authority)", truncate = False)
+        self.tree.addItem(item)
+
+        item = SfaItem("plj", "(authority)", truncate = False)
+        self.tree.addItem(item)
+
+        self.tree.addTreeListener(self)
+
+        self.initWidget(self.tree)
+
+
+    def onTreeItemSelected(self, item):
+        record = self.data.getRecord(item.hrn)
+        p = PopupRecord(record)
+        left = item.getAbsoluteLeft() + 10
+        top = item.getAbsoluteTop() + 10
+        p.setPopupPosition(left, top)
+        p.show()
+
+    def onTreeItemStateChanged(self, item):
+        child = item.getChild(0)
+        if hasattr(child, "isPendingItem"):
+            item.removeItem(child)
+            hrns = sorted(self.data.listChildren(item.hrn), 
+                          key=lambda hrn: hrn[0])
+            for (hrn, kind) in hrns:
+                item.addItem(SfaItem(hrn, kind))
 
     def onShow(self):
         pass