From 770843e0c6657b30d8fea7e2318165d3f4fc855f Mon Sep 17 00:00:00 2001 From: suutari-olli Date: Thu, 3 Mar 2016 00:49:49 +0200 Subject: [PATCH 01/30] This branch adds the functionality of un-blanking display from: blank to desktop, black and theme by clicking slides in "Live" panel. This also adds this functionality for: - Starting loops - Go to verse x - Next/Previous verse --- openlp/core/ui/slidecontroller.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index d2e2fe4ae..518995242 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -1085,6 +1085,8 @@ class SlideController(DisplayController, RegistryProperties): # done by the thread holding the lock. If it is a "start" slide, we must wait for the lock, but only for 0.2 # seconds, since we don't want to cause a deadlock timeout = 0.2 if start else -1 + if self.is_live: + Registry().execute('slidecontroller_live_unblank') if not self.slide_selected_lock.acquire(start, timeout): if start: self.log_debug('Could not get lock in slide_selected after waiting %f, skip to avoid deadlock.' From 87b9ae3600ebdd1a01cbb0f942daff2fdfa7f011 Mon Sep 17 00:00:00 2001 From: suutari-olli Date: Thu, 3 Mar 2016 02:07:52 +0200 Subject: [PATCH 02/30] Added "Unblank display when changing slide in Live" to advanced tab. Added automatic unblanking when starting loopped playback. Now, only the tests remain! --- openlp/core/common/settings.py | 1 + openlp/core/ui/advancedtab.py | 7 +++++++ openlp/core/ui/slidecontroller.py | 6 ++++-- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/openlp/core/common/settings.py b/openlp/core/common/settings.py index 8ef2b3c8b..ea554e6a3 100644 --- a/openlp/core/common/settings.py +++ b/openlp/core/common/settings.py @@ -119,6 +119,7 @@ class Settings(QtCore.QSettings): 'advanced/default service name': UiStrings().DefaultServiceName, 'advanced/display size': 0, 'advanced/double click live': False, + 'advanced/click live slide to unblank': True, 'advanced/enable exit confirmation': True, 'advanced/expand service item': False, 'advanced/hide mouse': True, diff --git a/openlp/core/ui/advancedtab.py b/openlp/core/ui/advancedtab.py index 4421b432f..d63c7385a 100644 --- a/openlp/core/ui/advancedtab.py +++ b/openlp/core/ui/advancedtab.py @@ -73,7 +73,10 @@ class AdvancedTab(SettingsTab): self.ui_layout.addRow(self.media_plugin_check_box) self.double_click_live_check_box = QtWidgets.QCheckBox(self.ui_group_box) self.double_click_live_check_box.setObjectName('double_click_live_check_box') + self.click_live_slide_to_unblank_check_box = QtWidgets.QCheckBox(self.ui_group_box) + self.click_live_slide_to_unblank_check_box.setObjectName('click_live_slide_to_unblank_') self.ui_layout.addRow(self.double_click_live_check_box) + self.ui_layout.addRow(self.click_live_slide_to_unblank_check_box) self.single_click_preview_check_box = QtWidgets.QCheckBox(self.ui_group_box) self.single_click_preview_check_box.setObjectName('single_click_preview_check_box') self.ui_layout.addRow(self.single_click_preview_check_box) @@ -268,6 +271,8 @@ class AdvancedTab(SettingsTab): 'Remember active media manager tab on startup')) self.double_click_live_check_box.setText(translate('OpenLP.AdvancedTab', 'Double-click to send items straight to live')) + self.click_live_slide_to_unblank_check_box.setText(translate('OpenLP.AdvancedTab', + 'Unblank display when changing slide in Live')) self.single_click_preview_check_box.setText(translate('OpenLP.AdvancedTab', 'Preview items when clicked in Media Manager')) self.expand_service_item_check_box.setText(translate('OpenLP.AdvancedTab', @@ -338,6 +343,7 @@ class AdvancedTab(SettingsTab): self.recent_spin_box.setValue(settings.value('recent file count')) self.media_plugin_check_box.setChecked(settings.value('save current plugin')) self.double_click_live_check_box.setChecked(settings.value('double click live')) + self.click_live_slide_to_unblank_check_box.setChecked(settings.value('click live slide to unblank')) self.single_click_preview_check_box.setChecked(settings.value('single click preview')) self.expand_service_item_check_box.setChecked(settings.value('expand service item')) self.enable_auto_close_check_box.setChecked(settings.value('enable exit confirmation')) @@ -419,6 +425,7 @@ class AdvancedTab(SettingsTab): settings.setValue('recent file count', self.recent_spin_box.value()) settings.setValue('save current plugin', self.media_plugin_check_box.isChecked()) settings.setValue('double click live', self.double_click_live_check_box.isChecked()) + settings.setValue('click live slide to unblank', self.click_live_slide_to_unblank_check_box.isChecked()) settings.setValue('single click preview', self.single_click_preview_check_box.isChecked()) settings.setValue('expand service item', self.expand_service_item_check_box.isChecked()) settings.setValue('enable exit confirmation', self.enable_auto_close_check_box.isChecked()) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 518995242..7292d7975 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -1085,13 +1085,13 @@ class SlideController(DisplayController, RegistryProperties): # done by the thread holding the lock. If it is a "start" slide, we must wait for the lock, but only for 0.2 # seconds, since we don't want to cause a deadlock timeout = 0.2 if start else -1 - if self.is_live: - Registry().execute('slidecontroller_live_unblank') if not self.slide_selected_lock.acquire(start, timeout): if start: self.log_debug('Could not get lock in slide_selected after waiting %f, skip to avoid deadlock.' % timeout) return + if self.is_live and Settings().value('advanced/click live slide to unblank'): + Registry().execute('slidecontroller_live_unblank') row = self.preview_widget.current_slide_number() old_selected_row = self.selected_row self.selected_row = 0 @@ -1248,6 +1248,7 @@ class SlideController(DisplayController, RegistryProperties): :param checked: is the check box checked. """ + Registry().execute('slidecontroller_live_unblank') if checked is None: checked = self.play_slides_loop.isChecked() else: @@ -1271,6 +1272,7 @@ class SlideController(DisplayController, RegistryProperties): :param checked: is the check box checked. """ + Registry().execute('slidecontroller_live_unblank') if checked is None: checked = self.play_slides_once.isChecked() else: From 43df6739b0f1cbe459b01b1c032a8d6ffccd92d7 Mon Sep 17 00:00:00 2001 From: suutari-olli Date: Thu, 3 Mar 2016 04:49:04 +0200 Subject: [PATCH 03/30] Now including fix for bug: https://bugs.launchpad.net/openlp/+bug/1531691 --- openlp/core/ui/slidecontroller.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 7292d7975..506f8ffcd 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -789,10 +789,12 @@ class SlideController(DisplayController, RegistryProperties): def replace_service_manager_item(self, item): """ Replacement item following a remote edit - + This action takes place when a song that is sent to live from Service Manager is edited. + "not self.hide_mode()" prevents this from happening when display is blanked. + If same song is currently in live, it updates the lyrics. If display i blanked, it won't update. (bug) :param item: The current service item """ - if item == self.service_item: + if item == self.service_item and not self.hide_mode(): self._process_item(item, self.preview_widget.current_slide_number()) def add_service_manager_item(self, item, slide_no): From 546ed5682360a2774288305764e55a53f89510aa Mon Sep 17 00:00:00 2001 From: suutari-olli Date: Mon, 14 Mar 2016 04:11:13 +0200 Subject: [PATCH 04/30] - If display is blanked when song in Live is edited, now re-blanks display after updating the song. (Improved fix) - Improved un-blanking when starting Loop, pressing "Stop loop" no longer unblanks display. - Improved comment(s) To do: - Write test(s) --- openlp/core/ui/slidecontroller.py | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 506f8ffcd..8266a80de 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -786,16 +786,30 @@ class SlideController(DisplayController, RegistryProperties): self.song_edit = False self._process_item(item, slide_no) - def replace_service_manager_item(self, item): + def replace_service_manager_item (self, item): """ Replacement item following a remote edit - This action takes place when a song that is sent to live from Service Manager is edited. - "not self.hide_mode()" prevents this from happening when display is blanked. - If same song is currently in live, it updates the lyrics. If display i blanked, it won't update. (bug) + + This action also takes place when a song that is sent to live from Service Manager is edited. + If display is blanked, this will update the song and then re-blank the display. + As result, lyrics are flashed on screen for a very short time before re-blanking happens. (Bug) + :param item: The current service item """ - if item == self.service_item and not self.hide_mode(): - self._process_item(item, self.preview_widget.current_slide_number()) + if item == self.service_item: + if not self.hide_mode(): + self._process_item(item, self.preview_widget.current_slide_number()) + # "isChecked" method is required for checking blanks, on_xx_display(False) does not work. + elif self.hide_mode(): + if self.blank_screen.isChecked(): + self._process_item(item, self.preview_widget.current_slide_number()) + self.on_blank_display(True) + elif self.theme_screen.isChecked(): + self._process_item(item, self.preview_widget.current_slide_number()) + self.on_theme_display(True) + elif self.desktop_screen.isChecked(): + self._process_item(item, self.preview_widget.current_slide_number()) + self.on_hide_display(True) def add_service_manager_item(self, item, slide_no): """ @@ -1250,7 +1264,6 @@ class SlideController(DisplayController, RegistryProperties): :param checked: is the check box checked. """ - Registry().execute('slidecontroller_live_unblank') if checked is None: checked = self.play_slides_loop.isChecked() else: @@ -1263,6 +1276,7 @@ class SlideController(DisplayController, RegistryProperties): self.play_slides_once.setText(UiStrings().PlaySlidesToEnd) self.play_slides_menu.setDefaultAction(self.play_slides_loop) self.play_slides_once.setChecked(False) + Registry().execute('slidecontroller_live_unblank') else: self.play_slides_loop.setIcon(build_icon(':/media/media_time.png')) self.play_slides_loop.setText(UiStrings().PlaySlidesInLoop) @@ -1274,7 +1288,6 @@ class SlideController(DisplayController, RegistryProperties): :param checked: is the check box checked. """ - Registry().execute('slidecontroller_live_unblank') if checked is None: checked = self.play_slides_once.isChecked() else: @@ -1287,6 +1300,7 @@ class SlideController(DisplayController, RegistryProperties): self.play_slides_loop.setText(UiStrings().PlaySlidesInLoop) self.play_slides_menu.setDefaultAction(self.play_slides_once) self.play_slides_loop.setChecked(False) + Registry().execute('slidecontroller_live_unblank') else: self.play_slides_once.setIcon(build_icon(':/media/media_time')) self.play_slides_once.setText(UiStrings().PlaySlidesToEnd) From 0c231353041fe543df14a9b0b616480d6f59b393 Mon Sep 17 00:00:00 2001 From: suutari-olli Date: Tue, 15 Mar 2016 11:39:54 +0200 Subject: [PATCH 05/30] - Removed Whites space before (self, item) on row 789, how did it get there in the first place? --- openlp/core/ui/slidecontroller.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 8266a80de..d000b80e9 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -786,10 +786,9 @@ class SlideController(DisplayController, RegistryProperties): self.song_edit = False self._process_item(item, slide_no) - def replace_service_manager_item (self, item): + def replace_service_manager_item(self, item): """ Replacement item following a remote edit - This action also takes place when a song that is sent to live from Service Manager is edited. If display is blanked, this will update the song and then re-blank the display. As result, lyrics are flashed on screen for a very short time before re-blanking happens. (Bug) @@ -810,6 +809,7 @@ class SlideController(DisplayController, RegistryProperties): elif self.desktop_screen.isChecked(): self._process_item(item, self.preview_widget.current_slide_number()) self.on_hide_display(True) + self.on_hide_display(True) def add_service_manager_item(self, item, slide_no): """ From ddae0b42476f851b46ee21e8fb73c32d7d7eccf6 Mon Sep 17 00:00:00 2001 From: suutari-olli Date: Tue, 15 Mar 2016 16:11:24 +0200 Subject: [PATCH 06/30] Removed duplicate: self.on_hide_display(True) (Was trying to create/test a test but failed and forgot to take it away) --- openlp/core/ui/slidecontroller.py | 1 - 1 file changed, 1 deletion(-) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index d000b80e9..fac67437f 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -809,7 +809,6 @@ class SlideController(DisplayController, RegistryProperties): elif self.desktop_screen.isChecked(): self._process_item(item, self.preview_widget.current_slide_number()) self.on_hide_display(True) - self.on_hide_display(True) def add_service_manager_item(self, item, slide_no): """ From 4a6b5b7cc4db677d3d1a75f54bd61ecce0f404e1 Mon Sep 17 00:00:00 2001 From: suutari-olli Date: Tue, 15 Mar 2016 20:37:55 +0200 Subject: [PATCH 07/30] In this merge: - Moved setting for controlling unblanking behaviour to General options tab. - Removed it from advanced tab - Changed default setting to "no" - Looped playback (once or to end) is now linked to this setting - Unblanking slides on click -.- no longer unblanks display when sending new items live if "Unblank display when sending new item to live" is not enabled. -.- - Doubleclicking preview -.- ^^ - Improved some comments To do: Test(s)? --- openlp/core/common/settings.py | 2 +- openlp/core/ui/advancedtab.py | 7 ------- openlp/core/ui/generaltab.py | 7 +++++++ openlp/core/ui/slidecontroller.py | 21 ++++++++++++++++----- 4 files changed, 24 insertions(+), 13 deletions(-) diff --git a/openlp/core/common/settings.py b/openlp/core/common/settings.py index ea554e6a3..cca78bd2d 100644 --- a/openlp/core/common/settings.py +++ b/openlp/core/common/settings.py @@ -119,7 +119,6 @@ class Settings(QtCore.QSettings): 'advanced/default service name': UiStrings().DefaultServiceName, 'advanced/display size': 0, 'advanced/double click live': False, - 'advanced/click live slide to unblank': True, 'advanced/enable exit confirmation': True, 'advanced/expand service item': False, 'advanced/hide mouse': True, @@ -141,6 +140,7 @@ class Settings(QtCore.QSettings): 'core/auto preview': False, 'core/audio start paused': True, 'core/auto unblank': False, + 'core/click live slide to unblank': False, 'core/blank warning': False, 'core/ccli number': '', 'core/has run wizard': False, diff --git a/openlp/core/ui/advancedtab.py b/openlp/core/ui/advancedtab.py index d63c7385a..4421b432f 100644 --- a/openlp/core/ui/advancedtab.py +++ b/openlp/core/ui/advancedtab.py @@ -73,10 +73,7 @@ class AdvancedTab(SettingsTab): self.ui_layout.addRow(self.media_plugin_check_box) self.double_click_live_check_box = QtWidgets.QCheckBox(self.ui_group_box) self.double_click_live_check_box.setObjectName('double_click_live_check_box') - self.click_live_slide_to_unblank_check_box = QtWidgets.QCheckBox(self.ui_group_box) - self.click_live_slide_to_unblank_check_box.setObjectName('click_live_slide_to_unblank_') self.ui_layout.addRow(self.double_click_live_check_box) - self.ui_layout.addRow(self.click_live_slide_to_unblank_check_box) self.single_click_preview_check_box = QtWidgets.QCheckBox(self.ui_group_box) self.single_click_preview_check_box.setObjectName('single_click_preview_check_box') self.ui_layout.addRow(self.single_click_preview_check_box) @@ -271,8 +268,6 @@ class AdvancedTab(SettingsTab): 'Remember active media manager tab on startup')) self.double_click_live_check_box.setText(translate('OpenLP.AdvancedTab', 'Double-click to send items straight to live')) - self.click_live_slide_to_unblank_check_box.setText(translate('OpenLP.AdvancedTab', - 'Unblank display when changing slide in Live')) self.single_click_preview_check_box.setText(translate('OpenLP.AdvancedTab', 'Preview items when clicked in Media Manager')) self.expand_service_item_check_box.setText(translate('OpenLP.AdvancedTab', @@ -343,7 +338,6 @@ class AdvancedTab(SettingsTab): self.recent_spin_box.setValue(settings.value('recent file count')) self.media_plugin_check_box.setChecked(settings.value('save current plugin')) self.double_click_live_check_box.setChecked(settings.value('double click live')) - self.click_live_slide_to_unblank_check_box.setChecked(settings.value('click live slide to unblank')) self.single_click_preview_check_box.setChecked(settings.value('single click preview')) self.expand_service_item_check_box.setChecked(settings.value('expand service item')) self.enable_auto_close_check_box.setChecked(settings.value('enable exit confirmation')) @@ -425,7 +419,6 @@ class AdvancedTab(SettingsTab): settings.setValue('recent file count', self.recent_spin_box.value()) settings.setValue('save current plugin', self.media_plugin_check_box.isChecked()) settings.setValue('double click live', self.double_click_live_check_box.isChecked()) - settings.setValue('click live slide to unblank', self.click_live_slide_to_unblank_check_box.isChecked()) settings.setValue('single click preview', self.single_click_preview_check_box.isChecked()) settings.setValue('expand service item', self.expand_service_item_check_box.isChecked()) settings.setValue('enable exit confirmation', self.enable_auto_close_check_box.isChecked()) diff --git a/openlp/core/ui/generaltab.py b/openlp/core/ui/generaltab.py index 8ed8b3edf..da60f8311 100644 --- a/openlp/core/ui/generaltab.py +++ b/openlp/core/ui/generaltab.py @@ -173,6 +173,9 @@ class GeneralTab(SettingsTab): self.auto_unblank_check_box = QtWidgets.QCheckBox(self.settings_group_box) self.auto_unblank_check_box.setObjectName('auto_unblank_check_box') self.settings_layout.addRow(self.auto_unblank_check_box) + self.click_live_slide_to_unblank_check_box = QtWidgets.QCheckBox(self.settings_group_box) + self.click_live_slide_to_unblank_check_box.setObjectName('click_live_slide_to_unblank_') + self.settings_layout.addRow(self.click_live_slide_to_unblank_check_box) self.auto_preview_check_box = QtWidgets.QCheckBox(self.settings_group_box) self.auto_preview_check_box.setObjectName('auto_preview_check_box') self.settings_layout.addRow(self.auto_preview_check_box) @@ -217,6 +220,8 @@ class GeneralTab(SettingsTab): self.save_check_service_check_box.setText(translate('OpenLP.GeneralTab', 'Prompt to save before starting a new service')) self.auto_unblank_check_box.setText(translate('OpenLP.GeneralTab', 'Unblank display when adding new live item')) + self.click_live_slide_to_unblank_check_box.setText(translate('OpenLP.GeneralTab', + 'Unblank display when changing slide in Live')) self.auto_preview_check_box.setText(translate('OpenLP.GeneralTab', 'Automatically preview next item in service')) self.timeout_label.setText(translate('OpenLP.GeneralTab', 'Timed slide interval:')) @@ -250,6 +255,7 @@ class GeneralTab(SettingsTab): self.password_edit.setText(settings.value('songselect password')) self.save_check_service_check_box.setChecked(settings.value('save prompt')) self.auto_unblank_check_box.setChecked(settings.value('auto unblank')) + self.click_live_slide_to_unblank_check_box.setChecked(settings.value('click live slide to unblank')) self.display_on_monitor_check.setChecked(self.screens.display) self.warning_check_box.setChecked(settings.value('blank warning')) self.auto_open_check_box.setChecked(settings.value('auto open')) @@ -287,6 +293,7 @@ class GeneralTab(SettingsTab): settings.setValue('update check', self.check_for_updates_check_box.isChecked()) settings.setValue('save prompt', self.save_check_service_check_box.isChecked()) settings.setValue('auto unblank', self.auto_unblank_check_box.isChecked()) + settings.setValue('click live slide to unblank', self.click_live_slide_to_unblank_check_box.isChecked()) settings.setValue('auto preview', self.auto_preview_check_box.isChecked()) settings.setValue('loop delay', self.timeout_spin_box.value()) settings.setValue('ccli number', self.number_edit.displayText()) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index fac67437f..d8df7d305 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -792,6 +792,8 @@ class SlideController(DisplayController, RegistryProperties): This action also takes place when a song that is sent to live from Service Manager is edited. If display is blanked, this will update the song and then re-blank the display. As result, lyrics are flashed on screen for a very short time before re-blanking happens. (Bug) + This happens only when Automatic unblanking is enabled when new item is sen to Live, + if it's not enabled they won't flash. :param item: The current service item """ @@ -1105,8 +1107,14 @@ class SlideController(DisplayController, RegistryProperties): self.log_debug('Could not get lock in slide_selected after waiting %f, skip to avoid deadlock.' % timeout) return - if self.is_live and Settings().value('advanced/click live slide to unblank'): - Registry().execute('slidecontroller_live_unblank') + # If "click live slide to unblank" is enabled, unblank the display. + # Note: If this if statement is placed at the bottom of this function instead of top slide transitions are lost. + if self.is_live and Settings().value('core/click live slide to unblank'): + # With this display stays blanked when "auto unblank" setting is not enabled and new item is sent to Live. + if not Settings().value('core/auto unblank') and start: + () + else: + Registry().execute('slidecontroller_live_unblank') row = self.preview_widget.current_slide_number() old_selected_row = self.selected_row self.selected_row = 0 @@ -1275,7 +1283,8 @@ class SlideController(DisplayController, RegistryProperties): self.play_slides_once.setText(UiStrings().PlaySlidesToEnd) self.play_slides_menu.setDefaultAction(self.play_slides_loop) self.play_slides_once.setChecked(False) - Registry().execute('slidecontroller_live_unblank') + if Settings().value('core/click live slide to unblank'): + Registry().execute('slidecontroller_live_unblank') else: self.play_slides_loop.setIcon(build_icon(':/media/media_time.png')) self.play_slides_loop.setText(UiStrings().PlaySlidesInLoop) @@ -1299,7 +1308,8 @@ class SlideController(DisplayController, RegistryProperties): self.play_slides_loop.setText(UiStrings().PlaySlidesInLoop) self.play_slides_menu.setDefaultAction(self.play_slides_once) self.play_slides_loop.setChecked(False) - Registry().execute('slidecontroller_live_unblank') + if Settings().value('core/click live slide to unblank'): + Registry().execute('slidecontroller_live_unblank') else: self.play_slides_once.setIcon(build_icon(':/media/media_time')) self.play_slides_once.setText(UiStrings().PlaySlidesToEnd) @@ -1361,7 +1371,8 @@ class SlideController(DisplayController, RegistryProperties): Registry().execute('%s_stop' % self.service_item.name.lower(), [self.service_item, self.is_live]) if self.service_item.is_media(): self.on_media_close() - self.on_go_live() + if Settings().value('core/auto unblank'): + self.on_go_live() else: self.on_preview_add_to_service() From 6858a7cfb5d98408a69687b03d96e13644036453 Mon Sep 17 00:00:00 2001 From: suutari-olli Date: Fri, 1 Apr 2016 16:08:44 +0300 Subject: [PATCH 08/30] Added 3 tests for replacing Live item from service manager while display is blanked. (One for each) --- .../openlp_core_ui/test_slidecontroller.py | 97 +++++++++++++++++++ 1 file changed, 97 insertions(+) diff --git a/tests/functional/openlp_core_ui/test_slidecontroller.py b/tests/functional/openlp_core_ui/test_slidecontroller.py index 20e48cbe0..487ea205e 100644 --- a/tests/functional/openlp_core_ui/test_slidecontroller.py +++ b/tests/functional/openlp_core_ui/test_slidecontroller.py @@ -538,6 +538,103 @@ class TestSlideController(TestCase): mocked_preview_widget.current_slide_number.assert_called_with() mocked_process_item.assert_called_once_with(mocked_item, 7) + def replace_service_manager_item_on_blank_display_test(self): + """ + Test that when the service item is replaced, display remains blanked if it was blanked. + """ + # GIVEN: A slide controller and a new item to add, blanked display. + mocked_item = MagicMock() + mocked_preview_widget = MagicMock() + mocked_preview_widget.current_slide_number = MagicMock() + mocked_process_item = MagicMock() + slide_controller = SlideController(None) + slide_controller.preview_widget = mocked_preview_widget + slide_controller._process_item = mocked_process_item + slide_controller.service_item = mocked_item + slide_controller.hide_menu = MagicMock() + slide_controller.hide_mode = MagicMock() + slide_controller.hide_mode.return_value = True + slide_controller.blank_screen = MagicMock() + slide_controller.blank_screen.isChecked = MagicMock() + slide_controller.blank_screen.isChecked.return_value = True + slide_controller.on_blank_display = mocked_item + slide_controller.theme_screen = MagicMock() + slide_controller.desktop_screen = MagicMock() + slide_controller.log_debug = MagicMock() + + # WHEN: The service item is replaced + slide_controller.replace_service_manager_item(mocked_item) + + # THEN: The display should remain blanked + slide_controller.on_blank_display.assert_called_once_with(True) + + def replace_service_manager_item_on_theme_display_test(self): + """ + Test that when the service item is replaced, display remains blanked if it was blanked. + """ + # GIVEN: A slide controller and a new item to add, blanked display. + mocked_item = MagicMock() + mocked_preview_widget = MagicMock() + mocked_preview_widget.current_slide_number = MagicMock() + mocked_process_item = MagicMock() + slide_controller = SlideController(None) + slide_controller.preview_widget = mocked_preview_widget + slide_controller._process_item = mocked_process_item + slide_controller.service_item = mocked_item + slide_controller.hide_menu = MagicMock() + slide_controller.hide_mode = MagicMock() + slide_controller.hide_mode.return_value = True + slide_controller.blank_screen = MagicMock() + slide_controller.blank_screen.isChecked = MagicMock() + slide_controller.blank_screen.isChecked.return_value = False + slide_controller.theme_screen = MagicMock() + slide_controller.theme_screen.isChecked = MagicMock() + slide_controller.theme_screen.isChecked.return_value = True + slide_controller.on_theme_display = mocked_item + slide_controller.desktop_screen = MagicMock() + slide_controller.log_debug = MagicMock() + + # WHEN: The service item is replaced + slide_controller.replace_service_manager_item(mocked_item) + + # THEN: The display should remain blanked + slide_controller.on_theme_display.assert_called_once_with(True) + + def replace_service_manager_item_on_hide_display_test(self): + """ + Test that when the service item is replaced, display remains blanked if it was blanked. + """ + # GIVEN: A slide controller and a new item to add, blanked display. + mocked_item = MagicMock() + mocked_preview_widget = MagicMock() + mocked_preview_widget.current_slide_number = MagicMock() + mocked_process_item = MagicMock() + slide_controller = SlideController(None) + slide_controller.preview_widget = mocked_preview_widget + slide_controller._process_item = mocked_process_item + slide_controller.service_item = mocked_item + slide_controller.hide_menu = MagicMock() + slide_controller.hide_mode = MagicMock() + slide_controller.hide_mode.return_value = True + slide_controller.blank_screen = MagicMock() + slide_controller.blank_screen.isChecked = MagicMock() + slide_controller.blank_screen.isChecked.return_value = False + slide_controller.theme_screen = MagicMock() + slide_controller.theme_screen.isChecked = MagicMock() + slide_controller.theme_screen.isChecked.return_value = False + slide_controller.on_theme_display = mocked_item + slide_controller.desktop_screen = MagicMock() + slide_controller.desktop_screen.isChecked = MagicMock() + slide_controller.desktop_screen.isChecked.return_value = True + slide_controller.on_hide_display = MagicMock() + slide_controller.log_debug = MagicMock() + + # WHEN: The service item is replaced + slide_controller.replace_service_manager_item(mocked_item) + + # THEN: The display should remain blanked + slide_controller.on_hide_display.assert_called_once_with(True) + def on_slide_blank_test(self): """ Test on_slide_blank From 10d68dad3ffe94f60d70d7c5f6eabd26614df4e3 Mon Sep 17 00:00:00 2001 From: suutari-olli Date: Fri, 1 Apr 2016 18:12:19 +0300 Subject: [PATCH 09/30] - Fixed issue where PPT/Impress is not unblanked on "Previous/Next" (Green arrows). --- openlp/plugins/presentations/lib/messagelistener.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/openlp/plugins/presentations/lib/messagelistener.py b/openlp/plugins/presentations/lib/messagelistener.py index cc5a6f05e..566bef456 100644 --- a/openlp/plugins/presentations/lib/messagelistener.py +++ b/openlp/plugins/presentations/lib/messagelistener.py @@ -26,7 +26,7 @@ import os from PyQt5 import QtCore -from openlp.core.common import Registry +from openlp.core.common import Registry, Settings from openlp.core.ui import HideMode from openlp.core.lib import ServiceItemContext, ServiceItem from openlp.plugins.presentations.lib.pdfcontroller import PDF_CONTROLLER_FILETYPES @@ -419,6 +419,8 @@ class MessageListener(object): is_live = message[1] if is_live: self.live_handler.next() + if Settings().value('core/click live slide to unblank'): + Registry().execute('slidecontroller_live_unblank') else: self.preview_handler.next() @@ -431,6 +433,8 @@ class MessageListener(object): is_live = message[1] if is_live: self.live_handler.previous() + if Settings().value('core/click live slide to unblank'): + Registry().execute('slidecontroller_live_unblank') else: self.preview_handler.previous() From e8e893c842ba4516ba0972469928d07e11987382 Mon Sep 17 00:00:00 2001 From: suutari-olli Date: Sun, 3 Apr 2016 14:26:48 +0300 Subject: [PATCH 10/30] Changed Live to live (lowercaps) for controlling this setting to match other settings. --- openlp/core/ui/generaltab.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/generaltab.py b/openlp/core/ui/generaltab.py index da60f8311..a7844063b 100644 --- a/openlp/core/ui/generaltab.py +++ b/openlp/core/ui/generaltab.py @@ -221,7 +221,7 @@ class GeneralTab(SettingsTab): 'Prompt to save before starting a new service')) self.auto_unblank_check_box.setText(translate('OpenLP.GeneralTab', 'Unblank display when adding new live item')) self.click_live_slide_to_unblank_check_box.setText(translate('OpenLP.GeneralTab', - 'Unblank display when changing slide in Live')) + 'Unblank display when changing slide in live')) self.auto_preview_check_box.setText(translate('OpenLP.GeneralTab', 'Automatically preview next item in service')) self.timeout_label.setText(translate('OpenLP.GeneralTab', 'Timed slide interval:')) From 5fa068776213080b9d6b49b33ba66cc6d110c140 Mon Sep 17 00:00:00 2001 From: suutari-olli Date: Wed, 13 Apr 2016 17:22:56 +0300 Subject: [PATCH 11/30] Changed spelling of live back to Live (Capitalized) on settings. --- openlp/core/ui/generaltab.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/generaltab.py b/openlp/core/ui/generaltab.py index a7844063b..da60f8311 100644 --- a/openlp/core/ui/generaltab.py +++ b/openlp/core/ui/generaltab.py @@ -221,7 +221,7 @@ class GeneralTab(SettingsTab): 'Prompt to save before starting a new service')) self.auto_unblank_check_box.setText(translate('OpenLP.GeneralTab', 'Unblank display when adding new live item')) self.click_live_slide_to_unblank_check_box.setText(translate('OpenLP.GeneralTab', - 'Unblank display when changing slide in live')) + 'Unblank display when changing slide in Live')) self.auto_preview_check_box.setText(translate('OpenLP.GeneralTab', 'Automatically preview next item in service')) self.timeout_label.setText(translate('OpenLP.GeneralTab', 'Timed slide interval:')) From 69af91edef1c85b5d5289a150a22c7b29cb5e684 Mon Sep 17 00:00:00 2001 From: suutari-olli Date: Sun, 17 Apr 2016 04:13:39 +0300 Subject: [PATCH 12/30] - Fixed bug 1462420 - Double clicking Preview adds item to Service countless times (Added hidden setting for controlling this, it is set to True once double clicking has added item to Service and gets reset to False once new item is sent to preview. --- openlp/core/common/settings.py | 1 + openlp/core/lib/mediamanageritem.py | 3 +++ openlp/core/ui/slidecontroller.py | 9 ++++++--- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/openlp/core/common/settings.py b/openlp/core/common/settings.py index 757cd775f..7ba77719d 100644 --- a/openlp/core/common/settings.py +++ b/openlp/core/common/settings.py @@ -162,6 +162,7 @@ class Settings(QtCore.QSettings): 'core/display on monitor': True, 'core/override position': False, 'core/application version': '0.0', + 'core/doubleclicking preview has added to service': False, 'images/background color': '#000000', 'media/players': 'system,webkit', 'media/override player': QtCore.Qt.Unchecked, diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py index 04df1d38a..c53583e06 100644 --- a/openlp/core/lib/mediamanageritem.py +++ b/openlp/core/lib/mediamanageritem.py @@ -481,6 +481,9 @@ class MediaManagerItem(QtWidgets.QWidget, RegistryProperties): 'You must select one or more items to preview.')) else: log.debug('%s Preview requested' % self.plugin.name) + # If ('advanced/double click live') is not enabled, double clicking preview adds the item to Service. + # This setting prevents it from being sent to Service multiple times, in here it is reset to False. + Settings().setValue('core/doubleclicking preview has added to service', False) service_item = self.build_service_item() if service_item: service_item.from_plugin = True diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index c6699cedd..c06506795 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -1371,10 +1371,13 @@ class SlideController(DisplayController, RegistryProperties): Registry().execute('%s_stop' % self.service_item.name.lower(), [self.service_item, self.is_live]) if self.service_item.is_media(): self.on_media_close() - if Settings().value('core/auto unblank'): - self.on_go_live() - else: + self.on_go_live() + # If ('advanced/double click live') is not enabled, double clicking preview adds the item to Service. + # Prevent same item in preview from being sent to Service multiple times. Changing preview slide resets + # this setting. Do note that this still allows to add item to Service multiple times if icon is clicked. + elif not Settings().value('core/doubleclicking preview has added to service'): self.on_preview_add_to_service() + Settings().setValue('core/doubleclicking preview has added to service', True) def on_go_live(self, field=None): """ From 5dbb69430f23d62adc78ab410cdf2850101f83be Mon Sep 17 00:00:00 2001 From: suutari-olli Date: Sun, 17 Apr 2016 04:36:53 +0300 Subject: [PATCH 13/30] Fixed bug 1462420 (Double click on the preview duplicated the element in the service manger) - Added a hidden setting for controlling this behaviour. It is reset if any item is sent to preview from library. Sending the same item to service multiple times is still possible by using the "Add icon" --- openlp/core/ui/slidecontroller.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index c06506795..10e6cf25b 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -1374,7 +1374,8 @@ class SlideController(DisplayController, RegistryProperties): self.on_go_live() # If ('advanced/double click live') is not enabled, double clicking preview adds the item to Service. # Prevent same item in preview from being sent to Service multiple times. Changing preview slide resets - # this setting. Do note that this still allows to add item to Service multiple times if icon is clicked. + # this setting. Sending to preview from Service does not reset this setting, this is a design choise. + # Do note that this still allows to add item to Service multiple times if icon is clicked. elif not Settings().value('core/doubleclicking preview has added to service'): self.on_preview_add_to_service() Settings().setValue('core/doubleclicking preview has added to service', True) From bf3cad050c8ddbc00bd6bcbbf0098c0621687c23 Mon Sep 17 00:00:00 2001 From: suutari-olli Date: Sun, 17 Apr 2016 04:52:45 +0300 Subject: [PATCH 14/30] Turned the new setting into question. --- openlp/core/common/settings.py | 2 +- openlp/core/lib/mediamanageritem.py | 2 +- openlp/core/ui/slidecontroller.py | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/openlp/core/common/settings.py b/openlp/core/common/settings.py index 7ba77719d..f886acc1e 100644 --- a/openlp/core/common/settings.py +++ b/openlp/core/common/settings.py @@ -162,7 +162,7 @@ class Settings(QtCore.QSettings): 'core/display on monitor': True, 'core/override position': False, 'core/application version': '0.0', - 'core/doubleclicking preview has added to service': False, + 'core/has doubleclicking preview added item to service': False, 'images/background color': '#000000', 'media/players': 'system,webkit', 'media/override player': QtCore.Qt.Unchecked, diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py index c53583e06..feea001c3 100644 --- a/openlp/core/lib/mediamanageritem.py +++ b/openlp/core/lib/mediamanageritem.py @@ -483,7 +483,7 @@ class MediaManagerItem(QtWidgets.QWidget, RegistryProperties): log.debug('%s Preview requested' % self.plugin.name) # If ('advanced/double click live') is not enabled, double clicking preview adds the item to Service. # This setting prevents it from being sent to Service multiple times, in here it is reset to False. - Settings().setValue('core/doubleclicking preview has added to service', False) + Settings().setValue('core/has doubleclicking preview added item to service', False) service_item = self.build_service_item() if service_item: service_item.from_plugin = True diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 10e6cf25b..bb017ac30 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -1376,9 +1376,9 @@ class SlideController(DisplayController, RegistryProperties): # Prevent same item in preview from being sent to Service multiple times. Changing preview slide resets # this setting. Sending to preview from Service does not reset this setting, this is a design choise. # Do note that this still allows to add item to Service multiple times if icon is clicked. - elif not Settings().value('core/doubleclicking preview has added to service'): + elif not Settings().value('core/has doubleclicking preview added item to service'): self.on_preview_add_to_service() - Settings().setValue('core/doubleclicking preview has added to service', True) + Settings().setValue('core/has doubleclicking preview added item to service', True) def on_go_live(self, field=None): """ From 0563c6372fb7b75a2a5f2d71e6b0e59a9d15f570 Mon Sep 17 00:00:00 2001 From: suutari-olli Date: Sun, 17 Apr 2016 06:43:25 +0300 Subject: [PATCH 15/30] Made a better fix for fixing bug where display is unblanked on editing current live item. This now sets a hidden setting to true while processing Live item and then changes it back to false. Display is thus not unblanked at all during the process. (Old fix showed the edited slide for a small time) Downside: All the new tests were based on the old method and thus they were removed. --- openlp/core/common/settings.py | 1 + openlp/core/ui/maindisplay.py | 2 +- openlp/core/ui/slidecontroller.py | 18 +--- .../openlp_core_ui/test_slidecontroller.py | 97 ------------------- 4 files changed, 6 insertions(+), 112 deletions(-) diff --git a/openlp/core/common/settings.py b/openlp/core/common/settings.py index f886acc1e..d1a8ac96f 100644 --- a/openlp/core/common/settings.py +++ b/openlp/core/common/settings.py @@ -162,6 +162,7 @@ class Settings(QtCore.QSettings): 'core/display on monitor': True, 'core/override position': False, 'core/application version': '0.0', + 'core/is live item edited and replaced': False, 'core/has doubleclicking preview added item to service': False, 'images/background color': '#000000', 'media/players': 'system,webkit', diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index d9a9a6468..2c80dd2f8 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -471,7 +471,7 @@ class MainDisplay(OpenLPMixin, Display, RegistryProperties): self.footer(service_item.foot_text) # if was hidden keep it hidden if self.hide_mode and self.is_live and not service_item.is_media(): - if Settings().value('core/auto unblank'): + if Settings().value('core/auto unblank') and not Settings().value('core/is live item edited and replaced'): Registry().execute('slidecontroller_live_unblank') else: self.hide_display(self.hide_mode) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index bb017ac30..ee2d4a24c 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -798,19 +798,9 @@ class SlideController(DisplayController, RegistryProperties): :param item: The current service item """ if item == self.service_item: - if not self.hide_mode(): + Settings().setValue('core/is live item edited and replaced', True) self._process_item(item, self.preview_widget.current_slide_number()) - # "isChecked" method is required for checking blanks, on_xx_display(False) does not work. - elif self.hide_mode(): - if self.blank_screen.isChecked(): - self._process_item(item, self.preview_widget.current_slide_number()) - self.on_blank_display(True) - elif self.theme_screen.isChecked(): - self._process_item(item, self.preview_widget.current_slide_number()) - self.on_theme_display(True) - elif self.desktop_screen.isChecked(): - self._process_item(item, self.preview_widget.current_slide_number()) - self.on_hide_display(True) + Settings().setValue('core/is live item edited and replaced', False) def add_service_manager_item(self, item, slide_no): """ @@ -1113,7 +1103,7 @@ class SlideController(DisplayController, RegistryProperties): # With this display stays blanked when "auto unblank" setting is not enabled and new item is sent to Live. if not Settings().value('core/auto unblank') and start: () - else: + if not start and not Settings().value('core/is live item edited and replaced'): Registry().execute('slidecontroller_live_unblank') row = self.preview_widget.current_slide_number() old_selected_row = self.selected_row @@ -1364,7 +1354,7 @@ class SlideController(DisplayController, RegistryProperties): Triggered when a preview slide item is doubleclicked """ if self.service_item: - if Settings().value('advanced/double click live'): + if Settings().value('advanced/double click live') and Settings().value('core/auto unblank'): # Live and Preview have issues if we have video or presentations # playing in both at the same time. if self.service_item.is_command(): diff --git a/tests/functional/openlp_core_ui/test_slidecontroller.py b/tests/functional/openlp_core_ui/test_slidecontroller.py index 487ea205e..20e48cbe0 100644 --- a/tests/functional/openlp_core_ui/test_slidecontroller.py +++ b/tests/functional/openlp_core_ui/test_slidecontroller.py @@ -538,103 +538,6 @@ class TestSlideController(TestCase): mocked_preview_widget.current_slide_number.assert_called_with() mocked_process_item.assert_called_once_with(mocked_item, 7) - def replace_service_manager_item_on_blank_display_test(self): - """ - Test that when the service item is replaced, display remains blanked if it was blanked. - """ - # GIVEN: A slide controller and a new item to add, blanked display. - mocked_item = MagicMock() - mocked_preview_widget = MagicMock() - mocked_preview_widget.current_slide_number = MagicMock() - mocked_process_item = MagicMock() - slide_controller = SlideController(None) - slide_controller.preview_widget = mocked_preview_widget - slide_controller._process_item = mocked_process_item - slide_controller.service_item = mocked_item - slide_controller.hide_menu = MagicMock() - slide_controller.hide_mode = MagicMock() - slide_controller.hide_mode.return_value = True - slide_controller.blank_screen = MagicMock() - slide_controller.blank_screen.isChecked = MagicMock() - slide_controller.blank_screen.isChecked.return_value = True - slide_controller.on_blank_display = mocked_item - slide_controller.theme_screen = MagicMock() - slide_controller.desktop_screen = MagicMock() - slide_controller.log_debug = MagicMock() - - # WHEN: The service item is replaced - slide_controller.replace_service_manager_item(mocked_item) - - # THEN: The display should remain blanked - slide_controller.on_blank_display.assert_called_once_with(True) - - def replace_service_manager_item_on_theme_display_test(self): - """ - Test that when the service item is replaced, display remains blanked if it was blanked. - """ - # GIVEN: A slide controller and a new item to add, blanked display. - mocked_item = MagicMock() - mocked_preview_widget = MagicMock() - mocked_preview_widget.current_slide_number = MagicMock() - mocked_process_item = MagicMock() - slide_controller = SlideController(None) - slide_controller.preview_widget = mocked_preview_widget - slide_controller._process_item = mocked_process_item - slide_controller.service_item = mocked_item - slide_controller.hide_menu = MagicMock() - slide_controller.hide_mode = MagicMock() - slide_controller.hide_mode.return_value = True - slide_controller.blank_screen = MagicMock() - slide_controller.blank_screen.isChecked = MagicMock() - slide_controller.blank_screen.isChecked.return_value = False - slide_controller.theme_screen = MagicMock() - slide_controller.theme_screen.isChecked = MagicMock() - slide_controller.theme_screen.isChecked.return_value = True - slide_controller.on_theme_display = mocked_item - slide_controller.desktop_screen = MagicMock() - slide_controller.log_debug = MagicMock() - - # WHEN: The service item is replaced - slide_controller.replace_service_manager_item(mocked_item) - - # THEN: The display should remain blanked - slide_controller.on_theme_display.assert_called_once_with(True) - - def replace_service_manager_item_on_hide_display_test(self): - """ - Test that when the service item is replaced, display remains blanked if it was blanked. - """ - # GIVEN: A slide controller and a new item to add, blanked display. - mocked_item = MagicMock() - mocked_preview_widget = MagicMock() - mocked_preview_widget.current_slide_number = MagicMock() - mocked_process_item = MagicMock() - slide_controller = SlideController(None) - slide_controller.preview_widget = mocked_preview_widget - slide_controller._process_item = mocked_process_item - slide_controller.service_item = mocked_item - slide_controller.hide_menu = MagicMock() - slide_controller.hide_mode = MagicMock() - slide_controller.hide_mode.return_value = True - slide_controller.blank_screen = MagicMock() - slide_controller.blank_screen.isChecked = MagicMock() - slide_controller.blank_screen.isChecked.return_value = False - slide_controller.theme_screen = MagicMock() - slide_controller.theme_screen.isChecked = MagicMock() - slide_controller.theme_screen.isChecked.return_value = False - slide_controller.on_theme_display = mocked_item - slide_controller.desktop_screen = MagicMock() - slide_controller.desktop_screen.isChecked = MagicMock() - slide_controller.desktop_screen.isChecked.return_value = True - slide_controller.on_hide_display = MagicMock() - slide_controller.log_debug = MagicMock() - - # WHEN: The service item is replaced - slide_controller.replace_service_manager_item(mocked_item) - - # THEN: The display should remain blanked - slide_controller.on_hide_display.assert_called_once_with(True) - def on_slide_blank_test(self): """ Test on_slide_blank From c046ba95d9ea3f41459a00aae5fb7615aa6d5583 Mon Sep 17 00:00:00 2001 From: suutari-olli Date: Sun, 17 Apr 2016 06:50:54 +0300 Subject: [PATCH 16/30] Made a better fix for fixing bug where display is unblanked on editing current live item. This now sets a hidden setting to true while processing Live item and then changes it back to false. Display is thus not unblanked at all during the process. (Old fix showed the edited slide for a small time) Downside: All the new tests were based on the old method and thus they were removed. --- openlp/core/ui/slidecontroller.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index ee2d4a24c..efafadcf7 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -790,10 +790,8 @@ class SlideController(DisplayController, RegistryProperties): """ Replacement item following a remote edit This action also takes place when a song that is sent to live from Service Manager is edited. - If display is blanked, this will update the song and then re-blank the display. - As result, lyrics are flashed on screen for a very short time before re-blanking happens. (Bug) - This happens only when Automatic unblanking is enabled when new item is sen to Live, - if it's not enabled they won't flash. + If display is blanked, it will get unblanked if automatic unblanking is enabled. We prevent this from happening + by setting a hidden setting to "True" and then to "False" after the processing is done. :param item: The current service item """ From 518dde5d2daeca1ee3c67564adb2db9f1502f9f1 Mon Sep 17 00:00:00 2001 From: suutari-olli Date: Sun, 17 Apr 2016 15:40:34 +0300 Subject: [PATCH 17/30] - Removed _ from end of one setting name. - Fixed ident on replace_service_manager --- openlp/core/ui/generaltab.py | 2 +- openlp/core/ui/slidecontroller.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/openlp/core/ui/generaltab.py b/openlp/core/ui/generaltab.py index da60f8311..2ecaeaae6 100644 --- a/openlp/core/ui/generaltab.py +++ b/openlp/core/ui/generaltab.py @@ -174,7 +174,7 @@ class GeneralTab(SettingsTab): self.auto_unblank_check_box.setObjectName('auto_unblank_check_box') self.settings_layout.addRow(self.auto_unblank_check_box) self.click_live_slide_to_unblank_check_box = QtWidgets.QCheckBox(self.settings_group_box) - self.click_live_slide_to_unblank_check_box.setObjectName('click_live_slide_to_unblank_') + self.click_live_slide_to_unblank_check_box.setObjectName('click_live_slide_to_unblank') self.settings_layout.addRow(self.click_live_slide_to_unblank_check_box) self.auto_preview_check_box = QtWidgets.QCheckBox(self.settings_group_box) self.auto_preview_check_box.setObjectName('auto_preview_check_box') diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index efafadcf7..04fef6b48 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -796,9 +796,9 @@ class SlideController(DisplayController, RegistryProperties): :param item: The current service item """ if item == self.service_item: - Settings().setValue('core/is live item edited and replaced', True) - self._process_item(item, self.preview_widget.current_slide_number()) - Settings().setValue('core/is live item edited and replaced', False) + Settings().setValue('core/is live item edited and replaced', True) + self._process_item(item, self.preview_widget.current_slide_number()) + Settings().setValue('core/is live item edited and replaced', False) def add_service_manager_item(self, item, slide_no): """ From 55061b8fc17080906af5d0a5bb1cb0e1a5e7fadc Mon Sep 17 00:00:00 2001 From: suutari-olli Date: Wed, 20 Apr 2016 18:56:10 +0300 Subject: [PATCH 18/30] - Added two tests for checking if doubleclicking preview should add item to service or send it to live. --- openlp/core/ui/slidecontroller.py | 3 +- .../openlp_core_ui/test_slidecontroller.py | 57 ++++++++++++++----- 2 files changed, 44 insertions(+), 16 deletions(-) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 04fef6b48..4d11381b1 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -1095,7 +1095,8 @@ class SlideController(DisplayController, RegistryProperties): self.log_debug('Could not get lock in slide_selected after waiting %f, skip to avoid deadlock.' % timeout) return - # If "click live slide to unblank" is enabled, unblank the display. + # If "click live slide to unblank" is enabled, unblank the display. And start = Item is sent to Live. + # 'core/is live item edited and replaced' is only True when replacing Live item with the same item from Service. # Note: If this if statement is placed at the bottom of this function instead of top slide transitions are lost. if self.is_live and Settings().value('core/click live slide to unblank'): # With this display stays blanked when "auto unblank" setting is not enabled and new item is sent to Live. diff --git a/tests/functional/openlp_core_ui/test_slidecontroller.py b/tests/functional/openlp_core_ui/test_slidecontroller.py index 20e48cbe0..41b3317bf 100644 --- a/tests/functional/openlp_core_ui/test_slidecontroller.py +++ b/tests/functional/openlp_core_ui/test_slidecontroller.py @@ -713,6 +713,48 @@ class TestSlideController(TestCase): slide_controller.theme_screen, slide_controller.blank_screen ]) + @patch('openlp.core.ui.slidecontroller.Settings') + def on_preview_double_click_unblank_display_test(self, MockedSettings): + # GIVEN: A slide controller, actions needed, settins set to True. + slide_controller = SlideController(None) + mocked_settings = MagicMock() + mocked_settings.value.return_value = True + MockedSettings.return_value = mocked_settings + slide_controller.service_item = MagicMock() + slide_controller.service_item.is_media = MagicMock() + slide_controller.on_media_close = MagicMock() + slide_controller.on_go_live = MagicMock() + slide_controller.on_preview_add_to_service = MagicMock() + slide_controller.media_reset = MagicMock() + + # WHEN: on_preview_double_click is called + slide_controller.on_preview_double_click() + + # THEN: The call to addActions should be correct + self.assertEqual(1, slide_controller.on_go_live.call_count, 'on_go_live should have been called once.') + self.assertEqual(0, slide_controller.on_preview_add_to_service.call_count, 'Should have not been called.') + + @patch('openlp.core.ui.slidecontroller.Settings') + def on_preview_double_click_add_to_service_test(self, MockedSettings): + # GIVEN: A slide controller, actions needed, settins set to False. + slide_controller = SlideController(None) + mocked_settings = MagicMock() + mocked_settings.value.return_value = False + MockedSettings.return_value = mocked_settings + slide_controller.service_item = MagicMock() + slide_controller.service_item.is_media = MagicMock() + slide_controller.on_media_close = MagicMock() + slide_controller.on_go_live = MagicMock() + slide_controller.on_preview_add_to_service = MagicMock() + slide_controller.media_reset = MagicMock() + + # WHEN: on_preview_double_click is called + slide_controller.on_preview_double_click() + + # THEN: The call to addActions should be correct + self.assertEqual(0, slide_controller.on_go_live.call_count, 'on_go_live Should have not been called.') + self.assertEqual(1, slide_controller.on_preview_add_to_service.call_count, 'Should have been called once.') + class TestInfoLabel(TestCase): @@ -805,18 +847,3 @@ class TestLiveController(TestCase): # WHEN: the default controller is built. # THEN: The controller should not be a live controller. self.assertEqual(live_controller.is_live, True, 'The slide controller should be a live controller') - - -class TestPreviewLiveController(TestCase): - - def initial_preview_controller_test(self): - """ - Test the initial preview slide controller state. - """ - # GIVEN: A new SlideController instance. - Registry.create() - preview_controller = PreviewController(None) - - # WHEN: the default controller is built. - # THEN: The controller should not be a live controller. - self.assertEqual(preview_controller.is_live, False, 'The slide controller should be a Preview controller') From c1d9991acb5b328deac8ca8d802286b736a9e426 Mon Sep 17 00:00:00 2001 From: suutari-olli Date: Wed, 20 Apr 2016 19:01:58 +0300 Subject: [PATCH 19/30] Noticed I had removed one test from end of the file, added it back. --- .../openlp_core_ui/test_slidecontroller.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tests/functional/openlp_core_ui/test_slidecontroller.py b/tests/functional/openlp_core_ui/test_slidecontroller.py index 41b3317bf..12952acb7 100644 --- a/tests/functional/openlp_core_ui/test_slidecontroller.py +++ b/tests/functional/openlp_core_ui/test_slidecontroller.py @@ -847,3 +847,18 @@ class TestLiveController(TestCase): # WHEN: the default controller is built. # THEN: The controller should not be a live controller. self.assertEqual(live_controller.is_live, True, 'The slide controller should be a live controller') + + +class TestPreviewLiveController(TestCase): + + def initial_preview_controller_test(self): + """ + Test the initial preview slide controller state. + """ + # GIVEN: A new SlideController instance. + Registry.create() + preview_controller = PreviewController(None) + + # WHEN: the default controller is built. + # THEN: The controller should not be a live controller. + self.assertEqual(preview_controller.is_live, False, 'The slide controller should be a Preview controller') From 31ede5556d986c04ade310808082517b28b33d5b Mon Sep 17 00:00:00 2001 From: suutari-olli Date: Wed, 27 Apr 2016 23:38:46 +0300 Subject: [PATCH 20/30] Added this to program startup code, should replace_service_manager_item ever crash the program. Settings().setValue('core/is live item edited and replaced', False) --- openlp/core/ui/mainwindow.py | 3 +++ openlp/core/ui/slidecontroller.py | 1 + 2 files changed, 4 insertions(+) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 228969ad1..1640cd202 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -652,6 +652,9 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow, RegistryProperties): """ Give all the plugins a chance to perform some tasks at startup """ + # This setting is set to false, in case def replace_service_manager_item in slidecontroller would crash the + # program and make blank to modes unavailable. + Settings().setValue('core/is live item edited and replaced', False) self.application.process_events() for plugin in self.plugin_manager.plugins: if plugin.is_active(): diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 4d11381b1..67cece409 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -792,6 +792,7 @@ class SlideController(DisplayController, RegistryProperties): This action also takes place when a song that is sent to live from Service Manager is edited. If display is blanked, it will get unblanked if automatic unblanking is enabled. We prevent this from happening by setting a hidden setting to "True" and then to "False" after the processing is done. + The setting is also set to "False" on every start up, should the program ever crash during this process. :param item: The current service item """ From 68b4d625022928c0efb710e0fb5c59b2eb3c77ea Mon Sep 17 00:00:00 2001 From: suutari-olli Date: Mon, 27 Jun 2016 02:14:24 +0300 Subject: [PATCH 21/30] - Turned the two new hidden settings into registry flags --- openlp/core/common/settings.py | 2 -- openlp/core/lib/mediamanageritem.py | 5 ++--- openlp/core/ui/maindisplay.py | 2 +- openlp/core/ui/mainwindow.py | 1 - openlp/core/ui/slidecontroller.py | 25 ++++++++++++++----------- 5 files changed, 17 insertions(+), 18 deletions(-) diff --git a/openlp/core/common/settings.py b/openlp/core/common/settings.py index de3511e72..00be5647b 100644 --- a/openlp/core/common/settings.py +++ b/openlp/core/common/settings.py @@ -164,8 +164,6 @@ class Settings(QtCore.QSettings): 'core/display on monitor': True, 'core/override position': False, 'core/application version': '0.0', - 'core/is live item edited and replaced': False, - 'core/has doubleclicking preview added item to service': False, 'images/background color': '#000000', 'media/players': 'system,webkit', 'media/override player': QtCore.Qt.Unchecked, diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py index ad505f890..9845c81c5 100644 --- a/openlp/core/lib/mediamanageritem.py +++ b/openlp/core/lib/mediamanageritem.py @@ -488,9 +488,8 @@ class MediaManagerItem(QtWidgets.QWidget, RegistryProperties): 'You must select one or more items to preview.')) else: log.debug('%s Preview requested' % self.plugin.name) - # If ('advanced/double click live') is not enabled, double clicking preview adds the item to Service. - # This setting prevents it from being sent to Service multiple times, in here it is reset to False. - Settings().setValue('core/has doubleclicking preview added item to service', False) + # Reset the flag for: "has doubleclick added item to service" to False. + Registry().set_flag('has doubleclick added item to service', False) service_item = self.build_service_item() if service_item: service_item.from_plugin = True diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index ea8b0f6be..00f4be7ca 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -475,7 +475,7 @@ class MainDisplay(OpenLPMixin, Display, RegistryProperties): self.footer(service_item.foot_text) # if was hidden keep it hidden if self.hide_mode and self.is_live and not service_item.is_media(): - if Settings().value('core/auto unblank') and not Settings().value('core/is live item edited and replaced'): + if Settings().value('core/auto unblank'): Registry().execute('slidecontroller_live_unblank') else: self.hide_display(self.hide_mode) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 0c6520fdb..4729edf79 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -658,7 +658,6 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow, RegistryProperties): """ # This setting is set to false, in case def replace_service_manager_item in slidecontroller would crash the # program and make blank to modes unavailable. - Settings().setValue('core/is live item edited and replaced', False) self.application.process_events() for plugin in self.plugin_manager.plugins: if plugin.is_active(): diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 907c86b4d..e740502a1 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -139,6 +139,7 @@ class SlideController(DisplayController, RegistryProperties): Set up the Slide Controller. """ super(SlideController, self).__init__(parent) + Registry().set_flag('replace service manager item', False) def post_set_up(self): """ @@ -797,18 +798,18 @@ class SlideController(DisplayController, RegistryProperties): def replace_service_manager_item(self, item): """ - Replacement item following a remote edit + Replacement item following a remote edit. This action also takes place when a song that is sent to live from Service Manager is edited. If display is blanked, it will get unblanked if automatic unblanking is enabled. We prevent this from happening - by setting a hidden setting to "True" and then to "False" after the processing is done. - The setting is also set to "False" on every start up, should the program ever crash during this process. + by setting a flag to "True" and then to "False" after the processing is done. + The flag is also set to "False" on startup so display may be unblanked properly. :param item: The current service item """ if item == self.service_item: - Settings().setValue('core/is live item edited and replaced', True) + Registry().set_flag('replace service manager item', True) self._process_item(item, self.preview_widget.current_slide_number()) - Settings().setValue('core/is live item edited and replaced', False) + Registry().set_flag('replace service manager item', False) def add_service_manager_item(self, item, slide_no): """ @@ -977,9 +978,12 @@ class SlideController(DisplayController, RegistryProperties): def on_slide_unblank(self): """ - Handle the slidecontroller unblank event + Handle the slidecontroller unblank event. + If we are re-processing service item, don't unblank the display + (Found in def replace_service_manager_item) """ - self.on_blank_display(False) + if not Registry().get_flag('replace service manager item') == True: + self.on_blank_display(False) def on_blank_display(self, checked=None): """ @@ -1111,13 +1115,12 @@ class SlideController(DisplayController, RegistryProperties): % timeout) return # If "click live slide to unblank" is enabled, unblank the display. And start = Item is sent to Live. - # 'core/is live item edited and replaced' is only True when replacing Live item with the same item from Service. # Note: If this if statement is placed at the bottom of this function instead of top slide transitions are lost. if self.is_live and Settings().value('core/click live slide to unblank'): # With this display stays blanked when "auto unblank" setting is not enabled and new item is sent to Live. if not Settings().value('core/auto unblank') and start: () - if not start and not Settings().value('core/is live item edited and replaced'): + if not start: Registry().execute('slidecontroller_live_unblank') row = self.preview_widget.current_slide_number() old_selected_row = self.selected_row @@ -1395,9 +1398,9 @@ class SlideController(DisplayController, RegistryProperties): # Prevent same item in preview from being sent to Service multiple times. Changing preview slide resets # this setting. Sending to preview from Service does not reset this setting, this is a design choise. # Do note that this still allows to add item to Service multiple times if icon is clicked. - elif not Settings().value('core/has doubleclicking preview added item to service'): + elif not Registry().get_flag('has doubleclick added item to service') == True: self.on_preview_add_to_service() - Settings().setValue('core/has doubleclicking preview added item to service', True) + Registry().set_flag('has doubleclick added item to service', True) def on_go_live(self, field=None): """ From 6078e2817107b6cf47417e421cf8249b3cbf4bd0 Mon Sep 17 00:00:00 2001 From: suutari-olli Date: Mon, 27 Jun 2016 02:20:57 +0300 Subject: [PATCH 22/30] Comment cleanup / Improvements --- openlp/core/ui/mainwindow.py | 2 -- openlp/core/ui/slidecontroller.py | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 4729edf79..ccd12727c 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -656,8 +656,6 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow, RegistryProperties): """ Give all the plugins a chance to perform some tasks at startup """ - # This setting is set to false, in case def replace_service_manager_item in slidecontroller would crash the - # program and make blank to modes unavailable. self.application.process_events() for plugin in self.plugin_manager.plugins: if plugin.is_active(): diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index e740502a1..b29543319 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -1395,8 +1395,8 @@ class SlideController(DisplayController, RegistryProperties): self.on_media_close() self.on_go_live() # If ('advanced/double click live') is not enabled, double clicking preview adds the item to Service. - # Prevent same item in preview from being sent to Service multiple times. Changing preview slide resets - # this setting. Sending to preview from Service does not reset this setting, this is a design choise. + # Prevent same item in preview from being sent to Service multiple times. + # Changing the preview slide resets this flag to False. # Do note that this still allows to add item to Service multiple times if icon is clicked. elif not Registry().get_flag('has doubleclick added item to service') == True: self.on_preview_add_to_service() From 7b643b06acc894b7e52ef30e489d9c2d18551b1b Mon Sep 17 00:00:00 2001 From: suutari-olli Date: Thu, 14 Jul 2016 21:02:23 +0300 Subject: [PATCH 23/30] - Tried to make the new text work with the registry changes but failed. > Test is broken, do not merge! --- openlp/core/ui/mainwindow.py | 1 + tests/functional/openlp_core_ui/test_slidecontroller.py | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index ccd12727c..d4bc6b741 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -662,6 +662,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow, RegistryProperties): plugin.app_startup() self.application.process_events() + def first_time(self): """ Import themes if first time diff --git a/tests/functional/openlp_core_ui/test_slidecontroller.py b/tests/functional/openlp_core_ui/test_slidecontroller.py index bbaa4b5d3..53869a365 100644 --- a/tests/functional/openlp_core_ui/test_slidecontroller.py +++ b/tests/functional/openlp_core_ui/test_slidecontroller.py @@ -718,7 +718,7 @@ class TestSlideController(TestCase): # GIVEN: A slide controller, actions needed, settins set to True. slide_controller = SlideController(None) mocked_settings = MagicMock() - mocked_settings.value.return_value = True + mocked_settings.return_value = True MockedSettings.return_value = mocked_settings slide_controller.service_item = MagicMock() slide_controller.service_item.is_media = MagicMock() @@ -727,6 +727,11 @@ class TestSlideController(TestCase): slide_controller.on_preview_add_to_service = MagicMock() slide_controller.media_reset = MagicMock() + Registry.create() + reg_value = True + Registry().set_flag('has doubleclick added item to service', reg_value) + temp = Registry().get_flag('has doubleclick added item to service') + # WHEN: on_preview_double_click is called slide_controller.on_preview_double_click() From 02b4d27b96f27b1fd24e41ad2dba6449a3b0e076 Mon Sep 17 00:00:00 2001 From: suutari-olli Date: Thu, 14 Jul 2016 21:13:58 +0300 Subject: [PATCH 24/30] pep8 fixes, test still broken. --- openlp/core/ui/mainwindow.py | 1 - openlp/core/ui/slidecontroller.py | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index d4bc6b741..ccd12727c 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -662,7 +662,6 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow, RegistryProperties): plugin.app_startup() self.application.process_events() - def first_time(self): """ Import themes if first time diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index b29543319..851bf01fc 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -982,7 +982,7 @@ class SlideController(DisplayController, RegistryProperties): If we are re-processing service item, don't unblank the display (Found in def replace_service_manager_item) """ - if not Registry().get_flag('replace service manager item') == True: + if not Registry().get_flag('replace service manager item') is True: self.on_blank_display(False) def on_blank_display(self, checked=None): @@ -1398,7 +1398,7 @@ class SlideController(DisplayController, RegistryProperties): # Prevent same item in preview from being sent to Service multiple times. # Changing the preview slide resets this flag to False. # Do note that this still allows to add item to Service multiple times if icon is clicked. - elif not Registry().get_flag('has doubleclick added item to service') == True: + elif not Registry().get_flag('has doubleclick added item to service') is True: self.on_preview_add_to_service() Registry().set_flag('has doubleclick added item to service', True) From 39cbafd453cb8578a1d864546da3c0e21d65fe3e Mon Sep 17 00:00:00 2001 From: suutari-olli Date: Sat, 16 Jul 2016 18:41:39 +0300 Subject: [PATCH 25/30] Fixed the tests. --- tests/functional/openlp_core_ui/test_slidecontroller.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/functional/openlp_core_ui/test_slidecontroller.py b/tests/functional/openlp_core_ui/test_slidecontroller.py index 53869a365..927434c2a 100644 --- a/tests/functional/openlp_core_ui/test_slidecontroller.py +++ b/tests/functional/openlp_core_ui/test_slidecontroller.py @@ -726,11 +726,9 @@ class TestSlideController(TestCase): slide_controller.on_go_live = MagicMock() slide_controller.on_preview_add_to_service = MagicMock() slide_controller.media_reset = MagicMock() - Registry.create() reg_value = True Registry().set_flag('has doubleclick added item to service', reg_value) - temp = Registry().get_flag('has doubleclick added item to service') # WHEN: on_preview_double_click is called slide_controller.on_preview_double_click() @@ -752,6 +750,9 @@ class TestSlideController(TestCase): slide_controller.on_go_live = MagicMock() slide_controller.on_preview_add_to_service = MagicMock() slide_controller.media_reset = MagicMock() + Registry.create() + reg_value = False + Registry().set_flag('has doubleclick added item to service', reg_value) # WHEN: on_preview_double_click is called slide_controller.on_preview_double_click() From 4874f6a218d961d2b4b65c11d7d40a63dc7529aa Mon Sep 17 00:00:00 2001 From: suutari-olli Date: Sat, 16 Jul 2016 19:51:08 +0300 Subject: [PATCH 26/30] - Reduced comments - Removed unrequired reg_value from test. --- openlp/core/lib/mediamanageritem.py | 1 - openlp/core/ui/slidecontroller.py | 5 ----- tests/functional/openlp_core_ui/test_slidecontroller.py | 6 ++---- 3 files changed, 2 insertions(+), 10 deletions(-) diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py index 9845c81c5..6a83f955d 100644 --- a/openlp/core/lib/mediamanageritem.py +++ b/openlp/core/lib/mediamanageritem.py @@ -488,7 +488,6 @@ class MediaManagerItem(QtWidgets.QWidget, RegistryProperties): 'You must select one or more items to preview.')) else: log.debug('%s Preview requested' % self.plugin.name) - # Reset the flag for: "has doubleclick added item to service" to False. Registry().set_flag('has doubleclick added item to service', False) service_item = self.build_service_item() if service_item: diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 851bf01fc..6fa9f4db0 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -800,9 +800,6 @@ class SlideController(DisplayController, RegistryProperties): """ Replacement item following a remote edit. This action also takes place when a song that is sent to live from Service Manager is edited. - If display is blanked, it will get unblanked if automatic unblanking is enabled. We prevent this from happening - by setting a flag to "True" and then to "False" after the processing is done. - The flag is also set to "False" on startup so display may be unblanked properly. :param item: The current service item """ @@ -979,8 +976,6 @@ class SlideController(DisplayController, RegistryProperties): def on_slide_unblank(self): """ Handle the slidecontroller unblank event. - If we are re-processing service item, don't unblank the display - (Found in def replace_service_manager_item) """ if not Registry().get_flag('replace service manager item') is True: self.on_blank_display(False) diff --git a/tests/functional/openlp_core_ui/test_slidecontroller.py b/tests/functional/openlp_core_ui/test_slidecontroller.py index 927434c2a..01f895daa 100644 --- a/tests/functional/openlp_core_ui/test_slidecontroller.py +++ b/tests/functional/openlp_core_ui/test_slidecontroller.py @@ -727,8 +727,7 @@ class TestSlideController(TestCase): slide_controller.on_preview_add_to_service = MagicMock() slide_controller.media_reset = MagicMock() Registry.create() - reg_value = True - Registry().set_flag('has doubleclick added item to service', reg_value) + Registry().set_flag('has doubleclick added item to service', True) # WHEN: on_preview_double_click is called slide_controller.on_preview_double_click() @@ -751,8 +750,7 @@ class TestSlideController(TestCase): slide_controller.on_preview_add_to_service = MagicMock() slide_controller.media_reset = MagicMock() Registry.create() - reg_value = False - Registry().set_flag('has doubleclick added item to service', reg_value) + Registry().set_flag('has doubleclick added item to service', False) # WHEN: on_preview_double_click is called slide_controller.on_preview_double_click() From 496c57cdfceb9751e6eb688aeb814e0df3d2926f Mon Sep 17 00:00:00 2001 From: suutari-olli Date: Sun, 17 Jul 2016 18:41:55 +0300 Subject: [PATCH 27/30] - Fixed the issue where items sent to Preview from Service may cause tracebacks. --- openlp/core/ui/slidecontroller.py | 1 + 1 file changed, 1 insertion(+) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 6fa9f4db0..818831e61 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -1509,6 +1509,7 @@ class PreviewController(RegistryMixin, OpenLPMixin, SlideController): self.split = 0 self.type_prefix = 'preview' self.category = 'Preview Toolbar' + Registry().set_flag('has doubleclick added item to service', True) def bootstrap_post_set_up(self): """ From 437039efed4f356a6ddc988c41a8f7e381a5e4e7 Mon Sep 17 00:00:00 2001 From: suutari-olli Date: Sun, 17 Jul 2016 18:49:15 +0300 Subject: [PATCH 28/30] - Moved the 2nd new registry flag from one init to an another init which also has the 1st --- openlp/core/ui/slidecontroller.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 818831e61..c2d594843 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -139,7 +139,6 @@ class SlideController(DisplayController, RegistryProperties): Set up the Slide Controller. """ super(SlideController, self).__init__(parent) - Registry().set_flag('replace service manager item', False) def post_set_up(self): """ @@ -1510,6 +1509,7 @@ class PreviewController(RegistryMixin, OpenLPMixin, SlideController): self.type_prefix = 'preview' self.category = 'Preview Toolbar' Registry().set_flag('has doubleclick added item to service', True) + Registry().set_flag('replace service manager item', False) def bootstrap_post_set_up(self): """ From 08bcb2c5d4faa6f73de1315032c9b34f656b3aac Mon Sep 17 00:00:00 2001 From: suutari-olli Date: Sun, 17 Jul 2016 18:53:27 +0300 Subject: [PATCH 29/30] - Moved them to another init since something broke --- openlp/core/ui/slidecontroller.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index c2d594843..cd6a37342 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -88,6 +88,8 @@ class DisplayController(QtWidgets.QWidget): self.is_live = False self.display = None self.controller_type = None + Registry().set_flag('has doubleclick added item to service', True) + Registry().set_flag('replace service manager item', False) def send_to_plugins(self, *args): """ @@ -1508,8 +1510,6 @@ class PreviewController(RegistryMixin, OpenLPMixin, SlideController): self.split = 0 self.type_prefix = 'preview' self.category = 'Preview Toolbar' - Registry().set_flag('has doubleclick added item to service', True) - Registry().set_flag('replace service manager item', False) def bootstrap_post_set_up(self): """ From f5bc8056f78db0639818e6330be320c24bd54890 Mon Sep 17 00:00:00 2001 From: suutari-olli Date: Sun, 17 Jul 2016 19:11:51 +0300 Subject: [PATCH 30/30] - removed one unrequired if statement. --- openlp/core/ui/slidecontroller.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index cd6a37342..8e5334006 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -1113,9 +1113,6 @@ class SlideController(DisplayController, RegistryProperties): # If "click live slide to unblank" is enabled, unblank the display. And start = Item is sent to Live. # Note: If this if statement is placed at the bottom of this function instead of top slide transitions are lost. if self.is_live and Settings().value('core/click live slide to unblank'): - # With this display stays blanked when "auto unblank" setting is not enabled and new item is sent to Live. - if not Settings().value('core/auto unblank') and start: - () if not start: Registry().execute('slidecontroller_live_unblank') row = self.preview_widget.current_slide_number()