Added SubmitPanel, HelpPanel for PlanetLab and VINI
[sfa-gui.git] / NodePanel.py
index a4c11e1..c4861b2 100644 (file)
@@ -8,6 +8,7 @@ from pyjamas.ui.ListBox import ListBox
 from pyjamas.ui.TextBox import TextBox
 from pyjamas.ui.HTML import HTML
 from pyjamas.ui import HasAlignment
+from SfaData import ViniData
 import re
 
 def faster_clear(self):
@@ -18,15 +19,15 @@ def faster_clear(self):
 ListBox.clear = faster_clear            
 
 class NodePanel(DockPanel):
-    def __init__(self, sfadata, rspec):
+    def __init__(self, sfadata):
         DockPanel.__init__(self)
-        self.data = sfadata
-        self.rspec = rspec
+        self.sfadata = sfadata
 
         self.setSize("100%", "100%")
         self.setHorizontalAlignment(HasAlignment.ALIGN_CENTER)
         self.setVerticalAlignment(HasAlignment.ALIGN_MIDDLE)
-        self.regex = None
+        self.availableRegex = None
+        self.selectedRegex = None
 
         leftpanel = VerticalPanel()
         leftcap = CaptionPanel("Available nodes")
@@ -35,10 +36,10 @@ class NodePanel(DockPanel):
         leftpanel.add(leftcap)
 
         hp1 = HorizontalPanel()
-        filterButton = Button("Filter", self.filter)
-        self.regExBox = TextBox()
+        filterButton = Button("Filter", self.filterLeft)
+        self.leftRegExBox = TextBox()
         hp1.add(filterButton)
-        hp1.add(self.regExBox)
+        hp1.add(self.leftRegExBox)
         leftpanel.add(hp1)
 
         rightpanel = VerticalPanel()
@@ -48,10 +49,10 @@ class NodePanel(DockPanel):
         rightpanel.add(rightcap)
 
         hp2 = HorizontalPanel()
-        applyButton = Button("Apply", self.apply)
-        resetButton = Button("Reset", self.reset)
-        hp2.add(applyButton)
-        hp2.add(resetButton)
+        filterButton = Button("Filter", self.filterRight)
+        self.rightRegExBox = TextBox()
+        hp2.add(filterButton)
+        hp2.add(self.rightRegExBox)
         rightpanel.add(hp2)
 
         addButton = Button(">>", self.addNodes)
@@ -68,12 +69,20 @@ class NodePanel(DockPanel):
         self.refresh()
 
     def refresh(self):
-        slivers = self.sortNodes(self.rspec.get_sliver_list())
-        all = self.rspec.get_node_list()
+        rspec = self.sfadata.getRSpec()
+
+        slivers = self.sortNodes(rspec.get_sliver_list())
+        all = rspec.get_node_list()
         available = self.sortNodes(filter(lambda x:x not in slivers,all))
-        if self.regex:
-            pattern = re.compile(self.regex)
+
+        if self.availableRegex:
+            pattern = re.compile(self.availableRegex)
             available = filter(pattern.search, available)
+
+        if self.selectedRegex:
+            pattern = re.compile(self.selectedRegex)
+            slivers = filter(pattern.search, slivers)
+
         self.leftlist.clear()
         for i in available:
             self.leftlist.addItem(i)
@@ -96,24 +105,23 @@ class NodePanel(DockPanel):
         return got
 
     def addNodes(self, sender):
+        rspec = self.sfadata.getRSpec()
         nodes = self.getSelected(self.leftlist)
         for node in nodes:
-            self.rspec.add_sliver(node)
+            rspec.add_sliver(node)
         self.refresh()
 
     def removeNodes(self, sender):
+        rspec = self.sfadata.getRSpec()
         nodes = self.getSelected(self.rightlist)
         for node in nodes:
-            self.rspec.remove_sliver(node)
+            rspec.remove_sliver(node)
         self.refresh()
 
-    def apply(self, sender):
-        self.data.applyRSpec(self.rspec)
-
-    def reset(self, sender):
-        self.rspec = self.data.getRSpec()
+    def filterLeft(self, sender):
+        self.availableRegex = self.leftRegExBox.getText()
         self.refresh()
 
-    def filter(self, sender):
-        self.regex = self.regExBox.getText()
+    def filterRight(self, sender):
+        self.selectedRegex = self.rightRegExBox.getText()
         self.refresh()