diff --git a/qt/pe/details_dialog.py b/qt/pe/details_dialog.py index 230e0abc..c653713a 100644 --- a/qt/pe/details_dialog.py +++ b/qt/pe/details_dialog.py @@ -5,10 +5,8 @@ # http://www.gnu.org/licenses/gpl-3.0.html from PyQt5.QtCore import Qt, QSize, pyqtSlot, pyqtSignal -from PyQt5.QtGui import QPixmap, QIcon, QKeySequence from PyQt5.QtWidgets import (QLayout, QVBoxLayout, QAbstractItemView, QHBoxLayout, - QLabel, QSizePolicy, QToolBar, QToolButton, QGridLayout, QStyle, QAction, - QWidget, QApplication, QSpacerItem, QSplitter, QFrame ) + QSizePolicy, QGridLayout, QWidget, QSpacerItem, QSplitter, QFrame ) from hscommon.trans import trget from hscommon import desktop @@ -16,7 +14,7 @@ from ..details_table import DetailsTable from qtlib.util import createActions from qt.pe.image_viewer import ( - QWidgetImageViewer, ScrollAreaImageViewer, GraphicsViewViewer, + ViewerToolBar, QWidgetImageViewer, ScrollAreaImageViewer, GraphicsViewViewer, QWidgetController, ScrollAreaController, GraphicsViewController) tr = trget("ui") @@ -25,42 +23,7 @@ def __init__(self, parent, app): self.vController = None super().__init__(parent, app) - def setupActions(self): - # (name, shortcut, icon, desc, func) - ACTIONS = [ - ( - "actionZoomIn", - QKeySequence.ZoomIn, - "zoom-in", - tr("Increase zoom"), - self.zoomIn, - ), - ( - "actionZoomOut", - QKeySequence.ZoomOut, - "zoom-out", - tr("Decrease zoom"), - self.zoomOut, - ), - ( - "actionNormalSize", - QKeySequence.Refresh, - "zoom-original", - tr("Normal size"), - self.zoomNormalSize, - ), - ( - "actionBestFit", - tr("Ctrl+p"), - "zoom-best-fit", - tr("Best fit"), - self.zoomBestFit, - ) - ] - createActions(ACTIONS, self) - def _setupUi(self): - self.setupActions() self.setWindowTitle(tr("Details")) self.resize(502, 502) self.setMinimumSize(QSize(250, 250)) @@ -80,7 +43,12 @@ def _setupUi(self): self.horizontalLayout.setColumnStretch(0,24) self.horizontalLayout.setColumnStretch(1,1) self.horizontalLayout.setColumnStretch(2,24) - # self.horizontalLayout.setColumnStretch(3,0) + + # This avoids toolbar getting incorrectly resized when window resizes + self.horizontalLayout.setRowStretch(0,1) + self.horizontalLayout.setRowStretch(1,24) + self.horizontalLayout.setRowStretch(2,1) + self.horizontalLayout.setSpacing(1) self.selectedImageViewer = GraphicsViewViewer(self, "selectedImage") @@ -97,63 +65,26 @@ def _setupUi(self): # # self.horizontalLayout.addWidget(self.selectedImage) self.horizontalLayout.addWidget(self.selectedImageViewer, 0, 0, 3, 1) + # We use different types of controller depending on the + # underlying widgets we use to display images + # because their interface and methods might differ + if isinstance(self.selectedImageViewer, QWidgetImageViewer): + self.vController = QWidgetController(self) + elif isinstance(self.selectedImageViewer, ScrollAreaImageViewer): + self.vController = ScrollAreaController(self) + elif isinstance(self.selectedImageViewer, GraphicsViewViewer): + self.vController = GraphicsViewController(self) + # self.horizontalLayout.addItem(QSpacerItem(5,0, QSizePolicy.Minimum), # 1, 3, 1, 1, Qt.Alignment(Qt.AlignRight)) - # FIXME make a subclass to initialize buttons later - # FIXME use qwidgetaction to make the popup on resize work -> QWidgetAction::createWidget() - # FIXME figure out why margins are changing when the window is updating (after Normal Size, on resize) - # it seems toggling the scrollbars reduce viewport size and messes up sizeHint returned? - # thus shrinking the space available for the toolbar? - self.verticalToolBar = QToolBar(self) + self.verticalToolBar = ViewerToolBar(self, self.vController) # self.verticalToolBar.setMaximumWidth(10) self.verticalToolBar.setOrientation(Qt.Orientation(Qt.Vertical)) # self.subVLayout = QVBoxLayout(self) # self.subVLayout.addWidget(self.verticalToolBar) # self.horizontalLayout.addLayout(self.subVLayout) - self.buttonImgSwap = QToolButton(self.verticalToolBar) - self.buttonImgSwap.setToolButtonStyle(Qt.ToolButtonIconOnly) - self.buttonImgSwap.setIcon(QIcon.fromTheme('view-refresh', \ - self.style().standardIcon(QStyle.SP_BrowserReload))) - self.buttonImgSwap.setText('Swap images') - self.buttonImgSwap.setToolTip('Swap images') - self.buttonImgSwap.pressed.connect(self.swapImages) - self.buttonImgSwap.released.connect(self.swapImages) - - self.buttonZoomIn = QToolButton(self.verticalToolBar) - self.buttonZoomIn.setToolButtonStyle(Qt.ToolButtonIconOnly) - self.buttonZoomIn.setDefaultAction(self.actionZoomIn) - self.buttonZoomIn.setText('ZoomIn') - self.buttonZoomIn.setIcon(QIcon.fromTheme('zoom-in')) - - self.buttonZoomOut = QToolButton(self.verticalToolBar) - self.buttonZoomOut.setToolButtonStyle(Qt.ToolButtonIconOnly) - self.buttonZoomOut.setDefaultAction(self.actionZoomOut) - self.buttonZoomOut.setText('ZoomOut') - self.buttonZoomOut.setIcon(QIcon.fromTheme('zoom-out')) - self.buttonZoomOut.setEnabled(False) - - self.buttonNormalSize = QToolButton(self.verticalToolBar) - self.buttonNormalSize.setToolButtonStyle(Qt.ToolButtonIconOnly) - self.buttonNormalSize.setDefaultAction(self.actionNormalSize) - self.buttonNormalSize.setText('Normal Size') - self.buttonNormalSize.setIcon(QIcon.fromTheme('zoom-original')) - self.buttonNormalSize.setEnabled(True) - - self.buttonBestFit = QToolButton(self.verticalToolBar) - self.buttonBestFit.setToolButtonStyle(Qt.ToolButtonIconOnly) - self.buttonBestFit.setDefaultAction(self.actionBestFit) - self.buttonBestFit.setText('BestFit') - self.buttonBestFit.setIcon(QIcon.fromTheme('zoom-best-fit')) - self.buttonBestFit.setEnabled(False) - - self.verticalToolBar.addWidget(self.buttonImgSwap) - self.verticalToolBar.addWidget(self.buttonZoomIn) - self.verticalToolBar.addWidget(self.buttonZoomOut) - self.verticalToolBar.addWidget(self.buttonNormalSize) - self.verticalToolBar.addWidget(self.buttonBestFit) - self.horizontalLayout.addWidget(self.verticalToolBar, 1, 1, 1, 1, Qt.AlignCenter) self.referenceImageViewer = GraphicsViewViewer(self, "referenceImage") @@ -197,30 +128,7 @@ def _setupUi(self): # self.tableView.hide() - self.buttonImgSwap.setEnabled(False) - self.buttonZoomIn.setEnabled(False) - self.buttonZoomOut.setEnabled(False) - self.buttonNormalSize.setEnabled(False) - self.buttonBestFit.setEnabled(False) - - # We use different types of controller depending on the - # underlying widgets we use to display images - # because their interface and methods might differ - if isinstance(self.selectedImageViewer, QWidgetImageViewer): - self.vController = QWidgetController( - self.selectedImageViewer, - self.referenceImageViewer, - self) - elif isinstance(self.selectedImageViewer, ScrollAreaImageViewer): - self.vController = ScrollAreaController( - self.selectedImageViewer, - self.referenceImageViewer, - self) - elif isinstance(self.selectedImageViewer, GraphicsViewViewer): - self.vController = GraphicsViewController( - self.selectedImageViewer, - self.referenceImageViewer, - self) + self.vController.setupViewers(self.selectedImageViewer, self.referenceImageViewer) def _update(self): if self.vController is None: # Not yet constructed! @@ -274,25 +182,3 @@ def refresh(self): if self.isVisible(): self._update() - # ImageViewers - @pyqtSlot() - def swapImages(self): - self.vController.swapPixmaps() - # swap the columns in the details table as well - self.tableView.horizontalHeader().swapSections(1, 2) - - @pyqtSlot() - def zoomIn(self): - self.vController.zoomIn() - - @pyqtSlot() - def zoomOut(self): - self.vController.zoomOut() - - @pyqtSlot() - def zoomBestFit(self): - self.vController.ScaleToBestFit() - - @pyqtSlot() - def zoomNormalSize(self): - self.vController.zoomNormalSize() diff --git a/qt/pe/image_viewer.py b/qt/pe/image_viewer.py index f5b8d961..c7783c5d 100644 --- a/qt/pe/image_viewer.py +++ b/qt/pe/image_viewer.py @@ -3,25 +3,130 @@ # http://www.gnu.org/licenses/gpl-3.0.html from PyQt5.QtCore import QObject, Qt, QSize, QRectF, QPointF, QPoint, pyqtSlot, pyqtSignal, QEvent -from PyQt5.QtGui import QPixmap, QPainter, QPalette, QCursor, QTransform -from PyQt5.QtWidgets import ( QLabel, QSizePolicy, QWidget, QScrollArea, - QScrollBar, QApplication, QAbstractScrollArea ) +from PyQt5.QtGui import QPixmap, QPainter, QPalette, QCursor, QTransform, QIcon, QKeySequence +from PyQt5.QtWidgets import ( QToolBar, QToolButton, QAction, QLabel, QSizePolicy, QWidget, QScrollArea, + QScrollBar, QApplication, QAbstractScrollArea, QStyle) +from hscommon.trans import trget +tr = trget("ui") MAX_SCALE = 12.0 MIN_SCALE = 0.1 + +class ViewerToolBar(QToolBar): + def __init__(self, parent, controller): + super().__init__() + self.parent = parent + self.controller = controller + self.setupActions(controller) + self.createButtons() + self.buttonImgSwap.setEnabled(False) + self.buttonZoomIn.setEnabled(False) + self.buttonZoomOut.setEnabled(False) + self.buttonNormalSize.setEnabled(False) + self.buttonBestFit.setEnabled(False) + + def createActions(self, actions, target): + # TODO try with QWidgetAction() instead in order to have + # the popup menu work in the toolbar (if resized below minimum height) + # actions = [(name, shortcut, icon, desc, func)] + for name, shortcut, icon, desc, func in actions: + action = QAction(target) + if icon: + action.setIcon(QIcon(QPixmap(":/" + icon))) + if shortcut: + action.setShortcut(shortcut) + action.setText(desc) + action.triggered.connect(func) + setattr(target, name, action) + + def setupActions(self, controller): + ACTIONS = [ + ( + "actionZoomIn", + QKeySequence.ZoomIn, + "zoom-in", + tr("Increase zoom"), + controller.zoomIn, + ), + ( + "actionZoomOut", + QKeySequence.ZoomOut, + "zoom-out", + tr("Decrease zoom"), + controller.zoomOut, + ), + ( + "actionNormalSize", + QKeySequence.Refresh, + "zoom-original", + tr("Normal size"), + controller.zoomNormalSize, + ), + ( + "actionBestFit", + tr("Ctrl+p"), + "zoom-best-fit", + tr("Best fit"), + controller.zoomBestFit, + ) + ] + self.createActions(ACTIONS, self.parent) + + + def createButtons(self): + self.buttonImgSwap = QToolButton(self) + self.buttonImgSwap.setToolButtonStyle(Qt.ToolButtonIconOnly) + self.buttonImgSwap.setIcon(QIcon.fromTheme('view-refresh', \ + self.style().standardIcon(QStyle.SP_BrowserReload))) + self.buttonImgSwap.setText('Swap images') + self.buttonImgSwap.setToolTip('Swap images') + self.buttonImgSwap.pressed.connect(self.controller.swapImages) + self.buttonImgSwap.released.connect(self.controller.swapImages) + + self.buttonZoomIn = QToolButton(self) + self.buttonZoomIn.setToolButtonStyle(Qt.ToolButtonIconOnly) + self.buttonZoomIn.setDefaultAction(self.parent.actionZoomIn) + self.buttonZoomIn.setText('ZoomIn') + self.buttonZoomIn.setIcon(QIcon.fromTheme('zoom-in')) + + self.buttonZoomOut = QToolButton(self) + self.buttonZoomOut.setToolButtonStyle(Qt.ToolButtonIconOnly) + self.buttonZoomOut.setDefaultAction(self.parent.actionZoomOut) + self.buttonZoomOut.setText('ZoomOut') + self.buttonZoomOut.setIcon(QIcon.fromTheme('zoom-out')) + self.buttonZoomOut.setEnabled(False) + + self.buttonNormalSize = QToolButton(self) + self.buttonNormalSize.setToolButtonStyle(Qt.ToolButtonIconOnly) + self.buttonNormalSize.setDefaultAction(self.parent.actionNormalSize) + self.buttonNormalSize.setText('Normal Size') + self.buttonNormalSize.setIcon(QIcon.fromTheme('zoom-original')) + self.buttonNormalSize.setEnabled(True) + + self.buttonBestFit = QToolButton(self) + self.buttonBestFit.setToolButtonStyle(Qt.ToolButtonIconOnly) + self.buttonBestFit.setDefaultAction(self.parent.actionBestFit) + self.buttonBestFit.setText('BestFit') + self.buttonBestFit.setIcon(QIcon.fromTheme('zoom-best-fit')) + self.buttonBestFit.setEnabled(False) + + self.addWidget(self.buttonImgSwap) + self.addWidget(self.buttonZoomIn) + self.addWidget(self.buttonZoomOut) + self.addWidget(self.buttonNormalSize) + self.addWidget(self.buttonBestFit) + + class BaseController(QObject): """Abstract Base class. Singleton. Base proxy interface to keep image viewers synchronized. Relays function calls, keep tracks of things.""" - def __init__(self, selectedViewer, referenceViewer, parent): + def __init__(self, parent): super().__init__() - self.selectedViewer = selectedViewer - self.referenceViewer = referenceViewer - self.selectedViewer.controller = self - self.referenceViewer.controller = self - self._setupConnections() + self.selectedViewer = None + self.referenceViewer = None # cached pixmaps self.selectedPixmap = QPixmap() self.referencePixmap = QPixmap() @@ -33,6 +138,13 @@ def __init__(self, selectedViewer, referenceViewer, parent): self.parent = parent #To change buttons' states self.cached_group = None + def setupViewers(self, selectedViewer, referenceViewer): + self.selectedViewer = selectedViewer + self.referenceViewer = referenceViewer + self.selectedViewer.controller = self + self.referenceViewer.controller = self + self._setupConnections() + def _setupConnections(self): self.selectedViewer.connectMouseSignals() self.referenceViewer.connectMouseSignals() @@ -51,12 +163,12 @@ def updateView(self, ref, dupe, group): if ref is dupe: # currently selected file is the actual reference file self.referencePixmap = QPixmap() self.scaledReferencePixmap = QPixmap() - self.parent.buttonImgSwap.setEnabled(False) - self.parent.buttonNormalSize.setEnabled(True) + self.parent.verticalToolBar.buttonImgSwap.setEnabled(False) + self.parent.verticalToolBar.buttonNormalSize.setEnabled(True) else: self.referencePixmap = QPixmap(str(ref.path)) - self.parent.buttonImgSwap.setEnabled(True) - self.parent.buttonNormalSize.setEnabled(True) + self.parent.verticalToolBar.buttonImgSwap.setEnabled(True) + self.parent.verticalToolBar.buttonNormalSize.setEnabled(True) self.updateBothImages(same_group) self.centerViews(same_group and self.referencePixmap.isNull()) @@ -123,10 +235,10 @@ def resetState(self): self.centerViews() #FIXME move buttons somwhere else - self.parent.buttonZoomIn.setEnabled(False) - self.parent.buttonZoomOut.setEnabled(False) - self.parent.buttonBestFit.setEnabled(False) # active mode by default - self.parent.buttonNormalSize.setEnabled(True) + self.parent.verticalToolBar.buttonZoomIn.setEnabled(False) + self.parent.verticalToolBar.buttonZoomOut.setEnabled(False) + self.parent.verticalToolBar.buttonBestFit.setEnabled(False) # active mode by default + self.parent.verticalToolBar.buttonNormalSize.setEnabled(True) def resetViewersState(self): """No item from the model, disable and clear everything.""" @@ -146,11 +258,11 @@ def resetViewersState(self): self.centerViews() #FIXME move buttons somwhere else - self.parent.buttonZoomIn.setEnabled(False) - self.parent.buttonZoomOut.setEnabled(False) - self.parent.buttonBestFit.setEnabled(False) # active mode by default - self.parent.buttonImgSwap.setEnabled(False) - self.parent.buttonNormalSize.setEnabled(False) + self.parent.verticalToolBar.buttonZoomIn.setEnabled(False) + self.parent.verticalToolBar.buttonZoomOut.setEnabled(False) + self.parent.verticalToolBar.buttonBestFit.setEnabled(False) # active mode by default + self.parent.verticalToolBar.buttonImgSwap.setEnabled(False) + self.parent.verticalToolBar.buttonNormalSize.setEnabled(False) self.selectedViewer.setImage(self.selectedPixmap) # null self.selectedViewer.setEnabled(False) @@ -182,13 +294,13 @@ def scaleImagesAt(self, scale): self.updateButtons() def updateButtons(self): - self.parent.buttonZoomIn.setEnabled(self.current_scale < MAX_SCALE) - self.parent.buttonZoomOut.setEnabled(self.current_scale > MIN_SCALE) - self.parent.buttonBestFit.setEnabled(self.bestFit is False) - self.parent.buttonNormalSize.setEnabled(round(self.current_scale, 1) != 1.0) + self.parent.verticalToolBar.buttonZoomIn.setEnabled(self.current_scale < MAX_SCALE) + self.parent.verticalToolBar.buttonZoomOut.setEnabled(self.current_scale > MIN_SCALE) + self.parent.verticalToolBar.buttonBestFit.setEnabled(self.bestFit is False) + self.parent.verticalToolBar.buttonNormalSize.setEnabled(round(self.current_scale, 1) != 1.0) @pyqtSlot() - def ScaleToBestFit(self): + def zoomBestFit(self): """Setup before scaling to bestfit""" self.setBestFit(True) self.current_scale = 1.0 @@ -205,10 +317,10 @@ def ScaleToBestFit(self): self._updateImage(self.referencePixmap, self.scaledReferencePixmap, self.referenceViewer, target_size, True) self.centerViews() - self.parent.buttonBestFit.setEnabled(False) - self.parent.buttonZoomOut.setEnabled(False) - self.parent.buttonZoomIn.setEnabled(False) - self.parent.buttonNormalSize.setEnabled(True) + self.parent.verticalToolBar.buttonBestFit.setEnabled(False) + self.parent.verticalToolBar.buttonZoomOut.setEnabled(False) + self.parent.verticalToolBar.buttonZoomIn.setEnabled(False) + self.parent.verticalToolBar.buttonNormalSize.setEnabled(True) def setBestFit(self, value): self.bestFit = value @@ -228,10 +340,10 @@ def zoomNormalSize(self): self.selectedViewer.scaleToNormalSize() self.referenceViewer.scaleToNormalSize() - self.parent.buttonNormalSize.setEnabled(False) - self.parent.buttonZoomIn.setEnabled(True) - self.parent.buttonZoomOut.setEnabled(True) - self.parent.buttonBestFit.setEnabled(True) + self.parent.verticalToolBar.buttonNormalSize.setEnabled(False) + self.parent.verticalToolBar.buttonZoomIn.setEnabled(True) + self.parent.verticalToolBar.buttonZoomOut.setEnabled(True) + self.parent.verticalToolBar.buttonBestFit.setEnabled(True) def centerViews(self, only_selected=False): self.selectedViewer.centerViewAndUpdate() @@ -239,11 +351,16 @@ def centerViews(self, only_selected=False): return self.referenceViewer.centerViewAndUpdate() + @pyqtSlot() + def swapImages(self): + # swap the columns in the details table as well + self.parent.tableView.horizontalHeader().swapSections(1, 2) + class QWidgetController(BaseController): """Specialized version for QWidget-based viewers.""" - def __init__(self, selectedViewer, referenceViewer, parent): - super().__init__(selectedViewer, referenceViewer, parent) + def __init__(self, parent): + super().__init__(parent) @pyqtSlot(QPointF) def onDraggedMouse(self, delta): @@ -253,16 +370,17 @@ def onDraggedMouse(self, delta): self.referenceViewer.onDraggedMouse(delta) @pyqtSlot() - def swapPixmaps(self): + def swapImages(self): self.selectedViewer.getPixmap().swap(self.referenceViewer.getPixmap()) self.selectedViewer.centerViewAndUpdate() self.referenceViewer.centerViewAndUpdate() + super().swapImages() class ScrollAreaController(BaseController): """Specialized version fro QLabel-based viewers.""" - def __init__(self, selectedViewer, referenceViewer, parent): - super().__init__(selectedViewer, referenceViewer, parent) + def __init__(self, parent): + super().__init__(parent) def _setupConnections(self): super()._setupConnections() @@ -290,10 +408,11 @@ def onDraggedMouse(self, delta): self.referenceViewer.ignore_signal = False @pyqtSlot() - def swapPixmaps(self): + def swapImages(self): self.referenceViewer._pixmap.swap(self.selectedViewer._pixmap) self.referenceViewer.setCachedPixmap() self.selectedViewer.setCachedPixmap() + super().swapImages() @pyqtSlot(float, QPointF) def onMouseWheel(self, scale, delta): @@ -327,9 +446,9 @@ def scaleImagesBy(self, factor): # self.selectedViewer.adjustScrollBarsFactor(factor) @pyqtSlot() - def ScaleToBestFit(self): + def zoomBestFit(self): # Disable scrollbars to avoid GridLayout size rounding "error" - super().ScaleToBestFit() + super().zoomBestFit() print("toggling scrollbars") self.selectedViewer.toggleScrollBars() self.referenceViewer.toggleScrollBars() @@ -338,8 +457,8 @@ def ScaleToBestFit(self): class GraphicsViewController(BaseController): """Specialized version fro QGraphicsView-based viewers.""" - def __init__(self, selectedViewer, referenceViewer, parent): - super().__init__(selectedViewer, referenceViewer, parent) + def __init__(self, parent): + super().__init__(parent) def _setupConnections(self): super()._setupConnections() @@ -386,13 +505,14 @@ def onHScrollBarChanged(self, value): self.referenceViewer._horizontalScrollBar.setValue(value) @pyqtSlot() - def swapPixmaps(self): + def swapImages(self): self.referenceViewer._pixmap.swap(self.selectedViewer._pixmap) self.referenceViewer.setCachedPixmap() self.selectedViewer.setCachedPixmap() + super().swapImages() @pyqtSlot() - def ScaleToBestFit(self): + def zoomBestFit(self): """Setup before scaling to bestfit""" self.setBestFit(True) self.current_scale = 1.0 @@ -400,10 +520,10 @@ def ScaleToBestFit(self): self.selectedViewer.fitScale() self.referenceViewer.fitScale() - self.parent.buttonBestFit.setEnabled(False) - self.parent.buttonZoomOut.setEnabled(False) - self.parent.buttonZoomIn.setEnabled(False) - self.parent.buttonNormalSize.setEnabled(True) + self.parent.verticalToolBar.buttonBestFit.setEnabled(False) + self.parent.verticalToolBar.buttonZoomOut.setEnabled(False) + self.parent.verticalToolBar.buttonZoomIn.setEnabled(False) + self.parent.verticalToolBar.buttonNormalSize.setEnabled(True) def updateView(self, ref, dupe, group): # Keep current scale accross dupes from the same group @@ -417,12 +537,12 @@ def updateView(self, ref, dupe, group): self.selectedPixmap = QPixmap(str(dupe.path)) if ref is dupe: # currently selected file is the actual reference file self.referencePixmap = QPixmap() - self.parent.buttonImgSwap.setEnabled(False) - self.parent.buttonNormalSize.setEnabled(True) + self.parent.verticalToolBar.buttonImgSwap.setEnabled(False) + self.parent.verticalToolBar.buttonNormalSize.setEnabled(True) else: self.referencePixmap = QPixmap(str(ref.path)) - self.parent.buttonImgSwap.setEnabled(True) - self.parent.buttonNormalSize.setEnabled(True) + self.parent.verticalToolBar.buttonImgSwap.setEnabled(True) + self.parent.verticalToolBar.buttonNormalSize.setEnabled(True) self.selectedViewer.setImage(self.selectedPixmap) self.referenceViewer.setImage(self.referencePixmap) @@ -469,10 +589,10 @@ def resetState(self): # self.centerViews() #FIXME move buttons somwhere else - self.parent.buttonZoomIn.setEnabled(False) - self.parent.buttonZoomOut.setEnabled(False) - self.parent.buttonBestFit.setEnabled(False) # active mode by default - self.parent.buttonNormalSize.setEnabled(True) + self.parent.verticalToolBar.buttonZoomIn.setEnabled(False) + self.parent.verticalToolBar.buttonZoomOut.setEnabled(False) + self.parent.verticalToolBar.buttonBestFit.setEnabled(False) # active mode by default + self.parent.verticalToolBar.buttonNormalSize.setEnabled(True) def resetViewersState(self): """No item from the model, disable and clear everything.""" @@ -490,11 +610,11 @@ def resetViewersState(self): # self.centerViews() #FIXME move buttons somwhere else - self.parent.buttonZoomIn.setEnabled(False) - self.parent.buttonZoomOut.setEnabled(False) - self.parent.buttonBestFit.setEnabled(False) # active mode by default - self.parent.buttonImgSwap.setEnabled(False) - self.parent.buttonNormalSize.setEnabled(False) + self.parent.verticalToolBar.buttonZoomIn.setEnabled(False) + self.parent.verticalToolBar.buttonZoomOut.setEnabled(False) + self.parent.verticalToolBar.buttonBestFit.setEnabled(False) # active mode by default + self.parent.verticalToolBar.buttonImgSwap.setEnabled(False) + self.parent.verticalToolBar.buttonNormalSize.setEnabled(False) self.selectedViewer.setImage(self.selectedPixmap) # null self.selectedViewer.setEnabled(False) @@ -517,13 +637,6 @@ def scaleImagesBy(self, factor): self.selectedViewer.centerOn(self.selectedViewer._centerPoint) - # self.selectedViewer.updateCenterPoint() - # self.referenceViewer.setCenter(self.selectedViewer.getCenter()) - # self.selectedViewer.setCenter(self.referenceViewer.getCenter()) - # self.referenceViewer.setCenter(self.selectedViewer.getCenter()) - # The other is automatically updated via sigals - # self.selectedViewer.adjustScrollBarsFactor(factor) - @@ -1156,7 +1269,7 @@ def mouseMoveEvent(self, event): super().mouseMoveEvent(event) def updateCenterPoint(self): - self._centerPoint = self.mapToScene( self.viewport().rect().center()) + self._centerPoint = self.mapToScene( self.rect().center()) def wheelEvent(self, event): if self.bestFit or MIN_SCALE > self.current_scale > MAX_SCALE: