diff options
Diffstat (limited to 'qhexedit2/python/python2_pyqt4/searchdialog.py')
-rw-r--r-- | qhexedit2/python/python2_pyqt4/searchdialog.py | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/qhexedit2/python/python2_pyqt4/searchdialog.py b/qhexedit2/python/python2_pyqt4/searchdialog.py new file mode 100644 index 0000000..03cab58 --- /dev/null +++ b/qhexedit2/python/python2_pyqt4/searchdialog.py @@ -0,0 +1,84 @@ +#!/usr/bin/env python + +from PyQt4 import QtCore, QtGui + +from Ui_searchdialog import Ui_SearchDialog + + +class SearchDialog(QtGui.QDialog): + def __init__(self, parent, hexEdit): + super(SearchDialog, self).__init__() + self.ui = Ui_SearchDialog() + self.ui.setupUi(self) + self._hexEdit = hexEdit + + def findNext(self): + startIdx = self._hexEdit.cursorPosition() + findBa = self.getContent(self.ui.cbFindFormat.currentIndex(), self.ui.cbFind.currentText()) + idx = -1 + + if findBa.length() > 0: + if self.ui.cbBackwards.isChecked(): + idx = self._hexEdit.lastIndexOf(findBa, startIdx) + else: + idx = self._hexEdit.indexOf(findBa, startIdx) + + return idx + + @QtCore.pyqtSlot() + def on_pbFind_clicked(self): + self.findNext() + + @QtCore.pyqtSlot() + def on_pbReplace_clicked(self): + idx = self.findNext() + if idx >= 0: + replaceBa = self.getContent(self.ui.cbReplaceFormat.currentIndex(), self.ui.cbReplace.currentText()) + self.replaceOccurrence(idx, replaceBa) + + @QtCore.pyqtSlot() + def on_pbReplaceAll_clicked(self): + replaceCounter = 0 + idx = 0 + goOn = QtGui.QMessageBox.Yes + + while (idx >= 0) and (goOn == QtGui.QMessageBox.Yes): + idx = self.findNext() + if idx >= 0: + replaceBa = self.getContent(self.ui.cbReplaceFormat.currentIndex(), self.ui.cbReplace.currentText()) + result = self.replaceOccurrence(idx, replaceBa) + + if result == QtGui.QMessageBox.Yes: + replaceCounter += 1 + + if result == QtGui.QMessageBox.Cancel: + goOn = QtGui.QMessageBox.Cancel + + if replaceCounter > 0: + QtGui.QMessageBox.information(self, "QHexEdit", "%s occurrences replaced" % replaceCounter) + + def getContent(self, comboIndex, inputStr): + if comboIndex == 0: # hex + findBa = QtCore.QByteArray.fromHex(inputStr.toAscii()) + elif comboIndex == 1: # text + findBa = inputStr.toUtf8() + return findBa + + def replaceOccurrence(self, idx, replaceBa): + result = QtGui.QMessageBox.Yes + + if replaceBa.length() >= 0: + if self.ui.cbPrompt.isChecked(): + result = QtGui.QMessageBox.question(self, "QHexEdit", "Replace occurrence?", + QtGui.QMessageBox.Yes | QtGui.QMessageBox.No | QtGui.QMessageBox.Cancel) + + if result == QtGui.QMessageBox.Yes: + self._hexEdit.replace(idx, replaceBa.length(), replaceBa) + self._hexEdit.update() + + else: + self._hexEdit.replace(idx, replaceBa.length(), replaceBa) + + return result + +
\ No newline at end of file |