208 return ShortcutKeyFunction |
208 return ShortcutKeyFunction |
209 |
209 |
210 def GetDeleteElementFunction(remove_function, parent_type=None, check_function=None): |
210 def GetDeleteElementFunction(remove_function, parent_type=None, check_function=None): |
211 def DeleteElementFunction(self, selected): |
211 def DeleteElementFunction(self, selected): |
212 name = self.ProjectTree.GetItemText(selected) |
212 name = self.ProjectTree.GetItemText(selected) |
213 if check_function is None or not check_function(self.Controler, name): |
213 if check_function is None or check_function(name): |
214 if parent_type is not None: |
214 if parent_type is not None: |
215 item_infos = self.ProjectTree.GetPyData(selected) |
215 item_infos = self.ProjectTree.GetPyData(selected) |
216 parent_name = item_infos["tagname"].split("::")[1] |
216 parent_name = item_infos["tagname"].split("::")[1] |
217 remove_function(self.Controler, parent_name, name) |
217 remove_function(self.Controler, parent_name, name) |
218 else: |
218 else: |
219 remove_function(self.Controler, name) |
219 remove_function(self.Controler, name) |
220 else: |
|
221 self.ShowErrorMessage(_("\"%s\" is used by one or more POUs. It can't be removed!")%name) |
|
222 return DeleteElementFunction |
220 return DeleteElementFunction |
223 |
221 |
224 if wx.Platform == '__WXMSW__': |
222 if wx.Platform == '__WXMSW__': |
225 TAB_BORDER = 6 |
223 TAB_BORDER = 6 |
226 NOTEBOOK_BORDER = 6 |
224 NOTEBOOK_BORDER = 6 |
1194 elif isinstance(control, wx.TextCtrl): |
1193 elif isinstance(control, wx.TextCtrl): |
1195 control.SetSelection(0, control.GetLastPosition()) |
1194 control.SetSelection(0, control.GetLastPosition()) |
1196 elif isinstance(control, wx.ComboBox): |
1195 elif isinstance(control, wx.ComboBox): |
1197 control.SetMark(0, control.GetLastPosition() + 1) |
1196 control.SetMark(0, control.GetLastPosition() + 1) |
1198 |
1197 |
1199 DeleteFunctions = { |
1198 def SetDeleteFunctions(self): |
1200 ITEM_DATATYPE: GetDeleteElementFunction(PLCControler.ProjectRemoveDataType, check_function=PLCControler.DataTypeIsUsed), |
1199 self.DeleteFunctions = { |
1201 ITEM_POU: GetDeleteElementFunction(PLCControler.ProjectRemovePou, check_function=PLCControler.PouIsUsed), |
1200 ITEM_DATATYPE: GetDeleteElementFunction( |
1202 ITEM_TRANSITION: GetDeleteElementFunction(PLCControler.ProjectRemovePouTransition, ITEM_POU), |
1201 PLCControler.ProjectRemoveDataType, |
1203 ITEM_ACTION: GetDeleteElementFunction(PLCControler.ProjectRemovePouAction, ITEM_POU), |
1202 check_function=self.CheckDataTypeIsUsedBeforeDeletion), |
1204 ITEM_CONFIGURATION: GetDeleteElementFunction(PLCControler.ProjectRemoveConfiguration), |
1203 ITEM_POU: GetDeleteElementFunction( |
1205 ITEM_RESOURCE: GetDeleteElementFunction(PLCControler.ProjectRemoveConfigurationResource, ITEM_CONFIGURATION) |
1204 PLCControler.ProjectRemovePou, |
1206 } |
1205 check_function=self.CheckPouIsUsedBeforeDeletion), |
|
1206 ITEM_TRANSITION: GetDeleteElementFunction( |
|
1207 PLCControler.ProjectRemovePouTransition, ITEM_POU), |
|
1208 ITEM_ACTION: GetDeleteElementFunction( |
|
1209 PLCControler.ProjectRemovePouAction, ITEM_POU), |
|
1210 ITEM_CONFIGURATION: GetDeleteElementFunction( |
|
1211 PLCControler.ProjectRemoveConfiguration), |
|
1212 ITEM_RESOURCE: GetDeleteElementFunction( |
|
1213 PLCControler.ProjectRemoveConfigurationResource, ITEM_CONFIGURATION) |
|
1214 } |
1207 |
1215 |
1208 def OnDeleteMenu(self, event): |
1216 def OnDeleteMenu(self, event): |
1209 window = self.FindFocus() |
1217 window = self.FindFocus() |
1210 if window == self.ProjectTree or window is None: |
1218 if window == self.ProjectTree or window is None: |
1211 selected = self.ProjectTree.GetSelection() |
1219 selected = self.ProjectTree.GetSelection() |
2357 pou_xml = self.GetCopyBuffer() |
2365 pou_xml = self.GetCopyBuffer() |
2358 |
2366 |
2359 result = self.Controler.PastePou(pou_type, pou_xml) |
2367 result = self.Controler.PastePou(pou_type, pou_xml) |
2360 |
2368 |
2361 if not isinstance(result, TupleType): |
2369 if not isinstance(result, TupleType): |
2362 message = wx.MessageDialog(self, result, _("Error"), wx.OK|wx.ICON_ERROR) |
2370 self.ShowErrorMessage(result) |
2363 message.ShowModal() |
|
2364 message.Destroy() |
|
2365 else: |
2371 else: |
2366 self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, PROJECTTREE, LIBRARYTREE) |
2372 self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, PROJECTTREE, LIBRARYTREE) |
2367 self.EditProjectElement(ITEM_POU, result[0]) |
2373 self.EditProjectElement(ITEM_POU, result[0]) |
2368 |
2374 |
2369 #------------------------------------------------------------------------------- |
2375 #------------------------------------------------------------------------------- |
2370 # Remove Project Elements Functions |
2376 # Remove Project Elements Functions |
2371 #------------------------------------------------------------------------------- |
2377 #------------------------------------------------------------------------------- |
2372 |
2378 |
|
2379 def CheckElementIsUsedBeforeDeletion(self, check_function, title, name): |
|
2380 if not check_function(name): |
|
2381 return True |
|
2382 |
|
2383 dialog = wx.MessageDialog(self, |
|
2384 _("\"%s\" is used by one or more POUs. Do you wish to continue?") % name, |
|
2385 title, wx.YES_NO|wx.ICON_QUESTION) |
|
2386 answer = dialog.ShowModal() |
|
2387 dialog.Destroy() |
|
2388 return answer == wx.ID_YES |
|
2389 |
|
2390 def CheckDataTypeIsUsedBeforeDeletion(self, name): |
|
2391 return self.CheckElementIsUsedBeforeDeletion( |
|
2392 self.Controler.DataTypeIsUsed, |
|
2393 _("Remove Datatype"), name) |
|
2394 |
|
2395 def CheckPouIsUsedBeforeDeletion(self, name): |
|
2396 return self.CheckElementIsUsedBeforeDeletion( |
|
2397 self.Controler.PouIsUsed, |
|
2398 _("Remove Pou"), name) |
|
2399 |
2373 def OnRemoveDataTypeMenu(self, event): |
2400 def OnRemoveDataTypeMenu(self, event): |
2374 selected = self.ProjectTree.GetSelection() |
2401 selected = self.ProjectTree.GetSelection() |
2375 if self.ProjectTree.GetPyData(selected)["type"] == ITEM_DATATYPE: |
2402 if self.ProjectTree.GetPyData(selected)["type"] == ITEM_DATATYPE: |
2376 name = self.ProjectTree.GetItemText(selected) |
2403 name = self.ProjectTree.GetItemText(selected) |
2377 if not self.Controler.DataTypeIsUsed(name): |
2404 if self.CheckDataTypeIsUsedBeforeDeletion(name): |
2378 self.Controler.ProjectRemoveDataType(name) |
2405 self.Controler.ProjectRemoveDataType(name) |
2379 tagname = self.Controler.ComputeDataTypeName(name) |
2406 tagname = self.Controler.ComputeDataTypeName(name) |
2380 idx = self.IsOpened(tagname) |
2407 idx = self.IsOpened(tagname) |
2381 if idx is not None: |
2408 if idx is not None: |
2382 self.TabsOpened.DeletePage(idx) |
2409 self.TabsOpened.DeletePage(idx) |
2383 self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, PROJECTTREE) |
2410 self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, PROJECTTREE) |
2384 else: |
2411 |
2385 self.ShowErrorMessage(_("\"%s\" is used by one or more POUs. It can't be removed!")) |
|
2386 |
|
2387 def OnRenamePouMenu(self, event): |
2412 def OnRenamePouMenu(self, event): |
2388 selected = self.ProjectTree.GetSelection() |
2413 selected = self.ProjectTree.GetSelection() |
2389 if self.ProjectTree.GetPyData(selected)["type"] == ITEM_POU: |
2414 if self.ProjectTree.GetPyData(selected)["type"] == ITEM_POU: |
2390 wx.CallAfter(self.ProjectTree.EditLabel, selected) |
2415 wx.CallAfter(self.ProjectTree.EditLabel, selected) |
2391 |
2416 |
2392 def OnRemovePouMenu(self, event): |
2417 def OnRemovePouMenu(self, event): |
2393 selected = self.ProjectTree.GetSelection() |
2418 selected = self.ProjectTree.GetSelection() |
2394 if self.ProjectTree.GetPyData(selected)["type"] == ITEM_POU: |
2419 if self.ProjectTree.GetPyData(selected)["type"] == ITEM_POU: |
2395 name = self.ProjectTree.GetItemText(selected) |
2420 name = self.ProjectTree.GetItemText(selected) |
2396 if not self.Controler.PouIsUsed(name): |
2421 if self.CheckPouIsUsedBeforeDeletion(name): |
2397 self.Controler.ProjectRemovePou(name) |
2422 self.Controler.ProjectRemovePou(name) |
2398 tagname = self.Controler.ComputePouName(name) |
2423 tagname = self.Controler.ComputePouName(name) |
2399 idx = self.IsOpened(tagname) |
2424 idx = self.IsOpened(tagname) |
2400 if idx is not None: |
2425 if idx is not None: |
2401 self.TabsOpened.DeletePage(idx) |
2426 self.TabsOpened.DeletePage(idx) |
2402 self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, PROJECTTREE, POUINSTANCEVARIABLESPANEL, LIBRARYTREE) |
2427 self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, PROJECTTREE, POUINSTANCEVARIABLESPANEL, LIBRARYTREE) |
2403 else: |
|
2404 self.ShowErrorMessage(_("\"%s\" is used by one or more POUs. It can't be removed!")) |
|
2405 |
2428 |
2406 def OnRemoveTransitionMenu(self, event): |
2429 def OnRemoveTransitionMenu(self, event): |
2407 selected = self.ProjectTree.GetSelection() |
2430 selected = self.ProjectTree.GetSelection() |
2408 item_infos = self.ProjectTree.GetPyData(selected) |
2431 item_infos = self.ProjectTree.GetPyData(selected) |
2409 if item_infos["type"] == ITEM_TRANSITION: |
2432 if item_infos["type"] == ITEM_TRANSITION: |