forked from openlp/openlp
This branch introduces the following fixes/features:
- Fixed bug 1565447 (Unable to save panel visibility if View mode is used) (Added a hidden setting for controlling this) - Locking Panels now also locks “View” menu so view menu can’t be set if panels are locked. - Panels are now locked by default, this prevents users from totally messing their UI so easily. - Added a checkbox for disabling/enabling Projectors during first time wizard (By default disabled, added a hidden setting fo... bzr-revno: 2647 Fixes: https://launchpad.net/bugs/1508582, https://launchpad.net/bugs/1565447
This commit is contained in:
commit
f0d75a29c2
@ -182,13 +182,15 @@ class Settings(QtCore.QSettings):
|
||||
'themes/wrap footer': False,
|
||||
'user interface/live panel': True,
|
||||
'user interface/live splitter geometry': QtCore.QByteArray(),
|
||||
'user interface/lock panel': False,
|
||||
'user interface/lock panel': True,
|
||||
'user interface/main window geometry': QtCore.QByteArray(),
|
||||
'user interface/main window position': QtCore.QPoint(0, 0),
|
||||
'user interface/main window splitter geometry': QtCore.QByteArray(),
|
||||
'user interface/main window state': QtCore.QByteArray(),
|
||||
'user interface/preview panel': True,
|
||||
'user interface/preview splitter geometry': QtCore.QByteArray(),
|
||||
'user interface/is preset layout': False,
|
||||
'projector/show after wizard': False,
|
||||
'projector/db type': 'sqlite',
|
||||
'projector/db username': '',
|
||||
'projector/db password': '',
|
||||
|
@ -24,7 +24,7 @@ The UI widgets for the first time wizard.
|
||||
"""
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
|
||||
from openlp.core.common import translate, is_macosx, clean_button_text
|
||||
from openlp.core.common import translate, is_macosx, clean_button_text, Settings
|
||||
from openlp.core.lib import build_icon
|
||||
from openlp.core.lib.ui import add_welcome_page
|
||||
|
||||
@ -136,6 +136,13 @@ class UiFirstTimeWizard(object):
|
||||
self.alert_check_box.setChecked(True)
|
||||
self.alert_check_box.setObjectName('alert_check_box')
|
||||
self.plugin_layout.addWidget(self.alert_check_box)
|
||||
self.projectors_check_box = QtWidgets.QCheckBox(self.plugin_page)
|
||||
# If visibility setting for projector panel is True, check the box.
|
||||
if Settings().value('projector/show after wizard'):
|
||||
self.projectors_check_box.setChecked(True)
|
||||
self.projectors_check_box.setObjectName('projectors_check_box')
|
||||
self.projectors_check_box.clicked.connect(self.on_projectors_check_box_clicked)
|
||||
self.plugin_layout.addWidget(self.projectors_check_box)
|
||||
first_time_wizard.setPage(FirstTimePage.Plugins, self.plugin_page)
|
||||
# The song samples page
|
||||
self.songs_page = QtWidgets.QWizardPage()
|
||||
@ -232,17 +239,28 @@ class UiFirstTimeWizard(object):
|
||||
'downloaded.'))
|
||||
self.download_label.setText(translate('OpenLP.FirstTimeWizard', 'Please wait while OpenLP downloads the '
|
||||
'resource index file...'))
|
||||
self.plugin_page.setTitle(translate('OpenLP.FirstTimeWizard', 'Activate required Plugins'))
|
||||
self.plugin_page.setSubTitle(translate('OpenLP.FirstTimeWizard', 'Select the Plugins you wish to use. '))
|
||||
self.plugin_page.setTitle(translate('OpenLP.FirstTimeWizard', 'Select parts of the program you wish to use'))
|
||||
self.plugin_page.setSubTitle(translate('OpenLP.FirstTimeWizard',
|
||||
'You can also change these settings after the Wizard.'))
|
||||
self.songs_check_box.setText(translate('OpenLP.FirstTimeWizard', 'Songs'))
|
||||
self.custom_check_box.setText(translate('OpenLP.FirstTimeWizard', 'Custom Slides'))
|
||||
self.bible_check_box.setText(translate('OpenLP.FirstTimeWizard', 'Bible'))
|
||||
self.image_check_box.setText(translate('OpenLP.FirstTimeWizard', 'Images'))
|
||||
self.presentation_check_box.setText(translate('OpenLP.FirstTimeWizard', 'Presentations'))
|
||||
self.media_check_box.setText(translate('OpenLP.FirstTimeWizard', 'Media (Audio and Video)'))
|
||||
self.remote_check_box.setText(translate('OpenLP.FirstTimeWizard', 'Allow remote access'))
|
||||
self.song_usage_check_box.setText(translate('OpenLP.FirstTimeWizard', 'Monitor Song Usage'))
|
||||
self.alert_check_box.setText(translate('OpenLP.FirstTimeWizard', 'Allow Alerts'))
|
||||
self.custom_check_box.setText(translate('OpenLP.FirstTimeWizard',
|
||||
'Custom Slides – Easier to manage than songs and they have their own'
|
||||
' list of slides'))
|
||||
self.bible_check_box.setText(translate('OpenLP.FirstTimeWizard',
|
||||
'Bibles – Import and show Bibles'))
|
||||
self.image_check_box.setText(translate('OpenLP.FirstTimeWizard',
|
||||
'Images – Show images or replace background with them'))
|
||||
self.presentation_check_box.setText(translate('OpenLP.FirstTimeWizard',
|
||||
'Presentations – Show .ppt, .odp and .pdf files'))
|
||||
self.media_check_box.setText(translate('OpenLP.FirstTimeWizard', 'Media – Playback of Audio and Video files'))
|
||||
self.remote_check_box.setText(translate('OpenLP.FirstTimeWizard', 'Remote – Control OpenLP via browser or smart'
|
||||
'phone app'))
|
||||
self.song_usage_check_box.setText(translate('OpenLP.FirstTimeWizard', 'Song Usage Monitor'))
|
||||
self.alert_check_box.setText(translate('OpenLP.FirstTimeWizard',
|
||||
'Alerts – Display informative messages while showing other slides'))
|
||||
self.projectors_check_box.setText(translate('OpenLP.FirstTimeWizard',
|
||||
'Projectors – Control PJLink compatible projects on your network'
|
||||
' from OpenLP'))
|
||||
self.no_internet_page.setTitle(translate('OpenLP.FirstTimeWizard', 'No Internet Connection'))
|
||||
self.no_internet_page.setSubTitle(
|
||||
translate('OpenLP.FirstTimeWizard', 'Unable to detect an Internet connection.'))
|
||||
@ -277,3 +295,10 @@ class UiFirstTimeWizard(object):
|
||||
clean_button_text(first_time_wizard.buttonText(QtWidgets.QWizard.FinishButton)))
|
||||
first_time_wizard.setButtonText(QtWidgets.QWizard.CustomButton2,
|
||||
clean_button_text(first_time_wizard.buttonText(QtWidgets.QWizard.CancelButton)))
|
||||
|
||||
def on_projectors_check_box_clicked(self):
|
||||
# When clicking projectors_check box, change the visibility setting for Projectors panel.
|
||||
if Settings().value('projector/show after wizard'):
|
||||
Settings().setValue('projector/show after wizard', False)
|
||||
else:
|
||||
Settings().setValue('projector/show after wizard', True)
|
||||
|
@ -638,13 +638,15 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow, RegistryProperties):
|
||||
self.open_cmd_line_files(self.arguments)
|
||||
elif Settings().value(self.general_settings_section + '/auto open'):
|
||||
self.service_manager_contents.load_last_file()
|
||||
# This will store currently used layout preset so it remains enabled on next startup.
|
||||
# If any panel is enabled/disabled after preset is set, this setting is not saved.
|
||||
view_mode = Settings().value('%s/view mode' % self.general_settings_section)
|
||||
if view_mode == 'default':
|
||||
if view_mode == 'default' and Settings().value('user interface/is preset layout'):
|
||||
self.mode_default_item.setChecked(True)
|
||||
elif view_mode == 'setup':
|
||||
elif view_mode == 'setup' and Settings().value('user interface/is preset layout'):
|
||||
self.set_view_mode(True, True, False, True, False, True)
|
||||
self.mode_setup_item.setChecked(True)
|
||||
elif view_mode == 'live':
|
||||
elif view_mode == 'live' and Settings().value('user interface/is preset layout'):
|
||||
self.set_view_mode(False, True, False, False, True, True)
|
||||
self.mode_live_item.setChecked(True)
|
||||
|
||||
@ -696,6 +698,11 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow, RegistryProperties):
|
||||
return
|
||||
self.application.set_busy_cursor()
|
||||
self.first_time()
|
||||
# Check if Projectors panel should be visible or not after wizard.
|
||||
if Settings().value('projector/show after wizard'):
|
||||
self.projector_manager_dock.setVisible(True)
|
||||
else:
|
||||
self.projector_manager_dock.setVisible(False)
|
||||
for plugin in self.plugin_manager.plugins:
|
||||
self.active_plugin = plugin
|
||||
old_status = self.active_plugin.status
|
||||
@ -1027,18 +1034,24 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow, RegistryProperties):
|
||||
Put OpenLP into "Default" view mode.
|
||||
"""
|
||||
self.set_view_mode(True, True, True, True, True, True, 'default')
|
||||
Settings().setValue('user interface/is preset layout', True)
|
||||
Settings().setValue('projector/show after wizard', True)
|
||||
|
||||
def on_mode_setup_item_clicked(self):
|
||||
"""
|
||||
Put OpenLP into "Setup" view mode.
|
||||
"""
|
||||
self.set_view_mode(True, True, False, True, False, True, 'setup')
|
||||
Settings().setValue('user interface/is preset layout', True)
|
||||
Settings().setValue('projector/show after wizard', True)
|
||||
|
||||
def on_mode_live_item_clicked(self):
|
||||
"""
|
||||
Put OpenLP into "Live" view mode.
|
||||
"""
|
||||
self.set_view_mode(False, True, False, False, True, True, 'live')
|
||||
Settings().setValue('user interface/is preset layout', True)
|
||||
Settings().setValue('projector/show after wizard', True)
|
||||
|
||||
def set_view_mode(self, media=True, service=True, theme=True, preview=True, live=True, projector=True, mode=''):
|
||||
"""
|
||||
@ -1176,24 +1189,33 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow, RegistryProperties):
|
||||
Toggle the visibility of the media manager
|
||||
"""
|
||||
self.media_manager_dock.setVisible(not self.media_manager_dock.isVisible())
|
||||
Settings().setValue('user interface/is preset layout', False)
|
||||
|
||||
def toggle_projector_manager(self):
|
||||
"""
|
||||
Toggle visibility of the projector manager
|
||||
"""
|
||||
self.projector_manager_dock.setVisible(not self.projector_manager_dock.isVisible())
|
||||
Settings().setValue('user interface/is preset layout', False)
|
||||
# Check/uncheck checkbox on First time wizard based on visibility of this panel.
|
||||
if not Settings().value('projector/show after wizard'):
|
||||
Settings().setValue('projector/show after wizard', True)
|
||||
else:
|
||||
Settings().setValue('projector/show after wizard', False)
|
||||
|
||||
def toggle_service_manager(self):
|
||||
"""
|
||||
Toggle the visibility of the service manager
|
||||
"""
|
||||
self.service_manager_dock.setVisible(not self.service_manager_dock.isVisible())
|
||||
Settings().setValue('user interface/is preset layout', False)
|
||||
|
||||
def toggle_theme_manager(self):
|
||||
"""
|
||||
Toggle the visibility of the theme manager
|
||||
"""
|
||||
self.theme_manager_dock.setVisible(not self.theme_manager_dock.isVisible())
|
||||
Settings().setValue('user interface/is preset layout', False)
|
||||
|
||||
def set_preview_panel_visibility(self, visible):
|
||||
"""
|
||||
@ -1207,6 +1229,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow, RegistryProperties):
|
||||
self.preview_controller.panel.setVisible(visible)
|
||||
Settings().setValue('user interface/preview panel', visible)
|
||||
self.view_preview_panel.setChecked(visible)
|
||||
Settings().setValue('user interface/is preset layout', False)
|
||||
|
||||
def set_lock_panel(self, lock):
|
||||
"""
|
||||
@ -1217,6 +1240,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow, RegistryProperties):
|
||||
self.service_manager_dock.setFeatures(QtWidgets.QDockWidget.NoDockWidgetFeatures)
|
||||
self.media_manager_dock.setFeatures(QtWidgets.QDockWidget.NoDockWidgetFeatures)
|
||||
self.projector_manager_dock.setFeatures(QtWidgets.QDockWidget.NoDockWidgetFeatures)
|
||||
self.view_mode_menu.setEnabled(False)
|
||||
self.view_media_manager_item.setEnabled(False)
|
||||
self.view_service_manager_item.setEnabled(False)
|
||||
self.view_theme_manager_item.setEnabled(False)
|
||||
@ -1228,6 +1252,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow, RegistryProperties):
|
||||
self.service_manager_dock.setFeatures(QtWidgets.QDockWidget.AllDockWidgetFeatures)
|
||||
self.media_manager_dock.setFeatures(QtWidgets.QDockWidget.AllDockWidgetFeatures)
|
||||
self.projector_manager_dock.setFeatures(QtWidgets.QDockWidget.AllDockWidgetFeatures)
|
||||
self.view_mode_menu.setEnabled(True)
|
||||
self.view_media_manager_item.setEnabled(True)
|
||||
self.view_service_manager_item.setEnabled(True)
|
||||
self.view_theme_manager_item.setEnabled(True)
|
||||
@ -1248,6 +1273,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow, RegistryProperties):
|
||||
self.live_controller.panel.setVisible(visible)
|
||||
Settings().setValue('user interface/live panel', visible)
|
||||
self.view_live_panel.setChecked(visible)
|
||||
Settings().setValue('user interface/is preset layout', False)
|
||||
|
||||
def load_settings(self):
|
||||
"""
|
||||
|
@ -26,6 +26,8 @@ import os
|
||||
|
||||
from unittest import TestCase
|
||||
|
||||
from PyQt5 import QtWidgets
|
||||
|
||||
from openlp.core.ui.mainwindow import MainWindow
|
||||
from openlp.core.lib.ui import UiStrings
|
||||
from openlp.core.common.registry import Registry
|
||||
@ -189,3 +191,57 @@ class TestMainWindow(TestCase, TestMixin):
|
||||
# THEN: The media manager dock is made visible
|
||||
self.assertEqual(0, mocked_media_manager_dock.setVisible.call_count)
|
||||
mocked_widget.on_focus.assert_called_with()
|
||||
|
||||
@patch('openlp.core.ui.mainwindow.MainWindow.plugin_manager')
|
||||
@patch('openlp.core.ui.mainwindow.MainWindow.first_time')
|
||||
@patch('openlp.core.ui.mainwindow.MainWindow.application')
|
||||
@patch('openlp.core.ui.mainwindow.FirstTimeForm')
|
||||
@patch('openlp.core.ui.mainwindow.QtWidgets.QMessageBox.warning')
|
||||
@patch('openlp.core.ui.mainwindow.Settings')
|
||||
def on_first_time_wizard_clicked_show_projectors_after_test(self, mocked_Settings, mocked_warning,
|
||||
mocked_FirstTimeForm, mocked_application,
|
||||
mocked_first_time,
|
||||
mocked_plugin_manager):
|
||||
# GIVEN: Main_window, patched things, patched "Yes" as confirmation to re-run wizard, settings to True.
|
||||
mocked_Settings_obj = MagicMock()
|
||||
mocked_Settings_obj.value.return_value = True
|
||||
mocked_Settings.return_value = mocked_Settings_obj
|
||||
mocked_warning.return_value = QtWidgets.QMessageBox.Yes
|
||||
mocked_FirstTimeForm_obj = MagicMock()
|
||||
mocked_FirstTimeForm_obj.was_cancelled = False
|
||||
mocked_FirstTimeForm.return_value = mocked_FirstTimeForm_obj
|
||||
mocked_plugin_manager.plugins = []
|
||||
self.main_window.projector_manager_dock = MagicMock()
|
||||
|
||||
# WHEN: on_first_time_wizard_clicked is called
|
||||
self.main_window.on_first_time_wizard_clicked()
|
||||
|
||||
# THEN: projector_manager_dock.setVisible should had been called once
|
||||
self.main_window.projector_manager_dock.setVisible.assert_called_once_with(True)
|
||||
|
||||
@patch('openlp.core.ui.mainwindow.MainWindow.plugin_manager')
|
||||
@patch('openlp.core.ui.mainwindow.MainWindow.first_time')
|
||||
@patch('openlp.core.ui.mainwindow.MainWindow.application')
|
||||
@patch('openlp.core.ui.mainwindow.FirstTimeForm')
|
||||
@patch('openlp.core.ui.mainwindow.QtWidgets.QMessageBox.warning')
|
||||
@patch('openlp.core.ui.mainwindow.Settings')
|
||||
def on_first_time_wizard_clicked_hide_projectors_after_test(self, mocked_Settings, mocked_warning,
|
||||
mocked_FirstTimeForm, mocked_application,
|
||||
mocked_first_time,
|
||||
mocked_plugin_manager):
|
||||
# GIVEN: Main_window, patched things, patched "Yes" as confirmation to re-run wizard, settings to False.
|
||||
mocked_Settings_obj = MagicMock()
|
||||
mocked_Settings_obj.value.return_value = False
|
||||
mocked_Settings.return_value = mocked_Settings_obj
|
||||
mocked_warning.return_value = QtWidgets.QMessageBox.Yes
|
||||
mocked_FirstTimeForm_obj = MagicMock()
|
||||
mocked_FirstTimeForm_obj.was_cancelled = False
|
||||
mocked_FirstTimeForm.return_value = mocked_FirstTimeForm_obj
|
||||
mocked_plugin_manager.plugins = []
|
||||
self.main_window.projector_manager_dock = MagicMock()
|
||||
|
||||
# WHEN: on_first_time_wizard_clicked is called
|
||||
self.main_window.on_first_time_wizard_clicked()
|
||||
|
||||
# THEN: projector_manager_dock.setVisible should had been called once
|
||||
self.main_window.projector_manager_dock.setVisible.assert_called_once_with(False)
|
||||
|
Loading…
Reference in New Issue
Block a user