text: from pyjamas.ui.Composite import Composite
  from pyjamas.ui.VerticalPanel import VerticalPanel
  from pyjamas.ui.Hyperlink import Hyperlink
  from pyjamas.ui.ScrollPanel import ScrollPanel
  from pyjamas import Window
  
  class SinkList(Composite):
      def __init__(self):
          Composite.__init__(self)
  
          self.vp_list=VerticalPanel()
          self.sinks=[]
          self.selectedSink=-1
  
          self.sp = ScrollPanel(self.vp_list)
          self.sp.setWidth("14em")
  
          self.initWidget(self.sp)
          self.setStyleName("ks-List")
  
          self.resize(Window.getClientWidth(), Window.getClientHeight())
  
      def resize(self, width, height):
          self.sp.setHeight("%dpx" % (height - 70))
  
      def addSink(self, info):
          name = info.getName()
          link = Hyperlink(name, False, TargetHistoryToken=name)
          link.setStyleName("ks-SinkItem")
          self.vp_list.add(link)
          self.sinks.append(info)
  
      def find(self, sinkName):
          for info in self.sinks:
              if info.getName()==sinkName:
                  return info
          return None
  
      def setSinkSelection(self, name):
          if self.selectedSink <> -1:
              self.vp_list.getWidget(self.selectedSink).removeStyleName("ks-SinkItem-selected")
  
          for i in range(len(self.sinks)):
              info = self.sinks[i]
              if (info.getName()==name):
                  self.selectedSink = i
                  widget=self.vp_list.getWidget(self.selectedSink)
                  widget.addStyleName("ks-SinkItem-selected")
                  return
  
  
  