@@ -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 )
0 commit comments