Index: ossiedev/trunk/tools/wavedash/src/WavedashView.py
===================================================================
--- ossiedev/trunk/tools/wavedash/src/WavedashView.py	(revision 10899)
+++ ossiedev/trunk/tools/wavedash/src/WavedashView.py	(revision 10905)
@@ -31,4 +31,5 @@
 from NodeBooterDialog import NodeBooterDialog
 from alf_plugins.plot import plot
+from alf import ALFutils
 
 OSSIE_WAVEAPP_DIMENSION = (600,600)                                                    
@@ -56,4 +57,10 @@
         self.model.addComponentListener(self)
         self.model.addPropertyListener(self)
+        
+        tooldir = __import__('alf_plugins').__file__
+        if os.path.islink (tooldir):
+            tooldir = os.path.realpath (tooldir)
+        tooldir = os.path.dirname (os.path.abspath (tooldir))
+        self.tools = ALFutils.ToolList(tooldir)
         
         self.toolbar = None
@@ -329,12 +336,17 @@
         
         refreshIcon = wx.Image(root + REFRESH_ICON_FILE, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
-        plotBox = wx.StaticBox(cPanel, wx.NewId(), 'Uses Ports')
-        plotBoxSizer = wx.StaticBoxSizer(plotBox, wx.HORIZONTAL)
-        
-        for port in component.usesPorts:
-            plotButton = wx.Button(cPanel, wx.NewId(), label=port.name)
-            cPanel.Bind(wx.EVT_BUTTON, self.OnPlotPort, plotButton)
-            plotBoxSizer.Add(plotButton)
-        sboxSizer.Add(plotBoxSizer)
+        
+        portsSizer = wx.BoxSizer(wx.HORIZONTAL)
+    
+        if len(component.providesPorts) > 0:
+            providesPortsBox = self.createPortBox(component.providesPorts, component, cPanel, sboxSizer, 'Input Ports')
+            portsSizer.Add(providesPortsBox)
+            portsSizer.AddSpacer(wx.Size(10, 10))
+        if len(component.usesPorts) > 0:
+            usesPortsBox = self.createPortBox(component.usesPorts, component, cPanel, sboxSizer, 'Output Ports')
+            portsSizer.Add(usesPortsBox)
+        sboxSizer.AddSpacer(wx.Size(10, 10))
+        sboxSizer.Add(portsSizer)
+        
         
         updateComponentButton = WavedashButton(cPanel, wx.NewId(), refreshIcon )
@@ -357,4 +369,28 @@
         return cPanel
     
+    def createPortBox(self, portList, component, panel, sizer, portType):
+        portsBox = wx.StaticBox(panel, wx.NewId(), portType)
+        portsBoxSizer = wx.StaticBoxSizer(portsBox, wx.VERTICAL)
+        
+        for port in portList:
+            portLabel = wx.StaticText(panel, wx.NewId(), label=port.name)
+            availableTools = self.tools.getSupportedTools(port.interface.nameSpace, port.interface.name)
+            toolList = []
+            
+            if availableTools:
+                for tool in availableTools:
+                    toolList.append(tool.name)
+                portToolCombo = wx.ComboBox(panel, wx.NewId(), value='Available Tools', choices=toolList, style=wx.CB_READONLY)
+                portToolCombo.port = port
+                portToolCombo.supportedTools = availableTools
+                panel.Bind(wx.EVT_COMBOBOX, self.openTool, portToolCombo)
+            else:
+                portToolCombo = wx.ComboBox(panel, wx.NewId(), value='No Available Tools', choices=toolList, style=wx.CB_READONLY)
+                
+            portsBoxSizer.Add(portLabel)
+            portsBoxSizer.Add(portToolCombo)
+        return portsBoxSizer
+        
+        
     def addPropToCompSizer(self, propList):
         #IMPORTANT NOTE: proplist should have items in the following way.
@@ -1210,4 +1246,36 @@
             frame = plot.create(self, port.interface.nameSpace , port.interface.name, context , port.name)
     
+    def openTool(self, event):
+        src = event.GetEventObject()
+        toolName = src.GetValue()
+        if toolName == 'Available Tools':
+            return
+        compName = src.GetParent().GetName()
+        waveformName = src.GetParent().GetParent().GetName()
+        waveform = self.model.getWaveform(waveformName, WaveformModel.INSTANCE_WAVEFORM)
+        component = waveform.getComponent(compName)
+        port = src.port
+        for t in src.supportedTools:
+            if t.name == toolName:
+                tool = t
+                break
+            
+        if tool.module == None:
+            # NOTE: alf_plugins is now the package that contains all tools
+            exec_string = "from alf_plugins." + tool.packagename + " import "
+            exec_string += tool.modulename + " as tool_module"
+            exec exec_string
+
+            tool.module = tool_module
+        else:
+            tool_module = tool.module
+            reload(tool_module)
+            
+        if port:
+            context = ("DomainName1", str('OSSIE::' + waveformName), str(compName))
+            newframe = tool_module.create(self, str(port.interface.nameSpace), 
+                                          str(port.interface.name), context, str(port.name))
+            newframe.Show(True)
+            src.SetValue('Available Tools')
         
     def updateWaveform(self, waveformName):
