- make start up smoother by setting up the displays correct the first time

- do not pass screens as argument
This commit is contained in:
Andreas Preikschat 2011-05-04 19:31:02 +02:00
parent 2df3de81f2
commit cbd7ae2afc
11 changed files with 77 additions and 63 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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):

View File

@ -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

View File

@ -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
self.overrideChanged = True

View File

@ -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

View File

@ -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')

View File

@ -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()

View File

@ -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

View File

@ -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()