This commit is contained in:
Tim Bentley 2010-07-30 18:49:55 +01:00
commit 50691074b8
16 changed files with 322 additions and 409 deletions

View File

@ -120,7 +120,7 @@ class GeneralTab(SettingsTab):
self.settingsLayout.addWidget(self.timeoutLabel, 2, 0, 1, 1) self.settingsLayout.addWidget(self.timeoutLabel, 2, 0, 1, 1)
self.timeoutSpinBox = QtGui.QSpinBox(self.settingsGroupBox) self.timeoutSpinBox = QtGui.QSpinBox(self.settingsGroupBox)
self.timeoutSpinBox.setObjectName("timeoutSpinBox") self.timeoutSpinBox.setObjectName("timeoutSpinBox")
self.settingsLayout.addWidget(self.timeoutSpinBox, 2,1, 1, 1) self.settingsLayout.addWidget(self.timeoutSpinBox, 2, 1, 1, 1)
self.generalLeftLayout.addWidget(self.settingsGroupBox) self.generalLeftLayout.addWidget(self.settingsGroupBox)
self.generalLeftSpacer = QtGui.QSpacerItem(20, 40, self.generalLeftSpacer = QtGui.QSpacerItem(20, 40,
QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)

View File

@ -220,17 +220,17 @@ class Ui_MainWindow(object):
# Create the menu items # Create the menu items
self.FileNewItem = QtGui.QAction(MainWindow) self.FileNewItem = QtGui.QAction(MainWindow)
self.FileNewItem.setIcon( self.FileNewItem.setIcon(
self.ServiceManagerContents.Toolbar.getIconFromTitle( self.ServiceManagerContents.toolbar.getIconFromTitle(
u'New Service')) u'New Service'))
self.FileNewItem.setObjectName(u'FileNewItem') self.FileNewItem.setObjectName(u'FileNewItem')
self.FileOpenItem = QtGui.QAction(MainWindow) self.FileOpenItem = QtGui.QAction(MainWindow)
self.FileOpenItem.setIcon( self.FileOpenItem.setIcon(
self.ServiceManagerContents.Toolbar.getIconFromTitle( self.ServiceManagerContents.toolbar.getIconFromTitle(
u'Open Service')) u'Open Service'))
self.FileOpenItem.setObjectName(u'FileOpenItem') self.FileOpenItem.setObjectName(u'FileOpenItem')
self.FileSaveItem = QtGui.QAction(MainWindow) self.FileSaveItem = QtGui.QAction(MainWindow)
self.FileSaveItem.setIcon( self.FileSaveItem.setIcon(
self.ServiceManagerContents.Toolbar.getIconFromTitle( self.ServiceManagerContents.toolbar.getIconFromTitle(
u'Save Service')) u'Save Service'))
self.FileSaveItem.setObjectName(u'FileSaveItem') self.FileSaveItem.setObjectName(u'FileSaveItem')
self.FileSaveAsItem = QtGui.QAction(MainWindow) self.FileSaveAsItem = QtGui.QAction(MainWindow)

View File

@ -112,60 +112,60 @@ class ServiceManager(QtGui.QWidget):
self.serviceNoteForm = ServiceNoteForm(self.parent) self.serviceNoteForm = ServiceNoteForm(self.parent)
self.serviceItemEditForm = ServiceItemEditForm(self.parent) self.serviceItemEditForm = ServiceItemEditForm(self.parent)
#start with the layout #start with the layout
self.Layout = QtGui.QVBoxLayout(self) self.layout = QtGui.QVBoxLayout(self)
self.Layout.setSpacing(0) self.layout.setSpacing(0)
self.Layout.setMargin(0) self.layout.setMargin(0)
# Create the top toolbar # Create the top toolbar
self.Toolbar = OpenLPToolbar(self) self.toolbar = OpenLPToolbar(self)
self.Toolbar.addToolbarButton( self.toolbar.addToolbarButton(
translate('OpenLP.ServiceManager', 'New Service'), translate('OpenLP.ServiceManager', 'New Service'),
u':/general/general_new.png', u':/general/general_new.png',
translate('OpenLP.ServiceManager', 'Create a new service'), translate('OpenLP.ServiceManager', 'Create a new service'),
self.onNewService) self.onNewService)
self.Toolbar.addToolbarButton( self.toolbar.addToolbarButton(
translate('OpenLP.ServiceManager', 'Open Service'), translate('OpenLP.ServiceManager', 'Open Service'),
u':/general/general_open.png', u':/general/general_open.png',
translate('OpenLP.ServiceManager', 'Load an existing service'), translate('OpenLP.ServiceManager', 'Load an existing service'),
self.onLoadService) self.onLoadService)
self.Toolbar.addToolbarButton( self.toolbar.addToolbarButton(
translate('OpenLP.ServiceManager', 'Save Service'), translate('OpenLP.ServiceManager', 'Save Service'),
u':/general/general_save.png', u':/general/general_save.png',
translate('OpenLP.ServiceManager', 'Save this service'), translate('OpenLP.ServiceManager', 'Save this service'),
self.onQuickSaveService) self.onQuickSaveService)
self.Toolbar.addSeparator() self.toolbar.addSeparator()
self.ThemeLabel = QtGui.QLabel(translate('OpenLP.ServiceManager', self.themeLabel = QtGui.QLabel(translate('OpenLP.ServiceManager',
'Theme:'), self) 'Theme:'), self)
self.ThemeLabel.setMargin(3) self.themeLabel.setMargin(3)
self.Toolbar.addToolbarWidget(u'ThemeLabel', self.ThemeLabel) self.toolbar.addToolbarWidget(u'ThemeLabel', self.themeLabel)
self.ThemeComboBox = QtGui.QComboBox(self.Toolbar) self.themeComboBox = QtGui.QComboBox(self.toolbar)
self.ThemeComboBox.setToolTip(translate('OpenLP.ServiceManager', self.themeComboBox.setToolTip(translate('OpenLP.ServiceManager',
'Select a theme for the service')) 'Select a theme for the service'))
self.ThemeComboBox.setSizeAdjustPolicy( self.themeComboBox.setSizeAdjustPolicy(
QtGui.QComboBox.AdjustToContents) QtGui.QComboBox.AdjustToContents)
self.Toolbar.addToolbarWidget(u'ThemeWidget', self.ThemeComboBox) self.toolbar.addToolbarWidget(u'ThemeWidget', self.themeComboBox)
self.Layout.addWidget(self.Toolbar) self.layout.addWidget(self.toolbar)
# Create the service manager list # Create the service manager list
self.ServiceManagerList = ServiceManagerList(self) self.serviceManagerList = ServiceManagerList(self)
self.ServiceManagerList.setEditTriggers( self.serviceManagerList.setEditTriggers(
QtGui.QAbstractItemView.CurrentChanged | QtGui.QAbstractItemView.CurrentChanged |
QtGui.QAbstractItemView.DoubleClicked | QtGui.QAbstractItemView.DoubleClicked |
QtGui.QAbstractItemView.EditKeyPressed) QtGui.QAbstractItemView.EditKeyPressed)
self.ServiceManagerList.setDragDropMode( self.serviceManagerList.setDragDropMode(
QtGui.QAbstractItemView.DragDrop) QtGui.QAbstractItemView.DragDrop)
self.ServiceManagerList.setAlternatingRowColors(True) self.serviceManagerList.setAlternatingRowColors(True)
self.ServiceManagerList.setHeaderHidden(True) self.serviceManagerList.setHeaderHidden(True)
self.ServiceManagerList.setExpandsOnDoubleClick(False) self.serviceManagerList.setExpandsOnDoubleClick(False)
self.ServiceManagerList.setContextMenuPolicy( self.serviceManagerList.setContextMenuPolicy(
QtCore.Qt.CustomContextMenu) QtCore.Qt.CustomContextMenu)
QtCore.QObject.connect(self.ServiceManagerList, QtCore.QObject.connect(self.serviceManagerList,
QtCore.SIGNAL('customContextMenuRequested(QPoint)'), QtCore.SIGNAL('customContextMenuRequested(QPoint)'),
self.contextMenu) self.contextMenu)
self.ServiceManagerList.setObjectName(u'ServiceManagerList') self.serviceManagerList.setObjectName(u'serviceManagerList')
# enable drop # enable drop
self.ServiceManagerList.__class__.dragEnterEvent = self.dragEnterEvent self.serviceManagerList.__class__.dragEnterEvent = self.dragEnterEvent
self.ServiceManagerList.__class__.dragMoveEvent = self.dragEnterEvent self.serviceManagerList.__class__.dragMoveEvent = self.dragEnterEvent
self.ServiceManagerList.__class__.dropEvent = self.dropEvent self.serviceManagerList.__class__.dropEvent = self.dropEvent
self.Layout.addWidget(self.ServiceManagerList) self.layout.addWidget(self.serviceManagerList)
# Add the bottom toolbar # Add the bottom toolbar
self.OrderToolbar = OpenLPToolbar(self) self.OrderToolbar = OpenLPToolbar(self)
self.OrderToolbar.addToolbarButton( self.OrderToolbar.addToolbarButton(
@ -199,15 +199,15 @@ class ServiceManager(QtGui.QWidget):
translate('OpenLP.ServiceManager', translate('OpenLP.ServiceManager',
'Delete the selected item from the service.'), 'Delete the selected item from the service.'),
self.onDeleteFromService) self.onDeleteFromService)
self.Layout.addWidget(self.OrderToolbar) self.layout.addWidget(self.OrderToolbar)
# Connect up our signals and slots # Connect up our signals and slots
QtCore.QObject.connect(self.ThemeComboBox, QtCore.QObject.connect(self.themeComboBox,
QtCore.SIGNAL(u'activated(int)'), self.onThemeComboBoxSelected) QtCore.SIGNAL(u'activated(int)'), self.onThemeComboBoxSelected)
QtCore.QObject.connect(self.ServiceManagerList, QtCore.QObject.connect(self.serviceManagerList,
QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.makeLive) QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.makeLive)
QtCore.QObject.connect(self.ServiceManagerList, QtCore.QObject.connect(self.serviceManagerList,
QtCore.SIGNAL(u'itemCollapsed(QTreeWidgetItem*)'), self.collapsed) QtCore.SIGNAL(u'itemCollapsed(QTreeWidgetItem*)'), self.collapsed)
QtCore.QObject.connect(self.ServiceManagerList, QtCore.QObject.connect(self.serviceManagerList,
QtCore.SIGNAL(u'itemExpanded(QTreeWidgetItem*)'), self.expanded) QtCore.SIGNAL(u'itemExpanded(QTreeWidgetItem*)'), self.expanded)
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'theme_update_list'), self.updateThemeList) QtCore.SIGNAL(u'theme_update_list'), self.updateThemeList)
@ -268,7 +268,7 @@ class ServiceManager(QtGui.QWidget):
self.suffixes.append(suffix) self.suffixes.append(suffix)
def contextMenu(self, point): def contextMenu(self, point):
item = self.ServiceManagerList.itemAt(point) item = self.serviceManagerList.itemAt(point)
if item is None: if item is None:
return return
if item.parent() is None: if item.parent() is None:
@ -289,7 +289,7 @@ class ServiceManager(QtGui.QWidget):
self.themeMenu.menuAction().setVisible(False) self.themeMenu.menuAction().setVisible(False)
if serviceItem[u'service_item'].is_text(): if serviceItem[u'service_item'].is_text():
self.themeMenu.menuAction().setVisible(True) self.themeMenu.menuAction().setVisible(True)
action = self.menu.exec_(self.ServiceManagerList.mapToGlobal(point)) action = self.menu.exec_(self.serviceManagerList.mapToGlobal(point))
if action == self.editAction: if action == self.editAction:
self.remoteEdit() self.remoteEdit()
if action == self.maintainAction: if action == self.maintainAction:
@ -326,14 +326,14 @@ class ServiceManager(QtGui.QWidget):
Called by the SlideController to select the Called by the SlideController to select the
next service item next service item
""" """
if len(self.ServiceManagerList.selectedItems()) == 0: if len(self.serviceManagerList.selectedItems()) == 0:
return return
selected = self.ServiceManagerList.selectedItems()[0] selected = self.serviceManagerList.selectedItems()[0]
lookFor = 0 lookFor = 0
serviceIterator = QtGui.QTreeWidgetItemIterator(self.ServiceManagerList) serviceIterator = QtGui.QTreeWidgetItemIterator(self.serviceManagerList)
while serviceIterator.value(): while serviceIterator.value():
if lookFor == 1 and serviceIterator.value().parent() is None: if lookFor == 1 and serviceIterator.value().parent() is None:
self.ServiceManagerList.setCurrentItem(serviceIterator.value()) self.serviceManagerList.setCurrentItem(serviceIterator.value())
self.makeLive() self.makeLive()
return return
if serviceIterator.value() == selected: if serviceIterator.value() == selected:
@ -345,15 +345,15 @@ class ServiceManager(QtGui.QWidget):
Called by the SlideController to select the Called by the SlideController to select the
previous service item previous service item
""" """
if len(self.ServiceManagerList.selectedItems()) == 0: if len(self.serviceManagerList.selectedItems()) == 0:
return return
selected = self.ServiceManagerList.selectedItems()[0] selected = self.serviceManagerList.selectedItems()[0]
prevItem = None prevItem = None
serviceIterator = QtGui.QTreeWidgetItemIterator(self.ServiceManagerList) serviceIterator = QtGui.QTreeWidgetItemIterator(self.serviceManagerList)
while serviceIterator.value(): while serviceIterator.value():
if serviceIterator.value() == selected: if serviceIterator.value() == selected:
if prevItem: if prevItem:
self.ServiceManagerList.setCurrentItem(prevItem) self.serviceManagerList.setCurrentItem(prevItem)
self.makeLive() self.makeLive()
return return
if serviceIterator.value().parent() is None: if serviceIterator.value().parent() is None:
@ -370,9 +370,9 @@ class ServiceManager(QtGui.QWidget):
""" """
Makes a specific item in the service live Makes a specific item in the service live
""" """
if index >= 0 and index < self.ServiceManagerList.topLevelItemCount: if index >= 0 and index < self.serviceManagerList.topLevelItemCount:
item = self.ServiceManagerList.topLevelItem(index) item = self.serviceManagerList.topLevelItem(index)
self.ServiceManagerList.setCurrentItem(item) self.serviceManagerList.setCurrentItem(item)
self.makeLive() self.makeLive()
def onMoveSelectionUp(self): def onMoveSelectionUp(self):
@ -380,7 +380,7 @@ class ServiceManager(QtGui.QWidget):
Moves the selection up the window Moves the selection up the window
Called by the up arrow Called by the up arrow
""" """
serviceIterator = QtGui.QTreeWidgetItemIterator(self.ServiceManagerList) serviceIterator = QtGui.QTreeWidgetItemIterator(self.serviceManagerList)
tempItem = None tempItem = None
setLastItem = False setLastItem = False
while serviceIterator: while serviceIterator:
@ -405,7 +405,7 @@ class ServiceManager(QtGui.QWidget):
Moves the selection down the window Moves the selection down the window
Called by the down arrow Called by the down arrow
""" """
serviceIterator = QtGui.QTreeWidgetItemIterator(self.ServiceManagerList) serviceIterator = QtGui.QTreeWidgetItemIterator(self.serviceManagerList)
firstItem = serviceIterator firstItem = serviceIterator
setSelected = False setSelected = False
while serviceIterator: while serviceIterator:
@ -503,7 +503,7 @@ class ServiceManager(QtGui.QWidget):
QtGui.QMessageBox.Save) QtGui.QMessageBox.Save)
if ret == QtGui.QMessageBox.Save: if ret == QtGui.QMessageBox.Save:
self.onSaveService() self.onSaveService()
self.ServiceManagerList.clear() self.serviceManagerList.clear()
self.serviceItems = [] self.serviceItems = []
self.serviceName = u'' self.serviceName = u''
self.isNew = True self.isNew = True
@ -531,10 +531,10 @@ class ServiceManager(QtGui.QWidget):
item[u'order'] = count item[u'order'] = count
count += 1 count += 1
#Repaint the screen #Repaint the screen
self.ServiceManagerList.clear() self.serviceManagerList.clear()
for itemcount, item in enumerate(self.serviceItems): for itemcount, item in enumerate(self.serviceItems):
serviceitem = item[u'service_item'] serviceitem = item[u'service_item']
treewidgetitem = QtGui.QTreeWidgetItem(self.ServiceManagerList) treewidgetitem = QtGui.QTreeWidgetItem(self.serviceManagerList)
if serviceitem.is_valid: if serviceitem.is_valid:
if serviceitem.notes: if serviceitem.notes:
icon = QtGui.QImage(serviceitem.icon) icon = QtGui.QImage(serviceitem.icon)
@ -565,7 +565,7 @@ class ServiceManager(QtGui.QWidget):
if serviceItem == itemcount and serviceItemCount == count: if serviceItem == itemcount and serviceItemCount == count:
#preserve expanding status as setCurrentItem sets it to True #preserve expanding status as setCurrentItem sets it to True
temp = item[u'expanded'] temp = item[u'expanded']
self.ServiceManagerList.setCurrentItem(treewidgetitem1) self.serviceManagerList.setCurrentItem(treewidgetitem1)
item[u'expanded'] = temp item[u'expanded'] = temp
treewidgetitem.setExpanded(item[u'expanded']) treewidgetitem.setExpanded(item[u'expanded'])
@ -758,7 +758,7 @@ class ServiceManager(QtGui.QWidget):
""" """
Set the theme for the current service Set the theme for the current service
""" """
self.service_theme = unicode(self.ThemeComboBox.currentText()) self.service_theme = unicode(self.themeComboBox.currentText())
self.parent.RenderManager.set_service_theme(self.service_theme) self.parent.RenderManager.set_service_theme(self.service_theme)
QtCore.QSettings().setValue( QtCore.QSettings().setValue(
self.parent.serviceSettingsSection + u'/service theme', self.parent.serviceSettingsSection + u'/service theme',
@ -771,11 +771,11 @@ class ServiceManager(QtGui.QWidget):
sure the theme combo box is in the correct state. sure the theme combo box is in the correct state.
""" """
if self.parent.RenderManager.theme_level == ThemeLevel.Global: if self.parent.RenderManager.theme_level == ThemeLevel.Global:
self.Toolbar.actions[u'ThemeLabel'].setVisible(False) self.toolbar.actions[u'ThemeLabel'].setVisible(False)
self.Toolbar.actions[u'ThemeWidget'].setVisible(False) self.toolbar.actions[u'ThemeWidget'].setVisible(False)
else: else:
self.Toolbar.actions[u'ThemeLabel'].setVisible(True) self.toolbar.actions[u'ThemeLabel'].setVisible(True)
self.Toolbar.actions[u'ThemeWidget'].setVisible(True) self.toolbar.actions[u'ThemeWidget'].setVisible(True)
def regenerateServiceItems(self): def regenerateServiceItems(self):
""" """
@ -786,7 +786,7 @@ class ServiceManager(QtGui.QWidget):
self.parent.RenderManager.themedata = None self.parent.RenderManager.themedata = None
if self.serviceItems: if self.serviceItems:
tempServiceItems = self.serviceItems tempServiceItems = self.serviceItems
self.ServiceManagerList.clear() self.serviceManagerList.clear()
self.serviceItems = [] self.serviceItems = []
self.isNew = True self.isNew = True
for item in tempServiceItems: for item in tempServiceItems:
@ -903,7 +903,7 @@ class ServiceManager(QtGui.QWidget):
""" """
Finds a ServiceItem in the list Finds a ServiceItem in the list
""" """
items = self.ServiceManagerList.selectedItems() items = self.serviceManagerList.selectedItems()
pos = 0 pos = 0
count = 0 count = 0
for item in items: for item in items:
@ -923,7 +923,6 @@ class ServiceManager(QtGui.QWidget):
``event`` ``event``
Handle of the event pint passed Handle of the event pint passed
""" """
event.accept() event.accept()
@ -939,7 +938,7 @@ class ServiceManager(QtGui.QWidget):
link = event.mimeData() link = event.mimeData()
if link.hasText(): if link.hasText():
plugin = event.mimeData().text() plugin = event.mimeData().text()
item = self.ServiceManagerList.itemAt(event.pos()) item = self.serviceManagerList.itemAt(event.pos())
#ServiceManager started the drag and drop #ServiceManager started the drag and drop
if plugin == u'ServiceManager': if plugin == u'ServiceManager':
startpos, startCount = self.findServiceItem() startpos, startCount = self.findServiceItem()
@ -983,23 +982,21 @@ class ServiceManager(QtGui.QWidget):
``theme_list`` ``theme_list``
A list of current themes to be displayed A list of current themes to be displayed
""" """
self.ThemeComboBox.clear() self.themeComboBox.clear()
self.themeMenu.clear() self.themeMenu.clear()
self.ThemeComboBox.addItem(u'') self.themeComboBox.addItem(u'')
for theme in theme_list: for theme in theme_list:
self.ThemeComboBox.addItem(theme) self.themeComboBox.addItem(theme)
action = context_menu_action( action = context_menu_action(self.serviceManagerList, None, theme,
self.ServiceManagerList, self.onThemeChangeAction)
None,
theme , self.onThemeChangeAction)
self.themeMenu.addAction(action) self.themeMenu.addAction(action)
id = self.ThemeComboBox.findText(self.service_theme, index = self.themeComboBox.findText(self.service_theme,
QtCore.Qt.MatchExactly) QtCore.Qt.MatchExactly)
# Not Found # Not Found
if id == -1: if index == -1:
id = 0 index = 0
self.service_theme = u'' self.service_theme = u''
self.ThemeComboBox.setCurrentIndex(id) self.themeComboBox.setCurrentIndex(index)
self.parent.RenderManager.set_service_theme(self.service_theme) self.parent.RenderManager.set_service_theme(self.service_theme)
self.regenerateServiceItems() self.regenerateServiceItems()

View File

@ -49,7 +49,7 @@ class ThemeManager(QtGui.QWidget):
QtGui.QWidget.__init__(self, parent) QtGui.QWidget.__init__(self, parent)
self.parent = parent self.parent = parent
self.settingsSection = u'themes' self.settingsSection = u'themes'
self.serviceComboBox = self.parent.ServiceManagerContents.ThemeComboBox self.serviceComboBox = self.parent.ServiceManagerContents.themeComboBox
self.layout = QtGui.QVBoxLayout(self) self.layout = QtGui.QVBoxLayout(self)
self.layout.setSpacing(0) self.layout.setSpacing(0)
self.layout.setMargin(0) self.layout.setMargin(0)

View File

@ -54,10 +54,10 @@ class LanguageManager(object):
""" """
if LanguageManager.AutoLanguage: if LanguageManager.AutoLanguage:
language = QtCore.QLocale.system().name() language = QtCore.QLocale.system().name()
lang_Path = AppLocation.get_directory(AppLocation.AppDir) lang_path = AppLocation.get_directory(AppLocation.AppDir)
lang_Path = os.path.join(lang_Path, u'resources', u'i18n') lang_path = os.path.join(lang_path, u'resources', u'i18n')
app_translator = QtCore.QTranslator() app_translator = QtCore.QTranslator()
if app_translator.load("openlp_" + language, lang_Path): if app_translator.load("openlp_" + language, lang_path):
return app_translator return app_translator
@staticmethod @staticmethod

View File

@ -66,11 +66,9 @@ class AlertsPlugin(Plugin):
""" """
log.info(u'add tools menu') log.info(u'add tools menu')
self.toolsAlertItem = QtGui.QAction(tools_menu) self.toolsAlertItem = QtGui.QAction(tools_menu)
AlertIcon = build_icon(u':/plugins/plugin_alerts.png') self.toolsAlertItem.setIcon(build_icon(u':/plugins/plugin_alerts.png'))
self.toolsAlertItem.setIcon(AlertIcon)
self.toolsAlertItem.setObjectName(u'toolsAlertItem') self.toolsAlertItem.setObjectName(u'toolsAlertItem')
self.toolsAlertItem.setText( self.toolsAlertItem.setText(translate('AlertsPlugin', '&Alert'))
translate('AlertsPlugin', '&Alert'))
self.toolsAlertItem.setStatusTip( self.toolsAlertItem.setStatusTip(
translate('AlertsPlugin', 'Show an alert message.')) translate('AlertsPlugin', 'Show an alert message.'))
self.toolsAlertItem.setShortcut(u'F7') self.toolsAlertItem.setShortcut(u'F7')

View File

@ -50,14 +50,14 @@ class BiblePlugin(Plugin):
if self.manager is None: if self.manager is None:
self.manager = BibleManager(self) self.manager = BibleManager(self)
Plugin.initialise(self) Plugin.initialise(self)
self.ImportBibleItem.setVisible(True) self.importBibleItem.setVisible(True)
self.ExportBibleItem.setVisible(True) self.exportBibleItem.setVisible(True)
def finalise(self): def finalise(self):
log.info(u'Plugin Finalise') log.info(u'Plugin Finalise')
Plugin.finalise(self) Plugin.finalise(self)
self.ImportBibleItem.setVisible(False) self.importBibleItem.setVisible(False)
self.ExportBibleItem.setVisible(False) self.exportBibleItem.setVisible(False)
def getSettingsTab(self): def getSettingsTab(self):
return BiblesTab(self.name) return BiblesTab(self.name)
@ -67,23 +67,23 @@ class BiblePlugin(Plugin):
return BibleMediaItem(self, self.icon, self.name) return BibleMediaItem(self, self.icon, self.name)
def addImportMenuItem(self, import_menu): def addImportMenuItem(self, import_menu):
self.ImportBibleItem = QtGui.QAction(import_menu) self.importBibleItem = QtGui.QAction(import_menu)
self.ImportBibleItem.setObjectName(u'ImportBibleItem') self.importBibleItem.setObjectName(u'importBibleItem')
import_menu.addAction(self.ImportBibleItem) import_menu.addAction(self.importBibleItem)
self.ImportBibleItem.setText( self.importBibleItem.setText(
translate('BiblesPlugin', '&Bible')) translate('BiblesPlugin', '&Bible'))
# signals and slots # signals and slots
QtCore.QObject.connect(self.ImportBibleItem, QtCore.QObject.connect(self.importBibleItem,
QtCore.SIGNAL(u'triggered()'), self.onBibleImportClick) QtCore.SIGNAL(u'triggered()'), self.onBibleImportClick)
self.ImportBibleItem.setVisible(False) self.importBibleItem.setVisible(False)
def addExportMenuItem(self, export_menu): def addExportMenuItem(self, export_menu):
self.ExportBibleItem = QtGui.QAction(export_menu) self.exportBibleItem = QtGui.QAction(export_menu)
self.ExportBibleItem.setObjectName(u'ExportBibleItem') self.exportBibleItem.setObjectName(u'exportBibleItem')
export_menu.addAction(self.ExportBibleItem) export_menu.addAction(self.exportBibleItem)
self.ExportBibleItem.setText(translate( self.exportBibleItem.setText(translate(
'BiblesPlugin', '&Bible')) 'BiblesPlugin', '&Bible'))
self.ExportBibleItem.setVisible(False) self.exportBibleItem.setVisible(False)
def onBibleImportClick(self): def onBibleImportClick(self):
if self.mediaItem: if self.mediaItem:

View File

@ -50,8 +50,8 @@ class WebDownload(object):
} }
@classmethod @classmethod
def get_name(cls, id): def get_name(cls, name):
return cls.Names[id] return cls.Names[name]
class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard): class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard):
@ -260,8 +260,8 @@ class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard):
if self.currentId() == 3: if self.currentId() == 3:
Receiver.send_message(u'bibles_stop_import') Receiver.send_message(u'bibles_stop_import')
def onCurrentIdChanged(self, id): def onCurrentIdChanged(self, pageId):
if id == 3: if pageId == 3:
self.preImport() self.preImport()
self.performImport() self.performImport()
self.postImport() self.postImport()
@ -327,6 +327,7 @@ class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard):
#Load and store Crosswalk Bibles #Load and store Crosswalk Bibles
filepath = AppLocation.get_directory(AppLocation.PluginsDir) filepath = AppLocation.get_directory(AppLocation.PluginsDir)
filepath = os.path.join(filepath, u'bibles', u'resources') filepath = os.path.join(filepath, u'bibles', u'resources')
books_file = None
try: try:
self.web_bible_list[WebDownload.Crosswalk] = {} self.web_bible_list[WebDownload.Crosswalk] = {}
books_file = open( books_file = open(
@ -348,6 +349,7 @@ class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard):
if books_file: if books_file:
books_file.close() books_file.close()
#Load and store BibleGateway Bibles #Load and store BibleGateway Bibles
books_file = None
try: try:
self.web_bible_list[WebDownload.BibleGateway] = {} self.web_bible_list[WebDownload.BibleGateway] = {}
books_file = open(os.path.join(filepath, u'biblegateway.csv'), 'r') books_file = open(os.path.join(filepath, u'biblegateway.csv'), 'r')

View File

@ -23,8 +23,163 @@
# with this program; if not, write to the Free Software Foundation, Inc., 59 # # with this program; if not, write to the Free Software Foundation, Inc., 59 #
# Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Temple Place, Suite 330, Boston, MA 02111-1307 USA #
############################################################################### ###############################################################################
"""
The :mod:`lib` module contains all the library functionality for the bibles
plugin.
"""
import logging
import re
log = logging.getLogger(__name__)
BIBLE_REFERENCE = re.compile(
r'^([\w ]+?) *([0-9]+)' # Initial book and chapter
r'(?: *[:|v|V] *([0-9]+))?' # Verse for first chapter
r'(?: *- *([0-9]+|end$))?' # Range for verses or chapters
r'(?:(?:,([0-9]+))?' # Second chapter
r' *[,|:|v|V] *([0-9]+|end$)' # More range for verses or chapters
r'(?: *- *([0-9]+|end$))?)?$', # End of second verse range
re.UNICODE)
def check_end(match_group):
"""
Check if a regular expression match group contains the text u'end' or
should be converted to an int.
``match_group``
The match group to check.
"""
if match_group == u'end':
return -1
else:
return int(match_group)
def parse_reference(reference):
"""
This is the über-awesome function that takes a person's typed in string
and converts it to a reference list, a list of references to be queried
from the Bible database files.
BIBLE_REFERENCE regular expression produces the following match groups:
0 This is a special group consisting of the whole string that matched.
1 [\w ]+ The book the reference is from.
2 [0-9]+ The first (or only) chapter in the reference.
3 None|[0-9]+ None or the only verse or the first verse in a
verse range or the start verse in a chapter range.
4 None|[0-9]+|end None or the end verse of the first verse range or
the end chapter of a chapter range.
5 None|[0-9]+ None or the second chapter in multiple
(non-ranged) chapters.
6 None|[0-9]+|end None, the start of the second verse range or the
end of a chapter range.
7 None|[0-9]+|end None or the end of the second verse range.
The reference list is a list of tuples, with each tuple structured like
this::
(book, chapter, start_verse, end_verse)
``reference``
The bible reference to parse.
Returns None or a reference list.
"""
reference = reference.strip()
log.debug('parse_reference("%s")', reference)
unified_ref_list = []
match = BIBLE_REFERENCE.match(reference)
if match:
log.debug(u'Matched reference %s' % reference)
book = match.group(1)
chapter = int(match.group(2))
if match.group(7):
# Two verse ranges
vr1_start = int(match.group(3))
vr1_end = int(match.group(4))
unified_ref_list.append((book, chapter, vr1_start, vr1_end))
vr2_start = int(match.group(6))
vr2_end = check_end(match.group(7))
if match.group(5):
# One verse range per chapter
chapter2 = int(match.group(5))
unified_ref_list.append((book, chapter2, vr2_start, vr2_end))
else:
unified_ref_list.append((book, chapter, vr2_start, vr2_end))
elif match.group(6):
# Chapter range with verses
if match.group(3):
vr1_start = int(match.group(3))
else:
vr1_start = 1
if match.group(2) == match.group(4):
vr1_end = int(match.group(6))
unified_ref_list.append((book, chapter, vr1_start, vr1_end))
else:
vr1_end = -1
unified_ref_list.append((book, chapter, vr1_start, vr1_end))
vr2_end = check_end(match.group(6))
if int(match.group(4)) > chapter:
for x in range(chapter + 1, int(match.group(4)) + 1):
if x == int(match.group(4)):
unified_ref_list.append((book, x, 1, vr2_end))
else:
unified_ref_list.append((book, x, 1, -1))
elif match.group(4):
# Chapter range or chapter and verse range
if match.group(3):
vr1_start = int(match.group(3))
vr1_end = check_end(match.group(4))
if vr1_end == -1 or vr1_end > vr1_start:
unified_ref_list.append((book, chapter, vr1_start, vr1_end))
else:
log.debug(u'Ambiguous reference: %s' % reference)
return None
elif match.group(4) != u'end':
for x in range(chapter, int(match.group(4)) + 1):
unified_ref_list.append((book, x, 1, -1))
else:
log.debug(u'Unsupported reference: %s' % reference)
return None
elif match.group(3):
# Single chapter and verse
verse = int(match.group(3))
unified_ref_list.append((book, chapter, verse, verse))
else:
# Single chapter
unified_ref_list.append((book, chapter, -1, -1))
else:
log.debug(u'Invalid reference: %s' % reference)
return None
return unified_ref_list
class SearchResults(object):
"""
Encapsulate a set of search results. This is Bible-type independant.
"""
def __init__(self, book, chapter, verselist):
"""
Create the search result object.
``book``
The book of the Bible.
``chapter``
The chapter of the book.
``verselist``
The list of verses for this reading
"""
self.book = book
self.chapter = chapter
self.verselist = verselist
def has_verselist(self):
"""
Returns whether or not the verse list contains verses.
"""
return len(self.verselist) > 0
from common import BibleCommon
from manager import BibleManager from manager import BibleManager
from biblestab import BiblesTab from biblestab import BiblesTab
from mediaitem import BibleMediaItem from mediaitem import BibleMediaItem

View File

@ -241,10 +241,10 @@ class BiblesTab(SettingsTab):
self.BibleThemeComboBox.addItem(u'') self.BibleThemeComboBox.addItem(u'')
for theme in theme_list: for theme in theme_list:
self.BibleThemeComboBox.addItem(theme) self.BibleThemeComboBox.addItem(theme)
id = self.BibleThemeComboBox.findText( index = self.BibleThemeComboBox.findText(
unicode(self.bible_theme), QtCore.Qt.MatchExactly) unicode(self.bible_theme), QtCore.Qt.MatchExactly)
if id == -1: if index == -1:
# Not Found # Not Found
id = 0 index = 0
self.bible_theme = u'' self.bible_theme = u''
self.BibleThemeComboBox.setCurrentIndex(id) self.BibleThemeComboBox.setCurrentIndex(index)

View File

@ -1,256 +0,0 @@
# -*- 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, Meinert Jordan, Andreas Preikschat, Christian #
# Richter, Philip Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, #
# Carsten Tinggaard, Frode Woldsund #
# --------------------------------------------------------------------------- #
# 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 #
###############################################################################
import urllib2
import logging
import re
import chardet
import htmlentitydefs
only_verses = re.compile(r'([\w .]+)[ ]+([0-9]+)[ ]*[:|v|V][ ]*([0-9]+)'
r'(?:[ ]*-[ ]*([0-9]+|end))?(?:[ ]*,[ ]*([0-9]+)'
r'(?:[ ]*-[ ]*([0-9]+|end))?)?',
re.UNICODE)
chapter_range = re.compile(r'([\w .]+)[ ]+([0-9]+)[ ]*[:|v|V][ ]*'
r'([0-9]+|end)[ ]*-[ ]*([0-9]+)[ ]*[:|v|V][ ]*([0-9]+|end)',
re.UNICODE)
log = logging.getLogger(__name__)
def parse_reference(reference):
"""
This is the über-awesome function that takes a person's typed in string
and converts it to a reference list, a list of references to be queried
from the Bible database files.
The reference list is a list of tuples, with each tuple structured like
this::
(book, chapter, start_verse, end_verse)
"""
reference = reference.strip()
log.debug('parse_reference("%s")', reference)
reference_list = []
# We start with the most "complicated" match first, so that they are found
# first, and we don't have any "false positives".
match = chapter_range.match(reference)
if match:
log.debug('Found a chapter range.')
book = match.group(1)
from_verse = match.group(3)
to_verse = match.group(5)
if int(match.group(2)) == int(match.group(4)):
reference_list.append(
(book, int(match.group(2)), from_verse, to_verse)
)
else:
if int(match.group(2)) > int(match.group(4)):
from_chapter = int(match.group(4))
to_chapter = int(match.group(2))
else:
from_chapter = int(match.group(2))
to_chapter = int(match.group(4))
for chapter in xrange(from_chapter, to_chapter + 1):
if chapter == from_chapter:
reference_list.append((book, chapter, from_verse, -1))
elif chapter == to_chapter:
reference_list.append((book, chapter, 1, to_verse))
else:
reference_list.append((book, chapter, 1, -1))
else:
match = only_verses.match(reference)
if match:
log.debug('Found a verse range.')
book = match.group(1)
chapter = match.group(2)
verse = match.group(3)
if match.group(4) is None:
reference_list.append((book, chapter, verse, verse))
elif match.group(5) is None:
end_verse = match.group(4)
if end_verse == u'end':
end_verse = -1
reference_list.append((book, chapter, verse, end_verse))
elif match.group(6) is None:
reference_list.extend([
(book, chapter, verse, match.group(4)),
(book, chapter, match.group(5), match.group(5))
])
else:
end_verse = match.group(6)
if end_verse == u'end':
end_verse = -1
reference_list.extend([
(book, chapter, verse, match.group(4)),
(book, chapter, match.group(5), end_verse)
])
else:
log.debug('Didn\'t find anything.')
log.debug(reference_list)
return reference_list
class SearchResults(object):
"""
Encapsulate a set of search results. This is Bible-type independant.
"""
def __init__(self, book, chapter, verselist):
"""
Create the search result object.
``book``
The book of the Bible.
``chapter``
The chapter of the book.
``verselist``
The list of verses for this reading
"""
self.book = book
self.chapter = chapter
self.verselist = verselist
def has_verselist(self):
"""
Returns whether or not the verse list contains verses.
"""
return len(self.verselist) > 0
class BibleCommon(object):
"""
A common ancestor for bible download sites.
"""
log.info(u'BibleCommon')
def _get_web_text(self, urlstring, proxyurl):
"""
Get the HTML from the web page.
``urlstring``
The URL of the page to open.
``proxyurl``
The URL of a proxy server used to access the Internet.
"""
log.debug(u'get_web_text %s %s', proxyurl, urlstring)
if proxyurl:
proxy_support = urllib2.ProxyHandler({'http': self.proxyurl})
http_support = urllib2.HTTPHandler()
opener = urllib2.build_opener(proxy_support, http_support)
urllib2.install_opener(opener)
xml_string = u''
req = urllib2.Request(urlstring)
#Make us look like an IE Browser on XP to stop blocking by web site
req.add_header(u'User-Agent',
u'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)')
try:
handle = urllib2.urlopen(req)
html = handle.read()
details = chardet.detect(html)
xml_string = unicode(html, details[u'encoding'])
except IOError, e:
if hasattr(e, u'reason'):
log.exception(u'Reason for failure: %s', e.reason)
return xml_string
def _clean_text(self, text):
"""
Clean up text and remove extra characters after been downloaded from
the Internet.
``text``
The text from the web page that needs to be cleaned up.
"""
#return text.rstrip()
# Remove Headings from the Text
start_tag = text.find(u'<h')
while start_tag > -1:
end_tag = text.find(u'</h', start_tag)
text = text[:(start_tag - 1)] + text[(end_tag + 4)]
start_tag = text.find(u'<h')
# Remove Support References from the Text
start_tag = text.find(u'<sup>')
while start_tag > -1:
end_tag = text.find(u'</sup>')
text = text[:start_tag] + text[end_tag + 6:len(text)]
start_tag = text.find(u'<sup>')
start_tag = text.find(u'<SUP>')
while start_tag > -1:
end_tag = text.find(u'</SUP>')
text = text[:start_tag] + text[end_tag + 6:len(text)]
start_tag = text.find(u'<SUP>')
# Static Clean ups
text = text.replace(u'\n', u'')
text = text.replace(u'\r', u'')
text = text.replace(u'&nbsp;', u'')
text = text.replace(u'<P>', u'')
text = text.replace(u'<I>', u'')
text = text.replace(u'</I>', u'')
text = text.replace(u'<P />', u'')
text = text.replace(u'<p />', u'')
text = text.replace(u'</P>', u'')
text = text.replace(u'<BR>', u'')
text = text.replace(u'<BR />', u'')
text = text.replace(u'&quot;', u'\"')
text = text.replace(u'&apos;', u'\'')
# Remove some other tags
start_tag = text.find(u'<')
while start_tag > -1:
end_tag = text.find(u'>', start_tag)
text = text[:start_tag] + text[end_tag + 1:]
start_tag = text.find(u'<')
text = text.replace(u'>', u'')
return text.rstrip().lstrip()
def unescape(text):
"""
Removes HTML or XML character references and entities from a text string.
Courtesy of Fredrik Lundh, http://effbot.org/zone/re-sub.htm#unescape-html
@param text The HTML (or XML) source text.
@return The plain text, as a Unicode string, if necessary.
"""
def fixup(markup):
text = markup.group(0)
if text.startswith(u'&#'):
# character reference
try:
if text.startswith(u'&#x'):
return unichr(int(text[3:-1], 16))
else:
return unichr(int(text[2:-1]))
except ValueError:
pass
else:
# named entity
try:
text = unichr(htmlentitydefs.name2codepoint[text[1:-1]])
except KeyError:
pass
return text # leave as is
return re.sub(u'&#?\w+;', fixup, text)

View File

@ -36,7 +36,7 @@ from BeautifulSoup import BeautifulSoup, NavigableString
from openlp.core.lib import Receiver from openlp.core.lib import Receiver
from openlp.core.utils import AppLocation from openlp.core.utils import AppLocation
from openlp.plugins.bibles.lib.common import BibleCommon, SearchResults from openlp.plugins.bibles.lib import SearchResults
from openlp.plugins.bibles.lib.db import BibleDB, Book from openlp.plugins.bibles.lib.db import BibleDB, Book
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@ -177,7 +177,7 @@ class HTTPBooks(object):
return 0 return 0
class BGExtract(BibleCommon): class BGExtract(object):
""" """
Extract verses from BibleGateway Extract verses from BibleGateway
""" """
@ -239,7 +239,8 @@ class BGExtract(BibleCommon):
found_count += 1 found_count += 1
return SearchResults(bookname, chapter, verse_list) return SearchResults(bookname, chapter, verse_list)
class CWExtract(BibleCommon):
class CWExtract(object):
""" """
Extract verses from CrossWalk/BibleStudyTools Extract verses from CrossWalk/BibleStudyTools
""" """

View File

@ -26,13 +26,13 @@
import logging import logging
from PyQt4 import QtCore from PyQt4 import QtCore, QtGui
from openlp.core.lib import SettingsManager from openlp.core.lib import SettingsManager, translate
from openlp.core.utils import AppLocation from openlp.core.utils import AppLocation
from openlp.plugins.bibles.lib import parse_reference
from openlp.plugins.bibles.lib.db import BibleDB, BibleMeta from openlp.plugins.bibles.lib.db import BibleDB, BibleMeta
from common import parse_reference
from opensong import OpenSongBible from opensong import OpenSongBible
from osis import OSISBible from osis import OSISBible
from csvbible import CSVBible from csvbible import CSVBible
@ -63,20 +63,20 @@ class BibleFormat(object):
WebDownload = 3 WebDownload = 3
@staticmethod @staticmethod
def get_class(id): def get_class(format):
""" """
Return the appropriate imeplementation class. Return the appropriate imeplementation class.
``id`` ``format``
The Bible format. The Bible format.
""" """
if id == BibleFormat.OSIS: if format == BibleFormat.OSIS:
return OSISBible return OSISBible
elif id == BibleFormat.CSV: elif format == BibleFormat.CSV:
return CSVBible return CSVBible
elif id == BibleFormat.OpenSong: elif format == BibleFormat.OpenSong:
return OpenSongBible return OpenSongBible
elif id == BibleFormat.WebDownload: elif format == BibleFormat.WebDownload:
return HTTPBible return HTTPBible
else: else:
return None return None
@ -229,13 +229,33 @@ class BibleManager(object):
``versetext`` ``versetext``
Unicode. The scripture reference. Valid scripture references are: Unicode. The scripture reference. Valid scripture references are:
- Genesis 1
- Genesis 1-2
- Genesis 1:1 - Genesis 1:1
- Genesis 1:1-10 - Genesis 1:1-10
- Genesis 1:1-10,15-20
- Genesis 1:1-2:10 - Genesis 1:1-2:10
- Genesis 1:1-10,2:1-10
""" """
log.debug(u'BibleManager.get_verses("%s", "%s")', bible, versetext) log.debug(u'BibleManager.get_verses("%s", "%s")', bible, versetext)
reflist = parse_reference(versetext) reflist = parse_reference(versetext)
return self.db_cache[bible].get_verses(reflist) if reflist:
return self.db_cache[bible].get_verses(reflist)
else:
QtGui.QMessageBox.information(self.parent.mediaItem,
translate('BiblesPlugin.BibleManager',
'Scripture Reference Error'),
translate('BiblesPlugin.BibleManager', 'Your scripture '
'reference is either not supported by OpenLP or invalid. '
'Please make sure your reference conforms to one of the '
'following patterns:\n\n'
'Book Chapter\n'
'Book Chapter-Chapter\n'
'Book Chapter:Verse-Verse\n'
'Book Chapter:Verse-Verse,Verse-Verse\n'
'Book Chapter:Verse-Verse,Chapter:Verse-Verse\n'
'Book Chapter:Verse-Chapter:Verse\n'))
return None
def save_meta_data(self, bible, version, copyright, permissions): def save_meta_data(self, bible, version, copyright, permissions):
""" """

View File

@ -431,8 +431,8 @@ class BibleMediaItem(MediaManagerItem):
chapter_to = int(self.AdvancedToChapter.currentText()) chapter_to = int(self.AdvancedToChapter.currentText())
verse_from = int(self.AdvancedFromVerse.currentText()) verse_from = int(self.AdvancedFromVerse.currentText())
verse_to = int(self.AdvancedToVerse.currentText()) verse_to = int(self.AdvancedToVerse.currentText())
versetext = u'%s %s:%s-%s:%s' % (book, chapter_from, verse_from, \ versetext = u'%s %s:%s-%s:%s' % (book, chapter_from, verse_from,
chapter_to, verse_to) chapter_to, verse_to)
self.search_results = self.parent.manager.get_verses(bible, versetext) self.search_results = self.parent.manager.get_verses(bible, versetext)
if self.ClearAdvancedSearchComboBox.currentIndex() == 0: if self.ClearAdvancedSearchComboBox.currentIndex() == 0:
self.listView.clear() self.listView.clear()
@ -656,7 +656,3 @@ class BibleMediaItem(MediaManagerItem):
row = self.listView.setCurrentRow(count) row = self.listView.setCurrentRow(count)
if row: if row:
row.setSelected(True) row.setSelected(True)
def searchByReference(self, bible, search):
log.debug(u'searchByReference %s, %s', bible, search)
self.search_results = self.parent.manager.get_verses(bible, search)

View File

@ -38,29 +38,29 @@ class CustomTab(SettingsTab):
def setupUi(self): def setupUi(self):
self.setObjectName(u'CustomTab') self.setObjectName(u'CustomTab')
self.tabTitleVisible = translate('CustomPlugin.CustomTab', 'Custom') self.tabTitleVisible = translate('CustomPlugin.CustomTab', 'Custom')
self.CustomLayout = QtGui.QFormLayout(self) self.customLayout = QtGui.QFormLayout(self)
self.CustomLayout.setSpacing(8) self.customLayout.setSpacing(8)
self.CustomLayout.setMargin(8) self.customLayout.setMargin(8)
self.CustomLayout.setObjectName(u'CustomLayout') self.customLayout.setObjectName(u'customLayout')
self.CustomModeGroupBox = QtGui.QGroupBox(self) self.customModeGroupBox = QtGui.QGroupBox(self)
self.CustomModeGroupBox.setObjectName(u'CustomModeGroupBox') self.customModeGroupBox.setObjectName(u'customModeGroupBox')
self.CustomModeLayout = QtGui.QVBoxLayout(self.CustomModeGroupBox) self.customModeLayout = QtGui.QVBoxLayout(self.customModeGroupBox)
self.CustomModeLayout.setSpacing(8) self.customModeLayout.setSpacing(8)
self.CustomModeLayout.setMargin(8) self.customModeLayout.setMargin(8)
self.CustomModeLayout.setObjectName(u'CustomModeLayout') self.customModeLayout.setObjectName(u'customModeLayout')
self.DisplayFooterCheckBox = QtGui.QCheckBox(self.CustomModeGroupBox) self.displayFooterCheckBox = QtGui.QCheckBox(self.customModeGroupBox)
self.DisplayFooterCheckBox.setObjectName(u'DisplayFooterCheckBox') self.displayFooterCheckBox.setObjectName(u'displayFooterCheckBox')
self.CustomModeLayout.addWidget(self.DisplayFooterCheckBox) self.customModeLayout.addWidget(self.displayFooterCheckBox)
self.CustomLayout.setWidget( self.customLayout.setWidget(
0, QtGui.QFormLayout.LabelRole, self.CustomModeGroupBox) 0, QtGui.QFormLayout.LabelRole, self.customModeGroupBox)
QtCore.QObject.connect(self.DisplayFooterCheckBox, QtCore.QObject.connect(self.displayFooterCheckBox,
QtCore.SIGNAL(u'stateChanged(int)'), QtCore.SIGNAL(u'stateChanged(int)'),
self.onDisplayFooterCheckBoxChanged) self.onDisplayFooterCheckBoxChanged)
def retranslateUi(self): def retranslateUi(self):
self.CustomModeGroupBox.setTitle(translate('CustomPlugin.CustomTab', self.customModeGroupBox.setTitle(translate('CustomPlugin.CustomTab',
'Custom Display')) 'Custom Display'))
self.DisplayFooterCheckBox.setText( self.displayFooterCheckBox.setText(
translate('CustomPlugin.CustomTab', 'Display footer')) translate('CustomPlugin.CustomTab', 'Display footer'))
def onDisplayFooterCheckBoxChanged(self, check_state): def onDisplayFooterCheckBoxChanged(self, check_state):
@ -73,7 +73,7 @@ class CustomTab(SettingsTab):
self.displayFooter = QtCore.QSettings().value( self.displayFooter = QtCore.QSettings().value(
self.settingsSection + u'/display footer', self.settingsSection + u'/display footer',
QtCore.QVariant(True)).toBool() QtCore.QVariant(True)).toBool()
self.DisplayFooterCheckBox.setChecked(self.displayFooter) self.displayFooterCheckBox.setChecked(self.displayFooter)
def save(self): def save(self):
QtCore.QSettings().setValue(self.settingsSection + u'/display footer', QtCore.QSettings().setValue(self.settingsSection + u'/display footer',

View File

@ -42,20 +42,20 @@ class SongFormat(object):
CSV = 3 CSV = 3
@staticmethod @staticmethod
def get_class(id): def get_class(format):
""" """
Return the appropriate imeplementation class. Return the appropriate imeplementation class.
``id`` ``format``
The song format. The song format.
""" """
# if id == SongFormat.OpenLyrics: # if format == SongFormat.OpenLyrics:
# return OpenLyricsSong # return OpenLyricsSong
# elif id == SongFormat.OpenSong: # elif format == SongFormat.OpenSong:
# return OpenSongSong # return OpenSongSong
# elif id == SongFormat.CCLI: # elif format == SongFormat.CCLI:
# return CCLISong # return CCLISong
# elif id == SongFormat.CSV: # elif format == SongFormat.CSV:
# return CSVSong # return CSVSong
# else: # else:
return None return None