diff --git a/openlp/core/ui/generaltab.py b/openlp/core/ui/generaltab.py index 3f9e67e98..58fbd618c 100644 --- a/openlp/core/ui/generaltab.py +++ b/openlp/core/ui/generaltab.py @@ -42,7 +42,6 @@ class GeneralTab(SettingsTab): Initialise the general settings tab """ self.screens = ScreenList.get_instance() - self.monitorNumber = 0 self.icon_path = u':/icon/openlp-logo-16x16.png' generalTranslated = translate('GeneralTab', 'General') SettingsTab.__init__(self, parent, u'General', generalTranslated) @@ -142,14 +141,14 @@ class GeneralTab(SettingsTab): self.displayLayout.addWidget(self.customXLabel, 3, 0) self.customXValueEdit = QtGui.QSpinBox(self.displayGroupBox) self.customXValueEdit.setObjectName(u'customXValueEdit') - self.customXValueEdit.setMaximum(9999) + self.customXValueEdit.setRange(-9999, 9999) self.displayLayout.addWidget(self.customXValueEdit, 4, 0) self.customYLabel = QtGui.QLabel(self.displayGroupBox) self.customYLabel.setObjectName(u'customYLabel') self.displayLayout.addWidget(self.customYLabel, 3, 1) self.customYValueEdit = QtGui.QSpinBox(self.displayGroupBox) self.customYValueEdit.setObjectName(u'customYValueEdit') - self.customYValueEdit.setMaximum(9999) + self.customYValueEdit.setRange(-9999, 9999) self.displayLayout.addWidget(self.customYValueEdit, 4, 1) self.customWidthLabel = QtGui.QLabel(self.displayGroupBox) self.customWidthLabel.setObjectName(u'customWidthLabel') @@ -171,13 +170,16 @@ class GeneralTab(SettingsTab): QtCore.QObject.connect(self.overrideCheckBox, QtCore.SIGNAL(u'toggled(bool)'), self.onOverrideCheckBoxToggled) QtCore.QObject.connect(self.customHeightValueEdit, - QtCore.SIGNAL(u'valueChanged(int)'), self.onDisplayPositionChanged) + QtCore.SIGNAL(u'valueChanged(int)'), self.onDisplayChanged) QtCore.QObject.connect(self.customWidthValueEdit, - QtCore.SIGNAL(u'valueChanged(int)'), self.onDisplayPositionChanged) + QtCore.SIGNAL(u'valueChanged(int)'), self.onDisplayChanged) QtCore.QObject.connect(self.customYValueEdit, - QtCore.SIGNAL(u'valueChanged(int)'), self.onDisplayPositionChanged) + QtCore.SIGNAL(u'valueChanged(int)'), self.onDisplayChanged) QtCore.QObject.connect(self.customXValueEdit, - QtCore.SIGNAL(u'valueChanged(int)'), self.onDisplayPositionChanged) + QtCore.SIGNAL(u'valueChanged(int)'), self.onDisplayChanged) + QtCore.QObject.connect(self.monitorComboBox, + QtCore.SIGNAL(u'currentIndexChanged(int)'), + self.onMonitorComboBoxChanged) # Reload the tab, as the screen resolution/count may have changed. QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'config_screen_changed'), self.load) @@ -244,6 +246,9 @@ class GeneralTab(SettingsTab): settings.beginGroup(self.settingsSection) self.monitorComboBox.clear() self.monitorComboBox.addItems(self.screens.get_screen_list()) + monitorNumber = settings.value(u'monitor', + QtCore.QVariant(self.screens.display_count - 1)).toInt()[0] + self.monitorComboBox.setCurrentIndex(monitorNumber) self.numberEdit.setText(unicode(settings.value( u'ccli number', QtCore.QVariant(u'')).toString())) self.usernameEdit.setText(unicode(settings.value( @@ -254,7 +259,6 @@ class GeneralTab(SettingsTab): QtCore.QVariant(False)).toBool()) self.autoUnblankCheckBox.setChecked(settings.value(u'auto unblank', QtCore.QVariant(False)).toBool()) - self.monitorComboBox.setCurrentIndex(self.monitorNumber) self.displayOnMonitorCheck.setChecked(self.screens.display) self.warningCheckBox.setChecked(settings.value(u'blank warning', QtCore.QVariant(False)).toBool()) @@ -283,16 +287,16 @@ class GeneralTab(SettingsTab): self.customYValueEdit.setEnabled(self.overrideCheckBox.isChecked()) self.customHeightValueEdit.setEnabled(self.overrideCheckBox.isChecked()) self.customWidthValueEdit.setEnabled(self.overrideCheckBox.isChecked()) - self.overrideChanged = False + self.display_changed = False def save(self): """ Save the settings from the form """ - self.monitorNumber = self.monitorComboBox.currentIndex() settings = QtCore.QSettings() settings.beginGroup(self.settingsSection) - settings.setValue(u'monitor', QtCore.QVariant(self.monitorNumber)) + settings.setValue(u'monitor', + QtCore.QVariant(self.monitorComboBox.currentIndex())) settings.setValue(u'display on monitor', QtCore.QVariant(self.displayOnMonitorCheck.isChecked())) settings.setValue(u'blank warning', @@ -328,15 +332,8 @@ class GeneralTab(SettingsTab): settings.setValue(u'override position', QtCore.QVariant(self.overrideCheckBox.isChecked())) settings.endGroup() - self.screens.display = self.displayOnMonitorCheck.isChecked() - # Monitor Number has changed. - postUpdate = False - if self.screens.monitor_number != self.monitorNumber: - self.screens.monitor_number = self.monitorNumber - self.screens.set_current_display(self.monitorNumber) - postUpdate = True # On save update the screens as well - self.postSetUp(postUpdate) + self.postSetUp(True) def postSetUp(self, postUpdate=False): """ @@ -345,21 +342,24 @@ class GeneralTab(SettingsTab): """ Receiver.send_message(u'slidecontroller_live_spin_delay', self.timeoutSpinBox.value()) - # Reset screens after initial definition - if self.overrideChanged: - self.screens.override[u'size'] = QtCore.QRect( - self.customXValueEdit.value(), - self.customYValueEdit.value(), - self.customWidthValueEdit.value(), - self.customHeightValueEdit.value()) + # Do not continue on start up. + if not postUpdate: + return + self.screens.set_current_display(self.monitorComboBox.currentIndex()) + self.screens.display = self.displayOnMonitorCheck.isChecked() + self.screens.override[u'size'] = QtCore.QRect( + self.customXValueEdit.value(), + self.customYValueEdit.value(), + self.customWidthValueEdit.value(), + self.customHeightValueEdit.value()) if self.overrideCheckBox.isChecked(): self.screens.set_override_display() else: self.screens.reset_current_display() - # Order is important so be careful if you change - if self.overrideChanged or postUpdate: + if self.display_changed: Receiver.send_message(u'config_screen_changed') - self.overrideChanged = False + self.display_changed = False + def onOverrideCheckBoxToggled(self, checked): """ @@ -372,11 +372,22 @@ class GeneralTab(SettingsTab): self.customYValueEdit.setEnabled(checked) self.customHeightValueEdit.setEnabled(checked) self.customWidthValueEdit.setEnabled(checked) - self.overrideChanged = True + self.display_changed = True - def onDisplayPositionChanged(self): + def onDisplayChanged(self): """ Called when the width, height, x position or y position has changed. """ - self.overrideChanged = True + self.display_changed = True + def onMonitorComboBoxChanged(self, index): + """ + """ + self.display_changed = True + if self.overrideCheckBox.isChecked(): + return + screen = self.screens.screen_list[index] + self.customXValueEdit.setValue(screen[u'size'].x()) + self.customYValueEdit.setValue(screen[u'size'].y()) + self.customHeightValueEdit.setValue(screen[u'size'].height()) + self.customWidthValueEdit.setValue(screen[u'size'].width()) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index c6edbca25..3ff8ed1f2 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -95,8 +95,7 @@ class MainDisplay(DisplayWidget): """ Set up and build the output screen """ - log.debug(u'Start setup for monitor %s (live = %s)' % - (self.screens.monitor_number, self.isLive)) + log.debug(u'Start MainDisplay setup (live = %s)' % self.isLive) self.usePhonon = QtCore.QSettings().value( u'media/use phonon', QtCore.QVariant(True)).toBool() self.phononActive = False @@ -107,11 +106,11 @@ class MainDisplay(DisplayWidget): self.videoWidget.setVisible(False) self.videoWidget.setGeometry(QtCore.QRect(0, 0, self.screen[u'size'].width(), self.screen[u'size'].height())) - log.debug(u'Setup Phonon for monitor %s' % self.screens.monitor_number) + log.debug(u'Setup Phonon') if self.isLive: if not self.firstTime: self.createMediaObject() - log.debug(u'Setup webView for monitor %s' % self.screens.monitor_number) + log.debug(u'Setup webView') self.webView = QtWebKit.QWebView(self) self.webView.setGeometry(0, 0, self.screen[u'size'].width(), self.screen[u'size'].height()) @@ -128,8 +127,8 @@ class MainDisplay(DisplayWidget): if self.isLive: # Build the initial frame. self.black = QtGui.QImage( - self.screens.current[u'size'].width(), - self.screens.current[u'size'].height(), + self.screen[u'size'].width(), + self.screen[u'size'].height(), QtGui.QImage.Format_ARGB32_Premultiplied) painter_image = QtGui.QPainter() painter_image.begin(self.black) @@ -146,17 +145,16 @@ class MainDisplay(DisplayWidget): background_color = QtCore.Qt.white splash_image = QtGui.QImage(image_file) self.initialFrame = QtGui.QImage( - self.screens.current[u'size'].width(), - self.screens.current[u'size'].height(), + self.screen[u'size'].width(), + self.screen[u'size'].height(), QtGui.QImage.Format_ARGB32_Premultiplied) painter_image = QtGui.QPainter() painter_image.begin(self.initialFrame) painter_image.fillRect(self.initialFrame.rect(), background_color) painter_image.drawImage( - (self.screens.current[u'size'].width() - - splash_image.width()) / 2, - (self.screens.current[u'size'].height() - - splash_image.height()) / 2, splash_image) + (self.screen[u'size'].width() - splash_image.width()) / 2, + (self.screen[u'size'].height() - splash_image.height()) / 2, + splash_image) serviceItem = ServiceItem() serviceItem.bg_image_bytes = image_to_byte(self.initialFrame) self.webView.setHtml(build_html(serviceItem, self.screen, @@ -168,8 +166,7 @@ class MainDisplay(DisplayWidget): self.primary = False else: self.primary = True - log.debug( - u'Finished setup for monitor %s' % self.screens.monitor_number) + log.debug(u'Finished MainDisplay setup') def createMediaObject(self): self.firstTime = False @@ -452,7 +449,7 @@ class MainDisplay(DisplayWidget): self.hideDisplay(self.hideMode) else: # Single screen active - if self.screens.monitor_number == 0: + if self.screens.display_count == 1: # Only make visible if setting enabled if QtCore.QSettings().value(u'general/display on monitor', QtCore.QVariant(True)).toBool(): diff --git a/openlp/core/ui/screen.py b/openlp/core/ui/screen.py index d81b18ce3..330b5d53f 100644 --- a/openlp/core/ui/screen.py +++ b/openlp/core/ui/screen.py @@ -36,9 +36,16 @@ from openlp.core.lib import Receiver, translate log = logging.getLogger(__name__) +class Screen(object): + primary = True + number = 0 + size = QtCore.QRect(0, 0, 1024, 768) + class ScreenList(object): """ - Wrapper to handle the parameters of the display screen + Wrapper to handle the parameters of the display screen. + + To get access to the screen list call ``ScreenList.get_instance()``. """ log.info(u'Screen loaded') instance = None @@ -62,10 +69,6 @@ class ScreenList(object): self.override = None self.screen_list = [] self.display_count = 0 - # actual display number - self.current_display = 0 - # save config display number - self.monitor_number = 0 self.screen_count_changed() self._load_screen_settings() QtCore.QObject.connect(desktop, @@ -158,6 +161,7 @@ class ScreenList(object): screen[u'number'], screen[u'size']) if screen[u'primary']: self.current = screen + self.override = copy.deepcopy(self.current) self.screen_list.append(screen) self.display_count += 1 @@ -197,13 +201,10 @@ class ScreenList(object): log.debug(u'set_current_display %s', number) if number + 1 > self.display_count: self.current = self.screen_list[0] - self.override = copy.deepcopy(self.current) - self.current_display = 0 else: self.current = self.screen_list[number] - self.override = copy.deepcopy(self.current) self.preview = copy.deepcopy(self.current) - self.current_display = number + self.override = copy.deepcopy(self.current) if self.display_count == 1: self.preview = self.screen_list[0] @@ -222,7 +223,7 @@ class ScreenList(object): use the correct screen attributes. """ log.debug(u'reset_current_display') - self.set_current_display(self.current_display) + self.set_current_display(self.current[u'number']) def _load_screen_settings(self): """ @@ -230,9 +231,8 @@ class ScreenList(object): """ 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.set_current_display(settings.value(u'monitor', + QtCore.QVariant(self.display_count - 1)).toInt()[0]) self.display = settings.value( u'display on monitor', QtCore.QVariant(True)).toBool() override_display = settings.value( @@ -245,8 +245,8 @@ class ScreenList(object): 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) + settings.endGroup() if override_display: self.set_override_display() else: