This commit is contained in:
Jonathan Corwin 2009-10-17 20:06:06 +01:00
commit 2ae79a4480
14 changed files with 249 additions and 120 deletions

View File

@ -83,6 +83,9 @@ class EventReceiver(QtCore.QObject):
``audit_changed`` ``audit_changed``
Audit information may have changed Audit information may have changed
``config_updated``
Informs components the config has changed
""" """
global log global log
log = logging.getLogger(u'EventReceiver') log = logging.getLogger(u'EventReceiver')

View File

@ -113,7 +113,7 @@ class MediaManagerItem(QtGui.QWidget):
self.title = title self.title = title
self.Toolbar = None self.Toolbar = None
self.PageLayout = QtGui.QVBoxLayout(self) self.PageLayout = QtGui.QVBoxLayout(self)
self.PageLayout.setSpacing(0) self.PageLayout.setSpacing(4)
self.PageLayout.setMargin(0) self.PageLayout.setMargin(0)
self.requiredIcons() self.requiredIcons()
self.setupUi() self.setupUi()

View File

@ -25,9 +25,40 @@
import logging import logging
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from openlp.core.lib import Receiver from openlp.core.lib import Receiver, str_to_bool
class MainDisplay(QtGui.QWidget): class DisplayLabel(QtGui.QWidget):
"""
Customised version of QTableWidget which can respond to keyboard
events.
"""
def __init__(self, parent=None, name=None):
QQtGui.QWidget.__init__(self, parent)
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_Up:
Receiver().send_message(u'slidecontroller_previous')
event.accept()
elif event.key() == QtCore.Qt.Key_Down:
Receiver().send_message(u'slidecontroller_next')
event.accept()
elif event.key() == QtCore.Qt.Key_PageUp:
Receiver().send_message(u'slidecontroller_first')
event.accept()
elif event.key() == QtCore.Qt.Key_PageDown:
Receiver().send_message(u'slidecontroller_last')
event.accept()
elif event.key() == QtCore.Qt.Key_Escape:
self.resetDisplay()
event.accept()
event.ignore()
else:
event.ignore()
class MainDisplay(DisplayLabel):
""" """
This is the form that is used to display things on the projector. This is the form that is used to display things on the projector.
""" """
@ -59,6 +90,7 @@ class MainDisplay(QtGui.QWidget):
self.layout.addWidget(self.display) self.layout.addWidget(self.display)
self.displayBlank = False self.displayBlank = False
self.blankFrame = None self.blankFrame = None
self.frame = None
self.alertactive = False self.alertactive = False
self.alertTab = None self.alertTab = None
self.timer_id = 0 self.timer_id = 0
@ -66,6 +98,10 @@ class MainDisplay(QtGui.QWidget):
QtCore.SIGNAL(u'live_slide_blank'), self.blankDisplay) QtCore.SIGNAL(u'live_slide_blank'), self.blankDisplay)
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'alert_text'), self.displayAlert) QtCore.SIGNAL(u'alert_text'), self.displayAlert)
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'presentations_start'), self.hideDisplay)
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'presentations_stop'), self.showDisplay)
def setup(self, screenNumber): def setup(self, screenNumber):
""" """
@ -84,21 +120,24 @@ class MainDisplay(QtGui.QWidget):
self.setGeometry(screen[u'size']) self.setGeometry(screen[u'size'])
if not screen[u'primary']: if not screen[u'primary']:
self.showFullScreen() self.showFullScreen()
self.primary = False
else: else:
self.showMinimized() self.setVisible(False)
self.primary = True
#Build a custom splash screen #Build a custom splash screen
self.InitialFrame = QtGui.QImage( if str_to_bool(self.parent.generalConfig.get_config(u'show splash', u'True')):
screen[u'size'].width(), screen[u'size'].height(), self.InitialFrame = QtGui.QImage(
QtGui.QImage.Format_ARGB32_Premultiplied) screen[u'size'].width(), screen[u'size'].height(),
splash_image = QtGui.QImage(u':/graphics/openlp-splash-screen.png') QtGui.QImage.Format_ARGB32_Premultiplied)
painter_image = QtGui.QPainter() splash_image = QtGui.QImage(u':/graphics/openlp-splash-screen.png')
painter_image.begin(self.InitialFrame) painter_image = QtGui.QPainter()
painter_image.fillRect(self.InitialFrame.rect(), QtCore.Qt.white) painter_image.begin(self.InitialFrame)
painter_image.drawImage( painter_image.fillRect(self.InitialFrame.rect(), QtCore.Qt.white)
(screen[u'size'].width() - splash_image.width()) / 2, painter_image.drawImage(
(screen[u'size'].height() - splash_image.height()) / 2, (screen[u'size'].width() - splash_image.width()) / 2,
splash_image) (screen[u'size'].height() - splash_image.height()) / 2,
self.frameView(self.InitialFrame) splash_image)
self.frameView(self.InitialFrame)
#Build a Black screen #Build a Black screen
painter = QtGui.QPainter() painter = QtGui.QPainter()
self.blankFrame = QtGui.QImage( self.blankFrame = QtGui.QImage(
@ -107,6 +146,17 @@ class MainDisplay(QtGui.QWidget):
painter.begin(self.blankFrame) painter.begin(self.blankFrame)
painter.fillRect(self.blankFrame.rect(), QtCore.Qt.black) painter.fillRect(self.blankFrame.rect(), QtCore.Qt.black)
def resetDisplay(self):
if self.primary:
self.setVisible(False)
def hideDisplay(self):
self.setVisible(False)
def showDisplay(self):
if not self.primary:
self.setVisible(True)
def frameView(self, frame): def frameView(self, frame):
""" """
Called from a slide controller to display a frame Called from a slide controller to display a frame
@ -119,6 +169,9 @@ class MainDisplay(QtGui.QWidget):
self.displayAlert() self.displayAlert()
elif not self.displayBlank: elif not self.displayBlank:
self.display.setPixmap(QtGui.QPixmap.fromImage(frame)) self.display.setPixmap(QtGui.QPixmap.fromImage(frame))
if not self.isVisible():
self.setVisible(True)
self.showFullScreen()
def blankDisplay(self): def blankDisplay(self):
if not self.displayBlank: if not self.displayBlank:
@ -126,7 +179,8 @@ class MainDisplay(QtGui.QWidget):
self.display.setPixmap(QtGui.QPixmap.fromImage(self.blankFrame)) self.display.setPixmap(QtGui.QPixmap.fromImage(self.blankFrame))
else: else:
self.displayBlank = False self.displayBlank = False
self.frameView(self.frame) if self.frame is not None:
self.frameView(self.frame)
def displayAlert(self, text=u''): def displayAlert(self, text=u''):
""" """

View File

@ -107,9 +107,18 @@ class Ui_MainWindow(object):
self.MediaManagerDock = OpenLPDockWidget(MainWindow) self.MediaManagerDock = OpenLPDockWidget(MainWindow)
MediaManagerIcon = buildIcon(u':/system/system_mediamanager.png') MediaManagerIcon = buildIcon(u':/system/system_mediamanager.png')
self.MediaManagerDock.setWindowIcon(MediaManagerIcon) self.MediaManagerDock.setWindowIcon(MediaManagerIcon)
self.MediaManagerDock.setObjectName(u'MediaManagerDock') self.MediaManagerDock.setStyleSheet("""
QToolBox::tab {
background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 palette(light), stop: 1.0 palette(dark));
border: none;
border-radius: 5px;
margin: 0;
}
""")
self.MediaManagerDock.setMinimumWidth( self.MediaManagerDock.setMinimumWidth(
self.settingsmanager.mainwindow_left) self.settingsmanager.mainwindow_left)
self.MediaManagerDock.setObjectName(u'MediaManagerDock')
self.MediaManagerContents = QtGui.QWidget() self.MediaManagerContents = QtGui.QWidget()
self.MediaManagerContents.setObjectName(u'MediaManagerContents') self.MediaManagerContents.setObjectName(u'MediaManagerContents')
self.MediaManagerLayout = QtGui.QHBoxLayout(self.MediaManagerContents) self.MediaManagerLayout = QtGui.QHBoxLayout(self.MediaManagerContents)
@ -368,7 +377,7 @@ class Ui_MainWindow(object):
self.action_Preview_Panel.setStatusTip(translate(u'mainWindow', self.action_Preview_Panel.setStatusTip(translate(u'mainWindow',
u'Toggle the visibility of the Preview Panel')) u'Toggle the visibility of the Preview Panel'))
self.action_Preview_Panel.setShortcut(translate(u'mainWindow', u'F11')) self.action_Preview_Panel.setShortcut(translate(u'mainWindow', u'F11'))
self.ToolsAlertItem.setText(translate(u'mainWindow', u'Nursery &Alert')) self.ToolsAlertItem.setText(translate(u'mainWindow', u'&Alert'))
self.ToolsAlertItem.setStatusTip( self.ToolsAlertItem.setStatusTip(
translate(u'mainWindow', u'Show an alert message')) translate(u'mainWindow', u'Show an alert message'))
self.ToolsAlertItem.setShortcut(translate(u'mainWindow', u'F7')) self.ToolsAlertItem.setShortcut(translate(u'mainWindow', u'F7'))
@ -414,12 +423,11 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
plugins. plugins.
""" """
QtGui.QMainWindow.__init__(self) QtGui.QMainWindow.__init__(self)
self.closeEvent = self.onCloseEvent
self.screenList = screens self.screenList = screens
self.serviceNotSaved = False self.serviceNotSaved = False
self.settingsmanager = SettingsManager(screens) self.settingsmanager = SettingsManager(screens)
self.mainDisplay = MainDisplay(self, screens)
self.generalConfig = PluginConfig(u'General') self.generalConfig = PluginConfig(u'General')
self.mainDisplay = MainDisplay(self, screens)
self.alertForm = AlertForm(self) self.alertForm = AlertForm(self)
self.aboutForm = AboutForm(self) self.aboutForm = AboutForm(self)
self.settingsForm = SettingsForm(self.screenList, self) self.settingsForm = SettingsForm(self.screenList, self)
@ -593,7 +601,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
self.RenderManager.update_display(screen_number) self.RenderManager.update_display(screen_number)
self.mainDisplay.setup(screen_number) self.mainDisplay.setup(screen_number)
def onCloseEvent(self, event): def closeEvent(self, event):
""" """
Hook to close the main window and display windows on exit Hook to close the main window and display windows on exit
""" """

View File

@ -426,8 +426,10 @@ class ServiceManager(QtGui.QWidget):
files retrieved from the zip file are placed in a temporary directory files retrieved from the zip file are placed in a temporary directory
and will only be used for this service. and will only be used for this service.
""" """
filename = QtGui.QFileDialog.getOpenFileName(self, u'Open Service', filename = QtGui.QFileDialog.getOpenFileName(self,
self.config.get_last_dir(), u'Services (*.osz)') translate(u'ThemeManager', u'Open Service'),
self.config.get_last_dir(),
u'Services (*.osz)')
filename = unicode(filename) filename = unicode(filename)
name = filename.split(os.path.sep) name = filename.split(os.path.sep)
if filename != u'': if filename != u'':

View File

@ -27,6 +27,7 @@ import logging
from PyQt4 import QtGui from PyQt4 import QtGui
from openlp.core.ui import GeneralTab, ThemesTab, AlertsTab from openlp.core.ui import GeneralTab, ThemesTab, AlertsTab
from openlp.core.lib import Receiver
from settingsdialog import Ui_SettingsDialog from settingsdialog import Ui_SettingsDialog
log = logging.getLogger(u'SettingsForm') log = logging.getLogger(u'SettingsForm')
@ -64,6 +65,7 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog):
def accept(self): def accept(self):
for tab_index in range(0, self.SettingsTabWidget.count()): for tab_index in range(0, self.SettingsTabWidget.count()):
self.SettingsTabWidget.widget(tab_index).save() self.SettingsTabWidget.widget(tab_index).save()
Receiver().send_message(u'config_updated')
return QtGui.QDialog.accept(self) return QtGui.QDialog.accept(self)
def postSetUp(self): def postSetUp(self):

View File

@ -195,8 +195,14 @@ class SlideController(QtGui.QWidget):
Receiver().send_message(u'request_spin_delay') Receiver().send_message(u'request_spin_delay')
if isLive: if isLive:
self.Toolbar.makeWidgetsInvisible(self.image_list) self.Toolbar.makeWidgetsInvisible(self.image_list)
else: QtCore.QObject.connect(Receiver.get_receiver(),
pass QtCore.SIGNAL(u'slidecontroller_first'), self.onSlideSelectedFirst)
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'slidecontroller_next'), self.onSlideSelectedNext)
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'slidecontroller_previous'), self.onSlideSelectedPrevious)
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'slidecontroller_last'), self.onSlideSelectedLast)
def receiveSpinDelay(self, value): def receiveSpinDelay(self, value):
self.DelaySpinBox.setValue(int(value)) self.DelaySpinBox.setValue(int(value))
@ -319,7 +325,8 @@ class SlideController(QtGui.QWidget):
""" """
Go to the first slide. Go to the first slide.
""" """
if self.commandItem.service_item_type == ServiceType.Command: if self.commandItem is not None and \
self.commandItem.service_item_type == ServiceType.Command:
Receiver().send_message(u'%s_first'% self.commandItem.name.lower()) Receiver().send_message(u'%s_first'% self.commandItem.name.lower())
else: else:
self.PreviewListWidget.selectRow(0) self.PreviewListWidget.selectRow(0)
@ -329,12 +336,13 @@ class SlideController(QtGui.QWidget):
""" """
Blank the screen. Blank the screen.
""" """
if self.commandItem.service_item_type == ServiceType.Command: if self.commandItem is not None and \
self.commandItem.service_item_type == ServiceType.Command:
if blanked: if blanked:
Receiver().send_message(u'%s_blank'% self.commandItem.name.lower()) Receiver().send_message(u'%s_blank'% self.commandItem.name.lower())
else: else:
Receiver().send_message(u'%s_unblank'% self.commandItem.name.lower()) Receiver().send_message(u'%s_unblank'% self.commandItem.name.lower())
else: else:
self.parent.mainDisplay.blankDisplay() self.parent.mainDisplay.blankDisplay()
def onSlideSelected(self): def onSlideSelected(self):
@ -345,7 +353,7 @@ class SlideController(QtGui.QWidget):
row = self.PreviewListWidget.currentRow() row = self.PreviewListWidget.currentRow()
if row > -1 and row < self.PreviewListWidget.rowCount(): if row > -1 and row < self.PreviewListWidget.rowCount():
if self.commandItem.service_item_type == ServiceType.Command: if self.commandItem.service_item_type == ServiceType.Command:
Receiver().send_message(u'%s_slide'% self.commandItem.name.lower(), [row]) Receiver().send_message(u'%s_slide'% self.commandItem.name.lower(), [row])
else: else:
#label = self.PreviewListWidget.cellWidget(row, 0) #label = self.PreviewListWidget.cellWidget(row, 0)
frame = self.serviceitem.frames[row][u'image'] frame = self.serviceitem.frames[row][u'image']
@ -361,7 +369,8 @@ class SlideController(QtGui.QWidget):
""" """
Go to the next slide. Go to the next slide.
""" """
if self.commandItem.service_item_type == ServiceType.Command: if self.commandItem is not None and \
self.commandItem.service_item_type == ServiceType.Command:
Receiver().send_message(u'%s_next'% self.commandItem.name.lower()) Receiver().send_message(u'%s_next'% self.commandItem.name.lower())
else: else:
row = self.PreviewListWidget.currentRow() + 1 row = self.PreviewListWidget.currentRow() + 1
@ -374,7 +383,8 @@ class SlideController(QtGui.QWidget):
""" """
Go to the previous slide. Go to the previous slide.
""" """
if self.commandItem.service_item_type == ServiceType.Command: if self.commandItem is not None and \
self.commandItem.service_item_type == ServiceType.Command:
Receiver().send_message( Receiver().send_message(
u'%s_previous'% self.commandItem.name.lower()) u'%s_previous'% self.commandItem.name.lower())
else: else:
@ -388,7 +398,8 @@ class SlideController(QtGui.QWidget):
""" """
Go to the last slide. Go to the last slide.
""" """
if self.commandItem.service_item_type == ServiceType.Command: if self.commandItem is not None and \
self.commandItem.service_item_type == ServiceType.Command:
Receiver().send_message(u'%s_last'% self.commandItem.name.lower()) Receiver().send_message(u'%s_last'% self.commandItem.name.lower())
else: else:
self.PreviewListWidget.selectRow(self.PreviewListWidget.rowCount() - 1) self.PreviewListWidget.selectRow(self.PreviewListWidget.rowCount() - 1)

