Release v1.0.9: persist UI layout and fix SxxExx double-S renames.

Save window geometry, splitter sizes, and preview column widths on exit; restore on launch. Fix episode rewrite duplicating the season letter.

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
Bulk Renamer
2026-07-03 17:58:45 -05:00
co-authored by Cursor
parent 85dc873e16
commit a65ae73bcc
5 changed files with 54 additions and 8 deletions
+35 -1
View File
@@ -25,7 +25,7 @@ from PyQt6.QtWidgets import (
QCheckBox,
QComboBox,
)
from PyQt6.QtCore import Qt, QDir, QItemSelectionModel
from PyQt6.QtCore import Qt, QDir, QItemSelectionModel, QSettings
from PyQt6.QtGui import QFont, QColor
from engine.pipeline import compute_preview, perform_renames, save_undo_log, load_undo_log, perform_undo
@@ -53,7 +53,9 @@ class MainWindow(QMainWindow):
self._base_dir = ""
self._file_names: list[str] = []
self._preview_by_orig: dict[str, str] = {} # original name -> new name for selection preview
self._split: QSplitter | None = None
self._setup_ui()
self._restore_layout()
self._refresh_preview()
def _setup_ui(self):
@@ -172,8 +174,40 @@ class MainWindow(QMainWindow):
split.addWidget(right)
split.setSizes([320, 680])
self._split = split
layout.addWidget(split, 1)
def _settings(self) -> QSettings:
return QSettings()
def _restore_layout(self) -> None:
settings = self._settings()
geometry = settings.value("window/geometry")
if geometry is not None:
self.restoreGeometry(geometry)
if self._split is not None:
split_state = settings.value("splitter/state")
if split_state is not None:
self._split.restoreState(split_state)
header = self.preview_table.horizontalHeader()
header_state = settings.value("preview_table/header")
if header_state is not None:
header.restoreState(header_state)
def _save_layout(self) -> None:
settings = self._settings()
settings.setValue("window/geometry", self.saveGeometry())
if self._split is not None:
settings.setValue("splitter/state", self._split.saveState())
settings.setValue(
"preview_table/header",
self.preview_table.horizontalHeader().saveState(),
)
def closeEvent(self, event) -> None:
self._save_layout()
super().closeEvent(event)
def _browse(self):
path = QFileDialog.getExistingDirectory(self, "Select folder")
if path: