From 45943ba00d38c6d2dcb3fcf9980c4bf352dc3a99 Mon Sep 17 00:00:00 2001 From: purpletennisball <212221402+purpletennisball@users.noreply.github.com> Date: Sun, 3 Aug 2025 00:22:44 -0400 Subject: [PATCH] feat: zoom keyboard shortcut (#956) * feat: add increase/decrease zoom menu items * fix: increase thumbnail size not working on windows * fix: duplicated menu items --- src/tagstudio/qt/main_window.py | 28 ++++++++++++++++++++ src/tagstudio/qt/ts_qt.py | 22 ++++++++++++++- src/tagstudio/resources/translations/en.json | 2 ++ 3 files changed, 51 insertions(+), 1 deletion(-) diff --git a/src/tagstudio/qt/main_window.py b/src/tagstudio/qt/main_window.py index 87b88de7..6263c056 100644 --- a/src/tagstudio/qt/main_window.py +++ b/src/tagstudio/qt/main_window.py @@ -304,6 +304,34 @@ class MainMenuBar(QMenuBar): self.show_filenames_action.setCheckable(True) self.view_menu.addAction(self.show_filenames_action) + self.view_menu.addSeparator() + + self.decrease_thumbnail_size_action = QAction( + Translations["menu.view.decrease_thumbnail_size"], self + ) + self.decrease_thumbnail_size_action.setShortcut( + QtCore.QKeyCombination( + QtCore.Qt.KeyboardModifier(QtCore.Qt.KeyboardModifier.ControlModifier), + QtCore.Qt.Key.Key_Minus, + ) + ) + self.decrease_thumbnail_size_action.setToolTip("Ctrl+-") + self.view_menu.addAction(self.decrease_thumbnail_size_action) + + self.increase_thumbnail_size_action = QAction( + Translations["menu.view.increase_thumbnail_size"], self + ) + self.increase_thumbnail_size_action.setShortcut( + QtCore.QKeyCombination( + QtCore.Qt.KeyboardModifier(QtCore.Qt.KeyboardModifier.ControlModifier), + QtCore.Qt.Key.Key_Equal, + ) + ) + self.increase_thumbnail_size_action.setToolTip("Ctrl+=") + self.view_menu.addAction(self.increase_thumbnail_size_action) + + self.view_menu.addSeparator() + self.addMenu(self.view_menu) def setup_tools_menu(self): diff --git a/src/tagstudio/qt/ts_qt.py b/src/tagstudio/qt/ts_qt.py index 2479a395..f1d6b0fd 100644 --- a/src/tagstudio/qt/ts_qt.py +++ b/src/tagstudio/qt/ts_qt.py @@ -479,9 +479,28 @@ class QtDriver(DriverMixin, QObject): self.settings.show_filenames_in_grid ) + def on_decrease_thumbnail_size_action(): + new_val = self.main_window.thumb_size_combobox.currentIndex() + 1 + if not (new_val + 1) > len(self.main_window.THUMB_SIZES): + self.main_window.thumb_size_combobox.setCurrentIndex(new_val) + + self.main_window.menu_bar.decrease_thumbnail_size_action.triggered.connect( + on_decrease_thumbnail_size_action + ) + + def on_increase_thumbnail_size_action(): + new_val = self.main_window.thumb_size_combobox.currentIndex() - 1 + if not new_val < 0: + self.main_window.thumb_size_combobox.setCurrentIndex(new_val) + + self.main_window.menu_bar.increase_thumbnail_size_action.triggered.connect( + on_increase_thumbnail_size_action + ) + # endregion # region Tools Menu =========================================================== + def create_fix_unlinked_entries_modal(): if not hasattr(self, "unlinked_modal"): self.unlinked_modal = FixUnlinkedEntriesModal(self.lib, self) @@ -624,8 +643,9 @@ class QtDriver(DriverMixin, QObject): ) # Thumbnail Size ComboBox + self.main_window.thumb_size_combobox.setCurrentIndex(2) # Default: Medium self.main_window.thumb_size_combobox.currentIndexChanged.connect( - lambda: self.thumb_size_callback(self.main_window.thumb_size_combobox.currentData()) + lambda: self.thumb_size_callback(self.main_window.thumb_size_combobox.currentIndex()) ) self._update_thumb_count() diff --git a/src/tagstudio/resources/translations/en.json b/src/tagstudio/resources/translations/en.json index a5bc23c9..6f29bd9f 100644 --- a/src/tagstudio/resources/translations/en.json +++ b/src/tagstudio/resources/translations/en.json @@ -217,6 +217,8 @@ "menu.tools.fix_duplicate_files": "Fix Duplicate &Files", "menu.tools.fix_unlinked_entries": "Fix &Unlinked Entries", "menu.tools": "&Tools", + "menu.view.decrease_thumbnail_size": "Decrease Thumbnail Size", + "menu.view.increase_thumbnail_size": "Increase Thumbnail Size", "menu.view": "&View", "menu.window": "Window", "namespace.create.description_color": "Tag colors use namespaces as color palette groups. All custom colors must be under a namespace group first.",