From 122756eca589ef700f54b5337805d9550ad9f805 Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Mon, 24 May 2010 23:37:20 +0100 Subject: [PATCH 01/25] Fix indentations --- .bzrignore | 1 + openlp/core/lib/serviceitem.py | 12 ++++----- openlp/core/theme/theme.py | 13 +++++---- openlp/core/ui/servicemanager.py | 27 ++++++++++--------- openlp/core/ui/slidecontroller.py | 5 ++-- .../presentations/lib/impresscontroller.py | 8 +++--- .../presentations/lib/pptviewcontroller.py | 2 +- .../lib/presentationcontroller.py | 2 +- 8 files changed, 38 insertions(+), 32 deletions(-) diff --git a/.bzrignore b/.bzrignore index 2314d48c5..5d27a95a4 100644 --- a/.bzrignore +++ b/.bzrignore @@ -15,3 +15,4 @@ OpenLP.egg-info build resources/innosetup/Output _eric4project +.pylint.d diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index a25205c82..841e91839 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -43,12 +43,12 @@ class ServiceItemType(object): Command = 3 class ItemCapabilities(object): - AllowsPreview = 1 - AllowsEdit = 2 - AllowsMaintain = 3 - RequiresMedia = 4 - AllowsLoop = 5 - AllowsAdditions = 6 + AllowsPreview = 1 + AllowsEdit = 2 + AllowsMaintain = 3 + RequiresMedia = 4 + AllowsLoop = 5 + AllowsAdditions = 6 class ServiceItem(object): """ diff --git a/openlp/core/theme/theme.py b/openlp/core/theme/theme.py index b01126564..b34510fb7 100644 --- a/openlp/core/theme/theme.py +++ b/openlp/core/theme/theme.py @@ -136,12 +136,15 @@ class Theme(object): except ValueError: val = t if (element.tag.find(u'Color') > 0 or - (element.tag.find(u'BackgroundParameter') == 0 and type(val) == type(0))): + (element.tag.find(u'BackgroundParameter') == 0 and + type(val) == type(0))): # convert to a wx.Colour - if not delphiColorChange: - val = QtGui.QColor(val&0xFF, (val>>8)&0xFF, (val>>16)&0xFF) - else: - val = QtGui.QColor((val>>16)&0xFF, (val>>8)&0xFF, val&0xFF) + if not delphiColorChange: + val = QtGui.QColor( + val&0xFF, (val>>8)&0xFF, (val>>16)&0xFF) + else: + val = QtGui.QColor( + (val>>16)&0xFF, (val>>8)&0xFF, val&0xFF) setattr(self, element.tag, val) def __str__(self): diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index df127c85c..548d04357 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -810,8 +810,8 @@ class ServiceManager(QtGui.QWidget): if self.serviceItems and item < len(self.serviceItems) and \ self.serviceItems[item][u'service_item'].is_capable( ItemCapabilities.AllowsPreview): - self.parent.PreviewController.addServiceManagerItem( - self.serviceItems[item][u'service_item'], 0) + self.parent.PreviewController.addServiceManagerItem( + self.serviceItems[item][u'service_item'], 0) else: QtGui.QMessageBox.critical(self, self.trUtf8('Missing Display Handler'), @@ -897,17 +897,18 @@ class ServiceManager(QtGui.QWidget): #we are over somthing so lets investigate pos = self._getParentItemData(item) - 1 serviceItem = self.serviceItems[pos] - if plugin == serviceItem[u'service_item'].name \ - and serviceItem[u'service_item'].is_capable(ItemCapabilities.AllowsAdditions): - action = self.dndMenu.exec_(QtGui.QCursor.pos()) - #New action required - if action == self.newAction: - self.droppos = self._getParentItemData(item) - #Append to existing action - if action == self.addToAction: - self.droppos = self._getParentItemData(item) - item.setSelected(True) - replace = True + if (plugin == serviceItem[u'service_item'].name and + serviceItem[u'service_item'].is_capable( + ItemCapabilities.AllowsAdditions)): + action = self.dndMenu.exec_(QtGui.QCursor.pos()) + #New action required + if action == self.newAction: + self.droppos = self._getParentItemData(item) + #Append to existing action + if action == self.addToAction: + self.droppos = self._getParentItemData(item) + item.setSelected(True) + replace = True else: self.droppos = self._getParentItemData(item) Receiver.send_message(u'%s_add_service_item' % plugin, replace) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index a2bd68e13..f9dd89daf 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -426,11 +426,12 @@ class SlideController(QtGui.QWidget): self.Toolbar.makeWidgetsVisible([u'Song Menu']) if item.is_capable(ItemCapabilities.AllowsLoop) and \ len(item.get_frames()) > 1: - self.Toolbar.makeWidgetsVisible(self.loopList) + self.Toolbar.makeWidgetsVisible(self.loopList) if item.is_media(): self.Toolbar.setVisible(False) self.Mediabar.setVisible(True) - #self.volumeSlider.setAudioOutput(self.mainDisplay.videoDisplay.audio) + #self.volumeSlider.setAudioOutput( + # self.mainDisplay.videoDisplay.audio) def enablePreviewToolBar(self, item): """ diff --git a/openlp/plugins/presentations/lib/impresscontroller.py b/openlp/plugins/presentations/lib/impresscontroller.py index a1a025c02..d79062a2a 100644 --- a/openlp/plugins/presentations/lib/impresscontroller.py +++ b/openlp/plugins/presentations/lib/impresscontroller.py @@ -354,10 +354,10 @@ class ImpressDocument(PresentationDocument): self.control.gotoSlideIndex(slideno-1) def next_step(self): - """ - Triggers the next effect of slide on the running presentation - """ - self.control.gotoNextEffect() + """ + Triggers the next effect of slide on the running presentation + """ + self.control.gotoNextEffect() def previous_step(self): """ diff --git a/openlp/plugins/presentations/lib/pptviewcontroller.py b/openlp/plugins/presentations/lib/pptviewcontroller.py index e45fac45f..b4102f5fe 100644 --- a/openlp/plugins/presentations/lib/pptviewcontroller.py +++ b/openlp/plugins/presentations/lib/pptviewcontroller.py @@ -73,7 +73,7 @@ class PptviewController(PresentationController): self.start_process() return self.process.CheckInstalled() except: - return False + return False def start_process(self): """ diff --git a/openlp/plugins/presentations/lib/presentationcontroller.py b/openlp/plugins/presentations/lib/presentationcontroller.py index f976aa4e7..c0eb7e5f1 100644 --- a/openlp/plugins/presentations/lib/presentationcontroller.py +++ b/openlp/plugins/presentations/lib/presentationcontroller.py @@ -151,7 +151,7 @@ class PresentationController(object): if doc is None: return if doc in self.docs: - self.docs.remove(doc) + self.docs.remove(doc) def close_presentation(self): pass From a1423dc966d936836f7090ea23bb97bc1c059129 Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Tue, 25 May 2010 01:19:43 +0100 Subject: [PATCH 02/25] Fix reimport --- openlp/core/lib/__init__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/openlp/core/lib/__init__.py b/openlp/core/lib/__init__.py index ee18e98af..47a5c51cd 100644 --- a/openlp/core/lib/__init__.py +++ b/openlp/core/lib/__init__.py @@ -178,5 +178,4 @@ from songxmlhandler import SongXMLBuilder, SongXMLParser from themexmlhandler import ThemeXML from renderer import Renderer from rendermanager import RenderManager -from mediamanageritem import MediaManagerItem from baselistwithdnd import BaseListWithDnD From 14307fcc8a07e9f8a7e5127ae4980741558fe847 Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Tue, 25 May 2010 01:48:42 +0100 Subject: [PATCH 03/25] Fix indentation --- openlp/plugins/custom/forms/editcustomform.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openlp/plugins/custom/forms/editcustomform.py b/openlp/plugins/custom/forms/editcustomform.py index 373c29794..83c21e7f3 100644 --- a/openlp/plugins/custom/forms/editcustomform.py +++ b/openlp/plugins/custom/forms/editcustomform.py @@ -211,8 +211,8 @@ class EditCustomForm(QtGui.QDialog, Ui_customEditDialog): for row in range(0, self.VerseListView.count()): item = self.VerseListView.item(row) verse_list += item.text() - if row != self.VerseListView.count() - 1: - verse_list += u'\n[---]\n' + if row != self.VerseListView.count() - 1: + verse_list += u'\n[---]\n' self.editText(verse_list) def editText(self, text): From e9904754c26f89b950e136a24c66eb08204c53bf Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Tue, 25 May 2010 02:39:48 +0100 Subject: [PATCH 04/25] Remove code redefinitions --- openlp/migration/migratebibles.py | 16 ---------------- openlp/migration/migratesongs.py | 15 --------------- 2 files changed, 31 deletions(-) diff --git a/openlp/migration/migratebibles.py b/openlp/migration/migratebibles.py index cad6afc3f..168511a02 100644 --- a/openlp/migration/migratebibles.py +++ b/openlp/migration/migratebibles.py @@ -35,22 +35,6 @@ from openlp.core.lib import SettingsManager from openlp.core.utils import AppLocation from openlp.plugins.bibles.lib.models import * -class BaseModel(object): - """ - BaseModel provides a base object with a set of generic functions - """ - - @classmethod - def populate(cls, **kwargs): - """ - Creates an instance of a class and populates it, returning the instance - """ - me = cls() - keys = kwargs.keys() - for key in keys: - me.__setattr__(key, kwargs[key]) - return me - class TBibleMeta(BaseModel): """ Bible Meta Data diff --git a/openlp/migration/migratesongs.py b/openlp/migration/migratesongs.py index b43b1e68a..19b77adae 100644 --- a/openlp/migration/migratesongs.py +++ b/openlp/migration/migratesongs.py @@ -75,21 +75,6 @@ temp_authors_songs_table = Table(u'songauthors_temp', metadata, Column(u'authorid', types.Integer, primary_key=True), Column(u'songid', types.Integer) ) -class BaseModel(object): - """ - BaseModel provides a base object with a set of generic functions - """ - - @classmethod - def populate(cls, **kwargs): - """ - Creates an instance of a class and populates it, returning the instance - """ - me = cls() - keys = kwargs.keys() - for key in keys: - me.__setattr__(key, kwargs[key]) - return me class TAuthor(BaseModel): """ From f75a6fd73266e5f6bb0f19193ccca7a20d2d5414 Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Tue, 25 May 2010 13:39:12 +0100 Subject: [PATCH 05/25] Whitespace --- openlp/core/lib/themexmlhandler.py | 2 +- openlp/core/lib/xmlrootclass.py | 1 + openlp/core/theme/theme.py | 8 ++++---- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/openlp/core/lib/themexmlhandler.py b/openlp/core/lib/themexmlhandler.py index a96cc7355..a5ff64c9d 100644 --- a/openlp/core/lib/themexmlhandler.py +++ b/openlp/core/lib/themexmlhandler.py @@ -30,7 +30,7 @@ from xml.etree.ElementTree import ElementTree, XML from openlp.core.lib import str_to_bool -blankthemexml=\ +blankthemexml = \ ''' BlankStyle diff --git a/openlp/core/lib/xmlrootclass.py b/openlp/core/lib/xmlrootclass.py index 78682c5a3..017d365c2 100644 --- a/openlp/core/lib/xmlrootclass.py +++ b/openlp/core/lib/xmlrootclass.py @@ -102,3 +102,4 @@ class XmlRootClass(object): if not attrib.startswith(u'_'): result += u'_%s_' % getattr(self, attrib) return result + diff --git a/openlp/core/theme/theme.py b/openlp/core/theme/theme.py index b34510fb7..501a7c33e 100644 --- a/openlp/core/theme/theme.py +++ b/openlp/core/theme/theme.py @@ -28,13 +28,13 @@ import types from xml.etree.ElementTree import ElementTree, XML from PyQt4 import QtGui -DelphiColors={"clRed":0xFF0000, +DelphiColors = {"clRed":0xFF0000, "clBlue":0x0000FF, "clYellow":0xFFFF00, - "clBlack":0x000000, - "clWhite":0xFFFFFF} + "clBlack":0x000000, + "clWhite":0xFFFFFF} -blankstylexml=\ +blankstylexml = \ ''' BlankStyle From a2448e36da33f413330859e38e04cdddd0bc7c4b Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Tue, 25 May 2010 15:20:05 +0100 Subject: [PATCH 06/25] Remove redundant code --- openlp/core/ui/thememanager.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index 4b356f758..8701523d5 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -450,8 +450,6 @@ class ThemeManager(QtGui.QWidget): 'would you like to overwrite it?'), (QtGui.QMessageBox.Yes | QtGui.QMessageBox.No), QtGui.QMessageBox.No) - else: - result == QtGui.QMessageBox.Yes if result == QtGui.QMessageBox.Yes: # Save the theme, overwriting the existing theme if necessary. outfile = None From c7d420d4b940e00d0d800689a14a028db89ee5f7 Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Tue, 25 May 2010 15:30:34 +0100 Subject: [PATCH 07/25] Fix class defs and name redefinitions --- openlp/core/lib/eventreceiver.py | 2 +- openlp/migration/display.py | 2 +- openlp/migration/migratebibles.py | 3 +-- openlp/migration/migratefiles.py | 2 +- openlp/migration/migratesongs.py | 2 +- openlp/plugins/alerts/lib/manager.py | 11 ++++++----- openlp/plugins/custom/lib/manager.py | 2 +- openlp/plugins/songusage/lib/manager.py | 2 +- 8 files changed, 13 insertions(+), 13 deletions(-) diff --git a/openlp/core/lib/eventreceiver.py b/openlp/core/lib/eventreceiver.py index d21e3f167..76b19957c 100644 --- a/openlp/core/lib/eventreceiver.py +++ b/openlp/core/lib/eventreceiver.py @@ -230,7 +230,7 @@ class EventReceiver(QtCore.QObject): self.emit(QtCore.SIGNAL(event), msg) -class Receiver(): +class Receiver(object): """ Class to allow events to be passed from different parts of the system. This is a static wrapper around the ``EventReceiver`` class. As there is only diff --git a/openlp/migration/display.py b/openlp/migration/display.py index 8553f432a..abe991075 100644 --- a/openlp/migration/display.py +++ b/openlp/migration/display.py @@ -27,7 +27,7 @@ import logging log = logging.getLogger(__name__) -class Display(): +class Display(object): log.info(u'Display Class loaded') @staticmethod diff --git a/openlp/migration/migratebibles.py b/openlp/migration/migratebibles.py index 168511a02..17ded3a80 100644 --- a/openlp/migration/migratebibles.py +++ b/openlp/migration/migratebibles.py @@ -27,7 +27,6 @@ import os import sys import sqlite3 -from sqlalchemy import * from sqlalchemy import create_engine from sqlalchemy.orm import scoped_session, sessionmaker, mapper @@ -93,7 +92,7 @@ def init_models(url): autocommit=False, bind=engine)) return session -class MigrateBibles(): +class MigrateBibles(object): def __init__(self, display): self.display = display self.data_path = AppLocation.get_section_data_path(u'bibles') diff --git a/openlp/migration/migratefiles.py b/openlp/migration/migratefiles.py index ceca99718..91fff144d 100644 --- a/openlp/migration/migratefiles.py +++ b/openlp/migration/migratefiles.py @@ -25,7 +25,7 @@ from openlp.core.utils import AppLocation -class MigrateFiles(): +class MigrateFiles(object): def __init__(self, display): self.display = display diff --git a/openlp/migration/migratesongs.py b/openlp/migration/migratesongs.py index 19b77adae..f7624e98c 100644 --- a/openlp/migration/migratesongs.py +++ b/openlp/migration/migratesongs.py @@ -94,7 +94,7 @@ class TSongAuthor(BaseModel): """ pass -class MigrateSongs(): +class MigrateSongs(object): def __init__(self, display): self.display = display self.data_path = AppLocation.get_section_data_path(u'songs') diff --git a/openlp/plugins/alerts/lib/manager.py b/openlp/plugins/alerts/lib/manager.py index f82266f49..9d9c87fbb 100644 --- a/openlp/plugins/alerts/lib/manager.py +++ b/openlp/plugins/alerts/lib/manager.py @@ -32,7 +32,7 @@ from openlp.plugins.alerts.lib.models import init_models, metadata, AlertItem log = logging.getLogger(__name__) -class DBManager(): +class DBManager(object): """ The Song Manager provides a central location for all database code. This class takes care of connecting to the database and running all the queries. @@ -70,13 +70,13 @@ class DBManager(): """ return self.session.query(AlertItem).order_by(AlertItem.text).all() - def save_alert(self, AlertItem): + def save_alert(self, alert_item): """ Saves a Alert show to the database """ log.debug(u'Alert added') try: - self.session.add(AlertItem) + self.session.add(alert_item) self.session.commit() log.debug(u'Alert saved') return True @@ -99,9 +99,9 @@ class DBManager(): Delete a Alert show """ if id != 0: - AlertItem = self.get_alert(id) + alert_item = self.get_alert(id) try: - self.session.delete(AlertItem) + self.session.delete(alert_item) self.session.commit() return True except: @@ -110,3 +110,4 @@ class DBManager(): return False else: return True + diff --git a/openlp/plugins/custom/lib/manager.py b/openlp/plugins/custom/lib/manager.py index 9e781f560..b5e0e8411 100644 --- a/openlp/plugins/custom/lib/manager.py +++ b/openlp/plugins/custom/lib/manager.py @@ -32,7 +32,7 @@ from openlp.plugins.custom.lib.models import init_models, metadata, CustomSlide log = logging.getLogger(__name__) -class CustomManager(): +class CustomManager(object): """ The Song Manager provides a central location for all database code. This class takes care of connecting to the database and running all the queries. diff --git a/openlp/plugins/songusage/lib/manager.py b/openlp/plugins/songusage/lib/manager.py index e8816b552..cb8ea91bf 100644 --- a/openlp/plugins/songusage/lib/manager.py +++ b/openlp/plugins/songusage/lib/manager.py @@ -33,7 +33,7 @@ from openlp.plugins.songusage.lib.models import init_models, metadata, \ log = logging.getLogger(__name__) -class SongUsageManager(): +class SongUsageManager(object): """ The Song Manager provides a central location for all database code. This class takes care of connecting to the database and running all the queries. From 29cfcee29f7536fada79205987ffe1dd4ed6f115 Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Tue, 25 May 2010 16:04:37 +0100 Subject: [PATCH 08/25] Fix undefined variables --- openlp/plugins/bibles/lib/csvbible.py | 4 +++- openlp/plugins/songs/lib/songxml.py | 9 ++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/openlp/plugins/bibles/lib/csvbible.py b/openlp/plugins/bibles/lib/csvbible.py index 46a65bc51..54775bd35 100644 --- a/openlp/plugins/bibles/lib/csvbible.py +++ b/openlp/plugins/bibles/lib/csvbible.py @@ -27,6 +27,8 @@ import logging import chardet import csv +from PyQt4 import QtCore + from openlp.core.lib import Receiver from db import BibleDB @@ -89,7 +91,7 @@ class CSVBible(BibleDB): verse_file = None try: book_ptr = None - verse_file = open(versesfile, 'r') + verse_file = open(self.versesfile, 'r') dialect = csv.Sniffer().sniff(verse_file.read(1024)) verse_file.seek(0) verse_reader = csv.reader(verse_file, dialect) diff --git a/openlp/plugins/songs/lib/songxml.py b/openlp/plugins/songs/lib/songxml.py index 2dc55ff7d..8789b379d 100644 --- a/openlp/plugins/songs/lib/songxml.py +++ b/openlp/plugins/songs/lib/songxml.py @@ -23,6 +23,7 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### +import logging import sys import os @@ -32,6 +33,9 @@ sys.path.append(os.path.abspath(u'./../../../..')) from openlp.core.lib import XmlRootClass +log = logging.getLogger(__name__) + + class SongException(Exception): pass @@ -80,7 +84,6 @@ class _OpenSong(XmlRootClass): def _reset(self): """Reset all song attributes""" - global _blankOpenSongXml self._setFromXml(_blankOpenSongXml, 'song') def from_buffer(self, xmlContent): @@ -301,7 +304,7 @@ class Song(object): string = title for char in punctuation: string = string.replace(char, '') - return s + return string def set_title(self, title): """Set the song title @@ -403,7 +406,7 @@ class Song(object): if string_in is None: string_out = "" else: - string_out = unicode(s) + string_out = unicode(string_in) return string_out def _split_to_list(self, aString): From e29f3d30c0b37fe7b5e36eadab19bb035a7bf5e9 Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Tue, 25 May 2010 16:35:34 +0100 Subject: [PATCH 09/25] Remove unnecessary semicolons --- openlp/plugins/songs/forms/editsongform.py | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/openlp/plugins/songs/forms/editsongform.py b/openlp/plugins/songs/forms/editsongform.py index abc29ad27..144081c84 100644 --- a/openlp/plugins/songs/forms/editsongform.py +++ b/openlp/plugins/songs/forms/editsongform.py @@ -127,8 +127,8 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): authorsCompleter = QtGui.QCompleter( [author.display_name for author in authors], self.AuthorsSelectionComboItem) - authorsCompleter.setCaseSensitivity(QtCore.Qt.CaseInsensitive); - self.AuthorsSelectionComboItem.setCompleter(authorsCompleter); + authorsCompleter.setCaseSensitivity(QtCore.Qt.CaseInsensitive) + self.AuthorsSelectionComboItem.setCompleter(authorsCompleter) self.AuthorsSelectionComboItem.clear() for author in authors: row = self.AuthorsSelectionComboItem.count() @@ -139,10 +139,9 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): def loadTopics(self): topics = self.songmanager.get_topics() topicsCompleter = QtGui.QCompleter( - [topic.name for topic in topics], - self.SongTopicCombo) - topicsCompleter.setCaseSensitivity(QtCore.Qt.CaseInsensitive); - self.SongTopicCombo.setCompleter(topicsCompleter); + [topic.name for topic in topics], self.SongTopicCombo) + topicsCompleter.setCaseSensitivity(QtCore.Qt.CaseInsensitive) + self.SongTopicCombo.setCompleter(topicsCompleter) self.SongTopicCombo.clear() for topic in topics: row = self.SongTopicCombo.count() @@ -153,8 +152,8 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): books = self.songmanager.get_books() booksCompleter = QtGui.QCompleter( [book.name for book in books], self.SongbookCombo) - booksCompleter.setCaseSensitivity(QtCore.Qt.CaseInsensitive); - self.SongbookCombo.setCompleter(booksCompleter); + booksCompleter.setCaseSensitivity(QtCore.Qt.CaseInsensitive) + self.SongbookCombo.setCompleter(booksCompleter) self.SongbookCombo.clear() self.SongbookCombo.addItem(u' ') for book in books: @@ -166,8 +165,8 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): themesCompleter = QtGui.QCompleter( [theme for theme in theme_list], self.ThemeSelectionComboItem) - themesCompleter.setCaseSensitivity(QtCore.Qt.CaseInsensitive); - self.ThemeSelectionComboItem.setCompleter(themesCompleter); + themesCompleter.setCaseSensitivity(QtCore.Qt.CaseInsensitive) + self.ThemeSelectionComboItem.setCompleter(themesCompleter) self.ThemeSelectionComboItem.clear() self.ThemeSelectionComboItem.addItem(u' ') for theme in theme_list: From 871640c37458bd52f0fc6025a66672e1fc5a3083 Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Tue, 25 May 2010 17:16:43 +0100 Subject: [PATCH 10/25] Whitespace --- openlp/core/lib/mediamanageritem.py | 2 +- openlp/core/lib/renderer.py | 2 +- openlp/core/lib/serviceitem.py | 2 +- openlp/core/lib/themexmlhandler.py | 7 +- openlp/core/ui/displaytab.py | 5 +- openlp/core/ui/mainwindow.py | 54 ++-- openlp/core/ui/thememanager.py | 6 +- openlp/plugins/alerts/lib/alertsmanager.py | 2 +- .../plugins/bibles/forms/bibleimportwizard.py | 2 +- openlp/plugins/images/lib/mediaitem.py | 2 +- openlp/plugins/media/lib/mediaitem.py | 2 +- openlp/plugins/presentations/lib/mediaitem.py | 2 +- .../songs/forms/songmaintenanceform.py | 17 +- openlp/plugins/songs/lib/sofimport.py | 304 ++++++++++++------ openlp/plugins/songs/lib/songimport.py | 5 +- .../songusage/forms/songusagedetailform.py | 3 +- 16 files changed, 264 insertions(+), 153 deletions(-) diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py index 36cc738b8..b1429770a 100644 --- a/openlp/core/lib/mediamanageritem.py +++ b/openlp/core/lib/mediamanageritem.py @@ -367,7 +367,7 @@ class MediaManagerItem(QtGui.QWidget): def IconFromFile(self, file, thumb): icon = build_icon(unicode(file)) - pixmap = icon.pixmap(QtCore.QSize(88,50)) + pixmap = icon.pixmap(QtCore.QSize(88, 50)) ext = os.path.splitext(thumb)[1].lower() pixmap.save(thumb, ext[1:]) return icon diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index 64e54e5fc..55c66a809 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -474,7 +474,7 @@ class Renderer(object): # draw a box around the text - debug only if self._debug: - self.painter.setPen(QtGui.QPen(QtGui.QColor(0,255,0))) + self.painter.setPen(QtGui.QPen(QtGui.QColor(0, 255, 0))) self.painter.drawRect(startx, starty, rightextent-startx, y-starty) brcorner = (rightextent, y) self.painter.end() diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index 841e91839..f246d9b90 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -159,7 +159,7 @@ class ServiceItem(object): frame = self.RenderManager.generate_slide(format, self.raw_footer) else: - frame = self.RenderManager.generate_slide(format,u'') + frame = self.RenderManager.generate_slide(format, u'') self.cache[row] = frame return frame diff --git a/openlp/core/lib/themexmlhandler.py b/openlp/core/lib/themexmlhandler.py index a5ff64c9d..b3cfb0307 100644 --- a/openlp/core/lib/themexmlhandler.py +++ b/openlp/core/lib/themexmlhandler.py @@ -215,7 +215,7 @@ class ThemeXML(object): The height of the text block. """ background = self.theme_xml.createElement(u'font') - background.setAttribute(u'type',fonttype) + background.setAttribute(u'type', fonttype) self.theme.appendChild(background) #Create Font name element self.child_element(background, u'name', name) @@ -230,11 +230,12 @@ class ThemeXML(object): #Create indentation name element self.child_element(background, u'indentation', unicode(indentation)) #Create indentation name element - self.child_element(background, u'line_adjustment', unicode(line_adjustment)) + self.child_element( + background, u'line_adjustment', unicode(line_adjustment)) #Create Location element element = self.theme_xml.createElement(u'location') - element.setAttribute(u'override',override) + element.setAttribute(u'override', override) if override == u'True': element.setAttribute(u'x', xpos) element.setAttribute(u'y', ypos) diff --git a/openlp/core/ui/displaytab.py b/openlp/core/ui/displaytab.py index d3ef9205d..65a5b8044 100644 --- a/openlp/core/ui/displaytab.py +++ b/openlp/core/ui/displaytab.py @@ -222,8 +222,8 @@ class DisplayTab(SettingsTab): self.postSetUp() def postSetUp(self): - self.screens.override[u'size'] = QtCore.QRect(int(self.XposEdit.text()),\ - int(self.YposEdit.text()), int(self.WidthEdit.text()),\ + self.screens.override[u'size'] = QtCore.QRect(int(self.XposEdit.text()), + int(self.YposEdit.text()), int(self.WidthEdit.text()), int(self.HeightEdit.text())) if self.amend_display: self.screens.set_override_display() @@ -233,3 +233,4 @@ class DisplayTab(SettingsTab): if self.amend_display_start != self.amend_display: self.amend_display_start = self.amend_display Receiver.send_message(u'config_screen_changed') + diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 92c8fed94..9bbb6cfc2 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -352,11 +352,13 @@ class Ui_MainWindow(object): translate('MainWindow', 'Theme Manager')) self.FileNewItem.setText(translate('MainWindow', '&New')) self.FileNewItem.setToolTip(translate('MainWindow', 'New Service')) - self.FileNewItem.setStatusTip(translate('MainWindow', 'Create a new Service')) + self.FileNewItem.setStatusTip( + translate('MainWindow', 'Create a new Service')) self.FileNewItem.setShortcut(translate('MainWindow', 'Ctrl+N')) self.FileOpenItem.setText(translate('MainWindow', '&Open')) self.FileOpenItem.setToolTip(translate('MainWindow', 'Open Service')) - self.FileOpenItem.setStatusTip(translate('MainWindow', 'Open an existing service')) + self.FileOpenItem.setStatusTip( + translate('MainWindow', 'Open an existing service')) self.FileOpenItem.setShortcut(translate('MainWindow', 'Ctrl+O')) self.FileSaveItem.setText(translate('MainWindow', '&Save')) self.FileSaveItem.setToolTip(translate('MainWindow', 'Save Service')) @@ -364,9 +366,10 @@ class Ui_MainWindow(object): translate('MainWindow', 'Save the current service to disk')) self.FileSaveItem.setShortcut(translate('MainWindow', 'Ctrl+S')) self.FileSaveAsItem.setText(translate('MainWindow', 'Save &As...')) - self.FileSaveAsItem.setToolTip(translate('MainWindow', 'Save Service As')) - self.FileSaveAsItem.setStatusTip( - translate('MainWindow', 'Save the current service under a new name')) + self.FileSaveAsItem.setToolTip( + translate('MainWindow', 'Save Service As')) + self.FileSaveAsItem.setStatusTip(translate('MainWindow', + 'Save the current service under a new name')) self.FileSaveAsItem.setShortcut(translate('MainWindow', 'F12')) self.FileExitItem.setText(translate('MainWindow', 'E&xit')) self.FileExitItem.setStatusTip(translate('MainWindow', 'Quit OpenLP')) @@ -377,34 +380,40 @@ class Ui_MainWindow(object): self.ExportLanguageItem.setText(translate('MainWindow', '&Language')) self.actionLook_Feel.setText(translate('MainWindow', 'Look && &Feel')) self.OptionsSettingsItem.setText(translate('MainWindow', '&Settings')) - self.ViewMediaManagerItem.setText(translate('MainWindow', '&Media Manager')) + self.ViewMediaManagerItem.setText( + translate('MainWindow', '&Media Manager')) self.ViewMediaManagerItem.setToolTip( translate('MainWindow', 'Toggle Media Manager')) - self.ViewMediaManagerItem.setStatusTip( - translate('MainWindow', 'Toggle the visibility of the Media Manager')) + self.ViewMediaManagerItem.setStatusTip(translate('MainWindow', + 'Toggle the visibility of the Media Manager')) self.ViewMediaManagerItem.setShortcut(translate('MainWindow', 'F8')) - self.ViewThemeManagerItem.setText(translate('MainWindow', '&Theme Manager')) + self.ViewThemeManagerItem.setText( + translate('MainWindow', '&Theme Manager')) self.ViewThemeManagerItem.setToolTip( translate('MainWindow', 'Toggle Theme Manager')) - self.ViewThemeManagerItem.setStatusTip( - translate('MainWindow', 'Toggle the visibility of the Theme Manager')) + self.ViewThemeManagerItem.setStatusTip(translate('MainWindow', + 'Toggle the visibility of the Theme Manager')) self.ViewThemeManagerItem.setShortcut(translate('MainWindow', 'F10')) - self.ViewServiceManagerItem.setText(translate('MainWindow', '&Service Manager')) + self.ViewServiceManagerItem.setText( + translate('MainWindow', '&Service Manager')) self.ViewServiceManagerItem.setToolTip( translate('MainWindow', 'Toggle Service Manager')) - self.ViewServiceManagerItem.setStatusTip( - translate('MainWindow', 'Toggle the visibility of the Service Manager')) + self.ViewServiceManagerItem.setStatusTip(translate('MainWindow', + 'Toggle the visibility of the Service Manager')) self.ViewServiceManagerItem.setShortcut(translate('MainWindow', 'F9')) - self.action_Preview_Panel.setText(translate('MainWindow', '&Preview Panel')) + self.action_Preview_Panel.setText( + translate('MainWindow', '&Preview Panel')) self.action_Preview_Panel.setToolTip( translate('MainWindow', 'Toggle Preview Panel')) - self.action_Preview_Panel.setStatusTip( - translate('MainWindow', 'Toggle the visibility of the Preview Panel')) + self.action_Preview_Panel.setStatusTip(translate('MainWindow', + 'Toggle the visibility of the Preview Panel')) self.action_Preview_Panel.setShortcut(translate('MainWindow', 'F11')) self.PluginItem.setText(translate('MainWindow', '&Plugin List')) - self.PluginItem.setStatusTip(translate('MainWindow', 'List the Plugins')) + self.PluginItem.setStatusTip( + translate('MainWindow', 'List the Plugins')) self.PluginItem.setShortcut(translate('MainWindow', 'Alt+F7')) - self.HelpDocumentationItem.setText(translate('MainWindow', '&User Guide')) + self.HelpDocumentationItem.setText( + translate('MainWindow', '&User Guide')) self.HelpAboutItem.setText(translate('MainWindow', '&About')) self.HelpAboutItem.setStatusTip( translate('MainWindow', 'More information about OpenLP')) @@ -417,12 +426,13 @@ class Ui_MainWindow(object): translate('MainWindow', 'Choose System language, if available')) for item in self.LanguageGroup.actions(): item.setText(item.objectName()) - item.setStatusTip( - translate('MainWindow', 'Set the interface language to %1').arg(item.objectName())) + item.setStatusTip(translate('MainWindow', + 'Set the interface language to %1').arg(item.objectName())) self.ToolsAddToolItem.setText(translate('MainWindow', 'Add &Tool...')) self.ToolsAddToolItem.setStatusTip( translate('MainWindow', 'Add an application to the list of tools')) - self.action_Preview_Panel.setText(translate('MainWindow', '&Preview Pane')) + self.action_Preview_Panel.setText( + translate('MainWindow', '&Preview Pane')) self.ModeLiveItem.setText(translate('MainWindow', '&Live')) diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index 8701523d5..d908311b3 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -73,7 +73,7 @@ class ThemeManager(QtGui.QWidget): self.Layout.addWidget(self.Toolbar) self.ThemeListWidget = QtGui.QListWidget(self) self.ThemeListWidget.setAlternatingRowColors(True) - self.ThemeListWidget.setIconSize(QtCore.QSize(88,50)) + self.ThemeListWidget.setIconSize(QtCore.QSize(88, 50)) self.Layout.addWidget(self.ThemeListWidget) self.ThemeListWidget.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) self.ThemeListWidget.addAction( @@ -285,7 +285,7 @@ class ThemeManager(QtGui.QWidget): icon = build_icon(thumb) else: icon = build_icon(theme) - pixmap = icon.pixmap(QtCore.QSize(88,50)) + pixmap = icon.pixmap(QtCore.QSize(88, 50)) pixmap.save(thumb, u'png') item_name.setIcon(icon) item_name.setData(QtCore.Qt.UserRole, @@ -483,7 +483,7 @@ class ThemeManager(QtGui.QWidget): frame.save(samplepathname, u'png') thumb = os.path.join(self.thumbPath, u'%s.png' % name) icon = build_icon(frame) - pixmap = icon.pixmap(QtCore.QSize(88,50)) + pixmap = icon.pixmap(QtCore.QSize(88, 50)) pixmap.save(thumb, u'png') log.debug(u'Theme image written to %s', samplepathname) diff --git a/openlp/plugins/alerts/lib/alertsmanager.py b/openlp/plugins/alerts/lib/alertsmanager.py index 35be3b7c2..e1e693b45 100644 --- a/openlp/plugins/alerts/lib/alertsmanager.py +++ b/openlp/plugins/alerts/lib/alertsmanager.py @@ -67,7 +67,7 @@ class AlertsManager(QtCore.QObject): - self.alertHeight self.alertHeight = self.screen[u'size'].height() \ - self.alertScreenPosition - self.parent.maindisplay.setAlertSize(self.alertScreenPosition,\ + self.parent.maindisplay.setAlertSize(self.alertScreenPosition, self.alertHeight) def onAlertText(self, message): diff --git a/openlp/plugins/bibles/forms/bibleimportwizard.py b/openlp/plugins/bibles/forms/bibleimportwizard.py index 6340144a5..c2aa2dde4 100644 --- a/openlp/plugins/bibles/forms/bibleimportwizard.py +++ b/openlp/plugins/bibles/forms/bibleimportwizard.py @@ -277,7 +277,7 @@ class Ui_BibleImportWizard(object): self.CopyrightEdit) self.PermissionLabel = QtGui.QLabel(self.LicenseDetailsPage) self.PermissionLabel.setObjectName(u'PermissionLabel') - self.LicenseDetailsLayout.setWidget(2, QtGui.QFormLayout.LabelRole,\ + self.LicenseDetailsLayout.setWidget(2, QtGui.QFormLayout.LabelRole, self.PermissionLabel) self.PermissionEdit = QtGui.QLineEdit(self.LicenseDetailsPage) self.PermissionEdit.setObjectName(u'PermissionEdit') diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index 02101d260..35151d86e 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -75,7 +75,7 @@ class ImageMediaItem(MediaManagerItem): self.ListView.clear() self.ListView.setSelectionMode( QtGui.QAbstractItemView.ExtendedSelection) - self.ListView.setIconSize(QtCore.QSize(88,50)) + self.ListView.setIconSize(QtCore.QSize(88, 50)) self.servicePath = os.path.join( AppLocation.get_section_data_path(self.settingsSection), u'thumbnails') diff --git a/openlp/plugins/media/lib/mediaitem.py b/openlp/plugins/media/lib/mediaitem.py index 3ba632239..05175632d 100644 --- a/openlp/plugins/media/lib/mediaitem.py +++ b/openlp/plugins/media/lib/mediaitem.py @@ -129,7 +129,7 @@ class MediaMediaItem(MediaManagerItem): def initialise(self): self.ListView.setSelectionMode( QtGui.QAbstractItemView.ExtendedSelection) - self.ListView.setIconSize(QtCore.QSize(88,50)) + self.ListView.setIconSize(QtCore.QSize(88, 50)) self.loadList(SettingsManager.load_list( self.settingsSection, self.settingsSection)) diff --git a/openlp/plugins/presentations/lib/mediaitem.py b/openlp/plugins/presentations/lib/mediaitem.py index 51663ad26..cf25a76d3 100644 --- a/openlp/plugins/presentations/lib/mediaitem.py +++ b/openlp/plugins/presentations/lib/mediaitem.py @@ -109,7 +109,7 @@ class PresentationMediaItem(MediaManagerItem): self.servicePath = os.path.join( AppLocation.get_section_data_path(self.settingsSection), u'thumbnails') - self.ListView.setIconSize(QtCore.QSize(88,50)) + self.ListView.setIconSize(QtCore.QSize(88, 50)) if not os.path.exists(self.servicePath): os.mkdir(self.servicePath) list = SettingsManager.load_list( diff --git a/openlp/plugins/songs/forms/songmaintenanceform.py b/openlp/plugins/songs/forms/songmaintenanceform.py index 44ad517e1..e3979fa75 100644 --- a/openlp/plugins/songs/forms/songmaintenanceform.py +++ b/openlp/plugins/songs/forms/songmaintenanceform.py @@ -81,7 +81,7 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): return -1 def _deleteItem(self, list_widget, get_func, del_func, reset_func, - dlg_title, del_text, err_text, sel_text): + dlg_title, del_text, err_text, sel_text): item_id = self._getCurrentItemId(list_widget) if item_id != -1: item = get_func(item_id) @@ -93,11 +93,9 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): del_func(item.id) reset_func() else: - QtGui.QMessageBox.critical(self, dlg_title, err_text, - QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok)) + QtGui.QMessageBox.critical(self, dlg_title, err_text) else: - QtGui.QMessageBox.critical(self, dlg_title, sel_text, - QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok)) + QtGui.QMessageBox.critical(self, dlg_title, sel_text) def resetAuthors(self): self.AuthorsListWidget.clear() @@ -197,8 +195,7 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): else: QtGui.QMessageBox.critical( self, self.trUtf8('Error'), - self.trUtf8('Couldn\'t save your topic.'), - QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok)) + self.trUtf8('Couldn\'t save your topic.')) def onBookEditButtonClick(self): book_id = self._getCurrentItemId(self.BooksListWidget) @@ -208,14 +205,14 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): self.bookform.PublisherEdit.setText(book.publisher) if self.bookform.exec_(False): book.name = unicode(self.bookform.NameEdit.text(), u'utf-8') - book.publisher = unicode(self.bookform.PublisherEdit.text(), u'utf-8') + book.publisher = unicode( + self.bookform.PublisherEdit.text(), u'utf-8') if self.songmanager.save_book(book): self.resetBooks() else: QtGui.QMessageBox.critical( self, self.trUtf8('Error'), - self.trUtf8('Couldn\'t save your book.'), - QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok)) + self.trUtf8('Couldn\'t save your book.')) def onAuthorDeleteButtonClick(self): """ diff --git a/openlp/plugins/songs/lib/sofimport.py b/openlp/plugins/songs/lib/sofimport.py index 9d95cf6b5..8ba5c31cf 100644 --- a/openlp/plugins/songs/lib/sofimport.py +++ b/openlp/plugins/songs/lib/sofimport.py @@ -67,7 +67,7 @@ class SofImport(OooImport): Initialise the class. Requires a songmanager class which is passed to SongImport for writing song to disk """ - OooImport.__init__(self,songmanager) + OooImport.__init__(self, songmanager) def import_sof(self, filename): self.start_ooo() @@ -332,105 +332,205 @@ class SofImport(OooImport): Because someone at Kingsway forgot to check the 1+2 RTF file, some verses were not formatted correctly. """ - if song_number == 11: return 8 - if song_number == 18: return 5 - if song_number == 21: return 6 - if song_number == 23: return 4 - if song_number == 24: return 7 - if song_number == 27: return 4 - if song_number == 31: return 6 - if song_number == 49: return 4 - if song_number == 50: return 8 - if song_number == 70: return 4 - if song_number == 75: return 8 - if song_number == 79: return 6 - if song_number == 97: return 7 - if song_number == 107: return 4 - if song_number == 109: return 4 - if song_number == 133: return 4 - if song_number == 155: return 10 - if song_number == 156: return 8 - if song_number == 171: return 4 - if song_number == 188: return 7 - if song_number == 192: return 4 - if song_number == 208: return 8 - if song_number == 215: return 8 - if song_number == 220: return 4 - if song_number == 247: return 6 - if song_number == 248: return 6 - if song_number == 251: return 8 - if song_number == 295: return 8 - if song_number == 307: return 5 - if song_number == 314: return 6 - if song_number == 325: return 8 - if song_number == 386: return 6 - if song_number == 415: return 4 - if song_number == 426: return 4 - if song_number == 434: return 5 - if song_number == 437: return 4 - if song_number == 438: return 6 - if song_number == 456: return 8 - if song_number == 461: return 4 - if song_number == 469: return 4 - if song_number == 470: return 5 - if song_number == 476: return 6 - if song_number == 477: return 7 - if song_number == 480: return 8 - if song_number == 482: return 4 - if song_number == 512: return 4 - if song_number == 513: return 8 - if song_number == 518: return 5 - if song_number == 520: return 4 - if song_number == 523: return 6 - if song_number == 526: return 8 - if song_number == 527: return 4 - if song_number == 529: return 4 - if song_number == 537: return 4 - if song_number == 555: return 6 - if song_number == 581: return 4 - if song_number == 589: return 6 - if song_number == 590: return 4 - if song_number == 593: return 8 - if song_number == 596: return 4 - if song_number == 610: return 6 - if song_number == 611: return 6 - if song_number == 619: return 8 - if song_number == 645: return 5 - if song_number == 653: return 6 - if song_number == 683: return 7 - if song_number == 686: return 4 - if song_number == 697: return 8 - if song_number == 698: return 4 - if song_number == 704: return 6 - if song_number == 716: return 4 - if song_number == 717: return 6 - if song_number == 730: return 4 - if song_number == 731: return 8 - if song_number == 732: return 8 - if song_number == 738: return 4 - if song_number == 756: return 9 - if song_number == 815: return 6 - if song_number == 830: return 8 - if song_number == 831: return 4 - if song_number == 876: return 6 - if song_number == 877: return 6 - if song_number == 892: return 4 - if song_number == 894: return 6 - if song_number == 902: return 8 - if song_number == 905: return 8 - if song_number == 921: return 6 - if song_number == 940: return 7 - if song_number == 955: return 9 - if song_number == 968: return 8 - if song_number == 972: return 7 - if song_number == 974: return 4 - if song_number == 988: return 6 - if song_number == 991: return 5 - if song_number == 1002: return 8 - if song_number == 1024: return 8 - if song_number == 1044: return 9 - if song_number == 1088: return 6 - if song_number == 1117: return 6 - if song_number == 1119: return 7 + if song_number == 11: + return 8 + if song_number == 18: + return 5 + if song_number == 21: + return 6 + if song_number == 23: + return 4 + if song_number == 24: + return 7 + if song_number == 27: + return 4 + if song_number == 31: + return 6 + if song_number == 49: + return 4 + if song_number == 50: + return 8 + if song_number == 70: + return 4 + if song_number == 75: + return 8 + if song_number == 79: + return 6 + if song_number == 97: + return 7 + if song_number == 107: + return 4 + if song_number == 109: + return 4 + if song_number == 133: + return 4 + if song_number == 155: + return 10 + if song_number == 156: + return 8 + if song_number == 171: + return 4 + if song_number == 188: + return 7 + if song_number == 192: + return 4 + if song_number == 208: + return 8 + if song_number == 215: + return 8 + if song_number == 220: + return 4 + if song_number == 247: + return 6 + if song_number == 248: + return 6 + if song_number == 251: + return 8 + if song_number == 295: + return 8 + if song_number == 307: + return 5 + if song_number == 314: + return 6 + if song_number == 325: + return 8 + if song_number == 386: + return 6 + if song_number == 415: + return 4 + if song_number == 426: + return 4 + if song_number == 434: + return 5 + if song_number == 437: + return 4 + if song_number == 438: + return 6 + if song_number == 456: + return 8 + if song_number == 461: + return 4 + if song_number == 469: + return 4 + if song_number == 470: + return 5 + if song_number == 476: + return 6 + if song_number == 477: + return 7 + if song_number == 480: + return 8 + if song_number == 482: + return 4 + if song_number == 512: + return 4 + if song_number == 513: + return 8 + if song_number == 518: + return 5 + if song_number == 520: + return 4 + if song_number == 523: + return 6 + if song_number == 526: + return 8 + if song_number == 527: + return 4 + if song_number == 529: + return 4 + if song_number == 537: + return 4 + if song_number == 555: + return 6 + if song_number == 581: + return 4 + if song_number == 589: + return 6 + if song_number == 590: + return 4 + if song_number == 593: + return 8 + if song_number == 596: + return 4 + if song_number == 610: + return 6 + if song_number == 611: + return 6 + if song_number == 619: + return 8 + if song_number == 645: + return 5 + if song_number == 653: + return 6 + if song_number == 683: + return 7 + if song_number == 686: + return 4 + if song_number == 697: + return 8 + if song_number == 698: + return 4 + if song_number == 704: + return 6 + if song_number == 716: + return 4 + if song_number == 717: + return 6 + if song_number == 730: + return 4 + if song_number == 731: + return 8 + if song_number == 732: + return 8 + if song_number == 738: + return 4 + if song_number == 756: + return 9 + if song_number == 815: + return 6 + if song_number == 830: + return 8 + if song_number == 831: + return 4 + if song_number == 876: + return 6 + if song_number == 877: + return 6 + if song_number == 892: + return 4 + if song_number == 894: + return 6 + if song_number == 902: + return 8 + if song_number == 905: + return 8 + if song_number == 921: + return 6 + if song_number == 940: + return 7 + if song_number == 955: + return 9 + if song_number == 968: + return 8 + if song_number == 972: + return 7 + if song_number == 974: + return 4 + if song_number == 988: + return 6 + if song_number == 991: + return 5 + if song_number == 1002: + return 8 + if song_number == 1024: + return 8 + if song_number == 1044: + return 9 + if song_number == 1088: + return 6 + if song_number == 1117: + return 6 + if song_number == 1119: + return 7 return None - + diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index 5fe362842..58e3a4df7 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -122,8 +122,9 @@ class SongImport(object): or text.lower().find(self.copyright_symbol) >= 0: copyright_found = False for line in lines: - if copyright_found or line.lower().find(self.copyright_string) >= 0\ - or line.lower().find(self.copyright_symbol) >= 0: + if (copyright_found or + line.lower().find(self.copyright_string) >= 0 or + line.lower().find(self.copyright_symbol) >= 0): copyright_found = True self.add_copyright(line) else: diff --git a/openlp/plugins/songusage/forms/songusagedetailform.py b/openlp/plugins/songusage/forms/songusagedetailform.py index 31971f465..21d6d29c5 100644 --- a/openlp/plugins/songusage/forms/songusagedetailform.py +++ b/openlp/plugins/songusage/forms/songusagedetailform.py @@ -35,10 +35,11 @@ from songusagedetaildialog import Ui_SongUsageDetailDialog log = logging.getLogger(__name__) class SongUsageDetailForm(QtGui.QDialog, Ui_SongUsageDetailDialog): - log.info(u'SongUsage Detail Form loaded') """ Class documentation goes here. """ + log.info(u'SongUsage Detail Form Loaded') + def __init__(self, parent=None): """ Constructor From f0c03ad2cba40cd6f268811e828758c928f54c3e Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Wed, 26 May 2010 00:07:50 +0100 Subject: [PATCH 11/25] Cleanups --- openlp/core/lib/__init__.py | 9 ++++++++- openlp/core/theme/__init__.py | 2 +- openlp/core/utils/__init__.py | 3 ++- openlp/plugins/songs/lib/classes.py | 3 ++- 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/openlp/core/lib/__init__.py b/openlp/core/lib/__init__.py index 47a5c51cd..e5f45b188 100644 --- a/openlp/core/lib/__init__.py +++ b/openlp/core/lib/__init__.py @@ -132,6 +132,9 @@ def contextMenu(base, icon, text): return action def contextMenuSeparator(base): + """ + Add a separator to a context menu + """ action = QtGui.QAction(u'', base) action.setSeparator(True) return action @@ -150,7 +153,8 @@ def resize_image(image, width, height): realw = preview.width() realh = preview.height() # and move it to the centre of the preview space - newImage = QtGui.QImage(width, height, QtGui.QImage.Format_ARGB32_Premultiplied) + newImage = QtGui.QImage( + width, height, QtGui.QImage.Format_ARGB32_Premultiplied) newImage.fill(QtCore.Qt.black) painter = QtGui.QPainter(newImage) painter.drawImage((width - realw) / 2, (height - realh) / 2, preview) @@ -158,6 +162,9 @@ def resize_image(image, width, height): class ThemeLevel(object): + """ + Provides an enumeration for the level a theme applies to + """ Global = 1 Service = 2 Song = 3 diff --git a/openlp/core/theme/__init__.py b/openlp/core/theme/__init__.py index 0975e977b..037392e8e 100644 --- a/openlp/core/theme/__init__.py +++ b/openlp/core/theme/__init__.py @@ -23,4 +23,4 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### -from theme import Theme +from openlp.core.theme.theme import Theme diff --git a/openlp/core/utils/__init__.py b/openlp/core/utils/__init__.py index 5df5d397a..8cbf7657a 100644 --- a/openlp/core/utils/__init__.py +++ b/openlp/core/utils/__init__.py @@ -186,4 +186,5 @@ def add_actions(target, actions): from languagemanager import LanguageManager -__all__ = [u'AppLocation', u'check_latest_version', u'add_actions', u'LanguageManager'] +__all__ = [u'AppLocation', u'check_latest_version', u'add_actions', + u'LanguageManager'] diff --git a/openlp/plugins/songs/lib/classes.py b/openlp/plugins/songs/lib/classes.py index 171bbdc48..115943814 100644 --- a/openlp/plugins/songs/lib/classes.py +++ b/openlp/plugins/songs/lib/classes.py @@ -50,7 +50,8 @@ class Book(BaseModel): Book model """ def __repr__(self): - return u'' % (str(self.id), self.name, self.publisher) + return u'' % ( + str(self.id), self.name, self.publisher) class Song(BaseModel): """ From e195f0ffb7b85d5ff281c5315e280b4aa8c48fbb Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Wed, 26 May 2010 00:47:26 +0100 Subject: [PATCH 12/25] Match method and overridden method arguments and cleanups --- openlp/plugins/bibles/lib/http.py | 12 ++++--- .../songs/forms/songmaintenanceform.py | 36 ++++++++++--------- openlp/plugins/songs/lib/mediaitem.py | 9 ++--- 3 files changed, 32 insertions(+), 25 deletions(-) diff --git a/openlp/plugins/bibles/lib/http.py b/openlp/plugins/bibles/lib/http.py index 37d42f833..6cb7fe75b 100644 --- a/openlp/plugins/bibles/lib/http.py +++ b/openlp/plugins/bibles/lib/http.py @@ -418,12 +418,13 @@ class HTTPBible(BibleDB): Receiver.send_message(u'bibles_nobook') return [] db_book = self.create_book(book_details[u'name'], - book_details[u'abbreviation'], book_details[u'testament_id']) + book_details[u'abbreviation'], + book_details[u'testament_id']) book = db_book.name if BibleDB.get_verse_count(self, book, reference[1]) == 0: Receiver.send_message(u'bibles_showprogress') Receiver.send_message(u'openlp_process_events') - search_results = self.get_chapter(self.name, book, reference[1]) + search_results = self.get_chapter(book, reference[1]) if search_results and search_results.has_verselist(): ## We have found a book of the bible lets check to see ## if it was there. By reusing the returned book name @@ -433,18 +434,19 @@ class HTTPBible(BibleDB): Receiver.send_message(u'openlp_process_events') # check to see if book/chapter exists db_book = self.get_book(bookname) - self.create_chapter(db_book.id, search_results.get_chapter(), + self.create_chapter(db_book.id, + search_results.get_chapter(), search_results.get_verselist()) Receiver.send_message(u'openlp_process_events') Receiver.send_message(u'bibles_hideprogress') Receiver.send_message(u'openlp_process_events') return BibleDB.get_verses(self, reference_list) - def get_chapter(self, version, book, chapter): + def get_chapter(self, book, chapter): """ Receive the request and call the relevant handler methods """ - log.debug(u'get_chapter %s, %s, %s', version, book, chapter) + log.debug(u'get_chapter %s, %s', book, chapter) log.debug(u'source = %s', self.download_source) try: if self.download_source.lower() == u'crosswalk': diff --git a/openlp/plugins/songs/forms/songmaintenanceform.py b/openlp/plugins/songs/forms/songmaintenanceform.py index e3979fa75..1ea1d7f43 100644 --- a/openlp/plugins/songs/forms/songmaintenanceform.py +++ b/openlp/plugins/songs/forms/songmaintenanceform.py @@ -129,39 +129,41 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): self.authorform.setAutoDisplayName(True) if self.authorform.exec_(): author = Author.populate( - first_name=unicode(self.authorform.FirstNameEdit.text(), u'utf-8'), - last_name=unicode(self.authorform.LastNameEdit.text(), u'utf-8'), - display_name=unicode(self.authorform.DisplayEdit.text(), u'utf-8')) + first_name=unicode( + self.authorform.FirstNameEdit.text(), u'utf-8'), + last_name=unicode( + self.authorform.LastNameEdit.text(), u'utf-8'), + display_name=unicode( + self.authorform.DisplayEdit.text(), u'utf-8')) if self.songmanager.save_author(author): self.resetAuthors() else: QtGui.QMessageBox.critical( self, self.trUtf8('Error'), - self.trUtf8('Couldn\'t add your author.'), - QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok)) + self.trUtf8('Couldn\'t add your author.')) def onTopicAddButtonClick(self): if self.topicform.exec_(): - topic = Topic.populate(name=unicode(self.topicform.NameEdit.text(), u'utf-8')) + topic = Topic.populate( + name=unicode(self.topicform.NameEdit.text(), u'utf-8')) if self.songmanager.save_topic(topic): self.resetTopics() else: QtGui.QMessageBox.critical( self, self.trUtf8('Error'), - self.trUtf8('Couldn\'t add your topic.'), - QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok)) + self.trUtf8('Couldn\'t add your topic.')) def onBookAddButtonClick(self): if self.bookform.exec_(): - book = Book.populate(name=unicode(self.bookform.NameEdit.text(), u'utf-8'), + book = Book.populate( + name=unicode(self.bookform.NameEdit.text(), u'utf-8'), publisher=unicode(self.bookform.PublisherEdit.text(), u'utf-8')) if self.songmanager.save_book(book): self.resetBooks() else: QtGui.QMessageBox.critical( self, self.trUtf8('Error'), - self.trUtf8('Couldn\'t add your book.'), - QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok)) + self.trUtf8('Couldn\'t add your book.')) def onAuthorEditButtonClick(self): author_id = self._getCurrentItemId(self.AuthorsListWidget) @@ -172,16 +174,18 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): self.authorform.LastNameEdit.setText(author.last_name) self.authorform.DisplayEdit.setText(author.display_name) if self.authorform.exec_(False): - author.first_name = unicode(self.authorform.FirstNameEdit.text(), u'utf-8') - author.last_name = unicode(self.authorform.LastNameEdit.text(), u'utf-8') - author.display_name = unicode(self.authorform.DisplayEdit.text(), u'utf-8') + author.first_name = unicode( + self.authorform.FirstNameEdit.text(), u'utf-8') + author.last_name = unicode( + self.authorform.LastNameEdit.text(), u'utf-8') + author.display_name = unicode( + self.authorform.DisplayEdit.text(), u'utf-8') if self.songmanager.save_author(author): self.resetAuthors() else: QtGui.QMessageBox.critical( self, self.trUtf8('Error'), - self.trUtf8('Couldn\'t save your author.'), - QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok)) + self.trUtf8('Couldn\'t save your author.')) def onTopicEditButtonClick(self): topic_id = self._getCurrentItemId(self.TopicsListWidget) diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index 2bf72e9b9..6bcfa9f68 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -270,7 +270,7 @@ class SongMediaItem(MediaManagerItem): self.edit_song_form.loadSong(fields[1], (fields[0] == u'P')) self.edit_song_form.exec_() - def onEditClick(self, preview=False): + def onEditClick(self): item = self.ListView.currentItem() if item: item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] @@ -283,7 +283,8 @@ class SongMediaItem(MediaManagerItem): if len(items) == 1: del_message = self.trUtf8('Delete song?') else: - del_message = unicode(self.trUtf8('Delete %d songs?')) % len(items) + del_message = unicode( + self.trUtf8('Delete %d songs?')) % len(items) ans = QtGui.QMessageBox.question(self, self.trUtf8('Delete Confirmation'), del_message, QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok| @@ -323,7 +324,8 @@ class SongMediaItem(MediaManagerItem): #no verse list or only 1 space (in error) if not song.verse_order or not song.verse_order.strip(): for verse in verseList: - verseTag = u'%s:%s' % (verse[0][u'type'], verse[0][u'label']) + verseTag = u'%s:%s' % ( + verse[0][u'type'], verse[0][u'label']) service_item.add_from_text(\ verse[1][:30], unicode(verse[1]), verseTag) else: @@ -372,4 +374,3 @@ class SongMediaItem(MediaManagerItem): ] return True - From 15038a918490f6896140c405210d17b04f15f6a9 Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Wed, 26 May 2010 16:52:33 +0100 Subject: [PATCH 13/25] More cleanups --- openlp/plugins/bibles/lib/common.py | 4 +- .../presentations/presentationplugin.py | 8 +-- openlp/plugins/remotes/lib/httpserver.py | 13 ++-- openlp/plugins/songs/lib/songimport.py | 4 +- openlp/plugins/songs/lib/songxml.py | 69 +++++++++---------- 5 files changed, 50 insertions(+), 48 deletions(-) diff --git a/openlp/plugins/bibles/lib/common.py b/openlp/plugins/bibles/lib/common.py index 48e55cb7e..94d83ce3d 100644 --- a/openlp/plugins/bibles/lib/common.py +++ b/openlp/plugins/bibles/lib/common.py @@ -257,8 +257,8 @@ def unescape(text): @param text The HTML (or XML) source text. @return The plain text, as a Unicode string, if necessary. """ - def fixup(m): - text = m.group(0) + def fixup(markup): + text = markup.group(0) if text[:2] == u'&#': # character reference try: diff --git a/openlp/plugins/presentations/presentationplugin.py b/openlp/plugins/presentations/presentationplugin.py index dd1a5259b..f57235c9b 100644 --- a/openlp/plugins/presentations/presentationplugin.py +++ b/openlp/plugins/presentations/presentationplugin.py @@ -95,10 +95,9 @@ class PresentationPlugin(Plugin): log.debug(u'Importing controller %s', modulename) try: __import__(modulename, globals(), locals(), []) - except ImportError, e: - log.error( - u'Failed to import %s on path %s for reason %s', - modulename, path, e.args[0]) + except ImportError: + log.exception(u'Failed to import %s on path %s', + modulename, path) controller_classes = PresentationController.__subclasses__() for controller_class in controller_classes: controller = controller_class(self) @@ -114,3 +113,4 @@ class PresentationPlugin(Plugin): 'programs. The choice of available presentation programs is ' 'available to the user in a drop down box.') return about_text + diff --git a/openlp/plugins/remotes/lib/httpserver.py b/openlp/plugins/remotes/lib/httpserver.py index 3c87346cd..0ac21b924 100644 --- a/openlp/plugins/remotes/lib/httpserver.py +++ b/openlp/plugins/remotes/lib/httpserver.py @@ -206,14 +206,17 @@ class HttpConnection(object): mimetype = u'image/png' else: return (None, None) + file_handle = None try: - f = open(path, u'rb') - except: + file_handle = open(path, u'rb') + log.debug(u'Opened %s' % path) + html = file_handle.read() + except IOError: log.exception(u'Failed to open %s' % path) return None - log.debug(u'Opened %s' % path) - html = f.read() - f.close() + finally: + if file_handle: + file_handle.close() return (mimetype, html) def load_params(self, query): diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index 58e3a4df7..08f39954e 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -265,8 +265,8 @@ class SongImport(object): """ Remove punctuation from the string for searchable fields """ - for c in string.punctuation: - text = text.replace(c, u'') + for character in string.punctuation: + text = text.replace(character, u'') return text def finish(self): diff --git a/openlp/plugins/songs/lib/songxml.py b/openlp/plugins/songs/lib/songxml.py index 8789b379d..0979eb2b8 100644 --- a/openlp/plugins/songs/lib/songxml.py +++ b/openlp/plugins/songs/lib/songxml.py @@ -75,7 +75,7 @@ _blankOpenSongXml = \ ''' class _OpenSong(XmlRootClass): - """Class for import of OpenSogn""" + """Class for import of OpenSong""" def __init__(self, xmlContent = None): """Initialize from given xml content""" @@ -113,8 +113,7 @@ class _OpenSong(XmlRootClass): res.append(self.theme) if self.alttheme: res.append(self.alttheme) - s = u', u'.join(res) - return s + return u', u'.join(res) def _reorder_verse(self, tag, tmpVerse): """ @@ -123,28 +122,28 @@ class _OpenSong(XmlRootClass): tmpVerse -- list of strings """ res = [] - for c in '1234567890 ': + for digit in '1234567890 ': tagPending = True - for l in tmpVerse: - if l.startswith(c): + for line in tmpVerse: + if line.startswith(digit): if tagPending: tagPending = False - t = tag.strip(u'[]').lower() - if 'v' == t: + tagChar = tag.strip(u'[]').lower() + if 'v' == tagChar: newtag = "Verse" - elif 'c' == t: + elif 'c' == tagChar: newtag = "Chorus" - elif 'b' == t: + elif 'b' == tagChar: newtag = "Bridge" - elif 'p' == t: + elif 'p' == tagChar: newtag = "Pre-chorus" else: - newtag = t - s = (u'# %s %s' % (newtag, c)).rstrip() - res.append(s) - res.append(l[1:]) - if (len(l) == 0) and (not tagPending): - res.append(l) + newtag = tagChar + tagString = (u'# %s %s' % (newtag, digit)).rstrip() + res.append(tagString) + res.append(line[1:]) + if (len(line) == 0) and (not tagPending): + res.append(line) return res def get_lyrics(self): @@ -165,13 +164,13 @@ class _OpenSong(XmlRootClass): if line.startswith(u'['): tag = line else: - r = self._reorder_verse(tag, tmpVerse) - finalLyrics.extend(r) + reorderedVerse = self._reorder_verse(tag, tmpVerse) + finalLyrics.extend(reorderedVerse) tag = "" tmpVerse = [] # catch up final verse - r = self._reorder_verse(tag, tmpVerse) - finalLyrics.extend(r) + reorderedVerse = self._reorder_verse(tag, tmpVerse) + finalLyrics.extend(reorderedVerse) return finalLyrics @@ -344,36 +343,36 @@ class Song(object): sCopyright = "" sCcli = "" lastpart = 0 - n = 0 + lineCount = 0 metMisc = False lyrics = [] - for l in textList: - n += 1 + for line in textList: + lineCount += 1 if lastpart > 0: lastpart += 1 if lastpart == 2: - sCopyright = l[1:].strip() + sCopyright = line[1:].strip() if lastpart == 3: - sAuthor = l - elif l.startswith(u'CCLI Song'): - sCcli = l[13:].strip() + sAuthor = line + elif line.startswith(u'CCLI Song'): + sCcli = line[13:].strip() lastpart = 1 else: if metMisc: metMisc = False - if l.upper().startswith(u'(BRIDGE)'): + if line.upper().startswith(u'(BRIDGE)'): lyrics.append(u'# Bridge') # otherwise unknown misc keyword - elif l.startswith(u'Misc'): + elif line.startswith(u'Misc'): metMisc = True - elif l.startswith(u'Verse') or l.startswith(u'Chorus'): - lyrics.append(u'# %s'%l) + elif line.startswith(u'Verse') or line.startswith(u'Chorus'): + lyrics.append(u'# %s' % line) else: # should we remove multiple blank lines? - if n == 1: - sName = l + if lineCount == 1: + sName = line else: - lyrics.append(l) + lyrics.append(line) # split on known separators lst = sAuthor.split(u'/') if len(lst) < 2: From 48446a8312eb08a2317a91d47be00d09b0ac8747 Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Wed, 26 May 2010 17:01:45 +0100 Subject: [PATCH 14/25] log.error checking --- openlp/core/lib/__init__.py | 2 +- openlp/core/lib/serviceitem.py | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/openlp/core/lib/__init__.py b/openlp/core/lib/__init__.py index e5f45b188..b243110dc 100644 --- a/openlp/core/lib/__init__.py +++ b/openlp/core/lib/__init__.py @@ -68,7 +68,7 @@ def get_text_file_string(text_file): file_handle = open(text_file, u'r') content_string = file_handle.read() except IOError: - log.error(u'Failed to open text file %s' % text_file) + log.exception(u'Failed to open text file %s' % text_file) finally: if file_handle: file_handle.close() diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index f246d9b90..9fe7ac060 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -125,8 +125,9 @@ class ServiceItem(object): if title == u'': title = line lines += line + u'\n' - self._display_frames.append({u'title': title, \ - u'text': lines.rstrip(), u'verseTag': slide[u'verseTag'] }) + self._display_frames.append({u'title': title, + u'text': lines.rstrip(), + u'verseTag': slide[u'verseTag'] }) self.cache.insert(len(self._display_frames), None) log.log(15, u'Formatting took %4s' % (time.time() - before)) elif self.service_item_type == ServiceItemType.Image: @@ -239,7 +240,8 @@ class ServiceItem(object): service_data.append(slide[u'title']) elif self.service_item_type == ServiceItemType.Command: for slide in self._raw_frames: - service_data.append({u'title':slide[u'title'], u'image':slide[u'image']}) + service_data.append( + {u'title':slide[u'title'], u'image':slide[u'image']}) return {u'header': service_header, u'data': service_data} def set_from_service(self, serviceitem, path=None): @@ -276,7 +278,8 @@ class ServiceItem(object): elif self.service_item_type == ServiceItemType.Command: for text_image in serviceitem[u'serviceitem'][u'data']: filename = os.path.join(path, text_image[u'title']) - self.add_from_command(path, text_image[u'title'], text_image[u'image'] ) + self.add_from_command( + path, text_image[u'title'], text_image[u'image'] ) def merge(self, other): """ @@ -343,3 +346,4 @@ class ServiceItem(object): Returns the title of the raw frame """ return self._raw_frames[row][u'path'] + From 407d887f2a6a6e2cd9d856ffac99a4e68bea17ff Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Wed, 26 May 2010 21:30:20 +0200 Subject: [PATCH 15/25] - Complete the help text. - Modify for running from the "scripts" directory. --- resources/pyinstaller/windows-builder.py | 50 ++++++++++++++++-------- 1 file changed, 34 insertions(+), 16 deletions(-) diff --git a/resources/pyinstaller/windows-builder.py b/resources/pyinstaller/windows-builder.py index 42592768a..42dd90bf4 100644 --- a/resources/pyinstaller/windows-builder.py +++ b/resources/pyinstaller/windows-builder.py @@ -28,11 +28,29 @@ Windows Build Script -------------------- This script is used to build the Windows binary and the accompanying installer. +For this script to work out of the box, it depends on a number of things: + +windows-builder.py + This script, of course. It should be in the "scripts" directory of OpenLP. + +Bazaar + You need the command line "bzr" client installed. + +OpenLP + A checkout of the latest code, in a branch directory, which is in a Bazaar + shared repository directory. This means your code should be in a directory + structure like this: "openlp\branch-name". + + You can + +PyInstaller + PyInstaller should be a checkout of trunk, and in a directory called, + "pyinstaller" on the same level as OpenLP's Bazaar shared repository + directory. + +Inno Setup 5 + Inno Setup should be installed into "C:\%PROGRAMFILES%\Inno Setup 5" -For this script to work out of the box, it depends on being inside the -"resources/pyinstaller" directory in the OpenLP source tree, it depends on -OpenLP having it's own project directory which all the branches live in, and it -depends on PyInstaller being """ import os @@ -40,12 +58,12 @@ from shutil import copy from subprocess import Popen, PIPE script_path = os.path.split(os.path.abspath(__file__))[0] -pyinstaller_path = os.path.abspath(os.path.join(script_path, u'..', u'..', u'..', u'..', u'pyinstaller')) -innosetup_path = os.path.join(os.getenv(u'PROGRAMFILES'), 'Inno Setup 5') -iss_path = os.path.abspath(os.path.join(script_path, u'..', u'innosetup')) -branch_path = os.path.abspath(os.path.join(script_path, u'..', u'..')) +branch_path = os.path.abspath(os.path.join(script_path, u'..')) source_path = os.path.join(branch_path, u'openlp') dist_path = os.path.join(branch_path, u'dist', u'OpenLP') +pyinstaller_path = os.path.abspath(os.path.join(branch_path, u'..', u'pyinstaller')) +innosetup_path = os.path.join(os.getenv(u'PROGRAMFILES'), 'Inno Setup 5') +iss_path = os.path.join(branch_path, u'resources', u'innosetup') def run_pyinstaller(): @@ -113,17 +131,17 @@ def run_innosetup(): def main(): print "Script path:", script_path - print "PyInstaller path:", pyinstaller_path - print "Inno Setup path:", innosetup_path - print "ISS file path:", iss_path print "Branch path:", branch_path print "Source path:", source_path print "\"dist\" path:", dist_path - run_pyinstaller() - write_version_file() - copy_plugins() - copy_windows_files() - run_innosetup() + print "PyInstaller path:", pyinstaller_path + print "Inno Setup path:", innosetup_path + print "ISS file path:", iss_path + #run_pyinstaller() + #write_version_file() + #copy_plugins() + #copy_windows_files() + #run_innosetup() print "Done." if __name__ == u'__main__': From eaa0bf05e260e00aae998ffd2290934eb15c0d2f Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Wed, 26 May 2010 21:31:19 +0200 Subject: [PATCH 16/25] Moved the windows-builder.py script to the scripts directory. --- {resources/pyinstaller => scripts}/windows-builder.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {resources/pyinstaller => scripts}/windows-builder.py (100%) diff --git a/resources/pyinstaller/windows-builder.py b/scripts/windows-builder.py similarity index 100% rename from resources/pyinstaller/windows-builder.py rename to scripts/windows-builder.py From 5e1c8883e468f10c5fbafef832d4f67d314f5f44 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Wed, 26 May 2010 22:26:21 +0200 Subject: [PATCH 17/25] Added some more documentation. --- scripts/windows-builder.py | 49 +++++++++++++++++++++++++------------- 1 file changed, 32 insertions(+), 17 deletions(-) diff --git a/scripts/windows-builder.py b/scripts/windows-builder.py index 42dd90bf4..aeef8c663 100644 --- a/scripts/windows-builder.py +++ b/scripts/windows-builder.py @@ -30,8 +30,30 @@ Windows Build Script This script is used to build the Windows binary and the accompanying installer. For this script to work out of the box, it depends on a number of things: -windows-builder.py - This script, of course. It should be in the "scripts" directory of OpenLP. +Inno Setup 5 + Inno Setup should be installed into "C:\%PROGRAMFILES%\Inno Setup 5" + +UPX + This is used to compress DLLs and EXEs so that they take up less space, but + still function exactly the same. To install UPS, download it from + http://upx.sourceforge.net/, extract it into C:\%PROGRAMFILES%\UPX, and then + add that directory to your PATH environment variable. + +PyInstaller + PyInstaller should be a checkout of trunk, and in a directory called, + "pyinstaller" on the same level as OpenLP's Bazaar shared repository + directory. + + To install PyInstaller, first checkout trunk from Subversion. The easiest + way is to install TortoiseSVN and then checkout the following URL to a + directory called "pyinstaller":: + + http://svn.pyinstaller.org/trunk + + Once you've done that, open a command prompt (DOS shell), navigate to the + PyInstaller directory and run:: + + C:\Projects\pyinstaller>python Configure.py Bazaar You need the command line "bzr" client installed. @@ -41,15 +63,8 @@ OpenLP shared repository directory. This means your code should be in a directory structure like this: "openlp\branch-name". - You can - -PyInstaller - PyInstaller should be a checkout of trunk, and in a directory called, - "pyinstaller" on the same level as OpenLP's Bazaar shared repository - directory. - -Inno Setup 5 - Inno Setup should be installed into "C:\%PROGRAMFILES%\Inno Setup 5" +windows-builder.py + This script, of course. It should be in the "scripts" directory of OpenLP. """ @@ -61,7 +76,7 @@ script_path = os.path.split(os.path.abspath(__file__))[0] branch_path = os.path.abspath(os.path.join(script_path, u'..')) source_path = os.path.join(branch_path, u'openlp') dist_path = os.path.join(branch_path, u'dist', u'OpenLP') -pyinstaller_path = os.path.abspath(os.path.join(branch_path, u'..', u'pyinstaller')) +pyinstaller_path = os.path.abspath(os.path.join(branch_path, u'..', u'..', u'pyinstaller')) innosetup_path = os.path.join(os.getenv(u'PROGRAMFILES'), 'Inno Setup 5') iss_path = os.path.join(branch_path, u'resources', u'innosetup') @@ -137,11 +152,11 @@ def main(): print "PyInstaller path:", pyinstaller_path print "Inno Setup path:", innosetup_path print "ISS file path:", iss_path - #run_pyinstaller() - #write_version_file() - #copy_plugins() - #copy_windows_files() - #run_innosetup() + run_pyinstaller() + write_version_file() + copy_plugins() + copy_windows_files() + run_innosetup() print "Done." if __name__ == u'__main__': From a1273aefe50d718756807b407e0a6668a38ef392 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Wed, 26 May 2010 22:27:03 +0200 Subject: [PATCH 18/25] Fixed rst. --- scripts/windows-builder.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/windows-builder.py b/scripts/windows-builder.py index aeef8c663..54b31531e 100644 --- a/scripts/windows-builder.py +++ b/scripts/windows-builder.py @@ -48,12 +48,12 @@ PyInstaller way is to install TortoiseSVN and then checkout the following URL to a directory called "pyinstaller":: - http://svn.pyinstaller.org/trunk + http://svn.pyinstaller.org/trunk Once you've done that, open a command prompt (DOS shell), navigate to the PyInstaller directory and run:: - C:\Projects\pyinstaller>python Configure.py + C:\Projects\pyinstaller>python Configure.py Bazaar You need the command line "bzr" client installed. From dfd53e562839c5beb9993d085c613a503df2bf31 Mon Sep 17 00:00:00 2001 From: andreas Date: Thu, 27 May 2010 18:13:25 +0200 Subject: [PATCH 19/25] - footer now displays both bible versions/copyright information (dual bible view) - small fix --- openlp/plugins/bibles/lib/mediaitem.py | 28 ++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index 9f0a8e00d..07186544c 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -463,7 +463,19 @@ class BibleMediaItem(MediaManagerItem): bible2_verses.extend(self.parent.manager.get_verses(bible2, scripture)) bible2_version = self.parent.manager.get_meta_data(bible2, u'Version') bible2_copyright = self.parent.manager.get_meta_data(bible2, u'Copyright') - bible2_permission = self.parent.manager.get_meta_data(bible2, u'Permission') + bible2_permission = self.parent.manager.get_meta_data(bible2, u'Permissions') + if bible2_version: + bible2_version = bible2_version.value + else: + bible2_version = u'' + if bible2_copyright: + bible2_copyright = bible2_copyright.value + else: + bible2_copyright = u'' + if bible2_permission: + bible2_permission = bible2_permission.value + else: + bible2_permission = u'' # Let's loop through the main lot, and assemble our verses for item in items: bitem = self.ListView.item(item.row()) @@ -487,13 +499,17 @@ class BibleMediaItem(MediaManagerItem): else: verse_text = self.formatVerse(old_chapter, chapter, verse, u'', u'') old_chapter = chapter - footer = u'%s (%s %s)' % (book, version, copyright) - #If not found add to footer + footer = u'%s' % (book) + #If not found add book to footer + if footer not in raw_footer: + raw_footer.append(footer) + footer = u'%s %s' % (version, copyright) + #If not found add version and copyright to footer if footer not in raw_footer: raw_footer.append(footer) if bible2: - footer = u'%s (%s %s)' % (book, version, copyright) - #If not found add to footer + footer = u'%s %s' % (bible2_version, bible2_copyright) + #If not found add second version and copyright to footer if footer not in raw_footer: raw_footer.append(footer) bible_text = u'%s %s \n\n %s %s' % \ @@ -580,7 +596,7 @@ class BibleMediaItem(MediaManagerItem): def displayResults(self, bible): version = self.parent.manager.get_meta_data(bible, u'Version') copyright = self.parent.manager.get_meta_data(bible, u'Copyright') - permission = self.parent.manager.get_meta_data(bible, u'Permission') + permission = self.parent.manager.get_meta_data(bible, u'Permissions') if not permission: permission = u'' else: From 039792104b9f4f6dfc82d49ac9ff1e371faa2769 Mon Sep 17 00:00:00 2001 From: andreas Date: Thu, 27 May 2010 18:58:00 +0200 Subject: [PATCH 20/25] - again changes done to the bible footer --- openlp/plugins/bibles/lib/mediaitem.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index 07186544c..469d53640 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -499,16 +499,12 @@ class BibleMediaItem(MediaManagerItem): else: verse_text = self.formatVerse(old_chapter, chapter, verse, u'', u'') old_chapter = chapter - footer = u'%s' % (book) - #If not found add book to footer - if footer not in raw_footer: - raw_footer.append(footer) - footer = u'%s %s' % (version, copyright) - #If not found add version and copyright to footer + footer = u'%s (%s %s)' % (book, version, copyright) + #If not found add to footer if footer not in raw_footer: raw_footer.append(footer) if bible2: - footer = u'%s %s' % (bible2_version, bible2_copyright) + footer = u'%s (%s %s)' % (book, bible2_version, bible2_copyright) #If not found add second version and copyright to footer if footer not in raw_footer: raw_footer.append(footer) From 8287f4ea276792555c0aec8c4a718e7c93a4f548 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Thu, 27 May 2010 22:32:02 +0200 Subject: [PATCH 21/25] Further updated the Windows build script documentation. --- scripts/windows-builder.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/windows-builder.py b/scripts/windows-builder.py index 54b31531e..caf19f53d 100644 --- a/scripts/windows-builder.py +++ b/scripts/windows-builder.py @@ -50,6 +50,10 @@ PyInstaller http://svn.pyinstaller.org/trunk + Then you need to copy the two hook-*.py files from the "pyinstaller" + subdirectory in OpenLP's "resources" directory into PyInstaller's "hooks" + directory. + Once you've done that, open a command prompt (DOS shell), navigate to the PyInstaller directory and run:: From e2f39860ec1df108c674404266df698053700b16 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Thu, 27 May 2010 22:36:04 +0200 Subject: [PATCH 22/25] No longer need the lxml.objectify hook, this is in PyInstaller 1.4. --- resources/pyinstaller/hook-lxml.objectify.py | 1 - 1 file changed, 1 deletion(-) delete mode 100644 resources/pyinstaller/hook-lxml.objectify.py diff --git a/resources/pyinstaller/hook-lxml.objectify.py b/resources/pyinstaller/hook-lxml.objectify.py deleted file mode 100644 index 9d83432df..000000000 --- a/resources/pyinstaller/hook-lxml.objectify.py +++ /dev/null @@ -1 +0,0 @@ -hiddenimports = ['lxml.etree'] From bbcfd7729cd1b86e0ca6a8161f8283f7883af1de Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Fri, 28 May 2010 01:26:49 +0100 Subject: [PATCH 23/25] Refactor BaseModel --- openlp/core/lib/__init__.py | 1 + openlp/core/lib/basemodel.py | 41 +++++++++++++++++++++++++ openlp/migration/migratebibles.py | 2 +- openlp/migration/migratesongs.py | 2 +- openlp/plugins/alerts/lib/classes.py | 16 +--------- openlp/plugins/bibles/lib/models.py | 15 +-------- openlp/plugins/custom/lib/classes.py | 16 +--------- openlp/plugins/songs/lib/classes.py | 16 +--------- openlp/plugins/songusage/lib/classes.py | 16 +--------- 9 files changed, 49 insertions(+), 76 deletions(-) create mode 100644 openlp/core/lib/basemodel.py diff --git a/openlp/core/lib/__init__.py b/openlp/core/lib/__init__.py index 3794afde0..30663ffbe 100644 --- a/openlp/core/lib/__init__.py +++ b/openlp/core/lib/__init__.py @@ -184,4 +184,5 @@ from songxmlhandler import SongXMLBuilder, SongXMLParser from themexmlhandler import ThemeXML from renderer import Renderer from rendermanager import RenderManager +from basemodel import BaseModel from baselistwithdnd import BaseListWithDnD diff --git a/openlp/core/lib/basemodel.py b/openlp/core/lib/basemodel.py new file mode 100644 index 000000000..f4aa2fbef --- /dev/null +++ b/openlp/core/lib/basemodel.py @@ -0,0 +1,41 @@ +# -*- 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 # +############################################################################### + +class BaseModel(object): + """ + BaseModel provides a base object with a set of generic functions + """ + + @classmethod + def populate(cls, **kwargs): + """ + Creates an instance of a class and populates it, returning the instance + """ + me = cls() + keys = kwargs.keys() + for key in keys: + me.__setattr__(key, kwargs[key]) + return me + diff --git a/openlp/migration/migratebibles.py b/openlp/migration/migratebibles.py index 17ded3a80..bd94dd6a0 100644 --- a/openlp/migration/migratebibles.py +++ b/openlp/migration/migratebibles.py @@ -30,7 +30,7 @@ import sqlite3 from sqlalchemy import create_engine from sqlalchemy.orm import scoped_session, sessionmaker, mapper -from openlp.core.lib import SettingsManager +from openlp.core.lib import BaseModel, SettingsManager from openlp.core.utils import AppLocation from openlp.plugins.bibles.lib.models import * diff --git a/openlp/migration/migratesongs.py b/openlp/migration/migratesongs.py index f7624e98c..47ddd6fe6 100644 --- a/openlp/migration/migratesongs.py +++ b/openlp/migration/migratesongs.py @@ -31,7 +31,7 @@ from sqlalchemy import * from sqlalchemy import create_engine from sqlalchemy.orm import scoped_session, sessionmaker, mapper, relation -from openlp.core.lib import SettingsManager +from openlp.core.lib import BaseModel, SettingsManager from openlp.core.utils import AppLocation from openlp.plugins.songs.lib.models import metadata, songs_table, Song, \ Author, Topic, Book diff --git a/openlp/plugins/alerts/lib/classes.py b/openlp/plugins/alerts/lib/classes.py index fd1883b71..e58f80829 100644 --- a/openlp/plugins/alerts/lib/classes.py +++ b/openlp/plugins/alerts/lib/classes.py @@ -23,21 +23,7 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### -class BaseModel(object): - """ - BaseModel provides a base object with a set of generic functions - """ - - @classmethod - def populate(cls, **kwargs): - """ - Creates an instance of a class and populates it, returning the instance - """ - me = cls() - keys = kwargs.keys() - for key in keys: - me.__setattr__(key, kwargs[key]) - return me +from openlp.core.lib import BaseModel class AlertItem(BaseModel): """ diff --git a/openlp/plugins/bibles/lib/models.py b/openlp/plugins/bibles/lib/models.py index 4631b1e32..011a216d2 100644 --- a/openlp/plugins/bibles/lib/models.py +++ b/openlp/plugins/bibles/lib/models.py @@ -27,20 +27,7 @@ from sqlalchemy import Column, Table, MetaData, ForeignKey, types, \ create_engine from sqlalchemy.orm import mapper, relation, sessionmaker, scoped_session -class BaseModel(object): - """ - BaseModel provides a base object with a set of generic functions - """ - @classmethod - def populate(cls, **kwargs): - """ - Creates an instance of a class and populates it, returning the instance - """ - me = cls() - keys = kwargs.keys() - for key in keys: - me.__setattr__(key, kwargs[key]) - return me +from openlp.core.lib import BaseModel class BibleMeta(BaseModel): diff --git a/openlp/plugins/custom/lib/classes.py b/openlp/plugins/custom/lib/classes.py index 305852df2..dc6c5c1b8 100644 --- a/openlp/plugins/custom/lib/classes.py +++ b/openlp/plugins/custom/lib/classes.py @@ -23,21 +23,7 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### -class BaseModel(object): - """ - BaseModel provides a base object with a set of generic functions - """ - - @classmethod - def populate(cls, **kwargs): - """ - Creates an instance of a class and populates it, returning the instance - """ - me = cls() - keys = kwargs.keys() - for key in keys: - me.__setattr__(key, kwargs[key]) - return me +from openlp.core.lib import BaseModel class CustomSlide(BaseModel): """ diff --git a/openlp/plugins/songs/lib/classes.py b/openlp/plugins/songs/lib/classes.py index 115943814..c465588a4 100644 --- a/openlp/plugins/songs/lib/classes.py +++ b/openlp/plugins/songs/lib/classes.py @@ -23,21 +23,7 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### -class BaseModel(object): - """ - BaseModel provides a base object with a set of generic functions - """ - - @classmethod - def populate(cls, **kwargs): - """ - Creates an instance of a class and populates it, returning the instance - """ - me = cls() - keys = kwargs.keys() - for key in keys: - me.__setattr__(key, kwargs[key]) - return me +from openlp.core.lib import BaseModel class Author(BaseModel): """ diff --git a/openlp/plugins/songusage/lib/classes.py b/openlp/plugins/songusage/lib/classes.py index a780b57ac..298380f58 100644 --- a/openlp/plugins/songusage/lib/classes.py +++ b/openlp/plugins/songusage/lib/classes.py @@ -23,21 +23,7 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### -class BaseModel(object): - """ - BaseModel provides a base object with a set of generic functions - """ - - @classmethod - def populate(cls, **kwargs): - """ - Creates an instance of a class and populates it, returning the instance - """ - me = cls() - keys = kwargs.keys() - for key in keys: - me.__setattr__(key, kwargs[key]) - return me +from openlp.core.lib import BaseModel class SongUsageItem(BaseModel): """ From c109b26d225814fca957020b0a668e7f69444375 Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Sat, 29 May 2010 21:57:56 +0100 Subject: [PATCH 24/25] Cleanup BaseModel key iteration --- openlp/core/lib/basemodel.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/openlp/core/lib/basemodel.py b/openlp/core/lib/basemodel.py index f4aa2fbef..f56336c7b 100644 --- a/openlp/core/lib/basemodel.py +++ b/openlp/core/lib/basemodel.py @@ -34,8 +34,7 @@ class BaseModel(object): Creates an instance of a class and populates it, returning the instance """ me = cls() - keys = kwargs.keys() - for key in keys: + for key in kwargs: me.__setattr__(key, kwargs[key]) return me From beab81b10dcdf9d7bfbbe8a3e4b18b5f36a81d99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Sun, 30 May 2010 01:07:29 +0300 Subject: [PATCH 25/25] Estonian translation, not thoroughly tested --- resources/i18n/openlp_et.ts | 3098 +++++++++++++++++++++++++++++++++++ 1 file changed, 3098 insertions(+) create mode 100644 resources/i18n/openlp_et.ts diff --git a/resources/i18n/openlp_et.ts b/resources/i18n/openlp_et.ts new file mode 100644 index 000000000..9ac4b8239 --- /dev/null +++ b/resources/i18n/openlp_et.ts @@ -0,0 +1,3098 @@ + + + AboutForm + + build + komplieering + + + About OpenLP + OpenLP-st lähemalt + + + OpenLP <version><revision> - Open Source Lyrics Projection + +OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if OpenOffice.org, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. + +Find out more about OpenLP: http://openlp.org/ + +OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. + OpenLP <version><revision> - avatud lähtekoodiga laulusõnade kuvaja + +OpenLP on vaba esitlustarkvara kirikusse võib öelda ka laulusõnade projitseerimise tarkvara, mida kasutatakse lauluslaidide, piiblisalmide, videote, piltide ja isegi esitluste (kui OpenOffice.org, PowerPoint või PowerPoint Viewer on paigaldatud) kirikus installed) kuvamiseks dataprojektori kaudu kirikus. + +OpenLP kohta võid lähemalt uurida aadressil: http://openlp.org/ + +OpenLP on kirjutatud vabatahtlike poolt. Kui sulle meeldiks näha rohkem kristlikku tarkvara, siis võid kaaluda annetamist, selleks klõpsa alumisele nupule. + + + About + Programmist + + + Project Lead + Raoul "superfly" Snyman + +Developers + Tim "TRB143" Bentley + Jonathan "gushie" Corwin + Michael "cocooncrash" Gorven + Scott "sguerrieri" Guerrieri + Raoul "superfly" Snyman + Martin "mijiti" Thompson + Jon "Meths" Tibble + +Contributors + Meinert "m2j" Jordan + Christian "crichter" Richter + Maikel Stuivenberg + Carsten "catini" Tingaard + +Testers + Philip "Phill" Ridout + Wesley "wrst" Stout (lead) + +Packagers + Thomas "tabthorpe" Abthorpe (FreeBSD) + Tim "TRB143" Bentley (Fedora) + Michael "cocooncrash" Gorven (Ubuntu) + Matthias "matthub" Hub (Mac OS X) + Raoul "superfly" Snyman (Windows) + + Projekti juht + Raoul "superfly" Snyman + +Arendajad + Tim "TRB143" Bentley + Jonathan "gushie" Corwin + Michael "cocooncrash" Gorven + Scott "sguerrieri" Guerrieri + Raoul "superfly" Snyman + Martin "mijiti" Thompson + Jon "Meths" Tibble + +Kaastöölised + Meinert "m2j" Jordan + Christian "crichter" Richter + Maikel Stuivenberg + Carsten "catini" Tingaard + +Testijad + Philip "Phill" Ridout + Wesley "wrst" Stout (juht) + +Pakendajad + Thomas "tabthorpe" Abthorpe (FreeBSD) + Tim "TRB143" Bentley (Fedora) + Michael "cocooncrash" Gorven (Ubuntu) + Matthias "matthub" Hub (Mac OS X) + Raoul "superfly" Snyman (Windows) + + + Credits + Autorid + + + Copyright © 2004-2010 Raoul Snyman +Portions copyright © 2004-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 below for more details. + + +GNU GENERAL PUBLIC LICENSE +Version 2, June 1991 + +Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. + +Preamble + +The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. + +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. + +To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. + +For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. + +We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. + +Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. + +Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. + +The precise terms and conditions for copying, distribution and modification follow. + +GNU GENERAL PUBLIC LICENSE +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. + +1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. + +You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: + +a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. + +b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. + +c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. + +3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: + +a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, + +b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, + +c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. + +If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. + +4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. + +5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. + +6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. + +7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. + +This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. + +8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. + +9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version', you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. + +10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. + +NO WARRANTY + +11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +END OF TERMS AND CONDITIONS + +How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. + +<one line to give the program's name and a brief idea of what it does.> +Copyright (C) <year> <name of author> + +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; either version 2 of the License, or (at your option) any later version. + +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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this when it starts in an interactive mode: + +Gnomovision version 69, Copyright (C) year name of author +Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type "show w". +This is free software, and you are welcome to redistribute it under certain conditions; type "show c" for details. + +The hypothetical commands "show w" and "show c" should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than "show w" and "show c"; they could even be mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: + +Yoyodyne, Inc., hereby disclaims all copyright interest in the program "Gnomovision" (which makes passes at compilers) written by James Hacker. + +<signature of Ty Coon>, 1 April 1989 +Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. + + + + License + Litsents + + + Contribute + Aita kaasa + + + Close + Sulge + + + + AlertForm + + Alert Message + Teate sõnum + + + Alert &text: + Teate &tekst: + + + &Parameter(s): + &Parameetrid: + + + &New + &Uus + + + &Save + &Salvesta + + + &Delete + &Kustuta + + + Displ&ay + &Kuva + + + Display && Cl&ose + Kuva && &sulge + + + &Close + &Sulge + + + Item selected to Add + Lisamiseks valitud kirje + + + Missing data + Puuduvad andmed + + + + AlertsTab + + pt + pt + + + Location: + Asukoht: + + + Font Color: + Kirja värvus: + + + Font + Kirjastiil + + + Font Name: + Kirja nimi: + + + Preview + Eelvaade + + + Alerts + Teated + + + Alert timeout: + Teate aegumine: + + + openlp.org + openlp.org + + + Background Color: + Tausta värvus: + + + s + s + + + Bottom + All + + + Top + Üleval + + + Font Size: + Kirja suurus: + + + + AmendThemeForm + + Background Color: + Tausta värvus: + + + Slide Height is %s rows + Slaidi kõrgus on %s rida + + + First Color: + Esimene värvus: + + + Second Color: + Teine värvus: + + + Theme Maintenance + Kujunduste haldus + + + Theme Name: + Kujunduse nimi: + + + Background: + Taust: + + + Opaque + Läbipaistmatu + + + Transparent + Läbipaistev + + + Background Type: + Tausta liik: + + + Solid Color + Ühtlane värv + + + Gradient + Üleminek + + + Image + Pilt + + + <Color1> + <värv1> + + + <Color2> + <värv2> + + + Image: + Pilt: + + + Gradient : + Üleminek: + + + Horizontal + Horisontaalne + + + Vertical + Vertikaalne + + + Circular + Ümmargune + + + Background + Taust + + + Main Font + Peamine kirjastiil + + + Font: + Kirjastiil: + + + Font Color: + Kirja värvus: + + + Size: + Suurus: + + + pt + pt + + + Wrap Indentation + Murtud ridade taane + + + Adjust Line Spacing + Joone vahe seadmine + + + Normal + Tavaline + + + Bold + Rasvane + + + Italics + Kursiiv + + + Bold/Italics + Rasvane/kaldkiri + + + Font Weight: + Kirja jämedus: + + + Display Location + Kuva asukoht + + + Use Default Location: + Kasutatakse vaikimisi asukohta: + + + X Position: + X-asukoht: + + + Y Position: + Y-asukoht: + + + Width: + Laius: + + + Height: + Kõrgus: + + + px + px + + + Font Main + Peamine kirjastiil + + + Footer Font + Jaluse kirjatüüp + + + Font Footer + Jaluse kirjatüüp + + + Outline + Välisjoon + + + Outline Size: + Kontuurjoone suurus: + + + Outline Color: + Kontuurjoone värv: + + + Show Outline: + Kontuurjoon: + + + Shadow + Vari + + + Shadow Size: + Varju suurus: + + + Shadow Color: + Varju värvus: + + + Show Shadow: + Taustal näidatakse: + + + Alignment + Joondus + + + Horizontal Align: + Rõhtpaigutus: + + + Left + Vasakul + + + Right + Paremal + + + Center + Keskel + + + Vertical Align: + Püstpaigutus: + + + Top + Üleval + + + Middle + Keskel + + + Bottom + All + + + Slide Transition + Slaidide üleminek + + + Transition Active: + Slaidisiire aktiivne: + + + Other Options + Muud valikud + + + Preview + Eelvaade + + + + AuditDeleteDialog + + Song Usage Delete + Laulukasutuse kustutamine + + + + AuditDetailDialog + + Song Usage Extraction + Laulukasutuse salvestamine + + + Select Date Range + Vali kuupäevade vahemik + + + to + kuni + + + Report Location + Asukohast raporteerimine + + + + AuthorsForm + + You need to type in the first name of the author. + Pead sisestama autori eesnime. + + + You haven't set a display name for the author, would you like me to combine the first and last names for you? + Sa pole sisestanud autori kuvatavat nime. Kas see tuleks kombineerida ees- ja perekonnanimest? + + + Error + Viga + + + You need to type in the last name of the author. + Pead sisestama autori perekonnanime. + + + Author Maintenance + Autorite haldus + + + Display name: + Kuvatav nimi: + + + First name: + Eesnimi: + + + Last name: + Perekonnanimi: + + + + BibleMediaItem + + Quick + Kiire + + + Bible + Piibel + + + Clear + Puhasta + + + Search + Otsi + + + Book: + Raamat: + + + Text Search + Tekstiotsing + + + No matching book could be found in this Bible. + Sellest Piiblist ei leitud seda raamatut. + + + Dual: + Teine: + + + Chapter: + Peatükk: + + + No Book Found + Ühtegi raamatut ei leitud + + + Keep + Säilita + + + Results: + Tulemused: + + + Verse Search + Salmi otsing + + + Version: + Versioon: + + + From: + Algus: + + + Find: + Otsing: + + + Advanced + Täpsem + + + To: + Kuni: + + + Verse: + Salm: + + + Search Type: + Otsingu liik: + + + Bible not fully loaded + Piibel ei ole täielikult laaditud + + + + BiblePlugin + + <strong>Bible Plugin</strong><br />This plugin allows bible verses from different sources to be displayed on the screen during the service. + <strong>Piibli plugin</strong><br />See plugin võimaldab teenistuse ajal kuvada erinevatest allikatest pärinevaid piiblisalme. + + + + BiblesTab + + ( and ) + ( ja ) + + + verse per line + iga salm eraldi real + + + Display Style: + Kuvamise stiil: + + + Bibles + Piiblid + + + continuous + jätkuv + + + [ and ] + [ ja ] + + + Bible Theme: + Piibli kujundus: + + + Display Dual Bible Verses + Piiblit kuvatakse kahes keeles + + + Only show new chapter numbers + Kuvatakse ainult uute peatükkide numbreid + + + Verse Display + Salmi kuva + + + No brackets + Ilma sulgudeta + + + { and } + { ja } + + + Note: +Changes don't affect verses already in the service + Märkus: +Muudatused ei mõjuta juba teenistusse lisatud salme + + + verse per slide + üks salm slaidil + + + Layout Style: + Kuvastiil: + + + + CustomMediaItem + + Custom + Kohandatud + + + + CustomPlugin + + <b>Custom Plugin</b><br>This plugin allows slides to be displayed on the screen in the same way songs are. This plugin provides greater freedom over the songs plugin.<br> + <b>Kohandatud plugin</b>Selle pluginaga saab näidata ekraanil lauludega sarnaseid kohandatud slaide. See pakub suuremat vabadust, kui laulude plugin.<br> + + + + CustomTab + + Custom + Kohandatud + + + Custom Display + Kohandatud kuva + + + Display Footer + Jalust kuvatakse + + + + DisplayTab + + Displays + Kuva + + + + EditCustomForm + + You need to enter a title + Pead sisestama pealkirja + + + Error + Viga + + + You need to enter a slide + Pead sisenema slaidile + + + Save && Preview + Salvesta && eelvaatle + + + Edit Custom Slides + Kohandatud slaidide muutmine + + + Move slide Up 1 + Slaidi liigutamine 1 võrra üles + + + Move slide down 1 + Slaidi liigutamine 1 võrra alla + + + Title: + Pealkiri: + + + Add New + Uue lisamine + + + Add new slide at bottom + Uue slaidi lisamine lõppu + + + Edit + Muuda + + + Edit selected slide + Valitud slaidi muutmine + + + Edit All + Kõigi muutmine + + + Edit all slides + Kõigi slaidide muutmine + + + Save + Salvesta + + + Replace edited slide + Muudetud slaidi asendamine + + + Delete + Kustuta + + + Delete selected slide + Valitud slaidi kustutamine + + + Clear + Puhasta + + + Clear edit area + Muutmise ala puhastamine + + + Split Slide + Tükelda slaid + + + Add slide split + Lisa slaidide tükeldus + + + Theme: + Kujundus: + + + Credits: + Autorid: + + + You have unsaved data, please save or clear + Sul on salvestamata andmeid, palun salvesta või tühjenda + + + + EditSongForm + + You need to enter a song title. + Pead sisestama laulu pealkirja. + + + Invalid verse entry - Vx or Cx + Vigane salmi kirje - Vx või Cx + + + v + s + + + c + ref + + + Invalid verse entry, values must be I,B,T,P,E,O,Vx,Cx + Sobimatu salmi sisend, väärtused peavad olema I,B,T,P,E,O,Vx,Cx + + + You need to enter some verses. + Pead sisestama mõned salmid. + + + Save && Preview + Salvesta && eelvaatle + + + bitped + + + + Error + Viga + + + Song Editor + Lauluredaktor + + + Title: + Pealkiri: + + + Alternative Title: + Alternatiivne pealkiri: + + + Lyrics: + Laulusõnad: + + + Verse Order: + Salmide järjekord: + + + Add + Lisa + + + Edit + Muuda + + + Edit All + Kõigi muutmine + + + Delete + Kustuta + + + Title && Lyrics + Pealkiri && laulusõnad + + + Authors + Autorid + + + &Add to Song + &Lisa laulule + + + &Remove + &Eemalda + + + &Manage Authors, Topics, Books + &Autorite, teemade, raamatute haldamine + + + Topic + Teema + + + A&dd to Song + L&isa laulule + + + R&emove + &Eemalda + + + Song Book + Laulik + + + Authors, Topics && Book + Autorid, teemad && laulik + + + Theme + Kujundus + + + Add a Theme + Lisa kujundus + + + Copyright Information + Autoriõiguse andmed + + + CCLI Number: + CCLI number: + + + Comments + Kommentaarid + + + Theme, Copyright Info && Comments + Kujundus, autoriõigus && kommentaarid + + + + EditVerseForm + + Verse + Salm + + + Edit Verse + Salmi muutmine + + + Verse Type: + Salmi liik: + + + Chorus + Refrään + + + Bridge + Vahemäng + + + Pre-Chorus + Eelrefrään + + + Intro + Intro + + + Ending + Lõpetus + + + Other + Muu + + + Insert + Sisesta + + + + GeneralTab + + CCLI Details + CCLI andmed + + + SongSelect Password: + SongSelecti parool: + + + primary + peamine + + + Application Startup + Rakenduse käivitumine + + + Select monitor for output display: + Vali väljundkuva monitor: + + + Application Settings + Rakenduse sätted + + + SongSelect Username: + SongSelecti kasutajanimi: + + + CCLI Number: + CCLI number: + + + Automatically open the last service + Automaatselt avatakse viimane teenistus + + + Preview Next Song from Service Manager + Teenistuse haldurist kuvatakse järgmise laulu eelvaade + + + Show blank screen warning + Kuvatakse tühja ekraani hoiatust + + + Prompt to save Service before starting New + Uue teenistuse loomise pakutakse vana salvestamist + + + General + Üldine + + + Show the splash screen + Käivitumisel kuvatakse logo + + + Screen + Ekraan + + + Monitors + Monitorid + + + Display if a single screen + Kuvatakse, kui on ainult üks ekraan + + + + ImageMediaItem + + Select Image(s) + Pildi (piltide) valimine + + + You must select one item + Pead valima ühe kirje + + + No item selected + Ühtegi kirjet pole valitud + + + Replace Live Background + Ekraani tausta asendamine + + + Image(s) + Pilt(pildid) + + + Image + Pilt + + + Images (*.jpg *.jpeg *.gif *.png *.bmp);; All files (*) + Pildid (*.jpg *.jpeg *.gif *.png *.bmp);; Kõik failid (*) + + + + ImagePlugin + + <b>Image Plugin</b><br>Allows images of all types to be displayed. If a number of images are selected together and presented on the live controller it is possible to turn them into a timed loop.<br<br>From the plugin if the <i>Override background</i> is chosen and an image is selected any songs which are rendered will use the selected image from the background instead of the one provied by the theme.<br> + <b>Piltide plugin</b><br>Võimaldab igat tüüpi piltide kuvamise. Kui valitakse hulk pilte korraga ning näidatakse neid ekraanil, on võimalik panna need kordama.<br>Kui pluginas on valitud <i>Asenda taustapilt</i> ja mõni pilt on valitud, siis kujunduse taustapildi asemel näidatakse valitud pilti.<br> + + + + ImageTab + + sec + s + + + Image Settings + Pildi sätted + + + Slide Loop Delay: + Slaidide vahetuse viivitus: + + + Images + Pildid + + + + ImportWizardForm + + Invalid Bible Location + Ebakorrektne Piibli asukoht + + + You need to specify a file with books of the Bible to use in the import. + Pead määrama faili, mis sisaldab piibliraamatuid, mida tahad importida. + + + You need to set a copyright for your Bible! Bibles in the Public Domain need to be marked as such. + Pead määrama Piiblitõlke autoriõiguse! Avalikkuse omandisse kuuluvad Piiblid tuleb vastavalt tähistada. + + + Empty Copyright + Autoriõigused määramata + + + Empty Version Name + Versiooni nimi määramata + + + Invalid OpenSong Bible + Mittekorrektne OpenSong Piibel + + + Your Bible import failed. + Piibli importimine nurjus. + + + You need to specify a file to import your Bible from. + Pead määrama faili, millest Piibel importida. + + + Bible Exists + Piibel on olemas + + + Finished import. + Importimine lõpetatud. + + + You need to specify a file of Bible verses to import. + Pead ette andma piiblisalmide faili, mida importida. + + + Open Books CSV File + Open Books CSV fail + + + You need to specify a version name for your Bible. + Pead määrama Piibli versiooni nime. + + + This Bible already exists! Please import a different Bible or first delete the existing one. + See piibel on juba olemas! Palun impordi mingi muu piibel või kustuta enne olemasolev. + + + Starting import... + Importimise alustamine... + + + Invalid Books File + Vigane raamatute fail + + + You need to specify an OpenSong Bible file to import. + Pead määrama OpenSong piiblifaili, mida importida. + + + Invalid Verse File + Vigane salmide fail + + + Open Verses CSV File + Open Verses CSV fail + + + Open OSIS File + Open OSIS fail + + + Open OpenSong Bible + OpenSong piibli avamine + + + Bible Import Wizard + Piibli importimise nõustaja + + + Welcome to the Bible Import Wizard + Teretulemast Piibli importimise nõustajasse + + + This wizard will help you to import Bibles from a variety of formats. Click the next button below to start the process by selecting a format to import from. + See nõustaja aitab erinevatest vormingutest Piibleid importida. Klõpsa all asuvale edasi nupule, et alustada importimise vormingu valimisest. + + + Select Import Source + Importimise allika valimine + + + Select the import format, and where to import from. + Vali importimise vorming ning kust importida. + + + Format: + Vorming: + + + OSIS + OSIS + + + CSV + CSV + + + OpenSong + OpenSong + + + Web Download + Veebiallalaadimine + + + File Location: + Faili asukoht: + + + Books Location: + Raamatute asukoht: + + + Verse Location: + Salmide asukoht: + + + Bible Filename: + Piiblifaili nimi: + + + Location: + Asukoht: + + + Crosswalk + Crosswalk + + + BibleGateway + BibleGateway + + + Bible: + Piibel: + + + Download Options + Allalaadimise valikud + + + Server: + Server: + + + Username: + Kasutajanimi: + + + Password: + Parool: + + + Proxy Server (Optional) + Proksiserver (valikuline) + + + License Details + Litsentsist lähemalt + + + Set up the Bible's license details. + Määra Piibli litsentsi andmed. + + + Version Name: + Versiooninimi: + + + Copyright: + Autoriõigus: + + + Permission: + Õigus: + + + Importing + Importimine + + + Please wait while your Bible is imported. + Palun oota, kuni sinu Piiblit imporditakse. + + + Ready. + Valmis. + + + No OpenLyrics Files Selected + Ühtegi OpenLyrics faili pole valitud + + + You need to add at least one OpenLyrics song file to import from. + Sul peab olema vähemalt üks OpenLyrics laulufail, millest importida. + + + No OpenSong Files Selected + Ühtegi OpenSong faili pole valitud + + + You need to add at least one OpenSong song file to import from. + Pead lisama vähemalt ühe OpenSong faili, mida importida. + + + No CCLI Files Selected + Ühtegi CCLI faili pole valitud + + + You need to add at least one CCLI file to import from. + Tuleb lisada vähemalt üks CCLI fail, mida importida. + + + No CSV File Selected + Ühtegi CSV faili pole valitud + + + You need to specify a CSV file to import from. + Pead määrama CCLI faili, mida importida. + + + + LanguageManager + + Language + Keel + + + After restart new Language settings will be used. + Keele sätteid kasutatakse pärast taaskäivitust. + + + + MainWindow + + The Main Display has been blanked out + Peakuva on tühi + + + OpenLP Version Updated + OpenLP uuendus + + + Version %s of OpenLP is now available for download (you are currently running version %s). + +You can download the latest version from http://openlp.org + OpenLP versioon %s on nüüd saadaval allalaadimiseks (praegu kasutad versiooni %s). + +Värskeima versiooni saad alla laadida aadressilt http://openlp.org + + + Save Changes to Service? + Kas salvestada teenistusse tehtud muudatused? + + + OpenLP Main Display Blanked + OpenLP peakuva on tühi + + + Open an existing service + Olemasoleva teenistuse valimine + + + List the Plugins + Pluginate loend + + + &Service Manager + &Teenistuse haldur + + + Open Service + Teenistuse avamine + + + Media Manager + Meediahaldur + + + Alt+F4 + Alt+F4 + + + Toggle the visibility of the Preview Panel + Eelvaatluspaneeli nähtavuse muutmine + + + &User Guide + &Kasutajajuhend + + + &Import + &Impordi + + + Quit OpenLP + Lahku OpenLPst + + + &Preview Panel + &Eelvaatluspaneel + + + &New + &Uus + + + Ctrl+N + Ctrl+N + + + Default Theme: + Vaikimisi kujundus: + + + Toggle Preview Panel + Eelvaatluspaneeli lüliti + + + &Live + &Otse + + + F9 + F9 + + + F8 + F8 + + + Save the current service to disk + Selle teenistuse salvestamine kettale + + + Add &Tool... + Lisa &tööriist... + + + Create a new Service + Uue teenistuse loomine + + + &View + &Vaade + + + &Export + &Ekspordi + + + &Open + &Ava + + + Toggle Theme Manager + Kujunduse halduri lüliti + + + &Settings + &Sätted + + + &Options + &Valikud + + + Ctrl+S + Ctrl+S + + + Ctrl+O + Ctrl+O + + + &File + &Fail + + + E&xit + &Välju + + + &Help + A&bi + + + Toggle Service Manager + Teenistuse halduri lüliti + + + Ctrl+F1 + Ctrl+F1 + + + Save the current service under a new name + Salvesta see teenistus uue nimega + + + &Web Site + &Veebileht + + + M&ode + &Režiim + + + Service Manager + Teenistuse haldur + + + &Theme + &Kujundus + + + &Language + &Keel + + + &About + &Lähemalt + + + &Plugin List + &Pluginate loend + + + English + Eesti + + + Save Service As + Salvesta teenistus kui + + + New Service + Uus teenistus + + + &Online Help + &Abi veebis + + + Save Service + Salvesta teenistus + + + Save &As... + Salvesta &kui... + + + Toggle the visibility of the Media Manager + Meediahalduri nähtavuse lüliti + + + F11 + F11 + + + F10 + F10 + + + F12 + F12 + + + Alt+F7 + Alt+F7 + + + Add an application to the list of tools + Rakenduse lisamine tööriistade loendisse + + + Theme Manager + Kujunduse haldur + + + Toggle the visibility of the Theme Manager + Kujunduse halduri nähtavuse lüliti + + + &Preview Pane + &Eelvaatluspaan + + + &Theme Manager + &Kujunduse haldur + + + Toggle the visibility of the Service Manager + Teenistuse halduri nähtavuse lüliti + + + More information about OpenLP + Lähem teave OpenLP kohta + + + &Media Manager + &Meediahaldur + + + &Tools + &Tööriistad + + + Toggle Media Manager + Meediahalduri lüliti + + + &Save + &Salvesta + + + OpenLP 2.0 + OpenLP 2.0 + + + Look && &Feel + Välimus && &tunnetus + + + &Auto Detect + &Isetuvastus + + + Choose System language, if available + Võimalusel kasutatakse süsteemi keelt + + + Set the interface language to %1 + Määra kasutajaliidese keeleks %1 + + + Your service has changed. Do you want to save those changes? + Sinu teenistust on muudetud. Kas tahad need muudatused salvestada? + + + + MediaManagerItem + + Invalid Service Item + Vigane teenistuse element + + + No Items Selected + Ühtegi elementi pole valitud + + + You must select one or more items + Pead valima vähemalt ühe elemendi + + + &Add to selected Service Item + &Lisa valitud teenistuse elemendile + + + &Preview + &Eelvaatlus + + + Load a new + Laadi uus + + + &Edit + &Muuda + + + No items selected + Ühtegi elementi pole valitud + + + &Add to Service + &Lisa teenistusele + + + Send the selected item live + Valitud kirje saatmine ekraanile + + + Add the selected item(s) to the service + Valitud kirje(te) lisamine teenistusse + + + Edit the selected + Valitud kirje muutmine + + + Delete the selected item + Valitud elemendi kustutamine + + + No Service Item Selected + Ühtegi teenistuse elementi pole valitud + + + Import a + Impordi üks + + + &Delete + &Kustuta + + + &Show Live + &Kuva ekraanil + + + Add a new + Lisa uus + + + Preview the selected item + Valitud kirje eelvaatlus + + + You must select one or more items. + Pead valima vähemalt ühe elemendi. + + + You must select an existing service item to add to. + Pead valima olemasoleva teenistuse, millele lisada. + + + + MediaMediaItem + + Select Media + Meedia valimine + + + Media + Meedia + + + Videos (%s);;Audio (%s);;All files (*) + Videofailid (%s);;Helifailid (%s);;Kõik failid (*) + + + Replace Live Background + Ekraani tausta asendamine + + + No item selected + Ühtegi kirjet pole valitud + + + You must select one item + Pead valima ühe kirje + + + + MediaPlugin + + <b>Media Plugin</b><br>This plugin allows the playing of audio and video media + <b>Meedia plugin</b><br>See plugin võimaldab audio ja video esitamise + + + + OpenLPExportForm + + openlp.org Song Exporter + openlp.org laulude eksportija + + + Select openlp.org export filename: + Vali openlp.org eksportimise failinimi: + + + Full Song List + Täielik laulude loend + + + Song Title + Laulu pealkiri + + + Author + Autor + + + Select All + Vali kõik + + + Lyrics + Laulusõnad + + + Title + Pealkiri + + + Song Export List + Laulude eksportimise loend + + + Remove Selected + Valitute eemaldamine + + + Progress: + Edenemine: + + + Ready to export + Eksportimiseks valmis + + + Export + Ekspordi + + + Close + Sulge + + + + OpenLPImportForm + + openlp.org Song Importer + openlp.org lauluimportija + + + Select openlp.org songfile to import: + Openlp.org laulufaili valimine importimiseks: + + + Import File Song List + Laululoendi faili importimine + + + Song Title + Laulu pealkiri + + + Author + Autor + + + Select All + Vali kõik + + + Lyrics + Laulusõnad + + + Title + Pealkiri + + + Song Import List + Laulude importimise nimekiri + + + Remove Selected + Valitute eemaldamine + + + Progress: + Edenemine: + + + Ready to import + Importimiseks valmis + + + Import + Impordi + + + Close + Sulge + + + + OpenSongBible + + Importing + Importimine + + + + OpenSongExportForm + + OpenSong Song Exporter + OpenSong laulueksportija + + + Select OpenSong song folder: + Vali OpenSong laulude kataloog: + + + Full Song List + Täielik laulude loend + + + Song Title + Laulu pealkiri + + + Author + Autor + + + Select All + Vali kõik + + + Lyrics + Laulusõnad + + + Title + Pealkiri + + + Song Export List + Laulude eksportimise loend + + + Remove Selected + Valitute eemaldamine + + + Progress: + Edenemine: + + + Ready to export + Eksportimiseks valmis + + + Export + Ekspordi + + + Close + Sulge + + + + OpenSongImportForm + + OpenSong Song Importer + OpenSongi lauluimportija + + + OpenSong Folder: + OpenSongi kataloog: + + + Progress: + Edenemine: + + + Ready to import + Importimiseks valmis + + + Import + Impordi + + + Close + Sulge + + + + PluginForm + + Plugin List + Pluginate loend + + + Plugin Details + Plugina andmed + + + Version: + Versioon: + + + TextLabel + TekstiPealdis + + + About: + Kirjeldus: + + + Status: + Olek: + + + Active + Aktiivne + + + Inactive + Pole aktiivne + + + + PresentationMediaItem + + Presentation + Esitlus + + + Present using: + Esitluseks kasutatakse: + + + Automatic + Automaatne + + + A presentation with that filename already exists. + Sellise nimega esitluse fail on juba olemas. + + + Select Presentation(s) + Esitlus(t)e valimine + + + File exists + Fail on olemas + + + Presentations (%s) + Esitlused (%s) + + + + PresentationPlugin + + <b>Presentation Plugin</b> <br> Delivers the ability to show presentations using a number of different programs. The choice of available presentation programs is available to the user in a drop down box. + <b>Esitluse plugin</b><br>Võimaldab kuvada esitlusi teistest programmidest. Saadaolevad esitlusrakendused on valikumenüüs. + + + + PresentationTab + + Available Controllers + Saadaolevad kontrollerid + + + available + saadaval + + + Presentations + Esitlused + + + + RemoteTab + + Remotes + Kaugjuhtimispuldid + + + Remotes Receiver Port + Puldi vastuvõtu port + + + + RemotesPlugin + + <b>Remote Plugin</b><br>This plugin provides the ability to send messages to a running version of openlp on a different computer via a web browser or other app<br>The Primary use for this would be to send alerts from a creche + <b>Kaugjuhtimisplugin</b><br>See plugin võimaldab töötavale openlp programmile teadete saatmise teisest arvutist veebilehitseja või mõne muu rakenduse kaudu.<br>Selle peamine rakendus on teadete saatmine lastehoiust + + + + ServiceItemEditForm + + Service Item Maintenance + Teenistuse elementide haldus + + + Up + Üles + + + Delete + Kustuta + + + Down + Alla + + + + ServiceManager + + Save Changes to Service? + Kas salvestada teenistusse tehtud muudatused? + + + Open Service + Teenistuse avamine + + + Move to top + Tõsta üles + + + Save Service + Salvesta teenistus + + + Create a new service + Uue teenistuse loomine + + + Save this service + Selle teenistuse salvestamine + + + Theme: + Kujundus: + + + Delete From Service + Teenistusest kustutamine + + + &Preview Verse + &Salmi eelvaatlus + + + &Live Verse + &Otsesalm + + + Move to &top + Liiguta ü&lemiseks + + + New Service + Uus teenistus + + + &Notes + &Märkmed + + + &Delete From Service + &Kustuta teenistusest + + + Move up order + Järjekorras üles liigutamine + + + Move down order + Järjekorras alla liigutamine + + + Move &down + Liiguta &alla + + + Load an existing service + Välise teenistuse laadimine + + + Move to end + Viimaseks tõstmine + + + &Maintain Item + &Halda elementi + + + Move &up + Liiguta &üles + + + &Edit Item + &Muuda kirjet + + + Move to &bottom + Liiguta &alumiseks + + + &Add New Item + &Lisa uus element + + + &Add to Selected Item + &Lisa valitud elemendile + + + Your service is unsaved, do you want to save those changes before creating a new one? + See teenistus pole salvestatud, kas tahad selle uue avamist salvestada? + + + Your current service is unsaved, do you want to save the changes before opening a new one? + See teenistus pole salvestatud, kas tahad enne uue avamist muudatused salvestada? + + + Missing Display Handler + + + + Your item cannot be displayed as there is no handler to display it + Seda elementi pole võimalik näidata ekraanil, kuna puudub seda käsitsev programm + + + + ServiceNoteForm + + Service Item Notes + Teenistuse elemendi märkmed + + + + SettingsForm + + Settings + Sätted + + + + SlideController + + Move to previous + Eelmisele liikumine + + + Theme Screen + Kujunduse ekraan + + + Go to Verse + Liikumine salmile + + + Start continuous loop + Katkematu korduse alustamine + + + Live + Ekraan + + + Start playing media + Meediaesituse alustamine + + + Move to live + Tõsta ekraanile + + + Hide Screen + Peida ekraan + + + Move to last + Liikumine viimasele + + + Verse + Salm + + + Move to next + Liikumine järgmisele + + + Move to first + Liikumine esimesele + + + Blank Screen + Tühi ekraan + + + Delay between slides in seconds + Viivitus slaidide vahel sekundites + + + Preview + Eelvaade + + + Stop continuous loop + Katkematu korduse lõpetamine + + + s + s + + + Chorus + Refrään + + + Edit and re-preview Song + Muuda ja kuva laulu eelvaade uuesti + + + + SongBookForm + + Error + Viga + + + You need to type in a book name! + Pead sisestama laulikule nime! + + + Edit Book + Lauliku redigeerimine + + + Name: + Nimi: + + + Publisher: + Kirjastaja: + + + + SongMaintenanceForm + + Are you sure you want to delete the selected book? + Kas oled kindel, et tahad valitud lauliku kustutada? + + + Couldn't save your author. + Autorit ei suudetud salvestada. + + + This author can't be deleted, they are currently assigned to at least one song. + Seda autorit pole võimalik kustutada, see on seotud vähemalt ühe lauluga. + + + Couldn't add your book. + Laulikut ei suudetud lisada. + + + Error + Viga + + + No author selected! + Ühtegi autorit pole valitud! + + + Couldn't add your topic. + Teemat ei suudetud lisada. + + + This book can't be deleted, it is currently assigned to at least one song. + Seda laulikut pole võimalik kustutada, see on seotud vähemalt ühe lauluga. + + + Delete Book + Lauliku kustutamine + + + No book selected! + Ühtegi laulikut pole valitud! + + + Are you sure you want to delete the selected author? + Kas oled kindel, et tahad kustutada valitud autori? + + + Couldn't add your author. + Autorit ei suudetud lisada. + + + Couldn't save your topic. + Teemat ei suudetud salvestada. + + + Couldn't save your book. + Laulikut ei suudetud salvestada. + + + Delete Topic + Teema kustutamine + + + Delete Author + Autori kustutamine + + + No topic selected! + Ühtegi teemat pole valitud! + + + This topic can't be deleted, it is currently assigned to at least one song. + Seda teemat pole võimalik kustutada, see on seotud vähemalt ühe lauluga. + + + Are you sure you want to delete the selected topic? + Kas oled kindel, et tahad valitud teema kustutada? + + + Song Maintenance + Laulude haldus + + + Authors + Autorid + + + Topics + Teemad + + + Books/Hymnals + Laulikud + + + Add + Lisa + + + Edit + Muuda + + + Delete + Kustuta + + + + SongMediaItem + + CCLI Licence: + CCLI litsents: + + + Delete song? + Kas kustutada laul? + + + Song + Laul + + + Maintain the lists of authors, topics and books + Autorite, teemade ja raamatute loendi haldamine + + + Titles + Pealkirjad + + + Lyrics + Laulusõnad + + + Clear + Puhasta + + + Type: + Liik: + + + Search + Otsi + + + Authors + Autorid + + + Search: + Otsi: + + + Delete Confirmation + Kustutamise kinnitus + + + Song Maintenance + Laulude haldus + + + %s (%s) + %s (%s) + + + Delete %d songs? + Kas kustutada %d laulu? + + + + SongUsageDeleteForm + + Delete Selected Song Usage Events? + Kas kustutada valitud laulude kasutamise sündmused? + + + Are you sure you want to delete selected Song Usage data? + Kas oled kindel, et tahad kustutada valitud laulude kasutuse andmed? + + + + SongUsageDetailForm + + Output File Location + Väljundfaili asukoht + + + + SongUsagePlugin + + <b>SongUsage Plugin</b><br>This plugin records the use of songs and when they have been used during a live service + <b>Laulukasutuse plugin</b><br>See plugin salvestab laulude kasutuse koos nende suurele ekraanile näitamise kuupäevaga + + + + SongsPlugin + + Open Songs of Fellowship file + Open Songs of Fellowship fail + + + Open documents or presentations + Open document vormingus dokumendid või esitlused + + + <strong>Song Plugin</strong><br />This plugin allows songs to be managed and displayed. + <strong>Laulude plugin</strong><br />See plugin võimaldab laulude kuvamise ja haldamise. + + + + SongsTab + + Songs Mode + Laulurežiim + + + Songs + Laulud + + + Enable search as you type + Otsing sisestamise ajal + + + Display Verses on Live Tool bar + Salme kuvatakse ekraani tööriistaribal + + + + ThemeManager + + Import Theme + Teema importimine + + + Create a new theme + Uue teema loomine + + + Delete Theme + Teema kustutamine + + + Error + Viga + + + Delete a theme + Teema kustutamine + + + Edit a theme + Teema muutmine + + + Edit Theme + Kujunduse muutmine + + + Export Theme + Kujunduse eksportimine + + + You are unable to delete the default theme. + Vaikimisi kujundust pole võimalik kustutada. + + + File is not a valid theme. + See fail ei ole sobilik kujundus. + + + Theme Exists + Kujundus on juba olemas + + + Delete theme + Kustuta kujundus + + + Save Theme - (%s) + Salvesta kujundus - (%s) + + + default + vaikimisi + + + Select Theme Import File + Importimiseks kujunduse faili valimine + + + New Theme + Uus kujundus + + + Import a theme + Teema importimine + + + Export theme + Teema eksportimine + + + Make Global + Globaalseks tegemine + + + You have not selected a theme. + Sa ei ole teemat valinud. + + + A theme with this name already exists, would you like to overwrite it? + Sellise nimega teema on juba olemas, kas kirjutada üle? + + + Export a theme + Ekspordi teema + + + Theme %s is use in %s plugin + Kujundust %s kasutatakse pluginas %s + + + Theme %s is use by Service Manager + Kujundust %s kasutab teenistuste haldur + + + + ThemesTab + + Theme level + Teema tase + + + Global theme + Üleüldine tase + + + Use the global theme, overriding any themes associated with either the service or the songs. + Kasutatakse globaalset kujundust, eirates nii teenistuse kui laulu kujundust. + + + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. + Iga laulu jaoks kasutatakse andmebaasis sellele määratud kujundust. Kui laulul kujundus puudub, kasutatakse teenistuse teemat. Kui teenistusel kujundus puudub, siis kasutatakse üleüldist teemat. + + + Service level + Teenistuse tase + + + Global level + Üleüldine teema + + + Song level + Laulu tase + + + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. + Kasutatakse teenistuse kujundust, eirates laulude kujundusi. Kui teenistusel kujundust pole, kasutatakse globaalset. + + + Themes + Kujundused + + + + TopicsForm + + You need to type in a topic name! + Pead sisestama teema nime! + + + Error + Viga + + + Topic Maintenance + Teemade haldus + + + Topic name: + Teema nimi: + + + + Ui_SongImportWizard + + Song Import Wizard + Laulude importimise nõustaja + + + Welcome to the Song Import Wizard + Tere tulemast laulude importimise nõustajasse + + + This wizard will help you to import songs from a variety of formats. Click the next button below to start the process by selecting a format to import from. + See nõustaja aitab sul laule importida paljudest erinevatest formaatidest. Klõpsa all asuvat edasi nuppu, et jätkata tegevust importimise vormingu valimisega. + + + Select Import Source + Importimise allika valimine + + + Select the import format, and where to import from. + Vali importimise vorming ning kust importida. + + + Format: + Vorming: + + + OpenLyrics + OpenLyrics + + + OpenSong + OpenSong + + + CCLI + CCLI + + + CSV + CSV + + + Add Files... + Lisa faile... + + + Remove File(s) + Kaugfail(id) + + + Filename: + Failinimi: + + + Browse... + Lehitse... + + + Importing + Importimine + + + Please wait while your songs are imported. + Palun oota, kuni laule imporditakse. + + + Ready. + Valmis. + + + %p% + %p% + + + + alertsPlugin + + Show an alert message + Teate kuvamine + + + <b>Alerts Plugin</b><br>This plugin controls the displaying of alerts on the presentations screen + <b>Teadete plugin</b><br>See plugin juhib esitlusekraanile teadete kuvamist + + + &Alert + &Teade + + + + export_menu + + &Bible + &Piibel + + + + import_menu + + &Bible + &Piibel + + + &Song + &Laul + + + Import songs using the import wizard. + Laulude importimine importimise nõustajaga. + + + Songs of Fellowship (temp menu item) + Vennaskonna laulud (ajutine menüükirje) + + + Import songs from the VOLS1_2.RTF, sof3words.rtf and sof4words.rtf supplied with the music books + Laulude importimine laulikutega kaasa pandud failidest VOLS1_2.RTF, sof3words.rtf ja sof4words.rtf + + + Generic Document/Presentation Import (temp menu item) + Üldine dokumentide/esitluste importimine (ajutine menüükirje) + + + Import songs from Word/Writer/Powerpoint/Impress + Laulude importimine Wordist/Writerist/Powerpointist/Impressist + + + + self.ImportSongMenu + + Import Error + Viga importimisel + + + Error importing Songs of Fellowship file. +OpenOffice.org must be installed and you must be using an unedited copy of the RTF included with the Songs of Fellowship Music Editions + Tõrge laulude importimisel Songs of Fellowship lauliku failist. +OpenOffice.org peab olema paigaldatud ja sul peab olema muutmata koopia RTF-ist, mis on kaasa pandud Sonfs of Fellowship Music Editions laulikuga + + + + self.splash_screen + + Starting + Käivitumine + + + Splash Screen + Käivitusekraan + + + + tools_menu + + &Song Usage + &Laulude kasutus + + + &Delete recorded data + &Salvestatud andmete kustutamine + + + Delete song usage to specified date + Kustuta laulude kasutus määratud kuupäevani + + + &Extract recorded data + &Kogutud andmete salvestamine + + + Generate report on Song Usage + Laulude kasutusraporti koostamine + + + Song Usage Status + Laulude kasutuse teave + + + Start/Stop live song usage recording + Alusta/lõpeta ekraanile näidatud laulude salvestamine + + +