View File

@ -224,13 +224,14 @@ class ThemeManager(QtGui.QWidget):
zip.close() zip.close()
def onImportTheme(self): def onImportTheme(self):
files = QtGui.QFileDialog.getOpenFileNames(None, files = QtGui.QFileDialog.getOpenFileNames(self,
translate(u'ThemeManager', translate(u'ThemeManager', u'Select Theme Import File'),
u'Select Theme Import File'), self.config.get_last_dir(),
self.path, u'Theme (*.*)') u'Theme (*.*)')
log.info(u'New Themes %s', unicode(files)) log.info(u'New Themes %s', unicode(files))
if len(files) > 0: if len(files) > 0:
for file in files: for file in files:
self.config.set_last_dir(filename)
self.unzipTheme(file, self.path) self.unzipTheme(file, self.path)
self.loadThemes() self.loadThemes()

View File

@ -44,7 +44,7 @@ def check_latest_version(config, current_version):
req = urllib2.Request(u'http://www.openlp.org/files/version.txt') req = urllib2.Request(u'http://www.openlp.org/files/version.txt')
req.add_header(u'User-Agent', u'OpenLP%s' % current_version) req.add_header(u'User-Agent', u'OpenLP%s' % current_version)
try: try:
handle = urllib2.urlopen(req, None, 1) handle = urllib2.urlopen(req, None)
html = handle.read() html = handle.read()
version_string = unicode(html).rstrip() version_string = unicode(html).rstrip()
except IOError, e: except IOError, e:

