This commit is contained in:
Jonathan Corwin 2010-04-20 23:12:04 +01:00
commit 40e6289102
15 changed files with 533 additions and 485 deletions

View File

@ -115,6 +115,9 @@ class EventReceiver(QtCore.QObject):
``version_check`` ``version_check``
Version has changed so pop up window. Version has changed so pop up window.
``mainDisplay_active``
Version has changed so pop up window.
""" """
def __init__(self): def __init__(self):
""" """

View File

@ -29,6 +29,7 @@ from serviceitemeditform import ServiceItemEditForm
from screen import ScreenList from screen import ScreenList
from maindisplay import MainDisplay from maindisplay import MainDisplay
from maindisplay import VideoDisplay from maindisplay import VideoDisplay
from maindisplay import DisplayManager
from amendthemeform import AmendThemeForm from amendthemeform import AmendThemeForm
from slidecontroller import SlideController from slidecontroller import SlideController
from splashscreen import SplashScreen from splashscreen import SplashScreen

View File

@ -34,6 +34,28 @@ from openlp.core.ui import HideMode
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
class DisplayManager(QtGui.QWidget):
"""
Wrapper class to hold the display widgets.
I will provide API's in future to access the screens allow for
extra displays to be added.
"""
def __init__(self, screens):
QtGui.QWidget.__init__(self)
self.screens = screens
self.videoDisplay = VideoDisplay(self, screens)
self.mainDisplay = MainDisplay(self, screens)
def setup(self):
self.videoDisplay.setup()
self.mainDisplay.setup()
def close(self):
self.videoDisplay.close()
self.mainDisplay.close()
class DisplayWidget(QtGui.QWidget): class DisplayWidget(QtGui.QWidget):
""" """
Customised version of QTableWidget which can respond to keyboard Customised version of QTableWidget which can respond to keyboard
@ -42,7 +64,7 @@ class DisplayWidget(QtGui.QWidget):
log.info(u'MainDisplay loaded') log.info(u'MainDisplay loaded')
def __init__(self, parent=None, name=None): def __init__(self, parent=None, name=None):
QtGui.QWidget.__init__(self, parent) QtGui.QWidget.__init__(self, None)
self.parent = parent self.parent = parent
self.hotkey_map = { self.hotkey_map = {
QtCore.Qt.Key_Return: 'servicemanager_next_item', QtCore.Qt.Key_Return: 'servicemanager_next_item',
@ -93,11 +115,10 @@ class MainDisplay(DisplayWidget):
The list of screens. The list of screens.
""" """
log.debug(u'Initialisation started') log.debug(u'Initialisation started')
DisplayWidget.__init__(self, None) DisplayWidget.__init__(self, parent)
self.parent = parent self.parent = parent
self.setWindowTitle(u'OpenLP Display') self.setWindowTitle(u'OpenLP Display')
self.setAttribute(QtCore.Qt.WA_TranslucentBackground) self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
self.screens = screens self.screens = screens
self.display_image = QtGui.QLabel(self) self.display_image = QtGui.QLabel(self)
self.display_image.setScaledContents(True) self.display_image.setScaledContents(True)
@ -117,7 +138,7 @@ class MainDisplay(DisplayWidget):
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'maindisplay_show'), self.showDisplay) QtCore.SIGNAL(u'maindisplay_show'), self.showDisplay)
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'slidecontroller_live_mediastart'), self.onMediaQueue) QtCore.SIGNAL(u'slidecontroller_live_mediastart'), self.hideDisplay)
def setup(self): def setup(self):
""" """
@ -185,6 +206,13 @@ class MainDisplay(DisplayWidget):
self.display_image.setPixmap(self.transparent) self.display_image.setPixmap(self.transparent)
self.display_alert.setPixmap(self.transparent) self.display_alert.setPixmap(self.transparent)
self.display_text.setPixmap(self.transparent) self.display_text.setPixmap(self.transparent)
self.moveToTop()
def moveToTop(self):
log.debug(u'moveToTop')
self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint \
| QtCore.Qt.FramelessWindowHint | QtCore.Qt.Dialog)
self.show()
def showDisplay(self): def showDisplay(self):
log.debug(u'showDisplay') log.debug(u'showDisplay')
@ -199,6 +227,7 @@ class MainDisplay(DisplayWidget):
self.screen[u'size'].width(), self.screen[u'size'].width(),
self.screen[u'size'].height() ) self.screen[u'size'].height() )
self.display_image.setPixmap(QtGui.QPixmap.fromImage(frame)) self.display_image.setPixmap(QtGui.QPixmap.fromImage(frame))
self.moveToTop()
def setAlertSize(self, top, height): def setAlertSize(self, top, height):
log.debug(u'setAlertSize') log.debug(u'setAlertSize')
@ -212,6 +241,7 @@ class MainDisplay(DisplayWidget):
self.display_alert.setPixmap(self.transparent) self.display_alert.setPixmap(self.transparent)
else: else:
self.display_alert.setPixmap(frame) self.display_alert.setPixmap(frame)
self.moveToTop()
def frameView(self, frame, transition=False): def frameView(self, frame, transition=False):
""" """
@ -267,60 +297,14 @@ class MainDisplay(DisplayWidget):
elif self.display_frame: elif self.display_frame:
self.frameView(self.display_frame) self.frameView(self.display_frame)
def onMediaQueue(self, message): class VideoDisplay(Phonon.VideoWidget):
log.debug(u'Queue new media message %s' % message)
self.hideDisplay()
self.activateWindow()
class VideoWidget(QtGui.QWidget):
"""
Customised version of QTableWidget which can respond to keyboard
events.
"""
log.info(u'MainDisplay loaded')
def __init__(self, parent=None, name=None):
QtGui.QWidget.__init__(self, None)
self.parent = parent
self.hotkey_map = {
QtCore.Qt.Key_Return: 'servicemanager_next_item',
QtCore.Qt.Key_Space: 'slidecontroller_live_go_next_noloop',
QtCore.Qt.Key_Enter: 'slidecontroller_live_go_next_noloop',
QtCore.Qt.Key_0: 'servicemanager_next_item',
QtCore.Qt.Key_Backspace: 'slidecontroller_live_go_previous_noloop'}
def keyPressEvent(self, event):
if type(event) == QtGui.QKeyEvent:
#here accept the event and do something
if event.key() == QtCore.Qt.Key_Up:
Receiver.send_message(u'slidecontroller_live_go_previous')
event.accept()
elif event.key() == QtCore.Qt.Key_Down:
Receiver.send_message(u'slidecontroller_live_go_next')
event.accept()
elif event.key() == QtCore.Qt.Key_PageUp:
Receiver.send_message(u'slidecontroller_live_go_first')
event.accept()
elif event.key() == QtCore.Qt.Key_PageDown:
Receiver.send_message(u'slidecontroller_live_go_last')
event.accept()
elif event.key() in self.hotkey_map:
Receiver.send_message(self.hotkey_map[event.key()])
event.accept()
elif event.key() == QtCore.Qt.Key_Escape:
self.resetDisplay()
event.accept()
event.ignore()
else:
event.ignore()
class VideoDisplay(VideoWidget):
""" """
This is the form that is used to display videos on the projector. This is the form that is used to display videos on the projector.
""" """
log.info(u'VideoDisplay Loaded') log.info(u'VideoDisplay Loaded')
def __init__(self, parent, screens): def __init__(self, parent, screens,
aspect=Phonon.VideoWidget.AspectRatioWidget):
""" """
The constructor for the display form. The constructor for the display form.
@ -331,19 +315,15 @@ class VideoDisplay(VideoWidget):
The list of screens. The list of screens.
""" """
log.debug(u'VideoDisplay Initialisation started') log.debug(u'VideoDisplay Initialisation started')
VideoWidget.__init__(self, parent) Phonon.VideoWidget.__init__(self)
self.setWindowTitle(u'OpenLP Video Display') self.setWindowTitle(u'OpenLP Video Display')
self.parent = parent self.parent = parent
self.screens = screens self.screens = screens
self.setAttribute(QtCore.Qt.WA_TranslucentBackground) self.mediaObject = Phonon.MediaObject()
self.setWindowFlags(QtCore.Qt.FramelessWindowHint) self.setAspectRatio(aspect)
self.mediaObject = Phonon.MediaObject(self) self.audioObject = Phonon.AudioOutput(Phonon.VideoCategory)
self.video = Phonon.VideoWidget() Phonon.createPath(self.mediaObject, self)
self.video.setVisible(False) Phonon.createPath(self.mediaObject, self.audioObject)
self.audio = Phonon.AudioOutput(Phonon.VideoCategory, self.mediaObject)
Phonon.createPath(self.mediaObject, self.video)
Phonon.createPath(self.mediaObject, self.audio)
self.firstTime = True
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'slidecontroller_media_start'), self.onMediaQueue) QtCore.SIGNAL(u'slidecontroller_media_start'), self.onMediaQueue)
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.QObject.connect(Receiver.get_receiver(),
@ -355,6 +335,16 @@ class VideoDisplay(VideoWidget):
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'config_updated'), self.setup) QtCore.SIGNAL(u'config_updated'), self.setup)
def keyPressEvent(self, event):
if type(event) == QtGui.QKeyEvent:
#here accept the event and do something
if event.key() == QtCore.Qt.Key_Escape:
self.onMediaStop()
event.accept()
event.ignore()
else:
event.ignore()
def setup(self): def setup(self):
""" """
Sets up the screen on a particular screen. Sets up the screen on a particular screen.
@ -365,7 +355,13 @@ class VideoDisplay(VideoWidget):
self.screen = self.screens.current self.screen = self.screens.current
#Sort out screen locations and sizes #Sort out screen locations and sizes
self.setGeometry(self.screen[u'size']) self.setGeometry(self.screen[u'size'])
self.video.setGeometry(self.screen[u'size']) # To display or not to display?
if not self.screen[u'primary']:
self.showFullScreen()
self.primary = False
else:
self.setVisible(False)
self.primary = True
def onMediaQueue(self, message): def onMediaQueue(self, message):
if not message[1]: if not message[1]:
@ -373,29 +369,24 @@ class VideoDisplay(VideoWidget):
log.debug(u'VideoDisplay Queue new media message %s' % message) log.debug(u'VideoDisplay Queue new media message %s' % message)
file = os.path.join(message[0].get_frame_path(), file = os.path.join(message[0].get_frame_path(),
message[0].get_frame_title()) message[0].get_frame_title())
if self.firstTime: #file = os.path.join(message[1], message[2])
source = self.mediaObject.setCurrentSource(Phonon.MediaSource(file)) source = self.mediaObject.setCurrentSource(Phonon.MediaSource(file))
self.firstTime = False
else:
self.mediaObject.enqueue(Phonon.MediaSource(file))
self.onMediaPlay() self.onMediaPlay()
def onMediaPlay(self): def onMediaPlay(self):
if not message[1]: if not message[1]:
return return
log.debug(u'VideoDisplay Play the new media, Live ') log.debug(u'VideoDisplay Play the new media, Live ')
self.firstTime = True
self.setWindowState(QtCore.Qt.WindowMinimized)
self.video.setFullScreen(True)
self.mediaObject.play() self.mediaObject.play()
self.setVisible(True) self.setVisible(True)
self.lower() self.showFullScreen()
def onMediaPause(self): def onMediaPause(self):
if not message[1]: if not message[1]:
return return
log.debug(u'VideoDisplay Media paused by user') log.debug(u'VideoDisplay Media paused by user')
self.mediaObject.pause() self.mediaObject.pause()
self.show()
def onMediaStop(self): def onMediaStop(self):
if not message[1]: if not message[1]:
@ -408,7 +399,5 @@ class VideoDisplay(VideoWidget):
if not message[1]: if not message[1]:
return return
log.debug(u'VideoDisplay Reached end of media playlist') log.debug(u'VideoDisplay Reached end of media playlist')
self.mediaObject.stop()
self.mediaObject.clearQueue() self.mediaObject.clearQueue()
self.video.setVisible(False)
self.setVisible(False) self.setVisible(False)

