diff --git a/openlp.pyw b/openlp.pyw index c287072f5..3badf1701 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -97,7 +97,7 @@ class OpenLP(QtGui.QApplication): QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'cursor_normal'), self.setNormalCursor) # Decide how many screens we have and their size - screens = ScreenList(self.desktop()) + screens = ScreenList.get_instance(self.desktop()) # First time checks in settings has_run_wizard = QtCore.QSettings().value( u'general/has run wizard', QtCore.QVariant(False)).toBool() @@ -115,8 +115,7 @@ class OpenLP(QtGui.QApplication): # make sure Qt really display the splash screen self.processEvents() # start the main app window - self.mainWindow = MainWindow(screens, self.clipboard(), - self.arguments()) + self.mainWindow = MainWindow(self.clipboard(), self.arguments()) self.mainWindow.show() if show_splash: # now kill the splashscreen diff --git a/openlp/core/lib/imagemanager.py b/openlp/core/lib/imagemanager.py index 4873f4975..e7f826b38 100644 --- a/openlp/core/lib/imagemanager.py +++ b/openlp/core/lib/imagemanager.py @@ -68,8 +68,10 @@ class ImageManager(QtCore.QObject): """ log.info(u'Image Manager loaded') - def __init__(self): + def __init__(self, width, height): QtCore.QObject.__init__(self) + self.width = width + self.height = height self._cache = {} self._thread_running = False self._cache_dirty = False diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index bba85d176..856b68937 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -32,7 +32,7 @@ from openlp.core.lib import ServiceItem, ImageManager, expand_tags, \ build_lyrics_format_css, build_lyrics_outline_css, Receiver, \ ItemCapabilities from openlp.core.lib.theme import ThemeLevel -from openlp.core.ui import MainDisplay +from openlp.core.ui import MainDisplay, ScreenList log = logging.getLogger(__name__) @@ -56,22 +56,21 @@ class Renderer(object): ``theme_manager`` The ThemeManager instance, used to get the current theme details. - ``screens`` - Contains information about the Screens. - ``screen_number`` Defaults to *0*. The index of the output/display screen. """ log.info(u'Renderer Loaded') - def __init__(self, theme_manager, screens): + def __init__(self, theme_manager): """ Initialise the render manager. """ log.debug(u'Initilisation started') - self.screens = screens - self.image_manager = ImageManager() - self.display = MainDisplay(self, screens, False) + self.screens = ScreenList.get_instance() + self.width = self.screens.current[u'size'].width() + self.height = self.screens.current[u'size'].height() + self.image_manager = ImageManager(self.width, self.height) + self.display = MainDisplay(self, False) self.display.imageManager = self.image_manager self.theme_manager = theme_manager self.service_theme = u'' @@ -86,7 +85,7 @@ class Renderer(object): """ log.debug(u'Update Display') self._calculate_default(self.screens.current[u'size']) - self.display = MainDisplay(self, self.screens, False) + self.display = MainDisplay(self, False) self.display.imageManager = self.image_manager self.display.setup() self.bg_frame = None diff --git a/openlp/core/lib/settingsmanager.py b/openlp/core/lib/settingsmanager.py index bb83371e6..5e66ed807 100644 --- a/openlp/core/lib/settingsmanager.py +++ b/openlp/core/lib/settingsmanager.py @@ -33,6 +33,7 @@ import os from PyQt4 import QtCore +#from openlp.core.ui import ScreenList from openlp.core.utils import AppLocation class SettingsManager(object): @@ -40,8 +41,9 @@ class SettingsManager(object): Class to control the initial settings for the UI and provide helper functions for the loading and saving of application settings. """ - def __init__(self, screen): - self.screen = screen.current + def __init__(self): + from openlp.core.ui import ScreenList + self.screen = ScreenList.get_instance().current self.width = self.screen[u'size'].width() self.height = self.screen[u'size'].height() self.mainwindow_height = self.height * 0.8 @@ -54,9 +56,6 @@ class SettingsManager(object): else: self.mainwindow_left = mainwindow_docbars self.mainwindow_right = mainwindow_docbars - self.slidecontroller = (self.width - ( - self.mainwindow_left + self.mainwindow_right) - 100) / 2 - self.slidecontroller_image = self.slidecontroller - 50 @staticmethod def get_last_dir(section, num=None): diff --git a/openlp/core/ui/__init__.py b/openlp/core/ui/__init__.py index a2985c0b8..fced32a0d 100644 --- a/openlp/core/ui/__init__.py +++ b/openlp/core/ui/__init__.py @@ -56,10 +56,10 @@ from firsttimelanguageform import FirstTimeLanguageForm from themeform import ThemeForm from filerenameform import FileRenameForm from starttimeform import StartTimeForm +from screen import ScreenList from maindisplay import MainDisplay from servicenoteform import ServiceNoteForm from serviceitemeditform import ServiceItemEditForm -from screen import ScreenList from slidecontroller import SlideController from splashscreen import SplashScreen from generaltab import GeneralTab diff --git a/openlp/core/ui/generaltab.py b/openlp/core/ui/generaltab.py index 7dac2fe9d..3f9e67e98 100644 --- a/openlp/core/ui/generaltab.py +++ b/openlp/core/ui/generaltab.py @@ -29,6 +29,7 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import SettingsTab, Receiver, translate from openlp.core.lib.ui import UiStrings +from openlp.core.ui import ScreenList log = logging.getLogger(__name__) @@ -36,33 +37,16 @@ class GeneralTab(SettingsTab): """ GeneralTab is the general settings tab in the settings dialog. """ - def __init__(self, parent, screens): + def __init__(self, parent): """ Initialise the general settings tab """ - self.screens = screens + self.screens = ScreenList.get_instance() self.monitorNumber = 0 - # Set to True to allow PostSetup to work on application start up - self.overrideChanged = True self.icon_path = u':/icon/openlp-logo-16x16.png' generalTranslated = translate('GeneralTab', 'General') SettingsTab.__init__(self, parent, u'General', generalTranslated) - def preLoad(self): - """ - Set up the display screen and set correct screen values. - If not set before default to last screen. - """ - settings = QtCore.QSettings() - settings.beginGroup(self.settingsSection) - self.monitorNumber = settings.value(u'monitor', - QtCore.QVariant(self.screens.display_count - 1)).toInt()[0] - self.screens.set_current_display(self.monitorNumber) - self.screens.monitor_number = self.monitorNumber - self.screens.display = settings.value( - u'display on monitor', QtCore.QVariant(True)).toBool() - settings.endGroup() - def setupUi(self): """ Create the user interface for the general settings tab @@ -203,7 +187,6 @@ class GeneralTab(SettingsTab): self.passwordLabel.setVisible(False) self.passwordEdit.setVisible(False) - def retranslateUi(self): """ Translate the general settings tab to the currently selected language @@ -300,6 +283,7 @@ class GeneralTab(SettingsTab): self.customYValueEdit.setEnabled(self.overrideCheckBox.isChecked()) self.customHeightValueEdit.setEnabled(self.overrideCheckBox.isChecked()) self.customWidthValueEdit.setEnabled(self.overrideCheckBox.isChecked()) + self.overrideChanged = False def save(self): """ @@ -394,4 +378,5 @@ class GeneralTab(SettingsTab): """ Called when the width, height, x position or y position has changed. """ - self.overrideChanged = True \ No newline at end of file + self.overrideChanged = True + diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 5fd066a12..58ff7d6e3 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -36,7 +36,7 @@ from PyQt4.phonon import Phonon from openlp.core.lib import Receiver, build_html, ServiceItem, image_to_byte, \ translate -from openlp.core.ui import HideMode +from openlp.core.ui import HideMode, ScreenList log = logging.getLogger(__name__) @@ -60,10 +60,10 @@ class MainDisplay(DisplayWidget): """ This is the display screen. """ - def __init__(self, parent, screens, live): + def __init__(self, parent, live): DisplayWidget.__init__(self, live, parent=None) self.parent = parent - self.screens = screens + self.screens = ScreenList.get_instance() self.isLive = live self.alertTab = None self.hideMode = None diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index aadc1c175..d8dcac630 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -86,10 +86,8 @@ class Ui_MainWindow(object): self.controlSplitter.setObjectName(u'controlSplitter') self.mainContentLayout.addWidget(self.controlSplitter) # Create slide controllers - self.previewController = SlideController(self, self.settingsmanager, - self.screens) - self.liveController = SlideController(self, self.settingsmanager, - self.screens, True) + self.previewController = SlideController(self, self.settingsmanager) + self.liveController = SlideController(self, self.settingsmanager, True) previewVisible = QtCore.QSettings().value( u'user interface/preview panel', QtCore.QVariant(True)).toBool() self.previewController.panel.setVisible(previewVisible) @@ -461,13 +459,12 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): """ log.info(u'MainWindow loaded') - def __init__(self, screens, clipboard, arguments): + def __init__(self, clipboard, arguments): """ This constructor sets up the interface, the various managers, and the plugins. """ QtGui.QMainWindow.__init__(self) - self.screens = screens self.clipboard = clipboard self.arguments = arguments # Set up settings sections for the main application @@ -477,9 +474,9 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.serviceSettingsSection = u'servicemanager' self.songsSettingsSection = u'songs' self.serviceNotSaved = False - self.settingsmanager = SettingsManager(screens) + self.settingsmanager = SettingsManager() self.aboutForm = AboutForm(self) - self.settingsForm = SettingsForm(self.screens, self, self) + self.settingsForm = SettingsForm(self, self) self.displayTagForm = DisplayTagForm(self) self.shortcutForm = ShortcutListForm(self) self.recentFiles = QtCore.QStringList() @@ -552,8 +549,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): # warning cyclic dependency # renderer needs to call ThemeManager and # ThemeManager needs to call Renderer - self.renderer = Renderer( - self.themeManagerContents, self.screens) + self.renderer = Renderer(self.themeManagerContents) # Define the media Dock Manager self.mediaDockManager = MediaDockManager(self.MediaToolBox) log.info(u'Load Plugins') diff --git a/openlp/core/ui/screen.py b/openlp/core/ui/screen.py index 15dbd9883..d81b18ce3 100644 --- a/openlp/core/ui/screen.py +++ b/openlp/core/ui/screen.py @@ -41,6 +41,13 @@ class ScreenList(object): Wrapper to handle the parameters of the display screen """ log.info(u'Screen loaded') + instance = None + + @staticmethod + def get_instance(desktop=None): + if desktop is not None and ScreenList.instance is None: + ScreenList.instance = ScreenList(desktop) + return ScreenList.instance def __init__(self, desktop): """ @@ -60,6 +67,7 @@ class ScreenList(object): # save config display number self.monitor_number = 0 self.screen_count_changed() + self._load_screen_settings() QtCore.QObject.connect(desktop, QtCore.SIGNAL(u'resized(int)'), self.screen_resolution_changed) QtCore.QObject.connect(desktop, @@ -215,3 +223,31 @@ class ScreenList(object): """ log.debug(u'reset_current_display') self.set_current_display(self.current_display) + + def _load_screen_settings(self): + """ + Loads the screen size and the monitor number from the settings. + """ + settings = QtCore.QSettings() + settings.beginGroup(u'general') + self.monitor_number = settings.value(u'monitor', + QtCore.QVariant(self.display_count - 1)).toInt()[0] + self.set_current_display(self.monitor_number) + self.display = settings.value( + u'display on monitor', QtCore.QVariant(True)).toBool() + override_display = settings.value( + u'override position', QtCore.QVariant(False)).toBool() + x = settings.value(u'x position', + QtCore.QVariant(self.current[u'size'].x())).toInt()[0] + y = settings.value(u'y position', + QtCore.QVariant(self.current[u'size'].y())).toInt()[0] + width = settings.value(u'width', + QtCore.QVariant(self.current[u'size'].width())).toInt()[0] + height = settings.value(u'height', + QtCore.QVariant(self.current[u'size'].height())).toInt()[0] + settings.endGroup() + self.override[u'size'] = QtCore.QRect(x, y, width, height) + if override_display: + self.set_override_display() + else: + self.reset_current_display() diff --git a/openlp/core/ui/settingsform.py b/openlp/core/ui/settingsform.py index 1967412f5..265a03f48 100644 --- a/openlp/core/ui/settingsform.py +++ b/openlp/core/ui/settingsform.py @@ -40,14 +40,14 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog): """ Provide the form to manipulate the settings for OpenLP """ - def __init__(self, screens, mainWindow, parent=None): + def __init__(self, mainWindow, parent=None): """ Initialise the settings form """ QtGui.QDialog.__init__(self, parent) self.setupUi(self) # General tab - self.generalTab = GeneralTab(self, screens) + self.generalTab = GeneralTab(self) # Themes tab self.themesTab = ThemesTab(self, mainWindow) # Advanced tab diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index fdbf184b5..204470638 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -33,7 +33,7 @@ from PyQt4.phonon import Phonon from openlp.core.lib import OpenLPToolbar, Receiver, resize_image, \ ItemCapabilities, translate from openlp.core.lib.ui import UiStrings, shortcut_action -from openlp.core.ui import HideMode, MainDisplay +from openlp.core.ui import HideMode, MainDisplay, ScreenList from openlp.core.utils.actions import ActionList, CategoryOrder log = logging.getLogger(__name__) @@ -53,7 +53,7 @@ class SlideController(QtGui.QWidget): SlideController is the slide controller widget. This widget is what the user uses to control the displaying of verses/slides/etc on the screen. """ - def __init__(self, parent, settingsmanager, screens, isLive=False): + def __init__(self, parent, settingsmanager, isLive=False): """ Set up the Slide Controller. """ @@ -61,10 +61,11 @@ class SlideController(QtGui.QWidget): self.settingsmanager = settingsmanager self.isLive = isLive self.parent = parent - self.screens = screens + self.screens = ScreenList.get_instance() self.ratio = float(self.screens.current[u'size'].width()) / \ float(self.screens.current[u'size'].height()) - self.display = MainDisplay(self, screens, isLive) + self.display = MainDisplay(self, isLive) + self.display.setup() self.loopList = [ u'Start Loop', u'Loop Separator', @@ -296,9 +297,6 @@ class SlideController(QtGui.QWidget): sizePolicy.setHeightForWidth( self.slidePreview.sizePolicy().hasHeightForWidth()) self.slidePreview.setSizePolicy(sizePolicy) - self.slidePreview.setFixedSize( - QtCore.QSize(self.settingsmanager.slidecontroller_image, - self.settingsmanager.slidecontroller_image / self.ratio)) self.slidePreview.setFrameShape(QtGui.QFrame.Box) self.slidePreview.setFrameShadow(QtGui.QFrame.Plain) self.slidePreview.setLineWidth(1) @@ -424,7 +422,7 @@ class SlideController(QtGui.QWidget): screen previews. """ # rebuild display as screen size changed - self.display = MainDisplay(self, self.screens, self.isLive) + self.display = MainDisplay(self, self.isLive) self.display.imageManager = self.parent.renderer.image_manager self.display.alertTab = self.alertTab self.display.setup()