Added Node selection and Sliver (attribute) configuration panels to
[sfa-gui.git] / LinkPanel.py
diff --git a/LinkPanel.py b/LinkPanel.py
new file mode 100644 (file)
index 0000000..cc36bc3
--- /dev/null
@@ -0,0 +1,80 @@
+from pyjamas.ui.VerticalPanel import VerticalPanel
+from pyjamas.ui.HorizontalPanel import HorizontalPanel
+from pyjamas.ui.CaptionPanel import CaptionPanel
+from pyjamas.ui.ListBox import ListBox
+from pyjamas.ui.TextBox import TextBox
+from pyjamas.ui.Button import Button
+from pyjamas.ui.HTML import HTML
+from pyjamas.ui import HasAlignment
+
+class AddPanel(CaptionPanel):
+    def __init__(self, top):
+        CaptionPanel.__init__(self, "Add virtual link")
+        self.top = top
+
+        hp = HorizontalPanel()
+        self.end1 = ListBox()
+        self.end1.addItem("Endpoint 1")
+        for sliver in self.top.rspec.get_sliver_list():
+            self.end1.addItem(sliver)
+
+        self.end2 = ListBox()
+        self.end2.addItem("Endpoint 2")
+        for sliver in self.top.rspec.get_sliver_list():
+            self.end2.addItem(sliver)
+
+        self.bw = TextBox()
+        self.bw.setText("1000")
+
+        hp.add(self.end1)
+        hp.add(self.end2)
+        hp.add(self.bw)
+        hp.add(Button("Add", self.go))
+
+        self.add(hp)
+
+    def go(self, sender):
+        end1 = self.end1.getItemText(self.end1.getSelectedIndex())
+        end2 = self.end2.getItemText(self.end2.getSelectedIndex())
+        bw = self.bw.getText()
+
+        self.top.refresh()
+        
+
+class VlinkPanel(HorizontalPanel):
+    def __init__(self, top, description, bw):
+        HorizontalPanel.__init__(self)
+        self.description = description
+        self.bw = bw
+        self.top = top
+
+        self.setSpacing(5)
+        self.setVerticalAlignment(HasAlignment.ALIGN_MIDDLE)
+        b = Button("X", self.delete)
+        self.add(b)
+        self.add(HTML("%s (%s kbps)" % (self.description, self.bw)))
+
+    def delete(self, sender):
+        self.top.refresh()
+
+
+class LinkPanel(VerticalPanel):
+    def __init__(self, sfadata, rspec):
+        VerticalPanel.__init__(self)
+        self.data = sfadata
+        self.rspec = rspec
+
+        self.refresh()
+
+    def refresh(self):
+        self.clear()
+        self.add(AddPanel(self))
+
+        cp = CaptionPanel("Virtual links")
+        vp = VerticalPanel()
+        vlinks = self.rspec.get_vlink_list()
+        for (desc, bw) in vlinks:
+            vp.add(VlinkPanel(self, desc, bw))
+        cp.add(vp)
+        self.add(cp)
+