diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 6a60f35..6ebbd4d 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -13,6 +13,8 @@ Fixed * Fixed a crash when pressing the keyboard shortcut for New Scene while in the process of doing a rubberband selection +* The checkmark of the menu entry Images -> Grayscale is now updating + correctly depending on the selected images 0.3.2 - 2024-01-21 diff --git a/beeref/view.py b/beeref/view.py index a1bd242..4463cb0 100644 --- a/beeref/view.py +++ b/beeref/view.py @@ -21,7 +21,7 @@ import os.path from PyQt6 import QtCore, QtGui, QtWidgets from PyQt6.QtCore import Qt -from beeref.actions import ActionsMixin +from beeref.actions import ActionsMixin, actions from beeref import commands from beeref.config import CommandlineArgs, BeeSettings from beeref import constants @@ -603,6 +603,11 @@ class BeeGraphicsView(MainControlsMixin, self.scene.has_selection()) self.actiongroup_set_enabled('active_when_single_image', self.scene.has_single_image_selection()) + + if self.scene.has_selection(): + item = self.scene.selectedItems(user_only=True)[0] + grayscale = getattr(item, 'grayscale', False) + actions.actions['grayscale'].qaction.setChecked(grayscale) self.viewport().repaint() def on_cursor_changed(self, cursor): diff --git a/tests/test_view.py b/tests/test_view.py index da8c887..2a72d6b 100644 --- a/tests/test_view.py +++ b/tests/test_view.py @@ -6,6 +6,7 @@ from unittest.mock import MagicMock, patch, mock_open from PyQt6 import QtCore, QtGui, QtWidgets from PyQt6.QtCore import Qt +from beeref.actions import actions from beeref.config import logfile_name from beeref.items import BeePixmapItem, BeeTextItem from beeref.view import BeeGraphicsView @@ -578,6 +579,23 @@ def test_on_action_cut(copy_mock, view, item): assert view.undo_stack.isClean() is False +def test_on_selection_changed_updates_grayscale_action(view): + item = BeePixmapItem(QtGui.QImage()) + view.scene.addItem(item) + item.grayscale = True + actions.actions['grayscale'].qaction.setChecked(False) + item.setSelected(True) + assert actions.actions['grayscale'].qaction.isChecked() is True + + +def test_on_selection_changed_grayscale_action_ignores_textitem(view): + item = BeeTextItem('foo') + view.scene.addItem(item) + actions.actions['grayscale'].qaction.setChecked(True) + item.setSelected(True) + assert actions.actions['grayscale'].qaction.isChecked() is False + + def test_on_action_reset_scale(view, item): view.scene.addItem(item) item.setScale(2)