PLCOpenEditor.py
changeset 122 e6faee0c271b
parent 121 40b91ba978db
child 125 394d9f168258
equal deleted inserted replaced
121:40b91ba978db 122:e6faee0c271b
   350                   size=wx.Size(200, -1),
   350                   size=wx.Size(200, -1),
   351                   style=wx.TR_HAS_BUTTONS|wx.TR_EDIT_LABELS|wx.TR_SINGLE|wx.SUNKEN_BORDER)
   351                   style=wx.TR_HAS_BUTTONS|wx.TR_EDIT_LABELS|wx.TR_SINGLE|wx.SUNKEN_BORDER)
   352             self.AUIManager.AddPane(self.ProjectTree, wx.aui.AuiPaneInfo().Caption("Project Tree").Left().Layer(1).BestSize(wx.Size(200, 500)).CloseButton(False))
   352             self.AUIManager.AddPane(self.ProjectTree, wx.aui.AuiPaneInfo().Caption("Project Tree").Left().Layer(1).BestSize(wx.Size(200, 500)).CloseButton(False))
   353         if wx.VERSION >= (2, 6, 0):
   353         if wx.VERSION >= (2, 6, 0):
   354             self.ProjectTree.Bind(wx.EVT_RIGHT_UP, self.OnProjectTreeRightUp)
   354             self.ProjectTree.Bind(wx.EVT_RIGHT_UP, self.OnProjectTreeRightUp)
       
   355             self.ProjectTree.Bind(wx.EVT_LEFT_UP, self.OnProjectTreeLeftUp)
   355         else:
   356         else:
   356             wx.EVT_RIGHT_UP(self.ProjectTree, self.OnProjectTreeRightUp)
   357             wx.EVT_RIGHT_UP(self.ProjectTree, self.OnProjectTreeRightUp)
       
   358             wx.EVT_LEFT_UP(self.ProjectTree, self.OnProjectTreeLeftUp)
   357         self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.OnProjectTreeBeginDrag,
   359         self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.OnProjectTreeBeginDrag,
   358               id=ID_PLCOPENEDITORPROJECTTREE)
   360               id=ID_PLCOPENEDITORPROJECTTREE)
   359         self.Bind(wx.EVT_TREE_BEGIN_LABEL_EDIT, self.OnProjectTreeItemBeginEdit,
   361         self.Bind(wx.EVT_TREE_BEGIN_LABEL_EDIT, self.OnProjectTreeItemBeginEdit,
   360               id=ID_PLCOPENEDITORPROJECTTREE)
   362               id=ID_PLCOPENEDITORPROJECTTREE)
   361         self.Bind(wx.EVT_TREE_END_LABEL_EDIT, self.OnProjectTreeItemEndEdit,
   363         self.Bind(wx.EVT_TREE_END_LABEL_EDIT, self.OnProjectTreeItemEndEdit,
   362               id=ID_PLCOPENEDITORPROJECTTREE)
   364               id=ID_PLCOPENEDITORPROJECTTREE)
   363         self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnProjectTreeItemActivated,
   365         self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnProjectTreeItemActivated,
   364               id=ID_PLCOPENEDITORPROJECTTREE)
   366               id=ID_PLCOPENEDITORPROJECTTREE)
   365         self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnProjectTreeItemSelected,
   367         self.Bind(wx.EVT_TREE_SEL_CHANGING, self.OnProjectTreeItemChanging,
   366               id=ID_PLCOPENEDITORPROJECTTREE)
   368               id=ID_PLCOPENEDITORPROJECTTREE)
   367         
   369         
   368         if wx.VERSION < (2, 8, 0):
   370         if wx.VERSION < (2, 8, 0):
   369             self.ToolBar = self.CreateToolBar(wx.TB_HORIZONTAL|wx.TB_FLAT|wx.NO_BORDER, 
   371             self.ToolBar = self.CreateToolBar(wx.TB_HORIZONTAL|wx.TB_FLAT|wx.NO_BORDER, 
   370                   ID_PLCOPENEDITORTOOLBAR, 'ToolBar')
   372                   ID_PLCOPENEDITORTOOLBAR, 'ToolBar')
   433                 self.TreeImageList.Add(wx.Bitmap(os.path.join(CWD, 'Images', '%s.png'%language)))
   435                 self.TreeImageList.Add(wx.Bitmap(os.path.join(CWD, 'Images', '%s.png'%language)))
   434             self.ProjectTree.AssignImageList(self.TreeImageList)
   436             self.ProjectTree.AssignImageList(self.TreeImageList)
   435         
   437         
   436         self.CurrentToolBar = []
   438         self.CurrentToolBar = []
   437         self.CurrentLanguage = ""
   439         self.CurrentLanguage = ""
       
   440         self.SelectedItem = None
   438         self.CopyBuffer = None
   441         self.CopyBuffer = None
   439         self.DrawingMode = FREEDRAWING_MODE
   442         self.DrawingMode = FREEDRAWING_MODE
   440         #self.DrawingMode = DRIVENDRAWING_MODE
   443         #self.DrawingMode = DRIVENDRAWING_MODE
   441         
   444         
   442         if not self.ModeSolo or fileOpen is not None:
   445         if not self.ModeSolo or fileOpen is not None:
   444         
   447         
   445         self.RefreshFileMenu()
   448         self.RefreshFileMenu()
   446         self.RefreshEditMenu()
   449         self.RefreshEditMenu()
   447         self.RefreshTitle()
   450         self.RefreshTitle()
   448         self.RefreshToolBar()
   451         self.RefreshToolBar()
       
   452 
       
   453     def ResetSelectedItem(self):
       
   454         self.SelectedItem = None
   449 
   455 
   450     def GetPageCount(self):
   456     def GetPageCount(self):
   451         if wx.VERSION >= (2, 8, 0):
   457         if wx.VERSION >= (2, 8, 0):
   452             notebook = self.GetNotebook()
   458             notebook = self.GetNotebook()
   453             if notebook is not None:
   459             if notebook is not None:
   938                 if selected >= 0:
   944                 if selected >= 0:
   939                     window = self.GetPage(selected)
   945                     window = self.GetPage(selected)
   940                 else:
   946                 else:
   941                     window = None
   947                     window = None
   942             if window:
   948             if window:
   943 ##                found = False
   949                 if self.ProjectTree:
   944 ##                words = window.GetTagName().split("::")
   950                     root = self.ProjectTree.GetRootItem()
   945 ##                if self.ProjectTree:
   951                     words = window.GetTagName().split("::")
   946 ##                    root = self.ProjectTree.GetRootItem()
   952                     if words[0] == "P":
   947 ##                    if wx.VERSION >= (2, 6, 0):
   953                         self.SelectProjectTreeItem(root, [(words[1], ITEM_POU)])
   948 ##                        item, root_cookie = self.ProjectTree.GetFirstChild(root)
   954                     elif words[0] == "T":
   949 ##                    else:
   955                         self.SelectProjectTreeItem(root, [(words[1], ITEM_POU), (words[2], ITEM_TRANSITION)])
   950 ##                        item, root_cookie = self.ProjectTree.GetFirstChild(root, 0)
   956                     elif words[0] == "A":
   951 ##                    while item.IsOk() and not found:
   957                         self.SelectProjectTreeItem(root, [(words[1], ITEM_POU), (words[2], ITEM_ACTION)])
   952 ##                        if self.ProjectTree.GetItemText(item) == words[1]:
   958                     elif words[0] == "C":
   953 ##                            self.ProjectTree.SelectItem(item)
   959                         self.SelectProjectTreeItem(root, [(words[1], ITEM_CONFIGURATION)])
   954 ##                        item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie)
   960                     elif words[0] == "R":
       
   961                         self.SelectProjectTreeItem(root, [(words[1], ITEM_CONFIGURATION), (words[2], ITEM_RESOURCE)])
   955                 window.RefreshView()
   962                 window.RefreshView()
   956                 self.VariablePanelIndexer.ChangeVariablePanel(window.GetTagName())
   963                 self.VariablePanelIndexer.ChangeVariablePanel(window.GetTagName())
   957                 self.RefreshFileMenu()
   964                 self.RefreshFileMenu()
   958                 self.RefreshEditMenu()
   965                 self.RefreshEditMenu()
   959                 self.RefreshToolBar()
   966                 self.RefreshToolBar()
   960         event.Skip()
   967         event.Skip()
   961 
   968 
       
   969     def SelectProjectTreeItem(self, root, items):
       
   970         found = False
       
   971         if self.ProjectTree:
       
   972             if wx.VERSION >= (2, 6, 0):
       
   973                 item, root_cookie = self.ProjectTree.GetFirstChild(root)
       
   974             else:
       
   975                 item, root_cookie = self.ProjectTree.GetFirstChild(root, 0)
       
   976             while item.IsOk() and not found:
       
   977                 if (self.ProjectTree.GetItemText(item), self.ProjectTree.GetPyData(item)) == items[0]:
       
   978                     if len(items) == 1:
       
   979                         self.SelectedItem = item
       
   980                         self.ProjectTree.SelectItem(item)
       
   981                         wx.CallAfter(self.ResetSelectedItem)
       
   982                         return True
       
   983                     else:
       
   984                         found = self.SelectProjectTreeItem(item, items[1:])
       
   985                 else:
       
   986                     found = self.SelectProjectTreeItem(item, items)
       
   987                 item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie)
       
   988         return found
       
   989 
   962     def OnProjectTreeBeginDrag(self, event):
   990     def OnProjectTreeBeginDrag(self, event):
   963         item = event.GetItem()
   991         if self.SelectedItem is not None and self.ProjectTree.GetPyData(self.SelectedItem) == ITEM_POU:
   964         if self.ProjectTree.GetPyData(item) == ITEM_POU:
   992             block_name = self.ProjectTree.GetItemText(self.SelectedItem)
   965             block_name = self.ProjectTree.GetItemText(item)
       
   966             block_type = self.Controler.GetPouType(block_name)
   993             block_type = self.Controler.GetPouType(block_name)
   967             if block_type != "program":
   994             if block_type != "program":
   968                 data = wx.TextDataObject(str((block_name, block_type, "")))
   995                 data = wx.TextDataObject(str((block_name, block_type, "")))
   969                 dragSource = wx.DropSource(self.ProjectTree)
   996                 dragSource = wx.DropSource(self.ProjectTree)
   970                 dragSource.SetData(data)
   997                 dragSource.SetData(data)
   971                 dragSource.DoDragDrop()
   998                 dragSource.DoDragDrop()
       
   999             self.ResetSelectedItem()
   972 
  1000 
   973     def RefreshEditorNames(self, item_type, old_name, new_name):
  1001     def RefreshEditorNames(self, item_type, old_name, new_name):
   974         for i in xrange(self.GetPageCount()):
  1002         for i in xrange(self.GetPageCount()):
   975             editor = self.GetPage(i)
  1003             editor = self.GetPage(i)
   976             editor.RefreshName(item_type, old_name, new_name)
  1004             editor.RefreshName(item_type, old_name, new_name)
  1130                 tagname = self.Controler.ComputePouTransitionName(pou_name, name)
  1158                 tagname = self.Controler.ComputePouTransitionName(pou_name, name)
  1131             elif data == ITEM_ACTION:
  1159             elif data == ITEM_ACTION:
  1132                 tagname = self.Controler.ComputePouActionName(pou_name, name)
  1160                 tagname = self.Controler.ComputePouActionName(pou_name, name)
  1133             self.EditProjectElement(data, tagname)
  1161             self.EditProjectElement(data, tagname)
  1134     
  1162     
  1135     def OnProjectTreeItemSelected(self, event):
  1163     def OnProjectTreeLeftUp(self, event):
  1136         selected = event.GetItem()
  1164         if self.SelectedItem is not None:
  1137         name = self.ProjectTree.GetItemText(selected)
  1165             print "LeftUp", self.ProjectTree.GetItemText(self.SelectedItem)
  1138         data = self.ProjectTree.GetPyData(selected)
  1166             self.ProjectTree.SelectItem(self.SelectedItem)
  1139         if data == ITEM_POU:
  1167             name = self.ProjectTree.GetItemText(self.SelectedItem)
  1140             self.EditProjectElement(data, self.Controler.ComputePouName(name), True)
  1168             data = self.ProjectTree.GetPyData(self.SelectedItem)
  1141         elif data == ITEM_CONFIGURATION:
  1169             if data == ITEM_POU:
  1142             self.EditProjectElement(data, self.Controler.ComputeConfigurationName(name), True)
  1170                 self.EditProjectElement(data, self.Controler.ComputePouName(name), True)
  1143         elif data == ITEM_RESOURCE:
  1171             elif data == ITEM_CONFIGURATION:
  1144             item = self.ProjectTree.GetItemParent(selected)
  1172                 self.EditProjectElement(data, self.Controler.ComputeConfigurationName(name), True)
  1145             item_type = self.ProjectTree.GetPyData(item)
  1173             elif data == ITEM_RESOURCE:
  1146             while item_type != ITEM_CONFIGURATION:
  1174                 item = self.ProjectTree.GetItemParent(self.SelectedItem)
  1147                 item = self.ProjectTree.GetItemParent(item)
       
  1148                 item_type = self.ProjectTree.GetPyData(item)
  1175                 item_type = self.ProjectTree.GetPyData(item)
  1149             config_name = self.ProjectTree.GetItemText(item)
  1176                 while item_type != ITEM_CONFIGURATION:
  1150             self.EditProjectElement(data, self.Controler.ComputeConfigurationResourceName(config_name, name), True)
  1177                     item = self.ProjectTree.GetItemParent(item)
  1151         elif data in [ITEM_TRANSITION, ITEM_ACTION]:
  1178                     item_type = self.ProjectTree.GetPyData(item)
  1152             item = self.ProjectTree.GetItemParent(selected)
  1179                 config_name = self.ProjectTree.GetItemText(item)
  1153             item_type = self.ProjectTree.GetPyData(item)
  1180                 self.EditProjectElement(data, self.Controler.ComputeConfigurationResourceName(config_name, name), True)
  1154             while item_type != ITEM_POU:
  1181             elif data in [ITEM_TRANSITION, ITEM_ACTION]:
  1155                 item = self.ProjectTree.GetItemParent(item)
  1182                 item = self.ProjectTree.GetItemParent(self.SelectedItem)
  1156                 item_type = self.ProjectTree.GetPyData(item)
  1183                 item_type = self.ProjectTree.GetPyData(item)
  1157             pou_name = self.ProjectTree.GetItemText(item)
  1184                 while item_type != ITEM_POU:
  1158             if data == ITEM_TRANSITION:
  1185                     item = self.ProjectTree.GetItemParent(item)
  1159                 tagname = self.Controler.ComputePouTransitionName(pou_name, name)
  1186                     item_type = self.ProjectTree.GetPyData(item)
  1160             elif data == ITEM_ACTION:
  1187                 pou_name = self.ProjectTree.GetItemText(item)
  1161                 tagname = self.Controler.ComputePouActionName(pou_name, name)
  1188                 if data == ITEM_TRANSITION:
  1162             self.EditProjectElement(data, tagname, True)
  1189                     tagname = self.Controler.ComputePouTransitionName(pou_name, name)
  1163         event.Skip()
  1190                 elif data == ITEM_ACTION:
       
  1191                     tagname = self.Controler.ComputePouActionName(pou_name, name)
       
  1192                 self.EditProjectElement(data, tagname, True)
       
  1193             wx.CallAfter(self.ResetSelectedItem)
       
  1194         else:
       
  1195             print "LeftUp", None
       
  1196         event.Skip()
       
  1197     
       
  1198     def OnProjectTreeItemChanging(self, event):
       
  1199         if self.SelectedItem is not None:
       
  1200             print "Changing", self.ProjectTree.GetItemText(event.GetItem()), self.ProjectTree.GetItemText(self.SelectedItem)
       
  1201         else:
       
  1202             print "Changing", None, self.ProjectTree.GetItemText(event.GetItem())
       
  1203         if self.ProjectTree.GetPyData(event.GetItem()) != ITEM_UNEDITABLE and self.SelectedItem is None:
       
  1204             self.SelectedItem = event.GetItem()
       
  1205             event.Veto()
       
  1206         else:
       
  1207             event.Skip()
  1164     
  1208     
  1165     def IsOpened(self, tagname):
  1209     def IsOpened(self, tagname):
  1166         for idx in xrange(self.GetPageCount()):
  1210         for idx in xrange(self.GetPageCount()):
  1167             if self.GetPage(idx).IsViewing(tagname):
  1211             if self.GetPage(idx).IsViewing(tagname):
  1168                 return idx
  1212                 return idx