Skip to content

Commit 97ee43c

Browse files
authored
feat: add ability to invert selection (#909)
* implement selection inversing * Rename Select Inverse to Invert Selection
1 parent a72c2c4 commit 97ee43c

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

src/tagstudio/qt/ts_qt.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -473,6 +473,21 @@ def set_open_last_loaded_on_startup(checked: bool):
473473
self.select_all_action.setEnabled(False)
474474
edit_menu.addAction(self.select_all_action)
475475

476+
self.select_inverse_action = QAction(Translations["select.inverse"], menu_bar)
477+
self.select_inverse_action.triggered.connect(self.select_inverse_action_callback)
478+
self.select_inverse_action.setShortcut(
479+
QtCore.QKeyCombination(
480+
QtCore.Qt.KeyboardModifier(
481+
QtCore.Qt.KeyboardModifier.ControlModifier
482+
^ QtCore.Qt.KeyboardModifier.ShiftModifier
483+
),
484+
QtCore.Qt.Key.Key_I,
485+
)
486+
)
487+
self.select_inverse_action.setToolTip("Ctrl+Shift+I")
488+
self.select_inverse_action.setEnabled(False)
489+
edit_menu.addAction(self.select_inverse_action)
490+
476491
self.clear_select_action = QAction(Translations["select.clear"], menu_bar)
477492
self.clear_select_action.triggered.connect(self.clear_select_action_callback)
478493
self.clear_select_action.setShortcut(QtCore.Qt.Key.Key_Escape)
@@ -957,6 +972,26 @@ def select_all_action_callback(self):
957972

958973
self.preview_panel.update_widgets(update_preview=False)
959974

975+
def select_inverse_action_callback(self):
976+
"""Invert the selection of all visible items."""
977+
new_selected = []
978+
979+
for item in self.item_thumbs:
980+
if item.mode and not item.isHidden():
981+
if item.item_id in self.selected:
982+
item.thumb_button.set_selected(False)
983+
else:
984+
item.thumb_button.set_selected(True)
985+
new_selected.append(item.item_id)
986+
987+
self.selected = new_selected
988+
989+
self.set_macro_menu_viability()
990+
self.set_clipboard_menu_viability()
991+
self.set_select_actions_visibility()
992+
993+
self.preview_panel.update_widgets(update_preview=False)
994+
960995
def clear_select_action_callback(self):
961996
self.selected.clear()
962997
self.set_select_actions_visibility()
@@ -1479,8 +1514,10 @@ def set_select_actions_visibility(self):
14791514

14801515
if self.frame_content:
14811516
self.select_all_action.setEnabled(True)
1517+
self.select_inverse_action.setEnabled(True)
14821518
else:
14831519
self.select_all_action.setEnabled(False)
1520+
self.select_inverse_action.setEnabled(False)
14841521

14851522
if self.selected:
14861523
self.add_tag_to_selected_action.setEnabled(True)

src/tagstudio/resources/translations/en.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,7 @@
229229
"select.add_tag_to_selected": "Add Tag to Selected",
230230
"select.all": "Select All",
231231
"select.clear": "Clear Selection",
232+
"select.inverse": "Invert Selection",
232233
"settings.clear_thumb_cache.title": "Clear Thumbnail Cache",
233234
"settings.filepath.label": "Filepath Visibility",
234235
"settings.filepath.option.full": "Show Full Paths",

0 commit comments

Comments
 (0)