Viewer.py
changeset 102 85875dcb7754
parent 98 ec5d7af033d8
child 106 3fc63036de16
equal deleted inserted replaced
101:3f06a178b960 102:85875dcb7754
    23 #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    23 #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    24 
    24 
    25 import wx
    25 import wx
    26 
    26 
    27 from plcopen.structures import *
    27 from plcopen.structures import *
       
    28 from PLCControler import ITEM_POU
    28 
    29 
    29 from Dialogs import *
    30 from Dialogs import *
    30 
    31 
    31 SCROLLBAR_UNIT = 10
    32 SCROLLBAR_UNIT = 10
    32 WINDOW_BORDER = 10
    33 WINDOW_BORDER = 10
    39 # ID Constants for menu items
    40 # ID Constants for menu items
    40 [ID_FBDVIEWERCONTEXTUALMENUITEMS0, ID_FBDVIEWERCONTEXTUALMENUITEMS1,
    41 [ID_FBDVIEWERCONTEXTUALMENUITEMS0, ID_FBDVIEWERCONTEXTUALMENUITEMS1,
    41  ID_FBDVIEWERCONTEXTUALMENUITEMS2, ID_FBDVIEWERCONTEXTUALMENUITEMS3,
    42  ID_FBDVIEWERCONTEXTUALMENUITEMS2, ID_FBDVIEWERCONTEXTUALMENUITEMS3,
    42  ID_FBDVIEWERCONTEXTUALMENUITEMS5, ID_FBDVIEWERCONTEXTUALMENUITEMS6,
    43  ID_FBDVIEWERCONTEXTUALMENUITEMS5, ID_FBDVIEWERCONTEXTUALMENUITEMS6,
    43  ID_FBDVIEWERCONTEXTUALMENUITEMS8, ID_FBDVIEWERCONTEXTUALMENUITEMS9,
    44  ID_FBDVIEWERCONTEXTUALMENUITEMS8, ID_FBDVIEWERCONTEXTUALMENUITEMS9,
    44  ID_FBDVIEWERCONTEXTUALMENUITEMS11,
    45  ID_FBDVIEWERCONTEXTUALMENUITEMS11, ID_FBDVIEWERCONTEXTUALMENUITEMS12,
    45 ] = [wx.NewId() for _init_coll_ContextualMenu_Items in range(9)]
    46 ] = [wx.NewId() for _init_coll_ContextualMenu_Items in range(10)]
    46 
    47 
    47 
    48 
    48 class ViewerDropTarget(wx.TextDropTarget):
    49 class ViewerDropTarget(wx.TextDropTarget):
    49     
    50     
    50     def __init__(self, parent):
    51     def __init__(self, parent):
    78                 width, height = block.GetMinSize()
    79                 width, height = block.GetMinSize()
    79                 block.SetSize(width, height)
    80                 block.SetSize(width, height)
    80                 self.ParentWindow.AddBlock(block)
    81                 self.ParentWindow.AddBlock(block)
    81                 self.ParentWindow.Controler.AddCurrentElementEditingBlock(id, values[0], values[2])
    82                 self.ParentWindow.Controler.AddCurrentElementEditingBlock(id, values[0], values[2])
    82                 self.ParentWindow.RefreshBlockModel(block)
    83                 self.ParentWindow.RefreshBlockModel(block)
       
    84                 self.ParentWindow.RefreshBuffer()
    83                 self.ParentWindow.RefreshScrollBars()
    85                 self.ParentWindow.RefreshScrollBars()
    84                 self.ParentWindow.Refresh()
    86                 self.ParentWindow.Refresh()
    85         elif values[1] != "location":
    87         elif values[1] != "location":
    86             id = self.ParentWindow.GetNewId()
    88             id = self.ParentWindow.GetNewId()
    87             if values[1] == "Output":
    89             if values[1] == "Output":
    95             width, height = variable.GetMinSize()
    97             width, height = variable.GetMinSize()
    96             variable.SetSize(width, height)
    98             variable.SetSize(width, height)
    97             self.ParentWindow.AddBlock(variable)
    99             self.ParentWindow.AddBlock(variable)
    98             self.ParentWindow.Controler.AddCurrentElementEditingVariable(id, var_type)
   100             self.ParentWindow.Controler.AddCurrentElementEditingVariable(id, var_type)
    99             self.ParentWindow.RefreshVariableModel(variable)
   101             self.ParentWindow.RefreshVariableModel(variable)
       
   102             self.ParentWindow.RefreshBuffer()
   100             self.ParentWindow.RefreshScrollBars()
   103             self.ParentWindow.RefreshScrollBars()
   101             self.ParentWindow.Refresh()
   104             self.ParentWindow.Refresh()
   102             
   105             
   103 
   106 
   104 """
   107 """
   129               kind=wx.ITEM_NORMAL, text=u'Add Divergence Branch')
   132               kind=wx.ITEM_NORMAL, text=u'Add Divergence Branch')
   130         parent.Append(help='', id=ID_FBDVIEWERCONTEXTUALMENUITEMS9,
   133         parent.Append(help='', id=ID_FBDVIEWERCONTEXTUALMENUITEMS9,
   131               kind=wx.ITEM_NORMAL, text=u'Delete Divergence Branch')
   134               kind=wx.ITEM_NORMAL, text=u'Delete Divergence Branch')
   132         parent.AppendSeparator()
   135         parent.AppendSeparator()
   133         parent.Append(help='', id=ID_FBDVIEWERCONTEXTUALMENUITEMS11,
   136         parent.Append(help='', id=ID_FBDVIEWERCONTEXTUALMENUITEMS11,
       
   137               kind=wx.ITEM_NORMAL, text=u'Edit Block')
       
   138         parent.Append(help='', id=ID_FBDVIEWERCONTEXTUALMENUITEMS12,
   134               kind=wx.ITEM_NORMAL, text=u'Delete')
   139               kind=wx.ITEM_NORMAL, text=u'Delete')
   135         # Link menu event to corresponding called functions
   140         # Link menu event to corresponding called functions
   136         self.Bind(wx.EVT_MENU, self.OnNoModifierMenu,
   141         self.Bind(wx.EVT_MENU, self.OnNoModifierMenu,
   137               id=ID_FBDVIEWERCONTEXTUALMENUITEMS0)
   142               id=ID_FBDVIEWERCONTEXTUALMENUITEMS0)
   138         self.Bind(wx.EVT_MENU, self.OnNegatedMenu,
   143         self.Bind(wx.EVT_MENU, self.OnNegatedMenu,
   147               id=ID_FBDVIEWERCONTEXTUALMENUITEMS6)
   152               id=ID_FBDVIEWERCONTEXTUALMENUITEMS6)
   148         self.Bind(wx.EVT_MENU, self.OnAddBranchMenu,
   153         self.Bind(wx.EVT_MENU, self.OnAddBranchMenu,
   149               id=ID_FBDVIEWERCONTEXTUALMENUITEMS8)
   154               id=ID_FBDVIEWERCONTEXTUALMENUITEMS8)
   150         self.Bind(wx.EVT_MENU, self.OnDeleteBranchMenu,
   155         self.Bind(wx.EVT_MENU, self.OnDeleteBranchMenu,
   151               id=ID_FBDVIEWERCONTEXTUALMENUITEMS9)
   156               id=ID_FBDVIEWERCONTEXTUALMENUITEMS9)
       
   157         self.Bind(wx.EVT_MENU, self.OnEditBlockMenu,
       
   158               id=ID_FBDVIEWERCONTEXTUALMENUITEMS11)
   152         self.Bind(wx.EVT_MENU, self.OnDeleteMenu,
   159         self.Bind(wx.EVT_MENU, self.OnDeleteMenu,
   153               id=ID_FBDVIEWERCONTEXTUALMENUITEMS11)
   160               id=ID_FBDVIEWERCONTEXTUALMENUITEMS12)
   154     
   161     
   155     # Create and initialize Contextual Menu
   162     # Create and initialize Contextual Menu
   156     def _init_menus(self):
   163     def _init_menus(self):
   157         self.ContextualMenu = wx.Menu(title='')
   164         self.ContextualMenu = wx.Menu(title='')
   158         
   165         
   662 #-------------------------------------------------------------------------------
   669 #-------------------------------------------------------------------------------
   663 #                           Popup menu functions
   670 #                           Popup menu functions
   664 #-------------------------------------------------------------------------------
   671 #-------------------------------------------------------------------------------
   665 
   672 
   666     def PopupBlockMenu(self, connector = None):
   673     def PopupBlockMenu(self, connector = None):
   667         type = self.Controler.GetCurrentElementEditingType()
   674         if connector is not None and connector.IsCompatible("BOOL"):
   668         self.ContextualMenu.FindItemByPosition(0).Enable(connector != None)
   675             type = self.Controler.GetCurrentElementEditingType()
   669         self.ContextualMenu.FindItemByPosition(1).Enable(connector != None)
   676             self.ContextualMenu.FindItemByPosition(0).Enable(True)
   670         self.ContextualMenu.FindItemByPosition(2).Enable(connector != None and type != "function")
   677             self.ContextualMenu.FindItemByPosition(1).Enable(True)
   671         self.ContextualMenu.FindItemByPosition(3).Enable(connector != None and type != "function")
   678             self.ContextualMenu.FindItemByPosition(2).Enable(type != "function")
       
   679             self.ContextualMenu.FindItemByPosition(3).Enable(type != "function")
       
   680         else:
       
   681             self.ContextualMenu.FindItemByPosition(0).Enable(False)
       
   682             self.ContextualMenu.FindItemByPosition(1).Enable(False)
       
   683             self.ContextualMenu.FindItemByPosition(2).Enable(False)
       
   684             self.ContextualMenu.FindItemByPosition(3).Enable(False)
   672         self.ContextualMenu.FindItemByPosition(5).Enable(False)
   685         self.ContextualMenu.FindItemByPosition(5).Enable(False)
   673         self.ContextualMenu.FindItemByPosition(6).Enable(False)
   686         self.ContextualMenu.FindItemByPosition(6).Enable(False)
   674         self.ContextualMenu.FindItemByPosition(8).Enable(False)
   687         self.ContextualMenu.FindItemByPosition(8).Enable(False)
   675         self.ContextualMenu.FindItemByPosition(9).Enable(False)
   688         self.ContextualMenu.FindItemByPosition(9).Enable(False)
       
   689         self.ContextualMenu.FindItemByPosition(11).Enable(self.SelectedElement.GetType() in self.Controler.GetProjectPouNames())
   676         if connector:
   690         if connector:
   677             if connector.IsNegated():
   691             if connector.IsNegated():
   678                 self.ContextualMenu.FindItemByPosition(1).Check(True)
   692                 self.ContextualMenu.FindItemByPosition(1).Check(True)
   679             elif connector.GetEdge() == "rising":
   693             elif connector.GetEdge() == "rising":
   680                 self.ContextualMenu.FindItemByPosition(2).Check(True)
   694                 self.ContextualMenu.FindItemByPosition(2).Check(True)
   682                 self.ContextualMenu.FindItemByPosition(3).Check(True)
   696                 self.ContextualMenu.FindItemByPosition(3).Check(True)
   683             else:
   697             else:
   684                 self.ContextualMenu.FindItemByPosition(0).Check(True)
   698                 self.ContextualMenu.FindItemByPosition(0).Check(True)
   685         self.PopupMenu(self.ContextualMenu)
   699         self.PopupMenu(self.ContextualMenu)
   686     
   700     
   687     def PopupVariableMenu(self, connector = None):
       
   688         self.ContextualMenu.FindItemByPosition(0).Enable(connector != None)
       
   689         self.ContextualMenu.FindItemByPosition(1).Enable(connector != None)
       
   690         self.ContextualMenu.FindItemByPosition(2).Enable(False)
       
   691         self.ContextualMenu.FindItemByPosition(3).Enable(False)
       
   692         self.ContextualMenu.FindItemByPosition(5).Enable(False)
       
   693         self.ContextualMenu.FindItemByPosition(6).Enable(False)
       
   694         self.ContextualMenu.FindItemByPosition(8).Enable(False)
       
   695         self.ContextualMenu.FindItemByPosition(9).Enable(False)
       
   696         if connector:
       
   697             if connector.IsNegated():
       
   698                 self.ContextualMenu.FindItemByPosition(1).Check(True)
       
   699             else:
       
   700                 self.ContextualMenu.FindItemByPosition(0).Check(True)
       
   701         self.PopupMenu(self.ContextualMenu)
       
   702 
       
   703     def PopupWireMenu(self):
   701     def PopupWireMenu(self):
   704         self.ContextualMenu.FindItemByPosition(0).Enable(False)
   702         self.ContextualMenu.FindItemByPosition(0).Enable(False)
   705         self.ContextualMenu.FindItemByPosition(1).Enable(False)
   703         self.ContextualMenu.FindItemByPosition(1).Enable(False)
   706         self.ContextualMenu.FindItemByPosition(2).Enable(False)
   704         self.ContextualMenu.FindItemByPosition(2).Enable(False)
   707         self.ContextualMenu.FindItemByPosition(3).Enable(False)
   705         self.ContextualMenu.FindItemByPosition(3).Enable(False)
   708         self.ContextualMenu.FindItemByPosition(5).Enable(True)
   706         self.ContextualMenu.FindItemByPosition(5).Enable(True)
   709         self.ContextualMenu.FindItemByPosition(6).Enable(True)
   707         self.ContextualMenu.FindItemByPosition(6).Enable(True)
   710         self.ContextualMenu.FindItemByPosition(8).Enable(False)
   708         self.ContextualMenu.FindItemByPosition(8).Enable(False)
   711         self.ContextualMenu.FindItemByPosition(9).Enable(False)
   709         self.ContextualMenu.FindItemByPosition(9).Enable(False)
       
   710         self.ContextualMenu.FindItemByPosition(11).Enable(False)
   712         self.PopupMenu(self.ContextualMenu)
   711         self.PopupMenu(self.ContextualMenu)
   713     
   712     
   714     def PopupDivergenceMenu(self, connector):
   713     def PopupDivergenceMenu(self, connector):
   715         self.ContextualMenu.FindItemByPosition(0).Enable(False)
   714         self.ContextualMenu.FindItemByPosition(0).Enable(False)
   716         self.ContextualMenu.FindItemByPosition(1).Enable(False)
   715         self.ContextualMenu.FindItemByPosition(1).Enable(False)
   718         self.ContextualMenu.FindItemByPosition(3).Enable(False)
   717         self.ContextualMenu.FindItemByPosition(3).Enable(False)
   719         self.ContextualMenu.FindItemByPosition(5).Enable(False)
   718         self.ContextualMenu.FindItemByPosition(5).Enable(False)
   720         self.ContextualMenu.FindItemByPosition(6).Enable(False)
   719         self.ContextualMenu.FindItemByPosition(6).Enable(False)
   721         self.ContextualMenu.FindItemByPosition(8).Enable(True)
   720         self.ContextualMenu.FindItemByPosition(8).Enable(True)
   722         self.ContextualMenu.FindItemByPosition(9).Enable(connector)
   721         self.ContextualMenu.FindItemByPosition(9).Enable(connector)
       
   722         self.ContextualMenu.FindItemByPosition(11).Enable(False)
   723         self.PopupMenu(self.ContextualMenu)
   723         self.PopupMenu(self.ContextualMenu)
   724     
   724     
   725     def PopupDefaultMenu(self):
   725     def PopupDefaultMenu(self):
   726         self.ContextualMenu.FindItemByPosition(0).Enable(False)
   726         self.ContextualMenu.FindItemByPosition(0).Enable(False)
   727         self.ContextualMenu.FindItemByPosition(1).Enable(False)
   727         self.ContextualMenu.FindItemByPosition(1).Enable(False)
   729         self.ContextualMenu.FindItemByPosition(3).Enable(False)
   729         self.ContextualMenu.FindItemByPosition(3).Enable(False)
   730         self.ContextualMenu.FindItemByPosition(5).Enable(False)
   730         self.ContextualMenu.FindItemByPosition(5).Enable(False)
   731         self.ContextualMenu.FindItemByPosition(6).Enable(False)
   731         self.ContextualMenu.FindItemByPosition(6).Enable(False)
   732         self.ContextualMenu.FindItemByPosition(8).Enable(False)
   732         self.ContextualMenu.FindItemByPosition(8).Enable(False)
   733         self.ContextualMenu.FindItemByPosition(9).Enable(False)
   733         self.ContextualMenu.FindItemByPosition(9).Enable(False)
       
   734         self.ContextualMenu.FindItemByPosition(11).Enable(False)
   734         self.PopupMenu(self.ContextualMenu)
   735         self.PopupMenu(self.ContextualMenu)
   735 
   736 
   736 #-------------------------------------------------------------------------------
   737 #-------------------------------------------------------------------------------
   737 #                            Menu items functions
   738 #                            Menu items functions
   738 #-------------------------------------------------------------------------------
   739 #-------------------------------------------------------------------------------
   779 
   780 
   780     def OnDeleteBranchMenu(self, event):
   781     def OnDeleteBranchMenu(self, event):
   781         if self.SelectedElement and self.IsBlock(self.SelectedElement):
   782         if self.SelectedElement and self.IsBlock(self.SelectedElement):
   782             self.RemoveDivergenceBranch(self.SelectedElement)
   783             self.RemoveDivergenceBranch(self.SelectedElement)
   783             self.RefreshBuffer()
   784             self.RefreshBuffer()
       
   785         event.Skip()
       
   786 
       
   787     def OnEditBlockMenu(self, event):
       
   788         if self.SelectedElement:
       
   789             self.ParentWindow.EditProjectElement(ITEM_POU, self.SelectedElement.GetType())
   784         event.Skip()
   790         event.Skip()
   785 
   791 
   786     def OnDeleteMenu(self, event):
   792     def OnDeleteMenu(self, event):
   787         if self.SelectedElement:
   793         if self.SelectedElement:
   788             self.SelectedElement.Delete()
   794             self.SelectedElement.Delete()
   933             self.Refresh(False)
   939             self.Refresh(False)
   934         event.Skip()
   940         event.Skip()
   935     
   941     
   936     def OnViewerLeftDClick(self, event):
   942     def OnViewerLeftDClick(self, event):
   937         if self.Mode == MODE_SELECTION and self.SelectedElement:
   943         if self.Mode == MODE_SELECTION and self.SelectedElement:
   938             self.SelectedElement.OnLeftDClick(event, self.GetLogicalDC(), self.Scaling)
   944             if event.ControlDown() and self.IsBlock(self.SelectedElement) and self.SelectedElement.GetType() in self.Controler.GetProjectPouNames():
   939             self.Refresh(False)
   945                 self.ParentWindow.EditProjectElement(ITEM_POU, self.SelectedElement.GetType())
       
   946             else:
       
   947                 self.SelectedElement.OnLeftDClick(event, self.GetLogicalDC(), self.Scaling)
       
   948                 self.Refresh(False)
   940         event.Skip()
   949         event.Skip()
   941     
   950     
   942     def OnViewerMotion(self, event):
   951     def OnViewerMotion(self, event):
   943         if self.rubberBand.IsShown():
   952         if self.rubberBand.IsShown():
   944             self.rubberBand.OnMotion(event, self.GetLogicalDC(), self.Scaling)
   953             self.rubberBand.OnMotion(event, self.GetLogicalDC(), self.Scaling)