mirror of
https://github.com/rbreu/beeref.git
synced 2026-03-11 08:54:28 +00:00
Save scrollbar visibility to settings
This commit is contained in:
parent
f3dd80af4d
commit
a6ad6b47fe
4 changed files with 44 additions and 7 deletions
|
|
@ -212,6 +212,7 @@ actions = [
|
|||
'id': 'show_scrollbars',
|
||||
'text': 'Show &Scrollbars',
|
||||
'checkable': True,
|
||||
'settings': 'View/show_scrollbars',
|
||||
'callback': 'on_action_show_scrollbars',
|
||||
},
|
||||
{
|
||||
|
|
|
|||
|
|
@ -49,18 +49,32 @@ class ActionsMixin:
|
|||
self.bee_actions = {}
|
||||
self.bee_actiongroups = defaultdict(list)
|
||||
|
||||
def _store_checkable_setting(self, key, value):
|
||||
self.settings.setValue(key, value)
|
||||
|
||||
def _init_action_checkable(self, actiondef, qaction):
|
||||
qaction.setCheckable(True)
|
||||
callback = getattr(self, actiondef['callback'])
|
||||
qaction.toggled.connect(callback)
|
||||
settings_key = actiondef.get('settings')
|
||||
if settings_key:
|
||||
val = self.settings.value(settings_key, False, type=bool)
|
||||
qaction.setChecked(val)
|
||||
callback(val)
|
||||
qaction.toggled.connect(
|
||||
partial(self._store_checkable_setting, settings_key))
|
||||
|
||||
def _create_actions(self):
|
||||
for action in actions:
|
||||
qaction = QtGui.QAction(action['text'], self)
|
||||
if 'shortcuts' in action:
|
||||
qaction.setShortcuts(action['shortcuts'])
|
||||
if action.get('checkable', False):
|
||||
qaction.toggled.connect(getattr(self, action['callback']))
|
||||
self._init_action_checkable(action, qaction)
|
||||
else:
|
||||
qaction.triggered.connect(getattr(self, action['callback']))
|
||||
self.addAction(qaction)
|
||||
qaction.setEnabled(action.get('enabled', True))
|
||||
qaction.setCheckable(action.get('checkable', False))
|
||||
self.bee_actions[action['id']] = qaction
|
||||
if 'group' in action:
|
||||
self.bee_actiongroups[action['group']].append(qaction)
|
||||
|
|
|
|||
|
|
@ -52,10 +52,6 @@ class BeeGraphicsView(QtWidgets.QGraphicsView, ActionsMixin):
|
|||
self.scene = BeeGraphicsScene(self.undo_stack)
|
||||
self.filename = None
|
||||
|
||||
self.setHorizontalScrollBarPolicy(
|
||||
Qt.ScrollBarPolicy.ScrollBarAlwaysOff)
|
||||
self.setVerticalScrollBarPolicy(
|
||||
Qt.ScrollBarPolicy.ScrollBarAlwaysOff)
|
||||
self.setFrameShape(QtWidgets.QFrame.Shape.NoFrame)
|
||||
self.setAcceptDrops(True)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import os.path
|
||||
from unittest.mock import patch
|
||||
from unittest.mock import patch, MagicMock
|
||||
|
||||
from PyQt6 import QtWidgets
|
||||
|
||||
|
|
@ -9,6 +9,8 @@ from ..base import BeeTestCase
|
|||
|
||||
|
||||
class FooWidget(QtWidgets.QWidget, ActionsMixin):
|
||||
settings = MagicMock
|
||||
|
||||
def on_foo(self):
|
||||
pass
|
||||
|
||||
|
|
@ -71,8 +73,32 @@ class ActionsMixinTestCase(BeeTestCase):
|
|||
qaction = self.widget.actions()[0]
|
||||
assert qaction.text() == '&Foo'
|
||||
assert qaction.isEnabled() is True
|
||||
assert qaction.isChecked() is False
|
||||
assert self.widget.bee_actions['foo'] == qaction
|
||||
|
||||
@patch.object(FooWidget, 'on_foo')
|
||||
@patch.object(FooWidget, 'settings')
|
||||
@patch('PyQt6.QtGui.QAction.toggled')
|
||||
def test_create_actions_checkable_with_settings(
|
||||
self, toggle_mock, settings_mock, callback_mock):
|
||||
self.actions_mock.__iter__.return_value = [{
|
||||
'id': 'foo',
|
||||
'text': '&Foo',
|
||||
'checkable': True,
|
||||
'callback': 'on_foo',
|
||||
'settings': 'foo/bar',
|
||||
}]
|
||||
|
||||
self.menu_mock.__iter__.return_value = ['foo']
|
||||
settings_mock.value.return_value = True
|
||||
self.widget.build_menu_and_actions()
|
||||
settings_mock.value.assert_called_once_with(
|
||||
'foo/bar', False, type=bool)
|
||||
qaction = self.widget.actions()[0]
|
||||
assert qaction.isChecked() is True
|
||||
assert toggle_mock.connect.call_count == 2
|
||||
callback_mock.assert_called_once_with(True)
|
||||
|
||||
def test_create_actions_enabled_false(self):
|
||||
self.actions_mock.__iter__.return_value = [{
|
||||
'id': 'foo',
|
||||
|
|
|
|||
Loading…
Reference in a new issue