def OnReloadWithEnc(self, evt): """Reload the current file with a specified encoding @param evt: wx.MenuEvent """ if evt.GetId() == ID_RELOAD_ENC: ctrl = self.nb.GetCurrentCtrl() doc = ctrl.GetDocument() cenc = doc.GetEncoding() dlg = encdlg.EncodingDialog( self.GetNotebook(), msg=_("Select an encoding to reload the file with"), title=_("Reload with Encoding"), default=cenc) bmp = wx.ArtProvider.GetBitmap(str(ID_DOCPROP), wx.ART_OTHER) if bmp.IsOk(): dlg.SetBitmap(bmp) dlg.CenterOnParent() if dlg.ShowModal() == wx.ID_OK: nenc = dlg.GetEncoding() doc.SetEncoding(nenc) success = ctrl.ReloadFile()[0] if not success: msg = _("Failed to reload the file with: %(encoding)s" ) % dict(encoding=nenc) wx.MessageBox(msg, style=wx.OK | wx.ICON_ERROR) doc.SetEncoding(cenc) ctrl.ReloadFile() dlg.Destroy() else: evt.Skip()
def _HandleEncodingError(self, control): """Handle trying to reload the file the file with a different encoding Until it suceeds or gives up. @param control: stc @return: bool """ # Loop while the load fails prompting to try a new encoding tried = None fname = control.GetFileName().strip(os.sep) fname = fname.split(os.sep)[-1] while True: doc = control.GetDocument() doc.ClearLastError() if tried is None: enc = doc.GetEncoding() if enc is None: enc = ed_txt.DEFAULT_ENCODING else: enc = tried msg = _( "The correct encoding of '%s' could not be determined.\n\n" "Choose an encoding and select Ok to open the file with the chosen encoding.\n" "Click Cancel to abort opening the file") % fname # On some systems it seems that default encoding ends up being # None so default to utf-8 for choices. if enc is None: enc = 'utf_8' dlg = encdlg.EncodingDialog(self, msg=msg, title=_("Choose an Encoding"), default=enc) bmp = wx.ArtProvider.GetBitmap(str(ed_glob.ID_DOCPROP), wx.ART_OTHER) if bmp.IsOk(): dlg.SetBitmap(bmp) dlg.CenterOnParent() result = dlg.ShowModal() enc = dlg.GetEncoding() dlg.Destroy() # Don't want to open it in another encoding if result == wx.ID_CANCEL: return False else: control.SetEncoding(enc) tried = enc ok = control.LoadFile(control.GetFileName()) if ok: return True else: # Artifically add a short pause, because if its not there # the dialog will be shown again so fast it wont seem # like reloading the file was even tried. wx.Sleep(1)