PLCOpenEditor.py
changeset 184 d3e6484ebe85
parent 183 99d77995b4ea
child 185 fdc8a59b02bd
equal deleted inserted replaced
183:99d77995b4ea 184:d3e6484ebe85
   102  ID_PLCOPENEDITORTOOLBARACTIONBLOCK, ID_PLCOPENEDITORTOOLBARDIVERGENCE,
   102  ID_PLCOPENEDITORTOOLBARACTIONBLOCK, ID_PLCOPENEDITORTOOLBARDIVERGENCE,
   103  ID_PLCOPENEDITORTOOLBARJUMP,
   103  ID_PLCOPENEDITORTOOLBARJUMP,
   104 ] = [wx.NewId() for _init_coll_DefaultToolBar_Items in range(17)]
   104 ] = [wx.NewId() for _init_coll_DefaultToolBar_Items in range(17)]
   105 
   105 
   106 ToolBarItems = {
   106 ToolBarItems = {
   107     "FBD" : [(True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITORTOOLBARCOMMENT, "OnCommentTool", "comment.png", "Create a new comment"),
   107     "FBD" : [(True, FREEDRAWING_MODE|DRIVENDRAWING_MODE,
   108              (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITORTOOLBARVARIABLE, "OnVariableTool", "variable.png", "Create a new variable"),
   108               ID_PLCOPENEDITORTOOLBARCOMMENT, "OnCommentTool",
   109              (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITORTOOLBARBLOCK, "OnBlockTool", "block.png", "Create a new block"),
   109               "add_comment.png", "Create a new comment"),
   110              (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITORTOOLBARCONNECTION, "OnConnectionTool", "connection.png", "Create a new connection")],
   110              (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE,
   111     "LD"  : [(True, FREEDRAWING_MODE, ID_PLCOPENEDITORTOOLBARCOMMENT, "OnCommentTool", "comment.png", "Create a new comment"),
   111               ID_PLCOPENEDITORTOOLBARVARIABLE, "OnVariableTool",
   112              (True, FREEDRAWING_MODE, ID_PLCOPENEDITORTOOLBARPOWERRAIL, "OnPowerRailTool", "powerrail.png", "Create a new power rail"),
   112               "add_variable.png", "Create a new variable"),
   113              (False, DRIVENDRAWING_MODE, ID_PLCOPENEDITORTOOLBARRUNG, "OnRungTool", "rung.png", "Create a new rung"),
   113              (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE,
   114              (True, FREEDRAWING_MODE, ID_PLCOPENEDITORTOOLBARCOIL, "OnCoilTool", "coil.png", "Create a new coil"),
   114               ID_PLCOPENEDITORTOOLBARBLOCK, "OnBlockTool",
   115              (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITORTOOLBARCONTACT, "OnContactTool", "contact.png", "Create a new contact"),
   115               "add_block.png", "Create a new block"),
   116              (False, DRIVENDRAWING_MODE, ID_PLCOPENEDITORTOOLBARBRANCH, "OnBranchTool", "branch.png", "Create a new branch"),
   116              (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, 
   117              (True, FREEDRAWING_MODE, ID_PLCOPENEDITORTOOLBARVARIABLE, "OnVariableTool", "variable.png", "Create a new variable"),
   117               ID_PLCOPENEDITORTOOLBARCONNECTION, "OnConnectionTool", 
   118              (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITORTOOLBARBLOCK, "OnBlockTool", "block.png", "Create a new block"),
   118               "add_connection.png", "Create a new connection")],
   119              (True, FREEDRAWING_MODE, ID_PLCOPENEDITORTOOLBARCONNECTION, "OnConnectionTool", "connection.png", "Create a new connection")],
   119     "LD"  : [(True, FREEDRAWING_MODE, 
   120     "SFC" : [(True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITORTOOLBARCOMMENT, "OnCommentTool", "comment.png", "Create a new comment"),
   120               ID_PLCOPENEDITORTOOLBARCOMMENT, "OnCommentTool", 
   121              (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITORTOOLBARINITIALSTEP, "OnInitialStepTool", "initial_step.png", "Create a new initial step"),
   121               "add_comment.png", "Create a new comment"),
   122              (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITORTOOLBARSTEP, "OnStepTool", "step.png", "Create a new step"),
   122              (True, FREEDRAWING_MODE, 
   123              (True, FREEDRAWING_MODE, ID_PLCOPENEDITORTOOLBARTRANSITION, "OnTransitionTool", "transition.png", "Create a new transition"),
   123               ID_PLCOPENEDITORTOOLBARPOWERRAIL, "OnPowerRailTool", 
   124              (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITORTOOLBARACTIONBLOCK, "OnActionBlockTool", "action.png", "Create a new action block"),
   124               "add_powerrail.png", "Create a new power rail"),
   125              (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITORTOOLBARDIVERGENCE, "OnDivergenceTool", "divergence.png", "Create a new divergence"),
   125              (False, DRIVENDRAWING_MODE, 
   126              (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, ID_PLCOPENEDITORTOOLBARJUMP, "OnJumpTool", "jump.png", "Create a new jump"),
   126               ID_PLCOPENEDITORTOOLBARRUNG, "OnRungTool", 
   127              (True, FREEDRAWING_MODE, ID_PLCOPENEDITORTOOLBARVARIABLE, "OnVariableTool", "variable.png", "Create a new variable"),
   127               "add_rung.png", "Create a new rung"),
   128              (True, FREEDRAWING_MODE, ID_PLCOPENEDITORTOOLBARBLOCK, "OnBlockTool", "block.png", "Create a new block"),
   128              (True, FREEDRAWING_MODE, 
   129              (True, FREEDRAWING_MODE, ID_PLCOPENEDITORTOOLBARCONNECTION, "OnConnectionTool", "connection.png", "Create a new connection"),
   129               ID_PLCOPENEDITORTOOLBARCOIL, "OnCoilTool", 
   130              (True, FREEDRAWING_MODE, ID_PLCOPENEDITORTOOLBARPOWERRAIL, "OnPowerRailTool", "powerrail.png", "Create a new power rail"),
   130               "add_coil.png", "Create a new coil"),
   131              (True, FREEDRAWING_MODE, ID_PLCOPENEDITORTOOLBARCONTACT, "OnContactTool", "contact.png", "Create a new contact")],
   131              (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, 
       
   132               ID_PLCOPENEDITORTOOLBARCONTACT, "OnContactTool", 
       
   133               "add_contact.png", "Create a new contact"),
       
   134              (False, DRIVENDRAWING_MODE, 
       
   135               ID_PLCOPENEDITORTOOLBARBRANCH, "OnBranchTool", 
       
   136               "add_branch.png", "Create a new branch"),
       
   137              (True, FREEDRAWING_MODE, 
       
   138               ID_PLCOPENEDITORTOOLBARVARIABLE, "OnVariableTool", 
       
   139               "add_variable.png", "Create a new variable"),
       
   140              (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, 
       
   141               ID_PLCOPENEDITORTOOLBARBLOCK, "OnBlockTool", 
       
   142               "add_block.png", "Create a new block"),
       
   143              (True, FREEDRAWING_MODE, 
       
   144               ID_PLCOPENEDITORTOOLBARCONNECTION, "OnConnectionTool", 
       
   145               "add_connection.png", "Create a new connection")],
       
   146     "SFC" : [(True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, 
       
   147               ID_PLCOPENEDITORTOOLBARCOMMENT, "OnCommentTool", 
       
   148               "add_comment.png", "Create a new comment"),
       
   149              (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, 
       
   150               ID_PLCOPENEDITORTOOLBARINITIALSTEP, "OnInitialStepTool", 
       
   151               "add_initial_step.png", "Create a new initial step"),
       
   152              (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, 
       
   153               ID_PLCOPENEDITORTOOLBARSTEP, "OnStepTool", 
       
   154               "add_step.png", "Create a new step"),
       
   155              (True, FREEDRAWING_MODE, 
       
   156               ID_PLCOPENEDITORTOOLBARTRANSITION, "OnTransitionTool", 
       
   157               "add_transition.png", "Create a new transition"),
       
   158              (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, 
       
   159               ID_PLCOPENEDITORTOOLBARACTIONBLOCK, "OnActionBlockTool", 
       
   160               "add_action.png", "Create a new action block"),
       
   161              (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, 
       
   162               ID_PLCOPENEDITORTOOLBARDIVERGENCE, "OnDivergenceTool", 
       
   163               "add_divergence.png", "Create a new divergence"),
       
   164              (False, FREEDRAWING_MODE|DRIVENDRAWING_MODE, 
       
   165               ID_PLCOPENEDITORTOOLBARJUMP, "OnJumpTool", 
       
   166               "add_jump.png", "Create a new jump"),
       
   167              (True, FREEDRAWING_MODE, 
       
   168               ID_PLCOPENEDITORTOOLBARVARIABLE, "OnVariableTool", 
       
   169               "add_variable.png", "Create a new variable"),
       
   170              (True, FREEDRAWING_MODE, 
       
   171               ID_PLCOPENEDITORTOOLBARBLOCK, "OnBlockTool", 
       
   172               "add_block.png", "Create a new block"),
       
   173              (True, FREEDRAWING_MODE, 
       
   174               ID_PLCOPENEDITORTOOLBARCONNECTION, "OnConnectionTool", 
       
   175               "add_connection.png", "Create a new connection"),
       
   176              (True, FREEDRAWING_MODE, 
       
   177               ID_PLCOPENEDITORTOOLBARPOWERRAIL, "OnPowerRailTool", 
       
   178               "add_powerrail.png", "Create a new power rail"),
       
   179              (True, FREEDRAWING_MODE, 
       
   180               ID_PLCOPENEDITORTOOLBARCONTACT, "OnContactTool", 
       
   181               "add_contact.png", "Create a new contact")],
   132     "ST"  : [],
   182     "ST"  : [],
   133     "IL"  : []
   183     "IL"  : []
   134 }
   184 }
   135 
   185 
   136 def AppendMenu(parent, help, id, kind, text):
   186 def AppendMenu(parent, help, id, kind, text):
   414         self._init_ctrls(parent)
   464         self._init_ctrls(parent)
   415         
   465         
   416         icon = wx.Icon(os.path.join(CWD,"Images","poe.ico"),wx.BITMAP_TYPE_ICO)
   466         icon = wx.Icon(os.path.join(CWD,"Images","poe.ico"),wx.BITMAP_TYPE_ICO)
   417         self.SetIcon(icon)
   467         self.SetIcon(icon)
   418         
   468         
   419         if wx.Platform != '__WXMSW__':
   469         self.TreeImageList = wx.ImageList(16, 16)
   420             self.TreeImageList = wx.ImageList(16, 16)
   470         self.TreeImageDict = {}
   421             for language in LANGUAGES:
   471         for language in LANGUAGES:
   422                 self.TreeImageList.Add(wx.Bitmap(os.path.join(CWD, 'Images', '%s.png'%language)))
   472             self.TreeImageDict[language]=self.TreeImageList.Add(wx.Bitmap(os.path.join(CWD, 'Images', '%s.png'%language)))
   423             self.ProjectTree.AssignImageList(self.TreeImageList)
   473         
       
   474         for imgname, itemtype in [
       
   475             #editables
       
   476             ("PROJECT",        ITEM_PROJECT),
       
   477             #("POU",            ITEM_POU),
       
   478             #("VARIABLE",       ITEM_VARIABLE),
       
   479             ("TRANSITION",     ITEM_TRANSITION),
       
   480             ("ACTION",         ITEM_ACTION),
       
   481             ("CONFIGURATION",  ITEM_CONFIGURATION),
       
   482             ("RESOURCE",       ITEM_RESOURCE),
       
   483             ("DATATYPE",       ITEM_DATATYPE),
       
   484             # uneditables
       
   485             ("DATATYPES",      ITEM_DATATYPES),
       
   486             ("FUNCTION",       ITEM_FUNCTION),
       
   487             ("FUNCTIONBLOCK",  ITEM_FUNCTIONBLOCK),
       
   488             ("PROGRAM",        ITEM_PROGRAM),
       
   489             ("TRANSITIONS",    ITEM_TRANSITIONS),
       
   490             ("ACTIONS",        ITEM_ACTIONS),
       
   491             ("CONFIGURATIONS", ITEM_CONFIGURATIONS),
       
   492             ("RESOURCES",      ITEM_RESOURCES),
       
   493             ("PROPERTIES",     ITEM_PROPERTIES)]:
       
   494             self.TreeImageDict[itemtype]=self.TreeImageList.Add(wx.Bitmap(os.path.join(CWD, 'Images', '%s.png'%imgname)))
       
   495         self.ProjectTree.AssignImageList(self.TreeImageList)
   424         
   496         
   425         self.CurrentToolBar = []
   497         self.CurrentToolBar = []
   426         self.CurrentLanguage = ""
   498         self.CurrentLanguage = ""
   427         self.SelectedItem = None
   499         self.SelectedItem = None
   428         self.DrawingMode = FREEDRAWING_MODE
   500         self.DrawingMode = FREEDRAWING_MODE
  1014 
  1086 
  1015     def GenerateTreeBranch(self, root, infos):
  1087     def GenerateTreeBranch(self, root, infos):
  1016         to_delete = []
  1088         to_delete = []
  1017         self.ProjectTree.SetItemText(root, infos["name"])
  1089         self.ProjectTree.SetItemText(root, infos["name"])
  1018         self.ProjectTree.SetPyData(root, infos["type"])
  1090         self.ProjectTree.SetPyData(root, infos["type"])
  1019         if infos["type"] == ITEM_POU and wx.Platform != '__WXMSW__':
  1091         if infos["type"] == ITEM_POU :
  1020             self.ProjectTree.SetItemImage(root, LANGUAGES.index(self.Controler.GetPouBodyType(infos["name"])))
  1092             self.ProjectTree.SetItemImage(root,self.TreeImageDict[self.Controler.GetPouBodyType(infos["name"])])
       
  1093         else:
       
  1094             self.ProjectTree.SetItemImage(root,self.TreeImageDict[infos["type"]])      
       
  1095             
  1021         if wx.VERSION >= (2, 6, 0):
  1096         if wx.VERSION >= (2, 6, 0):
  1022             item, root_cookie = self.ProjectTree.GetFirstChild(root)
  1097             item, root_cookie = self.ProjectTree.GetFirstChild(root)
  1023         else:
  1098         else:
  1024             item, root_cookie = self.ProjectTree.GetFirstChild(root, 0)
  1099             item, root_cookie = self.ProjectTree.GetFirstChild(root, 0)
  1025         for values in infos["values"]:
  1100         for values in infos["values"]:
  1069                 dragSource.DoDragDrop()
  1144                 dragSource.DoDragDrop()
  1070             self.ResetSelectedItem()
  1145             self.ResetSelectedItem()
  1071 
  1146 
  1072     def OnProjectTreeItemBeginEdit(self, event):
  1147     def OnProjectTreeItemBeginEdit(self, event):
  1073         selected = event.GetItem()
  1148         selected = event.GetItem()
  1074         if self.ProjectTree.GetPyData(selected) == ITEM_UNEDITABLE:
  1149         if self.ProjectTree.GetPyData(selected) in ITEMS_UNEDITABLE:
  1075             event.Veto()
  1150             event.Veto()
  1076         else:
  1151         else:
  1077             event.Skip()
  1152             event.Skip()
  1078 
  1153 
  1079     def OnProjectTreeItemEndEdit(self, event):
  1154     def OnProjectTreeItemEndEdit(self, event):
  1283     def OnProjectTreeItemSelected(self, event):
  1358     def OnProjectTreeItemSelected(self, event):
  1284         self.ProjectTreeItemSelect(event.GetItem())
  1359         self.ProjectTreeItemSelect(event.GetItem())
  1285         event.Skip()
  1360         event.Skip()
  1286     
  1361     
  1287     def OnProjectTreeItemChanging(self, event):
  1362     def OnProjectTreeItemChanging(self, event):
  1288         if self.ProjectTree.GetPyData(event.GetItem()) != ITEM_UNEDITABLE and self.SelectedItem is None:
  1363         if self.ProjectTree.GetPyData(event.GetItem()) not in ITEMS_UNEDITABLE and self.SelectedItem is None:
  1289             self.SelectedItem = event.GetItem()
  1364             self.SelectedItem = event.GetItem()
  1290             event.Veto()
  1365             event.Veto()
  1291         else:
  1366         else:
  1292             event.Skip()
  1367             event.Skip()
  1293     
  1368     
  1429             elif type == ITEM_ACTION:
  1504             elif type == ITEM_ACTION:
  1430                 self.Bind(wx.EVT_MENU, self.OnRemoveActionMenu, id=new_id)
  1505                 self.Bind(wx.EVT_MENU, self.OnRemoveActionMenu, id=new_id)
  1431             elif type == ITEM_RESOURCE:
  1506             elif type == ITEM_RESOURCE:
  1432                 self.Bind(wx.EVT_MENU, self.OnRemoveResourceMenu, id=new_id)
  1507                 self.Bind(wx.EVT_MENU, self.OnRemoveResourceMenu, id=new_id)
  1433             self.PopupMenu(menu)
  1508             self.PopupMenu(menu)
  1434         elif type == ITEM_UNEDITABLE:
  1509         elif type in ITEMS_UNEDITABLE:
  1435             if name == "Data Types":
  1510             if name == "Data Types":
  1436                 menu = wx.Menu(title='')
  1511                 menu = wx.Menu(title='')
  1437                 new_id = wx.NewId()
  1512                 new_id = wx.NewId()
  1438                 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text="Add DataType")
  1513                 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text="Add DataType")
  1439                 self.Bind(wx.EVT_MENU, self.OnAddDataTypeMenu, id=new_id)
  1514                 self.Bind(wx.EVT_MENU, self.OnAddDataTypeMenu, id=new_id)