Add 'New Scene' action

This commit is contained in:
Rebecca Breu 2021-04-11 20:04:08 +02:00
parent 27813f5bd8
commit 8ee5e1db68
4 changed files with 34 additions and 4 deletions

View file

@ -114,4 +114,10 @@ actions = [
'group': 'active_when_selection',
'enabled': False,
},
{
'id': 'new_scene',
'text': '&New Scene',
'shortcuts': ['Ctrl+N'],
'callback': 'clear_scene',
},
]

View file

@ -19,7 +19,9 @@ menu_structure = [
{
'menu': '&File',
'items': [
'new_scene',
'open',
MENU_SEPARATOR,
'save',
'save_as',
MENU_SEPARATOR,

View file

@ -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,

View file

@ -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):