IDEFrame.py
changeset 2308 4d7cee25a474
parent 2302 69fefac5760e
child 2342 4ec6d6cd23ca
equal deleted inserted replaced
2307:c44692b53736 2308:4d7cee25a474
    90     ID_PLCOPENEDITOREDITORTOOLBARSTEP, ID_PLCOPENEDITOREDITORTOOLBARTRANSITION,
    90     ID_PLCOPENEDITOREDITORTOOLBARSTEP, ID_PLCOPENEDITOREDITORTOOLBARTRANSITION,
    91     ID_PLCOPENEDITOREDITORTOOLBARACTIONBLOCK, ID_PLCOPENEDITOREDITORTOOLBARDIVERGENCE,
    91     ID_PLCOPENEDITOREDITORTOOLBARACTIONBLOCK, ID_PLCOPENEDITOREDITORTOOLBARDIVERGENCE,
    92     ID_PLCOPENEDITOREDITORTOOLBARJUMP, ID_PLCOPENEDITOREDITORTOOLBARMOTION,
    92     ID_PLCOPENEDITOREDITORTOOLBARJUMP, ID_PLCOPENEDITOREDITORTOOLBARMOTION,
    93 ] = [wx.NewId() for _init_coll_DefaultEditorToolBar_Items in range(18)]
    93 ] = [wx.NewId() for _init_coll_DefaultEditorToolBar_Items in range(18)]
    94 
    94 
    95 
       
    96 # Define behaviour of each Toolbar item according to current POU body type
       
    97 # Informations meaning are in this order:
       
    98 #  - Item is toggled
       
    99 #  - PLCOpenEditor mode where item is displayed (could be more then one)
       
   100 #  - Item id
       
   101 #  - Item callback function name
       
   102 #  - Item icon filename
       
   103 #  - Item tooltip text
       
   104 EditorToolBarItems = {
       
   105     "FBD":   [(True, FREEDRAWING_MODE | DRIVENDRAWING_MODE,
       
   106                ID_PLCOPENEDITOREDITORTOOLBARMOTION, "OnMotionTool",
       
   107                "move", _("Move the view")),
       
   108               (True, FREEDRAWING_MODE | DRIVENDRAWING_MODE,
       
   109                ID_PLCOPENEDITOREDITORTOOLBARCOMMENT, "OnCommentTool",
       
   110                "add_comment", _("Create a new comment")),
       
   111               (True, FREEDRAWING_MODE | DRIVENDRAWING_MODE,
       
   112                ID_PLCOPENEDITOREDITORTOOLBARVARIABLE, "OnVariableTool",
       
   113                "add_variable", _("Create a new variable")),
       
   114               (True, FREEDRAWING_MODE | DRIVENDRAWING_MODE,
       
   115                ID_PLCOPENEDITOREDITORTOOLBARBLOCK, "OnBlockTool",
       
   116                "add_block", _("Create a new block")),
       
   117               (True, FREEDRAWING_MODE | DRIVENDRAWING_MODE,
       
   118                ID_PLCOPENEDITOREDITORTOOLBARCONNECTION, "OnConnectionTool",
       
   119                "add_connection", _("Create a new connection"))],
       
   120     "LD":    [(True, FREEDRAWING_MODE | DRIVENDRAWING_MODE,
       
   121                ID_PLCOPENEDITOREDITORTOOLBARMOTION, "OnMotionTool",
       
   122                "move", _("Move the view")),
       
   123               (True, FREEDRAWING_MODE,
       
   124                ID_PLCOPENEDITOREDITORTOOLBARCOMMENT, "OnCommentTool",
       
   125                "add_comment", _("Create a new comment")),
       
   126               (True, FREEDRAWING_MODE,
       
   127                ID_PLCOPENEDITOREDITORTOOLBARPOWERRAIL, "OnPowerRailTool",
       
   128                "add_powerrail", _("Create a new power rail")),
       
   129               (False, DRIVENDRAWING_MODE,
       
   130                ID_PLCOPENEDITOREDITORTOOLBARRUNG, "OnRungTool",
       
   131                "add_rung", _("Create a new rung")),
       
   132               (True, FREEDRAWING_MODE,
       
   133                ID_PLCOPENEDITOREDITORTOOLBARCOIL, "OnCoilTool",
       
   134                "add_coil", _("Create a new coil")),
       
   135               (False, FREEDRAWING_MODE | DRIVENDRAWING_MODE,
       
   136                ID_PLCOPENEDITOREDITORTOOLBARCONTACT, "OnContactTool",
       
   137                "add_contact", _("Create a new contact")),
       
   138               (False, DRIVENDRAWING_MODE,
       
   139                ID_PLCOPENEDITOREDITORTOOLBARBRANCH, "OnBranchTool",
       
   140                "add_branch", _("Create a new branch")),
       
   141               (True, FREEDRAWING_MODE,
       
   142                ID_PLCOPENEDITOREDITORTOOLBARVARIABLE, "OnVariableTool",
       
   143                "add_variable", _("Create a new variable")),
       
   144               (False, FREEDRAWING_MODE | DRIVENDRAWING_MODE,
       
   145                ID_PLCOPENEDITOREDITORTOOLBARBLOCK, "OnBlockTool",
       
   146                "add_block", _("Create a new block")),
       
   147               (True, FREEDRAWING_MODE,
       
   148                ID_PLCOPENEDITOREDITORTOOLBARCONNECTION, "OnConnectionTool",
       
   149                "add_connection", _("Create a new connection"))],
       
   150     "SFC":   [(True, FREEDRAWING_MODE | DRIVENDRAWING_MODE,
       
   151                ID_PLCOPENEDITOREDITORTOOLBARMOTION, "OnMotionTool",
       
   152                "move", _("Move the view")),
       
   153               (True, FREEDRAWING_MODE | DRIVENDRAWING_MODE,
       
   154                ID_PLCOPENEDITOREDITORTOOLBARCOMMENT, "OnCommentTool",
       
   155                "add_comment", _("Create a new comment")),
       
   156               (True, FREEDRAWING_MODE | DRIVENDRAWING_MODE,
       
   157                ID_PLCOPENEDITOREDITORTOOLBARINITIALSTEP, "OnInitialStepTool",
       
   158                "add_initial_step", _("Create a new initial step")),
       
   159               (False, FREEDRAWING_MODE | DRIVENDRAWING_MODE,
       
   160                ID_PLCOPENEDITOREDITORTOOLBARSTEP, "OnStepTool",
       
   161                "add_step", _("Create a new step")),
       
   162               (True, FREEDRAWING_MODE,
       
   163                ID_PLCOPENEDITOREDITORTOOLBARTRANSITION, "OnTransitionTool",
       
   164                "add_transition", _("Create a new transition")),
       
   165               (False, FREEDRAWING_MODE | DRIVENDRAWING_MODE,
       
   166                ID_PLCOPENEDITOREDITORTOOLBARACTIONBLOCK, "OnActionBlockTool",
       
   167                "add_action", _("Create a new action block")),
       
   168               (False, FREEDRAWING_MODE | DRIVENDRAWING_MODE,
       
   169                ID_PLCOPENEDITOREDITORTOOLBARDIVERGENCE, "OnDivergenceTool",
       
   170                "add_divergence", _("Create a new divergence")),
       
   171               (False, FREEDRAWING_MODE | DRIVENDRAWING_MODE,
       
   172                ID_PLCOPENEDITOREDITORTOOLBARJUMP, "OnJumpTool",
       
   173                "add_jump", _("Create a new jump")),
       
   174               (True, FREEDRAWING_MODE,
       
   175                ID_PLCOPENEDITOREDITORTOOLBARVARIABLE, "OnVariableTool",
       
   176                "add_variable", _("Create a new variable")),
       
   177               (True, FREEDRAWING_MODE,
       
   178                ID_PLCOPENEDITOREDITORTOOLBARBLOCK, "OnBlockTool",
       
   179                "add_block", _("Create a new block")),
       
   180               (True, FREEDRAWING_MODE,
       
   181                ID_PLCOPENEDITOREDITORTOOLBARCONNECTION, "OnConnectionTool",
       
   182                "add_connection", _("Create a new connection")),
       
   183               (True, FREEDRAWING_MODE,
       
   184                ID_PLCOPENEDITOREDITORTOOLBARPOWERRAIL, "OnPowerRailTool",
       
   185                "add_powerrail", _("Create a new power rail")),
       
   186               (True, FREEDRAWING_MODE,
       
   187                ID_PLCOPENEDITOREDITORTOOLBARCONTACT, "OnContactTool",
       
   188                "add_contact", _("Create a new contact"))],
       
   189     "ST":    [],
       
   190     "IL":    [],
       
   191     "debug": [(True, FREEDRAWING_MODE | DRIVENDRAWING_MODE,
       
   192                ID_PLCOPENEDITOREDITORTOOLBARMOTION, "OnMotionTool",
       
   193                "move", _("Move the view"))],
       
   194 }
       
   195 
    95 
   196 # -------------------------------------------------------------------------------
    96 # -------------------------------------------------------------------------------
   197 #                               Helper Functions
    97 #                               Helper Functions
   198 # -------------------------------------------------------------------------------
    98 # -------------------------------------------------------------------------------
   199 
    99 
   329         if SimplifyTabLayout(tabs, rect):
   229         if SimplifyTabLayout(tabs, rect):
   330             return ComputeTabsLayout(tabs, rect)
   230             return ComputeTabsLayout(tabs, rect)
   331     return tabs
   231     return tabs
   332 
   232 
   333 
   233 
   334 UNEDITABLE_NAMES_DICT = dict([(_(n), n) for n in UNEDITABLE_NAMES])
       
   335 
       
   336 
       
   337 class IDEFrame(wx.Frame):
   234 class IDEFrame(wx.Frame):
   338     """IDEFrame Base Class"""
   235     """IDEFrame Base Class"""
       
   236 
       
   237     def InitEditorToolbarItems(self):
       
   238         """
       
   239         Initialize dictionary with lists of elements that need to be shown
       
   240         if POU in particular programming language is edited.
       
   241         """
       
   242         # Define behaviour of each Toolbar item according to current POU body type
       
   243         # Informations meaning are in this order:
       
   244         #  - Item is toggled
       
   245         #  - PLCOpenEditor mode where item is displayed (could be more then one)
       
   246         #  - Item id
       
   247         #  - Item callback function name
       
   248         #  - Item icon filename
       
   249         #  - Item tooltip text
       
   250         self.EditorToolBarItems = {
       
   251             "FBD":   [(True, FREEDRAWING_MODE | DRIVENDRAWING_MODE,
       
   252                        ID_PLCOPENEDITOREDITORTOOLBARMOTION, "OnMotionTool",
       
   253                        "move", _("Move the view")),
       
   254                       (True, FREEDRAWING_MODE | DRIVENDRAWING_MODE,
       
   255                        ID_PLCOPENEDITOREDITORTOOLBARCOMMENT, "OnCommentTool",
       
   256                        "add_comment", _("Create a new comment")),
       
   257                       (True, FREEDRAWING_MODE | DRIVENDRAWING_MODE,
       
   258                        ID_PLCOPENEDITOREDITORTOOLBARVARIABLE, "OnVariableTool",
       
   259                        "add_variable", _("Create a new variable")),
       
   260                       (True, FREEDRAWING_MODE | DRIVENDRAWING_MODE,
       
   261                        ID_PLCOPENEDITOREDITORTOOLBARBLOCK, "OnBlockTool",
       
   262                        "add_block", _("Create a new block")),
       
   263                       (True, FREEDRAWING_MODE | DRIVENDRAWING_MODE,
       
   264                        ID_PLCOPENEDITOREDITORTOOLBARCONNECTION, "OnConnectionTool",
       
   265                        "add_connection", _("Create a new connection"))],
       
   266             "LD":    [(True, FREEDRAWING_MODE | DRIVENDRAWING_MODE,
       
   267                        ID_PLCOPENEDITOREDITORTOOLBARMOTION, "OnMotionTool",
       
   268                        "move", _("Move the view")),
       
   269                       (True, FREEDRAWING_MODE,
       
   270                        ID_PLCOPENEDITOREDITORTOOLBARCOMMENT, "OnCommentTool",
       
   271                        "add_comment", _("Create a new comment")),
       
   272                       (True, FREEDRAWING_MODE,
       
   273                        ID_PLCOPENEDITOREDITORTOOLBARPOWERRAIL, "OnPowerRailTool",
       
   274                        "add_powerrail", _("Create a new power rail")),
       
   275                       (False, DRIVENDRAWING_MODE,
       
   276                        ID_PLCOPENEDITOREDITORTOOLBARRUNG, "OnRungTool",
       
   277                        "add_rung", _("Create a new rung")),
       
   278                       (True, FREEDRAWING_MODE,
       
   279                        ID_PLCOPENEDITOREDITORTOOLBARCOIL, "OnCoilTool",
       
   280                        "add_coil", _("Create a new coil")),
       
   281                       (False, FREEDRAWING_MODE | DRIVENDRAWING_MODE,
       
   282                        ID_PLCOPENEDITOREDITORTOOLBARCONTACT, "OnContactTool",
       
   283                        "add_contact", _("Create a new contact")),
       
   284                       (False, DRIVENDRAWING_MODE,
       
   285                        ID_PLCOPENEDITOREDITORTOOLBARBRANCH, "OnBranchTool",
       
   286                        "add_branch", _("Create a new branch")),
       
   287                       (True, FREEDRAWING_MODE,
       
   288                        ID_PLCOPENEDITOREDITORTOOLBARVARIABLE, "OnVariableTool",
       
   289                        "add_variable", _("Create a new variable")),
       
   290                       (False, FREEDRAWING_MODE | DRIVENDRAWING_MODE,
       
   291                        ID_PLCOPENEDITOREDITORTOOLBARBLOCK, "OnBlockTool",
       
   292                        "add_block", _("Create a new block")),
       
   293                       (True, FREEDRAWING_MODE,
       
   294                        ID_PLCOPENEDITOREDITORTOOLBARCONNECTION, "OnConnectionTool",
       
   295                        "add_connection", _("Create a new connection"))],
       
   296             "SFC":   [(True, FREEDRAWING_MODE | DRIVENDRAWING_MODE,
       
   297                        ID_PLCOPENEDITOREDITORTOOLBARMOTION, "OnMotionTool",
       
   298                        "move", _("Move the view")),
       
   299                       (True, FREEDRAWING_MODE | DRIVENDRAWING_MODE,
       
   300                        ID_PLCOPENEDITOREDITORTOOLBARCOMMENT, "OnCommentTool",
       
   301                        "add_comment", _("Create a new comment")),
       
   302                       (True, FREEDRAWING_MODE | DRIVENDRAWING_MODE,
       
   303                        ID_PLCOPENEDITOREDITORTOOLBARINITIALSTEP, "OnInitialStepTool",
       
   304                        "add_initial_step", _("Create a new initial step")),
       
   305                       (False, FREEDRAWING_MODE | DRIVENDRAWING_MODE,
       
   306                        ID_PLCOPENEDITOREDITORTOOLBARSTEP, "OnStepTool",
       
   307                        "add_step", _("Create a new step")),
       
   308                       (True, FREEDRAWING_MODE,
       
   309                        ID_PLCOPENEDITOREDITORTOOLBARTRANSITION, "OnTransitionTool",
       
   310                        "add_transition", _("Create a new transition")),
       
   311                       (False, FREEDRAWING_MODE | DRIVENDRAWING_MODE,
       
   312                        ID_PLCOPENEDITOREDITORTOOLBARACTIONBLOCK, "OnActionBlockTool",
       
   313                        "add_action", _("Create a new action block")),
       
   314                       (False, FREEDRAWING_MODE | DRIVENDRAWING_MODE,
       
   315                        ID_PLCOPENEDITOREDITORTOOLBARDIVERGENCE, "OnDivergenceTool",
       
   316                        "add_divergence", _("Create a new divergence")),
       
   317                       (False, FREEDRAWING_MODE | DRIVENDRAWING_MODE,
       
   318                        ID_PLCOPENEDITOREDITORTOOLBARJUMP, "OnJumpTool",
       
   319                        "add_jump", _("Create a new jump")),
       
   320                       (True, FREEDRAWING_MODE,
       
   321                        ID_PLCOPENEDITOREDITORTOOLBARVARIABLE, "OnVariableTool",
       
   322                        "add_variable", _("Create a new variable")),
       
   323                       (True, FREEDRAWING_MODE,
       
   324                        ID_PLCOPENEDITOREDITORTOOLBARBLOCK, "OnBlockTool",
       
   325                        "add_block", _("Create a new block")),
       
   326                       (True, FREEDRAWING_MODE,
       
   327                        ID_PLCOPENEDITOREDITORTOOLBARCONNECTION, "OnConnectionTool",
       
   328                        "add_connection", _("Create a new connection")),
       
   329                       (True, FREEDRAWING_MODE,
       
   330                        ID_PLCOPENEDITOREDITORTOOLBARPOWERRAIL, "OnPowerRailTool",
       
   331                        "add_powerrail", _("Create a new power rail")),
       
   332                       (True, FREEDRAWING_MODE,
       
   333                        ID_PLCOPENEDITOREDITORTOOLBARCONTACT, "OnContactTool",
       
   334                        "add_contact", _("Create a new contact"))],
       
   335             "ST":    [],
       
   336             "IL":    [],
       
   337             "debug": [(True, FREEDRAWING_MODE | DRIVENDRAWING_MODE,
       
   338                        ID_PLCOPENEDITOREDITORTOOLBARMOTION, "OnMotionTool",
       
   339                        "move", _("Move the view"))],
       
   340         }
   339 
   341 
   340     def _init_coll_MenuBar_Menus(self, parent):
   342     def _init_coll_MenuBar_Menus(self, parent):
   341         parent.Append(menu=self.FileMenu, title=_(u'&File'))
   343         parent.Append(menu=self.FileMenu, title=_(u'&File'))
   342         parent.Append(menu=self.EditMenu, title=_(u'&Edit'))
   344         parent.Append(menu=self.EditMenu, title=_(u'&Edit'))
   343         parent.Append(menu=self.DisplayMenu, title=_(u'&Display'))
   345         parent.Append(menu=self.DisplayMenu, title=_(u'&Display'))
   670         wx.Frame.__init__(self, id=ID_PLCOPENEDITOR, name='IDEFrame',
   672         wx.Frame.__init__(self, id=ID_PLCOPENEDITOR, name='IDEFrame',
   671                           parent=parent, pos=wx.DefaultPosition,
   673                           parent=parent, pos=wx.DefaultPosition,
   672                           size=wx.Size(1000, 600),
   674                           size=wx.Size(1000, 600),
   673                           style=wx.DEFAULT_FRAME_STYLE)
   675                           style=wx.DEFAULT_FRAME_STYLE)
   674 
   676 
       
   677         self.UNEDITABLE_NAMES_DICT = dict([(_(n), n) for n in UNEDITABLE_NAMES])
       
   678 
   675         self.Controler = None
   679         self.Controler = None
   676         self.Config = wx.ConfigBase.Get()
   680         self.Config = wx.ConfigBase.Get()
   677         self.EnableDebug = enable_debug
   681         self.EnableDebug = enable_debug
   678 
   682 
       
   683         self.InitEditorToolbarItems()
   679         self._init_ctrls(parent)
   684         self._init_ctrls(parent)
   680 
   685 
   681         # Define Tree item icon list
   686         # Define Tree item icon list
   682         self.TreeImageList = wx.ImageList(16, 16)
   687         self.TreeImageList = wx.ImageList(16, 16)
   683         self.TreeImageDict = {}
   688         self.TreeImageDict = {}
  1889         menu = None
  1894         menu = None
  1890         if item_infos["type"] in ITEMS_UNEDITABLE + [ITEM_PROJECT]:
  1895         if item_infos["type"] in ITEMS_UNEDITABLE + [ITEM_PROJECT]:
  1891             if item_infos["type"] == ITEM_PROJECT:
  1896             if item_infos["type"] == ITEM_PROJECT:
  1892                 name = "Project"
  1897                 name = "Project"
  1893             else:
  1898             else:
  1894                 name = UNEDITABLE_NAMES_DICT[name]
  1899                 name = self.UNEDITABLE_NAMES_DICT[name]
  1895 
  1900 
  1896             if name == "Data Types":
  1901             if name == "Data Types":
  1897                 menu = wx.Menu(title='')
  1902                 menu = wx.Menu(title='')
  1898                 new_id = wx.NewId()
  1903                 new_id = wx.NewId()
  1899                 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Add DataType"))
  1904                 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Add DataType"))
  2153             self.ResetEditorToolBar()
  2158             self.ResetEditorToolBar()
  2154             self.CurrentMenu = menu
  2159             self.CurrentMenu = menu
  2155             self.CurrentEditorToolBar = []
  2160             self.CurrentEditorToolBar = []
  2156             EditorToolBar = self.Panes["EditorToolBar"]
  2161             EditorToolBar = self.Panes["EditorToolBar"]
  2157             if EditorToolBar:
  2162             if EditorToolBar:
  2158                 for radio, modes, id, method, picture, help in EditorToolBarItems[menu]:
  2163                 for radio, modes, id, method, picture, help in self.EditorToolBarItems[menu]:
  2159                     if modes & self.DrawingMode:
  2164                     if modes & self.DrawingMode:
  2160                         if radio or self.DrawingMode == FREEDRAWING_MODE:
  2165                         if radio or self.DrawingMode == FREEDRAWING_MODE:
  2161                             EditorToolBar.AddRadioTool(id, GetBitmap(picture), wx.NullBitmap, help)
  2166                             EditorToolBar.AddRadioTool(id, GetBitmap(picture), wx.NullBitmap, help)
  2162                         else:
  2167                         else:
  2163                             EditorToolBar.AddSimpleTool(id, GetBitmap(picture), help)
  2168                             EditorToolBar.AddSimpleTool(id, GetBitmap(picture), help)
  2165                         self.CurrentEditorToolBar.append(id)
  2170                         self.CurrentEditorToolBar.append(id)
  2166                 EditorToolBar.Realize()
  2171                 EditorToolBar.Realize()
  2167                 self.AUIManager.GetPane("EditorToolBar").Show()
  2172                 self.AUIManager.GetPane("EditorToolBar").Show()
  2168                 self.AUIManager.Update()
  2173                 self.AUIManager.Update()
  2169                 self.AUIManager.GetPane("EditorToolBar").BestSize(EditorToolBar.GetBestSize())
  2174                 self.AUIManager.GetPane("EditorToolBar").BestSize(EditorToolBar.GetBestSize())
       
  2175                 self.AUIManager.Update()
  2170         elif menu is None:
  2176         elif menu is None:
  2171             self.ResetEditorToolBar()
  2177             self.ResetEditorToolBar()
  2172             self.CurrentMenu = menu
  2178             self.CurrentMenu = menu
  2173         self.ResetCurrentMode()
  2179         self.ResetCurrentMode()
  2174 
  2180 
  2418     def OnPastePou(self, event):
  2424     def OnPastePou(self, event):
  2419         selected = self.ProjectTree.GetSelection()
  2425         selected = self.ProjectTree.GetSelection()
  2420 
  2426 
  2421         if self.ProjectTree.GetPyData(selected)["type"] != ITEM_PROJECT:
  2427         if self.ProjectTree.GetPyData(selected)["type"] != ITEM_PROJECT:
  2422             pou_type = self.ProjectTree.GetItemText(selected)
  2428             pou_type = self.ProjectTree.GetItemText(selected)
  2423             pou_type = UNEDITABLE_NAMES_DICT[pou_type]  # one of 'Functions', 'Function Blocks' or 'Programs'
  2429             pou_type = self.UNEDITABLE_NAMES_DICT[pou_type]  # one of 'Functions', 'Function Blocks' or 'Programs'
  2424             pou_type = {'Functions': 'function', 'Function Blocks': 'functionBlock', 'Programs': 'program'}[pou_type]
  2430             pou_type = {'Functions': 'function', 'Function Blocks': 'functionBlock', 'Programs': 'program'}[pou_type]
  2425         else:
  2431         else:
  2426             pou_type = None
  2432             pou_type = None
  2427 
  2433 
  2428         pou_xml = self.GetCopyBuffer()
  2434         pou_xml = self.GetCopyBuffer()