src/eric7/HexEdit/HexEditMainWindow.py

branch
eric7
changeset 9221
bf71ee032bb4
parent 9209
b99e7fd55fd3
child 9413
80c06d472826
diff -r e9e7eca7efee -r bf71ee032bb4 src/eric7/HexEdit/HexEditMainWindow.py
--- a/src/eric7/HexEdit/HexEditMainWindow.py	Wed Jul 13 11:16:20 2022 +0200
+++ b/src/eric7/HexEdit/HexEditMainWindow.py	Wed Jul 13 14:55:47 2022 +0200
@@ -11,12 +11,16 @@
 import contextlib
 import pathlib
 
-from PyQt6.QtCore import (
-    pyqtSignal, pyqtSlot, QSize, QCoreApplication, QLocale
-)
+from PyQt6.QtCore import pyqtSignal, pyqtSlot, QSize, QCoreApplication, QLocale
 from PyQt6.QtGui import QKeySequence, QAction
 from PyQt6.QtWidgets import (
-    QWhatsThis, QLabel, QWidget, QVBoxLayout, QDialog, QFrame, QMenu
+    QWhatsThis,
+    QLabel,
+    QWidget,
+    QVBoxLayout,
+    QDialog,
+    QFrame,
+    QMenu,
 )
 
 from EricGui.EricAction import EricAction
@@ -40,19 +44,20 @@
 class HexEditMainWindow(EricMainWindow):
     """
     Class implementing the web browser main window.
-    
+
     @signal editorClosed() emitted after the window was requested to close down
     """
+
     editorClosed = pyqtSignal()
-    
+
     windows = []
-    
+
     maxMenuFilePathLen = 75
-    
+
     def __init__(self, fileName="", parent=None, fromEric=False, project=None):
         """
         Constructor
-        
+
         @param fileName name of a file to load on startup (string)
         @param parent parent widget of this window (QWidget)
         @param fromEric flag indicating whether it was called from within
@@ -61,7 +66,7 @@
         """
         super().__init__(parent)
         self.setObjectName("eric7_hex_editor")
-        
+
         self.__srHistory = {
             "search": [],
             # list of recent searches (tuple of format type index and
@@ -70,19 +75,16 @@
             # list of recent replaces (tuple of format type index and
             # replace term
         }
-        
+
         self.__fromEric = fromEric
         self.setWindowIcon(UI.PixmapCache.getIcon("hexEditor"))
-        
+
         if not self.__fromEric:
-            self.setStyle(Preferences.getUI("Style"),
-                          Preferences.getUI("StyleSheet"))
-        
+            self.setStyle(Preferences.getUI("Style"), Preferences.getUI("StyleSheet"))
+
         self.__editor = HexEditWidget()
-        self.__searchWidget = HexEditSearchReplaceWidget(
-            self.__editor, self, False)
-        self.__replaceWidget = HexEditSearchReplaceWidget(
-            self.__editor, self, True)
+        self.__searchWidget = HexEditSearchReplaceWidget(self.__editor, self, False)
+        self.__replaceWidget = HexEditSearchReplaceWidget(self.__editor, self, True)
         self.__gotoWidget = HexEditGotoWidget(self.__editor)
         cw = QWidget()
         layout = QVBoxLayout(cw)
@@ -97,24 +99,24 @@
         self.__replaceWidget.hide()
         self.__gotoWidget.hide()
         self.setCentralWidget(cw)
-        
+
         g = Preferences.getGeometry("HexEditorGeometry")
         if g.isEmpty():
             s = QSize(600, 500)
             self.resize(s)
         else:
             self.restoreGeometry(g)
-        
+
         self.__initActions()
         self.__initMenus()
         self.__initToolbars()
         self.__createStatusBar()
-        
+
         self.__class__.windows.append(self)
-        
+
         state = Preferences.getHexEditor("HexEditorState")
         self.restoreState(state)
-        
+
         self.__editor.currentAddressChanged.connect(self.__showAddress)
         self.__editor.selectionAvailable.connect(self.__showSelectionInfo)
         self.__editor.currentSizeChanged.connect(self.__showSize)
@@ -122,547 +124,667 @@
         self.__editor.overwriteModeChanged.connect(self.__showEditMode)
         self.__editor.readOnlyChanged.connect(self.__showReadOnlyMode)
         self.__editor.readOnlyChanged.connect(self.__checkActions)
-        
+
         self.preferencesChanged()
-        self.__editor.setOverwriteMode(
-            Preferences.getHexEditor("OpenInOverwriteMode"))
-        
+        self.__editor.setOverwriteMode(Preferences.getHexEditor("OpenInOverwriteMode"))
+
         self.__project = project
         self.__lastOpenPath = ""
         self.__lastSavePath = ""
-        
+
         self.__recent = []
         self.__loadRecent()
-        
+
         self.__setCurrentFile("")
         if fileName:
             self.__loadHexFile(fileName)
-        
+
         self.__checkActions()
-    
+
     def __initActions(self):
         """
         Private method to define the user interface actions.
         """
         # list of all actions
         self.__actions = []
-        
+
         self.__initFileActions()
         self.__initEditActions()
         self.__initHelpActions()
         if not self.__fromEric:
             self.__initConfigActions()
-        
+
     def __initFileActions(self):
         """
         Private method to define the file related user interface actions.
         """
         self.newWindowAct = EricAction(
-            self.tr('New Window'),
+            self.tr("New Window"),
             UI.PixmapCache.getIcon("newWindow"),
-            self.tr('New &Window'),
-            0, 0, self, 'hexEditor_file_new_window')
-        self.newWindowAct.setStatusTip(self.tr(
-            'Open a binary file for editing in a new hex editor window'))
-        self.newWindowAct.setWhatsThis(self.tr(
-            """<b>New Window</b>"""
-            """<p>This opens a binary file for editing in a new hex editor"""
-            """ window.</p>"""
-        ))
+            self.tr("New &Window"),
+            0,
+            0,
+            self,
+            "hexEditor_file_new_window",
+        )
+        self.newWindowAct.setStatusTip(
+            self.tr("Open a binary file for editing in a new hex editor window")
+        )
+        self.newWindowAct.setWhatsThis(
+            self.tr(
+                """<b>New Window</b>"""
+                """<p>This opens a binary file for editing in a new hex editor"""
+                """ window.</p>"""
+            )
+        )
         self.newWindowAct.triggered.connect(self.__openHexFileNewWindow)
         self.__actions.append(self.newWindowAct)
-        
+
         # correct texts will be set later
         self.openAct = EricAction(
-            self.tr('Open'),
+            self.tr("Open"),
             UI.PixmapCache.getIcon("open"),
-            self.tr('&Open...'),
+            self.tr("&Open..."),
             QKeySequence(self.tr("Ctrl+O", "File|Open")),
-            0, self, 'hexEditor_file_open')
+            0,
+            self,
+            "hexEditor_file_open",
+        )
         self.openAct.triggered.connect(self.__openHexFile)
         self.__actions.append(self.openAct)
-        
+
         # correct texts will be set later
         self.openReadOnlyAct = EricAction(
-            "", "",
-            0, 0, self, 'hexEditor_file_open_read_only')
+            "", "", 0, 0, self, "hexEditor_file_open_read_only"
+        )
         self.openReadOnlyAct.triggered.connect(self.__openHexFileReadOnly)
         self.__actions.append(self.openReadOnlyAct)
-        
+
         self.saveAct = EricAction(
-            self.tr('Save'),
+            self.tr("Save"),
             UI.PixmapCache.getIcon("fileSave"),
-            self.tr('&Save'),
+            self.tr("&Save"),
             QKeySequence(self.tr("Ctrl+S", "File|Save")),
-            0, self, 'hexEditor_file_save')
-        self.saveAct.setStatusTip(self.tr('Save the current binary file'))
-        self.saveAct.setWhatsThis(self.tr(
-            """<b>Save File</b>"""
-            """<p>Save the contents of the hex editor window.</p>"""
-        ))
+            0,
+            self,
+            "hexEditor_file_save",
+        )
+        self.saveAct.setStatusTip(self.tr("Save the current binary file"))
+        self.saveAct.setWhatsThis(
+            self.tr(
+                """<b>Save File</b>"""
+                """<p>Save the contents of the hex editor window.</p>"""
+            )
+        )
         self.saveAct.triggered.connect(self.__saveHexFile)
         self.__actions.append(self.saveAct)
-        
+
         self.saveAsAct = EricAction(
-            self.tr('Save As'),
+            self.tr("Save As"),
             UI.PixmapCache.getIcon("fileSaveAs"),
-            self.tr('Save &As...'),
+            self.tr("Save &As..."),
             QKeySequence(self.tr("Shift+Ctrl+S", "File|Save As")),
-            0, self, 'hexEditor_file_save_as')
+            0,
+            self,
+            "hexEditor_file_save_as",
+        )
         self.saveAsAct.setStatusTip(
-            self.tr('Save the current binary data to a new file'))
-        self.saveAsAct.setWhatsThis(self.tr(
-            """<b>Save As...</b>"""
-            """<p>Saves the current binary data to a new file.</p>"""
-        ))
+            self.tr("Save the current binary data to a new file")
+        )
+        self.saveAsAct.setWhatsThis(
+            self.tr(
+                """<b>Save As...</b>"""
+                """<p>Saves the current binary data to a new file.</p>"""
+            )
+        )
         self.saveAsAct.triggered.connect(self.__saveHexFileAs)
         self.__actions.append(self.saveAsAct)
