eric6/HexEdit/HexEditSearchReplaceWidget.py

Sat, 31 Aug 2019 12:58:11 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 31 Aug 2019 12:58:11 +0200
branch
without_py2_and_pyqt4
changeset 7192
a22eee00b052
parent 6942
2602857055c5
child 7229
53054eb5b15a
permissions
-rw-r--r--

Started removing runtime support for Python2 and PyQt4.

4652
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
6645
ad476851d7e0 Updated copyright for 2019.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6048
diff changeset
3 # Copyright (c) 2016 - 2019 Detlev Offenbach <detlev@die-offenbachs.de>
4652
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a search and replace widget for the hex editor.
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
4653
e8b51747c48e Added a forgotten '__future__' statement to the last commit.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4652
diff changeset
10 from __future__ import unicode_literals
e8b51747c48e Added a forgotten '__future__' statement to the last commit.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4652
diff changeset
11
4659
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
12 from PyQt5.QtCore import pyqtSlot, Qt, QByteArray, QRegExp
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
13 from PyQt5.QtGui import QRegExpValidator
4652
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 from PyQt5.QtWidgets import QWidget
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 from E5Gui.E5Action import E5Action
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 from E5Gui import E5MessageBox
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 import UI.PixmapCache
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 class HexEditSearchReplaceWidget(QWidget):
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 """
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 Class implementing a search and replace widget for the hex editor.
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 """
4659
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
26 def __init__(self, editor, mainWindow, replace=False, parent=None):
4652
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 """
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 Constructor
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 @param editor reference to the hex editor widget
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 @type HexEditWidget
4659
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
32 @param mainWindow reference to the main window
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
33 @type HexEditMainWindow
4652
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 @param replace flag indicating a replace widget
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 @type bool
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 @param parent reference to the parent widget
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 @type QWidget
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 """
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 super(HexEditSearchReplaceWidget, self).__init__(parent)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 self.__replace = replace
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 self.__editor = editor
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43
4660
9096e8a2df54 Added capability to search for a UTF-8 encoded text in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4659
diff changeset
44 # keep this in sync with the logic in __getContent()
9096e8a2df54 Added capability to search for a UTF-8 encoded text in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4659
diff changeset
45 self.__formatAndValidators = {
9096e8a2df54 Added capability to search for a UTF-8 encoded text in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4659
diff changeset
46 "hex": (self.tr("Hex"), QRegExpValidator((QRegExp("[0-9a-f]*")))),
4661
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
47 "dec": (self.tr("Dec"), QRegExpValidator((QRegExp("[0-9]*")))),
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
48 "oct": (self.tr("Oct"), QRegExpValidator((QRegExp("[0-7]*")))),
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
49 "bin": (self.tr("Bin"), QRegExpValidator((QRegExp("[01]*")))),
4662
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
50 "iso-8859-1": (self.tr("Text"), None),
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
51 # text as latin-1/iso-8859-1
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
52 "utf-8": (self.tr("UTF-8"), None),
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
53 # text as utf-8
4660
9096e8a2df54 Added capability to search for a UTF-8 encoded text in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4659
diff changeset
54 }
4662
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
55 formatOrder = ["hex", "dec", "oct", "bin", "iso-8859-1", "utf-8"]
4660
9096e8a2df54 Added capability to search for a UTF-8 encoded text in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4659
diff changeset
56
9096e8a2df54 Added capability to search for a UTF-8 encoded text in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4659
diff changeset
57 self.__currentFindFormat = ""
9096e8a2df54 Added capability to search for a UTF-8 encoded text in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4659
diff changeset
58 self.__currentReplaceFormat = ""
4659
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
59
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
60 self.__findHistory = mainWindow.getSRHistory("search")
4652
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 if replace:
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 from .Ui_HexEditReplaceWidget import Ui_HexEditReplaceWidget
4659
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
63 self.__replaceHistory = mainWindow.getSRHistory("replace")
4652
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 self.__ui = Ui_HexEditReplaceWidget()
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 else:
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 from .Ui_HexEditSearchWidget import Ui_HexEditSearchWidget
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 self.__ui = Ui_HexEditSearchWidget()
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 self.__ui.setupUi(self)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 self.__ui.closeButton.setIcon(UI.PixmapCache.getIcon("close.png"))
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 self.__ui.findPrevButton.setIcon(
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 UI.PixmapCache.getIcon("1leftarrow.png"))
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 self.__ui.findNextButton.setIcon(
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 UI.PixmapCache.getIcon("1rightarrow.png"))
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 if replace:
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 self.__ui.replaceButton.setIcon(
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 UI.PixmapCache.getIcon("editReplace.png"))
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 self.__ui.replaceSearchButton.setIcon(
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 UI.PixmapCache.getIcon("editReplaceSearch.png"))
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 self.__ui.replaceAllButton.setIcon(
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 UI.PixmapCache.getIcon("editReplaceAll.png"))
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
84 for dataFormat in formatOrder:
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
85 formatStr, validator = self.__formatAndValidators[dataFormat]
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
86 self.__ui.findFormatCombo.addItem(formatStr, dataFormat)
4659
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
87 if replace:
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
88 for dataFormat in formatOrder:
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
89 formatStr, validator = self.__formatAndValidators[dataFormat]
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
90 self.__ui.replaceFormatCombo.addItem(formatStr, dataFormat)
4660
9096e8a2df54 Added capability to search for a UTF-8 encoded text in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4659
diff changeset
91
4652
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 self.__ui.findtextCombo.setCompleter(None)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 self.__ui.findtextCombo.lineEdit().returnPressed.connect(
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 self.__findByReturnPressed)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 if replace:
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 self.__ui.replacetextCombo.setCompleter(None)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 self.__ui.replacetextCombo.lineEdit().returnPressed.connect(
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 self.on_replaceButton_clicked)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 self.findNextAct = E5Action(
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 self.tr('Find Next'),
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 self.tr('Find Next'),
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 0, 0, self, 'hexEditor_search_widget_find_next')
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 self.findNextAct.triggered.connect(self.on_findNextButton_clicked)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 self.findNextAct.setEnabled(False)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 self.__ui.findtextCombo.addAction(self.findNextAct)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 self.findPrevAct = E5Action(
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 self.tr('Find Prev'),
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 self.tr('Find Prev'),
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 0, 0, self, 'hexEditor_search_widget_find_prev')
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 self.findPrevAct.triggered.connect(self.on_findPrevButton_clicked)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 self.findPrevAct.setEnabled(False)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 self.__ui.findtextCombo.addAction(self.findPrevAct)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 self.__havefound = False
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117
4659
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
118 @pyqtSlot(int)
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
119 def on_findFormatCombo_currentIndexChanged(self, idx):
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
120 """
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
121 Private slot to handle a selection from the find format.
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
122
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
123 @param idx index of the selected entry
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
124 @type int
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
125 """
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
126 if idx >= 0:
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
127 findFormat = self.__ui.findFormatCombo.itemData(idx)
4660
9096e8a2df54 Added capability to search for a UTF-8 encoded text in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4659
diff changeset
128
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
129 if findFormat != self.__currentFindFormat:
4660
9096e8a2df54 Added capability to search for a UTF-8 encoded text in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4659
diff changeset
130 txt = self.__ui.findtextCombo.currentText()
9096e8a2df54 Added capability to search for a UTF-8 encoded text in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4659
diff changeset
131 newTxt = self.__convertText(
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
132 txt, self.__currentFindFormat, findFormat)
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
133 self.__currentFindFormat = findFormat
4660
9096e8a2df54 Added capability to search for a UTF-8 encoded text in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4659
diff changeset
134
9096e8a2df54 Added capability to search for a UTF-8 encoded text in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4659
diff changeset
135 self.__ui.findtextCombo.setValidator(
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
136 self.__formatAndValidators[findFormat][1])
4660
9096e8a2df54 Added capability to search for a UTF-8 encoded text in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4659
diff changeset
137
9096e8a2df54 Added capability to search for a UTF-8 encoded text in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4659
diff changeset
138 self.__ui.findtextCombo.setEditText(newTxt)
4659
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
139
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
140 @pyqtSlot(str)
4652
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141 def on_findtextCombo_editTextChanged(self, txt):
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 """
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 Private slot to enable/disable the find buttons.
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144
4659
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
145 @param txt text of the find text combo
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
146 @type str
4652
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 """
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 if not txt:
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 self.__ui.findNextButton.setEnabled(False)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 self.findNextAct.setEnabled(False)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 self.__ui.findPrevButton.setEnabled(False)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 self.findPrevAct.setEnabled(False)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 if self.__replace:
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 self.__ui.replaceButton.setEnabled(False)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 self.__ui.replaceSearchButton.setEnabled(False)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 self.__ui.replaceAllButton.setEnabled(False)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 else:
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 self.__ui.findNextButton.setEnabled(True)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 self.findNextAct.setEnabled(True)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 self.__ui.findPrevButton.setEnabled(True)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 self.findPrevAct.setEnabled(True)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 if self.__replace:
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 self.__ui.replaceButton.setEnabled(False)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 self.__ui.replaceSearchButton.setEnabled(False)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 self.__ui.replaceAllButton.setEnabled(True)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166
4659
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
167 @pyqtSlot(int)
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
168 def on_findtextCombo_activated(self, idx):
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
169 """
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
170 Private slot to handle a selection from the find history.
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
171
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
172 @param idx index of the selected entry
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
173 @type int
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
174 """
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
175 if idx >= 0:
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
176 formatIndex = self.__ui.findtextCombo.itemData(idx)
4661
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
177 if formatIndex is not None:
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
178 self.__ui.findFormatCombo.setCurrentIndex(formatIndex)
4659
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
179
4652
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180 def __getContent(self, replace=False):
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 """
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 Private method to get the contents of the find/replace combo as
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 a bytearray.
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 @param replace flag indicating to retrieve the replace contents
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 @type bool
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 @return search or replace term as text and binary data
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 @rtype tuple of bytearray and str
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 """
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 if replace:
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191 textCombo = self.__ui.replacetextCombo
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 formatCombo = self.__ui.replaceFormatCombo
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193 history = self.__replaceHistory
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194 else:
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195 textCombo = self.__ui.findtextCombo
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 formatCombo = self.__ui.findFormatCombo
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197 history = self.__findHistory
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199 txt = textCombo.currentText()
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
200 idx = formatCombo.currentIndex()
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
201 findFormat = formatCombo.itemData(idx)
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
202 ba = self.__text2bytearray(txt, findFormat)
4652
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
203
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204 # This moves any previous occurrence of this statement to the head
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 # of the list and updates the combobox
4659
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
206 historyEntry = (idx, txt)
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
207 if historyEntry in history:
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
208 history.remove(historyEntry)
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
209 history.insert(0, historyEntry)
4652
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210 textCombo.clear()
4659
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
211 for index, text in history:
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
212 textCombo.addItem(text, index)
4652
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 return ba, txt
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 @pyqtSlot()
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217 def on_findNextButton_clicked(self):
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218 """
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219 Private slot to find the next occurrence.
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 """
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221 self.findPrevNext(False)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223 @pyqtSlot()
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224 def on_findPrevButton_clicked(self):
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225 """
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 Private slot to find the previous occurrence.
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227 """
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 self.findPrevNext(True)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230 def findPrevNext(self, prev=False):
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
231 """
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232 Public slot to find the next occurrence of the search term.
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234 @param prev flag indicating a backwards search
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
235 @type bool
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
236 @return flag indicating a successful search
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
237 @rtype bool
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
238 """
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
239 if not self.__havefound or not self.__ui.findtextCombo.currentText():
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
240 self.show()
6891
93f82da09f22 Fixed some code style issues detected by the new 'return' checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
241 return False
4652
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243 self.__findBackwards = prev
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244 ba, txt = self.__getContent()
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246 idx = -1
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 if len(ba) > 0:
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248 startIndex = self.__editor.cursorPosition() // 2
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249 if prev:
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250 if self.__editor.hasSelection() and \
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
251 startIndex == self.__editor.getSelectionEnd():
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252 # skip to the selection start
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253 startIndex = self.__editor.getSelectionBegin()
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254 idx = self.__editor.lastIndexOf(ba, startIndex)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
255 else:
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256 if self.__editor.hasSelection() and \
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
257 startIndex == self.__editor.getSelectionBegin() - 1:
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
258 # skip to the selection end
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
259 startIndex = self.__editor.getSelectionEnd()
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
260 idx = self.__editor.indexOf(ba, startIndex)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
261
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
262 if idx >= 0:
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
263 if self.__replace:
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
264 self.__ui.replaceButton.setEnabled(True)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
265 self.__ui.replaceSearchButton.setEnabled(True)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
266 else:
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
267 E5MessageBox.information(
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
268 self, self.windowTitle(),
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
269 self.tr("'{0}' was not found.").format(txt))
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
270
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
271 return idx >= 0
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
272
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
273 def __findByReturnPressed(self):
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
274 """
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
275 Private slot to handle a return pressed in the find combo.
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
276 """
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
277 if self.__findBackwards:
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
278 self.findPrevNext(True)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
279 else:
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
280 self.findPrevNext(False)
4659
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
281
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
282 @pyqtSlot(int)
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
283 def on_replaceFormatCombo_currentIndexChanged(self, idx):
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
284 """
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
285 Private slot to handle a selection from the replace format.
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
286
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
287 @param idx index of the selected entry
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
288 @type int
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
289 """
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
290 if idx >= 0:
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
291 replaceFormat = self.__ui.replaceFormatCombo.itemData(idx)
4661
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
292
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
293 if replaceFormat != self.__currentReplaceFormat:
4661
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
294 txt = self.__ui.replacetextCombo.currentText()
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
295 newTxt = self.__convertText(
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
296 txt, self.__currentReplaceFormat, replaceFormat)
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
297 self.__currentReplaceFormat = replaceFormat
4661
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
298
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
299 self.__ui.replacetextCombo.setValidator(
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
300 self.__formatAndValidators[replaceFormat][1])
4661
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
301
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
302 self.__ui.replacetextCombo.setEditText(newTxt)
4659
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
303
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
304 @pyqtSlot(int)
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
305 def on_replacetextCombo_activated(self, idx):
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
306 """
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
307 Private slot to handle a selection from the replace history.
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
308
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
309 @param idx index of the selected entry
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
310 @type int
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
311 """
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
312 if idx >= 0:
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
313 formatIndex = self.__ui.replacetextCombo.itemData(idx)
4661
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
314 if formatIndex is not None:
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
315 self.__ui.replaceFormatCombo.setCurrentIndex(formatIndex)
4652
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
316
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
317 @pyqtSlot()
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
318 def on_replaceButton_clicked(self):
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
319 """
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
320 Private slot to replace one occurrence of data.
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
321 """
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
322 self.__doReplace(False)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
323
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
324 @pyqtSlot()
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
325 def on_replaceSearchButton_clicked(self):
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
326 """
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
327 Private slot to replace one occurrence of data and search for the next
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
328 one.
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
329 """
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
330 self.__doReplace(True)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
331
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
332 def __doReplace(self, searchNext):
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
333 """
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
334 Private method to replace one occurrence of data.
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
335
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
336 @param searchNext flag indicating to search for the next occurrence
4659
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
337 @type bool
4652
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
338 """
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
339 # Check enabled status due to dual purpose usage of this method
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
340 if not self.__ui.replaceButton.isEnabled() and \
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
341 not self.__ui.replaceSearchButton.isEnabled():
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
342 return
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
343
4654
9dafe6905667 Fixed an issue in the hex editor search and replace widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4653
diff changeset
344 fba, ftxt = self.__getContent(False)
4652
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
345 rba, rtxt = self.__getContent(True)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
346
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
347 ok = False
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
348 if self.__editor.hasSelection():
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
349 # we did a successful search before
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
350 startIdx = self.__editor.getSelectionBegin()
4654
9dafe6905667 Fixed an issue in the hex editor search and replace widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4653
diff changeset
351 self.__editor.replaceByteArray(startIdx, len(fba), rba)
4652
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
352
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
353 if searchNext:
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
354 ok = self.findPrevNext(self.__findBackwards)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
355
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
356 if not ok:
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
357 self.__ui.replaceButton.setEnabled(False)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
358 self.__ui.replaceSearchButton.setEnabled(False)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
359
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
360 @pyqtSlot()
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
361 def on_replaceAllButton_clicked(self):
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
362 """
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
363 Private slot to replace all occurrences of data.
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
364 """
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
365 replacements = 0
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
366
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
367 cursorPosition = self.__editor.cursorPosition()
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
368
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
369 fba, ftxt = self.__getContent(False)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
370 rba, rtxt = self.__getContent(True)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
371
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
372 idx = 0
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
373 while idx >= 0:
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
374 idx = self.__editor.indexOf(fba, idx)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
375 if idx >= 0:
4654
9dafe6905667 Fixed an issue in the hex editor search and replace widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4653
diff changeset
376 self.__editor.replaceByteArray(idx, len(fba), rba)
4652
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
377 idx += len(rba)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
378 replacements += 1
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
379
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
380 if replacements:
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
381 E5MessageBox.information(
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
382 self, self.windowTitle(),
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
383 self.tr("Replaced {0} occurrences.")
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
384 .format(replacements))
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
385 else:
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
386 E5MessageBox.information(
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
387 self, self.windowTitle(),
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
388 self.tr("Nothing replaced because '{0}' was not found.")
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
389 .format(ftxt))
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
390
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
391 self.__editor.setCursorPosition(cursorPosition)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
392 self.__editor.ensureVisible()
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
393
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
394 def __showFind(self, text=''):
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
395 """
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
396 Private method to display this widget in find mode.
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
397
4659
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
398 @param text hex encoded text to be shown in the findtext edit
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
399 @type str
4652
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
400 """
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
401 self.__replace = False
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
402
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
403 self.__ui.findtextCombo.clear()
4659
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
404 for index, txt in self.__findHistory:
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
405 self.__ui.findtextCombo.addItem(txt, index)
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
406 self.__ui.findFormatCombo.setCurrentIndex(0) # 0 is always Hex
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
407 self.on_findFormatCombo_currentIndexChanged(0)
4652
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
408 self.__ui.findtextCombo.setEditText(text)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
409 self.__ui.findtextCombo.lineEdit().selectAll()
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
410 self.__ui.findtextCombo.setFocus()
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
411 self.on_findtextCombo_editTextChanged(text)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
412
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
413 self.__havefound = True
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
414 self.__findBackwards = False
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
415
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
416 def __showReplace(self, text=''):
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
417 """
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
418 Private slot to display this widget in replace mode.
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
419
4659
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
420 @param text hex encoded text to be shown in the findtext edit
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
421 @type str
4652
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
422 """
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
423 self.__replace = True
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
424
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
425 self.__ui.findtextCombo.clear()
4659
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
426 for index, txt in self.__findHistory:
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
427 self.__ui.findtextCombo.addItem(txt, index)
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
428 self.__ui.findFormatCombo.setCurrentIndex(0) # 0 is always Hex
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
429 self.on_findFormatCombo_currentIndexChanged(0)
4652
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
430 self.__ui.findtextCombo.setEditText(text)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
431 self.__ui.findtextCombo.lineEdit().selectAll()
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
432 self.__ui.findtextCombo.setFocus()
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
433 self.on_findtextCombo_editTextChanged(text)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
434
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
435 self.__ui.replacetextCombo.clear()
4659
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
436 for index, txt in self.__replaceHistory:
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
437 self.__ui.replacetextCombo.addItem(txt, index)
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
438 self.__ui.replaceFormatCombo.setCurrentIndex(0) # 0 is always Hex
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
439 self.on_replaceFormatCombo_currentIndexChanged(0)
4652
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
440 self.__ui.replacetextCombo.setEditText('')
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
441
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
442 self.__havefound = True
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
443 self.__findBackwards = False
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
444
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
445 def show(self, text=''):
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
446 """
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
447 Public slot to show the widget.
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
448
4659
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
449 @param text hex encoded text to be shown in the findtext edit
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
450 @type str
4652
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
451 """
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
452 if self.__replace:
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
453 self.__showReplace(text)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
454 else:
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
455 self.__showFind(text)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
456 super(HexEditSearchReplaceWidget, self).show()
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
457 self.activateWindow()
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
458
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
459 @pyqtSlot()
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
460 def on_closeButton_clicked(self):
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
461 """
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
462 Private slot to close the widget.
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
463 """
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
464 self.__editor.setFocus(Qt.OtherFocusReason)
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
465 self.close()
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
466
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
467 def keyPressEvent(self, event):
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
468 """
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
469 Protected slot to handle key press events.
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
470
4659
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
471 @param event reference to the key press event
2863d05e83c6 Improved the search/replace history handling of the hex editor and added input validators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4656
diff changeset
472 @type QKeyEvent
4652
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
473 """
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
474 if event.key() == Qt.Key_Escape:
a88a2ba7a48a Added search and replace capability to the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
475 self.close()
4660
9096e8a2df54 Added capability to search for a UTF-8 encoded text in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4659
diff changeset
476
4661
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
477 def __convertText(self, txt, oldFormat, newFormat):
4660
9096e8a2df54 Added capability to search for a UTF-8 encoded text in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4659
diff changeset
478 """
9096e8a2df54 Added capability to search for a UTF-8 encoded text in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4659
diff changeset
479 Private method to convert text from one format into another.
9096e8a2df54 Added capability to search for a UTF-8 encoded text in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4659
diff changeset
480
4661
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
481 @param txt text to be converted
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
482 @type str
4660
9096e8a2df54 Added capability to search for a UTF-8 encoded text in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4659
diff changeset
483 @param oldFormat current format of the text
9096e8a2df54 Added capability to search for a UTF-8 encoded text in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4659
diff changeset
484 @type str
9096e8a2df54 Added capability to search for a UTF-8 encoded text in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4659
diff changeset
485 @param newFormat format to convert to
9096e8a2df54 Added capability to search for a UTF-8 encoded text in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4659
diff changeset
486 @type str
9096e8a2df54 Added capability to search for a UTF-8 encoded text in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4659
diff changeset
487 @return converted text
9096e8a2df54 Added capability to search for a UTF-8 encoded text in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4659
diff changeset
488 @rtype str
9096e8a2df54 Added capability to search for a UTF-8 encoded text in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4659
diff changeset
489 """
4687
f1d921533cc5 Little improvements to the hex editor goto widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4662
diff changeset
490 if txt and oldFormat and newFormat and oldFormat != newFormat:
4662
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
491 # step 1: convert the text to a byte array using the old format
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
492 byteArray = self.__text2bytearray(txt, oldFormat)
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
493
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
494 # step 2: convert the byte array to text using the new format
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
495 txt = self.__bytearray2text(byteArray, newFormat)
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
496
4660
9096e8a2df54 Added capability to search for a UTF-8 encoded text in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4659
diff changeset
497 return txt
4661
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
498
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
499 def __int2bytearray(self, value):
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
500 """
4662
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
501 Private method to convert an integer to a byte array.
4661
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
502
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
503 @param value value to be converted
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
504 @type int
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
505 @return byte array for the given value
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
506 @rtype bytearray
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
507 """
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
508 ba = bytearray()
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
509 while value > 0:
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
510 value, modulus = divmod(value, 256)
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
511 ba.insert(0, modulus)
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
512
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
513 return ba
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
514
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
515 def __bytearray2int(self, array):
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
516 """
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
517 Private method to convert a byte array to an integer value.
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
518
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
519 @param array byte array to be converted
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
520 @type bytearray
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
521 @return integer value of the given array
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
522 @rtype int
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
523 """
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
524 value = 0
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
525 for b in array:
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
526 value = value * 256 + b
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
527
bf927c5576c6 Completed the supported formats of the search and replace entry of the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4660
diff changeset
528 return value
4662
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
529
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
530 def __text2bytearray(self, txt, dataFormat):
4662
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
531 """
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
532 Private method to convert a text to a byte array.
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
533
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
534 @param txt text to be converted
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
535 @type str
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
536 @param dataFormat format of the text
4662
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
537 @type str
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
538 @return converted text
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
539 @rtype bytearray
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
540 """
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
541 assert dataFormat in self.__formatAndValidators.keys()
4662
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
542
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
543 if dataFormat == "hex": # hex format
4662
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
544 ba = bytearray(QByteArray.fromHex(
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
545 bytes(txt, encoding="ascii")))
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
546 elif dataFormat == "dec": # decimal format
4662
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
547 ba = self.__int2bytearray(int(txt, 10))
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
548 elif dataFormat == "oct": # octal format
4662
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
549 ba = self.__int2bytearray(int(txt, 8))
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
550 elif dataFormat == "bin": # binary format
4662
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
551 ba = self.__int2bytearray(int(txt, 2))
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
552 elif dataFormat == "iso-8859-1": # latin-1/iso-8859-1 text
4662
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
553 ba = bytearray(txt, encoding="iso-8859-1")
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
554 elif dataFormat == "utf-8": # utf-8 text
4662
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
555 ba = bytearray(txt, encoding="utf-8")
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
556
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
557 return ba
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
558
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
559 def __bytearray2text(self, array, dataFormat):
4662
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
560 """
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
561 Private method to convert a byte array to a text.
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
562
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
563 @param array byte array to be converted
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
564 @type bytearray
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
565 @param dataFormat format of the text
4662
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
566 @type str
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
567 @return formatted text
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
568 @rtype str
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
569 """
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
570 assert dataFormat in self.__formatAndValidators.keys()
4662
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
571
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
572 if dataFormat == "hex": # hex format
4662
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
573 txt = "{0:x}".format(self.__bytearray2int(array))
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
574 elif dataFormat == "dec": # decimal format
4662
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
575 txt = "{0:d}".format(self.__bytearray2int(array))
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
576 elif dataFormat == "oct": # octal format
4662
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
577 txt = "{0:o}".format(self.__bytearray2int(array))
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
578 elif dataFormat == "bin": # binary format
4662
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
579 txt = "{0:b}".format(self.__bytearray2int(array))
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
580 elif dataFormat == "iso-8859-1": # latin-1/iso-8859-1 text
4662
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
581 txt = str(array, encoding="iso-8859-1")
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
582 elif dataFormat == "utf-8": # utf-8 text
4662
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
583 txt = str(array, encoding="utf-8", errors="replace")
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
584
33e6bd4b1721 Added function to change the search/replace text according to the selected format in the hex editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4661
diff changeset
585 return txt

eric ide

mercurial