1 from pyjamas.ui.HorizontalPanel import HorizontalPanel
2 from pyjamas.ui.VerticalPanel import VerticalPanel
3 from pyjamas.ui.DockPanel import DockPanel
4 from pyjamas.ui.CaptionPanel import CaptionPanel
5 from pyjamas.ui.Button import Button
6 from pyjamas.ui.Composite import Composite
7 from pyjamas.ui.ListBox import ListBox
8 from pyjamas.ui.TextBox import TextBox
9 from pyjamas.ui.HTML import HTML
10 from pyjamas.ui import HasAlignment
13 def faster_clear(self):
14 count = self.getItemCount()
18 ListBox.clear = faster_clear
20 class NodePanel(DockPanel):
21 def __init__(self, sfadata, rspec):
22 DockPanel.__init__(self)
26 self.setSize("100%", "100%")
27 self.setHorizontalAlignment(HasAlignment.ALIGN_CENTER)
28 self.setVerticalAlignment(HasAlignment.ALIGN_MIDDLE)
31 leftpanel = VerticalPanel()
32 leftcap = CaptionPanel("Available nodes")
33 self.leftlist = ListBox(MultipleSelect=True, VisibleItemCount=20)
34 leftcap.add(self.leftlist)
35 leftpanel.add(leftcap)
37 hp1 = HorizontalPanel()
38 filterButton = Button("Filter", self.filter)
39 self.regExBox = TextBox()
41 hp1.add(self.regExBox)
44 rightpanel = VerticalPanel()
45 rightcap = CaptionPanel("Selected nodes")
46 self.rightlist = ListBox(MultipleSelect=True, VisibleItemCount=20)
47 rightcap.add(self.rightlist)
48 rightpanel.add(rightcap)
50 hp2 = HorizontalPanel()
51 applyButton = Button("Apply", self.apply)
52 resetButton = Button("Reset", self.reset)
57 addButton = Button(">>", self.addNodes)
58 removeButton = Button("<<", self.removeNodes)
59 vertpanel = VerticalPanel()
60 vertpanel.setVerticalAlignment(HasAlignment.ALIGN_MIDDLE)
61 vertpanel.add(addButton)
62 vertpanel.add(removeButton)
64 self.add(leftpanel, DockPanel.WEST)
65 self.add(rightpanel, DockPanel.EAST)
66 self.add(vertpanel, DockPanel.CENTER)
71 slivers = self.sortNodes(self.rspec.get_sliver_list())
72 all = self.rspec.get_node_list()
73 available = self.sortNodes(filter(lambda x:x not in slivers,all))
75 pattern = re.compile(self.regex)
76 available = filter(pattern.search, available)
79 self.leftlist.addItem(i)
80 self.rightlist.clear()
82 self.rightlist.addItem(i)
87 def sortNodes(self, nodes):
91 def getSelected(self, listbox):
93 for i in range(listbox.getItemCount()):
94 if listbox.isItemSelected(i):
95 got.append(listbox.getItemText(i))
98 def addNodes(self, sender):
99 nodes = self.getSelected(self.leftlist)
101 self.rspec.add_sliver(node)
104 def removeNodes(self, sender):
105 nodes = self.getSelected(self.rightlist)
107 self.rspec.remove_sliver(node)
110 def apply(self, sender):
111 # Call sfi.py create via ViniData object
114 def reset(self, sender):
115 self.rspec = self.data.getRSpec()
118 def filter(self, sender):
119 self.regex = self.regExBox.getText()