From 377d416e2bfe05675e6f453c791e282ae55c887f Mon Sep 17 00:00:00 2001 From: Ryan Galloway Date: Sun, 5 Apr 2026 13:51:56 -0700 Subject: [PATCH 1/7] Polish navigation, search, and browser icon styling --- sview/qt/app.py | 88 ++++++++++++++++++------- sview/qt/icon_view.py | 18 ++--- sview/qt/icons.py | 141 ++++++++++++++++++++++++++++++++++++++++ sview/qt/main_window.py | 54 ++++++++++----- sview/qt/table.py | 11 +--- 5 files changed, 250 insertions(+), 62 deletions(-) create mode 100644 sview/qt/icons.py diff --git a/sview/qt/app.py b/sview/qt/app.py index 545fe89..336c6af 100644 --- a/sview/qt/app.py +++ b/sview/qt/app.py @@ -87,16 +87,16 @@ def _wants_debug(args: list[str]) -> bool: def _apply_dark_theme(app: QApplication) -> None: palette = QPalette() - palette.setColor(QPalette.ColorRole.Window, QColor("#14191e")) + palette.setColor(QPalette.ColorRole.Window, QColor("#101519")) palette.setColor(QPalette.ColorRole.WindowText, QColor("#dbe2e8")) - palette.setColor(QPalette.ColorRole.Base, QColor("#11161b")) - palette.setColor(QPalette.ColorRole.AlternateBase, QColor("#171d22")) + palette.setColor(QPalette.ColorRole.Base, QColor("#0d1216")) + palette.setColor(QPalette.ColorRole.AlternateBase, QColor("#141b20")) palette.setColor(QPalette.ColorRole.ToolTipBase, QColor("#11161b")) palette.setColor(QPalette.ColorRole.ToolTipText, QColor("#f2f5f8")) palette.setColor(QPalette.ColorRole.Text, QColor("#dbe2e8")) - palette.setColor(QPalette.ColorRole.Button, QColor("#1f262d")) + palette.setColor(QPalette.ColorRole.Button, QColor("#161d23")) palette.setColor(QPalette.ColorRole.ButtonText, QColor("#edf2f7")) - palette.setColor(QPalette.ColorRole.Highlight, QColor("#313b44")) + palette.setColor(QPalette.ColorRole.Highlight, QColor("#2a333b")) palette.setColor(QPalette.ColorRole.HighlightedText, QColor("#ffffff")) palette.setColor(QPalette.ColorRole.PlaceholderText, QColor("#75818d")) app.setPalette(palette) @@ -106,35 +106,65 @@ def _apply_dark_theme(app: QApplication) -> None: font-size: 12px; } QTreeView, QTableWidget, QLineEdit, QPushButton, QLabel, QListWidget { - background-color: #1e252c; + background-color: #1b232a; color: #dbe2e8; } + QMenuBar { + background-color: #0f1519; + color: #d5dde4; + padding: 1px 4px; + } + QMenuBar::item { + background: transparent; + padding: 4px 8px; + } + QMenuBar::item:selected { + background-color: #1e272f; + } + QMenu { + background-color: #151c22; + color: #dbe2e8; + border: 1px solid #26303a; + } + QMenu::item { + padding: 6px 18px; + } + QMenu::item:selected { + background-color: #27313a; + } QMainWindow, QWidget#mainContent { - background-color: #13191f; + background-color: #0f1418; color: #dbe2e8; } QHeaderView::section { - background-color: #1e252c; + background-color: #171f26; color: #d4dde4; padding: 4px 6px; border: 0; - border-right: 1px solid #29333c; + border-right: 1px solid #222b33; } QTreeView, QTableWidget, QLineEdit, QListWidget { - background-color: #161d23; - border: 1px solid #222c34; + background-color: #141b20; + border: 1px solid #1f2830; border-radius: 3px; } QTreeView { background-color: #171f26; } + QLineEdit#searchInput { + background-color: #171e24; + border: 1px solid #202933; + border-radius: 6px; + padding: 0 12px; + font-size: 13px; + } QScrollBar:vertical { - background: #10161a; + background: #0e1317; width: 10px; margin: 2px; } QScrollBar::handle:vertical { - background: #36424c; + background: #34414a; min-height: 28px; border-radius: 4px; } @@ -159,23 +189,33 @@ def _apply_dark_theme(app: QApplication) -> None: border: none; } QTableWidget::item:selected, QTreeView::item:selected { - background-color: #2c353d; + background-color: #273039; color: white; } QPushButton { - background-color: #20282f; - border: 1px solid #29333c; + background-color: #1a2127; + border: 1px solid #25303a; border-radius: 3px; padding: 4px 9px; min-height: 24px; } + QPushButton#navButton, QPushButton#toolbarToggle { + background-color: transparent; + border: 0; + border-radius: 5px; + padding: 0; + min-height: 28px; + } + QPushButton#navButton:hover, QPushButton#toolbarToggle:hover { + background-color: #1e262d; + } QPushButton:checked { - background-color: #2b3640; + background-color: #263039; border-color: #34414d; } QPushButton:disabled { color: #697581; - background-color: #1a2127; + background-color: #151b20; } QToolButton { background: transparent; @@ -186,11 +226,11 @@ def _apply_dark_theme(app: QApplication) -> None: color: #d6dde4; } QStatusBar { - background-color: #141b20; + background-color: #10161b; color: #b6c1ca; } QSplitter::handle { - background-color: #36414a; + background-color: #2c3740; width: 1px; } QLabel#inspectorTitle { @@ -202,13 +242,13 @@ def _apply_dark_theme(app: QApplication) -> None: margin-bottom: 6px; } QWidget#iconCard { - background-color: #1c232a; - border: 1px solid #252f37; + background-color: #182026; + border: 1px solid #202a32; border-radius: 6px; } QWidget#iconCard:hover { - background-color: #212a32; - border-color: #2f3b45; + background-color: #1d262e; + border-color: #2b3741; } QLabel#iconCardTitle { font-size: 13px; diff --git a/sview/qt/icon_view.py b/sview/qt/icon_view.py index 58c6120..665ed89 100644 --- a/sview/qt/icon_view.py +++ b/sview/qt/icon_view.py @@ -43,12 +43,12 @@ QLabel, QListWidget, QListWidgetItem, - QStyle, QVBoxLayout, QWidget, ) from sview.model import BrowserItem, ItemType +from sview.qt.icons import browser_item_icon class ContentsIconView(QListWidget): @@ -63,8 +63,8 @@ def __init__(self) -> None: self.setMovement(QListWidget.Movement.Static) self.setWrapping(True) self.setSelectionMode(QListWidget.SelectionMode.SingleSelection) - self.setSpacing(14) - self.setIconSize(QSize(44, 44)) + self.setSpacing(12) + self.setIconSize(QSize(52, 52)) self.setGridSize(QSize(self.CARD_WIDTH, self.CARD_HEIGHT)) self.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu) self.customContextMenuRequested.connect(self._emit_context_request) @@ -104,24 +104,18 @@ def _emit_context_request(self, position) -> None: self.context_requested.emit(browser_item, self.viewport().mapToGlobal(position)) def _icon(self, item: BrowserItem): - if item.item_type is ItemType.DIRECTORY: - return self.style().standardIcon(QStyle.StandardPixmap.SP_DirIcon) - if item.item_type is ItemType.SEQUENCE: - return self.style().standardIcon( - QStyle.StandardPixmap.SP_FileDialogDetailedView - ) - return self.style().standardIcon(QStyle.StandardPixmap.SP_FileIcon) + return browser_item_icon(item, size=52) def _build_card(self, item: BrowserItem) -> QWidget: card = QWidget() card.setObjectName("iconCard") layout = QHBoxLayout(card) layout.setContentsMargins(14, 12, 14, 12) - layout.setSpacing(12) + layout.setSpacing(14) icon_label = QLabel() icon_label.setPixmap(self._icon(item).pixmap(self.iconSize())) - icon_label.setFixedSize(48, 48) + icon_label.setFixedSize(56, 56) icon_label.setAlignment(Qt.AlignmentFlag.AlignCenter) name_label = QLabel(item.display_name) diff --git a/sview/qt/icons.py b/sview/qt/icons.py new file mode 100644 index 0000000..1499608 --- /dev/null +++ b/sview/qt/icons.py @@ -0,0 +1,141 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2026, Ryan Galloway (ryan@rsgalloway.com) +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# - Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# - Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# - Neither the name of the software nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ----------------------------------------------------------------------------- + +""" +Contains lightweight custom icons used throughout the sview UI. +""" + +from __future__ import annotations + +from PySide6.QtCore import QPointF, QRectF, Qt +from PySide6.QtGui import QColor, QIcon, QPainter, QPainterPath, QPen, QPixmap + +from sview.model import BrowserItem, ItemType + + +def browser_item_icon(item: BrowserItem, size: int = 18) -> QIcon: + if item.item_type is ItemType.DIRECTORY: + return _folder_icon(size) + if item.item_type is ItemType.SEQUENCE: + return _sequence_icon(size) + return _file_icon(size) + + +def _folder_icon(size: int) -> QIcon: + pixmap = QPixmap(size, size) + pixmap.fill(Qt.GlobalColor.transparent) + + painter = QPainter(pixmap) + painter.setRenderHint(QPainter.RenderHint.Antialiasing) + painter.setPen(Qt.PenStyle.NoPen) + + tab = QColor("#cf6b6b") + body = QColor("#9e4b53") + painter.setBrush(tab) + painter.drawRoundedRect( + QRectF(size * 0.12, size * 0.20, size * 0.34, size * 0.20), 2, 2 + ) + painter.setBrush(body) + painter.drawRoundedRect( + QRectF(size * 0.08, size * 0.30, size * 0.84, size * 0.48), 2.5, 2.5 + ) + painter.end() + return QIcon(pixmap) + + +def _file_icon(size: int) -> QIcon: + pixmap = QPixmap(size, size) + pixmap.fill(Qt.GlobalColor.transparent) + + painter = QPainter(pixmap) + painter.setRenderHint(QPainter.RenderHint.Antialiasing) + painter.setPen(QPen(QColor("#ced6de"), 1)) + painter.setBrush(QColor("#f2f5f8")) + + page = QPainterPath() + page.moveTo(size * 0.22, size * 0.10) + page.lineTo(size * 0.62, size * 0.10) + page.lineTo(size * 0.78, size * 0.26) + page.lineTo(size * 0.78, size * 0.88) + page.lineTo(size * 0.22, size * 0.88) + page.closeSubpath() + painter.drawPath(page) + + fold = QPainterPath() + fold.moveTo(size * 0.62, size * 0.10) + fold.lineTo(size * 0.62, size * 0.26) + fold.lineTo(size * 0.78, size * 0.26) + fold.closeSubpath() + painter.fillPath(fold, QColor("#dde5eb")) + painter.drawPath(fold) + painter.end() + return QIcon(pixmap) + + +def _sequence_icon(size: int) -> QIcon: + pixmap = QPixmap(size, size) + pixmap.fill(Qt.GlobalColor.transparent) + + painter = QPainter(pixmap) + painter.setRenderHint(QPainter.RenderHint.Antialiasing) + painter.setPen(QPen(QColor("#d8e0e7"), 1)) + painter.setBrush(QColor("#f3f6f9")) + + page = QPainterPath() + page.moveTo(size * 0.18, size * 0.10) + page.lineTo(size * 0.68, size * 0.10) + page.lineTo(size * 0.82, size * 0.24) + page.lineTo(size * 0.82, size * 0.90) + page.lineTo(size * 0.18, size * 0.90) + page.closeSubpath() + painter.drawPath(page) + + fold = QPainterPath() + fold.moveTo(size * 0.68, size * 0.10) + fold.lineTo(size * 0.68, size * 0.24) + fold.lineTo(size * 0.82, size * 0.24) + fold.closeSubpath() + painter.fillPath(fold, QColor("#dde6ec")) + painter.drawPath(fold) + + painter.setPen(QPen(QColor("#2f3b46"), max(1, size // 14))) + for offset in (0.34, 0.50, 0.66): + painter.drawLine( + QPointF(size * 0.28, size * offset), + QPointF(size * 0.72, size * offset), + ) + + badge = QRectF(size * 0.18, size * 0.70, size * 0.30, size * 0.16) + painter.setPen(Qt.PenStyle.NoPen) + painter.setBrush(QColor("#4d8fb5")) + painter.drawRoundedRect(badge, 2, 2) + painter.end() + return QIcon(pixmap) diff --git a/sview/qt/main_window.py b/sview/qt/main_window.py index c8336bd..d5550df 100644 --- a/sview/qt/main_window.py +++ b/sview/qt/main_window.py @@ -113,6 +113,10 @@ def __init__( self._filter_input = QLineEdit() self._filter_input.setPlaceholderText("Search") + self._filter_input.setObjectName("searchInput") + self._filter_input.setMinimumWidth(360) + self._filter_input.setMaximumWidth(460) + self._filter_input.setFixedHeight(34) self._table = ContentsTable() self._icon_view = ContentsIconView() @@ -159,36 +163,42 @@ def _build_toolbar(self) -> None: self.addAction(self._refresh_action) self._back_button = QPushButton() + self._back_button.setObjectName("navButton") self._back_button.setIcon( self.style().standardIcon(QStyle.StandardPixmap.SP_ArrowBack) ) self._back_button.setToolTip("Back") self._back_button.setFixedWidth(28) self._home_button = QPushButton() + self._home_button.setObjectName("navButton") self._home_button.setIcon( self.style().standardIcon(QStyle.StandardPixmap.SP_DirHomeIcon) ) self._home_button.setToolTip("Home") self._home_button.setFixedWidth(28) self._up_button = QPushButton() + self._up_button.setObjectName("navButton") self._up_button.setIcon( self.style().standardIcon(QStyle.StandardPixmap.SP_ArrowUp) ) self._up_button.setToolTip("Up") self._up_button.setFixedWidth(28) self._open_button = QPushButton() + self._open_button.setObjectName("navButton") self._open_button.setIcon( self.style().standardIcon(QStyle.StandardPixmap.SP_DirOpenIcon) ) self._open_button.setToolTip("Open Folder") self._open_button.setFixedWidth(32) self._refresh_button = QPushButton() + self._refresh_button.setObjectName("navButton") self._refresh_button.setIcon( self.style().standardIcon(QStyle.StandardPixmap.SP_BrowserReload) ) self._refresh_button.setToolTip("Refresh") self._refresh_button.setFixedWidth(32) self._content_mode_toggle = QPushButton() + self._content_mode_toggle.setObjectName("toolbarToggle") self._content_mode_toggle.setIcon( self.style().standardIcon(QStyle.StandardPixmap.SP_FileDialogDetailedView) ) @@ -197,6 +207,7 @@ def _build_toolbar(self) -> None: self._content_mode_toggle.setChecked(True) self._content_mode_toggle.setFixedWidth(32) self._layout_mode_toggle = QPushButton() + self._layout_mode_toggle.setObjectName("toolbarToggle") self._layout_mode_toggle.setIcon( self.style().standardIcon(QStyle.StandardPixmap.SP_FileDialogDetailedView) ) @@ -207,6 +218,7 @@ def _build_toolbar(self) -> None: ) self._layout_mode_toggle.setFixedWidth(32) self._stop_button = QPushButton() + self._stop_button.setObjectName("toolbarToggle") self._stop_button.setIcon( self.style().standardIcon(QStyle.StandardPixmap.SP_BrowserStop) ) @@ -243,23 +255,22 @@ def _build_layout(self) -> None: center = QWidget() root_layout = QVBoxLayout(center) root_layout.setContentsMargins(8, 8, 8, 8) - root_layout.setSpacing(6) + root_layout.setSpacing(4) toolbar_row = QHBoxLayout() - toolbar_row.setSpacing(6) + toolbar_row.setSpacing(4) toolbar_row.addWidget(self._back_button) toolbar_row.addWidget(self._up_button) toolbar_row.addWidget(self._home_button) toolbar_row.addWidget(self._open_button) toolbar_row.addWidget(self._refresh_button) - toolbar_row.addSpacing(6) + toolbar_row.addSpacing(4) toolbar_row.addWidget(self._content_mode_toggle) - toolbar_row.addSpacing(6) + toolbar_row.addSpacing(4) toolbar_row.addWidget(self._layout_mode_toggle) toolbar_row.addWidget(self._stop_button) toolbar_row.addWidget(self._progress_bar) toolbar_row.addStretch(1) - self._filter_input.setMaximumWidth(320) toolbar_row.addWidget(self._filter_input) root_layout.addLayout(toolbar_row) @@ -303,12 +314,13 @@ def _build_layout(self) -> None: splitter.setStretchFactor(2, 3) self._main_splitter = splitter splitter.setCollapsible(0, True) - splitter.setSizes( - self._coerce_splitter_sizes( - self._ui_state.get("main_splitter_sizes"), - [self._sidebar_restore_width, 900, 0], - ) + initial_sizes = self._coerce_splitter_sizes( + self._ui_state.get("main_splitter_sizes"), + [self._sidebar_restore_width, 900, 0], ) + if self._sidebar_expanded and initial_sizes[0] <= 0: + initial_sizes[0] = self._sidebar_restore_width + splitter.setSizes(initial_sizes) if not self._sidebar_expanded: self._apply_sidebar_state(False) root_layout.addWidget(splitter, 1) @@ -763,10 +775,10 @@ def _show_item_context_menu( and self._controller.expanded_sequence.path == item.path else "Expand Sequence" ) - menu.addSeparator() - sstat_action = menu.addAction("sstat") - scopy_action = menu.addAction("scopy...") - smove_action = menu.addAction("smove...") + sequence_menu = menu.addMenu("Sequence") + sstat_action = sequence_menu.addAction("sstat") + scopy_action = sequence_menu.addAction("scopy...") + smove_action = sequence_menu.addAction("smove...") menu.addSeparator() properties_action = menu.addAction("Properties") @@ -1086,16 +1098,18 @@ def _clear_scan_process(self) -> None: def _save_ui_state(self) -> None: sidebar_width = self._sidebar_restore_width + splitter_sizes = [self.SIDEBAR_WIDTH, 900, 0] if self._main_splitter is not None: sizes = self._main_splitter.sizes() + splitter_sizes = list(sizes) if sizes and sizes[0] > 0: sidebar_width = sizes[0] + elif self._sidebar_expanded: + splitter_sizes[0] = sidebar_width state = { "window_width": self.width(), "window_height": self.height(), - "main_splitter_sizes": self._main_splitter.sizes() - if self._main_splitter is not None - else [self.SIDEBAR_WIDTH, 900, 0], + "main_splitter_sizes": splitter_sizes, "center_view": "icons" if not self._layout_mode_toggle.isChecked() else "details", @@ -1147,7 +1161,11 @@ def _apply_sidebar_state(self, expanded: bool) -> None: return if expanded: target = min(self.SIDEBAR_WIDTH, max(220, self._sidebar_restore_width)) - sizes[1] = max(0, sizes[1] - target) + current_sidebar = sizes[0] + if current_sidebar <= 0: + sizes[1] = max(0, sizes[1] - target) + else: + sizes[1] = max(0, sizes[1] + current_sidebar - target) sizes[0] = target else: if sizes[0] > 0: diff --git a/sview/qt/table.py b/sview/qt/table.py index 1d03230..a057418 100644 --- a/sview/qt/table.py +++ b/sview/qt/table.py @@ -39,9 +39,10 @@ from PySide6.QtCore import QTimer, Qt, Signal from PySide6.QtGui import QColor -from PySide6.QtWidgets import QHeaderView, QStyle, QTableWidget, QTableWidgetItem +from PySide6.QtWidgets import QHeaderView, QTableWidget, QTableWidgetItem from sview.model import BrowserItem, ItemType +from sview.qt.icons import browser_item_icon class ContentsTable(QTableWidget): @@ -175,13 +176,7 @@ def _emit_context_request(self, position) -> None: self.context_requested.emit(item, self.viewport().mapToGlobal(position)) def _item_icon(self, item: BrowserItem): - if item.item_type is ItemType.DIRECTORY: - return self.style().standardIcon(QStyle.StandardPixmap.SP_DirIcon) - if item.item_type is ItemType.SEQUENCE: - return self.style().standardIcon( - QStyle.StandardPixmap.SP_FileDialogDetailedView - ) - return self.style().standardIcon(QStyle.StandardPixmap.SP_FileIcon) + return browser_item_icon(item, size=18) @staticmethod def _type_label(item: BrowserItem) -> str: From 1ce982efde76c15bb338a77f78453d4142a9b32a Mon Sep 17 00:00:00 2001 From: Ryan Galloway Date: Sun, 5 Apr 2026 13:54:30 -0700 Subject: [PATCH 2/7] Treat symlinked directories as folders in the browser --- sview/scanner.py | 2 +- tests/test_scanner.py | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/sview/scanner.py b/sview/scanner.py index 6f74f8a..0c66797 100644 --- a/sview/scanner.py +++ b/sview/scanner.py @@ -131,7 +131,7 @@ def _build_raw_items( for entry in entries: self._raise_if_cancelled(cancel_check) try: - is_directory = entry.is_dir(follow_symlinks=False) + is_directory = entry.is_dir() except OSError: continue items.append( diff --git a/tests/test_scanner.py b/tests/test_scanner.py index 27369c5..11d64f3 100644 --- a/tests/test_scanner.py +++ b/tests/test_scanner.py @@ -75,6 +75,22 @@ def test_sequence_range_handles_frame_zero(self) -> None: ) self.assertEqual(sequence.frame_range, "0-1") + def test_directory_symlink_stays_a_folder(self) -> None: + with tempfile.TemporaryDirectory() as tmp_dir: + root = Path(tmp_dir) + target = root / "target" + target.mkdir() + link = root / "linked-target" + link.symlink_to(target, target_is_directory=True) + + result = DirectoryScanner().scan(root) + + linked_item = next( + item for item in result.raw_items if item.name == link.name + ) + self.assertIs(linked_item.item_type, ItemType.DIRECTORY) + self.assertEqual(linked_item.path, str(link)) + def test_controller_can_expand_and_collapse_sequence(self) -> None: with tempfile.TemporaryDirectory() as tmp_dir: root = Path(tmp_dir) From 14bb0ce0d2bf5e1c7525487af45a7cddb5d29155 Mon Sep 17 00:00:00 2001 From: Ryan Galloway Date: Sun, 5 Apr 2026 14:02:52 -0700 Subject: [PATCH 3/7] Polish browser interactions with better filtering and symlink handling --- sview/qt/icon_view.py | 35 +++++++++++++++++++++++++++++ sview/qt/main_window.py | 49 ++++++++++++++++++++++++++++++++++++++++- sview/qt/table.py | 36 +++++++++++++++++++++++++++++- 3 files changed, 118 insertions(+), 2 deletions(-) diff --git a/sview/qt/icon_view.py b/sview/qt/icon_view.py index 665ed89..fc824c4 100644 --- a/sview/qt/icon_view.py +++ b/sview/qt/icon_view.py @@ -53,6 +53,9 @@ class ContentsIconView(QListWidget): context_requested = Signal(object, object) + filter_text_typed = Signal(str) + filter_backspace_requested = Signal() + filter_clear_requested = Signal() CARD_WIDTH = 270 CARD_HEIGHT = 88 @@ -63,6 +66,7 @@ def __init__(self) -> None: self.setMovement(QListWidget.Movement.Static) self.setWrapping(True) self.setSelectionMode(QListWidget.SelectionMode.SingleSelection) + self.setFocusPolicy(Qt.FocusPolicy.StrongFocus) self.setSpacing(12) self.setIconSize(QSize(52, 52)) self.setGridSize(QSize(self.CARD_WIDTH, self.CARD_HEIGHT)) @@ -103,6 +107,11 @@ def _emit_context_request(self, position) -> None: self.setCurrentItem(item) self.context_requested.emit(browser_item, self.viewport().mapToGlobal(position)) + def keyPressEvent(self, event) -> None: + if self._handle_filter_key(event): + return + super().keyPressEvent(event) + def _icon(self, item: BrowserItem): return browser_item_icon(item, size=52) @@ -176,3 +185,29 @@ def _format_mtime(timestamp: float) -> str: if timestamp <= 0: return "" return datetime.fromtimestamp(timestamp).strftime("%Y-%m-%d %H:%M") + + def _handle_filter_key(self, event) -> bool: + if event.modifiers() & ( + Qt.KeyboardModifier.ControlModifier + | Qt.KeyboardModifier.AltModifier + | Qt.KeyboardModifier.MetaModifier + ): + return False + if event.key() == Qt.Key.Key_Backspace: + self.filter_backspace_requested.emit() + event.accept() + return True + if event.key() == Qt.Key.Key_Delete: + self.filter_clear_requested.emit() + event.accept() + return True + if event.key() == Qt.Key.Key_Escape: + self.filter_clear_requested.emit() + event.accept() + return True + text = event.text() + if text and text.isprintable(): + self.filter_text_typed.emit(text) + event.accept() + return True + return False diff --git a/sview/qt/main_window.py b/sview/qt/main_window.py index d5550df..fb074fd 100644 --- a/sview/qt/main_window.py +++ b/sview/qt/main_window.py @@ -117,6 +117,11 @@ def __init__( self._filter_input.setMinimumWidth(360) self._filter_input.setMaximumWidth(460) self._filter_input.setFixedHeight(34) + self._clear_filter_action = self._filter_input.addAction( + self.style().standardIcon(QStyle.StandardPixmap.SP_LineEditClearButton), + QLineEdit.ActionPosition.TrailingPosition, + ) + self._clear_filter_action.setVisible(False) self._table = ContentsTable() self._icon_view = ContentsIconView() @@ -352,12 +357,20 @@ def _connect_signals(self) -> None: self._stop_button.clicked.connect(self._cancel_scan) self._content_mode_toggle.toggled.connect(self._toggle_content_mode) self._filter_input.textChanged.connect(self._apply_filter) + self._filter_input.textChanged.connect(self._update_filter_clear_action) + self._clear_filter_action.triggered.connect(self._clear_filter_text) self._table.itemSelectionChanged.connect(self._sync_inspector) self._table.itemDoubleClicked.connect(self._activate_selected_item) self._table.context_requested.connect(self._show_item_context_menu) + self._table.filter_text_typed.connect(self._append_filter_text) + self._table.filter_backspace_requested.connect(self._delete_filter_text) + self._table.filter_clear_requested.connect(self._clear_filter_text) self._icon_view.itemSelectionChanged.connect(self._sync_inspector) self._icon_view.itemActivated.connect(self._activate_selected_item) self._icon_view.context_requested.connect(self._show_item_context_menu) + self._icon_view.filter_text_typed.connect(self._append_filter_text) + self._icon_view.filter_backspace_requested.connect(self._delete_filter_text) + self._icon_view.filter_clear_requested.connect(self._clear_filter_text) self._tree.selectionModel().selectionChanged.connect( self._handle_tree_selection ) @@ -451,6 +464,7 @@ def _toggle_layout_mode(self, detail_view: bool) -> None: self._table if detail_view else self._icon_view ) self._save_ui_state() + QTimer.singleShot(0, self._focus_active_browser) def _handle_tree_selection(self) -> None: index = self._tree.currentIndex() @@ -597,7 +611,9 @@ def _handle_finished_scan(self, result: object) -> None: self._push_history(str(result.path)) self._active_request = None self._sync_tree_to_path(str(result.path)) - self._apply_filter(self._filter_input.text()) + self._filter_input.clear() + self._apply_filter("") + QTimer.singleShot(0, self._focus_active_browser) self._drain_pending_request() def _handle_failed_scan(self, error_message: str) -> None: @@ -667,6 +683,32 @@ def _apply_filter(self, text: str) -> None: self._inspector.clear_details() self._update_status_bar() + def _append_filter_text(self, text: str) -> None: + if not text or not self._filter_input.isEnabled(): + return + self._filter_input.setFocus(Qt.FocusReason.ShortcutFocusReason) + self._filter_input.setText(self._filter_input.text() + text) + self._filter_input.setCursorPosition(len(self._filter_input.text())) + + def _delete_filter_text(self) -> None: + if not self._filter_input.isEnabled(): + return + current = self._filter_input.text() + if not current: + return + self._filter_input.setFocus(Qt.FocusReason.ShortcutFocusReason) + self._filter_input.setText(current[:-1]) + self._filter_input.setCursorPosition(len(self._filter_input.text())) + + def _clear_filter_text(self) -> None: + if not self._filter_input.isEnabled() or not self._filter_input.text(): + return + self._filter_input.setFocus(Qt.FocusReason.ShortcutFocusReason) + self._filter_input.clear() + + def _update_filter_clear_action(self, text: str) -> None: + self._clear_filter_action.setVisible(bool(text)) + def _sync_inspector(self) -> None: item = self._current_browser_item() if item is None: @@ -1138,6 +1180,11 @@ def _current_browser_item(self) -> BrowserItem | None: return self._icon_view.current_browser_item() return self._table.current_browser_item() + def _focus_active_browser(self) -> None: + widget = self._center_stack.currentWidget() + if widget is not None and widget.isEnabled(): + widget.setFocus(Qt.FocusReason.OtherFocusReason) + def _toggle_sidebar(self, expanded: bool) -> None: self._apply_sidebar_state(expanded) self._save_ui_state() diff --git a/sview/qt/table.py b/sview/qt/table.py index a057418..c9c9058 100644 --- a/sview/qt/table.py +++ b/sview/qt/table.py @@ -48,6 +48,9 @@ class ContentsTable(QTableWidget): RENDER_BATCH_SIZE = 100 context_requested = Signal(object, object) + filter_text_typed = Signal(str) + filter_backspace_requested = Signal() + filter_clear_requested = Signal() HEADERS = [ "Name", @@ -80,7 +83,7 @@ def __init__(self) -> None: self.setColumnWidth(6, 140) self.setShowGrid(False) self.setAlternatingRowColors(False) - self.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.setFocusPolicy(Qt.FocusPolicy.StrongFocus) self.setWordWrap(False) self.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu) self.customContextMenuRequested.connect(self._emit_context_request) @@ -175,6 +178,11 @@ def _emit_context_request(self, position) -> None: self.selectRow(table_item.row()) self.context_requested.emit(item, self.viewport().mapToGlobal(position)) + def keyPressEvent(self, event) -> None: + if self._handle_filter_key(event): + return + super().keyPressEvent(event) + def _item_icon(self, item: BrowserItem): return browser_item_icon(item, size=18) @@ -216,3 +224,29 @@ def _format_mtime(timestamp: float) -> str: if timestamp <= 0: return "" return datetime.fromtimestamp(timestamp).strftime("%Y-%m-%d %H:%M") + + def _handle_filter_key(self, event) -> bool: + if event.modifiers() & ( + Qt.KeyboardModifier.ControlModifier + | Qt.KeyboardModifier.AltModifier + | Qt.KeyboardModifier.MetaModifier + ): + return False + if event.key() == Qt.Key.Key_Backspace: + self.filter_backspace_requested.emit() + event.accept() + return True + if event.key() == Qt.Key.Key_Delete: + self.filter_clear_requested.emit() + event.accept() + return True + if event.key() == Qt.Key.Key_Escape: + self.filter_clear_requested.emit() + event.accept() + return True + text = event.text() + if text and text.isprintable(): + self.filter_text_typed.emit(text) + event.accept() + return True + return False From ccb693e628ebec3947717b664b744b7a2f0bfbac Mon Sep 17 00:00:00 2001 From: Ryan Galloway Date: Sun, 5 Apr 2026 14:24:57 -0700 Subject: [PATCH 4/7] Add responsive Properties thumbnails and improve browser polish --- sview/qt/app.py | 7 +++ sview/qt/inspector.py | 118 +++++++++++++++++++++++++++++++++++++++--- 2 files changed, 119 insertions(+), 6 deletions(-) diff --git a/sview/qt/app.py b/sview/qt/app.py index 336c6af..e14ac51 100644 --- a/sview/qt/app.py +++ b/sview/qt/app.py @@ -241,6 +241,13 @@ def _apply_dark_theme(app: QApplication) -> None: color: #8998a5; margin-bottom: 6px; } + QLabel#inspectorThumbnail { + background-color: #12181d; + border: 1px solid #202932; + border-radius: 6px; + color: #7f8d99; + padding: 6px; + } QWidget#iconCard { background-color: #182026; border: 1px solid #202a32; diff --git a/sview/qt/inspector.py b/sview/qt/inspector.py index 540ec15..d2fdcdf 100644 --- a/sview/qt/inspector.py +++ b/sview/qt/inspector.py @@ -38,11 +38,14 @@ from pathlib import Path from PySide6.QtCore import Qt +from PySide6.QtGui import QImageReader, QPixmap from PySide6.QtWidgets import ( QFormLayout, QHBoxLayout, QLabel, QPushButton, + QScrollArea, + QSizePolicy, QStyle, QVBoxLayout, QWidget, @@ -52,11 +55,15 @@ class InspectorPanel(QWidget): + MIN_THUMBNAIL_HEIGHT = 140 + def __init__(self) -> None: super().__init__() self._title = QLabel("Properties") self._subtitle = QLabel("Select an item to inspect") self._current_item: BrowserItem | None = None + self._thumbnail_pixmap: QPixmap | None = None + self._thumbnail_source_path: str | None = None self._type_value = QLabel("-") self._range_value = QLabel("-") @@ -85,13 +92,29 @@ def __init__(self) -> None: layout.setSpacing(6) self._title.setObjectName("inspectorTitle") self._subtitle.setObjectName("inspectorSubtitle") + self._thumbnail = QLabel("No preview") + self._thumbnail.setObjectName("inspectorThumbnail") + self._thumbnail.setAlignment(Qt.AlignmentFlag.AlignCenter) + self._thumbnail.setMinimumHeight(self.MIN_THUMBNAIL_HEIGHT) + self._thumbnail.setMaximumHeight(16777215) + self._thumbnail.setMinimumWidth(0) + self._thumbnail.setSizePolicy( + QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed + ) + self._thumbnail.setWordWrap(True) header_row = QHBoxLayout() header_row.addWidget(self._title) header_row.addStretch(1) header_row.addWidget(self.close_button) layout.addLayout(header_row) - layout.addWidget(self._subtitle) + + body = QWidget() + body_layout = QVBoxLayout(body) + body_layout.setContentsMargins(0, 0, 0, 0) + body_layout.setSpacing(6) + body_layout.addWidget(self._subtitle) + body_layout.addWidget(self._thumbnail) form = QFormLayout() form.setVerticalSpacing(4) @@ -105,24 +128,37 @@ def __init__(self) -> None: form.addRow("Size", self._size_value) form.addRow("Modified", self._modified_value) form.addRow("Path", self._path_value) - layout.addLayout(form) - layout.addStretch(1) + body_layout.addLayout(form) button_row = QHBoxLayout() button_row.addWidget(self.copy_path_button) button_row.addWidget(self.copy_pattern_button) - layout.addLayout(button_row) + body_layout.addLayout(button_row) metadata_row = QHBoxLayout() metadata_row.addWidget(self.find_missing_button) metadata_row.addWidget(self.get_size_button) - layout.addLayout(metadata_row) - layout.addWidget(self.expand_button) + body_layout.addLayout(metadata_row) + body_layout.addWidget(self.expand_button) + body_layout.addStretch(1) + + self._scroll = QScrollArea() + self._scroll.setWidgetResizable(True) + self._scroll.setFrameShape(QScrollArea.Shape.NoFrame) + self._scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff) + self._scroll.setWidget(body) + layout.addWidget(self._scroll, 1) self.clear_details() def clear_details(self) -> None: self._title.setText("Properties") self._subtitle.setText("Select an item to inspect") self._current_item = None + self._thumbnail_pixmap = None + self._thumbnail_source_path = None + self._thumbnail.setPixmap(QPixmap()) + self._thumbnail.setText("No preview") + self._thumbnail.setMinimumHeight(self.MIN_THUMBNAIL_HEIGHT) + self._thumbnail.setMaximumHeight(16777215) for label in ( self._type_value, self._range_value, @@ -155,6 +191,7 @@ def set_item(self, item: BrowserItem) -> None: self._size_value.setText(self._format_size(item.size_bytes)) self._modified_value.setText(self._format_modified(item.modified_time)) self._path_value.setText(str(Path(item.path))) + self._update_thumbnail(item) self.copy_path_button.setEnabled(True) self.copy_pattern_button.setEnabled(item.item_type is ItemType.SEQUENCE) @@ -171,6 +208,10 @@ def set_item(self, item: BrowserItem) -> None: def current_item(self) -> BrowserItem | None: return self._current_item + def resizeEvent(self, event) -> None: + super().resizeEvent(event) + self._apply_thumbnail_pixmap() + @staticmethod def _type_text(item: BrowserItem) -> str: if item.item_type is ItemType.SEQUENCE: @@ -207,3 +248,68 @@ def _format_modified(timestamp: float) -> str: if timestamp <= 0: return "-" return datetime.fromtimestamp(timestamp).strftime("%Y-%m-%d %H:%M") + + def _update_thumbnail(self, item: BrowserItem) -> None: + preview_path = self._preview_path(item) + if preview_path is None: + self._thumbnail_pixmap = None + self._thumbnail_source_path = None + self._thumbnail.setPixmap(QPixmap()) + self._thumbnail.setText("No preview") + return + + reader = QImageReader(preview_path) + if not reader.canRead(): + self._thumbnail_pixmap = None + self._thumbnail_source_path = preview_path + self._thumbnail.setPixmap(QPixmap()) + self._thumbnail.setText("Preview unavailable") + return + + pixmap = QPixmap.fromImageReader(reader) + if pixmap.isNull(): + self._thumbnail_pixmap = None + self._thumbnail_source_path = preview_path + self._thumbnail.setPixmap(QPixmap()) + self._thumbnail.setText("Preview unavailable") + return + + self._thumbnail_pixmap = pixmap + self._thumbnail_source_path = preview_path + self._apply_thumbnail_pixmap() + + def _apply_thumbnail_pixmap(self) -> None: + if self._thumbnail_pixmap is None: + return + available_width = max(120, self._scroll.viewport().width() - 28) + scaled = self._thumbnail_pixmap.scaledToWidth( + available_width, + Qt.TransformationMode.SmoothTransformation, + ) + frame_height = max(self.MIN_THUMBNAIL_HEIGHT, scaled.height() + 12) + self._thumbnail.setMinimumHeight(frame_height) + self._thumbnail.setMaximumHeight(frame_height) + self._thumbnail.setText("") + self._thumbnail.setPixmap(scaled) + + @staticmethod + def _preview_path(item: BrowserItem) -> str | None: + if item.item_type is ItemType.SEQUENCE and item.child_paths: + candidate = Path(item.child_paths[0]) + else: + candidate = Path(item.path) + + if not candidate.is_file(): + return None + if candidate.suffix.lower() not in { + ".jpg", + ".jpeg", + ".png", + ".tif", + ".tiff", + ".bmp", + ".gif", + ".webp", + }: + return None + return str(candidate) From 1c2391b3a86c4bb875539f04133cc0c3edb20699 Mon Sep 17 00:00:00 2001 From: Ryan Galloway Date: Sun, 5 Apr 2026 14:43:27 -0700 Subject: [PATCH 5/7] Polish navigation and browsing with breadcrumbs and responsive previews --- sview/qt/app.py | 37 +++++++++++++++ sview/qt/main_window.py | 100 ++++++++++++++++++++++++++-------------- 2 files changed, 103 insertions(+), 34 deletions(-) diff --git a/sview/qt/app.py b/sview/qt/app.py index e14ac51..31b310a 100644 --- a/sview/qt/app.py +++ b/sview/qt/app.py @@ -229,6 +229,43 @@ def _apply_dark_theme(app: QApplication) -> None: background-color: #10161b; color: #b6c1ca; } + QWidget#breadcrumbBar { + background-color: #11181d; + border: 1px solid #1e2831; + border-radius: 5px; + padding: 1px 4px; + } + QToolButton#breadcrumbButton { + background: transparent; + border: 0; + color: #cfd8e0; + padding: 3px 6px; + border-radius: 4px; + } + QToolButton#breadcrumbButton:hover { + background-color: #1f2931; + color: #f2f6f9; + } + QLabel#breadcrumbSeparator { + color: #6f7e8b; + padding: 0 2px; + } + QLabel#loadingOverlay { + color: #8b99a5; + padding: 2px 0; + } + QProgressBar#loadingSpinner { + background: transparent; + border: 0; + min-width: 72px; + max-width: 72px; + min-height: 6px; + max-height: 6px; + } + QProgressBar#loadingSpinner::chunk { + background-color: #5f7f95; + border-radius: 3px; + } QSplitter::handle { background-color: #2c3740; width: 1px; diff --git a/sview/qt/main_window.py b/sview/qt/main_window.py index fb074fd..0acfacd 100644 --- a/sview/qt/main_window.py +++ b/sview/qt/main_window.py @@ -54,10 +54,12 @@ QPushButton, QSplitter, QStackedWidget, + QProgressBar, QStyle, QToolButton, QVBoxLayout, QWidget, + QSizePolicy, ) from sview import __version__ @@ -126,6 +128,11 @@ def __init__( self._table = ContentsTable() self._icon_view = ContentsIconView() self._center_stack = QStackedWidget() + self._breadcrumb_bar = QWidget() + self._breadcrumb_bar.setObjectName("breadcrumbBar") + self._breadcrumb_layout = QHBoxLayout(self._breadcrumb_bar) + self._breadcrumb_layout.setContentsMargins(0, 0, 0, 0) + self._breadcrumb_layout.setSpacing(2) self._inspector = InspectorPanel() self._tree_title = QLabel("Folders") self._tree_toggle = QToolButton() @@ -135,16 +142,18 @@ def __init__( self._sidebar_restore_width = ( self._coerce_int(self._ui_state.get("sidebar_width")) or self.SIDEBAR_WIDTH ) + self._loading_overlay = QLabel("Loading…") + self._loading_overlay.setObjectName("loadingOverlay") + self._loading_spinner = QProgressBar() + self._loading_spinner.setObjectName("loadingSpinner") + self._loading_spinner.setRange(0, 0) + self._loading_spinner.setTextVisible(False) + self._loading_spinner.hide() + self._loading_overlay.hide() - self._progress_timer = QTimer(self) - self._busy_timer = QTimer(self) - self._busy_timer.setInterval(30) - self._busy_timer.timeout.connect(self._advance_busy_indicator) self._scan_timeout_timer = QTimer(self) self._scan_timeout_timer.setSingleShot(True) self._scan_timeout_timer.timeout.connect(self._handle_scan_timeout) - self._busy_value = 0 - self._busy_direction = 1 self._build_toolbar() self._build_menu_bar() @@ -230,13 +239,6 @@ def _build_toolbar(self) -> None: self._stop_button.setToolTip("Stop") self._stop_button.setFixedWidth(32) self._stop_button.setEnabled(False) - self._progress_bar = QProgressBar() - self._progress_bar.setRange(0, 100) - self._progress_bar.setValue(0) - self._progress_bar.setMaximumWidth(84) - self._progress_bar.setFixedHeight(12) - self._progress_bar.setTextVisible(False) - self._progress_bar.hide() def _build_menu_bar(self) -> None: menu_bar = self.menuBar() @@ -274,8 +276,10 @@ def _build_layout(self) -> None: toolbar_row.addSpacing(4) toolbar_row.addWidget(self._layout_mode_toggle) toolbar_row.addWidget(self._stop_button) - toolbar_row.addWidget(self._progress_bar) - toolbar_row.addStretch(1) + self._breadcrumb_bar.setSizePolicy( + QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed + ) + toolbar_row.addWidget(self._breadcrumb_bar, 1) toolbar_row.addWidget(self._filter_input) root_layout.addLayout(toolbar_row) @@ -310,9 +314,14 @@ def _build_layout(self) -> None: self._center_stack.setCurrentWidget( self._icon_view if not self._layout_mode_toggle.isChecked() else self._table ) + center_panel = QWidget() + center_layout = QVBoxLayout(center_panel) + center_layout.setContentsMargins(0, 0, 0, 0) + center_layout.setSpacing(0) + center_layout.addWidget(self._center_stack, 1) splitter.addWidget(sidebar) - splitter.addWidget(self._center_stack) + splitter.addWidget(center_panel) splitter.addWidget(self._inspector) splitter.setStretchFactor(0, 0) splitter.setStretchFactor(1, 5) @@ -332,6 +341,8 @@ def _build_layout(self) -> None: self.setCentralWidget(center) center.setObjectName("mainContent") + self.statusBar().addPermanentWidget(self._loading_overlay) + self.statusBar().addPermanentWidget(self._loading_spinner) self.statusBar().showMessage("Ready") width = self._coerce_int(self._ui_state.get("window_width")) height = self._coerce_int(self._ui_state.get("window_height")) @@ -611,6 +622,7 @@ def _handle_finished_scan(self, result: object) -> None: self._push_history(str(result.path)) self._active_request = None self._sync_tree_to_path(str(result.path)) + self._update_breadcrumbs(result.path) self._filter_input.clear() self._apply_filter("") QTimer.singleShot(0, self._focus_active_browser) @@ -981,15 +993,10 @@ def _set_loading_state(self, loading: bool, path: str | None = None) -> None: self._tree.setEnabled(not loading) self._table.setEnabled(not loading) self._stop_button.setEnabled(loading) - self._progress_bar.setVisible(loading) + self._loading_spinner.setVisible(loading) + self._loading_overlay.setVisible(loading) if loading: - self._busy_value = 0 - self._busy_direction = 1 - self._progress_bar.setValue(self._busy_value) - self._busy_timer.start() - else: - self._busy_timer.stop() - self._progress_bar.setValue(0) + self._loading_overlay.setText("Loading…") if loading and path is not None: self.statusBar().showMessage(f"Loading {path}...") @@ -1084,16 +1091,6 @@ def _coerce_missing_list(cls, value: object) -> list[int]: frames.append(coerced) return frames - def _advance_busy_indicator(self) -> None: - self._busy_value += self._busy_direction * 4 - if self._busy_value >= 100: - self._busy_value = 100 - self._busy_direction = -1 - elif self._busy_value <= 0: - self._busy_value = 0 - self._busy_direction = 1 - self._progress_bar.setValue(self._busy_value) - def _close_inspector(self) -> None: if self._main_splitter is None: return @@ -1185,6 +1182,41 @@ def _focus_active_browser(self) -> None: if widget is not None and widget.isEnabled(): widget.setFocus(Qt.FocusReason.OtherFocusReason) + def _update_breadcrumbs(self, path: Path) -> None: + while self._breadcrumb_layout.count(): + item = self._breadcrumb_layout.takeAt(0) + widget = item.widget() + if widget is not None: + widget.deleteLater() + + normalized = Path(path) + parts = [normalized.anchor] if normalized.anchor else [] + parts.extend(part for part in normalized.parts[len(parts) :] if part) + + current_path = Path(parts[0]) if parts else normalized + for index, part in enumerate(parts): + if index > 0: + separator = QLabel("›") + separator.setObjectName("breadcrumbSeparator") + self._breadcrumb_layout.addWidget(separator) + current_path = current_path / part + + button = QToolButton() + button.setObjectName("breadcrumbButton") + button.setAutoRaise(True) + button.setText( + "Home" if current_path == Path.home() else part.rstrip("/") or "/" + ) + button.setToolTip(str(current_path)) + button.clicked.connect( + lambda _checked=False, target=str( + current_path + ): self._request_directory(target, add_to_history=True) + ) + self._breadcrumb_layout.addWidget(button) + + self._breadcrumb_layout.addStretch(1) + def _toggle_sidebar(self, expanded: bool) -> None: self._apply_sidebar_state(expanded) self._save_ui_state() From daf865dbbafee6d277c83c751a79a9d51d222af7 Mon Sep 17 00:00:00 2001 From: Ryan Galloway Date: Sun, 5 Apr 2026 15:37:14 -0700 Subject: [PATCH 6/7] addresses PR comments --- sview/qt/app.py | 4 ++-- sview/qt/icons.py | 5 +++++ sview/qt/inspector.py | 44 +++++++++++++++++++++++------------------ sview/qt/main_window.py | 3 ++- tests/test_scanner.py | 5 ++++- 5 files changed, 38 insertions(+), 23 deletions(-) diff --git a/sview/qt/app.py b/sview/qt/app.py index 31b310a..200bfb5 100644 --- a/sview/qt/app.py +++ b/sview/qt/app.py @@ -239,7 +239,7 @@ def _apply_dark_theme(app: QApplication) -> None: background: transparent; border: 0; color: #cfd8e0; - padding: 3px 6px; + padding: 2px 3px; border-radius: 4px; } QToolButton#breadcrumbButton:hover { @@ -248,7 +248,7 @@ def _apply_dark_theme(app: QApplication) -> None: } QLabel#breadcrumbSeparator { color: #6f7e8b; - padding: 0 2px; + padding: 0; } QLabel#loadingOverlay { color: #8b99a5; diff --git a/sview/qt/icons.py b/sview/qt/icons.py index 1499608..8e89d61 100644 --- a/sview/qt/icons.py +++ b/sview/qt/icons.py @@ -35,6 +35,8 @@ from __future__ import annotations +from functools import lru_cache + from PySide6.QtCore import QPointF, QRectF, Qt from PySide6.QtGui import QColor, QIcon, QPainter, QPainterPath, QPen, QPixmap @@ -49,6 +51,7 @@ def browser_item_icon(item: BrowserItem, size: int = 18) -> QIcon: return _file_icon(size) +@lru_cache(maxsize=12) def _folder_icon(size: int) -> QIcon: pixmap = QPixmap(size, size) pixmap.fill(Qt.GlobalColor.transparent) @@ -71,6 +74,7 @@ def _folder_icon(size: int) -> QIcon: return QIcon(pixmap) +@lru_cache(maxsize=12) def _file_icon(size: int) -> QIcon: pixmap = QPixmap(size, size) pixmap.fill(Qt.GlobalColor.transparent) @@ -100,6 +104,7 @@ def _file_icon(size: int) -> QIcon: return QIcon(pixmap) +@lru_cache(maxsize=12) def _sequence_icon(size: int) -> QIcon: pixmap = QPixmap(size, size) pixmap.fill(Qt.GlobalColor.transparent) diff --git a/sview/qt/inspector.py b/sview/qt/inspector.py index d2fdcdf..f19a683 100644 --- a/sview/qt/inspector.py +++ b/sview/qt/inspector.py @@ -37,7 +37,7 @@ from pathlib import Path -from PySide6.QtCore import Qt +from PySide6.QtCore import QEvent, QSize, Qt from PySide6.QtGui import QImageReader, QPixmap from PySide6.QtWidgets import ( QFormLayout, @@ -146,6 +146,7 @@ def __init__(self) -> None: self._scroll.setFrameShape(QScrollArea.Shape.NoFrame) self._scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self._scroll.setWidget(body) + self._scroll.viewport().installEventFilter(self) layout.addWidget(self._scroll, 1) self.clear_details() @@ -212,6 +213,11 @@ def resizeEvent(self, event) -> None: super().resizeEvent(event) self._apply_thumbnail_pixmap() + def eventFilter(self, watched, event) -> bool: + if watched is self._scroll.viewport() and event.type() == QEvent.Type.Resize: + self._apply_thumbnail_pixmap() + return super().eventFilter(watched, event) + @staticmethod def _type_text(item: BrowserItem) -> str: if item.item_type is ItemType.SEQUENCE: @@ -258,39 +264,39 @@ def _update_thumbnail(self, item: BrowserItem) -> None: self._thumbnail.setText("No preview") return - reader = QImageReader(preview_path) + self._thumbnail_source_path = preview_path + self._apply_thumbnail_pixmap() + + def _apply_thumbnail_pixmap(self) -> None: + if self._thumbnail_source_path is None: + return + available_width = max(120, self._scroll.viewport().width() - 28) + reader = QImageReader(self._thumbnail_source_path) + reader.setAutoTransform(True) if not reader.canRead(): self._thumbnail_pixmap = None - self._thumbnail_source_path = preview_path self._thumbnail.setPixmap(QPixmap()) self._thumbnail.setText("Preview unavailable") return - + source_size = reader.size() + if source_size.isValid() and source_size.width() > 0: + target_height = max( + self.MIN_THUMBNAIL_HEIGHT, + int(source_size.height() * (available_width / source_size.width())), + ) + reader.setScaledSize(QSize(available_width, target_height)) pixmap = QPixmap.fromImageReader(reader) if pixmap.isNull(): self._thumbnail_pixmap = None - self._thumbnail_source_path = preview_path self._thumbnail.setPixmap(QPixmap()) self._thumbnail.setText("Preview unavailable") return - self._thumbnail_pixmap = pixmap - self._thumbnail_source_path = preview_path - self._apply_thumbnail_pixmap() - - def _apply_thumbnail_pixmap(self) -> None: - if self._thumbnail_pixmap is None: - return - available_width = max(120, self._scroll.viewport().width() - 28) - scaled = self._thumbnail_pixmap.scaledToWidth( - available_width, - Qt.TransformationMode.SmoothTransformation, - ) - frame_height = max(self.MIN_THUMBNAIL_HEIGHT, scaled.height() + 12) + frame_height = max(self.MIN_THUMBNAIL_HEIGHT, pixmap.height() + 12) self._thumbnail.setMinimumHeight(frame_height) self._thumbnail.setMaximumHeight(frame_height) self._thumbnail.setText("") - self._thumbnail.setPixmap(scaled) + self._thumbnail.setPixmap(pixmap) @staticmethod def _preview_path(item: BrowserItem) -> str | None: diff --git a/sview/qt/main_window.py b/sview/qt/main_window.py index 0acfacd..2a599e8 100644 --- a/sview/qt/main_window.py +++ b/sview/qt/main_window.py @@ -992,6 +992,7 @@ def _set_loading_state(self, loading: bool, path: str | None = None) -> None: self._filter_input.setEnabled(not loading) self._tree.setEnabled(not loading) self._table.setEnabled(not loading) + self._icon_view.setEnabled(not loading) self._stop_button.setEnabled(loading) self._loading_spinner.setVisible(loading) self._loading_overlay.setVisible(loading) @@ -1196,7 +1197,7 @@ def _update_breadcrumbs(self, path: Path) -> None: current_path = Path(parts[0]) if parts else normalized for index, part in enumerate(parts): if index > 0: - separator = QLabel("›") + separator = QLabel("/") separator.setObjectName("breadcrumbSeparator") self._breadcrumb_layout.addWidget(separator) current_path = current_path / part diff --git a/tests/test_scanner.py b/tests/test_scanner.py index 11d64f3..225886d 100644 --- a/tests/test_scanner.py +++ b/tests/test_scanner.py @@ -81,7 +81,10 @@ def test_directory_symlink_stays_a_folder(self) -> None: target = root / "target" target.mkdir() link = root / "linked-target" - link.symlink_to(target, target_is_directory=True) + try: + link.symlink_to(target, target_is_directory=True) + except (NotImplementedError, OSError): + self.skipTest("Symlinks are not available in this environment.") result = DirectoryScanner().scan(root) From 6dfa5523b1be19fe11acc5f578b9a6fb2752cd5e Mon Sep 17 00:00:00 2001 From: Ryan Galloway Date: Sun, 5 Apr 2026 15:40:43 -0700 Subject: [PATCH 7/7] Finalize UI polish for 0.2.0 --- CHANGELOG.md | 7 +++++++ pyproject.toml | 2 +- sview.png | Bin 67785 -> 71313 bytes sview/__init__.py | 2 +- 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8dde810..97b75b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## 0.2.0 - 2026-04-05 + +- Refined the desktop UI with a darker theme, tighter toolbar, custom item icons, and cleaner loading feedback +- Added icon and detail browsing improvements including type-to-filter, breadcrumbs, and better context menu organization +- Enhanced the Properties panel with responsive image thumbnails, scrolling content, and on-demand sequence actions +- Improved path handling for symlinked directories and polished overall navigation, search, and panel behavior + ## 0.1.2 - 2026-04-05 - Moved directory scanning into a subprocess worker for safer cancellation diff --git a/pyproject.toml b/pyproject.toml index 2a1422b..83c1e1d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "sview" -version = "0.1.2" +version = "0.2.0" description = "Sequence-aware filesystem browser" readme = "README.md" requires-python = ">=3.8" diff --git a/sview.png b/sview.png index e3c05739d87ce40e420286368f8af846c58bcd27..ec84879592ad82812f35c46885f8cc46473eaa96 100644 GIT binary patch literal 71313 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�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%0Dtx{f;Xgoe{KAy#{)KKt;@TnP4M-2Y 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 M>EA`&e(>V|14C@UcK`qY literal 67785 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 z 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 S!)$vs6C5VB?mms*WS}ol;z2$gV4I2R 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 tpFg%&_ZAs