IDEFrame.py
changeset 1129 189b49723f9f
parent 1112 ff3fcad17b47
child 1158 193e6cd9010f
equal deleted inserted replaced
1128:86527a6f06fb 1129:189b49723f9f
   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
   701         self.PageSetupData = wx.PageSetupDialogData(self.PrintData)
   699         self.PageSetupData = wx.PageSetupDialogData(self.PrintData)
   702         self.PageSetupData.SetMarginTopLeft(wx.Point(10, 15))
   700         self.PageSetupData.SetMarginTopLeft(wx.Point(10, 15))
   703         self.PageSetupData.SetMarginBottomRight(wx.Point(10, 20))
   701         self.PageSetupData.SetMarginBottomRight(wx.Point(10, 20))
   704         
   702         
   705         self.SetRefreshFunctions()
   703         self.SetRefreshFunctions()
       
   704         self.SetDeleteFunctions()
   706     
   705     
   707     def __del__(self):
   706     def __del__(self):
   708         self.FindDialog.Destroy()
   707         self.FindDialog.Destroy()
   709     
   708     
   710     def Show(self):
   709     def Show(self):
  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: