From 8ee5e1db68d48864560600f2b9da2d2aef75fbc8 Mon Sep 17 00:00:00 2001 From: Rebecca Breu Date: Sun, 11 Apr 2021 20:04:08 +0200 Subject: [PATCH] Add 'New Scene' action --- beeref/actions/actions.py | 6 ++++++ beeref/actions/menu_structure.py | 2 ++ beeref/view.py | 10 ++++++++-- tests/test_view.py | 20 ++++++++++++++++++-- 4 files changed, 34 insertions(+), 4 deletions(-) diff --git a/beeref/actions/actions.py b/beeref/actions/actions.py index 53f018b..5d394b0 100644 --- a/beeref/actions/actions.py +++ b/beeref/actions/actions.py @@ -114,4 +114,10 @@ actions = [ 'group': 'active_when_selection', 'enabled': False, }, + { + 'id': 'new_scene', + 'text': '&New Scene', + 'shortcuts': ['Ctrl+N'], + 'callback': 'clear_scene', + }, ] diff --git a/beeref/actions/menu_structure.py b/beeref/actions/menu_structure.py index e83e5df..662e646 100644 --- a/beeref/actions/menu_structure.py +++ b/beeref/actions/menu_structure.py @@ -19,7 +19,9 @@ menu_structure = [ { 'menu': '&File', 'items': [ + 'new_scene', 'open', + MENU_SEPARATOR, 'save', 'save_as', MENU_SEPARATOR, diff --git a/beeref/view.py b/beeref/view.py index 3e26117..8ad8192 100644 --- a/beeref/view.py +++ b/beeref/view.py @@ -102,6 +102,13 @@ class BeeGraphicsView(QtWidgets.QGraphicsView, ActionsMixin): return QtCore.QPoint(self.size().width() / 2, self.size().height() / 2) + def clear_scene(self): + logging.debug('Clearing scene...') + self.scene.clear() + self.undo_stack.clear() + self.filename = None + self.setTransform(QtGui.QTransform()) + def on_action_undo(self): logger.debug('Undo: %s' % self.undo_stack.undoText()) self.undo_stack.undo() @@ -132,8 +139,7 @@ class BeeGraphicsView(QtWidgets.QGraphicsView, ActionsMixin): def open_from_file(self, filename): logger.info(f'Opening file {filename}') - self.scene.clear() - self.undo_stack.clear() + self.clear_scene() try: progress = BeeProgressDialog( 'Loading %s' % filename, diff --git a/tests/test_view.py b/tests/test_view.py index c29d0e1..38b5c81 100644 --- a/tests/test_view.py +++ b/tests/test_view.py @@ -1,6 +1,6 @@ import os.path import tempfile -from unittest.mock import patch +from unittest.mock import MagicMock, patch from PyQt6 import QtGui, QtWidgets @@ -64,11 +64,27 @@ class BeeGraphicsViewTestCase(BeeTestCase): assert '*.png' in formats assert '*.jpg' in formats - def test_open_from_file(self): + def test_clear_scene(self): + item = BeePixmapItem(QtGui.QImage()) + self.view.scene.addItem(item) + self.view.scale(2, 2) + self.view.translate(123, 456) + self.view.filename = 'test.bee' + self.view.undo_stack = MagicMock() + + self.view.clear_scene() + assert not self.view.scene.items() + assert self.view.transform().isIdentity() + assert self.view.filename is None + self.view.undo_stack.clear.assert_called_once_with() + + @patch('beeref.view.BeeGraphicsView.clear_scene') + def test_open_from_file(self, clear_mock): root = os.path.dirname(__file__) filename = os.path.join(root, 'assets', 'test1item.bee') self.view.open_from_file(filename) assert len(self.view.scene.items()) == 1 + clear_mock.assert_called_once_with() @patch('PyQt6.QtWidgets.QMessageBox.warning') def test_open_from_file_when_error(self, warn_mock):