-        
+
         self.saveReadableAct = EricAction(
-            self.tr('Save As Readable'),
-            self.tr('Save As &Readable...'),
-            0, 0, self, 'hexEditor_file_save_readable')
+            self.tr("Save As Readable"),
+            self.tr("Save As &Readable..."),
+            0,
+            0,
+            self,
+            "hexEditor_file_save_readable",
+        )
         self.saveReadableAct.setStatusTip(
-            self.tr('Save the current binary data to a new file in a readable'
-                    ' format'))
-        self.saveReadableAct.setWhatsThis(self.tr(
-            """<b>Save As Readable...</b>"""
-            """<p>Saves the current binary data to a new file in a readable"""
-            """ format.</p>"""
-        ))
+            self.tr(
+                "Save the current binary data to a new file in a readable" " format"
+            )
+        )
+        self.saveReadableAct.setWhatsThis(
+            self.tr(
+                """<b>Save As Readable...</b>"""
+                """<p>Saves the current binary data to a new file in a readable"""
+                """ format.</p>"""
+            )
+        )
         self.saveReadableAct.triggered.connect(self.__saveHexFileReadable)
         self.__actions.append(self.saveReadableAct)
-        
+
         self.closeAct = EricAction(
-            self.tr('Close'),
+            self.tr("Close"),
             UI.PixmapCache.getIcon("close"),
-            self.tr('&Close'),
+            self.tr("&Close"),
             QKeySequence(self.tr("Ctrl+W", "File|Close")),
-            0, self, 'hexEditor_file_close')
-        self.closeAct.setStatusTip(self.tr(
-            'Close the current hex editor window'))
-        self.closeAct.setWhatsThis(self.tr(
-            """<b>Close</b>"""
-            """<p>Closes the current hex editor window.</p>"""
-        ))
+            0,
+            self,
+            "hexEditor_file_close",
+        )
+        self.closeAct.setStatusTip(self.tr("Close the current hex editor window"))
+        self.closeAct.setWhatsThis(
+            self.tr(
+                """<b>Close</b>""" """<p>Closes the current hex editor window.</p>"""
+            )
+        )
         self.closeAct.triggered.connect(self.close)
         self.__actions.append(self.closeAct)
-        
+
         self.closeAllAct = EricAction(
-            self.tr('Close All'),
-            self.tr('Close &All'),
-            0, 0, self, 'hexEditor_file_close_all')
-        self.closeAllAct.setStatusTip(self.tr(
-            'Close all hex editor windows'))
-        self.closeAllAct.setWhatsThis(self.tr(
-            """<b>Close All</b>"""
-            """<p>Closes all hex editor windows.</p>"""
-        ))
+            self.tr("Close All"),
+            self.tr("Close &All"),
+            0,
+            0,
+            self,
+            "hexEditor_file_close_all",
+        )
+        self.closeAllAct.setStatusTip(self.tr("Close all hex editor windows"))
+        self.closeAllAct.setWhatsThis(
+            self.tr("""<b>Close All</b>""" """<p>Closes all hex editor windows.</p>""")
+        )
         self.closeAllAct.triggered.connect(self.__closeAll)
         self.__actions.append(self.closeAllAct)
-        
+
         self.closeOthersAct = EricAction(
-            self.tr('Close Others'),
-            self.tr('Close Others'),
-            0, 0, self, 'hexEditor_file_close_others')
-        self.closeOthersAct.setStatusTip(self.tr(
-            'Close all other hex editor windows'))
-        self.closeOthersAct.setWhatsThis(self.tr(
-            """<b>Close Others</b>"""
-            """<p>Closes all other hex editor windows.</p>"""
-        ))
+            self.tr("Close Others"),
+            self.tr("Close Others"),
+            0,
+            0,
+            self,
+            "hexEditor_file_close_others",
+        )
+        self.closeOthersAct.setStatusTip(self.tr("Close all other hex editor windows"))
+        self.closeOthersAct.setWhatsThis(
+            self.tr(
+                """<b>Close Others</b>"""
+                """<p>Closes all other hex editor windows.</p>"""
+            )
+        )
         self.closeOthersAct.triggered.connect(self.__closeOthers)
         self.__actions.append(self.closeOthersAct)
-        
+
         self.exitAct = EricAction(
-            self.tr('Quit'),
+            self.tr("Quit"),
             UI.PixmapCache.getIcon("exit"),
-            self.tr('&Quit'),
+            self.tr("&Quit"),
             QKeySequence(self.tr("Ctrl+Q", "File|Quit")),
-            0, self, 'hexEditor_file_quit')
-        self.exitAct.setStatusTip(self.tr('Quit the hex editor'))
-        self.exitAct.setWhatsThis(self.tr(
-            """<b>Quit</b>"""
-            """<p>Quit the hex editor.</p>"""
-        ))
+            0,
+            self,
+            "hexEditor_file_quit",
+        )
+        self.exitAct.setStatusTip(self.tr("Quit the hex editor"))
+        self.exitAct.setWhatsThis(
+            self.tr("""<b>Quit</b>""" """<p>Quit the hex editor.</p>""")
+        )
         if not self.__fromEric:
             self.exitAct.triggered.connect(self.__closeAll)
         self.__actions.append(self.exitAct)
-    
+
     def __initEditActions(self):
         """
         Private method to create the Edit actions.
         """
         self.undoAct = EricAction(
-            self.tr('Undo'),
+            self.tr("Undo"),
             UI.PixmapCache.getIcon("editUndo"),
-            self.tr('&Undo'),
+            self.tr("&Undo"),
             QKeySequence(self.tr("Ctrl+Z", "Edit|Undo")),
             QKeySequence(self.tr("Alt+Backspace", "Edit|Undo")),
-            self, 'hexEditor_edit_undo')
-        self.undoAct.setStatusTip(self.tr('Undo the last change'))
-        self.undoAct.setWhatsThis(self.tr(
-            """<b>Undo</b>"""
-            """<p>Undo the last change done.</p>"""
-        ))
+            self,
+            "hexEditor_edit_undo",
+        )
+        self.undoAct.setStatusTip(self.tr("Undo the last change"))
+        self.undoAct.setWhatsThis(
+            self.tr("""<b>Undo</b>""" """<p>Undo the last change done.</p>""")
+        )
         self.undoAct.triggered.connect(self.__editor.undo)
         self.__actions.append(self.undoAct)
-        
+
         self.redoAct = EricAction(
-            self.tr('Redo'),
+            self.tr("Redo"),
             UI.PixmapCache.getIcon("editRedo"),
-            self.tr('&Redo'),
+            self.tr("&Redo"),
             QKeySequence(self.tr("Ctrl+Shift+Z", "Edit|Redo")),
-            0, self, 'hexEditor_edit_redo')
-        self.redoAct.setStatusTip(self.tr('Redo the last change'))
-        self.redoAct.setWhatsThis(self.tr(
-            """<b>Redo</b>"""
-            """<p>Redo the last change done.</p>"""
-        ))
+            0,
+            self,
+            "hexEditor_edit_redo",
+        )
+        self.redoAct.setStatusTip(self.tr("Redo the last change"))
+        self.redoAct.setWhatsThis(
+            self.tr("""<b>Redo</b>""" """<p>Redo the last change done.</p>""")
+        )
         self.redoAct.triggered.connect(self.__editor.redo)
         self.__actions.append(self.redoAct)
-        
+
         self.revertAct = EricAction(
-            self.tr('Revert to last saved state'),
-            self.tr('Re&vert to last saved state'),
+            self.tr("Revert to last saved state"),
+            self.tr("Re&vert to last saved state"),
             QKeySequence(self.tr("Ctrl+Y", "Edit|Revert")),
             0,
-            self, 'hexEditor_edit_revert')
-        self.revertAct.setStatusTip(self.tr('Revert to last saved state'))
-        self.revertAct.setWhatsThis(self.tr(
-            """<b>Revert to last saved state</b>"""
-            """<p>Undo all changes up to the last saved state of the"""
-            """ editor.</p>"""
-        ))
+            self,
+            "hexEditor_edit_revert",
+        )
+        self.revertAct.setStatusTip(self.tr("Revert to last saved state"))
+        self.revertAct.setWhatsThis(
+            self.tr(
+                """<b>Revert to last saved state</b>"""
+                """<p>Undo all changes up to the last saved state of the"""
+                """ editor.</p>"""
+            )
+        )
         self.revertAct.triggered.connect(self.__editor.revertToUnmodified)
         self.__actions.append(self.revertAct)
