HexEdit/HexEditMainWindow.py

changeset 4670
d401ba329d24
parent 4669
d37bfc9ca3b9
child 4673
6fa2418f010c
equal deleted inserted replaced
4669:d37bfc9ca3b9 4670:d401ba329d24
21 from E5Gui.E5MainWindow import E5MainWindow 21 from E5Gui.E5MainWindow import E5MainWindow
22 from E5Gui import E5FileDialog, E5MessageBox 22 from E5Gui import E5FileDialog, E5MessageBox
23 23
24 from .HexEditWidget import HexEditWidget 24 from .HexEditWidget import HexEditWidget
25 from .HexEditSearchReplaceWidget import HexEditSearchReplaceWidget 25 from .HexEditSearchReplaceWidget import HexEditSearchReplaceWidget
26 from .HexEditGotoWidget import HexEditGotoWidget
26 27
27 import UI.PixmapCache 28 import UI.PixmapCache
28 import UI.Config 29 import UI.Config
29 30
30 import Preferences 31 import Preferences
31 32
32 33
33 # TODO: füge Goto Aktion inkl. Eingabewidget hinzu
34 class HexEditMainWindow(E5MainWindow): 34 class HexEditMainWindow(E5MainWindow):
35 """ 35 """
36 Class implementing the web browser main window. 36 Class implementing the web browser main window.
37 37
38 @signal editorClosed() emitted after the window was requested to close down 38 @signal editorClosed() emitted after the window was requested to close down
73 self.__editor = HexEditWidget() 73 self.__editor = HexEditWidget()
74 self.__searchWidget = HexEditSearchReplaceWidget( 74 self.__searchWidget = HexEditSearchReplaceWidget(
75 self.__editor, self, False) 75 self.__editor, self, False)
76 self.__replaceWidget = HexEditSearchReplaceWidget( 76 self.__replaceWidget = HexEditSearchReplaceWidget(
77 self.__editor, self, True) 77 self.__editor, self, True)
78 self.__gotoWidget = HexEditGotoWidget(self.__editor)
78 cw = QWidget() 79 cw = QWidget()
79 layout = QVBoxLayout(cw) 80 layout = QVBoxLayout(cw)
80 layout.setContentsMargins(1, 1, 1, 1) 81 layout.setContentsMargins(1, 1, 1, 1)
81 layout.setSpacing(1) 82 layout.setSpacing(1)
82 layout.addWidget(self.__editor) 83 layout.addWidget(self.__editor)
83 layout.addWidget(self.__searchWidget) 84 layout.addWidget(self.__searchWidget)
85 layout.addWidget(self.__gotoWidget)
84 cw.setLayout(layout) 86 cw.setLayout(layout)
85 layout.addWidget(self.__replaceWidget) 87 layout.addWidget(self.__replaceWidget)
86 self.__searchWidget.hide() 88 self.__searchWidget.hide()
87 self.__replaceWidget.hide() 89 self.__replaceWidget.hide()
90 self.__gotoWidget.hide()
88 self.setCentralWidget(cw) 91 self.setCentralWidget(cw)
89 92
90 g = Preferences.getGeometry("HexEditorGeometry") 93 g = Preferences.getGeometry("HexEditorGeometry")
91 if g.isEmpty(): 94 if g.isEmpty():
92 s = QSize(600, 500) 95 s = QSize(600, 500)
494 """ A dialog is shown to enter the data to search for and the""" 497 """ A dialog is shown to enter the data to search for and the"""
495 """ replacement data in various formats.</p>""" 498 """ replacement data in various formats.</p>"""
496 )) 499 ))
497 self.replaceAct.triggered.connect(self.__replace) 500 self.replaceAct.triggered.connect(self.__replace)
498 self.__actions.append(self.replaceAct) 501 self.__actions.append(self.replaceAct)
502
503 self.gotoAct = E5Action(
504 self.tr('Goto Offset'),
505 UI.PixmapCache.getIcon("goto.png"),
506 self.tr('&Goto Offset...'),
507 QKeySequence(QCoreApplication.translate(
508 'ViewManager', "Ctrl+G", "Search|Goto Offset")),
509 0,
510 self, 'hexEditor_edit_goto')
511 self.gotoAct.setStatusTip(self.tr('Goto Offset'))
512 self.gotoAct.setWhatsThis(self.tr(
513 """<b>Goto Offset</b>"""
514 """<p>Go to a specific address. A dialog is shown to enter"""
515 """ the movement data.</p>"""
516 ))
517 self.gotoAct.triggered.connect(self.__goto)
518 self.__actions.append(self.gotoAct)
499 519
500 self.redoAct.setEnabled(False) 520 self.redoAct.setEnabled(False)
501 self.__editor.canRedoChanged.connect(self.redoAct.setEnabled) 521 self.__editor.canRedoChanged.connect(self.redoAct.setEnabled)
502 522
503 self.undoAct.setEnabled(False) 523 self.undoAct.setEnabled(False)
664 menu.addAction(self.searchAct) 684 menu.addAction(self.searchAct)
665 menu.addAction(self.searchNextAct) 685 menu.addAction(self.searchNextAct)
666 menu.addAction(self.searchPrevAct) 686 menu.addAction(self.searchPrevAct)
667 menu.addAction(self.replaceAct) 687 menu.addAction(self.replaceAct)
668 menu.addSeparator() 688 menu.addSeparator()
689 menu.addAction(self.gotoAct)
690 menu.addSeparator()
669 menu.addAction(self.readonlyAct) 691 menu.addAction(self.readonlyAct)
670 692
671 if not self.__fromEric: 693 if not self.__fromEric:
672 menu = mb.addMenu(self.tr("Se&ttings")) 694 menu = mb.addMenu(self.tr("Se&ttings"))
673 menu.setTearOffEnabled(True) 695 menu.setTearOffEnabled(True)
797 if avail: 819 if avail:
798 start = self.__editor.getSelectionBegin() 820 start = self.__editor.getSelectionBegin()
799 end = self.__editor.getSelectionEnd() 821 end = self.__editor.getSelectionEnd()
800 slen = self.__editor.getSelectionLength() 822 slen = self.__editor.getSelectionLength()
801 self.__sbSelection.setText( 823 self.__sbSelection.setText(
802 self.tr("Selection: 0x{0:0{2}x} - 0x{1:0{2}x} ({3:n} Bytes)", 824 self.tr("Selection: 0x{0:0{2}x} - 0x{1:0{2}x} ({3:n} Bytes)",
803 "0: start, 1: end, 2: address width," 825 "0: start, 1: end, 2: address width,"
804 " 3: selection length") 826 " 3: selection length")
805 .format(start, end, self.__editor.addressWidth(), slen) 827 .format(start, end, self.__editor.addressWidth(), slen)
806 ) 828 )
807 else: 829 else:
1235 def __search(self): 1257 def __search(self):
1236 """ 1258 """
1237 Private method to handle the search action. 1259 Private method to handle the search action.
1238 """ 1260 """
1239 self.__replaceWidget.hide() 1261 self.__replaceWidget.hide()
1262 self.__gotoWidget.hide()
1240 if self.__editor.hasSelection(): 1263 if self.__editor.hasSelection():
1241 txt = self.__editor.selectionToHexString() 1264 txt = self.__editor.selectionToHexString()
1242 else: 1265 else:
1243 txt = "" 1266 txt = ""
1244 self.__searchWidget.show(txt) 1267 self.__searchWidget.show(txt)
1246 def __replace(self): 1269 def __replace(self):
1247 """ 1270 """
1248 Private method to handle the replace action. 1271 Private method to handle the replace action.
1249 """ 1272 """
1250 self.__searchWidget.hide() 1273 self.__searchWidget.hide()
1274 self.__gotoWidget.hide()
1251 if self.__editor.hasSelection(): 1275 if self.__editor.hasSelection():
1252 txt = self.__editor.selectionToHexString() 1276 txt = self.__editor.selectionToHexString()
1253 else: 1277 else:
1254 txt = "" 1278 txt = ""
1255 self.__replaceWidget.show(txt) 1279 self.__replaceWidget.show(txt)
1280
1281 def __goto(self):
1282 """
1283 Private method to handle the goto action.
1284 """
1285 self.__searchWidget.hide()
1286 self.__replaceWidget.hide()
1287 self.__gotoWidget.show()
1256 1288
1257 def preferencesChanged(self): 1289 def preferencesChanged(self):
1258 """ 1290 """
1259 Public method to (re-)read the various settings. 1291 Public method to (re-)read the various settings.
1260 """ 1292 """

eric ide

mercurial