Refactored ScreenList into a true Pythonic singleton, though I sadly had to go with a "create" classmethod in order to retain the functionality of the previous constructor..

This commit is contained in:
Raoul Snyman 2012-05-20 22:56:11 +02:00
parent ca3e0c03f3
commit 1c57abf8ab
9 changed files with 32 additions and 28 deletions

View File

@ -109,7 +109,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.create(self.desktop())
# First time checks in settings
has_run_wizard = QtCore.QSettings().value(
u'general/has run wizard', QtCore.QVariant(False)).toBool()

View File

@ -52,7 +52,7 @@ class OpenLPDockWidget(QtGui.QDockWidget):
if icon:
self.setWindowIcon(build_icon(icon))
# Sort out the minimum width.
screens = ScreenList.get_instance()
screens = ScreenList()
mainwindow_docbars = screens.current[u'size'].width() / 5
if mainwindow_docbars > 300:
self.setMinimumWidth(300)

View File

@ -163,7 +163,7 @@ class ImageManager(QtCore.QObject):
def __init__(self):
QtCore.QObject.__init__(self)
current_screen = ScreenList.get_instance().current
current_screen = ScreenList().current
self.width = current_screen[u'size'].width()
self.height = current_screen[u'size'].height()
self._cache = {}
@ -177,7 +177,7 @@ class ImageManager(QtCore.QObject):
Screen has changed size so rebuild the cache to new size.
"""
log.debug(u'update_display')
current_screen = ScreenList.get_instance().current
current_screen = ScreenList().current
self.width = current_screen[u'size'].width()
self.height = current_screen[u'size'].height()
# Mark the images as dirty for a rebuild by setting the image and byte

View File

@ -69,7 +69,7 @@ class Renderer(object):
log.debug(u'Initialisation started')
self.themeManager = themeManager
self.imageManager = imageManager
self.screens = ScreenList.get_instance()
self.screens = ScreenList()
self.service_theme = u''
self.theme_level = u''
self.override_background = None

View File

@ -42,7 +42,7 @@ class GeneralTab(SettingsTab):
"""
Initialise the general settings tab
"""
self.screens = ScreenList.get_instance()
self.screens = ScreenList()
self.iconPath = u':/icon/openlp-logo-16x16.png'
generalTranslated = translate('OpenLP.GeneralTab', 'General')
SettingsTab.__init__(self, parent, u'General', generalTranslated)

View File

@ -119,7 +119,7 @@ class MainDisplay(Display):
def __init__(self, parent, imageManager, live, controller):
Display.__init__(self, parent, live, controller)
self.imageManager = imageManager
self.screens = ScreenList.get_instance()
self.screens = ScreenList()
self.plugins = PluginManager.get_instance().plugins
self.rebuildCSS = False
self.hideMode = None

View File

@ -795,7 +795,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
if answer == QtGui.QMessageBox.No:
return
Receiver.send_message(u'cursor_busy')
screens = ScreenList.get_instance()
screens = ScreenList()
FirstTimeForm(screens, self).exec_()
self.firstTime()
for plugin in self.pluginManager.plugins:

View File

@ -41,36 +41,40 @@ class ScreenList(object):
"""
Wrapper to handle the parameters of the display screen.
To get access to the screen list call ``ScreenList.get_instance()``.
To get access to the screen list call ``ScreenList()``.
"""
log.info(u'Screen loaded')
instance = None
__instance__ = None
@staticmethod
def get_instance():
return ScreenList.instance
def __new__(cls):
if not cls.__instance__:
cls.__instance__ = object.__new__(cls)
return cls.__instance__
def __init__(self, desktop):
@classmethod
def create(cls, desktop):
"""
Initialise the screen list.
``desktop``
A ``QDesktopWidget`` object.
"""
ScreenList.instance = self
self.desktop = desktop
self.preview = None
self.current = None
self.override = None
self.screen_list = []
self.display_count = 0
self.screen_count_changed()
self._load_screen_settings()
screen_list = cls()
screen_list.desktop = desktop
screen_list.preview = None
screen_list.current = None
screen_list.override = None
screen_list.screen_list = []
screen_list.display_count = 0
screen_list.screen_count_changed()
screen_list._load_screen_settings()
QtCore.QObject.connect(desktop,
QtCore.SIGNAL(u'resized(int)'), self.screen_resolution_changed)
QtCore.SIGNAL(u'resized(int)'),
screen_list.screen_resolution_changed)
QtCore.QObject.connect(desktop,
QtCore.SIGNAL(u'screenCountChanged(int)'),
self.screen_count_changed)
screen_list.screen_count_changed)
return screen_list
def screen_resolution_changed(self, number):
"""
@ -233,8 +237,8 @@ class ScreenList(object):
y = window.y() + (window.height() / 2)
for screen in self.screen_list:
size = screen[u'size']
if x >= size.x() and x <= (size.x() + size.width()) \
and y >= size.y() and y <= (size.y() + size.height()):
if x >= size.x() and x <= (size.x() + size.width()) and \
y >= size.y() and y <= (size.y() + size.height()):
return screen[u'number']
def _load_screen_settings(self):

View File

@ -83,7 +83,7 @@ class SlideController(Controller):
Set up the Slide Controller.
"""
Controller.__init__(self, parent, isLive)
self.screens = ScreenList.get_instance()
self.screens = ScreenList()
try:
self.ratio = float(self.screens.current[u'size'].width()) / \
float(self.screens.current[u'size'].height())