View File

@ -29,8 +29,8 @@ import time
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from openlp.core.ui import AboutForm, SettingsForm, \ from openlp.core.ui import AboutForm, SettingsForm, \
ServiceManager, ThemeManager, MainDisplay, SlideController, \ ServiceManager, ThemeManager, SlideController, \
PluginForm, MediaDockManager, VideoDisplay PluginForm, MediaDockManager, DisplayManager
from openlp.core.lib import RenderManager, PluginConfig, build_icon, \ from openlp.core.lib import RenderManager, PluginConfig, build_icon, \
OpenLPDockWidget, SettingsManager, PluginManager, Receiver, str_to_bool OpenLPDockWidget, SettingsManager, PluginManager, Receiver, str_to_bool
from openlp.core.utils import check_latest_version, AppLocation from openlp.core.utils import check_latest_version, AppLocation
@ -74,7 +74,6 @@ class VersionThread(QtCore.QThread):
if version != self.app_version[u'full']: if version != self.app_version[u'full']:
Receiver.send_message(u'openlp_version_check', u'%s' % version) Receiver.send_message(u'openlp_version_check', u'%s' % version)
class Ui_MainWindow(object): class Ui_MainWindow(object):
def setupUi(self, MainWindow): def setupUi(self, MainWindow):
""" """
@ -443,8 +442,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
self.serviceNotSaved = False self.serviceNotSaved = False
self.settingsmanager = SettingsManager(screens) self.settingsmanager = SettingsManager(screens)
self.generalConfig = PluginConfig(u'General') self.generalConfig = PluginConfig(u'General')
self.videoDisplay = VideoDisplay(self, screens) self.displayManager = DisplayManager(screens)
self.mainDisplay = MainDisplay(self, screens)
self.aboutForm = AboutForm(self, applicationVersion) self.aboutForm = AboutForm(self, applicationVersion)
self.settingsForm = SettingsForm(self.screens, self, self) self.settingsForm = SettingsForm(self.screens, self, self)
# Set up the path with plugins # Set up the path with plugins
@ -499,6 +497,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
QtCore.SIGNAL(u'maindisplay_blank_check'), self.blankCheck) QtCore.SIGNAL(u'maindisplay_blank_check'), self.blankCheck)
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'config_screen_changed'), self.screenChanged) QtCore.SIGNAL(u'config_screen_changed'), self.screenChanged)
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'status_message'), self.showStatusMessage)
QtCore.QObject.connect(self.FileNewItem, QtCore.QObject.connect(self.FileNewItem,
QtCore.SIGNAL(u'triggered()'), QtCore.SIGNAL(u'triggered()'),
self.ServiceManagerContents.onNewService) self.ServiceManagerContents.onNewService)
@ -526,7 +526,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
self.plugin_helpers[u'service'] = self.ServiceManagerContents self.plugin_helpers[u'service'] = self.ServiceManagerContents
self.plugin_helpers[u'settings'] = self.settingsForm self.plugin_helpers[u'settings'] = self.settingsForm
self.plugin_helpers[u'toolbox'] = self.mediaDockManager self.plugin_helpers[u'toolbox'] = self.mediaDockManager
self.plugin_helpers[u'maindisplay'] = self.mainDisplay self.plugin_helpers[u'maindisplay'] = self.displayManager.mainDisplay
self.plugin_manager.find_plugins(pluginpath, self.plugin_helpers) self.plugin_manager.find_plugins(pluginpath, self.plugin_helpers)
# hook methods have to happen after find_plugins. Find plugins needs # hook methods have to happen after find_plugins. Find plugins needs
# the controllers hence the hooks have moved from setupUI() to here # the controllers hence the hooks have moved from setupUI() to here
@ -555,6 +555,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
def versionCheck(self, version): def versionCheck(self, version):
""" """
Checks the version of the Application called from openlp.pyw Checks the version of the Application called from openlp.pyw
Triggered by delay thread.
""" """
app_version = self.applicationVersion[u'full'] app_version = self.applicationVersion[u'full']
version_text = unicode(self.trUtf8('Version %s of OpenLP is now ' version_text = unicode(self.trUtf8('Version %s of OpenLP is now '
@ -572,17 +573,18 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
""" """
self.showMaximized() self.showMaximized()
#screen_number = self.getMonitorNumber() #screen_number = self.getMonitorNumber()
self.mainDisplay.setup() self.displayManager.setup()
self.videoDisplay.setup() if self.displayManager.mainDisplay.isVisible():
if self.mainDisplay.isVisible(): self.displayManager.mainDisplay.setFocus()
self.mainDisplay.setFocus()
self.activateWindow() self.activateWindow()
if str_to_bool(self.generalConfig.get_config(u'auto open', False)): if str_to_bool(self.generalConfig.get_config(u'auto open', False)):
self.ServiceManagerContents.onLoadService(True) self.ServiceManagerContents.onLoadService(True)
self.videoDisplay.lower()
self.mainDisplay.raise_()
def blankCheck(self): def blankCheck(self):
"""
Check and display message if screen blank on setup.
Triggered by delay thread.
"""
if str_to_bool(self.generalConfig.get_config(u'screen blank', False)) \ if str_to_bool(self.generalConfig.get_config(u'screen blank', False)) \
and str_to_bool(self.generalConfig.get_config(u'blank warning', False)): and str_to_bool(self.generalConfig.get_config(u'blank warning', False)):
self.LiveController.onBlankDisplay(True) self.LiveController.onBlankDisplay(True)
@ -593,6 +595,9 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
QtGui.QMessageBox.Ok) QtGui.QMessageBox.Ok)
def versionThread(self): def versionThread(self):
"""
Start an initial setup thread to delay notifications
"""
vT = VersionThread(self, self.applicationVersion, self.generalConfig) vT = VersionThread(self, self.applicationVersion, self.generalConfig)
vT.start() vT.start()
@ -617,8 +622,13 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
self.settingsForm.exec_() self.settingsForm.exec_()
def screenChanged(self): def screenChanged(self):
"""
The screen has changed to so tell the displays to update_display
their locations
"""
self.RenderManager.update_display() self.RenderManager.update_display()
self.mainDisplay.setup() self.displayManager.setup()
self.setFocus()
self.activateWindow() self.activateWindow()
def closeEvent(self, event): def closeEvent(self, event):
@ -636,20 +646,14 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
QtGui.QMessageBox.Save) QtGui.QMessageBox.Save)
if ret == QtGui.QMessageBox.Save: if ret == QtGui.QMessageBox.Save:
self.ServiceManagerContents.onSaveService() self.ServiceManagerContents.onSaveService()
self.mainDisplay.close()
self.videoDisplay.close()
self.cleanUp() self.cleanUp()
event.accept() event.accept()
elif ret == QtGui.QMessageBox.Discard: elif ret == QtGui.QMessageBox.Discard:
self.mainDisplay.close()
self.videoDisplay.close()
self.cleanUp() self.cleanUp()
event.accept() event.accept()
else: else:
event.ignore() event.ignore()
else: else:
self.mainDisplay.close()
self.videoDisplay.close()
self.cleanUp() self.cleanUp()
event.accept() event.accept()
@ -662,10 +666,12 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
# Call the cleanup method to shutdown plugins. # Call the cleanup method to shutdown plugins.
log.info(u'cleanup plugins') log.info(u'cleanup plugins')
self.plugin_manager.finalise_plugins() self.plugin_manager.finalise_plugins()
#Close down the displays
self.displayManager.close()
def serviceChanged(self, reset=False, serviceName=None): def serviceChanged(self, reset=False, serviceName=None):
""" """
Hook to change the main window title when the service changes Hook to change the main window title when the service chmainwindow.pyanges
``reset`` ``reset``
Shows if the service has been cleared or saved Shows if the service has been cleared or saved
@ -685,6 +691,9 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
title = u'%s - %s*' % (self.mainTitle, service_name) title = u'%s - %s*' % (self.mainTitle, service_name)
self.setWindowTitle(title) self.setWindowTitle(title)
def showStatusMessage(self, message):
self.StatusBar.showMessage(message)
def defaultThemeChanged(self, theme): def defaultThemeChanged(self, theme):
self.DefaultThemeLabel.setText( self.DefaultThemeLabel.setText(
u'%s %s' % (self.defaultThemeText, theme)) u'%s %s' % (self.defaultThemeText, theme))

View File

@ -641,7 +641,7 @@ class SlideController(QtGui.QWidget):
self.SlidePreview.setPixmap(QtGui.QPixmap.fromImage(frame[u'main'])) self.SlidePreview.setPixmap(QtGui.QPixmap.fromImage(frame[u'main']))
log.log(15, u'Slide Rendering took %4s' % (time.time() - before)) log.log(15, u'Slide Rendering took %4s' % (time.time() - before))
if self.isLive: if self.isLive:
self.parent.mainDisplay.frameView(frame, True) self.parent.displayManager.mainDisplay.frameView(frame, True)
self.selectedRow = row self.selectedRow = row
def onSlideChange(self, row): def onSlideChange(self, row):

View File

@ -27,7 +27,7 @@ import logging
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from openlp.core.lib import Plugin, build_icon, PluginStatus from openlp.core.lib import Plugin, build_icon, PluginStatus, Receiver
from openlp.plugins.alerts.lib import AlertsManager, DBManager from openlp.plugins.alerts.lib import AlertsManager, DBManager
from openlp.plugins.alerts.forms import AlertsTab, AlertForm from openlp.plugins.alerts.forms import AlertsTab, AlertForm
@ -88,6 +88,7 @@ class alertsPlugin(Plugin):
def onAlertsTrigger(self): def onAlertsTrigger(self):
self.alertForm.loadList() self.alertForm.loadList()
self.alertForm.exec_() self.alertForm.exec_()
Receiver.send_message(u'text_onTop')
def about(self): def about(self):
about_text = self.trUtf8('<b>Alerts Plugin</b><br>This plugin ' about_text = self.trUtf8('<b>Alerts Plugin</b><br>This plugin '

View File

@ -1,87 +1,134 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
############################################################################### # Form implementation generated from reading ui file 'alertdialog.ui'
# OpenLP - Open Source Lyrics Projection # #
# --------------------------------------------------------------------------- # # Created: Sat Apr 17 08:07:40 2010
# Copyright (c) 2008-2010 Raoul Snyman # # by: PyQt4 UI code generator 4.7
# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # #
# Gorven, Scott Guerrieri, Christian Richter, Maikel Stuivenberg, Martin # # WARNING! All changes made in this file will be lost!
# Thompson, Jon Tibble, Carsten Tinggaard #
# --------------------------------------------------------------------------- #
# This program is free software; you can redistribute it and/or modify it #
# under the terms of the GNU General Public License as published by the Free #
# Software Foundation; version 2 of the License. #
# #
# This program is distributed in the hope that it will be useful, but WITHOUT #
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
# more details. #
# #
# You should have received a copy of the GNU General Public License along #
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
###############################################################################
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
class Ui_AlertDialog(object): class Ui_AlertDialog(object):
def setupUi(self, AlertForm): def setupUi(self, AlertDialog):
AlertForm.setObjectName(u'AlertDialog') AlertDialog.setObjectName("AlertDialog")
AlertForm.resize(430, 320) AlertDialog.resize(567, 440)
icon = QtGui.QIcon() icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(u':/icon/openlp.org-icon-32.bmp'), QtGui.QIcon.Normal, QtGui.QIcon.Off) icon.addPixmap(QtGui.QPixmap(":/icon/openlp.org-icon-32.bmp"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
AlertForm.setWindowIcon(icon) AlertDialog.setWindowIcon(icon)
self.AlertFormLayout = QtGui.QVBoxLayout(AlertForm) self.AlertFormLayout = QtGui.QVBoxLayout(AlertDialog)
self.AlertFormLayout.setSpacing(8) self.AlertFormLayout.setSpacing(8)
self.AlertFormLayout.setMargin(8) self.AlertFormLayout.setMargin(8)
self.AlertFormLayout.setObjectName(u'AlertFormLayout') self.AlertFormLayout.setObjectName("AlertFormLayout")
self.AlertEntryWidget = QtGui.QWidget(AlertForm) self.AlertTextLayout = QtGui.QFormLayout()
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred) self.AlertTextLayout.setContentsMargins(0, 0, -1, -1)
sizePolicy.setHorizontalStretch(0) self.AlertTextLayout.setSpacing(8)
sizePolicy.setVerticalStretch(0) self.AlertTextLayout.setObjectName("AlertTextLayout")
sizePolicy.setHeightForWidth(self.AlertEntryWidget.sizePolicy().hasHeightForWidth()) self.AlertEntryLabel = QtGui.QLabel(AlertDialog)
self.AlertEntryWidget.setSizePolicy(sizePolicy)
self.AlertEntryWidget.setObjectName(u'AlertEntryWidget')
self.verticalLayout_2 = QtGui.QVBoxLayout(self.AlertEntryWidget)
self.verticalLayout_2.setObjectName(u'verticalLayout_2')
self.verticalLayout = QtGui.QVBoxLayout()
self.verticalLayout.setObjectName(u'verticalLayout')
self.AlertEntryLabel = QtGui.QLabel(self.AlertEntryWidget)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Fixed) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0) sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0) sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.AlertEntryLabel.sizePolicy().hasHeightForWidth()) sizePolicy.setHeightForWidth(self.AlertEntryLabel.sizePolicy().hasHeightForWidth())
self.AlertEntryLabel.setSizePolicy(sizePolicy) self.AlertEntryLabel.setSizePolicy(sizePolicy)
self.AlertEntryLabel.setObjectName(u'AlertEntryLabel') self.AlertEntryLabel.setObjectName("AlertEntryLabel")
self.verticalLayout.addWidget(self.AlertEntryLabel) self.AlertTextLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.AlertEntryLabel)
self.AlertEntryEditItem = QtGui.QLineEdit(self.AlertEntryWidget) self.AlertParameter = QtGui.QLabel(AlertDialog)
self.AlertEntryEditItem.setObjectName(u'AlertEntryEditItem') self.AlertParameter.setObjectName("AlertParameter")
self.verticalLayout.addWidget(self.AlertEntryEditItem) self.AlertTextLayout.setWidget(1, QtGui.QFormLayout.LabelRole, self.AlertParameter)
self.AlertListWidget = QtGui.QListWidget(self.AlertEntryWidget) self.ParameterEdit = QtGui.QLineEdit(AlertDialog)
self.ParameterEdit.setObjectName("ParameterEdit")
self.AlertTextLayout.setWidget(1, QtGui.QFormLayout.FieldRole, self.ParameterEdit)
self.AlertTextEdit = QtGui.QLineEdit(AlertDialog)
self.AlertTextEdit.setObjectName("AlertTextEdit")
self.AlertTextLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.AlertTextEdit)
self.AlertFormLayout.addLayout(self.AlertTextLayout)
self.ManagementLayout = QtGui.QHBoxLayout()
self.ManagementLayout.setSpacing(8)
self.ManagementLayout.setContentsMargins(-1, -1, -1, 0)
self.ManagementLayout.setObjectName("ManagementLayout")
self.AlertListWidget = QtGui.QListWidget(AlertDialog)
self.AlertListWidget.setAlternatingRowColors(True) self.AlertListWidget.setAlternatingRowColors(True)
self.AlertListWidget.setObjectName(u'AlertListWidget') self.AlertListWidget.setObjectName("AlertListWidget")
self.verticalLayout.addWidget(self.AlertListWidget) self.ManagementLayout.addWidget(self.AlertListWidget)
self.verticalLayout_2.addLayout(self.verticalLayout) self.ManageButtonLayout = QtGui.QVBoxLayout()
self.horizontalLayout = QtGui.QHBoxLayout() self.ManageButtonLayout.setSpacing(8)
self.horizontalLayout.setObjectName(u'horizontalLayout') self.ManageButtonLayout.setObjectName("ManageButtonLayout")
spacerItem = QtGui.QSpacerItem(181, 38, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.NewButton = QtGui.QPushButton(AlertDialog)
self.horizontalLayout.addItem(spacerItem) icon1 = QtGui.QIcon()
self.DisplayButton = QtGui.QPushButton(self.AlertEntryWidget) icon1.addPixmap(QtGui.QPixmap(":/general/general_new.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.DisplayButton.setObjectName(u'DisplayButton') self.NewButton.setIcon(icon1)
self.horizontalLayout.addWidget(self.DisplayButton) self.NewButton.setObjectName("NewButton")
self.CancelButton = QtGui.QPushButton(self.AlertEntryWidget) self.ManageButtonLayout.addWidget(self.NewButton)
self.CancelButton.setObjectName(u'CancelButton') self.SaveButton = QtGui.QPushButton(AlertDialog)
self.horizontalLayout.addWidget(self.CancelButton) self.SaveButton.setEnabled(False)
self.verticalLayout_2.addLayout(self.horizontalLayout) icon2 = QtGui.QIcon()
self.AlertFormLayout.addWidget(self.AlertEntryWidget) icon2.addPixmap(QtGui.QPixmap(":/general/general_save.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.SaveButton.setIcon(icon2)
self.SaveButton.setObjectName("SaveButton")
self.ManageButtonLayout.addWidget(self.SaveButton)
self.EditButton = QtGui.QPushButton(AlertDialog)
icon3 = QtGui.QIcon()
icon3.addPixmap(QtGui.QPixmap(":/general/general_edit.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.EditButton.setIcon(icon3)
self.EditButton.setObjectName("EditButton")
self.ManageButtonLayout.addWidget(self.EditButton)
self.DeleteButton = QtGui.QPushButton(AlertDialog)
icon4 = QtGui.QIcon()
icon4.addPixmap(QtGui.QPixmap(":/general/general_delete.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.DeleteButton.setIcon(icon4)
self.DeleteButton.setObjectName("DeleteButton")
self.ManageButtonLayout.addWidget(self.DeleteButton)
spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
self.ManageButtonLayout.addItem(spacerItem)
self.ManagementLayout.addLayout(self.ManageButtonLayout)
self.AlertFormLayout.addLayout(self.ManagementLayout)
self.AlertButtonLayout = QtGui.QHBoxLayout()
self.AlertButtonLayout.setSpacing(8)
self.AlertButtonLayout.setObjectName("AlertButtonLayout")
spacerItem1 = QtGui.QSpacerItem(181, 0, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
self.AlertButtonLayout.addItem(spacerItem1)
self.DisplayButton = QtGui.QPushButton(AlertDialog)
icon5 = QtGui.QIcon()
icon5.addPixmap(QtGui.QPixmap(":/general/general_live.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.DisplayButton.setIcon(icon5)
self.DisplayButton.setObjectName("DisplayButton")
self.AlertButtonLayout.addWidget(self.DisplayButton)
self.DisplayCloseButton = QtGui.QPushButton(AlertDialog)
self.DisplayCloseButton.setIcon(icon5)
self.DisplayCloseButton.setObjectName("DisplayCloseButton")
self.AlertButtonLayout.addWidget(self.DisplayCloseButton)
self.CloseButton = QtGui.QPushButton(AlertDialog)
icon6 = QtGui.QIcon()
icon6.addPixmap(QtGui.QPixmap(":/system/system_close.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.CloseButton.setIcon(icon6)
self.CloseButton.setObjectName("CloseButton")
self.AlertButtonLayout.addWidget(self.CloseButton)
self.AlertFormLayout.addLayout(self.AlertButtonLayout)
self.AlertEntryLabel.setBuddy(self.AlertTextEdit)
self.AlertParameter.setBuddy(self.ParameterEdit)
self.retranslateUi(AlertForm) self.retranslateUi(AlertDialog)
QtCore.QObject.connect(self.CancelButton, QtCore.SIGNAL(u'clicked()'), self.close) QtCore.QObject.connect(self.CloseButton, QtCore.SIGNAL("clicked()"), AlertDialog.close)
QtCore.QMetaObject.connectSlotsByName(AlertForm) QtCore.QMetaObject.connectSlotsByName(AlertDialog)
AlertDialog.setTabOrder(self.AlertTextEdit, self.ParameterEdit)
AlertDialog.setTabOrder(self.ParameterEdit, self.AlertListWidget)
AlertDialog.setTabOrder(self.AlertListWidget, self.NewButton)
AlertDialog.setTabOrder(self.NewButton, self.SaveButton)
AlertDialog.setTabOrder(self.SaveButton, self.EditButton)
AlertDialog.setTabOrder(self.EditButton, self.DeleteButton)
AlertDialog.setTabOrder(self.DeleteButton, self.DisplayButton)
AlertDialog.setTabOrder(self.DisplayButton, self.DisplayCloseButton)
AlertDialog.setTabOrder(self.DisplayCloseButton, self.CloseButton)
def retranslateUi(self, AlertDialog):
AlertDialog.setWindowTitle(QtGui.QApplication.translate("AlertDialog", "Alert Message", None, QtGui.QApplication.UnicodeUTF8))
self.AlertEntryLabel.setText(QtGui.QApplication.translate("AlertDialog", "Alert &text:", None, QtGui.QApplication.UnicodeUTF8))
self.AlertParameter.setText(QtGui.QApplication.translate("AlertDialog", "&Parameter(s):", None, QtGui.QApplication.UnicodeUTF8))
self.NewButton.setText(QtGui.QApplication.translate("AlertDialog", "&New", None, QtGui.QApplication.UnicodeUTF8))
self.SaveButton.setText(QtGui.QApplication.translate("AlertDialog", "&Save", None, QtGui.QApplication.UnicodeUTF8))
self.EditButton.setText(QtGui.QApplication.translate("AlertDialog", "&Edit", None, QtGui.QApplication.UnicodeUTF8))
self.DeleteButton.setText(QtGui.QApplication.translate("AlertDialog", "&Delete", None, QtGui.QApplication.UnicodeUTF8))
self.DisplayButton.setText(QtGui.QApplication.translate("AlertDialog", "Displ&ay", None, QtGui.QApplication.UnicodeUTF8))
self.DisplayCloseButton.setText(QtGui.QApplication.translate("AlertDialog", "Display && Cl&ose", None, QtGui.QApplication.UnicodeUTF8))
self.CloseButton.setText(QtGui.QApplication.translate("AlertDialog", "&Close", None, QtGui.QApplication.UnicodeUTF8))
def retranslateUi(self, AlertForm):
AlertForm.setWindowTitle(self.trUtf8('Alert Message'))
self.AlertEntryLabel.setText(self.trUtf8('Alert Text:'))
self.DisplayButton.setText(self.trUtf8('Display'))
self.CancelButton.setText(self.trUtf8('Cancel'))

View File

@ -45,9 +45,24 @@ class AlertForm(QtGui.QDialog, Ui_AlertDialog):
QtCore.QObject.connect(self.DisplayButton, QtCore.QObject.connect(self.DisplayButton,
QtCore.SIGNAL(u'clicked()'), QtCore.SIGNAL(u'clicked()'),
self.onDisplayClicked) self.onDisplayClicked)
QtCore.QObject.connect(self.AlertEntryEditItem, QtCore.QObject.connect(self.DisplayCloseButton,
QtCore.SIGNAL(u'clicked()'),
self.onDisplayCloseClicked)
QtCore.QObject.connect(self.AlertTextEdit,
QtCore.SIGNAL(u'textChanged(const QString&)'), QtCore.SIGNAL(u'textChanged(const QString&)'),
self.onTextChanged) self.onTextChanged)
QtCore.QObject.connect(self.NewButton,
QtCore.SIGNAL(u'clicked()'),
self.onNewClick)
QtCore.QObject.connect(self.DeleteButton,
QtCore.SIGNAL(u'clicked()'),
self.onDeleteClick)
QtCore.QObject.connect(self.EditButton,
QtCore.SIGNAL(u'clicked()'),
self.onEditClick)
QtCore.QObject.connect(self.SaveButton,
QtCore.SIGNAL(u'clicked()'),
self.onSaveClick)
QtCore.QObject.connect(self.AlertListWidget, QtCore.QObject.connect(self.AlertListWidget,
QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), QtCore.SIGNAL(u'doubleClicked(QModelIndex)'),
self.onDoubleClick) self.onDoubleClick)
@ -60,19 +75,64 @@ class AlertForm(QtGui.QDialog, Ui_AlertDialog):
alerts = self.manager.get_all_alerts() alerts = self.manager.get_all_alerts()
for alert in alerts: for alert in alerts:
item_name = QtGui.QListWidgetItem(alert.text) item_name = QtGui.QListWidgetItem(alert.text)
item_name.setData(
QtCore.Qt.UserRole, QtCore.QVariant(alert.id))
self.AlertListWidget.addItem(item_name) self.AlertListWidget.addItem(item_name)
self.SaveButton.setEnabled(False)
self.EditButton.setEnabled(False)
self.DeleteButton.setEnabled(False)
def onDisplayClicked(self): def onDisplayClicked(self):
self.triggerAlert(unicode(self.AlertEntryEditItem.text())) if self.triggerAlert(unicode(self.AlertTextEdit.text())):
if self.parent.alertsTab.save_history and self.history_required: self.history_required = False
self.loadList()
def onDisplayCloseClicked(self):
if self.triggerAlert(unicode(self.AlertTextEdit.text())):
self.close()
def onDeleteClick(self):
item = self.AlertListWidget.currentItem()
if item:
item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
self.parent.manager.delete_alert(item_id)
row = self.AlertListWidget.row(item)
self.AlertListWidget.takeItem(row)
self.AlertTextEdit.setText(u'')
self.SaveButton.setEnabled(False)
self.DeleteButton.setEnabled(False)
self.EditButton.setEnabled(False)
def onEditClick(self):
item = self.AlertListWidget.currentItem()
if item:
self.item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
self.AlertTextEdit.setText(unicode(item.text()))
self.SaveButton.setEnabled(True)
self.DeleteButton.setEnabled(True)
self.EditButton.setEnabled(False)
def onNewClick(self):
if len(self.AlertTextEdit.text()) == 0:
QtGui.QMessageBox.information(self,
self.trUtf8('Item selected to Add'),
self.trUtf8('Missing data'))
else:
alert = AlertItem() alert = AlertItem()
alert.text = unicode(self.AlertEntryEditItem.text()) alert.text = unicode(self.AlertTextEdit.text())
self.manager.save_alert(alert) self.manager.save_alert(alert)
self.history_required = False self.onClearClick()
self.loadList()
def onSaveClick(self):
alert = self.manager.get_alert(self.item_id)
alert.text = unicode(self.AlertTextEdit.text())
self.manager.save_alert(alert)
self.onClearClick()
self.loadList() self.loadList()
def onTextChanged(self): def onTextChanged(self):
#Data has changed by editing it so potential storage #Data has changed by editing it so potential storage required
self.history_required = True self.history_required = True
def onDoubleClick(self): def onDoubleClick(self):
@ -93,8 +153,17 @@ class AlertForm(QtGui.QDialog, Ui_AlertDialog):
items = self.AlertListWidget.selectedIndexes() items = self.AlertListWidget.selectedIndexes()
for item in items: for item in items:
bitem = self.AlertListWidget.item(item.row()) bitem = self.AlertListWidget.item(item.row())
self.AlertEntryEditItem.setText(bitem.text()) self.AlertTextEdit.setText(bitem.text())
self.history_required = False self.history_required = False
self.EditButton.setEnabled(True)
self.DeleteButton.setEnabled(True)
def triggerAlert(self, text): def triggerAlert(self, text):
self.parent.alertsmanager.displayAlert(text) if text:
self.parent.alertsmanager.displayAlert(text)
if self.parent.alertsTab.save_history and self.history_required:
alert = AlertItem()
alert.text = unicode(self.AlertTextEdit.text())
self.manager.save_alert(alert)
return True
return False

View File

@ -188,43 +188,6 @@ class AlertsTab(SettingsTab):
self.SlideRightSpacer = QtGui.QSpacerItem(20, 40, self.SlideRightSpacer = QtGui.QSpacerItem(20, 40,
QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
self.SlideRightLayout.addItem(self.SlideRightSpacer) self.SlideRightLayout.addItem(self.SlideRightSpacer)
self.layoutWidget = QtGui.QWidget(self)
self.layoutWidget.setGeometry(QtCore.QRect(20, 10, 361, 251))
self.layoutWidget.setObjectName(u'layoutWidget')
self.verticalLayout_2 = QtGui.QVBoxLayout(self.layoutWidget)
self.verticalLayout_2.setObjectName(u'verticalLayout_2')
self.horizontalLayout_2 = QtGui.QHBoxLayout()
self.horizontalLayout_2.setObjectName(u'horizontalLayout_2')
self.AlertLineEdit = QtGui.QLineEdit(self.layoutWidget)
self.AlertLineEdit.setObjectName(u'AlertLineEdit')
self.horizontalLayout_2.addWidget(self.AlertLineEdit)
self.verticalLayout_2.addLayout(self.horizontalLayout_2)
self.horizontalLayout = QtGui.QHBoxLayout()
self.horizontalLayout.setObjectName(u'horizontalLayout')
self.AlertListWidget = QtGui.QListWidget(self.layoutWidget)
self.AlertListWidget.setAlternatingRowColors(True)
self.AlertListWidget.setObjectName(u'AlertListWidget')
self.horizontalLayout.addWidget(self.AlertListWidget)
self.verticalLayout = QtGui.QVBoxLayout()
self.verticalLayout.setObjectName(u'verticalLayout')
self.SaveButton = QtGui.QPushButton(self.layoutWidget)
self.SaveButton.setObjectName(u'SaveButton')
self.verticalLayout.addWidget(self.SaveButton)
self.ClearButton = QtGui.QPushButton(self.layoutWidget)
self.ClearButton.setObjectName(u'ClearButton')
self.verticalLayout.addWidget(self.ClearButton)
self.AddButton = QtGui.QPushButton(self.layoutWidget)
self.AddButton.setObjectName(u'AddButton')
self.verticalLayout.addWidget(self.AddButton)
self.EditButton = QtGui.QPushButton(self.layoutWidget)
self.EditButton.setObjectName(u'EditButton')
self.verticalLayout.addWidget(self.EditButton)
self.DeleteButton = QtGui.QPushButton(self.layoutWidget)
self.DeleteButton.setObjectName(u'DeleteButton')
self.verticalLayout.addWidget(self.DeleteButton)
self.horizontalLayout.addLayout(self.verticalLayout)
self.verticalLayout_2.addLayout(self.horizontalLayout)
self.SlideRightLayout.addWidget(self.layoutWidget)
self.AlertsLayout.addWidget(self.AlertRightColumn) self.AlertsLayout.addWidget(self.AlertRightColumn)
# Signals and slots # Signals and slots
QtCore.QObject.connect(self.HistoryCheckBox, QtCore.QObject.connect(self.HistoryCheckBox,
@ -242,27 +205,6 @@ class AlertsTab(SettingsTab):
QtCore.SIGNAL(u'valueChanged(int)'), self.onTimeoutSpinBoxChanged) QtCore.SIGNAL(u'valueChanged(int)'), self.onTimeoutSpinBoxChanged)
QtCore.QObject.connect(self.FontSizeSpinBox, QtCore.QObject.connect(self.FontSizeSpinBox,
QtCore.SIGNAL(u'valueChanged(int)'), self.onFontSizeSpinBoxChanged) QtCore.SIGNAL(u'valueChanged(int)'), self.onFontSizeSpinBoxChanged)
QtCore.QObject.connect(self.DeleteButton,
QtCore.SIGNAL(u'clicked()'),
self.onDeleteClick)
QtCore.QObject.connect(self.ClearButton,
QtCore.SIGNAL(u'clicked()'),
self.onClearClick)
QtCore.QObject.connect(self.EditButton,
QtCore.SIGNAL(u'clicked()'),
self.onEditClick)
QtCore.QObject.connect(self.AddButton,
QtCore.SIGNAL(u'clicked()'),
self.onAddClick)
QtCore.QObject.connect(self.SaveButton,
QtCore.SIGNAL(u'clicked()'),
self.onSaveClick)
QtCore.QObject.connect(self.AlertListWidget,
QtCore.SIGNAL(u'doubleClicked(QModelIndex)'),
self.onItemSelected)
QtCore.QObject.connect(self.AlertListWidget,
QtCore.SIGNAL(u'clicked(QModelIndex)'),
self.onItemSelected)
def retranslateUi(self): def retranslateUi(self):
self.FontGroupBox.setTitle(self.trUtf8('Font')) self.FontGroupBox.setTitle(self.trUtf8('Font'))
@ -279,11 +221,6 @@ class AlertsTab(SettingsTab):
self.FontPreview.setText(self.trUtf8('openlp.org')) self.FontPreview.setText(self.trUtf8('openlp.org'))
self.LocationComboBox.setItemText(0, self.trUtf8('Top')) self.LocationComboBox.setItemText(0, self.trUtf8('Top'))
self.LocationComboBox.setItemText(1, self.trUtf8('Bottom')) self.LocationComboBox.setItemText(1, self.trUtf8('Bottom'))
self.SaveButton.setText(self.trUtf8('Save'))
self.ClearButton.setText(self.trUtf8('Clear'))
self.AddButton.setText(self.trUtf8('Add'))
self.EditButton.setText(self.trUtf8('Edit'))
self.DeleteButton.setText(self.trUtf8('Delete'))
def onBackgroundColorButtonClicked(self): def onBackgroundColorButtonClicked(self):
self.bg_color = QtGui.QColorDialog.getColor( self.bg_color = QtGui.QColorDialog.getColor(
@ -342,76 +279,11 @@ class AlertsTab(SettingsTab):
font.setFamily(self.font_face) font.setFamily(self.font_face)
self.FontComboBox.setCurrentFont(font) self.FontComboBox.setCurrentFont(font)
self.updateDisplay() self.updateDisplay()
self.loadList()
def loadList(self):
self.AlertListWidget.clear()
alerts = self.manager.get_all_alerts()
for alert in alerts:
item_name = QtGui.QListWidgetItem(alert.text)
item_name.setData(
QtCore.Qt.UserRole, QtCore.QVariant(alert.id))
self.AlertListWidget.addItem(item_name)
self.AddButton.setEnabled(True)
self.ClearButton.setEnabled(False)
self.SaveButton.setEnabled(False)
self.EditButton.setEnabled(False)
self.DeleteButton.setEnabled(False)
def onItemSelected(self): def onItemSelected(self):
self.EditButton.setEnabled(True) self.EditButton.setEnabled(True)
self.DeleteButton.setEnabled(True) self.DeleteButton.setEnabled(True)
def onDeleteClick(self):
item = self.AlertListWidget.currentItem()
if item:
item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
self.parent.manager.delete_alert(item_id)
row = self.AlertListWidget.row(item)
self.AlertListWidget.takeItem(row)
self.AddButton.setEnabled(True)
self.SaveButton.setEnabled(False)
self.DeleteButton.setEnabled(False)
self.EditButton.setEnabled(False)
def onEditClick(self):
item = self.AlertListWidget.currentItem()
if item:
self.item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
self.AlertLineEdit.setText(unicode(item.text()))
self.AddButton.setEnabled(True)
self.ClearButton.setEnabled(True)
self.SaveButton.setEnabled(True)
self.DeleteButton.setEnabled(True)
self.EditButton.setEnabled(False)
def onClearClick(self):
self.AlertLineEdit.setText(u'')
self.AddButton.setEnabled(False)
self.ClearButton.setEnabled(True)
self.SaveButton.setEnabled(False)
self.DeleteButton.setEnabled(False)
self.EditButton.setEnabled(False)
def onAddClick(self):
if len(self.AlertLineEdit.text()) == 0:
QtGui.QMessageBox.information(self,
self.trUtf8('Item selected to Add'),
self.trUtf8('Missing data'))
else:
alert = AlertItem()
alert.text = unicode(self.AlertLineEdit.text())
self.manager.save_alert(alert)
self.onClearClick()
self.loadList()
def onSaveClick(self):
alert = self.manager.get_alert(self.item_id)
alert.text = unicode(self.AlertLineEdit.text())
self.manager.save_alert(alert)
self.onClearClick()
self.loadList()
def save(self): def save(self):
self.font_face = self.FontComboBox.currentFont().family() self.font_face = self.FontComboBox.currentFont().family()
self.config.set_config(u'background color', unicode(self.bg_color)) self.config.set_config(u'background color', unicode(self.bg_color))

View File

@ -63,9 +63,12 @@ class AlertsManager(QtCore.QObject):
if self.alertTab.location == 0: if self.alertTab.location == 0:
self.alertScreenPosition = 0 self.alertScreenPosition = 0
else: else:
self.alertScreenPosition = self.screen[u'size'].height() - self.alertHeight self.alertScreenPosition = self.screen[u'size'].height() \
self.alertHeight = self.screen[u'size'].height() - self.alertScreenPosition - self.alertHeight
self.parent.maindisplay.setAlertSize(self.alertScreenPosition, self.alertHeight) self.alertHeight = self.screen[u'size'].height() \
- self.alertScreenPosition
self.parent.maindisplay.setAlertSize(self.alertScreenPosition,\
self.alertHeight)
def displayAlert(self, text=u''): def displayAlert(self, text=u''):
""" """
@ -77,12 +80,12 @@ class AlertsManager(QtCore.QObject):
log.debug(u'display alert called %s' % text) log.debug(u'display alert called %s' % text)
if not self.screen: if not self.screen:
self.screenChanged() self.screenChanged()
self.parent.maindisplay.parent.StatusBar.showMessage(u'')
self.alertList.append(text) self.alertList.append(text)
if self.timer_id != 0: if self.timer_id != 0:
self.parent.maindisplay.parent.StatusBar.showMessage(\ Receiver.send_message(u'status_message',
self.trUtf8(u'Alert message created and delayed')) self.trUtf8(u'Alert message created and delayed'))
return return
Receiver.send_message(u'status_message', u'')
self.generateAlert() self.generateAlert()
def generateAlert(self): def generateAlert(self):
@ -114,6 +117,7 @@ class AlertsManager(QtCore.QObject):
self.timer_id = self.startTimer(int(alertTab.timeout) * 1000) self.timer_id = self.startTimer(int(alertTab.timeout) * 1000)
def timerEvent(self, event): def timerEvent(self, event):
log.debug(u'timer event')
if event.timerId() == self.timer_id: if event.timerId() == self.timer_id:
self.parent.maindisplay.addAlertImage(None, True) self.parent.maindisplay.addAlertImage(None, True)
self.killTimer(self.timer_id) self.killTimer(self.timer_id)

View File

@ -155,6 +155,10 @@ class ImpressController(PresentationController):
desktop = self.get_uno_desktop() desktop = self.get_uno_desktop()
else: else:
desktop = self.get_com_desktop() desktop = self.get_com_desktop()
#Sometimes we get a failure and desktop is None
if not desktop:
log.exception(u'Failed to terminate OpenOffice')
return
docs = desktop.getComponents() docs = desktop.getComponents()
if docs.hasElements(): if docs.hasElements():
log.debug(u'OpenOffice not terminated') log.debug(u'OpenOffice not terminated')

View File

@ -135,7 +135,7 @@ class Ui_EditSongDialog(object):
sizePolicy.setHeightForWidth( sizePolicy.setHeightForWidth(
self.AuthorsSelectionComboItem.sizePolicy().hasHeightForWidth()) self.AuthorsSelectionComboItem.sizePolicy().hasHeightForWidth())
self.AuthorsSelectionComboItem.setSizePolicy(sizePolicy) self.AuthorsSelectionComboItem.setSizePolicy(sizePolicy)
self.AuthorsSelectionComboItem.setEditable(False) self.AuthorsSelectionComboItem.setEditable(True)
self.AuthorsSelectionComboItem.setInsertPolicy( self.AuthorsSelectionComboItem.setInsertPolicy(
QtGui.QComboBox.InsertAlphabetically) QtGui.QComboBox.InsertAlphabetically)
self.AuthorsSelectionComboItem.setSizeAdjustPolicy( self.AuthorsSelectionComboItem.setSizeAdjustPolicy(
@ -212,6 +212,7 @@ class Ui_EditSongDialog(object):
sizePolicy.setVerticalStretch(0) sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth( sizePolicy.setHeightForWidth(
self.SongTopicCombo.sizePolicy().hasHeightForWidth()) self.SongTopicCombo.sizePolicy().hasHeightForWidth())
self.SongTopicCombo.setEditable(True)
self.SongTopicCombo.setSizePolicy(sizePolicy) self.SongTopicCombo.setSizePolicy(sizePolicy)
self.SongTopicCombo.setObjectName(u'SongTopicCombo') self.SongTopicCombo.setObjectName(u'SongTopicCombo')
self.TopicAddLayout.addWidget(self.SongTopicCombo) self.TopicAddLayout.addWidget(self.SongTopicCombo)
@ -256,6 +257,7 @@ class Ui_EditSongDialog(object):
sizePolicy.setHorizontalStretch(0) sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0) sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.SongbookCombo.sizePolicy().hasHeightForWidth()) sizePolicy.setHeightForWidth(self.SongbookCombo.sizePolicy().hasHeightForWidth())
self.SongbookCombo.setEditable(True)
self.SongbookCombo.setSizePolicy(sizePolicy) self.SongbookCombo.setSizePolicy(sizePolicy)
self.SongbookCombo.setObjectName(u'SongbookCombo') self.SongbookCombo.setObjectName(u'SongbookCombo')
self.SongbookLayout.addWidget(self.SongbookCombo, 0, 0, 1, 1) self.SongbookLayout.addWidget(self.SongbookCombo, 0, 0, 1, 1)
@ -293,6 +295,7 @@ class Ui_EditSongDialog(object):
self.ThemeLayout.setMargin(8) self.ThemeLayout.setMargin(8)
self.ThemeLayout.setObjectName(u'ThemeLayout') self.ThemeLayout.setObjectName(u'ThemeLayout')
self.ThemeSelectionComboItem = QtGui.QComboBox(self.ThemeGroupBox) self.ThemeSelectionComboItem = QtGui.QComboBox(self.ThemeGroupBox)
self.ThemeSelectionComboItem.setEditable(True)
self.ThemeSelectionComboItem.setObjectName(u'ThemeSelectionComboItem') self.ThemeSelectionComboItem.setObjectName(u'ThemeSelectionComboItem')
self.ThemeLayout.addWidget(self.ThemeSelectionComboItem) self.ThemeLayout.addWidget(self.ThemeSelectionComboItem)
self.ThemeAddButton = QtGui.QPushButton(self.ThemeGroupBox) self.ThemeAddButton = QtGui.QPushButton(self.ThemeGroupBox)

View File

@ -122,6 +122,11 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
def loadAuthors(self): def loadAuthors(self):
authors = self.songmanager.get_authors() authors = self.songmanager.get_authors()
authorsCompleter = QtGui.QCompleter(
[author.display_name for author in authors],
self.AuthorsSelectionComboItem)
authorsCompleter.setCaseSensitivity(QtCore.Qt.CaseInsensitive);
self.AuthorsSelectionComboItem.setCompleter(authorsCompleter);
self.AuthorsSelectionComboItem.clear() self.AuthorsSelectionComboItem.clear()
for author in authors: for author in authors:
row = self.AuthorsSelectionComboItem.count() row = self.AuthorsSelectionComboItem.count()
@ -131,6 +136,11 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
def loadTopics(self): def loadTopics(self):
topics = self.songmanager.get_topics() topics = self.songmanager.get_topics()
topicsCompleter = QtGui.QCompleter(
[topic.name for topic in topics],
self.SongTopicCombo)
topicsCompleter.setCaseSensitivity(QtCore.Qt.CaseInsensitive);
self.SongTopicCombo.setCompleter(topicsCompleter);
self.SongTopicCombo.clear() self.SongTopicCombo.clear()
for topic in topics: for topic in topics:
row = self.SongTopicCombo.count() row = self.SongTopicCombo.count()
@ -139,6 +149,11 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
def loadBooks(self): def loadBooks(self):
books = self.songmanager.get_books() books = self.songmanager.get_books()
booksCompleter = QtGui.QCompleter(
[book.name for book in books],
self.SongbookCombo)
booksCompleter.setCaseSensitivity(QtCore.Qt.CaseInsensitive);
self.SongbookCombo.setCompleter(booksCompleter);
self.SongbookCombo.clear() self.SongbookCombo.clear()
self.SongbookCombo.addItem(u' ') self.SongbookCombo.addItem(u' ')
for book in books: for book in books:
@ -147,6 +162,11 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
self.SongbookCombo.setItemData(row, QtCore.QVariant(book.id)) self.SongbookCombo.setItemData(row, QtCore.QVariant(book.id))
def loadThemes(self, theme_list): def loadThemes(self, theme_list):
themesCompleter = QtGui.QCompleter(
[theme for theme in theme_list],
self.ThemeSelectionComboItem)
themesCompleter.setCaseSensitivity(QtCore.Qt.CaseInsensitive);
self.ThemeSelectionComboItem.setCompleter(themesCompleter);
self.ThemeSelectionComboItem.clear() self.ThemeSelectionComboItem.clear()
self.ThemeSelectionComboItem.addItem(u' ') self.ThemeSelectionComboItem.addItem(u' ')
for theme in theme_list: for theme in theme_list:

View File

@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"> <ui version="4.0">
<class>AlertForm</class> <class>AlertDialog</class>
<widget class="QWidget" name="AlertForm"> <widget class="QDialog" name="AlertDialog">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>430</width> <width>567</width>
<height>320</height> <height>440</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -25,85 +25,212 @@
<number>8</number> <number>8</number>
</property> </property>
<item> <item>
<widget class="QWidget" name="AlertEntryWidget" native="true"> <layout class="QFormLayout" name="AlertTextLayout">
<property name="sizePolicy"> <property name="horizontalSpacing">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred"> <number>8</number>
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_2"> <property name="verticalSpacing">
<item> <number>8</number>
<layout class="QVBoxLayout" name="verticalLayout"> </property>
<item> <property name="leftMargin">
<widget class="QLabel" name="AlertEntryLabel"> <number>0</number>
<property name="sizePolicy"> </property>
<sizepolicy hsizetype="Preferred" vsizetype="Fixed"> <property name="topMargin">
<horstretch>0</horstretch> <number>0</number>
<verstretch>0</verstretch> </property>
</sizepolicy> <item row="0" column="0">
</property> <widget class="QLabel" name="AlertEntryLabel">
<property name="text"> <property name="sizePolicy">
<string>Alert Text:</string> <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
</property> <horstretch>0</horstretch>
</widget> <verstretch>0</verstretch>
</item> </sizepolicy>
<item> </property>
<widget class="QLineEdit" name="AlertEntryEditItem"/> <property name="text">
</item> <string>Alert &amp;text:</string>
<item> </property>
<widget class="QListWidget" name="AlertListWidget"> <property name="buddy">
<property name="alternatingRowColors"> <cstring>AlertTextEdit</cstring>
<bool>true</bool> </property>
</property> </widget>
</widget> </item>
</item> <item row="1" column="0">
</layout> <widget class="QLabel" name="AlertParameter">
</item> <property name="text">
<item> <string>&amp;Parameter(s):</string>
<layout class="QHBoxLayout" name="horizontalLayout"> </property>
<item> <property name="buddy">
<spacer name="ButtonBoxWidgetSpacer"> <cstring>ParameterEdit</cstring>
<property name="orientation"> </property>
<enum>Qt::Horizontal</enum> </widget>
</property> </item>
<property name="sizeHint" stdset="0"> <item row="1" column="1">
<size> <widget class="QLineEdit" name="ParameterEdit"/>
<width>181</width> </item>
<height>38</height> <item row="0" column="1">
</size> <widget class="QLineEdit" name="AlertTextEdit"/>
</property> </item>
</spacer> </layout>
</item> </item>
<item> <item>
<widget class="QPushButton" name="DisplayButton"> <layout class="QHBoxLayout" name="ManagementLayout">
<property name="text"> <property name="spacing">
<string>Display</string> <number>8</number>
</property> </property>
</widget> <property name="bottomMargin">
</item> <number>0</number>
<item> </property>
<widget class="QPushButton" name="CancelButton"> <item>
<property name="text"> <widget class="QListWidget" name="AlertListWidget">
<string>Cancel</string> <property name="alternatingRowColors">
</property> <bool>true</bool>
</widget> </property>
</item> </widget>
</layout> </item>
</item> <item>
</layout> <layout class="QVBoxLayout" name="ManageButtonLayout">
</widget> <property name="spacing">
<number>8</number>
</property>
<item>
<widget class="QPushButton" name="NewButton">
<property name="text">
<string>&amp;New</string>
</property>
<property name="icon">
<iconset resource="../Projects/OpenLP/trunk/resources/images/openlp-2.qrc">
<normaloff>:/general/general_new.png</normaloff>:/general/general_new.png</iconset>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="SaveButton">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>&amp;Save</string>
</property>
<property name="icon">
<iconset resource="../Projects/OpenLP/trunk/resources/images/openlp-2.qrc">
<normaloff>:/general/general_save.png</normaloff>:/general/general_save.png</iconset>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="EditButton">
<property name="text">
<string>&amp;Edit</string>
</property>
<property name="icon">
<iconset resource="../Projects/OpenLP/trunk/resources/images/openlp-2.qrc">
<normaloff>:/general/general_edit.png</normaloff>:/general/general_edit.png</iconset>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="DeleteButton">
<property name="text">
<string>&amp;Delete</string>
</property>
<property name="icon">
<iconset resource="../Projects/OpenLP/trunk/resources/images/openlp-2.qrc">
<normaloff>:/general/general_delete.png</normaloff>:/general/general_delete.png</iconset>
</property>
</widget>
</item>
<item>
<spacer name="ManagementSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="AlertButtonLayout">
<property name="spacing">
<number>8</number>
</property>
<item>
<spacer name="ButtonBoxWidgetSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>181</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="DisplayButton">
<property name="text">
<string>Displ&amp;ay</string>
</property>
<property name="icon">
<iconset resource="../Projects/OpenLP/trunk/resources/images/openlp-2.qrc">
<normaloff>:/general/general_live.png</normaloff>:/general/general_live.png</iconset>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="DisplayCloseButton">
<property name="text">
<string>Display &amp;&amp; Cl&amp;ose</string>
</property>
<property name="icon">
<iconset resource="../Projects/OpenLP/trunk/resources/images/openlp-2.qrc">
<normaloff>:/general/general_live.png</normaloff>:/general/general_live.png</iconset>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="CloseButton">
<property name="text">
<string>&amp;Close</string>
</property>
<property name="icon">
<iconset resource="../Projects/OpenLP/trunk/resources/images/openlp-2.qrc">
<normaloff>:/system/system_close.png</normaloff>:/system/system_close.png</iconset>
</property>
</widget>
</item>
</layout>
</item> </item>
</layout> </layout>
</widget> </widget>
<tabstops>
<tabstop>AlertTextEdit</tabstop>
<tabstop>ParameterEdit</tabstop>
<tabstop>AlertListWidget</tabstop>
<tabstop>NewButton</tabstop>
<tabstop>SaveButton</tabstop>
<tabstop>EditButton</tabstop>
<tabstop>DeleteButton</tabstop>
<tabstop>DisplayButton</tabstop>
<tabstop>DisplayCloseButton</tabstop>
<tabstop>CloseButton</tabstop>
</tabstops>
<resources> <resources>
<include location="../images/openlp-2.qrc"/> <include location="../Projects/OpenLP/trunk/resources/images/openlp-2.qrc"/>
</resources> </resources>
<connections> <connections>
<connection> <connection>
<sender>CancelButton</sender> <sender>CloseButton</sender>
<signal>clicked()</signal> <signal>clicked()</signal>
<receiver>AlertForm</receiver> <receiver>AlertDialog</receiver>
<slot>close()</slot> <slot>close()</slot>
<hints> <hints>
<hint type="sourcelabel"> <hint type="sourcelabel">

View File

@ -1,101 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>AlertEditDialog</class>
<widget class="QWidget" name="AlertEditDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Maintain Alerts</string>
</property>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="geometry">
<rect>
<x>220</x>
<y>270</y>
<width>173</width>
<height>27</height>
</rect>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel</set>
</property>
</widget>
<widget class="QWidget" name="layoutWidget">
<property name="geometry">
<rect>
<x>20</x>
<y>10</y>
<width>361</width>
<height>251</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLineEdit" name="AlertLineEdit"/>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QListWidget" name="AlertListWidget">
<property name="alternatingRowColors">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QPushButton" name="SaveButton">
<property name="text">
<string>Save</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="ClearButton">
<property name="text">
<string>Clear</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="AddButton">
<property name="text">
<string>Add</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="EdirButton">
<property name="text">
<string>Edit</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="DeleteButton">
<property name="text">
<string>Delete</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
</layout>
</widget>
</widget>
<resources/>
<connections/>
</ui>