diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py
index 92efd152c..706448bf3 100644
--- a/openlp/core/lib/mediamanageritem.py
+++ b/openlp/core/lib/mediamanageritem.py
@@ -29,7 +29,7 @@ import os
from PyQt4 import QtCore, QtGui
from openlp.core.lib import context_menu_action, context_menu_separator, \
- SettingsManager, OpenLPToolbar, ServiceItem, build_icon
+ SettingsManager, OpenLPToolbar, ServiceItem, build_icon, translate
log = logging.getLogger(__name__)
@@ -110,7 +110,6 @@ class MediaManagerItem(QtGui.QWidget):
self.remoteTriggered = None
self.ServiceItemIconName = None
self.singleServiceItem = True
- self.addToServiceItem = False
self.PageLayout = QtGui.QVBoxLayout(self)
self.PageLayout.setSpacing(0)
self.PageLayout.setContentsMargins(4, 0, 4, 0)
@@ -133,6 +132,7 @@ class MediaManagerItem(QtGui.QWidget):
self.hasEditIcon = True
self.hasFileIcon = False
self.hasDeleteIcon = True
+ self.addToServiceItem = False
def retranslateUi(self):
"""
@@ -208,50 +208,62 @@ class MediaManagerItem(QtGui.QWidget):
## Import Button ##
if self.hasImportIcon:
self.addToolbarButton(
- u'Import %s' % self.PluginNameShort,
- u'%s %s' % (self.trUtf8('Import a'), self.PluginNameVisible),
+ unicode(translate(u'MediaManagerItem', u'Import %s')) % \
+ self.PluginNameShort,
+ unicode(translate(u'MediaManagerItem', u'Import a %s')) % \
+ self.PluginNameVisible,
u':/general/general_import.png', self.onImportClick)
## File Button ##
if self.hasFileIcon:
self.addToolbarButton(
- u'Load %s' % self.PluginNameShort,
- u'%s %s' % (self.trUtf8('Load a new'), self.PluginNameVisible),
+ unicode(translate(u'MediaManagerItem', u'Load %s')) % \
+ self.PluginNameShort,
+ unicode(translate(u'MediaManagerItem', u'Load a new %s')) % \
+ self.PluginNameVisible,
u':/general/general_open.png', self.onFileClick)
## New Button ##
if self.hasNewIcon:
self.addToolbarButton(
- u'New %s' % self.PluginNameShort,
- u'%s %s' % (self.trUtf8('Add a new'), self.PluginNameVisible),
+ unicode(translate(u'MediaManagerItem', u'New %s')) % \
+ self.PluginNameShort,
+ unicode(translate(u'MediaManagerItem', u'Add a new %s')) % \
+ self.PluginNameVisible,
u':/general/general_new.png', self.onNewClick)
## Edit Button ##
if self.hasEditIcon:
self.addToolbarButton(
- u'Edit %s' % self.PluginNameShort,
- u'%s %s' % (self.trUtf8('Edit the selected'),
- self.PluginNameVisible),
+ unicode(translate(u'MediaManagerItem', u'Edit %s')) % \
+ self.PluginNameShort,
+ unicode(translate(
+ u'MediaManagerItem', u'Edit the selected %s')) % \
+ self.PluginNameVisible,
u':/general/general_edit.png', self.onEditClick)
## Delete Button ##
if self.hasDeleteIcon:
self.addToolbarButton(
- u'Delete %s' % self.PluginNameShort,
- self.trUtf8('Delete the selected item'),
+ unicode(translate(u'MediaManagerItem', u'Delete %s')) % \
+ self.PluginNameShort,
+ translate(u'MediaManagerItem', u'Delete the selected item'),
u':/general/general_delete.png', self.onDeleteClick)
## Separator Line ##
self.addToolbarSeparator()
## Preview ##
self.addToolbarButton(
- u'Preview %s' % self.PluginNameShort,
- self.trUtf8('Preview the selected item'),
+ unicode(translate(u'MediaManagerItem', u'Preview %s')) % \
+ self.PluginNameShort,
+ translate(u'MediaManagerItem', u'Preview the selected item'),
u':/general/general_preview.png', self.onPreviewClick)
## Live Button ##
self.addToolbarButton(
u'Go Live',
- self.trUtf8('Send the selected item live'),
+ translate(u'MediaManagerItem', u'Send the selected item live'),
u':/general/general_live.png', self.onLiveClick)
## Add to service Button ##
self.addToolbarButton(
- u'Add %s to Service' % self.PluginNameShort,
- self.trUtf8('Add the selected item(s) to the service'),
+ unicode(translate(u'MediaManagerItem', u'Add %s to Service')) % \
+ self.PluginNameShort,
+ translate(u'MediaManagerItem',
+ u'Add the selected item(s) to the service'),
u':/general/general_add.png', self.onAddClick)
def addListViewToToolBar(self):
@@ -273,34 +285,40 @@ class MediaManagerItem(QtGui.QWidget):
self.ListView.addAction(
context_menu_action(
self.ListView, u':/general/general_edit.png',
- u'%s %s' % (self.trUtf8('&Edit'), self.PluginNameVisible),
+ unicode(translate(u'MediaManagerItem', u'&Edit %s')) % \
+ self.PluginNameVisible,
self.onEditClick))
self.ListView.addAction(context_menu_separator(self.ListView))
if self.hasDeleteIcon:
self.ListView.addAction(
context_menu_action(
self.ListView, u':/general/general_delete.png',
- u'%s %s' % (self.trUtf8('&Delete'), self.PluginNameVisible),
+ unicode(translate(u'MediaManagerItem', u'&Delete %s')) % \
+ self.PluginNameVisible,
self.onDeleteClick))
self.ListView.addAction(context_menu_separator(self.ListView))
self.ListView.addAction(
context_menu_action(
self.ListView, u':/general/general_preview.png',
- u'%s %s' % (self.trUtf8('&Preview'), self.PluginNameVisible),
+ unicode(translate(u'MediaManagerItem', u'&Preview %s')) % \
+ self.PluginNameVisible,
self.onPreviewClick))
self.ListView.addAction(
context_menu_action(
self.ListView, u':/general/general_live.png',
- self.trUtf8('&Show Live'), self.onLiveClick))
+ translate(u'MediaManagerItem', u'&Show Live'),
+ self.onLiveClick))
self.ListView.addAction(
context_menu_action(
self.ListView, u':/general/general_add.png',
- self.trUtf8('&Add to Service'), self.onAddClick))
+ translate(u'MediaManagerItem', u'&Add to Service'),
+ self.onAddClick))
if self.addToServiceItem:
self.ListView.addAction(
context_menu_action(
self.ListView, u':/general/general_add.png',
- self.trUtf8('&Add to selected Service Item'),
+ translate(u'MediaManagerItem',
+ u'&Add to selected Service Item'),
self.onAddEditClick))
QtCore.QObject.connect(
self.ListView, QtCore.SIGNAL(u'doubleClicked(QModelIndex)'),
@@ -325,6 +343,19 @@ class MediaManagerItem(QtGui.QWidget):
"""
pass
+ def checkItemSelected(self, message):
+ """
+ Check if a list item is selected so an action may be performed on it
+
+ ``message``
+ The message to give the user if no item is selected
+ """
+ if not self.ListView.selectedIndexes():
+ QtGui.QMessageBox.information(self,
+ translate(u'MediaManagerItem', u'No Items Selected'), message)
+ return False
+ return True
+
def onFileClick(self):
files = QtGui.QFileDialog.getOpenFileNames(
self, self.OnNewPrompt,
@@ -391,8 +422,9 @@ class MediaManagerItem(QtGui.QWidget):
def onPreviewClick(self):
if not self.ListView.selectedIndexes() and not self.remoteTriggered:
QtGui.QMessageBox.information(self,
- self.trUtf8('No Items Selected'),
- self.trUtf8('You must select one or more items.'))
+ translate(u'MediaManagerItem', u'No Items Selected'),
+ translate(u'MediaManagerItem',
+ u'You must select one or more items to preview.'))
else:
log.debug(self.PluginNameShort + u' Preview requested')
service_item = self.buildServiceItem()
@@ -403,8 +435,9 @@ class MediaManagerItem(QtGui.QWidget):
def onLiveClick(self):
if not self.ListView.selectedIndexes():
QtGui.QMessageBox.information(self,
- self.trUtf8('No Items Selected'),
- self.trUtf8('You must select one or more items.'))
+ translate(u'MediaManagerItem', u'No Items Selected'),
+ translate(u'MediaManagerItem',
+ u'You must select one or more items to send live.'))
else:
log.debug(self.PluginNameShort + u' Live requested')
service_item = self.buildServiceItem()
@@ -415,8 +448,9 @@ class MediaManagerItem(QtGui.QWidget):
def onAddClick(self):
if not self.ListView.selectedIndexes() and not self.remoteTriggered:
QtGui.QMessageBox.information(self,
- self.trUtf8('No Items Selected'),
- self.trUtf8('You must select one or more items.'))
+ translate(u'MediaManagerItem', u'No Items Selected'),
+ translate(u'MediaManagerItem',
+ u'You must select one or more items.'))
else:
#Is it posssible to process multiple list items to generate multiple
#service items?
@@ -438,16 +472,17 @@ class MediaManagerItem(QtGui.QWidget):
def onAddEditClick(self):
if not self.ListView.selectedIndexes() and not self.remoteTriggered:
QtGui.QMessageBox.information(self,
- self.trUtf8('No items selected'),
- self.trUtf8('You must select one or more items'))
+ translate(u'MediaManagerItem', u'No items selected'),
+ translate(u'MediaManagerItem',
+ u'You must select one or more items'))
else:
log.debug(self.PluginNameShort + u' Add requested')
service_item = self.parent.service_manager.getServiceItem()
if not service_item:
QtGui.QMessageBox.information(self,
- self.trUtf8('No Service Item Selected'),
- self.trUtf8(
- 'You must select an existing service item to add to.'))
+ translate(u'MediaManagerItem', u'No Service Item Selected'),
+ translate(u'MediaManagerItem',
+ u'You must select an existing service item to add to.'))
elif self.title.lower() == service_item.name.lower():
self.generateSlideData(service_item)
self.parent.service_manager.addServiceItem(service_item,
@@ -455,9 +490,9 @@ class MediaManagerItem(QtGui.QWidget):
else:
#Turn off the remote edit update message indicator
QtGui.QMessageBox.information(self,
- self.trUtf8('Invalid Service Item'),
- self.trUtf8(unicode(
- 'You must select a %s service item.' % self.title)))
+ translate(u'MediaManagerItem', u'Invalid Service Item'),
+ translate(unicode(u'MediaManagerItem',
+ u'You must select a %s service item.')) % self.title)
def buildServiceItem(self, item=None):
"""
diff --git a/openlp/core/lib/plugin.py b/openlp/core/lib/plugin.py
index ebb38615d..0c22723a4 100644
--- a/openlp/core/lib/plugin.py
+++ b/openlp/core/lib/plugin.py
@@ -231,7 +231,8 @@ class Plugin(QtCore.QObject):
Show a dialog when the user clicks on the 'About' button in the plugin
manager.
"""
- pass
+ raise NotImplementedError(
+ u'Plugin.about needs to be defined by the plugin')
def initialise(self):
"""
diff --git a/openlp/core/ui/splashscreen.py b/openlp/core/ui/splashscreen.py
index 10cea5a11..f49d73815 100644
--- a/openlp/core/ui/splashscreen.py
+++ b/openlp/core/ui/splashscreen.py
@@ -24,13 +24,15 @@
###############################################################################
from PyQt4 import QtCore, QtGui
-from openlp.core.lib import build_icon
+
+from openlp.core.lib import build_icon, translate
class SplashScreen(object):
def __init__(self, version):
self.splash_screen = QtGui.QSplashScreen()
self.setupUi()
- self.message = self.splash_screen.trUtf8('Starting')\
+ self.message = translate(
+ u'Splashscreen', u'Starting')\
+ '..... ' + version
def setupUi(self):
@@ -58,7 +60,7 @@ class SplashScreen(object):
def retranslateUi(self):
self.splash_screen.setWindowTitle(
- self.splash_screen.trUtf8('Splash Screen'))
+ translate(u'Splashscreen', u'Splash Screen'))
def show(self):
self.splash_screen.show()
diff --git a/openlp/plugins/alerts/alertsplugin.py b/openlp/plugins/alerts/alertsplugin.py
index 7474a0564..eb6d1f116 100644
--- a/openlp/plugins/alerts/alertsplugin.py
+++ b/openlp/plugins/alerts/alertsplugin.py
@@ -64,9 +64,9 @@ class alertsPlugin(Plugin):
self.toolsAlertItem.setIcon(AlertIcon)
self.toolsAlertItem.setObjectName(u'toolsAlertItem')
self.toolsAlertItem.setText(
- translate(u'AlertsPlugin.AlertsPlugin', u'&Alert'))
+ translate(u'AlertsPlugin', u'&Alert'))
self.toolsAlertItem.setStatusTip(
- translate(u'AlertsPlugin.AlertsPlugin', u'Show an alert message'))
+ translate(u'AlertsPlugin', u'Show an alert message'))
self.toolsAlertItem.setShortcut(u'F7')
self.service_manager.parent.ToolsMenu.addAction(self.toolsAlertItem)
QtCore.QObject.connect(self.toolsAlertItem,
@@ -94,7 +94,7 @@ class alertsPlugin(Plugin):
self.alertForm.exec_()
def about(self):
- about_text = translate(u'AlertsPlugin.AlertsPlugin',
+ about_text = translate(u'AlertsPlugin',
u'Alerts Plugin
This plugin '
u'controls the displaying of alerts on the presentations screen')
return about_text
diff --git a/openlp/plugins/bibles/bibleplugin.py b/openlp/plugins/bibles/bibleplugin.py
index ca018cabd..f3998e5a5 100644
--- a/openlp/plugins/bibles/bibleplugin.py
+++ b/openlp/plugins/bibles/bibleplugin.py
@@ -70,7 +70,8 @@ class BiblePlugin(Plugin):
self.ImportBibleItem = QtGui.QAction(import_menu)
self.ImportBibleItem.setObjectName(u'ImportBibleItem')
import_menu.addAction(self.ImportBibleItem)
- self.ImportBibleItem.setText(import_menu.trUtf8('&Bible'))
+ self.ImportBibleItem.setText(
+ translate(u'BiblePlugin', u'&Bible'))
# Signals and slots
QtCore.QObject.connect(self.ImportBibleItem,
QtCore.SIGNAL(u'triggered()'), self.onBibleImportClick)
@@ -80,7 +81,8 @@ class BiblePlugin(Plugin):
self.ExportBibleItem = QtGui.QAction(export_menu)
self.ExportBibleItem.setObjectName(u'ExportBibleItem')
export_menu.addAction(self.ExportBibleItem)
- self.ExportBibleItem.setText(export_menu.trUtf8('&Bible'))
+ self.ExportBibleItem.setText(translate(
+ u'BiblePlugin', u'&Bible'))
self.ExportBibleItem.setVisible(False)
def onBibleImportClick(self):
@@ -88,7 +90,7 @@ class BiblePlugin(Plugin):
self.media_item.onImportClick()
def about(self):
- about_text = translate(u'BiblesPlugin.BiblePlugin',
+ about_text = translate(u'BiblePlugin',
u'Bible Plugin
This '
u'plugin allows bible verses from different sources to be '
u'displayed on the screen during the service.')
diff --git a/openlp/plugins/bibles/forms/importwizardform.py b/openlp/plugins/bibles/forms/importwizardform.py
index e486b3acd..fbaa2ec14 100644
--- a/openlp/plugins/bibles/forms/importwizardform.py
+++ b/openlp/plugins/bibles/forms/importwizardform.py
@@ -303,17 +303,20 @@ class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard):
self.setField(u'csv_versefile', QtCore.QVariant(''))
self.setField(u'opensong_file', QtCore.QVariant(''))
self.setField(u'web_location', QtCore.QVariant(WebDownload.Crosswalk))
- self.setField(u'web_biblename', QtCore.QVariant(self.BibleComboBox))
+ self.setField(u'web_biblename',
+ QtCore.QVariant(self.BibleComboBox.currentIndex()))
self.setField(u'proxy_server',
settings.value(u'proxy address', QtCore.QVariant(u'')))
self.setField(u'proxy_username',
settings.value(u'proxy username', QtCore.QVariant(u'')))
self.setField(u'proxy_password',
settings.value(u'proxy password', QtCore.QVariant(u'')))
- self.setField(u'license_version', QtCore.QVariant(self.VersionNameEdit))
- self.setField(u'license_copyright', QtCore.QVariant(self.CopyrightEdit))
+ self.setField(u'license_version',
+ QtCore.QVariant(self.VersionNameEdit.text()))
+ self.setField(u'license_copyright',
+ QtCore.QVariant(self.CopyrightEdit.text()))
self.setField(u'license_permission',
- QtCore.QVariant(self.PermissionEdit))
+ QtCore.QVariant(self.PermissionEdit.text()))
self.onLocationComboBoxChanged(WebDownload.Crosswalk)
settings.endGroup()
diff --git a/openlp/plugins/bibles/lib/db.py b/openlp/plugins/bibles/lib/db.py
index 97983e72c..377803b19 100644
--- a/openlp/plugins/bibles/lib/db.py
+++ b/openlp/plugins/bibles/lib/db.py
@@ -29,8 +29,9 @@ import chardet
import re
from sqlalchemy import or_
-from PyQt4 import QtCore
+from PyQt4 import QtCore, QtGui
+from openlp.core.lib import translate
from openlp.plugins.bibles.lib.models import *
log = logging.getLogger(__name__)
@@ -304,14 +305,22 @@ class BibleDB(QtCore.QObject):
if db_book:
book = db_book.name
log.debug(u'Book name corrected to "%s"', book)
- verses = self.session.query(Verse)\
- .filter_by(book_id=db_book.id)\
- .filter_by(chapter=chapter)\
- .filter(Verse.verse >= start_verse)\
- .filter(Verse.verse <= end_verse)\
- .order_by(Verse.verse)\
- .all()
- verse_list.extend(verses)
+ verses = self.session.query(Verse)\
+ .filter_by(book_id=db_book.id)\
+ .filter_by(chapter=chapter)\
+ .filter(Verse.verse >= start_verse)\
+ .filter(Verse.verse <= end_verse)\
+ .order_by(Verse.verse)\
+ .all()
+ verse_list.extend(verses)
+ else:
+ log.debug(u'OpenLP failed to find book %s', book)
+ QtGui.QMessageBox.information(self.bible_plugin.media_item,
+ translate(u'BibleDB', u'Book not found'),
+ translate(u'BibleDB', u'The book you requested could not '
+ u'be found in this bible. Please check your spelling '
+ u'and that this is a complete bible not just one '
+ u'testament.'))
return verse_list
def verse_search(self, text):
@@ -383,4 +392,3 @@ class BibleDB(QtCore.QObject):
log.debug(u'...............................Verses ')
verses = self.session.query(Verse).all()
log.debug(verses)
-
diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py
index 6c5f21f23..9bda44ede 100644
--- a/openlp/plugins/bibles/lib/mediaitem.py
+++ b/openlp/plugins/bibles/lib/mediaitem.py
@@ -57,7 +57,6 @@ class BibleMediaItem(MediaManagerItem):
self.IconPath = u'songs/song'
self.ListViewWithDnD_class = BibleListView
self.lastReference = []
- self.addToServiceItem = True
MediaManagerItem.__init__(self, parent, icon, title)
# place to store the search results
self.search_results = {}
diff --git a/openlp/plugins/custom/customplugin.py b/openlp/plugins/custom/customplugin.py
index 9ae208a28..2ad95b026 100644
--- a/openlp/plugins/custom/customplugin.py
+++ b/openlp/plugins/custom/customplugin.py
@@ -67,7 +67,7 @@ class CustomPlugin(Plugin):
self.remove_toolbox_item()
def about(self):
- about_text = translate(u'CustomPlugin.CustomPlugin',
+ about_text = translate(u'CustomPlugin',
u'Custom Plugin
This plugin '
u'allows slides to be displayed on the screen in the same way '
u'songs are. This plugin provides greater freedom over the '
diff --git a/openlp/plugins/custom/lib/mediaitem.py b/openlp/plugins/custom/lib/mediaitem.py
index 581334410..4cbf25476 100644
--- a/openlp/plugins/custom/lib/mediaitem.py
+++ b/openlp/plugins/custom/lib/mediaitem.py
@@ -115,16 +115,24 @@ class CustomMediaItem(MediaManagerItem):
self.parent.edit_custom_form.exec_()
def onEditClick(self):
- item = self.ListView.currentItem()
- if item:
+ """
+ Edit a custom item
+ """
+ if self.checkItemSelected(translate(u'CustomPlugin.MediaItem',
+ u'You must select an item to edit.')):
+ item = self.ListView.currentItem()
item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
self.parent.edit_custom_form.loadCustom(item_id, False)
self.parent.edit_custom_form.exec_()
self.initialise()
def onDeleteClick(self):
- item = self.ListView.currentItem()
- if item:
+ """
+ Remove a custom item from the list and database
+ """
+ if self.checkItemSelected(translate(u'CustomPlugin.MediaItem',
+ u'You must select an item to delete.')):
+ item = self.ListView.currentItem()
item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
self.parent.custommanager.delete_custom(item_id)
row = self.ListView.row(item)
diff --git a/openlp/plugins/images/imageplugin.py b/openlp/plugins/images/imageplugin.py
index ca375ed6c..343a87491 100644
--- a/openlp/plugins/images/imageplugin.py
+++ b/openlp/plugins/images/imageplugin.py
@@ -56,7 +56,7 @@ class ImagePlugin(Plugin):
return ImageMediaItem(self, self.icon, self.name)
def about(self):
- about_text = translate(u'ImagePlugin.ImagePlugin', u'Image Plugin'
+ about_text = translate(u'ImagePlugin', u'Image Plugin'
u'
Allows images of all types to be displayed. If a number '
u'of images are selected together and presented on the live '
u'controller it is possible to turn them into a timed loop.
'
diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py
index 6e791badd..3fbde6af2 100644
--- a/openlp/plugins/images/lib/mediaitem.py
+++ b/openlp/plugins/images/lib/mediaitem.py
@@ -54,7 +54,6 @@ class ImageMediaItem(MediaManagerItem):
# be instanced by the base MediaManagerItem
self.ListViewWithDnD_class = ImageListView
MediaManagerItem.__init__(self, parent, icon, title)
- self.addToServiceItem = True
def initPluginNameVisible(self):
self.PluginNameVisible = translate(u'ImagePlugin.MediaItem', u'Image')
@@ -74,6 +73,7 @@ class ImageMediaItem(MediaManagerItem):
self.hasFileIcon = True
self.hasNewIcon = False
self.hasEditIcon = False
+ self.addToServiceItem = True
def initialise(self):
log.debug(u'initialise')
@@ -116,14 +116,18 @@ class ImageMediaItem(MediaManagerItem):
self.PageLayout.addWidget(self.ImageWidget)
def onDeleteClick(self):
- items = self.ListView.selectedIndexes()
- if items:
+ """
+ Remove an image item from the list
+ """
+ if self.checkItemSelected(translate(u'ImagePlugin.MediaItem',
+ u'You must select an item to delete.')):
+ items = self.ListView.selectedIndexes()
for item in items:
text = self.ListView.item(item.row())
if text:
try:
- os.remove(
- os.path.join(self.servicePath, unicode(text.text())))
+ os.remove(os.path.join(self.servicePath,
+ unicode(text.text())))
except OSError:
#if not present do not worry
pass
diff --git a/openlp/plugins/media/lib/mediaitem.py b/openlp/plugins/media/lib/mediaitem.py
index fd397a35f..60bc190dc 100644
--- a/openlp/plugins/media/lib/mediaitem.py
+++ b/openlp/plugins/media/lib/mediaitem.py
@@ -137,8 +137,12 @@ class MediaMediaItem(MediaManagerItem):
self.settingsSection))
def onDeleteClick(self):
- item = self.ListView.currentItem()
- if item:
+ """
+ Remove a media item from the list
+ """
+ if self.checkItemSelected(translate(u'MediaPlugin.MediaItem',
+ u'You must select an item to delete.')):
+ item = self.ListView.currentItem()
row = self.ListView.row(item)
self.ListView.takeItem(row)
SettingsManager.set_list(self.settingsSection,
@@ -152,4 +156,3 @@ class MediaMediaItem(MediaManagerItem):
item_name.setIcon(build_icon(img))
item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(file))
self.ListView.addItem(item_name)
-
diff --git a/openlp/plugins/media/mediaplugin.py b/openlp/plugins/media/mediaplugin.py
index 7c773c5a7..7f6e54472 100644
--- a/openlp/plugins/media/mediaplugin.py
+++ b/openlp/plugins/media/mediaplugin.py
@@ -81,7 +81,7 @@ class MediaPlugin(Plugin):
return MediaMediaItem(self, self.icon, self.name)
def about(self):
- about_text = translate(u'MediaPlugin.MediaPlugin',
+ about_text = translate(u'MediaPlugin',
u'Media Plugin
This plugin '
u'allows the playing of audio and video media')
return about_text
diff --git a/openlp/plugins/presentations/lib/mediaitem.py b/openlp/plugins/presentations/lib/mediaitem.py
index be2cecff4..51e2db23b 100644
--- a/openlp/plugins/presentations/lib/mediaitem.py
+++ b/openlp/plugins/presentations/lib/mediaitem.py
@@ -174,8 +174,12 @@ class PresentationMediaItem(MediaManagerItem):
self.ListView.addItem(item_name)
def onDeleteClick(self):
- item = self.ListView.currentItem()
- if item:
+ """
+ Remove a presentation item from the list
+ """
+ if self.checkItemSelected(translate(u'PresentationPlugin.MediaItem',
+ u'You must select an item to delete.')):
+ item = self.ListView.currentItem()
row = self.ListView.row(item)
self.ListView.takeItem(row)
SettingsManager.set_list(self.settingsSection,
diff --git a/openlp/plugins/presentations/presentationplugin.py b/openlp/plugins/presentations/presentationplugin.py
index 036e8fc42..f59968287 100644
--- a/openlp/plugins/presentations/presentationplugin.py
+++ b/openlp/plugins/presentations/presentationplugin.py
@@ -108,7 +108,7 @@ class PresentationPlugin(Plugin):
return False
def about(self):
- about_text = translate(u'PresentationPlugin.PresentationPlugin',
+ about_text = translate(u'PresentationPlugin',
u'Presentation Plugin
Delivers '
u'the ability to show presentations using a number of different '
u'programs. The choice of available presentation programs is '
diff --git a/openlp/plugins/remotes/remoteplugin.py b/openlp/plugins/remotes/remoteplugin.py
index e3d68a9a3..c839f1595 100644
--- a/openlp/plugins/remotes/remoteplugin.py
+++ b/openlp/plugins/remotes/remoteplugin.py
@@ -69,7 +69,7 @@ class RemotesPlugin(Plugin):
"""
Information about this plugin
"""
- about_text = translate(u'RemotePlugin.RemotePlugin',
+ about_text = translate(u'RemotePlugin',
u'Remote Plugin
This plugin '
u'provides the ability to send messages to a running version of '
u'openlp on a different computer via a web browser or other app
'
diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py
index d6f2f5ce8..60faaa826 100644
--- a/openlp/plugins/songs/lib/mediaitem.py
+++ b/openlp/plugins/songs/lib/mediaitem.py
@@ -275,15 +275,23 @@ class SongMediaItem(MediaManagerItem):
self.edit_song_form.exec_()
def onEditClick(self):
- item = self.ListView.currentItem()
- if item:
+ """
+ Edit a song
+ """
+ if self.checkItemSelected(translate(u'SongsPlugin.MediaItem',
+ u'You must select an item to edit.')):
+ item = self.ListView.currentItem()
item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
self.edit_song_form.loadSong(item_id, False)
self.edit_song_form.exec_()
def onDeleteClick(self):
- items = self.ListView.selectedIndexes()
- if items:
+ """
+ Remove a song from the list and database
+ """
+ if self.checkItemSelected(translate(u'SongsPlugin.MediaItem',
+ u'You must select an item to delete.')):
+ items = self.ListView.selectedIndexes()
if len(items) == 1:
del_message = translate(u'SongsPlugin.MediaItem',
u'Delete song?')
@@ -371,4 +379,3 @@ class SongMediaItem(MediaManagerItem):
song.title, author_audit, song.copyright, song.ccli_number
]
return True
-
diff --git a/openlp/plugins/songs/songsplugin.py b/openlp/plugins/songs/songsplugin.py
index 993b18bb9..21ec610b2 100644
--- a/openlp/plugins/songs/songsplugin.py
+++ b/openlp/plugins/songs/songsplugin.py
@@ -94,36 +94,44 @@ class SongsPlugin(Plugin):
# Main song import menu item - will eventually be the only one
self.SongImportItem = QtGui.QAction(import_menu)
self.SongImportItem.setObjectName(u'SongImportItem')
- self.SongImportItem.setText(import_menu.trUtf8('&Song'))
+ self.SongImportItem.setText(translate(
+ u'SongsPlugin', u'&Song'))
self.SongImportItem.setToolTip(
- import_menu.trUtf8('Import songs using the import wizard.'))
+ translate(u'SongsPlugin',
+ u'Import songs using the import wizard.'))
import_menu.addAction(self.SongImportItem)
# Songs of Fellowship import menu item - will be removed and the
# functionality will be contained within the import wizard
self.ImportSofItem = QtGui.QAction(import_menu)
self.ImportSofItem.setObjectName(u'ImportSofItem')
self.ImportSofItem.setText(
- import_menu.trUtf8('Songs of Fellowship (temp menu item)'))
+ translate(u'SongsPlugin',
+ u'Songs of Fellowship (temp menu item)'))
self.ImportSofItem.setToolTip(
- import_menu.trUtf8('Import songs from the VOLS1_2.RTF, sof3words' \
- + '.rtf and sof4words.rtf supplied with the music books'))
+ translate(u'SongsPlugin',
+ u'Import songs from the VOLS1_2.RTF, sof3words' \
+ + u'.rtf and sof4words.rtf supplied with the music books'))
self.ImportSofItem.setStatusTip(
- import_menu.trUtf8('Import songs from the VOLS1_2.RTF, sof3words' \
- + '.rtf and sof4words.rtf supplied with the music books'))
+ translate(u'SongsPlugin',
+ u'Import songs from the VOLS1_2.RTF, sof3words' \
+ + u'.rtf and sof4words.rtf supplied with the music books'))
import_menu.addAction(self.ImportSofItem)
# OpenOffice.org import menu item - will be removed and the
# functionality will be contained within the import wizard
self.ImportOooItem = QtGui.QAction(import_menu)
self.ImportOooItem.setObjectName(u'ImportOooItem')
self.ImportOooItem.setText(
- import_menu.trUtf8('Generic Document/Presentation Import '
- '(temp menu item)'))
+ translate(u'SongsPlugin',
+ u'Generic Document/Presentation Import '
+ u'(temp menu item)'))
self.ImportOooItem.setToolTip(
- import_menu.trUtf8('Import songs from '
- 'Word/Writer/Powerpoint/Impress'))
+ translate(u'SongsPlugin',
+ u'Import songs from '
+ u'Word/Writer/Powerpoint/Impress'))
self.ImportOooItem.setStatusTip(
- import_menu.trUtf8('Import songs from '
- 'Word/Writer/Powerpoint/Impress'))
+ translate(u'SongsPlugin',
+ u'Import songs from '
+ u'Word/Writer/Powerpoint/Impress'))
import_menu.addAction(self.ImportOooItem)
# Signals and slots
QtCore.QObject.connect(self.SongImportItem,
@@ -151,7 +159,7 @@ class SongsPlugin(Plugin):
def onImportSofItemClick(self):
filenames = QtGui.QFileDialog.getOpenFileNames(
- None, translate(u'SongsPlugin.Songsplugin',
+ None, translate(u'SongsPlugin',
u'Open Songs of Fellowship file'),
u'', u'Songs of Fellowship file (*.rtf *.RTF)')
try:
@@ -161,18 +169,20 @@ class SongsPlugin(Plugin):
except:
log.exception('Could not import SoF file')
QtGui.QMessageBox.critical(None,
- self.ImportSongMenu.trUtf8('Import Error'),
- self.ImportSongMenu.trUtf8('Error importing Songs of '
- 'Fellowship file.\nOpenOffice.org must be installed'
- ' and you must be using an unedited copy of the RTF'
- ' included with the Songs of Fellowship Music Editions'),
+ translate(u'SongsPlugin',
+ u'Import Error'),
+ translate(u'SongsPlugin',
+ u'Error importing Songs of '
+ u'Fellowship file.\nOpenOffice.org must be installed'
+ u' and you must be using an unedited copy of the RTF'
+ u' included with the Songs of Fellowship Music Editions'),
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok),
QtGui.QMessageBox.Ok)
Receiver.send_message(u'songs_load_list')
def onImportOooItemClick(self):
filenames = QtGui.QFileDialog.getOpenFileNames(
- None, translate(u'SongsPlugin.Songsplugin',
+ None, translate(u'SongsPlugin',
u'Open documents or presentations'),
u'', u'All Files(*.*)')
oooimport = OooImport(self.manager)
@@ -180,7 +190,7 @@ class SongsPlugin(Plugin):
Receiver.send_message(u'songs_load_list')
def about(self):
- about_text = translate(u'SongsPlugin.Songsplugin',
+ about_text = translate(u'SongsPlugin',
u'Song Plugin
'
u'This plugin allows songs to be managed and displayed.')
return about_text
diff --git a/openlp/plugins/songusage/songusageplugin.py b/openlp/plugins/songusage/songusageplugin.py
index 6cbb08e1a..0b3d7971c 100644
--- a/openlp/plugins/songusage/songusageplugin.py
+++ b/openlp/plugins/songusage/songusageplugin.py
@@ -59,20 +59,25 @@ class SongUsagePlugin(Plugin):
self.toolsMenu = tools_menu
self.SongUsageMenu = QtGui.QMenu(tools_menu)
self.SongUsageMenu.setObjectName(u'SongUsageMenu')
- self.SongUsageMenu.setTitle(tools_menu.trUtf8('&Song Usage'))
+ self.SongUsageMenu.setTitle(translate(
+ u'SongUsagePlugin', u'&Song Usage'))
#SongUsage Delete
self.SongUsageDelete = QtGui.QAction(tools_menu)
self.SongUsageDelete.setText(
- tools_menu.trUtf8('&Delete recorded data'))
+ translate(u'SongUsagePlugin',
+ u'&Delete recorded data'))
self.SongUsageDelete.setStatusTip(
- tools_menu.trUtf8('Delete song usage to specified date'))
+ translate(u'SongUsagePlugin',
+ u'Delete song usage to specified date'))
self.SongUsageDelete.setObjectName(u'SongUsageDelete')
#SongUsage Report
self.SongUsageReport = QtGui.QAction(tools_menu)
self.SongUsageReport.setText(
- tools_menu.trUtf8('&Extract recorded data'))
+ translate(u'SongUsagePlugin',
+ u'&Extract recorded data'))
self.SongUsageReport.setStatusTip(
- tools_menu.trUtf8('Generate report on Song Usage'))
+ translate(u'SongUsagePlugin',
+ u'Generate report on Song Usage'))
self.SongUsageReport.setObjectName(u'SongUsageReport')
#SongUsage activation
SongUsageIcon = build_icon(u':/tools/tools_alert.png')
@@ -80,9 +85,11 @@ class SongUsagePlugin(Plugin):
self.SongUsageStatus.setIcon(SongUsageIcon)
self.SongUsageStatus.setCheckable(True)
self.SongUsageStatus.setChecked(False)
- self.SongUsageStatus.setText(tools_menu.trUtf8('Song Usage Status'))
+ self.SongUsageStatus.setText(translate(
+ u'SongUsagePlugin', u'Song Usage Status'))
self.SongUsageStatus.setStatusTip(
- tools_menu.trUtf8('Start/Stop live song usage recording'))
+ translate(u'SongUsagePlugin',
+ u'Start/Stop live song usage recording'))
self.SongUsageStatus.setShortcut(u'F4')
self.SongUsageStatus.setObjectName(u'SongUsageStatus')
#Add Menus together
@@ -156,7 +163,7 @@ class SongUsagePlugin(Plugin):
self.SongUsagedetailform.exec_()
def about(self):
- about_text = translate(u'SongsPlugin.SongUsagePlugin',
+ about_text = translate(u'SongUsagePlugin',
u'SongUsage Plugin
This plugin '
u'records the use of songs and when they have been used during '
u'a live service')
diff --git a/scripts/get-strings.py b/scripts/get-strings.py
deleted file mode 100755
index 5fa42a1fc..000000000
--- a/scripts/get-strings.py
+++ /dev/null
@@ -1,116 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
-
-###############################################################################
-# OpenLP - Open Source Lyrics Projection #
-# --------------------------------------------------------------------------- #
-# Copyright (c) 2008-2010 Raoul Snyman #
-# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael #
-# Gorven, Scott Guerrieri, Christian Richter, Maikel Stuivenberg, Martin #
-# Thompson, Jon Tibble, Carsten Tinggaard #
-# --------------------------------------------------------------------------- #
-# This program is free software; you can redistribute it and/or modify it #
-# under the terms of the GNU General Public License as published by the Free #
-# Software Foundation; version 2 of the License. #
-# #
-# This program is distributed in the hope that it will be useful, but WITHOUT #
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
-# more details. #
-# #
-# You should have received a copy of the GNU General Public License along #
-# with this program; if not, write to the Free Software Foundation, Inc., 59 #
-# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
-###############################################################################
-
-import os
-from cgi import escape
-from ast import parse, NodeVisitor, Str
-
-ts_file = u"""
-
-
-%s
-
-"""
-ts_context = u"""
- %s
-%s
-"""
-ts_message = u"""
-
-
-
-
-"""
-
-class StringExtractor(NodeVisitor):
-
- def __init__(self, strings, filename, base_path):
- self.base_path = base_path
- self.filename = filename
- self.strings = strings
- self.classname = 'unknown'
-
- def visit_ClassDef(self, node):
- self.classname = node.name
- self.generic_visit(node)
-
- def visit_Call(self, node):
- if hasattr(node.func, 'attr') and node.func.attr == 'trUtf8' and isinstance(node.args[0], Str):
- string = node.args[0].s
- key = '%s-%s' % (self.classname, string)
- self.strings[key] = [self.classname, self.filename[len(self.base_path) + 1:], node.lineno, escape(string)]
- self.generic_visit(node)
-
-def parse_file(base_path, filename, strings):
- file = open(filename, u'r')
- try:
- ast = parse(file.read())
- except SyntaxError, e:
- print "Unable to parse %s: %s" % (filename, e)
- return
- file.close()
-
- StringExtractor(strings, filename, base_path).visit(ast)
-
-def write_file(filename, strings):
- translation_file = u''
- translation_contexts = []
- translation_messages = []
- class_name = strings[strings.keys()[0]][0]
- current_context = u''
- for key, translation in strings.iteritems():
- if class_name != translation[0]:
- current_context = ts_context % (class_name, u''.join(translation_messages))
- translation_contexts.append(current_context)
- translation_messages = []
- class_name = translation[0]
- translation_messages.append(ts_message % (translation[1], translation[2], translation[3]))
- current_context = ts_context % (class_name, u''.join(translation_messages))
- translation_contexts.append(current_context)
- translation_file = ts_file % (u''.join(translation_contexts))
- file = open(filename, u'w')
- file.write(translation_file.encode('utf8'))
- file.close()
-
-def main():
- strings = {}
- start_dir = os.path.abspath(u'..')
- for root, dirs, files in os.walk(start_dir):
- for file in files:
- if file.startswith(u'hook-') or file.startswith(u'test_'):
- continue
- if file.endswith(u'.py'):
- print u'Parsing "%s"' % file
- parse_file(start_dir, os.path.join(root, file), strings)
- print u'Generating TS file...',
- write_file(os.path.join(start_dir, u'resources', u'i18n', u'openlp_en.ts'), strings)
- print u'done.'
-
-if __name__ == u'__main__':
- if os.path.split(os.path.abspath(u'.'))[1] != u'scripts':
- print u'You need to run this script from the scripts directory.'
- else:
- main()