-        
+
         self.cutAct = EricAction(
-            self.tr('Cut'),
+            self.tr("Cut"),
             UI.PixmapCache.getIcon("editCut"),
-            self.tr('Cu&t'),
+            self.tr("Cu&t"),
             QKeySequence(self.tr("Ctrl+X", "Edit|Cut")),
             QKeySequence(self.tr("Shift+Del", "Edit|Cut")),
-            self, 'hexEditor_edit_cut')
-        self.cutAct.setStatusTip(self.tr('Cut the selection'))
-        self.cutAct.setWhatsThis(self.tr(
-            """<b>Cut</b>"""
-            """<p>Cut the selected binary area to the clipboard.</p>"""
-        ))
+            self,
+            "hexEditor_edit_cut",
+        )
+        self.cutAct.setStatusTip(self.tr("Cut the selection"))
+        self.cutAct.setWhatsThis(
+            self.tr(
+                """<b>Cut</b>"""
+                """<p>Cut the selected binary area to the clipboard.</p>"""
+            )
+        )
         self.cutAct.triggered.connect(self.__editor.cut)
         self.__actions.append(self.cutAct)
-        
+
         self.copyAct = EricAction(
-            self.tr('Copy'),
+            self.tr("Copy"),
             UI.PixmapCache.getIcon("editCopy"),
-            self.tr('&Copy'),
+            self.tr("&Copy"),
             QKeySequence(self.tr("Ctrl+C", "Edit|Copy")),
             QKeySequence(self.tr("Ctrl+Ins", "Edit|Copy")),
-            self, 'hexEditor_edit_copy')
-        self.copyAct.setStatusTip(self.tr('Copy the selection'))
-        self.copyAct.setWhatsThis(self.tr(
-            """<b>Copy</b>"""
-            """<p>Copy the selected binary area to the clipboard.</p>"""
-        ))
+            self,
+            "hexEditor_edit_copy",
+        )
+        self.copyAct.setStatusTip(self.tr("Copy the selection"))
+        self.copyAct.setWhatsThis(
+            self.tr(
+                """<b>Copy</b>"""
+                """<p>Copy the selected binary area to the clipboard.</p>"""
+            )
+        )
         self.copyAct.triggered.connect(self.__editor.copy)
         self.__actions.append(self.copyAct)
-        
+
         self.pasteAct = EricAction(
-            self.tr('Paste'),
+            self.tr("Paste"),
             UI.PixmapCache.getIcon("editPaste"),
-            self.tr('&Paste'),
+            self.tr("&Paste"),
             QKeySequence(self.tr("Ctrl+V", "Edit|Paste")),
             QKeySequence(self.tr("Shift+Ins", "Edit|Paste")),
-            self, 'hexEditor_edit_paste')
-        self.pasteAct.setStatusTip(self.tr('Paste the clipboard contents'))
-        self.pasteAct.setWhatsThis(self.tr(
-            """<b>Paste</b>"""
-            """<p>Paste the clipboard contents.</p>"""
-        ))
+            self,
+            "hexEditor_edit_paste",
+        )
+        self.pasteAct.setStatusTip(self.tr("Paste the clipboard contents"))
+        self.pasteAct.setWhatsThis(
+            self.tr("""<b>Paste</b>""" """<p>Paste the clipboard contents.</p>""")
+        )
         self.pasteAct.triggered.connect(self.__editor.paste)
         self.__actions.append(self.pasteAct)
-        
+
         self.selectAllAct = EricAction(
-            self.tr('Select All'),
+            self.tr("Select All"),
             UI.PixmapCache.getIcon("editSelectAll"),
-            self.tr('&Select All'),
+            self.tr("&Select All"),
             QKeySequence(self.tr("Ctrl+A", "Edit|Select All")),
             0,
-            self, 'hexEditor_edit_select_all')
-        self.selectAllAct.setStatusTip(self.tr(
-            'Select the complete binary data'))
-        self.selectAllAct.setWhatsThis(self.tr(
-            """<b>Select All</b>"""
-            """<p>Selects the complete binary data.</p>"""
-        ))
+            self,
+            "hexEditor_edit_select_all",
+        )
+        self.selectAllAct.setStatusTip(self.tr("Select the complete binary data"))
+        self.selectAllAct.setWhatsThis(
+            self.tr(
+                """<b>Select All</b>""" """<p>Selects the complete binary data.</p>"""
+            )
+        )
         self.selectAllAct.triggered.connect(self.__editor.selectAll)
         self.__actions.append(self.selectAllAct)
-        
+
         self.deselectAllAct = EricAction(
-            self.tr('Deselect all'),
-            self.tr('&Deselect all'),
+            self.tr("Deselect all"),
+            self.tr("&Deselect all"),
             QKeySequence(self.tr("Alt+Ctrl+A", "Edit|Deselect all")),
             0,
-            self, 'hexEditor_edit_deselect_all')
-        self.deselectAllAct.setStatusTip(self.tr('Deselect all binary data'))
-        self.deselectAllAct.setWhatsThis(self.tr(
-            """<b>Deselect All</b>"""
-            """<p>Deselect all all binary data.</p>"""
-        ))
+            self,
+            "hexEditor_edit_deselect_all",
+        )
+        self.deselectAllAct.setStatusTip(self.tr("Deselect all binary data"))
+        self.deselectAllAct.setWhatsThis(
+            self.tr(
+                """<b>Deselect All</b>""" """<p>Deselect all all binary data.</p>"""
+            )
+        )
         self.deselectAllAct.triggered.connect(self.__editor.deselectAll)
         self.__actions.append(self.deselectAllAct)
-        
+
         self.saveSelectionReadableAct = EricAction(
-            self.tr('Save Selection Readable'),
-            self.tr('Save Selection Readable...'),
-            0, 0, self, 'hexEditor_edit_selection_save_readable')
+            self.tr("Save Selection Readable"),
+            self.tr("Save Selection Readable..."),
+            0,
+            0,
+            self,
+            "hexEditor_edit_selection_save_readable",
+        )
         self.saveSelectionReadableAct.setStatusTip(
-            self.tr('Save the binary data of the current selection to a file'
-                    ' in a readable format'))
-        self.saveSelectionReadableAct.setWhatsThis(self.tr(
-            """<b>Save Selection Readable...</b>"""
-            """<p>Saves the binary data of the current selection to a file"""
-            """ in a readable format.</p>"""
-        ))
-        self.saveSelectionReadableAct.triggered.connect(
-            self.__saveSelectionReadable)
+            self.tr(
+                "Save the binary data of the current selection to a file"
+                " in a readable format"
+            )
+        )
+        self.saveSelectionReadableAct.setWhatsThis(
+            self.tr(
+                """<b>Save Selection Readable...</b>"""
+                """<p>Saves the binary data of the current selection to a file"""
+                """ in a readable format.</p>"""
+            )
+        )
+        self.saveSelectionReadableAct.triggered.connect(self.__saveSelectionReadable)
         self.__actions.append(self.saveSelectionReadableAct)
-        
+
         self.readonlyAct = EricAction(
-            self.tr('Set Read Only'),
-            self.tr('Set Read Only'),
-            0, 0, self, 'hexEditor_edit_readonly', True)
-        self.readonlyAct.setStatusTip(self.tr(
-            'Change the edit mode to read only'))
-        self.readonlyAct.setWhatsThis(self.tr(
-            """<b>Set Read Only</b>"""
-            """<p>This changes the edit mode to read only (i.e. to view"""
-            """ mode).</p>"""
-        ))
+            self.tr("Set Read Only"),
+            self.tr("Set Read Only"),
+            0,
+            0,
+            self,
+            "hexEditor_edit_readonly",
+            True,
+        )
+        self.readonlyAct.setStatusTip(self.tr("Change the edit mode to read only"))
+        self.readonlyAct.setWhatsThis(
+            self.tr(
+                """<b>Set Read Only</b>"""
+                """<p>This changes the edit mode to read only (i.e. to view"""
+                """ mode).</p>"""
+            )
+        )
         self.readonlyAct.setChecked(False)
         self.readonlyAct.toggled[bool].connect(self.__editor.setReadOnly)
         self.__editor.readOnlyChanged.connect(self.readonlyAct.setChecked)
         self.__actions.append(self.readonlyAct)
-        
+
         self.searchAct = EricAction(
-            self.tr('Search'),
+            self.tr("Search"),
             UI.PixmapCache.getIcon("find"),
-            self.tr('&Search...'),
+            self.tr("&Search..."),
             QKeySequence(self.tr("Ctrl+F", "Search|Search")),
             0,
-            self, 'hexEditor_edit_search')
-        self.searchAct.setStatusTip(self.tr('Search for data'))
-        self.searchAct.setWhatsThis(self.tr(
-            """<b>Search</b>"""
-            """<p>Search for some data. A dialog is shown to enter the"""
-            """ data to search for in various formats.</p>"""
-        ))
+            self,
+            "hexEditor_edit_search",
+        )
+        self.searchAct.setStatusTip(self.tr("Search for data"))
+        self.searchAct.setWhatsThis(
+            self.tr(
+                """<b>Search</b>"""
+                """<p>Search for some data. A dialog is shown to enter the"""
+                """ data to search for in various formats.</p>"""
+            )
+        )
         self.searchAct.triggered.connect(self.__search)
         self.__actions.append(self.searchAct)
