From 571e91b20f66b8810f45e0017facd6a9bb122fd7 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Mon, 12 Apr 2010 09:13:27 +0100 Subject: [PATCH 1/8] Sort out screen display and add comments --- openlp.pyw | 2 +- openlp/core/lib/eventreceiver.py | 3 +++ openlp/core/ui/maindisplay.py | 39 +++++++++----------------------- openlp/core/ui/mainwindow.py | 27 +++++++++++++++------- 4 files changed, 34 insertions(+), 37 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index f1b627940..2bdcb1e2a 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -140,7 +140,7 @@ class OpenLP(QtGui.QApplication): log.info(u'Screen %d found with resolution %s', screen, self.desktop().availableGeometry(screen)) # start the main app window - self.mainWindow = MainWindow(screens, app_version) + self.mainWindow = MainWindow(screens, app_version, self) self.mainWindow.show() if show_splash: # now kill the splashscreen diff --git a/openlp/core/lib/eventreceiver.py b/openlp/core/lib/eventreceiver.py index 5b79fc40a..2e1cf9d39 100644 --- a/openlp/core/lib/eventreceiver.py +++ b/openlp/core/lib/eventreceiver.py @@ -115,6 +115,9 @@ class EventReceiver(QtCore.QObject): ``version_check`` Version has changed so pop up window. + ``mainDisplay_active`` + Version has changed so pop up window. + """ def __init__(self): """ diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 4883cd732..9fade885d 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -42,7 +42,8 @@ class DisplayWidget(QtGui.QWidget): log.info(u'MainDisplay loaded') def __init__(self, parent=None, name=None): - QtGui.QWidget.__init__(self, parent) + QtGui.QWidget.__init__(self, parent, QtCore.Qt.WindowStaysOnTopHint)# \ + #| QtCore.Qt.FramelessWindowHint) self.parent = parent self.hotkey_map = {QtCore.Qt.Key_Return: 'servicemanager_next_item', QtCore.Qt.Key_Space: 'live_slidecontroller_next_noloop', @@ -81,7 +82,7 @@ class MainDisplay(DisplayWidget): """ log.info(u'MainDisplay Loaded') - def __init__(self, parent, screens): + def __init__(self, parent, screens, application): """ The constructor for the display form. @@ -94,9 +95,9 @@ class MainDisplay(DisplayWidget): log.debug(u'Initilisation started') DisplayWidget.__init__(self, None) self.parent = parent + self.application = application self.setWindowTitle(u'OpenLP Display') self.setAttribute(QtCore.Qt.WA_TranslucentBackground) - self.setWindowFlags(QtCore.Qt.FramelessWindowHint) self.screens = screens self.display_image = QtGui.QLabel(self) self.display_image.setScaledContents(True) @@ -184,6 +185,8 @@ class MainDisplay(DisplayWidget): self.display_image.setPixmap(self.transparent) self.display_alert.setPixmap(self.transparent) self.display_text.setPixmap(self.transparent) + self.raise_() + self.setFocus() def showDisplay(self): log.debug(u'showDisplay') @@ -268,8 +271,9 @@ class MainDisplay(DisplayWidget): def onMediaQueue(self, message): log.debug(u'Queue new media message %s' % message) - self.hideDisplay() + self.application.setActiveWindow(self) self.activateWindow() + self.hideDisplay() class VideoWidget(QtGui.QWidget): """ @@ -279,33 +283,14 @@ class VideoWidget(QtGui.QWidget): log.info(u'MainDisplay loaded') def __init__(self, parent=None, name=None): - QtGui.QWidget.__init__(self, None) + QtGui.QWidget.__init__(self, None, QtCore.Qt.WindowStaysOnBottomHint) self.parent = parent - self.hotkey_map = {QtCore.Qt.Key_Return: 'servicemanager_next_item', - QtCore.Qt.Key_Space: 'live_slidecontroller_next_noloop', - QtCore.Qt.Key_Enter: 'live_slidecontroller_next_noloop', - QtCore.Qt.Key_0: 'servicemanager_next_item', - QtCore.Qt.Key_Backspace: 'live_slidecontroller_previous_noloop'} + # QtCore.Qt.FramelessWindowHint \ 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'live_slidecontroller_previous') - event.accept() - elif event.key() == QtCore.Qt.Key_Down: - Receiver.send_message(u'live_slidecontroller_next') - event.accept() - elif event.key() == QtCore.Qt.Key_PageUp: - Receiver.send_message(u'live_slidecontroller_first') - event.accept() - elif event.key() == QtCore.Qt.Key_PageDown: - Receiver.send_message(u'live_slidecontroller_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: + if event.key() == QtCore.Qt.Key_Escape: self.resetDisplay() event.accept() event.ignore() @@ -334,7 +319,6 @@ class VideoDisplay(VideoWidget): self.parent = parent self.screens = screens self.setAttribute(QtCore.Qt.WA_TranslucentBackground) - self.setWindowFlags(QtCore.Qt.FramelessWindowHint) self.mediaObject = Phonon.MediaObject(self) self.video = Phonon.VideoWidget() self.video.setVisible(False) @@ -382,7 +366,6 @@ class VideoDisplay(VideoWidget): self.video.setFullScreen(True) self.mediaObject.play() self.setVisible(True) - self.lower() def onMediaPause(self): log.debug(u'VideoDisplay Media paused by user') diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index b6cf8412c..73227b9cd 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -432,7 +432,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): """ log.info(u'MainWindow loaded') - def __init__(self, screens, applicationVersion): + def __init__(self, screens, applicationVersion, application): """ This constructor sets up the interface, the various managers, and the plugins. @@ -444,7 +444,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.settingsmanager = SettingsManager(screens) self.generalConfig = PluginConfig(u'General') self.videoDisplay = VideoDisplay(self, screens) - self.mainDisplay = MainDisplay(self, screens) + self.mainDisplay = MainDisplay(self, screens, application) self.aboutForm = AboutForm(self, applicationVersion) self.settingsForm = SettingsForm(self.screens, self, self) # Set up the path with plugins @@ -555,6 +555,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): def versionCheck(self, version): """ Checks the version of the Application called from openlp.pyw + Triggered by delay thread. """ app_version = self.applicationVersion[u'full'] version_text = unicode(self.trUtf8('Version %s of OpenLP is now ' @@ -583,6 +584,10 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.mainDisplay.raise_() 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)) \ and str_to_bool(self.generalConfig.get_config(u'blank warning', False)): self.LiveController.onBlankDisplay(True) @@ -593,6 +598,9 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): QtGui.QMessageBox.Ok) def versionThread(self): + """ + Start an initial setup thread to delay notifications + """ vT = VersionThread(self, self.applicationVersion, self.generalConfig) vT.start() @@ -617,8 +625,14 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.settingsForm.exec_() def screenChanged(self): + """ + The screen has changed to so tell the displays to update_display + their locations + """ self.RenderManager.update_display() self.mainDisplay.setup() + self.videoDisplay.setup() + self.setFocus() self.activateWindow() def closeEvent(self, event): @@ -636,20 +650,14 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): QtGui.QMessageBox.Save) if ret == QtGui.QMessageBox.Save: self.ServiceManagerContents.onSaveService() - self.mainDisplay.close() - self.videoDisplay.close() self.cleanUp() event.accept() elif ret == QtGui.QMessageBox.Discard: - self.mainDisplay.close() - self.videoDisplay.close() self.cleanUp() event.accept() else: event.ignore() else: - self.mainDisplay.close() - self.videoDisplay.close() self.cleanUp() event.accept() @@ -662,6 +670,9 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): # Call the cleanup method to shutdown plugins. log.info(u'cleanup plugins') self.plugin_manager.finalise_plugins() + #Close down the displays + self.mainDisplay.close() + self.videoDisplay.close() def serviceChanged(self, reset=False, serviceName=None): """ From 3cc600a67b365224ee03b990485ae61bf34d0a9d Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Tue, 13 Apr 2010 16:53:00 +0100 Subject: [PATCH 2/8] More changes and attempts --- openlp/core/ui/__init__.py | 1 + openlp/core/ui/maindisplay.py | 28 +++++++++++-------- openlp/core/ui/mainwindow.py | 25 +++++++++-------- openlp/core/ui/slidecontroller.py | 2 +- openlp/plugins/alerts/lib/alertsmanager.py | 6 ++-- .../presentations/lib/impresscontroller.py | 5 ++++ 6 files changed, 40 insertions(+), 27 deletions(-) diff --git a/openlp/core/ui/__init__.py b/openlp/core/ui/__init__.py index 0ba8f8da8..675c57476 100644 --- a/openlp/core/ui/__init__.py +++ b/openlp/core/ui/__init__.py @@ -29,6 +29,7 @@ from serviceitemeditform import ServiceItemEditForm from screen import ScreenList from maindisplay import MainDisplay from maindisplay import VideoDisplay +from maindisplay import DisplayManager from amendthemeform import AmendThemeForm from slidecontroller import SlideController from splashscreen import SplashScreen diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 9fade885d..c0f9e7648 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -34,6 +34,15 @@ from openlp.core.ui import HideMode log = logging.getLogger(__name__) + +class DisplayManager(QtGui.QWidget): + def __init__(self, screens): + QtGui.QWidget.__init__(self) + self.screens = screens + self.videoDisplay = VideoDisplay(self, screens) + self.mainDisplay = MainDisplay(self, screens) + + class DisplayWidget(QtGui.QWidget): """ Customised version of QTableWidget which can respond to keyboard @@ -42,8 +51,8 @@ class DisplayWidget(QtGui.QWidget): log.info(u'MainDisplay loaded') def __init__(self, parent=None, name=None): - QtGui.QWidget.__init__(self, parent, QtCore.Qt.WindowStaysOnTopHint)# \ - #| QtCore.Qt.FramelessWindowHint) + QtGui.QWidget.__init__(self, None, QtCore.Qt.WindowStaysOnTopHint \ + | QtCore.Qt.FramelessWindowHint) self.parent = parent self.hotkey_map = {QtCore.Qt.Key_Return: 'servicemanager_next_item', QtCore.Qt.Key_Space: 'live_slidecontroller_next_noloop', @@ -82,7 +91,7 @@ class MainDisplay(DisplayWidget): """ log.info(u'MainDisplay Loaded') - def __init__(self, parent, screens, application): + def __init__(self, parent, screens): """ The constructor for the display form. @@ -93,9 +102,8 @@ class MainDisplay(DisplayWidget): The list of screens. """ log.debug(u'Initilisation started') - DisplayWidget.__init__(self, None) + DisplayWidget.__init__(self, parent) self.parent = parent - self.application = application self.setWindowTitle(u'OpenLP Display') self.setAttribute(QtCore.Qt.WA_TranslucentBackground) self.screens = screens @@ -185,8 +193,6 @@ class MainDisplay(DisplayWidget): self.display_image.setPixmap(self.transparent) self.display_alert.setPixmap(self.transparent) self.display_text.setPixmap(self.transparent) - self.raise_() - self.setFocus() def showDisplay(self): log.debug(u'showDisplay') @@ -271,7 +277,6 @@ class MainDisplay(DisplayWidget): def onMediaQueue(self, message): log.debug(u'Queue new media message %s' % message) - self.application.setActiveWindow(self) self.activateWindow() self.hideDisplay() @@ -283,9 +288,9 @@ class VideoWidget(QtGui.QWidget): log.info(u'MainDisplay loaded') def __init__(self, parent=None, name=None): - QtGui.QWidget.__init__(self, None, QtCore.Qt.WindowStaysOnBottomHint) + QtGui.QWidget.__init__(self, None, QtCore.Qt.WindowStaysOnBottomHint \ + | QtCore.Qt.FramelessWindowHint) self.parent = parent - # QtCore.Qt.FramelessWindowHint \ def keyPressEvent(self, event): if type(event) == QtGui.QKeyEvent: @@ -320,7 +325,7 @@ class VideoDisplay(VideoWidget): self.screens = screens self.setAttribute(QtCore.Qt.WA_TranslucentBackground) self.mediaObject = Phonon.MediaObject(self) - self.video = Phonon.VideoWidget() + self.video = Phonon.VideoWidget(parent) self.video.setVisible(False) self.audio = Phonon.AudioOutput(Phonon.VideoCategory, self.mediaObject) Phonon.createPath(self.mediaObject, self.video) @@ -366,6 +371,7 @@ class VideoDisplay(VideoWidget): self.video.setFullScreen(True) self.mediaObject.play() self.setVisible(True) + self.video.lower() def onMediaPause(self): log.debug(u'VideoDisplay Media paused by user') diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 73227b9cd..6e96ad1b9 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -30,7 +30,7 @@ from PyQt4 import QtCore, QtGui from openlp.core.ui import AboutForm, SettingsForm, \ ServiceManager, ThemeManager, MainDisplay, SlideController, \ - PluginForm, MediaDockManager, VideoDisplay + PluginForm, MediaDockManager, VideoDisplay, DisplayManager from openlp.core.lib import RenderManager, PluginConfig, build_icon, \ OpenLPDockWidget, SettingsManager, PluginManager, Receiver, str_to_bool from openlp.core.utils import check_latest_version, AppLocation @@ -443,8 +443,9 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.serviceNotSaved = False self.settingsmanager = SettingsManager(screens) self.generalConfig = PluginConfig(u'General') - self.videoDisplay = VideoDisplay(self, screens) - self.mainDisplay = MainDisplay(self, screens, application) + #self.videoDisplay = VideoDisplay(self, screens) + #self.mainDisplay = MainDisplay(self, screens) + self.displayManager = DisplayManager(screens) self.aboutForm = AboutForm(self, applicationVersion) self.settingsForm = SettingsForm(self.screens, self, self) # Set up the path with plugins @@ -526,7 +527,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.plugin_helpers[u'service'] = self.ServiceManagerContents self.plugin_helpers[u'settings'] = self.settingsForm 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) # hook methods have to happen after find_plugins. Find plugins needs # the controllers hence the hooks have moved from setupUI() to here @@ -573,15 +574,15 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): """ self.showMaximized() #screen_number = self.getMonitorNumber() - self.mainDisplay.setup() - self.videoDisplay.setup() - if self.mainDisplay.isVisible(): - self.mainDisplay.setFocus() + self.displayManager.mainDisplay.setup() + self.displayManager.videoDisplay.setup() + if self.displayManager.mainDisplay.isVisible(): + self.displayManager.mainDisplay.setFocus() self.activateWindow() if str_to_bool(self.generalConfig.get_config(u'auto open', False)): self.ServiceManagerContents.onLoadService(True) - self.videoDisplay.lower() - self.mainDisplay.raise_() + self.displayManager.videoDisplay.lower() + self.displayManager.mainDisplay.raise_() def blankCheck(self): """ @@ -671,8 +672,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): log.info(u'cleanup plugins') self.plugin_manager.finalise_plugins() #Close down the displays - self.mainDisplay.close() - self.videoDisplay.close() + self.displayManager.mainDisplay.close() + self.displayManager.videoDisplay.close() def serviceChanged(self, reset=False, serviceName=None): """ diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 09122dea2..aae646f52 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -635,7 +635,7 @@ class SlideController(QtGui.QWidget): self.SlidePreview.setPixmap(QtGui.QPixmap.fromImage(frame[u'main'])) log.log(15, u'Slide Rendering took %4s' % (time.time() - before)) if self.isLive: - self.parent.mainDisplay.frameView(frame, True) + self.parent.displayManager.mainDisplay.frameView(frame, True) self.selectedRow = row def onSlideChange(self, row): diff --git a/openlp/plugins/alerts/lib/alertsmanager.py b/openlp/plugins/alerts/lib/alertsmanager.py index 69a6d6f53..6e3aee58e 100644 --- a/openlp/plugins/alerts/lib/alertsmanager.py +++ b/openlp/plugins/alerts/lib/alertsmanager.py @@ -79,11 +79,11 @@ class AlertsManager(QtCore.QObject): log.debug(u'display alert called %s' % text) if not self.screen: self.screenChanged() - self.parent.maindisplay.parent.StatusBar.showMessage(u'') + #self.parent.maindisplay.parent.StatusBar.showMessage(u'') self.alertList.append(text) if self.timer_id != 0: - self.parent.maindisplay.parent.StatusBar.showMessage(\ - self.trUtf8(u'Alert message created and delayed')) +# self.parent.maindisplay.parent.StatusBar.showMessage(\ +# self.trUtf8(u'Alert message created and delayed')) return self.generateAlert() diff --git a/openlp/plugins/presentations/lib/impresscontroller.py b/openlp/plugins/presentations/lib/impresscontroller.py index 7b4367a72..c1c1804b8 100644 --- a/openlp/plugins/presentations/lib/impresscontroller.py +++ b/openlp/plugins/presentations/lib/impresscontroller.py @@ -155,6 +155,11 @@ class ImpressController(PresentationController): desktop = self.get_uno_desktop() else: desktop = self.get_com_desktop() + #Sometimes we get a failure and desktop is None + if not desktop: + desktop.terminate() + log.exception(u'Failed to terminate OpenOffice') + return docs = desktop.getComponents() if docs.hasElements(): log.debug(u'OpenOffice not terminated') From dcd48d1042556bc1a3ed022b3a202ee1f67337ad Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 17 Apr 2010 08:31:15 +0100 Subject: [PATCH 3/8] Clean up alert dialog with new layout Alerts over video starting to work Fix bug in impress close down --- openlp/core/ui/maindisplay.py | 30 +- openlp/core/ui/mainwindow.py | 13 +- openlp/plugins/alerts/alertsplugin.py | 3 +- openlp/plugins/alerts/forms/alertdialog.py | 187 +++++++----- openlp/plugins/alerts/forms/alertform.py | 85 +++++- openlp/plugins/alerts/forms/alertstab.py | 128 -------- openlp/plugins/alerts/lib/alertsmanager.py | 16 +- .../presentations/lib/impresscontroller.py | 1 - resources/forms/alertdialog.ui | 275 +++++++++++++----- resources/forms/alerteditdialog.ui | 101 ------- 10 files changed, 432 insertions(+), 407 deletions(-) delete mode 100644 resources/forms/alerteditdialog.ui diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index c0f9e7648..fe16e7d8b 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -51,8 +51,7 @@ class DisplayWidget(QtGui.QWidget): log.info(u'MainDisplay loaded') def __init__(self, parent=None, name=None): - QtGui.QWidget.__init__(self, None, QtCore.Qt.WindowStaysOnTopHint \ - | QtCore.Qt.FramelessWindowHint) + QtGui.QWidget.__init__(self, None) self.parent = parent self.hotkey_map = {QtCore.Qt.Key_Return: 'servicemanager_next_item', QtCore.Qt.Key_Space: 'live_slidecontroller_next_noloop', @@ -193,6 +192,13 @@ class MainDisplay(DisplayWidget): self.display_image.setPixmap(self.transparent) self.display_alert.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): log.debug(u'showDisplay') @@ -207,6 +213,7 @@ class MainDisplay(DisplayWidget): self.screen[u'size'].width(), self.screen[u'size'].height() ) self.display_image.setPixmap(QtGui.QPixmap.fromImage(frame)) + self.moveToTop() def setAlertSize(self, top, height): log.debug(u'setAlertSize') @@ -220,6 +227,7 @@ class MainDisplay(DisplayWidget): self.display_alert.setPixmap(self.transparent) else: self.display_alert.setPixmap(frame) + self.moveToTop() def frameView(self, frame, transition=False): """ @@ -277,7 +285,7 @@ class MainDisplay(DisplayWidget): def onMediaQueue(self, message): log.debug(u'Queue new media message %s' % message) - self.activateWindow() + #self.activateWindow() self.hideDisplay() class VideoWidget(QtGui.QWidget): @@ -288,8 +296,7 @@ class VideoWidget(QtGui.QWidget): log.info(u'MainDisplay loaded') def __init__(self, parent=None, name=None): - QtGui.QWidget.__init__(self, None, QtCore.Qt.WindowStaysOnBottomHint \ - | QtCore.Qt.FramelessWindowHint) + QtGui.QWidget.__init__(self, None) self.parent = parent def keyPressEvent(self, event): @@ -330,7 +337,6 @@ class VideoDisplay(VideoWidget): 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.SIGNAL(u'media_start'), self.onMediaQueue) QtCore.QObject.connect(Receiver.get_receiver(), @@ -357,30 +363,27 @@ class VideoDisplay(VideoWidget): def onMediaQueue(self, message): log.debug(u'VideoDisplay Queue new media message %s' % message) file = os.path.join(message[1], message[2]) - if self.firstTime: - source = self.mediaObject.setCurrentSource(Phonon.MediaSource(file)) - self.firstTime = False - else: - self.mediaObject.enqueue(Phonon.MediaSource(file)) + source = self.mediaObject.setCurrentSource(Phonon.MediaSource(file)) self.onMediaPlay() def onMediaPlay(self): 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.setVisible(True) - self.video.lower() + self.show() def onMediaPause(self): log.debug(u'VideoDisplay Media paused by user') self.mediaObject.pause() + self.show() def onMediaStop(self): log.debug(u'VideoDisplay Media stopped by user') self.mediaObject.stop() self.onMediaFinish() + self.show() def onMediaFinish(self): log.debug(u'VideoDisplay Reached end of media playlist') @@ -388,3 +391,4 @@ class VideoDisplay(VideoWidget): self.mediaObject.clearQueue() self.video.setVisible(False) self.setVisible(False) + diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 6e96ad1b9..6035aaebc 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -500,6 +500,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): QtCore.SIGNAL(u'blank_check'), self.blankCheck) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'screen_changed'), self.screenChanged) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'status_message'), self.showStatusMessage) QtCore.QObject.connect(self.FileNewItem, QtCore.SIGNAL(u'triggered()'), self.ServiceManagerContents.onNewService) @@ -581,8 +583,6 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.activateWindow() if str_to_bool(self.generalConfig.get_config(u'auto open', False)): self.ServiceManagerContents.onLoadService(True) - self.displayManager.videoDisplay.lower() - self.displayManager.mainDisplay.raise_() def blankCheck(self): """ @@ -631,8 +631,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): their locations """ self.RenderManager.update_display() - self.mainDisplay.setup() - self.videoDisplay.setup() + self.displayManager.mainDisplay.setup() + self.displayManager.videoDisplay.setup() self.setFocus() self.activateWindow() @@ -677,7 +677,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): 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`` Shows if the service has been cleared or saved @@ -697,6 +697,9 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): title = u'%s - %s*' % (self.mainTitle, service_name) self.setWindowTitle(title) + def showStatusMessage(self, message): + self.StatusBar.showMessage(message) + def defaultThemeChanged(self, theme): self.DefaultThemeLabel.setText( u'%s %s' % (self.defaultThemeText, theme)) diff --git a/openlp/plugins/alerts/alertsplugin.py b/openlp/plugins/alerts/alertsplugin.py index 819e8eed6..aeba0ab41 100644 --- a/openlp/plugins/alerts/alertsplugin.py +++ b/openlp/plugins/alerts/alertsplugin.py @@ -27,7 +27,7 @@ import logging 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.forms import AlertsTab, AlertForm @@ -88,6 +88,7 @@ class alertsPlugin(Plugin): def onAlertsTrigger(self): self.alertForm.loadList() self.alertForm.exec_() + Receiver.send_message(u'text_onTop') def about(self): about_text = self.trUtf8('Alerts Plugin
This plugin ' diff --git a/openlp/plugins/alerts/forms/alertdialog.py b/openlp/plugins/alerts/forms/alertdialog.py index 442cfadd2..804975ff1 100644 --- a/openlp/plugins/alerts/forms/alertdialog.py +++ b/openlp/plugins/alerts/forms/alertdialog.py @@ -1,87 +1,134 @@ # -*- coding: utf-8 -*- -# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 -############################################################################### -# OpenLP - Open Source Lyrics Projection # -# --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Christian Richter, Maikel Stuivenberg, Martin # -# 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 # -############################################################################### +# Form implementation generated from reading ui file 'alertdialog.ui' +# +# Created: Sat Apr 17 08:07:40 2010 +# by: PyQt4 UI code generator 4.7 +# +# WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui class Ui_AlertDialog(object): - def setupUi(self, AlertForm): - AlertForm.setObjectName(u'AlertDialog') - AlertForm.resize(430, 320) + def setupUi(self, AlertDialog): + AlertDialog.setObjectName("AlertDialog") + AlertDialog.resize(567, 440) icon = QtGui.QIcon() - icon.addPixmap(QtGui.QPixmap(u':/icon/openlp.org-icon-32.bmp'), QtGui.QIcon.Normal, QtGui.QIcon.Off) - AlertForm.setWindowIcon(icon) - self.AlertFormLayout = QtGui.QVBoxLayout(AlertForm) + icon.addPixmap(QtGui.QPixmap(":/icon/openlp.org-icon-32.bmp"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + AlertDialog.setWindowIcon(icon) + self.AlertFormLayout = QtGui.QVBoxLayout(AlertDialog) self.AlertFormLayout.setSpacing(8) self.AlertFormLayout.setMargin(8) - self.AlertFormLayout.setObjectName(u'AlertFormLayout') - self.AlertEntryWidget = QtGui.QWidget(AlertForm) - sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.AlertEntryWidget.sizePolicy().hasHeightForWidth()) - 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) + self.AlertFormLayout.setObjectName("AlertFormLayout") + self.AlertTextLayout = QtGui.QFormLayout() + self.AlertTextLayout.setContentsMargins(0, 0, -1, -1) + self.AlertTextLayout.setSpacing(8) + self.AlertTextLayout.setObjectName("AlertTextLayout") + self.AlertEntryLabel = QtGui.QLabel(AlertDialog) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.AlertEntryLabel.sizePolicy().hasHeightForWidth()) self.AlertEntryLabel.setSizePolicy(sizePolicy) - self.AlertEntryLabel.setObjectName(u'AlertEntryLabel') - self.verticalLayout.addWidget(self.AlertEntryLabel) - self.AlertEntryEditItem = QtGui.QLineEdit(self.AlertEntryWidget) - self.AlertEntryEditItem.setObjectName(u'AlertEntryEditItem') - self.verticalLayout.addWidget(self.AlertEntryEditItem) - self.AlertListWidget = QtGui.QListWidget(self.AlertEntryWidget) + self.AlertEntryLabel.setObjectName("AlertEntryLabel") + self.AlertTextLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.AlertEntryLabel) + self.AlertParameter = QtGui.QLabel(AlertDialog) + self.AlertParameter.setObjectName("AlertParameter") + self.AlertTextLayout.setWidget(1, QtGui.QFormLayout.LabelRole, self.AlertParameter) + 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.setObjectName(u'AlertListWidget') - self.verticalLayout.addWidget(self.AlertListWidget) - self.verticalLayout_2.addLayout(self.verticalLayout) - self.horizontalLayout = QtGui.QHBoxLayout() - self.horizontalLayout.setObjectName(u'horizontalLayout') - spacerItem = QtGui.QSpacerItem(181, 38, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) - self.horizontalLayout.addItem(spacerItem) - self.DisplayButton = QtGui.QPushButton(self.AlertEntryWidget) - self.DisplayButton.setObjectName(u'DisplayButton') - self.horizontalLayout.addWidget(self.DisplayButton) - self.CancelButton = QtGui.QPushButton(self.AlertEntryWidget) - self.CancelButton.setObjectName(u'CancelButton') - self.horizontalLayout.addWidget(self.CancelButton) - self.verticalLayout_2.addLayout(self.horizontalLayout) - self.AlertFormLayout.addWidget(self.AlertEntryWidget) + self.AlertListWidget.setObjectName("AlertListWidget") + self.ManagementLayout.addWidget(self.AlertListWidget) + self.ManageButtonLayout = QtGui.QVBoxLayout() + self.ManageButtonLayout.setSpacing(8) + self.ManageButtonLayout.setObjectName("ManageButtonLayout") + self.NewButton = QtGui.QPushButton(AlertDialog) + icon1 = QtGui.QIcon() + icon1.addPixmap(QtGui.QPixmap(":/general/general_new.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.NewButton.setIcon(icon1) + self.NewButton.setObjectName("NewButton") + self.ManageButtonLayout.addWidget(self.NewButton) + self.SaveButton = QtGui.QPushButton(AlertDialog) + self.SaveButton.setEnabled(False) + icon2 = QtGui.QIcon() + 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) - QtCore.QObject.connect(self.CancelButton, QtCore.SIGNAL(u'clicked()'), self.close) - QtCore.QMetaObject.connectSlotsByName(AlertForm) + self.retranslateUi(AlertDialog) + QtCore.QObject.connect(self.CloseButton, QtCore.SIGNAL("clicked()"), AlertDialog.close) + 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')) diff --git a/openlp/plugins/alerts/forms/alertform.py b/openlp/plugins/alerts/forms/alertform.py index 0d21cf4b9..08e5f5e02 100644 --- a/openlp/plugins/alerts/forms/alertform.py +++ b/openlp/plugins/alerts/forms/alertform.py @@ -45,9 +45,24 @@ class AlertForm(QtGui.QDialog, Ui_AlertDialog): QtCore.QObject.connect(self.DisplayButton, QtCore.SIGNAL(u'clicked()'), 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&)'), 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.SIGNAL(u'doubleClicked(QModelIndex)'), self.onDoubleClick) @@ -60,19 +75,64 @@ class AlertForm(QtGui.QDialog, Ui_AlertDialog): 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.SaveButton.setEnabled(False) + self.EditButton.setEnabled(False) + self.DeleteButton.setEnabled(False) def onDisplayClicked(self): - self.triggerAlert(unicode(self.AlertEntryEditItem.text())) - if self.parent.alertsTab.save_history and self.history_required: + if self.triggerAlert(unicode(self.AlertTextEdit.text())): + 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.text = unicode(self.AlertEntryEditItem.text()) + alert.text = unicode(self.AlertTextEdit.text()) 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() 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 def onDoubleClick(self): @@ -93,8 +153,17 @@ class AlertForm(QtGui.QDialog, Ui_AlertDialog): items = self.AlertListWidget.selectedIndexes() for item in items: bitem = self.AlertListWidget.item(item.row()) - self.AlertEntryEditItem.setText(bitem.text()) + self.AlertTextEdit.setText(bitem.text()) self.history_required = False + self.EditButton.setEnabled(True) + self.DeleteButton.setEnabled(True) 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 diff --git a/openlp/plugins/alerts/forms/alertstab.py b/openlp/plugins/alerts/forms/alertstab.py index fe1b7cb6d..7820b658a 100644 --- a/openlp/plugins/alerts/forms/alertstab.py +++ b/openlp/plugins/alerts/forms/alertstab.py @@ -189,43 +189,6 @@ class AlertsTab(SettingsTab): self.SlideRightSpacer = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) 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) # Signals and slots QtCore.QObject.connect(self.HistoryCheckBox, @@ -243,27 +206,6 @@ class AlertsTab(SettingsTab): QtCore.SIGNAL(u'valueChanged(int)'), self.onTimeoutSpinBoxChanged) QtCore.QObject.connect(self.FontSizeSpinBox, 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): self.FontGroupBox.setTitle(self.trUtf8('Font')) @@ -280,11 +222,6 @@ class AlertsTab(SettingsTab): self.FontPreview.setText(self.trUtf8('openlp.org')) self.LocationComboBox.setItemText(0, self.trUtf8('Top')) 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): self.bg_color = QtGui.QColorDialog.getColor( @@ -343,76 +280,11 @@ class AlertsTab(SettingsTab): font.setFamily(self.font_face) self.FontComboBox.setCurrentFont(font) 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): self.EditButton.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): self.font_face = self.FontComboBox.currentFont().family() self.config.set_config(u'background color', unicode(self.bg_color)) diff --git a/openlp/plugins/alerts/lib/alertsmanager.py b/openlp/plugins/alerts/lib/alertsmanager.py index 6e3aee58e..2243b5bef 100644 --- a/openlp/plugins/alerts/lib/alertsmanager.py +++ b/openlp/plugins/alerts/lib/alertsmanager.py @@ -65,9 +65,12 @@ class AlertsManager(QtCore.QObject): if self.alertTab.location == 0: self.alertScreenPosition = 0 else: - self.alertScreenPosition = self.screen[u'size'].height() - self.alertHeight - self.alertHeight = self.screen[u'size'].height() - self.alertScreenPosition - self.parent.maindisplay.setAlertSize(self.alertScreenPosition, self.alertHeight) + self.alertScreenPosition = self.screen[u'size'].height() \ + - self.alertHeight + self.alertHeight = self.screen[u'size'].height() \ + - self.alertScreenPosition + self.parent.maindisplay.setAlertSize(self.alertScreenPosition,\ + self.alertHeight) def displayAlert(self, text=u''): """ @@ -79,12 +82,12 @@ class AlertsManager(QtCore.QObject): log.debug(u'display alert called %s' % text) if not self.screen: self.screenChanged() - #self.parent.maindisplay.parent.StatusBar.showMessage(u'') self.alertList.append(text) if self.timer_id != 0: -# self.parent.maindisplay.parent.StatusBar.showMessage(\ -# self.trUtf8(u'Alert message created and delayed')) + Receiver.send_message(u'status_message', + self.trUtf8(u'Alert message created and delayed')) return + Receiver.send_message(u'status_message', u'') self.generateAlert() def generateAlert(self): @@ -116,6 +119,7 @@ class AlertsManager(QtCore.QObject): self.timer_id = self.startTimer(int(alertTab.timeout) * 1000) def timerEvent(self, event): + log.debug(u'timer event') if event.timerId() == self.timer_id: self.parent.maindisplay.addAlertImage(None, True) self.killTimer(self.timer_id) diff --git a/openlp/plugins/presentations/lib/impresscontroller.py b/openlp/plugins/presentations/lib/impresscontroller.py index c1c1804b8..92717b6d7 100644 --- a/openlp/plugins/presentations/lib/impresscontroller.py +++ b/openlp/plugins/presentations/lib/impresscontroller.py @@ -157,7 +157,6 @@ class ImpressController(PresentationController): desktop = self.get_com_desktop() #Sometimes we get a failure and desktop is None if not desktop: - desktop.terminate() log.exception(u'Failed to terminate OpenOffice') return docs = desktop.getComponents() diff --git a/resources/forms/alertdialog.ui b/resources/forms/alertdialog.ui index da56f3847..fd4cee5fc 100644 --- a/resources/forms/alertdialog.ui +++ b/resources/forms/alertdialog.ui @@ -1,13 +1,13 @@ - AlertForm - + AlertDialog + 0 0 - 430 - 320 + 567 + 440 @@ -25,85 +25,212 @@ 8 - - - - 0 - 0 - + + + 8 - - - - - - - - 0 - 0 - - - - Alert Text: - - - - - - - - - - true - - - - - - - - - - - Qt::Horizontal - - - - 181 - 38 - - - - - - - - Display - - - - - - - Cancel - - - - - - - + + 8 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + Alert &text: + + + AlertTextEdit + + + + + + + &Parameter(s): + + + ParameterEdit + + + + + + + + + + + + + + + 8 + + + 0 + + + + + true + + + + + + + 8 + + + + + &New + + + + :/general/general_new.png:/general/general_new.png + + + + + + + false + + + &Save + + + + :/general/general_save.png:/general/general_save.png + + + + + + + &Edit + + + + :/general/general_edit.png:/general/general_edit.png + + + + + + + &Delete + + + + :/general/general_delete.png:/general/general_delete.png + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + 8 + + + + + Qt::Horizontal + + + + 181 + 0 + + + + + + + + Displ&ay + + + + :/general/general_live.png:/general/general_live.png + + + + + + + Display && Cl&ose + + + + :/general/general_live.png:/general/general_live.png + + + + + + + &Close + + + + :/system/system_close.png:/system/system_close.png + + + + + + AlertTextEdit + ParameterEdit + AlertListWidget + NewButton + SaveButton + EditButton + DeleteButton + DisplayButton + DisplayCloseButton + CloseButton + - + - CancelButton + CloseButton clicked() - AlertForm + AlertDialog close() diff --git a/resources/forms/alerteditdialog.ui b/resources/forms/alerteditdialog.ui deleted file mode 100644 index 352e3d7b1..000000000 --- a/resources/forms/alerteditdialog.ui +++ /dev/null @@ -1,101 +0,0 @@ - - - AlertEditDialog - - - - 0 - 0 - 400 - 300 - - - - Maintain Alerts - - - - - 220 - 270 - 173 - 27 - - - - QDialogButtonBox::Cancel - - - - - - 20 - 10 - 361 - 251 - - - - - - - - - - - - - - - - true - - - - - - - - - Save - - - - - - - Clear - - - - - - - Add - - - - - - - Edit - - - - - - - Delete - - - - - - - - - - - - - From a766542854f6bd696b115ceb59ec1f0a22576880 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 17 Apr 2010 08:53:06 +0100 Subject: [PATCH 4/8] Display Hook cleanups --- openlp/core/ui/maindisplay.py | 8 ++++++++ openlp/core/ui/mainwindow.py | 15 +++++---------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index fe16e7d8b..f3a206a76 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -42,6 +42,14 @@ class DisplayManager(QtGui.QWidget): 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): """ diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 6035aaebc..1d97e4220 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -29,8 +29,8 @@ import time from PyQt4 import QtCore, QtGui from openlp.core.ui import AboutForm, SettingsForm, \ - ServiceManager, ThemeManager, MainDisplay, SlideController, \ - PluginForm, MediaDockManager, VideoDisplay, DisplayManager + ServiceManager, ThemeManager, SlideController, \ + PluginForm, MediaDockManager, DisplayManager from openlp.core.lib import RenderManager, PluginConfig, build_icon, \ OpenLPDockWidget, SettingsManager, PluginManager, Receiver, str_to_bool from openlp.core.utils import check_latest_version, AppLocation @@ -443,8 +443,6 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.serviceNotSaved = False self.settingsmanager = SettingsManager(screens) self.generalConfig = PluginConfig(u'General') - #self.videoDisplay = VideoDisplay(self, screens) - #self.mainDisplay = MainDisplay(self, screens) self.displayManager = DisplayManager(screens) self.aboutForm = AboutForm(self, applicationVersion) self.settingsForm = SettingsForm(self.screens, self, self) @@ -576,8 +574,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): """ self.showMaximized() #screen_number = self.getMonitorNumber() - self.displayManager.mainDisplay.setup() - self.displayManager.videoDisplay.setup() + self.displayManager.setup() if self.displayManager.mainDisplay.isVisible(): self.displayManager.mainDisplay.setFocus() self.activateWindow() @@ -631,8 +628,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): their locations """ self.RenderManager.update_display() - self.displayManager.mainDisplay.setup() - self.displayManager.videoDisplay.setup() + self.displayManager.setup() self.setFocus() self.activateWindow() @@ -672,8 +668,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): log.info(u'cleanup plugins') self.plugin_manager.finalise_plugins() #Close down the displays - self.displayManager.mainDisplay.close() - self.displayManager.videoDisplay.close() + self.displayManager.close() def serviceChanged(self, reset=False, serviceName=None): """ From 1948da79fff5a46412a12521ea557bdbd3473911 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 17 Apr 2010 12:27:12 +0100 Subject: [PATCH 5/8] Comments --- openlp/core/ui/maindisplay.py | 13 ++++++------- openlp/core/ui/mainwindow.py | 1 - 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index f3a206a76..c4ddab2e6 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -36,6 +36,11 @@ 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 @@ -132,7 +137,7 @@ class MainDisplay(DisplayWidget): QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'live_slide_show'), self.showDisplay) QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'media_start'), self.onMediaQueue) + QtCore.SIGNAL(u'media_start'), self.hideDisplay) def setup(self): """ @@ -291,11 +296,6 @@ class MainDisplay(DisplayWidget): elif self.display_frame: self.frameView(self.display_frame) - def onMediaQueue(self, message): - log.debug(u'Queue new media message %s' % message) - #self.activateWindow() - self.hideDisplay() - class VideoWidget(QtGui.QWidget): """ Customised version of QTableWidget which can respond to keyboard @@ -399,4 +399,3 @@ class VideoDisplay(VideoWidget): self.mediaObject.clearQueue() self.video.setVisible(False) self.setVisible(False) - diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 1d97e4220..1b4fd5555 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -74,7 +74,6 @@ class VersionThread(QtCore.QThread): if version != self.app_version[u'full']: Receiver.send_message(u'version_check', u'%s' % version) - class Ui_MainWindow(object): def setupUi(self, MainWindow): """ From 5a311c6f771fd16c44dd4997e751381d163603ec Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 18 Apr 2010 20:11:28 +0100 Subject: [PATCH 6/8] Clean up video class --- openlp.pyw | 2 +- openlp/core/ui/maindisplay.py | 64 +++++++++++++++-------------------- openlp/core/ui/mainwindow.py | 2 +- 3 files changed, 29 insertions(+), 39 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index 4a9a0594b..528923862 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -138,7 +138,7 @@ class OpenLP(QtGui.QApplication): log.info(u'Screen %d found with resolution %s', screen, self.desktop().availableGeometry(screen)) # start the main app window - self.mainWindow = MainWindow(screens, app_version, self) + self.mainWindow = MainWindow(screens, app_version) self.mainWindow.show() if show_splash: # now kill the splashscreen diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index c4ddab2e6..15fc29650 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -296,34 +296,15 @@ class MainDisplay(DisplayWidget): elif self.display_frame: self.frameView(self.display_frame) -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 - - def keyPressEvent(self, event): - if type(event) == QtGui.QKeyEvent: - #here accept the event and do something - if event.key() == QtCore.Qt.Key_Escape: - self.resetDisplay() - event.accept() - event.ignore() - else: - event.ignore() - -class VideoDisplay(VideoWidget): +class VideoDisplay(Phonon.VideoWidget): """ This is the form that is used to display videos on the projector. """ 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. @@ -334,17 +315,15 @@ class VideoDisplay(VideoWidget): The list of screens. """ log.debug(u'VideoDisplay Initilisation started') - VideoWidget.__init__(self, parent) + Phonon.VideoWidget.__init__(self) self.setWindowTitle(u'OpenLP Video Display') self.parent = parent self.screens = screens - self.setAttribute(QtCore.Qt.WA_TranslucentBackground) - self.mediaObject = Phonon.MediaObject(self) - self.video = Phonon.VideoWidget(parent) - self.video.setVisible(False) - self.audio = Phonon.AudioOutput(Phonon.VideoCategory, self.mediaObject) - Phonon.createPath(self.mediaObject, self.video) - Phonon.createPath(self.mediaObject, self.audio) + self.mediaObject = Phonon.MediaObject() + self.setAspectRatio(aspect) + self.audioObject = Phonon.AudioOutput(Phonon.VideoCategory) + Phonon.createPath(self.mediaObject, self) + Phonon.createPath(self.mediaObject, self.audioObject) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'media_start'), self.onMediaQueue) QtCore.QObject.connect(Receiver.get_receiver(), @@ -356,6 +335,16 @@ class VideoDisplay(VideoWidget): QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'update_config'), 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): """ Sets up the screen on a particular screen. @@ -366,7 +355,13 @@ class VideoDisplay(VideoWidget): self.screen = self.screens.current #Sort out screen locations and sizes 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): log.debug(u'VideoDisplay Queue new media message %s' % message) @@ -376,11 +371,9 @@ class VideoDisplay(VideoWidget): def onMediaPlay(self): log.debug(u'VideoDisplay Play the new media, Live ') - self.setWindowState(QtCore.Qt.WindowMinimized) - self.video.setFullScreen(True) self.mediaObject.play() self.setVisible(True) - self.show() + self.showFullScreen() def onMediaPause(self): log.debug(u'VideoDisplay Media paused by user') @@ -391,11 +384,8 @@ class VideoDisplay(VideoWidget): log.debug(u'VideoDisplay Media stopped by user') self.mediaObject.stop() self.onMediaFinish() - self.show() def onMediaFinish(self): log.debug(u'VideoDisplay Reached end of media playlist') - self.mediaObject.stop() self.mediaObject.clearQueue() - self.video.setVisible(False) self.setVisible(False) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 1b4fd5555..e0e8465f5 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -431,7 +431,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): """ log.info(u'MainWindow loaded') - def __init__(self, screens, applicationVersion, application): + def __init__(self, screens, applicationVersion): """ This constructor sets up the interface, the various managers, and the plugins. From 7e747f7cc902b63cd272ad8762b5c792c8ee68af Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Mon, 19 Apr 2010 07:22:56 +0200 Subject: [PATCH 7/8] Added autocompletion to the Authors combobox. --- openlp/plugins/songs/forms/editsongdialog.py | 2 +- openlp/plugins/songs/forms/editsongform.py | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/openlp/plugins/songs/forms/editsongdialog.py b/openlp/plugins/songs/forms/editsongdialog.py index 87f7d3601..9c41d363c 100644 --- a/openlp/plugins/songs/forms/editsongdialog.py +++ b/openlp/plugins/songs/forms/editsongdialog.py @@ -135,7 +135,7 @@ class Ui_EditSongDialog(object): sizePolicy.setHeightForWidth( self.AuthorsSelectionComboItem.sizePolicy().hasHeightForWidth()) self.AuthorsSelectionComboItem.setSizePolicy(sizePolicy) - self.AuthorsSelectionComboItem.setEditable(False) + self.AuthorsSelectionComboItem.setEditable(True) self.AuthorsSelectionComboItem.setInsertPolicy( QtGui.QComboBox.InsertAlphabetically) self.AuthorsSelectionComboItem.setSizeAdjustPolicy( diff --git a/openlp/plugins/songs/forms/editsongform.py b/openlp/plugins/songs/forms/editsongform.py index b2b1b14c4..c2dced872 100644 --- a/openlp/plugins/songs/forms/editsongform.py +++ b/openlp/plugins/songs/forms/editsongform.py @@ -122,6 +122,11 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): def loadAuthors(self): 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() for author in authors: row = self.AuthorsSelectionComboItem.count() From b45dcc6b81e8adc21867c41230ac797fdc4b5a3b Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Mon, 19 Apr 2010 07:31:31 +0200 Subject: [PATCH 8/8] Added autocompletion to the topics, songbooks and themes. --- openlp/plugins/songs/forms/editsongdialog.py | 3 +++ openlp/plugins/songs/forms/editsongform.py | 15 +++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/openlp/plugins/songs/forms/editsongdialog.py b/openlp/plugins/songs/forms/editsongdialog.py index 9c41d363c..b992aeea4 100644 --- a/openlp/plugins/songs/forms/editsongdialog.py +++ b/openlp/plugins/songs/forms/editsongdialog.py @@ -212,6 +212,7 @@ class Ui_EditSongDialog(object): sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.SongTopicCombo.sizePolicy().hasHeightForWidth()) + self.SongTopicCombo.setEditable(True) self.SongTopicCombo.setSizePolicy(sizePolicy) self.SongTopicCombo.setObjectName(u'SongTopicCombo') self.TopicAddLayout.addWidget(self.SongTopicCombo) @@ -256,6 +257,7 @@ class Ui_EditSongDialog(object): sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.SongbookCombo.sizePolicy().hasHeightForWidth()) + self.SongbookCombo.setEditable(True) self.SongbookCombo.setSizePolicy(sizePolicy) self.SongbookCombo.setObjectName(u'SongbookCombo') self.SongbookLayout.addWidget(self.SongbookCombo, 0, 0, 1, 1) @@ -293,6 +295,7 @@ class Ui_EditSongDialog(object): self.ThemeLayout.setMargin(8) self.ThemeLayout.setObjectName(u'ThemeLayout') self.ThemeSelectionComboItem = QtGui.QComboBox(self.ThemeGroupBox) + self.ThemeSelectionComboItem.setEditable(True) self.ThemeSelectionComboItem.setObjectName(u'ThemeSelectionComboItem') self.ThemeLayout.addWidget(self.ThemeSelectionComboItem) self.ThemeAddButton = QtGui.QPushButton(self.ThemeGroupBox) diff --git a/openlp/plugins/songs/forms/editsongform.py b/openlp/plugins/songs/forms/editsongform.py index c2dced872..2c03d13f6 100644 --- a/openlp/plugins/songs/forms/editsongform.py +++ b/openlp/plugins/songs/forms/editsongform.py @@ -136,6 +136,11 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): def loadTopics(self): 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() for topic in topics: row = self.SongTopicCombo.count() @@ -144,6 +149,11 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): def loadBooks(self): 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.addItem(u' ') for book in books: @@ -152,6 +162,11 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): self.SongbookCombo.setItemData(row, QtCore.QVariant(book.id)) 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.addItem(u' ') for theme in theme_list: