fix: allow pinning the 3rd deck panel from split mode; dedupe header height
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -4443,7 +4443,7 @@ class MainWindow(QMainWindow):
|
|||||||
# widget) rather than _control_deck, which becomes a stack page.
|
# widget) rather than _control_deck, which becomes a stack page.
|
||||||
from PyQt6.QtWidgets import QSizePolicy
|
from PyQt6.QtWidgets import QSizePolicy
|
||||||
_tabbed_h = self._control_deck.sizeHint().height()
|
_tabbed_h = self._control_deck.sizeHint().height()
|
||||||
_split_h = 22 + max(p.sizeHint().height() for p in self._deck_panels)
|
_split_h = self._SPLIT_HEADER_H + max(p.sizeHint().height() for p in self._deck_panels)
|
||||||
self._deck_stack.setMinimumHeight(max(_tabbed_h, _split_h))
|
self._deck_stack.setMinimumHeight(max(_tabbed_h, _split_h))
|
||||||
self._deck_stack.setSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed)
|
self._deck_stack.setSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed)
|
||||||
|
|
||||||
@@ -4717,6 +4717,7 @@ class MainWindow(QMainWindow):
|
|||||||
# ── Changelog ────────────────────────────────────────────
|
# ── Changelog ────────────────────────────────────────────
|
||||||
|
|
||||||
APP_VERSION = "1.0"
|
APP_VERSION = "1.0"
|
||||||
|
_SPLIT_HEADER_H = 22 # deck split-column header height (keep both deck spots in sync)
|
||||||
CHANGELOG: list[tuple[str, list[str]]] = [
|
CHANGELOG: list[tuple[str, list[str]]] = [
|
||||||
("1.0", [
|
("1.0", [
|
||||||
"<b>New export layout</b> — clips are now stored in per-video "
|
"<b>New export layout</b> — clips are now stored in per-video "
|
||||||
@@ -5038,6 +5039,8 @@ class MainWindow(QMainWindow):
|
|||||||
side-by-side as resizable columns (mirrors _refresh_layout)."""
|
side-by-side as resizable columns (mirrors _refresh_layout)."""
|
||||||
pinned = [p for p in self._deck_panels if p._pinned]
|
pinned = [p for p in self._deck_panels if p._pinned]
|
||||||
prev = self._deck_loading
|
prev = self._deck_loading
|
||||||
|
# Defensive: suppress _save_deck_layout during a rebuild (mirrors the
|
||||||
|
# playlist's _loading_tabs). No re-entrant save path exists today.
|
||||||
self._deck_loading = True
|
self._deck_loading = True
|
||||||
try:
|
try:
|
||||||
self._detach_deck_panels()
|
self._detach_deck_panels()
|
||||||
@@ -5068,7 +5071,7 @@ class MainWindow(QMainWindow):
|
|||||||
lambda _=False, p=panel: self._on_deck_unpin(p))
|
lambda _=False, p=panel: self._on_deck_unpin(p))
|
||||||
hdr.addWidget(lbl, 1)
|
hdr.addWidget(lbl, 1)
|
||||||
hdr.addWidget(btn)
|
hdr.addWidget(btn)
|
||||||
header.setFixedHeight(22)
|
header.setFixedHeight(self._SPLIT_HEADER_H)
|
||||||
# QTabWidget hides non-current pages; reparented panels stay
|
# QTabWidget hides non-current pages; reparented panels stay
|
||||||
# hidden and render blank unless re-shown.
|
# hidden and render blank unless re-shown.
|
||||||
panel.setVisible(True)
|
panel.setVisible(True)
|
||||||
@@ -5078,6 +5081,9 @@ class MainWindow(QMainWindow):
|
|||||||
if leftovers: # keep unpinned panels reachable as a tab-column
|
if leftovers: # keep unpinned panels reachable as a tab-column
|
||||||
lt = QTabWidget()
|
lt = QTabWidget()
|
||||||
lt.setDocumentMode(True)
|
lt.setDocumentMode(True)
|
||||||
|
lt.setTabBar(_DeckTabBar())
|
||||||
|
lt.tabBar().pin_toggle_requested.connect(
|
||||||
|
lambda i, w=lt: self._toggle_panel_pin(w.widget(i)))
|
||||||
for panel in leftovers:
|
for panel in leftovers:
|
||||||
panel.setVisible(True)
|
panel.setVisible(True)
|
||||||
lt.addTab(panel, panel._label)
|
lt.addTab(panel, panel._label)
|
||||||
@@ -5093,9 +5099,7 @@ class MainWindow(QMainWindow):
|
|||||||
finally:
|
finally:
|
||||||
self._deck_loading = prev
|
self._deck_loading = prev
|
||||||
|
|
||||||
def _on_deck_pin_toggle(self, idx: int) -> None:
|
def _toggle_panel_pin(self, panel) -> None:
|
||||||
# Pin is only offered in tabbed mode, so the index maps to a deck tab.
|
|
||||||
panel = self._control_deck.widget(idx)
|
|
||||||
if panel is None:
|
if panel is None:
|
||||||
return
|
return
|
||||||
panel._pinned = not panel._pinned
|
panel._pinned = not panel._pinned
|
||||||
@@ -5104,6 +5108,9 @@ class MainWindow(QMainWindow):
|
|||||||
self._refresh_deck_layout()
|
self._refresh_deck_layout()
|
||||||
self._save_deck_layout()
|
self._save_deck_layout()
|
||||||
|
|
||||||
|
def _on_deck_pin_toggle(self, idx: int) -> None:
|
||||||
|
self._toggle_panel_pin(self._control_deck.widget(idx))
|
||||||
|
|
||||||
def _on_deck_unpin(self, panel: "QWidget") -> None:
|
def _on_deck_unpin(self, panel: "QWidget") -> None:
|
||||||
panel._pinned = False
|
panel._pinned = False
|
||||||
self._refresh_deck_layout()
|
self._refresh_deck_layout()
|
||||||
|
|||||||
Reference in New Issue
Block a user