From 56912a71084415eac2f447650279d833d9857686 Mon Sep 17 00:00:00 2001 From: glubsy Date: Mon, 13 Jul 2020 05:06:04 +0200 Subject: [PATCH] Make details dialog dockable --- qt/app.py | 4 +++- qt/details_dialog.py | 4 ++-- qt/pe/details_dialog.py | 18 +++++++++++------- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/qt/app.py b/qt/app.py index ac59dd0a..74b9ab74 100644 --- a/qt/app.py +++ b/qt/app.py @@ -7,7 +7,7 @@ import sys import os.path as op -from PyQt5.QtCore import QTimer, QObject, QUrl, pyqtSignal +from PyQt5.QtCore import QTimer, QObject, QUrl, pyqtSignal, Qt from PyQt5.QtGui import QDesktopServices from PyQt5.QtWidgets import QApplication, QFileDialog, QDialog, QMessageBox @@ -284,6 +284,8 @@ class DupeGuru(QObject): self.resultWindow.setParent(None) self.resultWindow = ResultWindow(self.directories_dialog, self) self.details_dialog = self._get_details_dialog_class()(self.resultWindow, self) + self.resultWindow.addDockWidget( + Qt.BottomDockWidgetArea, self.details_dialog) def show_results_window(self): self.showResultsWindow() diff --git a/qt/details_dialog.py b/qt/details_dialog.py index 57cc650b..3c06a641 100644 --- a/qt/details_dialog.py +++ b/qt/details_dialog.py @@ -7,12 +7,12 @@ # http://www.gnu.org/licenses/gpl-3.0.html from PyQt5.QtCore import Qt -from PyQt5.QtWidgets import QMainWindow +from PyQt5.QtWidgets import QDockWidget from .details_table import DetailsModel -class DetailsDialog(QMainWindow): +class DetailsDialog(QDockWidget): def __init__(self, parent, app, **kwargs): super().__init__(parent, Qt.Tool, **kwargs) self.app = app diff --git a/qt/pe/details_dialog.py b/qt/pe/details_dialog.py index 07ecdfcb..933105b9 100644 --- a/qt/pe/details_dialog.py +++ b/qt/pe/details_dialog.py @@ -25,8 +25,8 @@ class DetailsDialog(DetailsDialogBase): self.setWindowTitle(tr("Details")) self.resize(502, 502) self.setMinimumSize(QSize(250, 250)) + self.setAllowedAreas(Qt.AllDockWidgetAreas) self.splitter = QSplitter(Qt.Vertical, self) - self.setCentralWidget(self.splitter) self.topFrame = QFrame() self.topFrame.setFrameShape(QFrame.StyledPanel) self.horizontalLayout = QGridLayout() @@ -73,6 +73,8 @@ class DetailsDialog(DetailsDialogBase): # Late population needed here for connections to the toolbar self.vController.setupViewers( self.selectedImageViewer, self.referenceImageViewer) + # self.setCentralWidget(self.splitter) # only as QMainWindow + self.setWidget(self.splitter) # only as QDockWidget def _update(self): if self.vController is None: # Not yet constructed! @@ -89,15 +91,17 @@ class DetailsDialog(DetailsDialogBase): # --- Override def resizeEvent(self, event): - # HACK referenceViewer might be 1 pixel shorter in width + # HACK This ensures same size while shrinking. + # ReferenceViewer might be 1 pixel shorter in width # due to the toolbar in the middle keeping the same width, # so resizing in the GridLayout's engine leads to not enough space # left for the panel on the right. - # This ensures same size while shrinking at least: - self.horizontalLayout.setColumnMinimumWidth( - 0, self.selectedImageViewer.size().width()) - self.horizontalLayout.setColumnMinimumWidth( - 2, self.selectedImageViewer.size().width()) + # This doesn't work as a QDockWidget however! + # self.horizontalLayout.setColumnMinimumWidth( + # 0, self.selectedImageViewer.size().width()) + # self.horizontalLayout.setColumnMinimumWidth( + # 2, self.selectedImageViewer.size().width()) + # This works when expanding but it's ugly: if self.selectedImageViewer.size().width() > self.referenceImageViewer.size().width(): # print(f"""Before selected size: {self.selectedImageViewer.size()}\n""",