diff -r f5891ce3228e -r b9d6f5d7e0f1 PLCOpenEditor.py --- a/PLCOpenEditor.py Fri Mar 15 17:34:24 2019 +0100 +++ b/PLCOpenEditor.py Fri Mar 15 18:27:43 2019 +0100 @@ -62,7 +62,8 @@ # Define PLCOpenEditor FileMenu extra items id [ ID_PLCOPENEDITORFILEMENUGENERATE, -] = [wx.NewId() for _init_coll_FileMenu_Items in range(1)] + ID_PLCOPENEDITORFILEMENUGENERATEAS, +] = [wx.NewId() for _init_coll_FileMenu_Items in range(2)] beremiz_dir = paths.AbsDir(__file__) @@ -86,6 +87,8 @@ kind=wx.ITEM_NORMAL, text=_(u'Save As...') + '\tCTRL+SHIFT+S') AppendMenu(parent, help='', id=ID_PLCOPENEDITORFILEMENUGENERATE, kind=wx.ITEM_NORMAL, text=_(u'Generate Program') + '\tCTRL+G') + AppendMenu(parent, help='', id=ID_PLCOPENEDITORFILEMENUGENERATEAS, + kind=wx.ITEM_NORMAL, text=_(u'Generate Program As...') + '\tCTRL+SHIFT+G') parent.AppendSeparator() AppendMenu(parent, help='', id=wx.ID_PAGE_SETUP, kind=wx.ITEM_NORMAL, text=_(u'Page Setup') + '\tCTRL+ALT+P') @@ -108,6 +111,8 @@ self.Bind(wx.EVT_MENU, self.OnSaveProjectAsMenu, id=wx.ID_SAVEAS) self.Bind(wx.EVT_MENU, self.OnGenerateProgramMenu, id=ID_PLCOPENEDITORFILEMENUGENERATE) + self.Bind(wx.EVT_MENU, self.OnGenerateProgramAsMenu, + id=ID_PLCOPENEDITORFILEMENUGENERATEAS) self.Bind(wx.EVT_MENU, self.OnPageSetupMenu, id=wx.ID_PAGE_SETUP) self.Bind(wx.EVT_MENU, self.OnPreviewMenu, id=wx.ID_PREVIEW) self.Bind(wx.EVT_MENU, self.OnPrintMenu, id=wx.ID_PRINT) @@ -234,6 +239,7 @@ MenuToolBar.EnableTool(wx.ID_SAVEAS, True) self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUGENERATE, True) MenuToolBar.EnableTool(ID_PLCOPENEDITORFILEMENUGENERATE, True) + self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUGENERATEAS, True) else: self.FileMenu.Enable(wx.ID_CLOSE, False) self.FileMenu.Enable(wx.ID_PAGE_SETUP, False) @@ -248,6 +254,7 @@ MenuToolBar.EnableTool(wx.ID_SAVEAS, False) self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUGENERATE, False) MenuToolBar.EnableTool(ID_PLCOPENEDITORFILEMENUGENERATE, False) + self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUGENERATEAS, False) def OnNewProjectMenu(self, event): if self.Controler is not None and not self.CheckSaveBeforeClosing(): @@ -308,27 +315,39 @@ self.SaveProjectAs() def OnGenerateProgramMenu(self, event): + result = self.Controler.GetProgramFilePath() + if not result: + self.GenerateProgramAs() + else: + self.GenerateProgram(result) + + def OnGenerateProgramAsMenu(self, event): + self.GenerateProgramAs() + + def GenerateProgramAs(self): dialog = wx.FileDialog(self, _("Choose a file"), os.getcwd(), os.path.basename(self.Controler.GetProgramFilePath()), _("ST files (*.st)|*.st|All files|*.*"), wx.SAVE | wx.CHANGE_DIR) if dialog.ShowModal() == wx.ID_OK: - filepath = dialog.GetPath() - message_text = "" - header, icon = _("Done"), wx.ICON_INFORMATION - if os.path.isdir(os.path.dirname(filepath)): - _program, errors, warnings = self.Controler.GenerateProgram(filepath) - message_text += "".join([_("warning: %s\n") % warning for warning in warnings]) - if len(errors) > 0: - message_text += "".join([_("error: %s\n") % error for error in errors]) - message_text += _("Can't generate program to file %s!") % filepath - header, icon = _("Error"), wx.ICON_ERROR - else: - message_text += _("Program was successfully generated!") + self.GenerateProgram(dialog.GetPath()) + dialog.Destroy() + + def GenerateProgram(self, filepath=None): + message_text = "" + header, icon = _("Done"), wx.ICON_INFORMATION + if os.path.isdir(os.path.dirname(filepath)): + _program, errors, warnings = self.Controler.GenerateProgram(filepath) + message_text += "".join([_("warning: %s\n") % warning for warning in warnings]) + if len(errors) > 0: + message_text += "".join([_("error: %s\n") % error for error in errors]) + message_text += _("Can't generate program to file %s!") % filepath + header, icon = _("Error"), wx.ICON_ERROR else: - message_text += _("\"%s\" is not a valid folder!") % os.path.dirname(filepath) - header, icon = _("Error"), wx.ICON_ERROR - message = wx.MessageDialog(self, message_text, header, wx.OK | icon) - message.ShowModal() - message.Destroy() - dialog.Destroy() + message_text += _("Program was successfully generated!") + else: + message_text += _("\"%s\" is not a valid folder!") % os.path.dirname(filepath) + header, icon = _("Error"), wx.ICON_ERROR + message = wx.MessageDialog(self, message_text, header, wx.OK | icon) + message.ShowModal() + message.Destroy() def OnPLCOpenEditorMenu(self, event): wx.MessageBox(_("No documentation available.\nComing soon."))