T-573 修复封面画廊候选图宽度
This commit is contained in:
+45
-10
@@ -2,7 +2,7 @@
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from PySide6.QtCore import QEvent
|
||||
from PySide6.QtCore import QEvent, QSize
|
||||
|
||||
from ..models import GenerateTaskTableModel
|
||||
from ..widgets import *
|
||||
@@ -188,13 +188,14 @@ class CoverGalleryDialog(QDialog):
|
||||
self.status_label.setWordWrap(True)
|
||||
layout.addWidget(self.status_label)
|
||||
|
||||
scroll = QScrollArea()
|
||||
scroll.setObjectName("coverGalleryScrollArea")
|
||||
scroll.setWidgetResizable(False)
|
||||
scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded)
|
||||
scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
|
||||
content = QWidget()
|
||||
self.candidate_layout = QHBoxLayout(content)
|
||||
self.candidate_scroll = QScrollArea()
|
||||
self.candidate_scroll.setObjectName("coverGalleryScrollArea")
|
||||
self.candidate_scroll.setWidgetResizable(False)
|
||||
self.candidate_scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded)
|
||||
self.candidate_scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
|
||||
self.candidate_content = QWidget()
|
||||
self.candidate_content.setObjectName("coverGalleryCandidateContent")
|
||||
self.candidate_layout = QHBoxLayout(self.candidate_content)
|
||||
self.candidate_layout.setContentsMargins(0, 0, 0, 0)
|
||||
self.candidate_layout.setSpacing(12)
|
||||
if self.candidates:
|
||||
@@ -207,8 +208,9 @@ class CoverGalleryDialog(QDialog):
|
||||
empty_label.setMinimumSize(320, self.THUMBNAIL_SIZE)
|
||||
empty_label.setAlignment(Qt.AlignCenter)
|
||||
self.candidate_layout.addWidget(empty_label)
|
||||
scroll.setWidget(content)
|
||||
layout.addWidget(scroll, 1)
|
||||
self._sync_candidate_content_size()
|
||||
self.candidate_scroll.setWidget(self.candidate_content)
|
||||
layout.addWidget(self.candidate_scroll, 1)
|
||||
return panel
|
||||
|
||||
def _candidate_item(self, candidate_path, index):
|
||||
@@ -252,6 +254,38 @@ class CoverGalleryDialog(QDialog):
|
||||
layout.addStretch(1)
|
||||
return item
|
||||
|
||||
def _sync_candidate_content_size(self):
|
||||
layout = getattr(self, "candidate_layout", None)
|
||||
content = getattr(self, "candidate_content", None)
|
||||
if layout is None or content is None:
|
||||
return
|
||||
layout.activate()
|
||||
margins = layout.contentsMargins()
|
||||
spacing = max(0, layout.spacing())
|
||||
hint = layout.sizeHint()
|
||||
if self.candidates:
|
||||
candidate_count = len(self.candidates)
|
||||
min_width = (
|
||||
margins.left()
|
||||
+ margins.right()
|
||||
+ candidate_count * (self.THUMBNAIL_SIZE + 16)
|
||||
+ max(0, candidate_count - 1) * spacing
|
||||
)
|
||||
else:
|
||||
min_width = margins.left() + margins.right() + 320
|
||||
min_height = max(
|
||||
self.THUMBNAIL_SIZE,
|
||||
hint.height(),
|
||||
content.minimumHeight(),
|
||||
)
|
||||
size = QSize(max(min_width, hint.width()), min_height)
|
||||
content.setMinimumSize(size)
|
||||
content.resize(size)
|
||||
content.updateGeometry()
|
||||
scroll = getattr(self, "candidate_scroll", None)
|
||||
if scroll is not None:
|
||||
scroll.updateGeometry()
|
||||
|
||||
def _sync_initial_selection(self):
|
||||
for candidate_path, radio in self.candidate_buttons.items():
|
||||
if _same_file(candidate_path, self.current_path):
|
||||
@@ -560,6 +594,7 @@ class CoverGalleryDialog(QDialog):
|
||||
empty_label.setMinimumSize(320, self.THUMBNAIL_SIZE)
|
||||
empty_label.setAlignment(Qt.AlignCenter)
|
||||
self.candidate_layout.addWidget(empty_label)
|
||||
self._sync_candidate_content_size()
|
||||
self._install_navigation_event_filters()
|
||||
|
||||
def _on_regenerate_progress(self, payload):
|
||||
|
||||
Reference in New Issue
Block a user