From 0f54bb81e75fbb8c9c6699f7a94f8a47920c4b42 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Fri, 16 Oct 2009 05:46:32 +0100 Subject: [PATCH 01/11] Save Theme import directory --- openlp/core/ui/servicemanager.py | 6 ++++-- openlp/core/ui/thememanager.py | 9 +++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index b011b8fca..29a0acf06 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -426,8 +426,10 @@ class ServiceManager(QtGui.QWidget): files retrieved from the zip file are placed in a temporary directory and will only be used for this service. """ - filename = QtGui.QFileDialog.getOpenFileName(self, u'Open Service', - self.config.get_last_dir(), u'Services (*.osz)') + filename = QtGui.QFileDialog.getOpenFileName(self, + translate(u'ThemeManager', u'Open Service'), + self.config.get_last_dir(), + u'Services (*.osz)') filename = unicode(filename) name = filename.split(os.path.sep) if filename != u'': diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index e725f755d..9ac09c839 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -224,13 +224,14 @@ class ThemeManager(QtGui.QWidget): zip.close() def onImportTheme(self): - files = QtGui.QFileDialog.getOpenFileNames(None, - translate(u'ThemeManager', - u'Select Theme Import File'), - self.path, u'Theme (*.*)') + files = QtGui.QFileDialog.getOpenFileNames(self, + translate(u'ThemeManager', u'Select Theme Import File'), + self.config.get_last_dir(), + u'Theme (*.*)') log.info(u'New Themes %s', unicode(files)) if len(files) > 0: for file in files: + self.config.set_last_dir(filename) self.unzipTheme(file, self.path) self.loadThemes() From cbb17039d5ddef041f003027a099ba4e96874598 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Fri, 16 Oct 2009 19:22:14 +0100 Subject: [PATCH 02/11] Fix missing serviceitem handling --- openlp/core/ui/slidecontroller.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 6227a29a6..1f4e47ce3 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -331,12 +331,13 @@ class SlideController(QtGui.QWidget): """ 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: Receiver().send_message(u'%s_blank'% self.commandItem.name.lower()) else: Receiver().send_message(u'%s_unblank'% self.commandItem.name.lower()) - else: + else: self.parent.mainDisplay.blankDisplay() def onSlideSelected(self): @@ -347,7 +348,7 @@ class SlideController(QtGui.QWidget): row = self.PreviewListWidget.currentRow() if row > -1 and row < self.PreviewListWidget.rowCount(): 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: #label = self.PreviewListWidget.cellWidget(row, 0) frame = self.serviceitem.frames[row][u'image'] From a35d205cea4958a8a8ddd00021eee5eadbe0b36d Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Fri, 16 Oct 2009 20:41:41 +0200 Subject: [PATCH 03/11] Reducing spacing on media manager items. --- openlp/core/lib/mediamanageritem.py | 2 +- openlp/plugins/bibles/lib/mediaitem.py | 8 +-- openlp/plugins/songs/lib/mediaitem.py | 72 ++++++++++++++------------ 3 files changed, 43 insertions(+), 39 deletions(-) diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py index 2e151ebf4..9c54e05e1 100644 --- a/openlp/core/lib/mediamanageritem.py +++ b/openlp/core/lib/mediamanageritem.py @@ -113,7 +113,7 @@ class MediaManagerItem(QtGui.QWidget): self.title = title self.Toolbar = None self.PageLayout = QtGui.QVBoxLayout(self) - self.PageLayout.setSpacing(0) + self.PageLayout.setSpacing(4) self.PageLayout.setMargin(0) self.requiredIcons() self.setupUi() diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index 462e3c34a..e0725ea67 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -80,7 +80,7 @@ class BibleMediaItem(MediaManagerItem): self.QuickVerticalLayout = QtGui.QVBoxLayout(self.QuickTab) self.QuickVerticalLayout.setObjectName("verticalLayout") self.QuickLayout = QtGui.QGridLayout() - self.QuickLayout.setMargin(5) + self.QuickLayout.setMargin(0) self.QuickLayout.setSpacing(4) self.QuickLayout.setObjectName(u'QuickLayout') self.QuickVersionLabel = QtGui.QLabel(self.QuickTab) @@ -127,7 +127,7 @@ class BibleMediaItem(MediaManagerItem): self.AdvancedVerticalLayout = QtGui.QVBoxLayout(self.AdvancedTab) self.AdvancedVerticalLayout.setObjectName("verticalLayout") self.AdvancedLayout = QtGui.QGridLayout() - self.AdvancedLayout.setMargin(5) + self.AdvancedLayout.setMargin(0) self.AdvancedLayout.setSpacing(4) self.AdvancedLayout.setObjectName(u'AdvancedLayout') self.AdvancedVersionLabel = QtGui.QLabel(self.AdvancedTab) @@ -173,10 +173,10 @@ class BibleMediaItem(MediaManagerItem): self.ClearAdvancedSearchComboBox.setObjectName( u'ClearAdvancedSearchComboBox') self.AdvancedLayout.addWidget( - self.ClearAdvancedSearchComboBox, 5, 2, 1, 1) + self.ClearAdvancedSearchComboBox, 5, 2, 1, 2) self.AdvancedSearchButton = QtGui.QPushButton(self.AdvancedTab) 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.AdvancedSecondBibleComboBox = QtGui.QComboBox(self.AdvancedTab) self.AdvancedSecondBibleComboBox.setObjectName(u'SecondBible') diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index f8e0f67fa..8488766bf 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -68,42 +68,48 @@ class SongMediaItem(MediaManagerItem): u'Maintain the lists of authors, topics and books'), ':/songs/song_maintenance.png', self.onSongMaintenanceClick, 'SongMaintenanceItem') - ## Add the SongListView widget ## - # Create the tab widget - 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 = QtGui.QFormLayout() + self.SearchLayout.setMargin(0) self.SearchLayout.setSpacing(4) self.SearchLayout.setObjectName(u'SearchLayout') - self.SearchTypeComboBox = QtGui.QComboBox(self.SongWidget) - self.SearchTypeComboBox.setObjectName(u'SearchTypeComboBox') - self.SearchLayout.addWidget(self.SearchTypeComboBox, 0, 1, 1, 2) - 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 = QtGui.QLabel(self) + self.SearchTextLabel.setAlignment( + QtCore.Qt.AlignBottom|QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft) self.SearchTextLabel.setObjectName(u'SearchTextLabel') - self.SearchLayout.addWidget(self.SearchTextLabel, 2, 0, 1, 1) - self.SearchTextEdit = QtGui.QLineEdit(self.SongWidget) + self.SearchLayout.setWidget( + 0, QtGui.QFormLayout.LabelRole, self.SearchTextLabel) + self.SearchTextEdit = QtGui.QLineEdit(self) self.SearchTextEdit.setObjectName(u'SearchTextEdit') - self.SearchLayout.addWidget(self.SearchTextEdit, 2, 1, 1, 2) - self.ClearTextButton = QtGui.QPushButton(self.SongWidget) - self.ClearTextButton.setObjectName(u'ClearTextButton') - self.SearchLayout.addWidget(self.ClearTextButton, 3, 1, 1, 1) - self.SearchTextButton = QtGui.QPushButton(self.SongWidget) + self.SearchLayout.setWidget( + 0, QtGui.QFormLayout.FieldRole, self.SearchTextEdit) + self.SearchTypeLabel = QtGui.QLabel(self) + self.SearchTypeLabel.setAlignment( + 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.SearchLayout.addWidget(self.SearchTextButton, 3, 2, 1, 1) - # Add the song widget to the page layout - self.PageLayout.addWidget(self.SongWidget) + self.SearchButtonLayout.addWidget(self.SearchTextButton) + self.ClearTextButton = QtGui.QPushButton(self) + self.ClearTextButton.setObjectName(u'ClearTextButton') + self.SearchButtonLayout.addWidget(self.ClearTextButton) + self.PageLayout.addLayout(self.SearchButtonLayout) # Signals and slots + QtCore.QObject.connect(self.SearchTextEdit, + QtCore.SIGNAL(u'returnPressed()'), self.onSearchTextButtonClick) QtCore.QObject.connect(self.SearchTextButton, QtCore.SIGNAL(u'pressed()'), self.onSearchTextButtonClick) QtCore.QObject.connect(self.ClearTextButton, @@ -115,10 +121,8 @@ class SongMediaItem(MediaManagerItem): QtCore.SIGNAL(u'load_song_list'), self.onSearchTextButtonClick) def retranslateUi(self): - self.SearchTypeLabel.setText( - translate(u'SongMediaItem', u'Search Type:')) - self.SearchTextLabel.setText( - translate(u'SongMediaItem', u'Search Text:')) + self.SearchTextLabel.setText(translate(u'SongMediaItem', u'Search:')) + self.SearchTypeLabel.setText(translate(u'SongMediaItem', u'Type:')) self.ClearTextButton.setText(translate(u'SongMediaItem', u'Clear')) self.SearchTextButton.setText(translate(u'SongMediaItem', u'Search')) From 770751899cfa7c9becc1eab46b9e32d1f2405b54 Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Fri, 16 Oct 2009 22:29:38 +0100 Subject: [PATCH 04/11] Fix urlopen() and mainDisplay closing --- openlp/core/ui/mainwindow.py | 3 +-- openlp/core/utils/__init__.py | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 67b9bcd3d..981bfed22 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -414,7 +414,6 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): plugins. """ QtGui.QMainWindow.__init__(self) - self.closeEvent = self.onCloseEvent self.screenList = screens self.serviceNotSaved = False self.settingsmanager = SettingsManager(screens) @@ -593,7 +592,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.RenderManager.update_display(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 """ diff --git a/openlp/core/utils/__init__.py b/openlp/core/utils/__init__.py index 59d1054c7..4cc1ddc3f 100644 --- a/openlp/core/utils/__init__.py +++ b/openlp/core/utils/__init__.py @@ -44,7 +44,7 @@ def check_latest_version(config, current_version): req = urllib2.Request(u'http://www.openlp.org/files/version.txt') req.add_header(u'User-Agent', u'OpenLP%s' % current_version) try: - handle = urllib2.urlopen(req, None, 1) + handle = urllib2.urlopen(req, None) html = handle.read() version_string = unicode(html).rstrip() except IOError, e: From 025d7c86d2e91fb004e96570447ad47cfe5aa3f2 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 17 Oct 2009 06:47:17 +0100 Subject: [PATCH 05/11] Songs Plugin get search as you type --- openlp/core/lib/eventreceiver.py | 3 ++ openlp/plugins/songs/lib/mediaitem.py | 20 +++++++++---- openlp/plugins/songs/lib/songstab.py | 43 +++++++++++++++++++++++++-- openlp/plugins/songs/songsplugin.py | 5 +++- 4 files changed, 62 insertions(+), 9 deletions(-) diff --git a/openlp/core/lib/eventreceiver.py b/openlp/core/lib/eventreceiver.py index 07884c190..923e228de 100644 --- a/openlp/core/lib/eventreceiver.py +++ b/openlp/core/lib/eventreceiver.py @@ -83,6 +83,9 @@ class EventReceiver(QtCore.QObject): ``audit_changed`` Audit information may have changed + + ``config_updated`` + Informs components the config has changed """ global log log = logging.getLogger(u'EventReceiver') diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index f8e0f67fa..8966fd1d2 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -27,7 +27,7 @@ import logging from PyQt4 import QtCore, QtGui from openlp.core.lib import MediaManagerItem, translate, SongXMLParser, \ - BaseListWithDnD, Receiver + BaseListWithDnD, Receiver, str_to_bool from openlp.plugins.songs.forms import EditSongForm, SongMaintenanceForm class SongListView(BaseListWithDnD): @@ -113,6 +113,12 @@ class SongMediaItem(MediaManagerItem): self.onSearchTextEditChanged) QtCore.QObject.connect(Receiver.get_receiver(), 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): self.SearchTypeLabel.setText( @@ -126,6 +132,7 @@ class SongMediaItem(MediaManagerItem): self.SearchTypeComboBox.addItem(translate(u'SongMediaItem', u'Titles')) self.SearchTypeComboBox.addItem(translate(u'SongMediaItem', u'Lyrics')) self.SearchTypeComboBox.addItem(translate(u'SongMediaItem', u'Authors')) + self.configUpdated() def onSearchTextButtonClick(self): search_keywords = unicode(self.SearchTextEdit.displayText()) @@ -181,11 +188,12 @@ class SongMediaItem(MediaManagerItem): self.SearchTextEdit.clear() def onSearchTextEditChanged(self, text): - search_length = 1 - if self.SearchTypeComboBox.currentIndex() == 1: - search_length = 7 - if len(text) > search_length: - self.onSearchTextButtonClick() + if self.searchAsYouType: + search_length = 1 + if self.SearchTypeComboBox.currentIndex() == 1: + search_length = 7 + if len(text) > search_length: + self.onSearchTextButtonClick() def onNewClick(self): self.edit_song_form.newSong() diff --git a/openlp/plugins/songs/lib/songstab.py b/openlp/plugins/songs/lib/songstab.py index 93d40ba49..ef375ce25 100644 --- a/openlp/plugins/songs/lib/songstab.py +++ b/openlp/plugins/songs/lib/songstab.py @@ -22,14 +22,53 @@ # 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, Receiver 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): SettingsTab.__init__(self, translate(u'SongsTab', u'Songs'), u'Songs') def setupUi(self): 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)) + Receiver().send_message(u'config_updated') + diff --git a/openlp/plugins/songs/songsplugin.py b/openlp/plugins/songs/songsplugin.py index 8d78231ee..0e7848162 100644 --- a/openlp/plugins/songs/songsplugin.py +++ b/openlp/plugins/songs/songsplugin.py @@ -27,7 +27,7 @@ import logging from PyQt4 import QtCore, QtGui 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, \ OpenSongImportForm, OpenLPExportForm @@ -62,6 +62,9 @@ class SongsPlugin(Plugin): def can_be_disabled(self): return True + def get_settings_tab(self): + return SongsTab() + def initialise(self): log.info(u'Songs Initialising') #if self.songmanager is None: From 742eac248714041a049fc74a8d260e40e2de8dea Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 17 Oct 2009 06:49:54 +0100 Subject: [PATCH 06/11] Bible Plugin loses searc as type --- openlp/plugins/bibles/lib/biblestab.py | 32 -------------------------- 1 file changed, 32 deletions(-) diff --git a/openlp/plugins/bibles/lib/biblestab.py b/openlp/plugins/bibles/lib/biblestab.py index 6003d6d43..f1ca6b860 100644 --- a/openlp/plugins/bibles/lib/biblestab.py +++ b/openlp/plugins/bibles/lib/biblestab.py @@ -41,7 +41,6 @@ class BiblesTab(SettingsTab): self.paragraph_style = True self.show_new_chapters = False self.display_style = 0 - self.bible_search = True SettingsTab.__init__( self, translate(u'BiblesTab', u'Bibles'), u'Bibles') @@ -127,27 +126,11 @@ class BiblesTab(SettingsTab): self.BibleRightLayout.setObjectName(u'BibleRightLayout') self.BibleRightLayout.setSpacing(8) 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) # Signals and slots QtCore.QObject.connect(self.NewChaptersCheckBox, QtCore.SIGNAL(u'stateChanged(int)'), self.onNewChaptersCheckBoxChanged) - QtCore.QObject.connect(self.BibleSearchCheckBox, - QtCore.SIGNAL(u'stateChanged(int)'), - self.onBibleSearchCheckBoxChanged) QtCore.QObject.connect(self.DisplayStyleComboBox, QtCore.SIGNAL(u'activated(int)'), self.onDisplayStyleComboBoxChanged) @@ -186,10 +169,6 @@ class BiblesTab(SettingsTab): 3, translate(u'SettingsForm', u'[ and ]')) self.ChangeNoteLabel.setText(translate(u'SettingsForm', u'Note:\nChanges don\'t affect verses already in the service')) - self.BibleSearchGroupBox.setTitle( - translate(u'SettingsForm', u'Search')) - self.BibleSearchCheckBox.setText( - translate(u'SettingsForm', u'Search-as-you-type')) def onBibleThemeComboBoxChanged(self): self.bible_theme = self.BibleThemeComboBox.currentText() @@ -207,13 +186,6 @@ class BiblesTab(SettingsTab): if check_state == QtCore.Qt.Checked: self.show_new_chapters = True - def onBibleSearchCheckBoxChanged(self): - check_state = self.BibleSearchCheckBox.checkState() - 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.show_new_chapters = str_to_bool( self.config.get_config(u'display new chapter', u'False')) @@ -222,12 +194,9 @@ class BiblesTab(SettingsTab): self.layout_style = int( self.config.get_config(u'verse layout style', u'0')) self.bible_theme = self.config.get_config(u'bible theme', u'0') - self.bible_search = str_to_bool( - self.config.get_config(u'search as type', u'True')) self.NewChaptersCheckBox.setChecked(self.show_new_chapters) self.DisplayStyleComboBox.setCurrentIndex(self.display_style) self.LayoutStyleComboBox.setCurrentIndex(self.layout_style) - self.BibleSearchCheckBox.setChecked(self.bible_search) def save(self): self.config.set_config( @@ -236,7 +205,6 @@ class BiblesTab(SettingsTab): u'display brackets', unicode(self.display_style)) self.config.set_config( 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'bible theme', unicode(self.bible_theme)) def updateThemeList(self, theme_list): From 0828335939aff9cc348ee20f909649555f8127ae Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 17 Oct 2009 07:12:38 +0100 Subject: [PATCH 07/11] Bible Plugin - Hide Duel verse Combo be default --- openlp/core/ui/settingsform.py | 2 ++ openlp/plugins/bibles/lib/biblestab.py | 26 +++++++++++++++++++++----- openlp/plugins/bibles/lib/mediaitem.py | 14 +++++++++++++- openlp/plugins/songs/lib/songstab.py | 4 +--- 4 files changed, 37 insertions(+), 9 deletions(-) diff --git a/openlp/core/ui/settingsform.py b/openlp/core/ui/settingsform.py index 68ffcfbd3..b00e622cf 100644 --- a/openlp/core/ui/settingsform.py +++ b/openlp/core/ui/settingsform.py @@ -27,6 +27,7 @@ import logging from PyQt4 import QtGui from openlp.core.ui import GeneralTab, ThemesTab, AlertsTab +from openlp.core.lib import Receiver from settingsdialog import Ui_SettingsDialog log = logging.getLogger(u'SettingsForm') @@ -64,6 +65,7 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog): def accept(self): for tab_index in range(0, self.SettingsTabWidget.count()): self.SettingsTabWidget.widget(tab_index).save() + Receiver().send_message(u'config_updated') return QtGui.QDialog.accept(self) def postSetUp(self): diff --git a/openlp/plugins/bibles/lib/biblestab.py b/openlp/plugins/bibles/lib/biblestab.py index f1ca6b860..8afb56422 100644 --- a/openlp/plugins/bibles/lib/biblestab.py +++ b/openlp/plugins/bibles/lib/biblestab.py @@ -97,7 +97,6 @@ class BiblesTab(SettingsTab): self.LayoutStyleComboBox.addItem(QtCore.QString()) self.LayoutStyleLayout.addWidget(self.LayoutStyleComboBox) self.VerseDisplayLayout.addWidget(self.LayoutStyleWidget, 2, 0, 1, 1) - self.BibleThemeWidget = QtGui.QWidget(self.VerseDisplayGroupBox) self.BibleThemeWidget.setObjectName(u'BibleThemeWidget') self.BibleThemeLayout = QtGui.QHBoxLayout(self.BibleThemeWidget) @@ -111,10 +110,13 @@ class BiblesTab(SettingsTab): self.BibleThemeComboBox.setObjectName(u'BibleThemeComboBox') self.BibleThemeComboBox.addItem(QtCore.QString()) 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.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.BibleLeftSpacer = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) @@ -139,6 +141,9 @@ class BiblesTab(SettingsTab): QtCore.QObject.connect(self.LayoutStyleComboBox, QtCore.SIGNAL(u'activated(int)'), self.onLayoutStyleComboBoxChanged) + QtCore.QObject.connect(self.BibleDuelCheckBox, + QtCore.SIGNAL(u'stateChanged(int)'), + self.onBibleDuelCheckBox) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'update_themes'), self.updateThemeList) @@ -169,6 +174,8 @@ class BiblesTab(SettingsTab): 3, translate(u'SettingsForm', u'[ and ]')) self.ChangeNoteLabel.setText(translate(u'SettingsForm', u'Note:\nChanges don\'t affect verses already in the service')) + self.BibleDuelCheckBox.setText( + translate(u'SettingsForm', u'Display Duel Bible Verses')) def onBibleThemeComboBoxChanged(self): self.bible_theme = self.BibleThemeComboBox.currentText() @@ -179,13 +186,18 @@ class BiblesTab(SettingsTab): def onLayoutStyleComboBoxChanged(self): self.layout_style = self.LayoutStyleComboBox.currentIndex() - def onNewChaptersCheckBoxChanged(self): - check_state = self.NewChaptersCheckBox.checkState() + def onNewChaptersCheckBoxChanged(self, check_state): self.show_new_chapters = False # we have a set value convert to True/False if check_state == QtCore.Qt.Checked: self.show_new_chapters = True + def onBibleDuelCheckBox(self, check_state): + self.duel_bibles = False + # we have a set value convert to True/False + if check_state == QtCore.Qt.Checked: + self.duel_bibles = True + def load(self): self.show_new_chapters = str_to_bool( self.config.get_config(u'display new chapter', u'False')) @@ -194,9 +206,12 @@ class BiblesTab(SettingsTab): self.layout_style = int( self.config.get_config(u'verse layout style', u'0')) self.bible_theme = self.config.get_config(u'bible theme', u'0') + self.duel_bibles = str_to_bool( + self.config.get_config(u'duel bibles', u'True')) self.NewChaptersCheckBox.setChecked(self.show_new_chapters) self.DisplayStyleComboBox.setCurrentIndex(self.display_style) self.LayoutStyleComboBox.setCurrentIndex(self.layout_style) + self.BibleDuelCheckBox.setChecked(self.duel_bibles) def save(self): self.config.set_config( @@ -205,6 +220,7 @@ class BiblesTab(SettingsTab): u'display brackets', unicode(self.display_style)) self.config.set_config( u'verse layout style', unicode(self.layout_style)) + self.config.set_config(u'duel bibles', unicode(self.duel_bibles)) self.config.set_config(u'bible theme', unicode(self.bible_theme)) def updateThemeList(self, theme_list): diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index 462e3c34a..ccd1ede6c 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -28,7 +28,7 @@ import time from PyQt4 import QtCore, QtGui from openlp.core.lib import translate, MediaManagerItem, Receiver, \ - BaseListWithDnD + BaseListWithDnD, str_to_bool from openlp.plugins.bibles.forms import BibleImportForm from openlp.plugins.bibles.lib.manager import BibleMode @@ -203,6 +203,17 @@ class BibleMediaItem(MediaManagerItem): QtCore.SIGNAL(u'pressed()'), self.onAdvancedSearchButton) QtCore.QObject.connect(self.QuickSearchButton, 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): log.debug(u'retranslateUi') @@ -242,6 +253,7 @@ class BibleMediaItem(MediaManagerItem): log.debug(u'bible manager initialise') self.loadBibles() self.parent.biblemanager.set_media_manager(self) + self.configUpdated() log.debug(u'bible manager initialise complete') def setQuickMessage(self, text): diff --git a/openlp/plugins/songs/lib/songstab.py b/openlp/plugins/songs/lib/songstab.py index ef375ce25..09ef75fab 100644 --- a/openlp/plugins/songs/lib/songstab.py +++ b/openlp/plugins/songs/lib/songstab.py @@ -24,7 +24,7 @@ from PyQt4 import QtCore, QtGui -from openlp.core.lib import SettingsTab, str_to_bool, translate, Receiver +from openlp.core.lib import SettingsTab, str_to_bool, translate class SongsTab(SettingsTab): """ @@ -70,5 +70,3 @@ class SongsTab(SettingsTab): def save(self): self.config.set_config(u'search as type', unicode(self.bible_search)) - Receiver().send_message(u'config_updated') - From f2058a516a3977febe8a56ff1c64a4b35158ac5b Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Sat, 17 Oct 2009 12:55:28 +0200 Subject: [PATCH 08/11] Playing around with the look and feel of tabs on the ToolBox --- openlp/core/ui/mainwindow.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 67b9bcd3d..bd1cadc7a 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -107,9 +107,18 @@ class Ui_MainWindow(object): self.MediaManagerDock = OpenLPDockWidget(MainWindow) MediaManagerIcon = buildIcon(u':/system/system_mediamanager.png') 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.settingsmanager.mainwindow_left) + self.MediaManagerDock.setObjectName(u'MediaManagerDock') self.MediaManagerContents = QtGui.QWidget() self.MediaManagerContents.setObjectName(u'MediaManagerContents') self.MediaManagerLayout = QtGui.QHBoxLayout(self.MediaManagerContents) From 7ae0e045d3b91a9196aa6fa40852e01226c27ec7 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 17 Oct 2009 14:17:04 +0100 Subject: [PATCH 09/11] Rename Alert menu --- openlp/core/ui/mainwindow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 67b9bcd3d..64d645a4c 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -368,7 +368,7 @@ class Ui_MainWindow(object): self.action_Preview_Panel.setStatusTip(translate(u'mainWindow', u'Toggle the visibility of the Preview Panel')) 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( translate(u'mainWindow', u'Show an alert message')) self.ToolsAlertItem.setShortcut(translate(u'mainWindow', u'F7')) From 108242892654edb2b94b11fbda0b4dec9ab10c16 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 17 Oct 2009 14:29:01 +0100 Subject: [PATCH 10/11] Show Splash screen option now works --- openlp/core/ui/maindisplay.py | 27 ++++++++++++++------------- openlp/core/ui/mainwindow.py | 2 +- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index f80fab021..2c4d163c9 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -25,7 +25,7 @@ import logging from PyQt4 import QtCore, QtGui -from openlp.core.lib import Receiver +from openlp.core.lib import Receiver, str_to_bool class MainDisplay(QtGui.QWidget): """ @@ -87,18 +87,19 @@ class MainDisplay(QtGui.QWidget): else: self.showMinimized() #Build a custom splash screen - self.InitialFrame = QtGui.QImage( - screen[u'size'].width(), screen[u'size'].height(), - QtGui.QImage.Format_ARGB32_Premultiplied) - splash_image = QtGui.QImage(u':/graphics/openlp-splash-screen.png') - painter_image = QtGui.QPainter() - painter_image.begin(self.InitialFrame) - painter_image.fillRect(self.InitialFrame.rect(), QtCore.Qt.white) - painter_image.drawImage( - (screen[u'size'].width() - splash_image.width()) / 2, - (screen[u'size'].height() - splash_image.height()) / 2, - splash_image) - self.frameView(self.InitialFrame) + if str_to_bool(self.parent.generalConfig.get_config(u'show splash', u'True')): + self.InitialFrame = QtGui.QImage( + screen[u'size'].width(), screen[u'size'].height(), + QtGui.QImage.Format_ARGB32_Premultiplied) + splash_image = QtGui.QImage(u':/graphics/openlp-splash-screen.png') + painter_image = QtGui.QPainter() + painter_image.begin(self.InitialFrame) + painter_image.fillRect(self.InitialFrame.rect(), QtCore.Qt.white) + painter_image.drawImage( + (screen[u'size'].width() - splash_image.width()) / 2, + (screen[u'size'].height() - splash_image.height()) / 2, + splash_image) + self.frameView(self.InitialFrame) #Build a Black screen painter = QtGui.QPainter() self.blankFrame = QtGui.QImage( diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 64d645a4c..dd350d06c 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -418,8 +418,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.screenList = screens self.serviceNotSaved = False self.settingsmanager = SettingsManager(screens) - self.mainDisplay = MainDisplay(self, screens) self.generalConfig = PluginConfig(u'General') + self.mainDisplay = MainDisplay(self, screens) self.alertForm = AlertForm(self) self.aboutForm = AboutForm(self) self.settingsForm = SettingsForm(self.screenList, self) From 7273ff3d2f38b06f3c1bb16fc253fd4e9d034ee4 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 17 Oct 2009 17:11:41 +0100 Subject: [PATCH 11/11] Display Screen handling improvements --- openlp/core/ui/maindisplay.py | 59 +++++++++++++++++++++++++++++-- openlp/core/ui/slidecontroller.py | 22 ++++++++---- 2 files changed, 72 insertions(+), 9 deletions(-) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 2c4d163c9..73cf077b2 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -27,7 +27,38 @@ from PyQt4 import QtCore, QtGui 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. """ @@ -59,6 +90,7 @@ class MainDisplay(QtGui.QWidget): self.layout.addWidget(self.display) self.displayBlank = False self.blankFrame = None + self.frame = None self.alertactive = False self.alertTab = None self.timer_id = 0 @@ -66,6 +98,10 @@ class MainDisplay(QtGui.QWidget): QtCore.SIGNAL(u'live_slide_blank'), self.blankDisplay) QtCore.QObject.connect(Receiver.get_receiver(), 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): """ @@ -84,8 +120,10 @@ class MainDisplay(QtGui.QWidget): self.setGeometry(screen[u'size']) if not screen[u'primary']: self.showFullScreen() + self.primary = False else: - self.showMinimized() + self.setVisible(False) + self.primary = True #Build a custom splash screen if str_to_bool(self.parent.generalConfig.get_config(u'show splash', u'True')): self.InitialFrame = QtGui.QImage( @@ -108,6 +146,17 @@ class MainDisplay(QtGui.QWidget): painter.begin(self.blankFrame) 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): """ Called from a slide controller to display a frame @@ -120,6 +169,9 @@ class MainDisplay(QtGui.QWidget): self.displayAlert() elif not self.displayBlank: self.display.setPixmap(QtGui.QPixmap.fromImage(frame)) + if not self.isVisible(): + self.setVisible(True) + self.showFullScreen() def blankDisplay(self): if not self.displayBlank: @@ -127,7 +179,8 @@ class MainDisplay(QtGui.QWidget): self.display.setPixmap(QtGui.QPixmap.fromImage(self.blankFrame)) else: self.displayBlank = False - self.frameView(self.frame) + if self.frame is not None: + self.frameView(self.frame) def displayAlert(self, text=u''): """ diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 1f4e47ce3..6fb0f065d 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -195,8 +195,14 @@ class SlideController(QtGui.QWidget): Receiver().send_message(u'request_spin_delay') if isLive: self.Toolbar.makeWidgetsInvisible(self.image_list) - else: - pass + QtCore.QObject.connect(Receiver.get_receiver(), + 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): self.DelaySpinBox.setValue(int(value)) @@ -321,7 +327,8 @@ class SlideController(QtGui.QWidget): """ 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()) else: self.PreviewListWidget.selectRow(0) @@ -364,7 +371,8 @@ class SlideController(QtGui.QWidget): """ 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()) else: row = self.PreviewListWidget.currentRow() + 1 @@ -377,7 +385,8 @@ class SlideController(QtGui.QWidget): """ 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( u'%s_previous'% self.commandItem.name.lower()) else: @@ -391,7 +400,8 @@ class SlideController(QtGui.QWidget): """ 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()) else: self.PreviewListWidget.selectRow(self.PreviewListWidget.rowCount() - 1)