-        
+
         self.searchNextAct = EricAction(
-            self.tr('Search next'),
+            self.tr("Search next"),
             UI.PixmapCache.getIcon("findNext"),
-            self.tr('Search &next'),
+            self.tr("Search &next"),
             QKeySequence(self.tr("F3", "Search|Search next")),
             0,
-            self, 'hexEditor_edit_search_next')
-        self.searchNextAct.setStatusTip(self.tr(
-            'Search next occurrence'))
-        self.searchNextAct.setWhatsThis(self.tr(
-            """<b>Search next</b>"""
-            """<p>Search the next occurrence of some data. The previously"""
-            """ entered search data are reused.</p>"""
-        ))
+            self,
+            "hexEditor_edit_search_next",
+        )
+        self.searchNextAct.setStatusTip(self.tr("Search next occurrence"))
+        self.searchNextAct.setWhatsThis(
+            self.tr(
+                """<b>Search next</b>"""
+                """<p>Search the next occurrence of some data. The previously"""
+                """ entered search data are reused.</p>"""
+            )
+        )
         self.searchNextAct.triggered.connect(self.__searchWidget.findPrevNext)
         self.__actions.append(self.searchNextAct)
-        
+
         self.searchPrevAct = EricAction(
-            self.tr('Search previous'),
+            self.tr("Search previous"),
             UI.PixmapCache.getIcon("findPrev"),
-            self.tr('Search &previous'),
+            self.tr("Search &previous"),
             QKeySequence(self.tr("Shift+F3", "Search|Search previous")),
             0,
-            self, 'hexEditor_edit_search_previous')
-        self.searchPrevAct.setStatusTip(self.tr(
-            'Search previous occurrence'))
-        self.searchPrevAct.setWhatsThis(self.tr(
-            """<b>Search previous</b>"""
-            """<p>Search the previous occurrence of some data. The"""
-            """ previously entered search data are reused.</p>"""
-        ))
+            self,
+            "hexEditor_edit_search_previous",
+        )
+        self.searchPrevAct.setStatusTip(self.tr("Search previous occurrence"))
+        self.searchPrevAct.setWhatsThis(
+            self.tr(
+                """<b>Search previous</b>"""
+                """<p>Search the previous occurrence of some data. The"""
+                """ previously entered search data are reused.</p>"""
+            )
+        )
         self.searchPrevAct.triggered.connect(
-            lambda: self.__searchWidget.findPrevNext(True))
+            lambda: self.__searchWidget.findPrevNext(True)
+        )
         self.__actions.append(self.searchPrevAct)
-        
+
         self.replaceAct = EricAction(
-            self.tr('Replace'),
-            self.tr('&Replace...'),
+            self.tr("Replace"),
+            self.tr("&Replace..."),
             QKeySequence(self.tr("Ctrl+R", "Search|Replace")),
             0,
-            self, 'hexEditor_edit_search_replace')
-        self.replaceAct.setStatusTip(self.tr('Replace data'))
-        self.replaceAct.setWhatsThis(self.tr(
-            """<b>Replace</b>"""
-            """<p>Search for some data and replace it."""
-            """ A dialog is shown to enter the data to search for and the"""
-            """ replacement data in various formats.</p>"""
-        ))
+            self,
+            "hexEditor_edit_search_replace",
+        )
+        self.replaceAct.setStatusTip(self.tr("Replace data"))
+        self.replaceAct.setWhatsThis(
+            self.tr(
+                """<b>Replace</b>"""
+                """<p>Search for some data and replace it."""
+                """ A dialog is shown to enter the data to search for and the"""
+                """ replacement data in various formats.</p>"""
+            )
+        )
         self.replaceAct.triggered.connect(self.__replace)
         self.__actions.append(self.replaceAct)
-        
+
         self.gotoAct = EricAction(
-            self.tr('Goto Offset'),
+            self.tr("Goto Offset"),
             UI.PixmapCache.getIcon("goto"),
-            self.tr('&Goto Offset...'),
-            QKeySequence(QCoreApplication.translate(
-                'ViewManager', "Ctrl+G", "Search|Goto Offset")),
+            self.tr("&Goto Offset..."),
+            QKeySequence(
+                QCoreApplication.translate(
+                    "ViewManager", "Ctrl+G", "Search|Goto Offset"
+                )
+            ),
             0,
-            self, 'hexEditor_edit_goto')
-        self.gotoAct.setStatusTip(self.tr('Goto Offset'))
-        self.gotoAct.setWhatsThis(self.tr(
-            """<b>Goto Offset</b>"""
-            """<p>Go to a specific address. A dialog is shown to enter"""
-            """ the movement data.</p>"""
-        ))
+            self,
+            "hexEditor_edit_goto",
+        )
+        self.gotoAct.setStatusTip(self.tr("Goto Offset"))
+        self.gotoAct.setWhatsThis(
+            self.tr(
+                """<b>Goto Offset</b>"""
+                """<p>Go to a specific address. A dialog is shown to enter"""
+                """ the movement data.</p>"""
+            )
+        )
         self.gotoAct.triggered.connect(self.__goto)
         self.__actions.append(self.gotoAct)
-        
+
         self.redoAct.setEnabled(False)
         self.__editor.canRedoChanged.connect(self.redoAct.setEnabled)
-        
+
         self.undoAct.setEnabled(False)
         self.__editor.canUndoChanged.connect(self.undoAct.setEnabled)
-        
+
         self.revertAct.setEnabled(False)
         self.__editor.dataChanged.connect(self.revertAct.setEnabled)
-        
+
         self.cutAct.setEnabled(False)
         self.copyAct.setEnabled(False)
         self.saveSelectionReadableAct.setEnabled(False)
         self.__editor.selectionAvailable.connect(self.__checkActions)
         self.__editor.selectionAvailable.connect(self.copyAct.setEnabled)
         self.__editor.selectionAvailable.connect(
-            self.saveSelectionReadableAct.setEnabled)
-    
+            self.saveSelectionReadableAct.setEnabled
+        )
+
     def __initHelpActions(self):
         """
         Private method to create the Help actions.
         """
         self.aboutAct = EricAction(
-            self.tr('About'),
-            self.tr('&About'),
-            0, 0, self, 'hexEditor_help_about')
-        self.aboutAct.setStatusTip(self.tr(
-            'Display information about this software'))
-        self.aboutAct.setWhatsThis(self.tr(
-            """<b>About</b>"""
-            """<p>Display some information about this software.</p>"""))
+            self.tr("About"), self.tr("&About"), 0, 0, self, "hexEditor_help_about"
+        )
+        self.aboutAct.setStatusTip(self.tr("Display information about this software"))
+        self.aboutAct.setWhatsThis(
+            self.tr(
+                """<b>About</b>"""
+                """<p>Display some information about this software.</p>"""
+            )
+        )
         self.aboutAct.triggered.connect(self.__about)
         self.__actions.append(self.aboutAct)
-        
+
         self.aboutQtAct = EricAction(
-            self.tr('About Qt'),
-            self.tr('About &Qt'),
-            0, 0, self, 'hexEditor_help_about_qt')
+            self.tr("About Qt"),
+            self.tr("About &Qt"),
+            0,
+            0,
+            self,
+            "hexEditor_help_about_qt",
+        )
         self.aboutQtAct.setStatusTip(
-            self.tr('Display information about the Qt toolkit'))
-        self.aboutQtAct.setWhatsThis(self.tr(
-            """<b>About Qt</b>"""
-            """<p>Display some information about the Qt toolkit.</p>"""
-        ))
+            self.tr("Display information about the Qt toolkit")
+        )
+        self.aboutQtAct.setWhatsThis(
+            self.tr(
+                """<b>About Qt</b>"""
+                """<p>Display some information about the Qt toolkit.</p>"""
+            )
+        )
         self.aboutQtAct.triggered.connect(self.__aboutQt)
         self.__actions.append(self.aboutQtAct)
-        
+
         self.whatsThisAct = EricAction(
-            self.tr('What\'s This?'),
+            self.tr("What's This?"),
             UI.PixmapCache.getIcon("whatsThis"),
-            self.tr('&What\'s This?'),
+            self.tr("&What's This?"),
             QKeySequence(self.tr("Shift+F1", "Help|What's This?'")),
-            0, self, 'hexEditor_help_whats_this')
-        self.whatsThisAct.setStatusTip(self.tr('Context sensitive help'))
-        self.whatsThisAct.setWhatsThis(self.tr(
-            """<b>Display context sensitive help</b>"""
-            """<p>In What's This? mode, the mouse cursor shows an arrow"""
-            """ with a question mark, and you can click on the interface"""
-            """ elements to get a short description of what they do and"""
-            """ how to use them. In dialogs, this feature can be accessed"""
-            """ using the context help button in the titlebar.</p>"""
-        ))
+            0,
+            self,
+            "hexEditor_help_whats_this",
+        )
+        self.whatsThisAct.setStatusTip(self.tr("Context sensitive help"))
+        self.whatsThisAct.setWhatsThis(
+            self.tr(
+                """<b>Display context sensitive help</b>"""
+                """<p>In What's This? mode, the mouse cursor shows an arrow"""
+                """ with a question mark, and you can click on the interface"""
+                """ elements to get a short description of what they do and"""
+                """ how to use them. In dialogs, this feature can be accessed"""
+                """ using the context help button in the titlebar.</p>"""
+            )
+        )
         self.whatsThisAct.triggered.connect(self.__whatsThis)
         self.__actions.append(self.whatsThisAct)
