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
11 from SfaData import ViniData
14 def faster_clear(self):
15 count = self.getItemCount()
19 ListBox.clear = faster_clear
21 class NodePanel(DockPanel):
22 def __init__(self, sfadata):
23 DockPanel.__init__(self)
24 self.sfadata = sfadata
26 self.setHorizontalAlignment(HasAlignment.ALIGN_CENTER)
27 self.setVerticalAlignment(HasAlignment.ALIGN_MIDDLE)
28 self.availableRegex = None
29 self.selectedRegex = None
31 leftpanel = VerticalPanel()
32 self.leftcap = CaptionPanel("Available nodes")
33 self.leftlist = ListBox(MultipleSelect=True, VisibleItemCount=20)
34 self.leftcap.add(self.leftlist)
35 leftpanel.add(self.leftcap)
37 hp1 = HorizontalPanel()
38 filterButton = Button("Filter", self.filterLeft)
39 self.leftRegExBox = TextBox()
41 hp1.add(self.leftRegExBox)
44 rightpanel = VerticalPanel()
45 self.rightcap = CaptionPanel("Selected nodes")
46 self.rightlist = ListBox(MultipleSelect=True, VisibleItemCount=20)
47 self.rightcap.add(self.rightlist)
48 rightpanel.add(self.rightcap)
50 hp2 = HorizontalPanel()
51 filterButton = Button("Filter", self.filterRight)
52 self.rightRegExBox = TextBox()
54 hp2.add(self.rightRegExBox)
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)
68 self.setStyleName("ks-layouts")
72 rspec = self.sfadata.getRSpec()
74 slivers = self.sortNodes(rspec.get_sliver_list())
75 self.rightcap.setCaption("Selected nodes (%s)" % len(slivers))
76 all = rspec.get_node_list()
77 available = self.sortNodes(filter(lambda x:x not in slivers,all))
78 self.leftcap.setCaption("Available nodes (%s)" % len(available))
80 if self.availableRegex:
81 pattern = re.compile(self.availableRegex)
82 available = filter(pattern.search, available)
84 if self.selectedRegex:
85 pattern = re.compile(self.selectedRegex)
86 slivers = filter(pattern.search, slivers)
90 self.leftlist.addItem(i)
91 self.rightlist.clear()
93 self.rightlist.addItem(i)
98 def sortNodes(self, nodes):
102 def getSelected(self, listbox):
104 for i in range(listbox.getItemCount()):
105 if listbox.isItemSelected(i):
106 got.append(listbox.getItemText(i))
109 def addNodes(self, sender):
110 rspec = self.sfadata.getRSpec()
111 nodes = self.getSelected(self.leftlist)
113 rspec.add_sliver(node)
116 def removeNodes(self, sender):
117 rspec = self.sfadata.getRSpec()
118 nodes = self.getSelected(self.rightlist)
120 rspec.remove_sliver(node)
123 def filterLeft(self, sender):
124 self.availableRegex = self.leftRegExBox.getText()
127 def filterRight(self, sender):
128 self.selectedRegex = self.rightRegExBox.getText()