mirror of https://gitlab.com/openlp/openlp.git
Fixing Themes hot reload when using ServiceItem context menu (Song theme level)
This commit is contained in:
parent
70c9377e5a
commit
18e3969746
|
@ -1777,8 +1777,14 @@ class ServiceManager(QtWidgets.QWidget, RegistryBase, Ui_ServiceManager, LogMixi
|
|||
if not theme:
|
||||
theme = None
|
||||
item = self.find_service_item()[0]
|
||||
self.service_items[item]['service_item'].update_theme(theme)
|
||||
self.regenerate_service_items(True)
|
||||
service_item = self.service_items[item]['service_item']
|
||||
# Needs to be checked before updating theme on service, as it generates a new identifier
|
||||
is_selected_item_live = self.live_controller.service_item and \
|
||||
service_item.unique_identifier == self.live_controller.service_item.unique_identifier
|
||||
service_item.update_theme(theme)
|
||||
# self.regenerate_service_items(True)
|
||||
if self.settings.value('themes/hot reload') and is_selected_item_live:
|
||||
self.live_controller.refresh_service_item(service_item)
|
||||
|
||||
def on_make_live_action_triggered(self, checked):
|
||||
"""
|
||||
|
|
|
@ -833,14 +833,15 @@ class SlideController(QtWidgets.QWidget, LogMixin, RegistryProperties):
|
|||
# See bug #791050
|
||||
self.toolbar.show()
|
||||
|
||||
def refresh_service_item(self):
|
||||
def refresh_service_item(self, service_item=None):
|
||||
"""
|
||||
Method to update the service item if the screen has changed
|
||||
Method to update the current service item
|
||||
"""
|
||||
if self.service_item.is_text() or self.service_item.is_image():
|
||||
item = self.service_item
|
||||
item.render()
|
||||
self._process_item(item, self.selected_row)
|
||||
selected_row = self.selected_row
|
||||
if not service_item:
|
||||
service_item = self.service_item
|
||||
self._process_item(service_item, selected_row, True)
|
||||
self.slide_selected()
|
||||
|
||||
def add_service_item(self, item):
|
||||
"""
|
||||
|
|
|
@ -567,67 +567,19 @@ def test_refresh_service_item_text(settings):
|
|||
mocked_service_item.is_text.return_value = True
|
||||
mocked_service_item.is_image.return_value = False
|
||||
mocked_process_item = MagicMock()
|
||||
mocked_slide_selected = MagicMock()
|
||||
slide_controller = SlideController(None)
|
||||
slide_controller.service_item = mocked_service_item
|
||||
slide_controller._process_item = mocked_process_item
|
||||
slide_controller.slide_selected = mocked_slide_selected
|
||||
slide_controller.selected_row = 5
|
||||
|
||||
# WHEN: The refresh_service_item method() is called
|
||||
slide_controller.refresh_service_item()
|
||||
|
||||
# THEN: The item should be re-processed
|
||||
mocked_service_item.is_text.assert_called_once_with()
|
||||
assert 0 == mocked_service_item.is_image.call_count, 'is_image should not have been called'
|
||||
mocked_service_item.render.assert_called_once_with()
|
||||
mocked_process_item.assert_called_once_with(mocked_service_item, 5)
|
||||
|
||||
|
||||
def test_refresh_service_item_image(settings):
|
||||
"""
|
||||
Test that the refresh_service_item() method refreshes a image service item
|
||||
"""
|
||||
# GIVEN: A mock service item and a fresh slide controller
|
||||
mocked_service_item = MagicMock()
|
||||
mocked_service_item.is_text.return_value = False
|
||||
mocked_service_item.is_image.return_value = True
|
||||
mocked_process_item = MagicMock()
|
||||
slide_controller = SlideController(None)
|
||||
slide_controller.service_item = mocked_service_item
|
||||
slide_controller._process_item = mocked_process_item
|
||||
slide_controller.selected_row = 5
|
||||
|
||||
# WHEN: The refresh_service_item method() is called
|
||||
slide_controller.refresh_service_item()
|
||||
|
||||
# THEN: The item should be re-processed
|
||||
mocked_service_item.is_text.assert_called_once_with()
|
||||
mocked_service_item.is_image.assert_called_once_with()
|
||||
mocked_service_item.render.assert_called_once_with()
|
||||
mocked_process_item.assert_called_once_with(mocked_service_item, 5)
|
||||
|
||||
|
||||
def test_refresh_service_item_not_image_or_text(settings):
|
||||
"""
|
||||
Test that the refresh_service_item() method does not refresh a service item if it's neither text or an image
|
||||
"""
|
||||
# GIVEN: A mock service item and a fresh slide controller
|
||||
mocked_service_item = MagicMock()
|
||||
mocked_service_item.is_text.return_value = False
|
||||
mocked_service_item.is_image.return_value = False
|
||||
mocked_process_item = MagicMock()
|
||||
slide_controller = SlideController(None)
|
||||
slide_controller.service_item = mocked_service_item
|
||||
slide_controller._process_item = mocked_process_item
|
||||
slide_controller.selected_row = 5
|
||||
|
||||
# WHEN: The refresh_service_item method() is called
|
||||
slide_controller.refresh_service_item()
|
||||
|
||||
# THEN: The item should be re-processed
|
||||
mocked_service_item.is_text.assert_called_once_with()
|
||||
mocked_service_item.is_image.assert_called_once_with()
|
||||
assert 0 == mocked_service_item.render.call_count, 'The render() method should not have been called'
|
||||
assert 0 == mocked_process_item.call_count, 'The mocked_process_item() method should not have been called'
|
||||
slide_controller._process_item.assert_called_once_with(mocked_service_item, 5, True)
|
||||
slide_controller.slide_selected.assert_called_once()
|
||||
|
||||
|
||||
def test_add_service_item_with_song_edit(settings):
|
||||
|
|
Loading…
Reference in New Issue