From b12a37b9865be703884a71efc003af747f1a3484 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Fri, 25 Feb 2011 20:52:13 +0100 Subject: [PATCH 01/13] inform the user, that he has to restart openlp if he wants changes to the monitor set up to be available --- openlp.pyw | 15 ++++++++++++++- openlp/core/lib/ui.py | 27 +++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/openlp.pyw b/openlp.pyw index 85ba81fba..6712dc419 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -34,7 +34,8 @@ from subprocess import Popen, PIPE from PyQt4 import QtCore, QtGui -from openlp.core.lib import Receiver, check_directory_exists +from openlp.core.lib import Receiver, translate, check_directory_exists +from openlp.core.lib.ui import information_message_box from openlp.core.resources import qInitResources from openlp.core.ui.mainwindow import MainWindow from openlp.core.ui.exceptionform import ExceptionForm @@ -166,6 +167,9 @@ class OpenLP(QtGui.QApplication): QtCore.SIGNAL(u'cursor_busy'), self.setBusyCursor) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'cursor_normal'), self.setNormalCursor) + QtCore.QObject.connect(self.desktop(), + QtCore.SIGNAL(u'screenCountChanged(int)'), + self.onScreenCountChanged) self.setOrganizationName(u'OpenLP') self.setOrganizationDomain(u'openlp.org') self.setApplicationName(u'OpenLP') @@ -225,6 +229,15 @@ class OpenLP(QtGui.QApplication): """ self.restoreOverrideCursor() + def onScreenCountChanged(self): + """ + Called when the user changes the monitor set up. + """ + information_message_box( + message=translate('OpenLP','You have changed the monitor set up. ' + 'You have to restart OpenLP in order to change the live display ' + 'monitor.')) + def main(): """ The main function which parses command line options and then runs diff --git a/openlp/core/lib/ui.py b/openlp/core/lib/ui.py index c127d810d..9555e0533 100644 --- a/openlp/core/lib/ui.py +++ b/openlp/core/lib/ui.py @@ -58,6 +58,7 @@ class UiStrings(object): 'Abbreviated font pointsize unit') Image = translate('OpenLP.Ui', 'Image') Import = translate('OpenLP.Ui', 'Import') + Information = translate('OpenLP.Ui', 'Information') LengthTime = unicode(translate('OpenLP.Ui', 'Length %s')) Live = translate('OpenLP.Ui', 'Live') LiveBGError = translate('OpenLP.Ui', 'Live Background Error') @@ -173,6 +174,32 @@ def critical_error_message_box(title=None, message=None, parent=None, data[u'title'] = title if title else UiStrings.Error return Receiver.send_message(u'openlp_error_message', data) +def information_message_box(title=None, message=None, parent=None, + question=False): + """ + Provides a standard information message box for notes that OpenLP displays + to users. + + ``title`` + The title for the message box. + + ``message`` + The message to display to the user. + + ``parent`` + The parent UI element to attach the dialog to. + + ``question`` + Should this message box question the user. + """ + if question: + return QtGui.QMessageBox.critical(parent, UiStrings.Information, + message, QtGui.QMessageBox.StandardButtons( + QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)) + data = {u'message': message} + data[u'title'] = title if title else UiStrings.Information + return Receiver.send_message(u'openlp_information_message', data) + def media_item_combo_box(parent, name): """ Provide a standard combo box for media items. From 1a645acc0692a48ce39841bba9fb38b609b227f3 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Fri, 25 Feb 2011 21:29:45 +0100 Subject: [PATCH 02/13] removed information_message_box --- openlp.pyw | 12 +++++++----- openlp/core/lib/ui.py | 27 --------------------------- 2 files changed, 7 insertions(+), 32 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index 6712dc419..29cb856c3 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -35,7 +35,6 @@ from subprocess import Popen, PIPE from PyQt4 import QtCore, QtGui from openlp.core.lib import Receiver, translate, check_directory_exists -from openlp.core.lib.ui import information_message_box from openlp.core.resources import qInitResources from openlp.core.ui.mainwindow import MainWindow from openlp.core.ui.exceptionform import ExceptionForm @@ -233,10 +232,13 @@ class OpenLP(QtGui.QApplication): """ Called when the user changes the monitor set up. """ - information_message_box( - message=translate('OpenLP','You have changed the monitor set up. ' - 'You have to restart OpenLP in order to change the live display ' - 'monitor.')) + data = { + u'title': translate('OpenLP.Ui', 'Information'), + u'message': translate('OpenLP','The monitor set up has changed. You' + ' have to restart OpenLP in order to change the live display' + ' monitor.') + } + Receiver.send_message(u'openlp_information_message', data) def main(): """ diff --git a/openlp/core/lib/ui.py b/openlp/core/lib/ui.py index 9555e0533..c127d810d 100644 --- a/openlp/core/lib/ui.py +++ b/openlp/core/lib/ui.py @@ -58,7 +58,6 @@ class UiStrings(object): 'Abbreviated font pointsize unit') Image = translate('OpenLP.Ui', 'Image') Import = translate('OpenLP.Ui', 'Import') - Information = translate('OpenLP.Ui', 'Information') LengthTime = unicode(translate('OpenLP.Ui', 'Length %s')) Live = translate('OpenLP.Ui', 'Live') LiveBGError = translate('OpenLP.Ui', 'Live Background Error') @@ -174,32 +173,6 @@ def critical_error_message_box(title=None, message=None, parent=None, data[u'title'] = title if title else UiStrings.Error return Receiver.send_message(u'openlp_error_message', data) -def information_message_box(title=None, message=None, parent=None, - question=False): - """ - Provides a standard information message box for notes that OpenLP displays - to users. - - ``title`` - The title for the message box. - - ``message`` - The message to display to the user. - - ``parent`` - The parent UI element to attach the dialog to. - - ``question`` - Should this message box question the user. - """ - if question: - return QtGui.QMessageBox.critical(parent, UiStrings.Information, - message, QtGui.QMessageBox.StandardButtons( - QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)) - data = {u'message': message} - data[u'title'] = title if title else UiStrings.Information - return Receiver.send_message(u'openlp_information_message', data) - def media_item_combo_box(parent, name): """ Provide a standard combo box for media items. From 86eb34ae1c0e2049171df5009bcb803700baff7d Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 26 Feb 2011 22:43:41 +0100 Subject: [PATCH 03/13] clean ups, further implementation --- openlp.pyw | 49 ++++++++++++++++++++++-------------- openlp/core/ui/generaltab.py | 1 + openlp/core/ui/screen.py | 49 ++++++++++++++++++++++++++++++------ 3 files changed, 72 insertions(+), 27 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index 29cb856c3..1269c7ece 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -167,8 +167,7 @@ class OpenLP(QtGui.QApplication): QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'cursor_normal'), self.setNormalCursor) QtCore.QObject.connect(self.desktop(), - QtCore.SIGNAL(u'screenCountChanged(int)'), - self.onScreenCountChanged) + QtCore.SIGNAL(u'screenCountChanged(int)'), self.updateScreenList) self.setOrganizationName(u'OpenLP') self.setOrganizationDomain(u'openlp.org') self.setApplicationName(u'OpenLP') @@ -182,17 +181,13 @@ class OpenLP(QtGui.QApplication): self.splash.show() # make sure Qt really display the splash screen self.processEvents() - screens = ScreenList() + self.screens = ScreenList() # Decide how many screens we have and their size - for screen in xrange(0, self.desktop().numScreens()): - size = self.desktop().screenGeometry(screen) - screens.add_screen({u'number': screen, - u'size': size, - u'primary': (self.desktop().primaryScreen() == screen)}) - log.info(u'Screen %d found with resolution %s', screen, size) + self.updateScreenList(True) # start the main app window self.appClipboard = self.clipboard() - self.mainWindow = MainWindow(screens, app_version, self.appClipboard) + self.mainWindow = MainWindow( + self.screens, app_version, self.appClipboard) self.mainWindow.show() if show_splash: # now kill the splashscreen @@ -228,17 +223,33 @@ class OpenLP(QtGui.QApplication): """ self.restoreOverrideCursor() - def onScreenCountChanged(self): + def updateScreenList(self, applicationStart=False): """ - Called when the user changes the monitor set up. + Called when the list of screens has to be updated. + + ``applicationStart`` + Should be ``True`` when starting the application, otherwise + ``False``. """ - data = { - u'title': translate('OpenLP.Ui', 'Information'), - u'message': translate('OpenLP','The monitor set up has changed. You' - ' have to restart OpenLP in order to change the live display' - ' monitor.') - } - Receiver.send_message(u'openlp_information_message', data) + # Add new screens. + for number in xrange(0, self.desktop().numScreens()): + if not self.screens.screen_exists(number): + size = self.desktop().screenGeometry(number) + self.screens.add_screen({ + u'number': number, + u'size': size, + u'primary': (self.desktop().primaryScreen() == number) + }) + log.info(u'Screen %d found with resolution %s', number, size) + # Remove unplugged screens. + for screen in self.screens.screen_list: + if screen[u'number'] > self.desktop().numScreens(): + self.screens.remove_screen(screen) + log.info(u'Screen %d removed' % creen[u'number']) + if not applicationStart: + pass + # TODO: Refresh settings. + # TODO: Make the new (second) monitor the live display. def main(): """ diff --git a/openlp/core/ui/generaltab.py b/openlp/core/ui/generaltab.py index 4eacc5959..777302a41 100644 --- a/openlp/core/ui/generaltab.py +++ b/openlp/core/ui/generaltab.py @@ -300,6 +300,7 @@ class GeneralTab(SettingsTab): """ settings = QtCore.QSettings() settings.beginGroup(self.settingsSection) + self.monitorComboBox.clear() for screen in self.screens.screen_list: screen_name = u'%s %d' % (translate('OpenLP.GeneralTab', 'Screen'), screen[u'number'] + 1) diff --git a/openlp/core/ui/screen.py b/openlp/core/ui/screen.py index 4530cfd3c..df8ae9cbf 100644 --- a/openlp/core/ui/screen.py +++ b/openlp/core/ui/screen.py @@ -25,7 +25,7 @@ ############################################################################### """ The :mod:`screen` module provides management functionality for a machines' -displays +displays. """ import logging import copy @@ -51,25 +51,58 @@ class ScreenList(object): def add_screen(self, screen): """ - Add a screen to the list of known screens + Add a screen to the list of known screens. + + ``screen`` + A dict with the screen properties:: + + { + u'primary': True, + u'number': 0, + u'size': PyQt4.QtCore.QRect(0, 0, 1024, 768) + } + """ + print u'add screen: %s' % screen if screen[u'primary']: self.current = screen self.screen_list.append(screen) self.display_count += 1 + def remove_screen(self, number): + """ + Remove a screen from the list of known screens. + + ``number`` + The screen number (int). + """ + print u'remove screen %s' % number + for screen in self.screen_list: + if screen[u'number'] == number: + self.screen_list.remove(screen) + self.display_count -= 1 + break + def screen_exists(self, number): """ - Confirms a screen is known + Confirms a screen is known. + + ``number`` + The screen number (int). """ for screen in self.screen_list: if screen[u'number'] == number: + print u'screen %s exists' % number return True + print u'screen %s does not exist' % number return False def set_current_display(self, number): """ - Set up the current screen dimensions + Set up the current screen dimensions. + + ``number`` + The screen number (int). """ log.debug(u'set_current_display %s', number) if number + 1 > self.display_count: @@ -86,8 +119,8 @@ class ScreenList(object): def set_override_display(self): """ - replace the current size with the override values - user wants to have their own screen attributes + Replace the current size with the override values, as the user wants to + have their own screen attributes. """ log.debug(u'set_override_display') self.current = copy.deepcopy(self.override) @@ -95,8 +128,8 @@ class ScreenList(object): def reset_current_display(self): """ - replace the current values with the correct values - user wants to use the correct screen attributes + Replace the current values with the correct values, as the user wants to + use the correct screen attributes. """ log.debug(u'reset_current_display') self.set_current_display(self.current_display) From 4792a73bb4ed5521d8dcc7ee7c388db20741a1ed Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sun, 27 Feb 2011 16:44:56 +0100 Subject: [PATCH 04/13] change screen size when the screen resolution changes (only when the user does not override the screen); reload settings when screen resolution changed or a new screen has been detected --- openlp.pyw | 34 ++++++++++++++++++----------- openlp/core/ui/screen.py | 40 ++++++++++++++++++++++++++++++---- openlp/core/ui/settingsform.py | 9 ++++++++ 3 files changed, 66 insertions(+), 17 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index 1269c7ece..da347b1ea 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -24,7 +24,7 @@ # with this program; if not, write to the Free Software Foundation, Inc., 59 # # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### - +import copy import os import sys import logging @@ -168,6 +168,8 @@ class OpenLP(QtGui.QApplication): QtCore.SIGNAL(u'cursor_normal'), self.setNormalCursor) QtCore.QObject.connect(self.desktop(), QtCore.SIGNAL(u'screenCountChanged(int)'), self.updateScreenList) + QtCore.QObject.connect(self.desktop(), + QtCore.SIGNAL(u'resized(int)'), self.updateScreenList) self.setOrganizationName(u'OpenLP') self.setOrganizationDomain(u'openlp.org') self.setApplicationName(u'OpenLP') @@ -228,27 +230,33 @@ class OpenLP(QtGui.QApplication): Called when the list of screens has to be updated. ``applicationStart`` - Should be ``True`` when starting the application, otherwise - ``False``. + ``True`` when starting the application, otherwise ``False``. """ + for screen in copy.deepcopy(self.screens.screen_list): + # Remove unplugged screens. + if screen[u'number'] == self.desktop().numScreens(): + self.screens.remove_screen(screen[u'number']) + else: + # Check if the screen has changed. + temp_screen = { + u'number': screen[u'number'], + u'size': self.desktop().screenGeometry(screen[u'number']), + u'primary': + (self.desktop().primaryScreen() == screen[u'number']) + } + if temp_screen != screen: + self.screens.update_screen(temp_screen) # Add new screens. for number in xrange(0, self.desktop().numScreens()): if not self.screens.screen_exists(number): - size = self.desktop().screenGeometry(number) self.screens.add_screen({ u'number': number, - u'size': size, + u'size': self.desktop().screenGeometry(number), u'primary': (self.desktop().primaryScreen() == number) }) - log.info(u'Screen %d found with resolution %s', number, size) - # Remove unplugged screens. - for screen in self.screens.screen_list: - if screen[u'number'] > self.desktop().numScreens(): - self.screens.remove_screen(screen) - log.info(u'Screen %d removed' % creen[u'number']) if not applicationStart: - pass - # TODO: Refresh settings. + # Reload setting tabs to apply possible changes. + self.mainWindow.settingsForm.reload() # TODO: Make the new (second) monitor the live display. def main(): diff --git a/openlp/core/ui/screen.py b/openlp/core/ui/screen.py index df8ae9cbf..c21131a58 100644 --- a/openlp/core/ui/screen.py +++ b/openlp/core/ui/screen.py @@ -30,6 +30,8 @@ displays. import logging import copy +from openlp.core.lib import Receiver + log = logging.getLogger(__name__) class ScreenList(object): @@ -39,6 +41,8 @@ class ScreenList(object): log.info(u'Screen loaded') def __init__(self): + # The screen used for the rendermanager. + # (Why does the rendermanager needs his own?) self.preview = None self.current = None self.override = None @@ -61,14 +65,43 @@ class ScreenList(object): u'number': 0, u'size': PyQt4.QtCore.QRect(0, 0, 1024, 768) } - """ print u'add screen: %s' % screen + log.info(u'Screen %d found with resolution %s', + screen[u'number'], screen[u'size']) if screen[u'primary']: self.current = screen self.screen_list.append(screen) self.display_count += 1 + def update_screen(self, newScreen): + """ + Adjusts the screen's properties in the ``screen_list`` to the properties + of the given screen. + + ``newScreen`` + A dict with the new properties of the screen:: + + { + u'primary': True, + u'number': 0, + u'size': PyQt4.QtCore.QRect(0, 0, 1024, 768) + } + """ + print u'update_screen %s' % newScreen[u'number'] + log.info(u'update_screen %d' % newScreen[u'number']) + for oldScreen in self.screen_list: + if newScreen[u'number'] == oldScreen[u'number']: + self.remove_screen(oldScreen[u'number']) + self.add_screen(newScreen) + # The screen's default size is used, that is why we have to + # update the override screen. + if oldScreen == self.override: + self.override = copy.deepcopy(newScreen) + self.set_override_display() + Receiver.send_message(u'config_screen_changed') + break + def remove_screen(self, number): """ Remove a screen from the list of known screens. @@ -76,9 +109,10 @@ class ScreenList(object): ``number`` The screen number (int). """ - print u'remove screen %s' % number + log.info(u'remove_screen %d' % number) for screen in self.screen_list: if screen[u'number'] == number: + print u'remove screen %s' % number self.screen_list.remove(screen) self.display_count -= 1 break @@ -92,9 +126,7 @@ class ScreenList(object): """ for screen in self.screen_list: if screen[u'number'] == number: - print u'screen %s exists' % number return True - print u'screen %s does not exist' % number return False def set_current_display(self, number): diff --git a/openlp/core/ui/settingsform.py b/openlp/core/ui/settingsform.py index 872b37586..29f5eedbf 100644 --- a/openlp/core/ui/settingsform.py +++ b/openlp/core/ui/settingsform.py @@ -107,3 +107,12 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog): """ for tabIndex in range(0, self.settingsTabWidget.count()): self.settingsTabWidget.widget(tabIndex).postSetUp() + + def reload(self): + """ + Reload all tabs to update settings which have been changed and are + outside of our scope. + """ + print u'reload' + for tabIndex in range(0, self.settingsTabWidget.count()): + self.settingsTabWidget.widget(tabIndex).load() From 0bb1ec6db51251c6d38895d1b76c5e16c65f02da Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sun, 27 Feb 2011 17:27:45 +0100 Subject: [PATCH 05/13] clean up --- openlp.pyw | 1 + openlp/core/ui/screen.py | 13 +++++-------- openlp/core/ui/settingsform.py | 1 - 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index da347b1ea..7f0dd21e1 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -257,6 +257,7 @@ class OpenLP(QtGui.QApplication): if not applicationStart: # Reload setting tabs to apply possible changes. self.mainWindow.settingsForm.reload() + #Receiver.send_message(u'config_screen_changed') # TODO: Make the new (second) monitor the live display. def main(): diff --git a/openlp/core/ui/screen.py b/openlp/core/ui/screen.py index c21131a58..53db37031 100644 --- a/openlp/core/ui/screen.py +++ b/openlp/core/ui/screen.py @@ -30,8 +30,6 @@ displays. import logging import copy -from openlp.core.lib import Receiver - log = logging.getLogger(__name__) class ScreenList(object): @@ -82,11 +80,11 @@ class ScreenList(object): ``newScreen`` A dict with the new properties of the screen:: - { - u'primary': True, - u'number': 0, - u'size': PyQt4.QtCore.QRect(0, 0, 1024, 768) - } + { + u'primary': True, + u'number': 0, + u'size': PyQt4.QtCore.QRect(0, 0, 1024, 768) + } """ print u'update_screen %s' % newScreen[u'number'] log.info(u'update_screen %d' % newScreen[u'number']) @@ -99,7 +97,6 @@ class ScreenList(object): if oldScreen == self.override: self.override = copy.deepcopy(newScreen) self.set_override_display() - Receiver.send_message(u'config_screen_changed') break def remove_screen(self, number): diff --git a/openlp/core/ui/settingsform.py b/openlp/core/ui/settingsform.py index 29f5eedbf..0c058cfd0 100644 --- a/openlp/core/ui/settingsform.py +++ b/openlp/core/ui/settingsform.py @@ -113,6 +113,5 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog): Reload all tabs to update settings which have been changed and are outside of our scope. """ - print u'reload' for tabIndex in range(0, self.settingsTabWidget.count()): self.settingsTabWidget.widget(tabIndex).load() From b309c8d6737845d54eccdc7570fd60ffa711c89a Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sun, 27 Feb 2011 19:19:16 +0100 Subject: [PATCH 06/13] clean up --- openlp.pyw | 12 ++++++------ openlp/core/ui/screen.py | 3 --- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index 7f0dd21e1..d65f68591 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -185,7 +185,7 @@ class OpenLP(QtGui.QApplication): self.processEvents() self.screens = ScreenList() # Decide how many screens we have and their size - self.updateScreenList(True) + self.updateScreenList() # start the main app window self.appClipboard = self.clipboard() self.mainWindow = MainWindow( @@ -225,12 +225,12 @@ class OpenLP(QtGui.QApplication): """ self.restoreOverrideCursor() - def updateScreenList(self, applicationStart=False): + def updateScreenList(self, count=-1): """ Called when the list of screens has to be updated. - ``applicationStart`` - ``True`` when starting the application, otherwise ``False``. + ``count`` + The screen's number which has been (un)plugged """ for screen in copy.deepcopy(self.screens.screen_list): # Remove unplugged screens. @@ -254,10 +254,10 @@ class OpenLP(QtGui.QApplication): u'size': self.desktop().screenGeometry(number), u'primary': (self.desktop().primaryScreen() == number) }) - if not applicationStart: + if count != -1: # Reload setting tabs to apply possible changes. self.mainWindow.settingsForm.reload() - #Receiver.send_message(u'config_screen_changed') + Receiver.send_message(u'config_screen_changed') # TODO: Make the new (second) monitor the live display. def main(): diff --git a/openlp/core/ui/screen.py b/openlp/core/ui/screen.py index 53db37031..df04a40d6 100644 --- a/openlp/core/ui/screen.py +++ b/openlp/core/ui/screen.py @@ -64,7 +64,6 @@ class ScreenList(object): u'size': PyQt4.QtCore.QRect(0, 0, 1024, 768) } """ - print u'add screen: %s' % screen log.info(u'Screen %d found with resolution %s', screen[u'number'], screen[u'size']) if screen[u'primary']: @@ -86,7 +85,6 @@ class ScreenList(object): u'size': PyQt4.QtCore.QRect(0, 0, 1024, 768) } """ - print u'update_screen %s' % newScreen[u'number'] log.info(u'update_screen %d' % newScreen[u'number']) for oldScreen in self.screen_list: if newScreen[u'number'] == oldScreen[u'number']: @@ -109,7 +107,6 @@ class ScreenList(object): log.info(u'remove_screen %d' % number) for screen in self.screen_list: if screen[u'number'] == number: - print u'remove screen %s' % number self.screen_list.remove(screen) self.display_count -= 1 break From c7644bf8d90bba65dead94dfb6ffdff0cfa117b1 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Mon, 28 Feb 2011 20:36:58 +0100 Subject: [PATCH 07/13] removed unused import --- openlp.pyw | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp.pyw b/openlp.pyw index c503cfa4b..c88d6a3ee 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -34,7 +34,7 @@ from subprocess import Popen, PIPE from PyQt4 import QtCore, QtGui -from openlp.core.lib import Receiver, translate, check_directory_exists +from openlp.core.lib import Receiver, check_directory_exists from openlp.core.resources import qInitResources from openlp.core.ui.mainwindow import MainWindow from openlp.core.ui.exceptionform import ExceptionForm From 89c988b7283d0084cedf0c2184aecbb1053fa3a2 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Tue, 1 Mar 2011 18:16:59 +0100 Subject: [PATCH 08/13] moved code to ScreenList class --- openlp.pyw | 46 +----------------- openlp/core/ui/screen.py | 102 +++++++++++++++++++++++++++------------ 2 files changed, 72 insertions(+), 76 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index c88d6a3ee..02b1d9f73 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -24,7 +24,6 @@ # with this program; if not, write to the Free Software Foundation, Inc., 59 # # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### -import copy import os import sys import logging @@ -166,10 +165,6 @@ class OpenLP(QtGui.QApplication): QtCore.SIGNAL(u'cursor_busy'), self.setBusyCursor) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'cursor_normal'), self.setNormalCursor) - QtCore.QObject.connect(self.desktop(), - QtCore.SIGNAL(u'screenCountChanged(int)'), self.updateScreenList) - QtCore.QObject.connect(self.desktop(), - QtCore.SIGNAL(u'resized(int)'), self.updateScreenList) self.setOrganizationName(u'OpenLP') self.setOrganizationDomain(u'openlp.org') self.setApplicationName(u'OpenLP') @@ -183,13 +178,11 @@ class OpenLP(QtGui.QApplication): self.splash.show() # make sure Qt really display the splash screen self.processEvents() - self.screens = ScreenList() # Decide how many screens we have and their size - self.updateScreenList() + screens = ScreenList(self, self.desktop()) # start the main app window self.appClipboard = self.clipboard() - self.mainWindow = MainWindow( - self.screens, app_version, self.appClipboard) + self.mainWindow = MainWindow(screens, app_version, self.appClipboard) self.mainWindow.show() if show_splash: # now kill the splashscreen @@ -225,41 +218,6 @@ class OpenLP(QtGui.QApplication): """ self.restoreOverrideCursor() - def updateScreenList(self, count=-1): - """ - Called when the list of screens has to be updated. - - ``count`` - The screen's number which has been (un)plugged - """ - for screen in copy.deepcopy(self.screens.screen_list): - # Remove unplugged screens. - if screen[u'number'] == self.desktop().numScreens(): - self.screens.remove_screen(screen[u'number']) - else: - # Check if the screen has changed. - temp_screen = { - u'number': screen[u'number'], - u'size': self.desktop().screenGeometry(screen[u'number']), - u'primary': - (self.desktop().primaryScreen() == screen[u'number']) - } - if temp_screen != screen: - self.screens.update_screen(temp_screen) - # Add new screens. - for number in xrange(0, self.desktop().numScreens()): - if not self.screens.screen_exists(number): - self.screens.add_screen({ - u'number': number, - u'size': self.desktop().screenGeometry(number), - u'primary': (self.desktop().primaryScreen() == number) - }) - if count != -1: - # Reload setting tabs to apply possible changes. - self.mainWindow.settingsForm.reload() - Receiver.send_message(u'config_screen_changed') - # TODO: Make the new (second) monitor the live display. - def main(): """ The main function which parses command line options and then runs diff --git a/openlp/core/ui/screen.py b/openlp/core/ui/screen.py index df04a40d6..1007ecc56 100644 --- a/openlp/core/ui/screen.py +++ b/openlp/core/ui/screen.py @@ -30,6 +30,10 @@ displays. import logging import copy +from PyQt4 import QtCore + +from openlp.core.lib import Receiver + log = logging.getLogger(__name__) class ScreenList(object): @@ -38,7 +42,11 @@ class ScreenList(object): """ log.info(u'Screen loaded') - def __init__(self): + def __init__(self, parent, desktop): + """ + """ + self.parent = parent + self.desktop = desktop # The screen used for the rendermanager. # (Why does the rendermanager needs his own?) self.preview = None @@ -50,6 +58,62 @@ class ScreenList(object): self.current_display = 0 # save config display number self.monitor_number = 0 + self.screenCountChanged() + QtCore.QObject.connect(desktop, + QtCore.SIGNAL(u'resized(int)'), self.screenResolutionChanged) + QtCore.QObject.connect(desktop, + QtCore.SIGNAL(u'screenCountChanged(int)'), self.screenCountChanged) + + def screenResolutionChanged(self, number): + """ + Called when the resolution of a screen has changed. + + ``number`` + The number of the screen, which size has changed. + """ + log.info(u'screenResolutionChanged %d' % number) + for screen in self.screen_list: + if number == screen[u'number']: + newScreen = { + u'number': number, + u'size': self.desktop.screenGeometry(number), + u'primary': (self.desktop.primaryScreen() == number) + } + self.remove_screen(number) + self.add_screen(newScreen) + # The screen's default size is used, that is why we have to + # update the override screen. + if screen == self.override: + self.override = copy.deepcopy(newScreen) + self.set_override_display() + self.parent.mainWindow.settingsForm.reload() + Receiver.send_message(u'config_screen_changed') + break + + def screenCountChanged(self, count=-1): + """ + Called when a screen has been added or removed. + + ``count`` + The screen's number which has been (un)plugged. + """ + # Remove unplugged screens. + for screen in copy.deepcopy(self.screen_list): + if screen[u'number'] == self.desktop.numScreens(): + self.remove_screen(screen[u'number']) + # Add new screens. + for number in xrange(0, self.desktop.numScreens()): + if not self.screen_exists(number): + self.add_screen({ + u'number': number, + u'size': self.desktop.screenGeometry(number), + u'primary': (self.desktop.primaryScreen() == number) + }) + if count != -1: + # Reload setting tabs to apply possible changes. + self.parent.mainWindow.settingsForm.reload() + Receiver.send_message(u'config_screen_changed') + # TODO: Make the new (second) monitor the live display. def add_screen(self, screen): """ @@ -58,11 +122,11 @@ class ScreenList(object): ``screen`` A dict with the screen properties:: - { - u'primary': True, - u'number': 0, - u'size': PyQt4.QtCore.QRect(0, 0, 1024, 768) - } + { + u'primary': True, + u'number': 0, + u'size': PyQt4.QtCore.QRect(0, 0, 1024, 768) + } """ log.info(u'Screen %d found with resolution %s', screen[u'number'], screen[u'size']) @@ -71,32 +135,6 @@ class ScreenList(object): self.screen_list.append(screen) self.display_count += 1 - def update_screen(self, newScreen): - """ - Adjusts the screen's properties in the ``screen_list`` to the properties - of the given screen. - - ``newScreen`` - A dict with the new properties of the screen:: - - { - u'primary': True, - u'number': 0, - u'size': PyQt4.QtCore.QRect(0, 0, 1024, 768) - } - """ - log.info(u'update_screen %d' % newScreen[u'number']) - for oldScreen in self.screen_list: - if newScreen[u'number'] == oldScreen[u'number']: - self.remove_screen(oldScreen[u'number']) - self.add_screen(newScreen) - # The screen's default size is used, that is why we have to - # update the override screen. - if oldScreen == self.override: - self.override = copy.deepcopy(newScreen) - self.set_override_display() - break - def remove_screen(self, number): """ Remove a screen from the list of known screens. From 1ec23f00ff5572cb9b4a74a7d050ff0d88ab719e Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 2 Mar 2011 18:44:01 +0100 Subject: [PATCH 09/13] added method to get list of screens, clean ups --- openlp/core/ui/generaltab.py | 12 +++++------ openlp/core/ui/screen.py | 39 ++++++++++++++++++++++++---------- openlp/core/ui/settingsform.py | 8 ------- 3 files changed, 33 insertions(+), 26 deletions(-) diff --git a/openlp/core/ui/generaltab.py b/openlp/core/ui/generaltab.py index 777302a41..d1c54d97d 100644 --- a/openlp/core/ui/generaltab.py +++ b/openlp/core/ui/generaltab.py @@ -234,6 +234,9 @@ class GeneralTab(SettingsTab): QtCore.QObject.connect(self.customXValueEdit, QtCore.SIGNAL(u'textEdited(const QString&)'), self.onDisplayPositionChanged) + # Reload the tab, as the screen resolution/count may has changed. + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'config_screen_changed'), self.load) def retranslateUi(self): """ @@ -301,13 +304,8 @@ class GeneralTab(SettingsTab): settings = QtCore.QSettings() settings.beginGroup(self.settingsSection) self.monitorComboBox.clear() - for screen in self.screens.screen_list: - screen_name = u'%s %d' % (translate('OpenLP.GeneralTab', 'Screen'), - screen[u'number'] + 1) - if screen[u'primary']: - screen_name = u'%s (%s)' % (screen_name, - translate('OpenLP.GeneralTab', 'primary')) - self.monitorComboBox.addItem(screen_name) + for screen in self.screens.get_screen_list(): + self.monitorComboBox.addItem(screen) self.numberEdit.setText(unicode(settings.value( u'ccli number', QtCore.QVariant(u'')).toString())) self.usernameEdit.setText(unicode(settings.value( diff --git a/openlp/core/ui/screen.py b/openlp/core/ui/screen.py index 1007ecc56..09bb1d8f2 100644 --- a/openlp/core/ui/screen.py +++ b/openlp/core/ui/screen.py @@ -32,7 +32,7 @@ import copy from PyQt4 import QtCore -from openlp.core.lib import Receiver +from openlp.core.lib import Receiver, translate log = logging.getLogger(__name__) @@ -58,13 +58,14 @@ class ScreenList(object): self.current_display = 0 # save config display number self.monitor_number = 0 - self.screenCountChanged() + self.screen_count_changed() QtCore.QObject.connect(desktop, - QtCore.SIGNAL(u'resized(int)'), self.screenResolutionChanged) + QtCore.SIGNAL(u'resized(int)'), self.screen_resolution_changed) QtCore.QObject.connect(desktop, - QtCore.SIGNAL(u'screenCountChanged(int)'), self.screenCountChanged) + QtCore.SIGNAL(u'screenCountChanged(int)'), + self.screen_count_changed) - def screenResolutionChanged(self, number): + def screen_resolution_changed(self, number): """ Called when the resolution of a screen has changed. @@ -86,15 +87,14 @@ class ScreenList(object): if screen == self.override: self.override = copy.deepcopy(newScreen) self.set_override_display() - self.parent.mainWindow.settingsForm.reload() Receiver.send_message(u'config_screen_changed') break - def screenCountChanged(self, count=-1): + def screen_count_changed(self, changed_screen=-1): """ Called when a screen has been added or removed. - ``count`` + ``changed_screen`` The screen's number which has been (un)plugged. """ # Remove unplugged screens. @@ -109,11 +109,28 @@ class ScreenList(object): u'size': self.desktop.screenGeometry(number), u'primary': (self.desktop.primaryScreen() == number) }) - if count != -1: + # We do not want to send this message, when the method is called the + # first time. + if changed_screen != -1: # Reload setting tabs to apply possible changes. - self.parent.mainWindow.settingsForm.reload() Receiver.send_message(u'config_screen_changed') - # TODO: Make the new (second) monitor the live display. + + def get_screen_list(self): + """ + Returns a list with the screens. This should only be used to display + available screens to the user:: + + [u'Screen 1 (primary)', Screen 2'] + """ + screen_list= [] + for screen in self.screen_list: + screen_name = u'%s %d' % (translate('OpenLP.ScreenList', 'Screen'), + screen[u'number'] + 1) + if screen[u'primary']: + screen_name = u'%s (%s)' % (screen_name, + translate('OpenLP.ScreenList', 'primary')) + screen_list.append(screen_name) + return screen_list def add_screen(self, screen): """ diff --git a/openlp/core/ui/settingsform.py b/openlp/core/ui/settingsform.py index 0c058cfd0..872b37586 100644 --- a/openlp/core/ui/settingsform.py +++ b/openlp/core/ui/settingsform.py @@ -107,11 +107,3 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog): """ for tabIndex in range(0, self.settingsTabWidget.count()): self.settingsTabWidget.widget(tabIndex).postSetUp() - - def reload(self): - """ - Reload all tabs to update settings which have been changed and are - outside of our scope. - """ - for tabIndex in range(0, self.settingsTabWidget.count()): - self.settingsTabWidget.widget(tabIndex).load() From 6da5cdfb2eb683cb856f115d778f24ac0ded6c72 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 2 Mar 2011 18:56:06 +0100 Subject: [PATCH 10/13] removed not needed parameter --- openlp.pyw | 2 +- openlp/core/ui/screen.py | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index 02b1d9f73..7cc4d6d15 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -179,7 +179,7 @@ class OpenLP(QtGui.QApplication): # make sure Qt really display the splash screen self.processEvents() # Decide how many screens we have and their size - screens = ScreenList(self, self.desktop()) + screens = ScreenList(self.desktop()) # start the main app window self.appClipboard = self.clipboard() self.mainWindow = MainWindow(screens, app_version, self.appClipboard) diff --git a/openlp/core/ui/screen.py b/openlp/core/ui/screen.py index 09bb1d8f2..74c94a4e4 100644 --- a/openlp/core/ui/screen.py +++ b/openlp/core/ui/screen.py @@ -42,13 +42,14 @@ class ScreenList(object): """ log.info(u'Screen loaded') - def __init__(self, parent, desktop): + def __init__(self, desktop): """ + Initialise the screen list. + + ``desktop`` + A ``QDesktopWidget`` object. """ - self.parent = parent self.desktop = desktop - # The screen used for the rendermanager. - # (Why does the rendermanager needs his own?) self.preview = None self.current = None self.override = None From 58e91aec7e106cb9a89cfced4e94cc46ee101aac Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 2 Mar 2011 18:58:17 +0100 Subject: [PATCH 11/13] removed white space --- openlp/core/ui/screen.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/screen.py b/openlp/core/ui/screen.py index 74c94a4e4..9efae427f 100644 --- a/openlp/core/ui/screen.py +++ b/openlp/core/ui/screen.py @@ -79,7 +79,7 @@ class ScreenList(object): newScreen = { u'number': number, u'size': self.desktop.screenGeometry(number), - u'primary': (self.desktop.primaryScreen() == number) + u'primary': self.desktop.primaryScreen() == number } self.remove_screen(number) self.add_screen(newScreen) From aba791e46aa5a2f3bceed0f4f78b2c74a989d85f Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 2 Mar 2011 19:07:07 +0100 Subject: [PATCH 12/13] fixed doc --- openlp/core/ui/screen.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/screen.py b/openlp/core/ui/screen.py index 9efae427f..9f8191961 100644 --- a/openlp/core/ui/screen.py +++ b/openlp/core/ui/screen.py @@ -121,7 +121,7 @@ class ScreenList(object): Returns a list with the screens. This should only be used to display available screens to the user:: - [u'Screen 1 (primary)', Screen 2'] + [u'Screen 1 (primary)', u'Screen 2'] """ screen_list= [] for screen in self.screen_list: From 0ea0c9bf601bb8819720eaed6a3ed71e91ee6f5f Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Thu, 3 Mar 2011 19:28:41 +0100 Subject: [PATCH 13/13] fix for merge --- 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 d1c54d97d..e705d5ec3 100644 --- a/openlp/core/ui/generaltab.py +++ b/openlp/core/ui/generaltab.py @@ -234,7 +234,7 @@ class GeneralTab(SettingsTab): QtCore.QObject.connect(self.customXValueEdit, QtCore.SIGNAL(u'textEdited(const QString&)'), self.onDisplayPositionChanged) - # Reload the tab, as the screen resolution/count may has changed. + # 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)