View File

@ -41,7 +41,6 @@ class BiblesTab(SettingsTab):
self.paragraph_style = True self.paragraph_style = True
self.show_new_chapters = False self.show_new_chapters = False
self.display_style = 0 self.display_style = 0
self.bible_search = True
SettingsTab.__init__( SettingsTab.__init__(
self, translate(u'BiblesTab', u'Bibles'), u'Bibles') self, translate(u'BiblesTab', u'Bibles'), u'Bibles')
@ -98,7 +97,6 @@ class BiblesTab(SettingsTab):
self.LayoutStyleComboBox.addItem(QtCore.QString()) self.LayoutStyleComboBox.addItem(QtCore.QString())
self.LayoutStyleLayout.addWidget(self.LayoutStyleComboBox) self.LayoutStyleLayout.addWidget(self.LayoutStyleComboBox)
self.VerseDisplayLayout.addWidget(self.LayoutStyleWidget, 2, 0, 1, 1) self.VerseDisplayLayout.addWidget(self.LayoutStyleWidget, 2, 0, 1, 1)
self.BibleThemeWidget = QtGui.QWidget(self.VerseDisplayGroupBox) self.BibleThemeWidget = QtGui.QWidget(self.VerseDisplayGroupBox)
self.BibleThemeWidget.setObjectName(u'BibleThemeWidget') self.BibleThemeWidget.setObjectName(u'BibleThemeWidget')
self.BibleThemeLayout = QtGui.QHBoxLayout(self.BibleThemeWidget) self.BibleThemeLayout = QtGui.QHBoxLayout(self.BibleThemeWidget)
@ -112,10 +110,13 @@ class BiblesTab(SettingsTab):
self.BibleThemeComboBox.setObjectName(u'BibleThemeComboBox') self.BibleThemeComboBox.setObjectName(u'BibleThemeComboBox')
self.BibleThemeComboBox.addItem(QtCore.QString()) self.BibleThemeComboBox.addItem(QtCore.QString())
self.BibleThemeLayout.addWidget(self.BibleThemeComboBox) self.BibleThemeLayout.addWidget(self.BibleThemeComboBox)
self.VerseDisplayLayout.addWidget(self.BibleThemeWidget, 3, 0, 1, 1) self.BibleDuelCheckBox = QtGui.QCheckBox(self.VerseDisplayGroupBox)
self.BibleDuelCheckBox.setObjectName(u'BibleDuelCheckBox')
self.VerseDisplayLayout.addWidget(self.BibleDuelCheckBox, 3, 0, 1, 1)
self.VerseDisplayLayout.addWidget(self.BibleThemeWidget, 4, 0, 1, 1)
self.ChangeNoteLabel = QtGui.QLabel(self.VerseDisplayGroupBox) self.ChangeNoteLabel = QtGui.QLabel(self.VerseDisplayGroupBox)
self.ChangeNoteLabel.setObjectName(u'ChangeNoteLabel') self.ChangeNoteLabel.setObjectName(u'ChangeNoteLabel')
self.VerseDisplayLayout.addWidget(self.ChangeNoteLabel, 4, 0, 1, 1) self.VerseDisplayLayout.addWidget(self.ChangeNoteLabel, 5, 0, 1, 1)
self.BibleLeftLayout.addWidget(self.VerseDisplayGroupBox) self.BibleLeftLayout.addWidget(self.VerseDisplayGroupBox)
self.BibleLeftSpacer = QtGui.QSpacerItem(40, 20, self.BibleLeftSpacer = QtGui.QSpacerItem(40, 20,
QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
@ -127,27 +128,11 @@ class BiblesTab(SettingsTab):
self.BibleRightLayout.setObjectName(u'BibleRightLayout') self.BibleRightLayout.setObjectName(u'BibleRightLayout')
self.BibleRightLayout.setSpacing(8) self.BibleRightLayout.setSpacing(8)
self.BibleRightLayout.setMargin(0) self.BibleRightLayout.setMargin(0)
self.BibleSearchGroupBox = QtGui.QGroupBox(self)
self.BibleSearchGroupBox.setObjectName(u'BibleSearchGroupBox')
self.BibleSearchLayout = QtGui.QVBoxLayout(self.BibleSearchGroupBox)
self.BibleSearchLayout.setObjectName(u'BibleSearchLayout')
self.BibleSearchLayout.setSpacing(8)
self.BibleSearchLayout.setMargin(8)
self.BibleSearchCheckBox = QtGui.QCheckBox(self.BibleSearchGroupBox)
self.BibleSearchCheckBox.setObjectName(u'BibleSearchCheckBox')
self.BibleSearchLayout.addWidget(self.BibleSearchCheckBox)
self.BibleRightLayout.addWidget(self.BibleSearchGroupBox)
self.BibleRightSpacer = QtGui.QSpacerItem(40, 20,
QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
self.BibleRightLayout.addItem(self.BibleRightSpacer)
self.BibleLayout.addWidget(self.BibleRightWidget) self.BibleLayout.addWidget(self.BibleRightWidget)
# Signals and slots # Signals and slots
QtCore.QObject.connect(self.NewChaptersCheckBox, QtCore.QObject.connect(self.NewChaptersCheckBox,
QtCore.SIGNAL(u'stateChanged(int)'), QtCore.SIGNAL(u'stateChanged(int)'),
self.onNewChaptersCheckBoxChanged) self.onNewChaptersCheckBoxChanged)
QtCore.QObject.connect(self.BibleSearchCheckBox,
QtCore.SIGNAL(u'stateChanged(int)'),
self.onBibleSearchCheckBoxChanged)
QtCore.QObject.connect(self.DisplayStyleComboBox, QtCore.QObject.connect(self.DisplayStyleComboBox,
QtCore.SIGNAL(u'activated(int)'), QtCore.SIGNAL(u'activated(int)'),
self.onDisplayStyleComboBoxChanged) self.onDisplayStyleComboBoxChanged)
@ -156,6 +141,9 @@ class BiblesTab(SettingsTab):
QtCore.QObject.connect(self.LayoutStyleComboBox, QtCore.QObject.connect(self.LayoutStyleComboBox,
QtCore.SIGNAL(u'activated(int)'), QtCore.SIGNAL(u'activated(int)'),
self.onLayoutStyleComboBoxChanged) self.onLayoutStyleComboBoxChanged)
QtCore.QObject.connect(self.BibleDuelCheckBox,
QtCore.SIGNAL(u'stateChanged(int)'),
self.onBibleDuelCheckBox)
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'update_themes'), self.updateThemeList) QtCore.SIGNAL(u'update_themes'), self.updateThemeList)
@ -186,10 +174,8 @@ class BiblesTab(SettingsTab):
3, translate(u'SettingsForm', u'[ and ]')) 3, translate(u'SettingsForm', u'[ and ]'))
self.ChangeNoteLabel.setText(translate(u'SettingsForm', self.ChangeNoteLabel.setText(translate(u'SettingsForm',
u'Note:\nChanges don\'t affect verses already in the service')) u'Note:\nChanges don\'t affect verses already in the service'))
self.BibleSearchGroupBox.setTitle( self.BibleDuelCheckBox.setText(
translate(u'SettingsForm', u'Search')) translate(u'SettingsForm', u'Display Duel Bible Verses'))
self.BibleSearchCheckBox.setText(
translate(u'SettingsForm', u'Search-as-you-type'))
def onBibleThemeComboBoxChanged(self): def onBibleThemeComboBoxChanged(self):
self.bible_theme = self.BibleThemeComboBox.currentText() self.bible_theme = self.BibleThemeComboBox.currentText()
@ -200,19 +186,17 @@ class BiblesTab(SettingsTab):
def onLayoutStyleComboBoxChanged(self): def onLayoutStyleComboBoxChanged(self):
self.layout_style = self.LayoutStyleComboBox.currentIndex() self.layout_style = self.LayoutStyleComboBox.currentIndex()
def onNewChaptersCheckBoxChanged(self): def onNewChaptersCheckBoxChanged(self, check_state):
check_state = self.NewChaptersCheckBox.checkState()
self.show_new_chapters = False self.show_new_chapters = False
# we have a set value convert to True/False # we have a set value convert to True/False
if check_state == QtCore.Qt.Checked: if check_state == QtCore.Qt.Checked:
self.show_new_chapters = True self.show_new_chapters = True
def onBibleSearchCheckBoxChanged(self): def onBibleDuelCheckBox(self, check_state):
check_state = self.BibleSearchCheckBox.checkState() self.duel_bibles = False
self.bible_search = False
# we have a set value convert to True/False # we have a set value convert to True/False
if check_state == QtCore.Qt.Checked: if check_state == QtCore.Qt.Checked:
self.bible_search = True self.duel_bibles = True
def load(self): def load(self):
self.show_new_chapters = str_to_bool( self.show_new_chapters = str_to_bool(
@ -222,12 +206,12 @@ class BiblesTab(SettingsTab):
self.layout_style = int( self.layout_style = int(
self.config.get_config(u'verse layout style', u'0')) self.config.get_config(u'verse layout style', u'0'))
self.bible_theme = self.config.get_config(u'bible theme', u'0') self.bible_theme = self.config.get_config(u'bible theme', u'0')
self.bible_search = str_to_bool( self.duel_bibles = str_to_bool(
self.config.get_config(u'search as type', u'True')) self.config.get_config(u'duel bibles', u'True'))
self.NewChaptersCheckBox.setChecked(self.show_new_chapters) self.NewChaptersCheckBox.setChecked(self.show_new_chapters)
self.DisplayStyleComboBox.setCurrentIndex(self.display_style) self.DisplayStyleComboBox.setCurrentIndex(self.display_style)
self.LayoutStyleComboBox.setCurrentIndex(self.layout_style) self.LayoutStyleComboBox.setCurrentIndex(self.layout_style)
self.BibleSearchCheckBox.setChecked(self.bible_search) self.BibleDuelCheckBox.setChecked(self.duel_bibles)
def save(self): def save(self):
self.config.set_config( self.config.set_config(
@ -236,7 +220,7 @@ class BiblesTab(SettingsTab):
u'display brackets', unicode(self.display_style)) u'display brackets', unicode(self.display_style))
self.config.set_config( self.config.set_config(
u'verse layout style', unicode(self.layout_style)) u'verse layout style', unicode(self.layout_style))
self.config.set_config(u'search as type', unicode(self.bible_search)) self.config.set_config(u'duel bibles', unicode(self.duel_bibles))
self.config.set_config(u'bible theme', unicode(self.bible_theme)) self.config.set_config(u'bible theme', unicode(self.bible_theme))
def updateThemeList(self, theme_list): def updateThemeList(self, theme_list):

View File

@ -28,7 +28,7 @@ import time
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from openlp.core.lib import translate, MediaManagerItem, Receiver, \ from openlp.core.lib import translate, MediaManagerItem, Receiver, \
BaseListWithDnD BaseListWithDnD, str_to_bool
from openlp.plugins.bibles.forms import BibleImportForm from openlp.plugins.bibles.forms import BibleImportForm
from openlp.plugins.bibles.lib.manager import BibleMode from openlp.plugins.bibles.lib.manager import BibleMode
@ -80,7 +80,7 @@ class BibleMediaItem(MediaManagerItem):
self.QuickVerticalLayout = QtGui.QVBoxLayout(self.QuickTab) self.QuickVerticalLayout = QtGui.QVBoxLayout(self.QuickTab)
self.QuickVerticalLayout.setObjectName("verticalLayout") self.QuickVerticalLayout.setObjectName("verticalLayout")
self.QuickLayout = QtGui.QGridLayout() self.QuickLayout = QtGui.QGridLayout()
self.QuickLayout.setMargin(5) self.QuickLayout.setMargin(0)
self.QuickLayout.setSpacing(4) self.QuickLayout.setSpacing(4)
self.QuickLayout.setObjectName(u'QuickLayout') self.QuickLayout.setObjectName(u'QuickLayout')
self.QuickVersionLabel = QtGui.QLabel(self.QuickTab) self.QuickVersionLabel = QtGui.QLabel(self.QuickTab)
@ -127,7 +127,7 @@ class BibleMediaItem(MediaManagerItem):
self.AdvancedVerticalLayout = QtGui.QVBoxLayout(self.AdvancedTab) self.AdvancedVerticalLayout = QtGui.QVBoxLayout(self.AdvancedTab)
self.AdvancedVerticalLayout.setObjectName("verticalLayout") self.AdvancedVerticalLayout.setObjectName("verticalLayout")
self.AdvancedLayout = QtGui.QGridLayout() self.AdvancedLayout = QtGui.QGridLayout()
self.AdvancedLayout.setMargin(5) self.AdvancedLayout.setMargin(0)
self.AdvancedLayout.setSpacing(4) self.AdvancedLayout.setSpacing(4)
self.AdvancedLayout.setObjectName(u'AdvancedLayout') self.AdvancedLayout.setObjectName(u'AdvancedLayout')
self.AdvancedVersionLabel = QtGui.QLabel(self.AdvancedTab) self.AdvancedVersionLabel = QtGui.QLabel(self.AdvancedTab)
@ -173,10 +173,10 @@ class BibleMediaItem(MediaManagerItem):
self.ClearAdvancedSearchComboBox.setObjectName( self.ClearAdvancedSearchComboBox.setObjectName(
u'ClearAdvancedSearchComboBox') u'ClearAdvancedSearchComboBox')
self.AdvancedLayout.addWidget( self.AdvancedLayout.addWidget(
self.ClearAdvancedSearchComboBox, 5, 2, 1, 1) self.ClearAdvancedSearchComboBox, 5, 2, 1, 2)
self.AdvancedSearchButton = QtGui.QPushButton(self.AdvancedTab) self.AdvancedSearchButton = QtGui.QPushButton(self.AdvancedTab)
self.AdvancedSearchButton.setObjectName(u'AdvancedSearchButton') self.AdvancedSearchButton.setObjectName(u'AdvancedSearchButton')
self.AdvancedLayout.addWidget(self.AdvancedSearchButton, 5, 3, 1, 1) self.AdvancedLayout.addWidget(self.AdvancedSearchButton, 6, 3, 1, 1)
self.AdvancedVerticalLayout.addLayout(self.AdvancedLayout) self.AdvancedVerticalLayout.addLayout(self.AdvancedLayout)
self.AdvancedSecondBibleComboBox = QtGui.QComboBox(self.AdvancedTab) self.AdvancedSecondBibleComboBox = QtGui.QComboBox(self.AdvancedTab)
self.AdvancedSecondBibleComboBox.setObjectName(u'SecondBible') self.AdvancedSecondBibleComboBox.setObjectName(u'SecondBible')
@ -203,6 +203,17 @@ class BibleMediaItem(MediaManagerItem):
QtCore.SIGNAL(u'pressed()'), self.onAdvancedSearchButton) QtCore.SIGNAL(u'pressed()'), self.onAdvancedSearchButton)
QtCore.QObject.connect(self.QuickSearchButton, QtCore.QObject.connect(self.QuickSearchButton,
QtCore.SIGNAL(u'pressed()'), self.onQuickSearchButton) QtCore.SIGNAL(u'pressed()'), self.onQuickSearchButton)
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'config_updated'), self.configUpdated)
def configUpdated(self):
if str_to_bool(
self.parent.config.get_config(u'duel bibles', u'False')):
self.AdvancedSecondBibleComboBox.setVisible(True)
self.QuickSecondBibleComboBox.setVisible(True)
else:
self.AdvancedSecondBibleComboBox.setVisible(False)
self.QuickSecondBibleComboBox.setVisible(False)
def retranslateUi(self): def retranslateUi(self):
log.debug(u'retranslateUi') log.debug(u'retranslateUi')
@ -242,6 +253,7 @@ class BibleMediaItem(MediaManagerItem):
log.debug(u'bible manager initialise') log.debug(u'bible manager initialise')
self.loadBibles() self.loadBibles()
self.parent.biblemanager.set_media_manager(self) self.parent.biblemanager.set_media_manager(self)
self.configUpdated()
log.debug(u'bible manager initialise complete') log.debug(u'bible manager initialise complete')
def setQuickMessage(self, text): def setQuickMessage(self, text):