-    
+
     def __initConfigActions(self):
         """
         Private method to create the Settings actions.
         """
         self.prefAct = EricAction(
-            self.tr('Preferences'),
+            self.tr("Preferences"),
             UI.PixmapCache.getIcon("configure"),
-            self.tr('&Preferences...'),
-            0, 0, self, 'hexEditor_settings_preferences')
-        self.prefAct.setStatusTip(self.tr(
-            'Set the prefered configuration'))
-        self.prefAct.setWhatsThis(self.tr(
-            """<b>Preferences</b>"""
-            """<p>Set the configuration items of the application"""
-            """ with your prefered values.</p>"""
-        ))
+            self.tr("&Preferences..."),
+            0,
+            0,
+            self,
+            "hexEditor_settings_preferences",
+        )
+        self.prefAct.setStatusTip(self.tr("Set the prefered configuration"))
+        self.prefAct.setWhatsThis(
+            self.tr(
+                """<b>Preferences</b>"""
+                """<p>Set the configuration items of the application"""
+                """ with your prefered values.</p>"""
+            )
+        )
         self.prefAct.triggered.connect(self.__showPreferences)
         self.prefAct.setMenuRole(QAction.MenuRole.PreferencesRole)
         self.__actions.append(self.prefAct)
-    
+
     def __setReadOnlyActionTexts(self):
         """
         Private method to switch the 'Open Read Only' action between
         'read only' and 'read write'.
         """
         if Preferences.getHexEditor("OpenReadOnly"):
-            self.openAct.setStatusTip(self.tr(
-                'Open a binary file for viewing'))
-            self.openAct.setWhatsThis(self.tr(
-                """<b>Open File</b>"""
-                """<p>This opens a binary file for viewing (i.e. in read"""
-                """ only mode). It pops up a file selection dialog.</p>"""
-            ))
-            
-            self.openReadOnlyAct.setText(self.tr('Open for Editing...'))
-            self.openReadOnlyAct.setIconText(self.tr('Open for Editing'))
-            self.openReadOnlyAct.setStatusTip(self.tr(
-                'Open a binary file for editing'))
-            self.openReadOnlyAct.setWhatsThis(self.tr(
-                """<b>Open for Editing</b>"""
-                """<p>This opens a binary file for editing."""
-                """ It pops up a file selection dialog.</p>"""
-            ))
+            self.openAct.setStatusTip(self.tr("Open a binary file for viewing"))
+            self.openAct.setWhatsThis(
+                self.tr(
+                    """<b>Open File</b>"""
+                    """<p>This opens a binary file for viewing (i.e. in read"""
+                    """ only mode). It pops up a file selection dialog.</p>"""
+                )
+            )
+
+            self.openReadOnlyAct.setText(self.tr("Open for Editing..."))
+            self.openReadOnlyAct.setIconText(self.tr("Open for Editing"))
+            self.openReadOnlyAct.setStatusTip(self.tr("Open a binary file for editing"))
+            self.openReadOnlyAct.setWhatsThis(
+                self.tr(
+                    """<b>Open for Editing</b>"""
+                    """<p>This opens a binary file for editing."""
+                    """ It pops up a file selection dialog.</p>"""
+                )
+            )
         else:
-            self.openAct.setStatusTip(self.tr(
-                'Open a binary file for editing'))
-            self.openAct.setWhatsThis(self.tr(
-                """<b>Open File</b>"""
-                """<p>This opens a binary file for editing."""
-                """ It pops up a file selection dialog.</p>"""
-            ))
-            
-            self.openReadOnlyAct.setText(self.tr('Open Read Only...'))
-            self.openReadOnlyAct.setIconText(self.tr('Open Read Only'))
-            self.openReadOnlyAct.setStatusTip(self.tr(
-                'Open a binary file for viewing'))
-            self.openReadOnlyAct.setWhatsThis(self.tr(
-                """<b>Open Read Only</b>"""
-                """<p>This opens a binary file for viewing (i.e. in read"""
-                """ only mode). It pops up a file selection dialog.</p>"""
-            ))
-    
+            self.openAct.setStatusTip(self.tr("Open a binary file for editing"))
+            self.openAct.setWhatsThis(
+                self.tr(
+                    """<b>Open File</b>"""
+                    """<p>This opens a binary file for editing."""
+                    """ It pops up a file selection dialog.</p>"""
+                )
+            )
+
+            self.openReadOnlyAct.setText(self.tr("Open Read Only..."))
+            self.openReadOnlyAct.setIconText(self.tr("Open Read Only"))
+            self.openReadOnlyAct.setStatusTip(self.tr("Open a binary file for viewing"))
+            self.openReadOnlyAct.setWhatsThis(
+                self.tr(
+                    """<b>Open Read Only</b>"""
+                    """<p>This opens a binary file for viewing (i.e. in read"""
+                    """ only mode). It pops up a file selection dialog.</p>"""
+                )
+            )
+
     def __initMenus(self):
         """
         Private method to create the menus.
         """
         mb = self.menuBar()
-        
-        menu = mb.addMenu(self.tr('&File'))
+
+        menu = mb.addMenu(self.tr("&File"))
         menu.setTearOffEnabled(True)
-        self.__recentMenu = QMenu(self.tr('Open &Recent Files'), menu)
+        self.__recentMenu = QMenu(self.tr("Open &Recent Files"), menu)
         menu.addAction(self.newWindowAct)
         menu.addAction(self.openAct)
         menu.addAction(self.openReadOnlyAct)
@@ -682,7 +804,7 @@
         menu.aboutToShow.connect(self.__showFileMenu)
         self.__recentMenu.aboutToShow.connect(self.__showRecentMenu)
         self.__recentMenu.triggered.connect(self.__openRecentHexFile)
-        
+
         menu = mb.addMenu(self.tr("&Edit"))
         menu.setTearOffEnabled(True)
         menu.addAction(self.undoAct)
@@ -705,20 +827,20 @@
         menu.addAction(self.gotoAct)
         menu.addSeparator()
         menu.addAction(self.readonlyAct)
-        
+
         if not self.__fromEric:
             menu = mb.addMenu(self.tr("Se&ttings"))
             menu.setTearOffEnabled(True)
             menu.addAction(self.prefAct)
-        
+
         mb.addSeparator()
-        
+
         menu = mb.addMenu(self.tr("&Help"))
         menu.addAction(self.aboutAct)
         menu.addAction(self.aboutQtAct)
         menu.addSeparator()
         menu.addAction(self.whatsThisAct)
-    
+
     def __initToolbars(self):
         """
         Private method to create the toolbars.
@@ -735,7 +857,7 @@
         filetb.addAction(self.closeAct)
         if not self.__fromEric:
             filetb.addAction(self.exitAct)
-        
+
         edittb = self.addToolBar(self.tr("Edit"))
         edittb.setObjectName("EditToolBar")
         edittb.setIconSize(UI.Config.ToolBarIconSize)
@@ -745,129 +867,132 @@
         edittb.addAction(self.cutAct)
         edittb.addAction(self.copyAct)
         edittb.addAction(self.pasteAct)
-        
+
         searchtb = self.addToolBar(self.tr("Find"))
         searchtb.setObjectName("SearchToolBar")
         searchtb.setIconSize(UI.Config.ToolBarIconSize)
         searchtb.addAction(self.searchAct)
         searchtb.addAction(self.searchNextAct)
         searchtb.addAction(self.searchPrevAct)
-        
+
         if not self.__fromEric:
             settingstb = self.addToolBar(self.tr("Settings"))
             settingstb.setObjectName("SettingsToolBar")
             settingstb.setIconSize(UI.Config.ToolBarIconSize)
             settingstb.addAction(self.prefAct)
-        
+
         helptb = self.addToolBar(self.tr("Help"))
         helptb.setObjectName("HelpToolBar")
         helptb.setIconSize(UI.Config.ToolBarIconSize)
         helptb.addAction(self.whatsThisAct)
-    
+
     def __createStatusBar(self):
         """
         Private method to initialize the status bar.
         """
         self.__statusBar = self.statusBar()
         self.__statusBar.setSizeGripEnabled(True)
-        
+
         self.__sbAddress = QLabel(self.__statusBar)
         self.__statusBar.addPermanentWidget(self.__sbAddress)
-        self.__sbAddress.setWhatsThis(self.tr(
-            """<p>This part of the status bar displays the cursor"""
-            """ address.</p>"""
-        ))
-        self.__sbAddress.setFrameStyle(
-            QFrame.Shape.StyledPanel | QFrame.Shadow.Plain)
-        
+        self.__sbAddress.setWhatsThis(
+            self.tr(
+                """<p>This part of the status bar displays the cursor"""
+                """ address.</p>"""
+            )
+        )
+        self.__sbAddress.setFrameStyle(QFrame.Shape.StyledPanel | QFrame.Shadow.Plain)
+
         self.__sbSelection = QLabel(self.__statusBar)
         self.__statusBar.addPermanentWidget(self.__sbSelection)
-        self.__sbSelection.setWhatsThis(self.tr(
-            """<p>This part of the status bar displays some selection"""
-            """ information.</p>"""
-        ))
-        self.__sbSelection.setFrameStyle(
-            QFrame.Shape.StyledPanel | QFrame.Shadow.Plain)
-        
+        self.__sbSelection.setWhatsThis(
+            self.tr(
+                """<p>This part of the status bar displays some selection"""
+                """ information.</p>"""
+            )
+        )
+        self.__sbSelection.setFrameStyle(QFrame.Shape.StyledPanel | QFrame.Shadow.Plain)
+
         self.__sbSize = QLabel(self.__statusBar)
         self.__statusBar.addPermanentWidget(self.__sbSize)
-        self.__sbSize.setWhatsThis(self.tr(
-            """<p>This part of the status bar displays the size of the"""
-            """ binary data.</p>"""
-        ))
-        self.__sbSize.setFrameStyle(
-            QFrame.Shape.StyledPanel | QFrame.Shadow.Plain)
-        
+        self.__sbSize.setWhatsThis(
+            self.tr(
+                """<p>This part of the status bar displays the size of the"""
+                """ binary data.</p>"""
+            )
+        )
+        self.__sbSize.setFrameStyle(QFrame.Shape.StyledPanel | QFrame.Shadow.Plain)
+
         self.__sbEditMode = EricClickableLabel(self.__statusBar)
         self.__statusBar.addPermanentWidget(self.__sbEditMode)
-        self.__sbEditMode.setWhatsThis(self.tr(
-            """<p>This part of the status bar displays the edit mode.</p>"""
-        ))
-        self.__sbEditMode.setFrameStyle(
-            QFrame.Shape.StyledPanel | QFrame.Shadow.Plain)
+        self.__sbEditMode.setWhatsThis(
+            self.tr("""<p>This part of the status bar displays the edit mode.</p>""")
+        )
+        self.__sbEditMode.setFrameStyle(QFrame.Shape.StyledPanel | QFrame.Shadow.Plain)
         self.__sbEditMode.clicked.connect(self.__toggleEditMode)
-        
+
         self.__sbReadOnly = EricClickableLabel(self.__statusBar)
         self.__statusBar.addPermanentWidget(self.__sbReadOnly)
-        self.__sbReadOnly.setWhatsThis(self.tr(
-            """<p>This part of the status bar displays the read"""
-            """ only mode.</p>"""
-        ))
-        self.__sbReadOnly.setFrameStyle(
-            QFrame.Shape.StyledPanel | QFrame.Shadow.Plain)
+        self.__sbReadOnly.setWhatsThis(
+            self.tr(
+                """<p>This part of the status bar displays the read"""
+                """ only mode.</p>"""
+            )
+        )
+        self.__sbReadOnly.setFrameStyle(QFrame.Shape.StyledPanel | QFrame.Shadow.Plain)
         self.__sbReadOnly.clicked.connect(self.__toggleReadOnlyMode)
 
         self.__showEditMode(self.__editor.overwriteMode())
         self.__showReadOnlyMode(self.__editor.isReadOnly())
-    
+
     @pyqtSlot(int)
     def __showAddress(self, address):
         """
         Private slot to show the address of the cursor position.
-        
+
         @param address address of the cursor
         @type int
         """
         txt = "{0:0{1}x}".format(address, self.__editor.addressWidth())
         txt = strGroup(txt, ":", 4)
         self.__sbAddress.setText(self.tr("Address: {0}").format(txt))
-    
+
     @pyqtSlot(bool)
     def __showSelectionInfo(self, avail):
         """
         Private slot to show selection information.
-        
+
         @param avail flag indicating the availability of a selection.
         @type bool
         """
         if avail:
             addrWidth = self.__editor.addressWidth()
-            start = "{0:0{1}x}".format(self.__editor.getSelectionBegin(),
-                                       addrWidth)
+            start = "{0:0{1}x}".format(self.__editor.getSelectionBegin(), addrWidth)
             start = strGroup(start, ":", 4)
-            end = "{0:0{1}x}".format(self.__editor.getSelectionEnd(),
-                                     addrWidth)
+            end = "{0:0{1}x}".format(self.__editor.getSelectionEnd(), addrWidth)
             end = strGroup(end, ":", 4)
             slen = self.__editor.getSelectionLength()
             self.__sbSelection.setText(
-                self.tr("Selection: {0} - {1} ({2} Bytes)",
-                        "0: start, 1: end, 2: selection length")
-                .format(start, end, QLocale().toString(slen))
+                self.tr(
+                    "Selection: {0} - {1} ({2} Bytes)",
+                    "0: start, 1: end, 2: selection length",
+                ).format(start, end, QLocale().toString(slen))
             )
         else:
             self.__sbSelection.setText(
-                self.tr("Selection: -", "no selection available"))
-    
+                self.tr("Selection: -", "no selection available")
+            )
+
     @pyqtSlot(bool)
     def __showReadOnlyMode(self, on):
         """
         Private slot to show the read only mode.
-        
+
         @param on flag indicating the read only state
         @type bool
         """
         self.__sbReadOnly.setText(self.tr("ro") if on else self.tr("rw"))
-    
+
     @pyqtSlot()
     def __toggleReadOnlyMode(self):
         """
@@ -875,18 +1000,19 @@
         bar label.
         """
         self.__editor.setReadOnly(not self.__editor.isReadOnly())
-    
+
     @pyqtSlot(bool)
     def __showEditMode(self, overwrite):
         """
         Private slot to show the edit mode.
-        
+
         @param overwrite flag indicating overwrite mode
         @type bool
         """
         self.__sbEditMode.setText(
-            self.tr("Overwrite") if overwrite else self.tr("Insert"))
-    
+            self.tr("Overwrite") if overwrite else self.tr("Insert")
+        )
+
     @pyqtSlot()
     def __toggleEditMode(self):
         """
@@ -894,22 +1020,21 @@
         label.
         """
         self.__editor.setOverwriteMode(not self.__editor.overwriteMode())
-    
+
     @pyqtSlot(int)
     def __showSize(self, size):
         """
         Private slot to show the binary data size.
-        
+
         @param size size of the binary data
         @type int
         """
-        self.__sbSize.setText(
-            self.tr("Size: {0}").format(QLocale().toString(size)))
-    
+        self.__sbSize.setText(self.tr("Size: {0}").format(QLocale().toString(size)))
+
     def closeEvent(self, evt):
         """
         Protected event handler for the close event.
-        
+
         @param evt reference to the close event
             <br />This event is simply accepted after the history has been
             saved and all window references have been deleted.
@@ -920,50 +1045,52 @@
             Preferences.setHexEditor("HexEditorState", state)
 
             Preferences.setGeometry("HexEditorGeometry", self.saveGeometry())
-            
+
             with contextlib.suppress(ValueError):
                 if self.__fromEric or len(self.__class__.windows) > 1:
-                    del self.__class__.windows[
-                        self.__class__.windows.index(self)]
-            
+                    del self.__class__.windows[self.__class__.windows.index(self)]
+
             if not self.__fromEric:
                 Preferences.syncPreferences()
-            
+
             self.__saveRecent()
-            
+
             evt.accept()
             self.editorClosed.emit()
         else:
             evt.ignore()
-    
+
     def __openHexFileNewWindow(self):
         """
         Private slot called to open a binary file in new hex editor window.
         """
         if (
-            not self.__lastOpenPath and
-            self.__project is not None and
-            self.__project.isOpen()
+            not self.__lastOpenPath
+            and self.__project is not None
+            and self.__project.isOpen()
         ):
             self.__lastOpenPath = self.__project.getProjectPath()
-        
+
         fileName = EricFileDialog.getOpenFileName(
             self,
             self.tr("Open binary file in new window"),
             self.__lastOpenPath,
-            self.tr("All Files (*)"))
+            self.tr("All Files (*)"),
+        )
         if fileName:
-            he = HexEditMainWindow(fileName=fileName,
-                                   parent=self.parent(),
-                                   fromEric=self.__fromEric,
-                                   project=self.__project)
+            he = HexEditMainWindow(
+                fileName=fileName,
+                parent=self.parent(),
+                fromEric=self.__fromEric,
+                project=self.__project,
+            )
             he.setRecentPaths("", self.__lastSavePath)
             he.show()
-    
+
     def __maybeSave(self):
         """
         Private method to ask the user to save the file, if it was modified.
-        
+
         @return flag indicating, if it is ok to continue
         @rtype bool
         """
@@ -972,65 +1099,70 @@
                 self,
                 self.tr("eric Hex Editor"),
                 self.tr("""The loaded file has unsaved changes."""),
-                self.__saveHexFile)
+                self.__saveHexFile,
+            )
             if not ret:
                 return False
         return True
-    
+
     def __loadHexFile(self, fileName):
         """
         Private method to load a binary file.
-        
+
         @param fileName name of the binary file to load
         @type str
         """
         if not os.path.exists(fileName):
             EricMessageBox.warning(
-                self, self.tr("eric Hex Editor"),
-                self.tr("The file '{0}' does not exist.")
-                .format(fileName))
+                self,
+                self.tr("eric Hex Editor"),
+                self.tr("The file '{0}' does not exist.").format(fileName),
+            )
             return
-        
+
         try:
             with open(fileName, "rb") as f:
                 data = f.read()
         except OSError as err:
             EricMessageBox.warning(
-                self, self.tr("eric Hex Editor"),
-                self.tr("<p>Cannot read file <b>{0}</b>.</p>"
-                        "<p>Reason: {1}</p>")
-                .format(fileName, str(err)))
+                self,
+                self.tr("eric Hex Editor"),
+                self.tr(
+                    "<p>Cannot read file <b>{0}</b>.</p>" "<p>Reason: {1}</p>"
+                ).format(fileName, str(err)),
+            )
             return
-        
+
         self.__lastOpenPath = os.path.dirname(fileName)
         self.__editor.setData(data)
         self.__setCurrentFile(fileName)
-        
+
         self.__editor.setReadOnly(Preferences.getHexEditor("OpenReadOnly"))
-        
+
         self.__gotoWidget.reset()
-    
+
     def __openHexFile(self):
         """
         Private slot to open a binary file.
         """
         if self.__maybeSave():
             if (
-                not self.__lastOpenPath and
-                self.__project is not None and
-                self.__project.isOpen()
+                not self.__lastOpenPath
+                and self.__project is not None
+                and self.__project.isOpen()
             ):
                 self.__lastOpenPath = self.__project.getProjectPath()
-            
+
             fileName = EricFileDialog.getOpenFileName(
                 self,
                 self.tr("Open binary file"),
                 self.__lastOpenPath,
-                self.tr("All Files (*)"))
+                self.tr("All Files (*)"),
+            )
             if fileName:
                 self.__loadHexFile(fileName)
         self.__checkActions()
-    
+
     def __openHexFileReadOnly(self):
         """
         Private slot to open a binary file in read only mode.
@@ -1038,68 +1170,71 @@
         self.__openHexFile()
         self.__editor.setReadOnly(not Preferences.getHexEditor("OpenReadOnly"))
         self.__checkActions()
-    
+
     def __saveHexFile(self):
         """
         Private method to save a binary file.
-        
+
         @return flag indicating success
         @rtype bool
         """
         ok = (
             self.__saveHexDataFile(self.__fileName)
-            if self.__fileName else
-            self.__saveHexFileAs()
+            if self.__fileName
+            else self.__saveHexFileAs()
         )
-        
+
         if ok:
             self.__editor.undoStack().setClean()
-        
+
         return ok
-    
+
     def __saveHexFileAs(self):
         """
         Private method to save the data to a new file.
-        
+
         @return flag indicating success
         @rtype bool
         """
         if (
-            not self.__lastSavePath and
-            self.__project is not None and
-            self.__project.isOpen()
+            not self.__lastSavePath
+            and self.__project is not None
+            and self.__project.isOpen()
         ):
             self.__lastSavePath = self.__project.getProjectPath()
         if not self.__lastSavePath and self.__lastOpenPath:
             self.__lastSavePath = self.__lastOpenPath
-        
+
         fileName = EricFileDialog.getSaveFileName(
             self,
             self.tr("Save binary file"),
             self.__lastSavePath,
             self.tr("All Files (*)"),
-            EricFileDialog.DontConfirmOverwrite)
+            EricFileDialog.DontConfirmOverwrite,
+        )
         if not fileName:
             return False
-        
+
         if pathlib.Path(fileName).exists():
             res = EricMessageBox.yesNo(
                 self,
                 self.tr("Save binary file"),
-                self.tr("<p>The file <b>{0}</b> already exists."
-                        " Overwrite it?</p>").format(fileName),
-                icon=EricMessageBox.Warning)
+                self.tr(
+                    "<p>The file <b>{0}</b> already exists." " Overwrite it?</p>"
+                ).format(fileName),
+                icon=EricMessageBox.Warning,
+            )
             if not res:
                 return False
-        
+
         self.__lastSavePath = os.path.dirname(fileName)
-        
+
         return self.__saveHexDataFile(fileName)
-    
+
     def __saveHexDataFile(self, fileName):
         """
         Private method to save the binary data to a file.
-        
+
         @param fileName name of the file to write to
         @type str
         @return flag indicating success
@@ -1110,49 +1245,48 @@
                 f.write(self.__editor.data())
         except OSError as err:
             EricMessageBox.warning(
-                self, self.tr("eric Hex Editor"),
-                self.tr("<p>Cannot write file <b>{0}</b>.</p>"
-                        "<p>Reason: {1}</p>")
-                .format(fileName, str(err)))
+                self,
+                self.tr("eric Hex Editor"),
+                self.tr(
+                    "<p>Cannot write file <b>{0}</b>.</p>" "<p>Reason: {1}</p>"
+                ).format(fileName, str(err)),
+            )
             self.__checkActions()
             return False
-        
+
         self.__editor.setModified(False, setCleanState=True)
-        
+
         self.__setCurrentFile(fileName)
         self.__statusBar.showMessage(self.tr("File saved"), 2000)
-        
+
         self.__checkActions()
-        
+
         return True
-    
+
     def __saveHexFileReadable(self, selectionOnly=False):
         """
         Private method to save the binary data in readable format.
-        
+
         @param selectionOnly flag indicating to save the selection only
         @type bool
         """
         savePath = self.__lastSavePath
-        if (
-            not savePath and
-            self.__project is not None and
-            self.__project.isOpen()
-        ):
+        if not savePath and self.__project is not None and self.__project.isOpen():
             savePath = self.__project.getProjectPath()
         if not savePath and self.__lastOpenPath:
             savePath = self.__lastOpenPath
-        
+
         fileName, selectedFilter = EricFileDialog.getSaveFileNameAndFilter(
             self,
             self.tr("Save to readable file"),
             savePath,
             self.tr("Text Files (*.txt);;All Files (*)"),
             self.tr("Text Files (*.txt)"),
-            EricFileDialog.DontConfirmOverwrite)
+            EricFileDialog.DontConfirmOverwrite,
+        )
         if not fileName:
             return
-        
+
         fpath = pathlib.Path(fileName)
         if not fpath.suffix:
             ex = selectedFilter.split("(*")[1].split(")")[0]
@@ -1162,44 +1296,48 @@
             res = EricMessageBox.yesNo(
                 self,
                 self.tr("Save to readable file"),
-                self.tr("<p>The file <b>{0}</b> already exists."
-                        " Overwrite it?</p>").format(fpath),
-                icon=EricMessageBox.Warning)
+                self.tr(
+                    "<p>The file <b>{0}</b> already exists." " Overwrite it?</p>"
+                ).format(fpath),
+                icon=EricMessageBox.Warning,
+            )
             if not res:
                 return
-        
+
         readableData = (
             self.__editor.selectionToReadableString()
-            if selectionOnly else
-            self.__editor.toReadableString()
+            if selectionOnly
+            else self.__editor.toReadableString()
         )
         try:
             with fpath.open("w", encoding="latin1") as f:
                 f.write(readableData)
         except OSError as err:
             EricMessageBox.warning(
-                self, self.tr("eric Hex Editor"),
-                self.tr("<p>Cannot write file <b>{0}</b>.</p>"
-                        "<p>Reason: {1}</p>")
-                .format(fpath, str(err)))
+                self,
+                self.tr("eric Hex Editor"),
+                self.tr(
+                    "<p>Cannot write file <b>{0}</b>.</p>" "<p>Reason: {1}</p>"
+                ).format(fpath, str(err)),
+            )
             return
-        
+
         self.__statusBar.showMessage(self.tr("File saved"), 2000)
-    
+
     def __saveSelectionReadable(self):
         """
         Private method to save the data of the current selection in readable
         format.
         """
         self.__saveHexFileReadable(selectionOnly=True)
-    
+
     def __closeAll(self):
         """
         Private slot to close all windows.
         """
         self.__closeOthers()
         self.close()
-    
+
     def __closeOthers(self):
         """
         Private slot to close all other windows.
@@ -1211,40 +1349,41 @@
     def __setCurrentFile(self, fileName):
         """
         Private method to register the file name of the current file.
-        
+
         @param fileName name of the file to register
         @type str
         """
         self.__fileName = fileName
         # insert filename into list of recently opened files
         self.__addToRecentList(fileName)
-        
+
         shownName = (
             self.tr("Untitled")
-            if not self.__fileName else
-            self.__strippedName(self.__fileName)
+            if not self.__fileName
+            else self.__strippedName(self.__fileName)
         )
-        
-        self.setWindowTitle(self.tr("{0}[*] - {1}")
-                            .format(shownName, self.tr("Hex Editor")))
-        
+
+        self.setWindowTitle(
+            self.tr("{0}[*] - {1}").format(shownName, self.tr("Hex Editor"))
+        )
+
         self.setWindowModified(self.__editor.isModified())
-    
+
     def __strippedName(self, fullFileName):
         """
         Private method to return the filename part of the given path.
-        
+
         @param fullFileName full pathname of the given file
         @type str
         @return filename part
         @rtype str
         """
         return pathlib.Path(fullFileName).name
-    
+
     def setRecentPaths(self, openPath, savePath):
         """
         Public method to set the last open and save paths.
-        
+
         @param openPath least recently used open path
         @type str
         @param savePath least recently used save path
@@ -1254,51 +1393,56 @@
             self.__lastOpenPath = openPath
         if savePath:
             self.__lastSavePath = savePath
-    
+
     @pyqtSlot()
     def __checkActions(self):
         """
         Private slot to check some actions for their enable/disable status.
         """
         self.saveAct.setEnabled(self.__editor.isModified())
-        
-        self.cutAct.setEnabled(not self.__editor.isReadOnly() and
-                               self.__editor.hasSelection())
+
+        self.cutAct.setEnabled(
+            not self.__editor.isReadOnly() and self.__editor.hasSelection()
+        )
         self.pasteAct.setEnabled(not self.__editor.isReadOnly())
         self.replaceAct.setEnabled(not self.__editor.isReadOnly())
-    
+
     @pyqtSlot(bool)
     def __modificationChanged(self, m):
         """
         Private slot to handle the dataChanged signal.
-        
+
         @param m modification status
         @type bool
         """
         self.setWindowModified(m)
         self.__checkActions()
-    
+
     def __about(self):
         """
         Private slot to show a little About message.
         """
         EricMessageBox.about(
-            self, self.tr("About eric Hex Editor"),
-            self.tr("The eric Hex Editor is a simple editor component"
-                    " to edit binary files."))
-    
+            self,
+            self.tr("About eric Hex Editor"),
+            self.tr(
+                "The eric Hex Editor is a simple editor component"
+                " to edit binary files."
+            ),
+        )
+
     def __aboutQt(self):
         """
         Private slot to handle the About Qt dialog.
         """
         EricMessageBox.aboutQt(self, "eric Hex Editor")
-    
+
     def __whatsThis(self):
         """
         Private slot called in to enter Whats This mode.
         """
         QWhatsThis.enterWhatsThisMode()
-        
+
     def __search(self):
         """
         Private method to handle the search action.
@@ -1306,12 +1450,10 @@
         self.__replaceWidget.hide()
         self.__gotoWidget.hide()
         txt = (
-            self.__editor.selectionToHexString()
-            if self.__editor.hasSelection() else
-            ""
+            self.__editor.selectionToHexString() if self.__editor.hasSelection() else ""
         )
         self.__searchWidget.show(txt)
-        
+
     def __replace(self):
         """
         Private method to handle the replace action.
@@ -1319,12 +1461,10 @@
         self.__searchWidget.hide()
         self.__gotoWidget.hide()
         txt = (
-            self.__editor.selectionToHexString()
-            if self.__editor.hasSelection() else
-            ""
+            self.__editor.selectionToHexString() if self.__editor.hasSelection() else ""
         )
         self.__replaceWidget.show(txt)
-    
+
     def __goto(self):
         """
         Private method to handle the goto action.
@@ -1332,36 +1472,38 @@
         self.__searchWidget.hide()
         self.__replaceWidget.hide()
         self.__gotoWidget.show()
-    
+
     def preferencesChanged(self):
         """
         Public method to (re-)read the various settings.
         """
-        self.__editor.setAddressWidth(
-            Preferences.getHexEditor("AddressAreaWidth"))
-        self.__editor.setAddressArea(
-            Preferences.getHexEditor("ShowAddressArea"))
-        self.__editor.setAsciiArea(
-            Preferences.getHexEditor("ShowAsciiArea"))
-        self.__editor.setHighlighting(
-            Preferences.getHexEditor("HighlightChanges"))
-        self.__editor.setFont(
-            Preferences.getHexEditor("Font"))
-        
+        self.__editor.setAddressWidth(Preferences.getHexEditor("AddressAreaWidth"))
+        self.__editor.setAddressArea(Preferences.getHexEditor("ShowAddressArea"))
+        self.__editor.setAsciiArea(Preferences.getHexEditor("ShowAsciiArea"))
+        self.__editor.setHighlighting(Preferences.getHexEditor("HighlightChanges"))
+        self.__editor.setFont(Preferences.getHexEditor("Font"))
+
         self.__setReadOnlyActionTexts()
-    
+
     def __showPreferences(self):
         """
         Private slot to set the preferences.
         """
         from Preferences.ConfigurationDialog import (
-            ConfigurationDialog, ConfigurationMode
+            ConfigurationDialog,
+            ConfigurationMode,
         )
+
         dlg = ConfigurationDialog(
-            None, 'Configuration', True, fromEric=True,
-            displayMode=ConfigurationMode.HEXEDITORMODE)
+            None,
+            "Configuration",
+            True,
+            fromEric=True,
+            displayMode=ConfigurationMode.HEXEDITORMODE,
+        )
         dlg.preferencesChanged.connect(
-            self.__preferencesChangedByLocalPreferencesDialog)
+            self.__preferencesChangedByLocalPreferencesDialog
+        )
         dlg.show()
         dlg.showConfigurationPageByName("hexEditorPage")
         dlg.exec()
@@ -1370,62 +1512,62 @@
             dlg.setPreferences()
             Preferences.syncPreferences()
             self.__preferencesChangedByLocalPreferencesDialog()
-    
+
     def __preferencesChangedByLocalPreferencesDialog(self):
         """
         Private slot to handle preferences changes by our local dialog.
         """
         for hexEditor in HexEditMainWindow.windows:
             hexEditor.preferencesChanged()
-    
+
     def getSRHistory(self, key):
         """
         Public method to get the search or replace history list.
-        
+
         @param key name of list to return
         @type str (must be 'search' or 'replace')
         @return the requested history list
         @rtype list of tuples of (int, str)
         """
-        if key in ['search', 'replace']:
+        if key in ["search", "replace"]:
             return self.__srHistory[key]
-        
+
         return []
-    
+
     @pyqtSlot()
     def __showFileMenu(self):
         """
         Private slot to modify the file menu before being shown.
         """
         self.__menuRecentAct.setEnabled(len(self.__recent) > 0)
-    
+
     @pyqtSlot()
     def __showRecentMenu(self):
         """
         Private slot to set up the recent files menu.
         """
         self.__loadRecent()
-        
+
         self.__recentMenu.clear()
-        
+
         for idx, rs in enumerate(self.__recent, start=1):
-            formatStr = '&{0:d}. {1}' if idx < 10 else '{0:d}. {1}'
+            formatStr = "&{0:d}. {1}" if idx < 10 else "{0:d}. {1}"
             act = self.__recentMenu.addAction(
                 formatStr.format(
-                    idx,
-                    Utilities.compactPath(
-                        rs, HexEditMainWindow.maxMenuFilePathLen)))
+                    idx, Utilities.compactPath(rs, HexEditMainWindow.maxMenuFilePathLen)
+                )
+            )
             act.setData(rs)
             act.setEnabled(pathlib.Path(rs).exists())
-        
+
         self.__recentMenu.addSeparator()
-        self.__recentMenu.addAction(self.tr('&Clear'), self.__clearRecent)
-    
+        self.__recentMenu.addAction(self.tr("&Clear"), self.__clearRecent)
+
     @pyqtSlot(QAction)
     def __openRecentHexFile(self, act):
         """
         Private method to open a file from the list of recently opened files.
-        
+
         @param act reference to the action that triggered (QAction)
         """
         fileName = act.data()
@@ -1433,14 +1575,14 @@
             self.__loadHexFile(fileName)
             self.__editor.setReadOnly(Preferences.getHexEditor("OpenReadOnly"))
             self.__checkActions()
-    
+
     @pyqtSlot()
     def __clearRecent(self):
         """
         Private method to clear the list of recently opened files.
         """
         self.__recent = []
-    
+
     def __loadRecent(self):
         """
         Private method to load the list of recently opened files.
@@ -1452,18 +1594,18 @@
             for f in Preferences.toList(rs):
                 if pathlib.Path(f).exists():
                     self.__recent.append(f)
-        
+
     def __saveRecent(self):
         """
         Private method to save the list of recently opened files.
         """
         Preferences.Prefs.rsettings.setValue(recentNameHexFiles, self.__recent)
         Preferences.Prefs.rsettings.sync()
-    
+
     def __addToRecentList(self, fileName):
         """
         Private method to add a file name to the list of recently opened files.
-        
+
         @param fileName name of the file to be added
         """
         if fileName:

eric ide

mercurial