View File

@ -27,7 +27,7 @@ import logging
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from openlp.core.lib import MediaManagerItem, translate, SongXMLParser, \ from openlp.core.lib import MediaManagerItem, translate, SongXMLParser, \
BaseListWithDnD, Receiver BaseListWithDnD, Receiver, str_to_bool
from openlp.plugins.songs.forms import EditSongForm, SongMaintenanceForm from openlp.plugins.songs.forms import EditSongForm, SongMaintenanceForm
class SongListView(BaseListWithDnD): class SongListView(BaseListWithDnD):
@ -68,42 +68,48 @@ class SongMediaItem(MediaManagerItem):
u'Maintain the lists of authors, topics and books'), u'Maintain the lists of authors, topics and books'),
':/songs/song_maintenance.png', self.onSongMaintenanceClick, ':/songs/song_maintenance.png', self.onSongMaintenanceClick,
'SongMaintenanceItem') 'SongMaintenanceItem')
## Add the SongListView widget ## self.SearchLayout = QtGui.QFormLayout()
# Create the tab widget self.SearchLayout.setMargin(0)
self.SongWidget = QtGui.QWidget(self)
sizePolicy = QtGui.QSizePolicy(
QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(
self.SongWidget.sizePolicy().hasHeightForWidth())
self.SongWidget.setSizePolicy(sizePolicy)
self.SongWidget.setObjectName(u'SongWidget')
self.SearchLayout = QtGui.QGridLayout(self.SongWidget)
self.SearchLayout.setMargin(5)
self.SearchLayout.setSpacing(4) self.SearchLayout.setSpacing(4)
self.SearchLayout.setObjectName(u'SearchLayout') self.SearchLayout.setObjectName(u'SearchLayout')
self.SearchTypeComboBox = QtGui.QComboBox(self.SongWidget) self.SearchTextLabel = QtGui.QLabel(self)
self.SearchTypeComboBox.setObjectName(u'SearchTypeComboBox') self.SearchTextLabel.setAlignment(
self.SearchLayout.addWidget(self.SearchTypeComboBox, 0, 1, 1, 2) QtCore.Qt.AlignBottom|QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft)
self.SearchTypeLabel = QtGui.QLabel(self.SongWidget)
self.SearchTypeLabel.setObjectName(u'SearchTypeLabel')
self.SearchLayout.addWidget(self.SearchTypeLabel, 0, 0, 1, 1)
self.SearchTextLabel = QtGui.QLabel(self.SongWidget)
self.SearchTextLabel.setObjectName(u'SearchTextLabel') self.SearchTextLabel.setObjectName(u'SearchTextLabel')
self.SearchLayout.addWidget(self.SearchTextLabel, 2, 0, 1, 1) self.SearchLayout.setWidget(
self.SearchTextEdit = QtGui.QLineEdit(self.SongWidget) 0, QtGui.QFormLayout.LabelRole, self.SearchTextLabel)
self.SearchTextEdit = QtGui.QLineEdit(self)
self.SearchTextEdit.setObjectName(u'SearchTextEdit') self.SearchTextEdit.setObjectName(u'SearchTextEdit')
self.SearchLayout.addWidget(self.SearchTextEdit, 2, 1, 1, 2) self.SearchLayout.setWidget(
self.ClearTextButton = QtGui.QPushButton(self.SongWidget) 0, QtGui.QFormLayout.FieldRole, self.SearchTextEdit)
self.ClearTextButton.setObjectName(u'ClearTextButton') self.SearchTypeLabel = QtGui.QLabel(self)
self.SearchLayout.addWidget(self.ClearTextButton, 3, 1, 1, 1) self.SearchTypeLabel.setAlignment(
self.SearchTextButton = QtGui.QPushButton(self.SongWidget) QtCore.Qt.AlignBottom|QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft)
self.SearchTypeLabel.setObjectName(u'SearchTypeLabel')
self.SearchLayout.setWidget(
1, QtGui.QFormLayout.LabelRole, self.SearchTypeLabel)
self.SearchTypeComboBox = QtGui.QComboBox(self)
self.SearchTypeComboBox.setObjectName(u'SearchTypeComboBox')
self.SearchLayout.setWidget(
1, QtGui.QFormLayout.FieldRole, self.SearchTypeComboBox)
self.PageLayout.addLayout(self.SearchLayout)
self.SearchButtonLayout = QtGui.QHBoxLayout(self)
self.SearchButtonLayout.setMargin(0)
self.SearchButtonLayout.setSpacing(4)
self.SearchButtonLayout.setObjectName(u'SearchButtonLayout')
self.SearchButtonSpacer = QtGui.QSpacerItem(40, 20,
QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
self.SearchButtonLayout.addItem(self.SearchButtonSpacer)
self.SearchTextButton = QtGui.QPushButton(self)
self.SearchTextButton.setObjectName(u'SearchTextButton') self.SearchTextButton.setObjectName(u'SearchTextButton')
self.SearchLayout.addWidget(self.SearchTextButton, 3, 2, 1, 1) self.SearchButtonLayout.addWidget(self.SearchTextButton)
# Add the song widget to the page layout self.ClearTextButton = QtGui.QPushButton(self)
self.PageLayout.addWidget(self.SongWidget) self.ClearTextButton.setObjectName(u'ClearTextButton')
self.SearchButtonLayout.addWidget(self.ClearTextButton)
self.PageLayout.addLayout(self.SearchButtonLayout)
# Signals and slots # Signals and slots
QtCore.QObject.connect(self.SearchTextEdit,
QtCore.SIGNAL(u'returnPressed()'), self.onSearchTextButtonClick)
QtCore.QObject.connect(self.SearchTextButton, QtCore.QObject.connect(self.SearchTextButton,
QtCore.SIGNAL(u'pressed()'), self.onSearchTextButtonClick) QtCore.SIGNAL(u'pressed()'), self.onSearchTextButtonClick)
QtCore.QObject.connect(self.ClearTextButton, QtCore.QObject.connect(self.ClearTextButton,
@ -113,12 +119,16 @@ class SongMediaItem(MediaManagerItem):
self.onSearchTextEditChanged) self.onSearchTextEditChanged)
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'load_song_list'), self.onSearchTextButtonClick) QtCore.SIGNAL(u'load_song_list'), self.onSearchTextButtonClick)
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'config_updated'), self.configUpdated)
def configUpdated(self):
self.searchAsYouType = str_to_bool(
self.parent.config.get_config(u'search as type', u'False'))
def retranslateUi(self): def retranslateUi(self):
self.SearchTypeLabel.setText( self.SearchTextLabel.setText(translate(u'SongMediaItem', u'Search:'))
translate(u'SongMediaItem', u'Search Type:')) self.SearchTypeLabel.setText(translate(u'SongMediaItem', u'Type:'))
self.SearchTextLabel.setText(
translate(u'SongMediaItem', u'Search Text:'))
self.ClearTextButton.setText(translate(u'SongMediaItem', u'Clear')) self.ClearTextButton.setText(translate(u'SongMediaItem', u'Clear'))
self.SearchTextButton.setText(translate(u'SongMediaItem', u'Search')) self.SearchTextButton.setText(translate(u'SongMediaItem', u'Search'))
@ -126,6 +136,7 @@ class SongMediaItem(MediaManagerItem):
self.SearchTypeComboBox.addItem(translate(u'SongMediaItem', u'Titles')) self.SearchTypeComboBox.addItem(translate(u'SongMediaItem', u'Titles'))
self.SearchTypeComboBox.addItem(translate(u'SongMediaItem', u'Lyrics')) self.SearchTypeComboBox.addItem(translate(u'SongMediaItem', u'Lyrics'))
self.SearchTypeComboBox.addItem(translate(u'SongMediaItem', u'Authors')) self.SearchTypeComboBox.addItem(translate(u'SongMediaItem', u'Authors'))
self.configUpdated()
def onSearchTextButtonClick(self): def onSearchTextButtonClick(self):
search_keywords = unicode(self.SearchTextEdit.displayText()) search_keywords = unicode(self.SearchTextEdit.displayText())
@ -181,11 +192,12 @@ class SongMediaItem(MediaManagerItem):
self.SearchTextEdit.clear() self.SearchTextEdit.clear()
def onSearchTextEditChanged(self, text): def onSearchTextEditChanged(self, text):
search_length = 1 if self.searchAsYouType:
if self.SearchTypeComboBox.currentIndex() == 1: search_length = 1
search_length = 7 if self.SearchTypeComboBox.currentIndex() == 1:
if len(text) > search_length: search_length = 7
self.onSearchTextButtonClick() if len(text) > search_length:
self.onSearchTextButtonClick()
def onNewClick(self): def onNewClick(self):
self.edit_song_form.newSong() self.edit_song_form.newSong()

View File

@ -22,14 +22,51 @@
# Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Temple Place, Suite 330, Boston, MA 02111-1307 USA #
############################################################################### ###############################################################################
from openlp.core.lib import SettingsTab, translate from PyQt4 import QtCore, QtGui
from openlp.core.lib import SettingsTab, str_to_bool, translate
class SongsTab(SettingsTab): class SongsTab(SettingsTab):
""" """
SongsTab is the songs settings tab in the settings dialog. SongsTab is the Songs settings tab in the settings dialog.
""" """
def __init__(self): def __init__(self):
SettingsTab.__init__(self, translate(u'SongsTab', u'Songs'), u'Songs') SettingsTab.__init__(self, translate(u'SongsTab', u'Songs'), u'Songs')
def setupUi(self): def setupUi(self):
self.setObjectName(u'SongsTab') self.setObjectName(u'SongsTab')
self.SongsLayout = QtGui.QFormLayout(self)
self.SongsLayout.setObjectName(u'SongsLayout')
self.SongsModeGroupBox = QtGui.QGroupBox(self)
self.SongsModeGroupBox.setObjectName(u'SongsModeGroupBox')
self.SongsModeLayout = QtGui.QVBoxLayout(self.SongsModeGroupBox)
self.SongsModeLayout.setSpacing(8)
self.SongsModeLayout.setMargin(8)
self.SongsModeLayout.setObjectName(u'SongsModeLayout')
self.SearchAsTypeCheckBox = QtGui.QCheckBox(self.SongsModeGroupBox)
self.SearchAsTypeCheckBox.setObjectName(u'SearchAsTypeCheckBox')
self.SongsModeLayout.addWidget(self.SearchAsTypeCheckBox)
self.SongsLayout.setWidget(
0, QtGui.QFormLayout.LabelRole, self.SongsModeGroupBox)
QtCore.QObject.connect(self.SearchAsTypeCheckBox,
QtCore.SIGNAL(u'stateChanged(int)'),
self.onSearchAsTypeCheckBoxChanged)
def retranslateUi(self):
self.SongsModeGroupBox.setTitle(translate(u'SongsTab', u'Songs Mode'))
self.SearchAsTypeCheckBox.setText(
translate(u'SongsTab', u'Enable search as you type:'))
def onSearchAsTypeCheckBoxChanged(self, check_state):
self.bible_search = False
# we have a set value convert to True/False
if check_state == QtCore.Qt.Checked:
self.bible_search = True
def load(self):
self.bible_search = str_to_bool(
self.config.get_config(u'search as type', u'False'))
self.SearchAsTypeCheckBox.setChecked(self.bible_search)
def save(self):
self.config.set_config(u'search as type', unicode(self.bible_search))

View File

@ -27,7 +27,7 @@ import logging
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from openlp.core.lib import Plugin, translate, buildIcon from openlp.core.lib import Plugin, translate, buildIcon
from openlp.plugins.songs.lib import SongManager, SongMediaItem from openlp.plugins.songs.lib import SongManager, SongMediaItem, SongsTab
from openlp.plugins.songs.forms import OpenLPImportForm, OpenSongExportForm, \ from openlp.plugins.songs.forms import OpenLPImportForm, OpenSongExportForm, \
OpenSongImportForm, OpenLPExportForm OpenSongImportForm, OpenLPExportForm
@ -62,6 +62,9 @@ class SongsPlugin(Plugin):
def can_be_disabled(self): def can_be_disabled(self):
return True return True
def get_settings_tab(self):
return SongsTab()
def initialise(self): def initialise(self):
log.info(u'Songs Initialising') log.info(u'Songs Initialising')
#if self.songmanager is None: #if self.songmanager is None: