Merged the trunk into my tree

This commit is contained in:
Frode Woldsund 2010-06-07 00:30:11 +02:00
commit 23ac93019a
72 changed files with 3970 additions and 731 deletions

View File

@ -100,7 +100,7 @@ class OpenLP(QtGui.QApplication):
) )
else: else:
log.info(u'Openlp version %s' % app_version[u'version']) log.info(u'Openlp version %s' % app_version[u'version'])
except: except IOError:
log.exception('Error in version file.') log.exception('Error in version file.')
app_version = { app_version = {
u'full': u'1.9.0-bzr000', u'full': u'1.9.0-bzr000',

View File

@ -173,7 +173,6 @@ from settingsmanager import SettingsManager
from plugin import PluginStatus, Plugin from plugin import PluginStatus, Plugin
from pluginmanager import PluginManager from pluginmanager import PluginManager
from settingstab import SettingsTab from settingstab import SettingsTab
from mediamanageritem import MediaManagerItem
from xmlrootclass import XmlRootClass from xmlrootclass import XmlRootClass
from serviceitem import ServiceItem from serviceitem import ServiceItem
from serviceitem import ServiceItemType from serviceitem import ServiceItemType
@ -184,4 +183,6 @@ from songxmlhandler import SongXMLBuilder, SongXMLParser
from themexmlhandler import ThemeXML from themexmlhandler import ThemeXML
from renderer import Renderer from renderer import Renderer
from rendermanager import RenderManager from rendermanager import RenderManager
from mediamanageritem import MediaManagerItem
from basemodel import BaseModel
from baselistwithdnd import BaseListWithDnD from baselistwithdnd import BaseListWithDnD

View File

@ -0,0 +1,40 @@
# -*- 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()
for key in kwargs:
me.__setattr__(key, kwargs[key])
return me

View File

@ -23,15 +23,14 @@
# Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Temple Place, Suite 330, Boston, MA 02111-1307 USA #
############################################################################### ###############################################################################
import logging
import types import types
import os import os
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from openlp.core.lib.toolbar import *
from openlp.core.lib import contextMenuAction, contextMenuSeparator, \ from openlp.core.lib import contextMenuAction, contextMenuSeparator, \
SettingsManager SettingsManager, OpenLPToolbar, ServiceItem, build_icon
from serviceitem import ServiceItem
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@ -336,8 +335,8 @@ class MediaManagerItem(QtGui.QWidget):
log.info(u'New files(s) %s', unicode(files)) log.info(u'New files(s) %s', unicode(files))
if files: if files:
self.loadList(files) self.loadList(files)
dir = os.path.split(unicode(files[0]))[0] lastDir = os.path.split(unicode(files[0]))[0]
SettingsManager.set_last_dir(self.settingsSection, dir) SettingsManager.set_last_dir(self.settingsSection, lastDir)
SettingsManager.set_list(self.settingsSection, SettingsManager.set_list(self.settingsSection,
self.settingsSection, self.getFileList()) self.settingsSection, self.getFileList())

View File

@ -38,30 +38,32 @@ class PluginManager(object):
""" """
log.info(u'Plugin manager loaded') log.info(u'Plugin manager loaded')
def __init__(self, dir): def __init__(self, plugin_dir):
""" """
The constructor for the plugin manager. Passes the controllers on to The constructor for the plugin manager. Passes the controllers on to
the plugins for them to interact with via their ServiceItems. the plugins for them to interact with via their ServiceItems.
``dir`` ``plugin_dir``
The directory to search for plugins. The directory to search for plugins.
""" """
log.info(u'Plugin manager initing') log.info(u'Plugin manager initing')
if not dir in sys.path: if not plugin_dir in sys.path:
log.debug(u'Inserting %s into sys.path', dir) log.debug(u'Inserting %s into sys.path', plugin_dir)
sys.path.insert(0, dir) sys.path.insert(0, plugin_dir)
self.basepath = os.path.abspath(dir) self.basepath = os.path.abspath(plugin_dir)
log.debug(u'Base path %s ', self.basepath) log.debug(u'Base path %s ', self.basepath)
self.plugin_helpers = []
self.plugins = [] self.plugins = []
# this has to happen after the UI is sorted self.find_plugins(dir) # this has to happen after the UI is sorted
# self.find_plugins(plugin_dir)
log.info(u'Plugin manager Initialised') log.info(u'Plugin manager Initialised')
def find_plugins(self, dir, plugin_helpers): def find_plugins(self, plugin_dir, plugin_helpers):
""" """
Scan the directory ``dir`` for objects inheriting from the ``Plugin`` Scan the directory ``plugin_dir`` for objects inheriting from the
class. ``Plugin`` class.
``dir`` ``plugin_dir``
The directory to scan. The directory to scan.
``plugin_helpers`` ``plugin_helpers``
@ -69,10 +71,11 @@ class PluginManager(object):
""" """
self.plugin_helpers = plugin_helpers self.plugin_helpers = plugin_helpers
startdepth = len(os.path.abspath(dir).split(os.sep)) startdepth = len(os.path.abspath(plugin_dir).split(os.sep))
log.debug(u'find plugins %s at depth %d', unicode(dir), startdepth) log.debug(u'finding plugins in %s at depth %d',
unicode(plugin_dir), startdepth)
for root, dirs, files in os.walk(dir): for root, dirs, files in os.walk(plugin_dir):
for name in files: for name in files:
if name.endswith(u'.py') and not name.startswith(u'__'): if name.endswith(u'.py') and not name.startswith(u'__'):
path = os.path.abspath(os.path.join(root, name)) path = os.path.abspath(os.path.join(root, name))
@ -80,7 +83,7 @@ class PluginManager(object):
if thisdepth - startdepth > 2: if thisdepth - startdepth > 2:
# skip anything lower down # skip anything lower down
continue continue
modulename, pyext = os.path.splitext(path) modulename = os.path.splitext(path)[0]
prefix = os.path.commonprefix([self.basepath, path]) prefix = os.path.commonprefix([self.basepath, path])
# hack off the plugin base path # hack off the plugin base path
modulename = modulename[len(prefix) + 1:] modulename = modulename[len(prefix) + 1:]
@ -91,8 +94,8 @@ class PluginManager(object):
try: try:
__import__(modulename, globals(), locals(), []) __import__(modulename, globals(), locals(), [])
except ImportError, e: except ImportError, e:
log.exception(u'Failed to import module %s on path %s for reason %s', log.exception(u'Failed to import module %s on path %s '
modulename, path, e.args[0]) 'for reason %s', modulename, path, e.args[0])
plugin_classes = Plugin.__subclasses__() plugin_classes = Plugin.__subclasses__()
plugin_objects = [] plugin_objects = []
for p in plugin_classes: for p in plugin_classes:
@ -214,3 +217,4 @@ class PluginManager(object):
if plugin.is_active(): if plugin.is_active():
plugin.finalise() plugin.finalise()
log.info(u'Finalisation Complete for %s ' % plugin.name) log.info(u'Finalisation Complete for %s ' % plugin.name)

View File

@ -189,7 +189,8 @@ class Renderer(object):
pos = split_text.rfind(u' ') pos = split_text.rfind(u' ')
#no more spaces and we are still too long #no more spaces and we are still too long
if pos == -1: if pos == -1:
while metrics.width(split_text, -1) > line_width: while \
metrics.width(split_text, -1) > line_width:
split_text = split_text[:-1] split_text = split_text[:-1]
pos = len(split_text) pos = len(split_text)
else: else:
@ -199,12 +200,14 @@ class Renderer(object):
#if we have more text add up to 10 spaces on the front. #if we have more text add up to 10 spaces on the front.
if line and self._theme.font_main_indentation > 0: if line and self._theme.font_main_indentation > 0:
line = u'%s%s' % \ line = u'%s%s' % \
(u' '[:int(self._theme.font_main_indentation)], line) (u' '[:int(self._theme.font_main_indentation)],
line)
#Text fits in a line now #Text fits in a line now
for count, line in enumerate(split_lines): for count, line in enumerate(split_lines):
page.append(line) page.append(line)
#last but one line and only 2 lines to go or end of page #last but one line and only 2 lines to go or end of page
if (len(page) == page_length - 1 and len(split_lines) - 3 == count) or \ if (len(page) == page_length - 1 and
len(split_lines) - 3 == count) or \
len(page) == page_length: len(page) == page_length:
split_pages.append(page) split_pages.append(page)
page = [] page = []
@ -559,7 +562,8 @@ class Renderer(object):
self.painter.drawText(x, rowpos, line) self.painter.drawText(x, rowpos, line)
if self._theme.display_slideTransition: if self._theme.display_slideTransition:
# Print 2nd image with 70% weight # Print 2nd image with 70% weight
if self._theme.display_outline and outline_size != 0 and not footer: if self._theme.display_outline and outline_size != 0 and \
not footer:
path = QtGui.QPainterPath() path = QtGui.QPainterPath()
path.addText(QtCore.QPointF(x, rowpos), font, line) path.addText(QtCore.QPointF(x, rowpos), font, line)
self.painter2.setBrush(self.painter2.pen().brush()) self.painter2.setBrush(self.painter2.pen().brush())

View File

@ -181,7 +181,8 @@ class RenderManager(object):
footer.append(u'CCLI 123456') footer.append(u'CCLI 123456')
formatted = self.renderer.format_slide(verse, False) formatted = self.renderer.format_slide(verse, False)
#Only Render the first slide page returned #Only Render the first slide page returned
return self.renderer.generate_frame_from_lines(formatted[0], footer)[u'main'] return self.renderer.generate_frame_from_lines(formatted[0],
footer)[u'main']
def format_slide(self, words): def format_slide(self, words):
""" """

View File

@ -172,11 +172,12 @@ class SettingsManager(object):
path = os.path.join(path, section) path = os.path.join(path, section)
try: try:
files = os.listdir(path) files = os.listdir(path)
except: except OSError:
return [] return []
if extension: if extension:
return [file for file in files return [filename for filename in files
if extension == os.path.splitext(file)[1]] if extension == os.path.splitext(filename)[1]]
else: else:
# no filtering required # no filtering required
return files return files

View File

@ -24,8 +24,10 @@
############################################################################### ###############################################################################
import logging import logging
from xml.dom.minidom import Document from xml.dom.minidom import Document
from xml.etree.ElementTree import ElementTree, XML, dump from xml.etree.ElementTree import ElementTree, XML, dump
from xml.parsers.expat import ExpatError
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@ -136,7 +138,7 @@ class SongXMLParser(object):
try: try:
self.song_xml = ElementTree( self.song_xml = ElementTree(
element=XML(unicode(xml).encode('unicode-escape'))) element=XML(unicode(xml).encode('unicode-escape')))
except: except ExpatError:
log.exception(u'Invalid xml %s', xml) log.exception(u'Invalid xml %s', xml)
def get_verses(self): def get_verses(self):
@ -144,9 +146,9 @@ class SongXMLParser(object):
Iterates through the verses in the XML and returns a list of verses Iterates through the verses in the XML and returns a list of verses
and their attributes. and their attributes.
""" """
iter = self.song_xml.getiterator() xml_iter = self.song_xml.getiterator()
verse_list = [] verse_list = []
for element in iter: for element in xml_iter:
if element.tag == u'verse': if element.tag == u'verse':
if element.text is None: if element.text is None:
element.text = u'' element.text = u''

View File

@ -30,7 +30,7 @@ from xml.etree.ElementTree import ElementTree, XML
from openlp.core.lib import str_to_bool from openlp.core.lib import str_to_bool
blankthemexml = \ BLANK_THEME_XML = \
'''<?xml version="1.0" encoding="utf-8"?> '''<?xml version="1.0" encoding="utf-8"?>
<theme version="1.0"> <theme version="1.0">
<name>BlankStyle</name> <name>BlankStyle</name>
@ -97,7 +97,8 @@ class ThemeXML(object):
""" """
if self.background_filename and path: if self.background_filename and path:
self.theme_name = self.theme_name.rstrip().lstrip() self.theme_name = self.theme_name.rstrip().lstrip()
self.background_filename = self.background_filename.rstrip().lstrip() self.background_filename = \
self.background_filename.rstrip().lstrip()
self.background_filename = os.path.join(path, self.theme_name, self.background_filename = os.path.join(path, self.theme_name,
self.background_filename) self.background_filename)
@ -244,7 +245,8 @@ class ThemeXML(object):
background.appendChild(element) background.appendChild(element)
def add_display(self, shadow, shadow_color, outline, outline_color, def add_display(self, shadow, shadow_color, outline, outline_color,
horizontal, vertical, wrap, transition, shadow_pixel=5, outline_pixel=2): horizontal, vertical, wrap, transition, shadow_pixel=5,
outline_pixel=2):
""" """
Add a Display options. Add a Display options.
@ -349,13 +351,12 @@ class ThemeXML(object):
""" """
self.base_parse_xml() self.base_parse_xml()
self.parse_xml(xml) self.parse_xml(xml)
self.theme_filename_extended = False
def base_parse_xml(self): def base_parse_xml(self):
""" """
Pull in the blank theme XML as a starting point. Pull in the blank theme XML as a starting point.
""" """
self.parse_xml(blankthemexml) self.parse_xml(BLANK_THEME_XML)
def parse_xml(self, xml): def parse_xml(self, xml):
""" """
@ -365,9 +366,9 @@ class ThemeXML(object):
The XML string to parse. The XML string to parse.
""" """
theme_xml = ElementTree(element=XML(xml)) theme_xml = ElementTree(element=XML(xml))
iter = theme_xml.getiterator() xml_iter = theme_xml.getiterator()
master = u'' master = u''
for element in iter: for element in xml_iter:
element.text = unicode(element.text).decode('unicode-escape') element.text = unicode(element.text).decode('unicode-escape')
if element.getchildren(): if element.getchildren():
master = element.tag + u'_' master = element.tag + u'_'
@ -409,3 +410,4 @@ class ThemeXML(object):
if key[0:1] != u'_': if key[0:1] != u'_':
theme_strings.append(u'%30s: %s' % (key, getattr(self, key))) theme_strings.append(u'%30s: %s' % (key, getattr(self, key)))
return u'\n'.join(theme_strings) return u'\n'.join(theme_strings)

View File

@ -120,7 +120,7 @@ class OpenLPToolbar(QtGui.QToolBar):
try: try:
if self.icons[title]: if self.icons[title]:
return self.icons[title] return self.icons[title]
except: except NameError:
log.exception(u'getIconFromTitle - no icon for %s' % title) log.exception(u'getIconFromTitle - no icon for %s' % title)
return QtGui.QIcon() return QtGui.QIcon()

View File

@ -52,8 +52,8 @@ class XmlRootClass(object):
The root tag of the xml. The root tag of the xml.
""" """
root = ElementTree(element=XML(xml)) root = ElementTree(element=XML(xml))
iter = root.getiterator() xml_iter = root.getiterator()
for element in iter: for element in xml_iter:
if element.tag != root_tag: if element.tag != root_tag:
text = element.text text = element.text
if type(text) is NoneType: if type(text) is NoneType:
@ -76,7 +76,8 @@ class XmlRootClass(object):
# Ok, it seems to be a string. # Ok, it seems to be a string.
val = text val = text
if hasattr(self, u'post_tag_hook'): if hasattr(self, u'post_tag_hook'):
(element.tag, val) = self.post_tag_hook(element.tag, val) (element.tag, val) = \
self.post_tag_hook(element.tag, val)
setattr(self, element.tag, val) setattr(self, element.tag, val)
def __str__(self): def __str__(self):
@ -90,7 +91,8 @@ class XmlRootClass(object):
attributes = [] attributes = []
for attrib in dir(self): for attrib in dir(self):
if not attrib.startswith(u'_'): if not attrib.startswith(u'_'):
attributes.append(u'%30s : %s' % (attrib, getattr(self, attrib))) attributes.append(
u'%30s : %s' % (attrib, getattr(self, attrib)))
return u'\n'.join(attributes) return u'\n'.join(attributes)
def _get_as_string(self): def _get_as_string(self):

View File

@ -28,13 +28,13 @@ import types
from xml.etree.ElementTree import ElementTree, XML from xml.etree.ElementTree import ElementTree, XML
from PyQt4 import QtGui from PyQt4 import QtGui
DelphiColors = {"clRed":0xFF0000, DELPHI_COLORS = {"clRed":0xFF0000,
"clBlue":0x0000FF, "clBlue":0x0000FF,
"clYellow":0xFFFF00, "clYellow":0xFFFF00,
"clBlack":0x000000, "clBlack":0x000000,
"clWhite":0xFFFFFF} "clWhite":0xFFFFFF}
blankstylexml = \ BLANK_STYLE_XML = \
'''<?xml version="1.0" encoding="iso-8859-1"?> '''<?xml version="1.0" encoding="iso-8859-1"?>
<Theme> <Theme>
<Name>BlankStyle</Name> <Name>BlankStyle</Name>
@ -97,7 +97,7 @@ class Theme(object):
1 - lyrics 1 - lyrics
""" """
# init to defaults # init to defaults
self._set_from_XML(blankstylexml) self._set_from_XML(BLANK_STYLE_XML)
self._set_from_XML(xml) self._set_from_XML(xml)
def _get_as_string(self): def _get_as_string(self):
@ -115,26 +115,27 @@ class Theme(object):
for element in iter: for element in iter:
delphiColorChange = False delphiColorChange = False
if element.tag != u'Theme': if element.tag != u'Theme':
t = element.text element_text = element.text
val = 0 val = 0
# easy! # easy!
if type(t) == type(None): if element_text is None:
val = t val = element_text
# strings need special handling to sort the colours out # strings need special handling to sort the colours out
if type(t) is types.StringType or type(t) is types.UnicodeType: if type(element_text) is types.StringType or \
if t[0] == u'$': # might be a hex number type(element_text) is types.UnicodeType:
if element_text[0] == u'$': # might be a hex number
try: try:
val = int(t[1:], 16) val = int(element_text[1:], 16)
except ValueError: # nope except ValueError: # nope
pass pass
elif DelphiColors.has_key(t): elif DELPHI_COLORS.has_key(element_text):
val = DelphiColors[t] val = DELPHI_COLORS[element_text]
delphiColorChange = True delphiColorChange = True
else: else:
try: try:
val = int(t) val = int(element_text)
except ValueError: except ValueError:
val = t val = element_text
if (element.tag.find(u'Color') > 0 or if (element.tag.find(u'Color') > 0 or
(element.tag.find(u'BackgroundParameter') == 0 and (element.tag.find(u'BackgroundParameter') == 0 and
type(val) == type(0))): type(val) == type(0))):

View File

@ -132,7 +132,8 @@ class Ui_AboutDialog(object):
u'consider contributing by using the button below.' u'consider contributing by using the button below.'
)) ))
self.AboutNotebook.setTabText( self.AboutNotebook.setTabText(
self.AboutNotebook.indexOf(self.AboutTab),
self.AboutNotebook.indexOf(self.AboutTab),
translate(u'AboutForm', u'About')) translate(u'AboutForm', u'About'))
self.CreditsTextEdit.setPlainText(translate(u'AboutForm', self.CreditsTextEdit.setPlainText(translate(u'AboutForm',
u'Project Lead\n' u'Project Lead\n'

View File

@ -58,5 +58,6 @@ class AboutForm(QtGui.QDialog, Ui_AboutDialog):
Launch a web browser and go to the contribute page on the site. Launch a web browser and go to the contribute page on the site.
""" """
import webbrowser import webbrowser
url = u'http://www.openlp.org/en/documentation/introduction/contributing.html' url = u'http://www.openlp.org/en/documentation/introduction/' \
+ u'contributing.html'
webbrowser.open_new(url) webbrowser.open_new(url)

View File

@ -24,8 +24,8 @@
############################################################################### ###############################################################################
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from openlp.core.lib import build_icon
from openlp.core.lib import translate from openlp.core.lib import build_icon, translate
class Ui_AmendThemeDialog(object): class Ui_AmendThemeDialog(object):
def setupUi(self, AmendThemeDialog): def setupUi(self, AmendThemeDialog):
@ -68,45 +68,56 @@ class Ui_AmendThemeDialog(object):
self.BackgroundLayout.setObjectName(u'BackgroundLayout') self.BackgroundLayout.setObjectName(u'BackgroundLayout')
self.BackgroundLabel = QtGui.QLabel(self.BackgroundTab) self.BackgroundLabel = QtGui.QLabel(self.BackgroundTab)
self.BackgroundLabel.setObjectName(u'BackgroundLabel') self.BackgroundLabel.setObjectName(u'BackgroundLabel')
self.BackgroundLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.BackgroundLabel) self.BackgroundLayout.setWidget(0, QtGui.QFormLayout.LabelRole,
self.BackgroundLabel)
self.BackgroundComboBox = QtGui.QComboBox(self.BackgroundTab) self.BackgroundComboBox = QtGui.QComboBox(self.BackgroundTab)
self.BackgroundComboBox.setObjectName(u'BackgroundComboBox') self.BackgroundComboBox.setObjectName(u'BackgroundComboBox')
self.BackgroundComboBox.addItem(QtCore.QString()) self.BackgroundComboBox.addItem(QtCore.QString())
self.BackgroundComboBox.addItem(QtCore.QString()) self.BackgroundComboBox.addItem(QtCore.QString())
self.BackgroundLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.BackgroundComboBox) self.BackgroundLayout.setWidget(0, QtGui.QFormLayout.FieldRole,
self.BackgroundComboBox)
self.BackgroundTypeLabel = QtGui.QLabel(self.BackgroundTab) self.BackgroundTypeLabel = QtGui.QLabel(self.BackgroundTab)
self.BackgroundTypeLabel.setObjectName(u'BackgroundTypeLabel') self.BackgroundTypeLabel.setObjectName(u'BackgroundTypeLabel')
self.BackgroundLayout.setWidget(1, QtGui.QFormLayout.LabelRole, self.BackgroundTypeLabel) self.BackgroundLayout.setWidget(1, QtGui.QFormLayout.LabelRole,
self.BackgroundTypeLabel)
self.BackgroundTypeComboBox = QtGui.QComboBox(self.BackgroundTab) self.BackgroundTypeComboBox = QtGui.QComboBox(self.BackgroundTab)
self.BackgroundTypeComboBox.setObjectName(u'BackgroundTypeComboBox') self.BackgroundTypeComboBox.setObjectName(u'BackgroundTypeComboBox')
self.BackgroundTypeComboBox.addItem(QtCore.QString()) self.BackgroundTypeComboBox.addItem(QtCore.QString())
self.BackgroundTypeComboBox.addItem(QtCore.QString()) self.BackgroundTypeComboBox.addItem(QtCore.QString())
self.BackgroundTypeComboBox.addItem(QtCore.QString()) self.BackgroundTypeComboBox.addItem(QtCore.QString())
self.BackgroundLayout.setWidget(1, QtGui.QFormLayout.FieldRole, self.BackgroundTypeComboBox) self.BackgroundLayout.setWidget(1, QtGui.QFormLayout.FieldRole,
self.BackgroundTypeComboBox)
self.Color1Label = QtGui.QLabel(self.BackgroundTab) self.Color1Label = QtGui.QLabel(self.BackgroundTab)
self.Color1Label.setObjectName(u'Color1Label') self.Color1Label.setObjectName(u'Color1Label')
self.BackgroundLayout.setWidget(2, QtGui.QFormLayout.LabelRole, self.Color1Label) self.BackgroundLayout.setWidget(2, QtGui.QFormLayout.LabelRole,
self.Color1Label)
self.Color1PushButton = QtGui.QPushButton(self.BackgroundTab) self.Color1PushButton = QtGui.QPushButton(self.BackgroundTab)
self.Color1PushButton.setObjectName(u'Color1PushButton') self.Color1PushButton.setObjectName(u'Color1PushButton')
self.BackgroundLayout.setWidget(2, QtGui.QFormLayout.FieldRole, self.Color1PushButton) self.BackgroundLayout.setWidget(2, QtGui.QFormLayout.FieldRole,
self.Color1PushButton)
self.Color2Label = QtGui.QLabel(self.BackgroundTab) self.Color2Label = QtGui.QLabel(self.BackgroundTab)
self.Color2Label.setObjectName(u'Color2Label') self.Color2Label.setObjectName(u'Color2Label')
self.BackgroundLayout.setWidget(3, QtGui.QFormLayout.LabelRole, self.Color2Label) self.BackgroundLayout.setWidget(3, QtGui.QFormLayout.LabelRole,
self.Color2Label)
self.Color2PushButton = QtGui.QPushButton(self.BackgroundTab) self.Color2PushButton = QtGui.QPushButton(self.BackgroundTab)
self.Color2PushButton.setObjectName(u'Color2PushButton') self.Color2PushButton.setObjectName(u'Color2PushButton')
self.BackgroundLayout.setWidget(3, QtGui.QFormLayout.FieldRole, self.Color2PushButton) self.BackgroundLayout.setWidget(3, QtGui.QFormLayout.FieldRole,
self.Color2PushButton)
self.ImageLabel = QtGui.QLabel(self.BackgroundTab) self.ImageLabel = QtGui.QLabel(self.BackgroundTab)
self.ImageLabel.setObjectName(u'ImageLabel') self.ImageLabel.setObjectName(u'ImageLabel')
self.BackgroundLayout.setWidget(4, QtGui.QFormLayout.LabelRole, self.ImageLabel) self.BackgroundLayout.setWidget(4, QtGui.QFormLayout.LabelRole,
self.ImageLabel)
self.GradientLabel = QtGui.QLabel(self.BackgroundTab) self.GradientLabel = QtGui.QLabel(self.BackgroundTab)
self.GradientLabel.setObjectName(u'GradientLabel') self.GradientLabel.setObjectName(u'GradientLabel')
self.BackgroundLayout.setWidget(6, QtGui.QFormLayout.LabelRole, self.GradientLabel) self.BackgroundLayout.setWidget(6, QtGui.QFormLayout.LabelRole,
self.GradientLabel)
self.GradientComboBox = QtGui.QComboBox(self.BackgroundTab) self.GradientComboBox = QtGui.QComboBox(self.BackgroundTab)
self.GradientComboBox.setObjectName(u'GradientComboBox') self.GradientComboBox.setObjectName(u'GradientComboBox')
self.GradientComboBox.addItem(QtCore.QString()) self.GradientComboBox.addItem(QtCore.QString())
self.GradientComboBox.addItem(QtCore.QString()) self.GradientComboBox.addItem(QtCore.QString())
self.GradientComboBox.addItem(QtCore.QString()) self.GradientComboBox.addItem(QtCore.QString())
self.BackgroundLayout.setWidget(6, QtGui.QFormLayout.FieldRole, self.GradientComboBox) self.BackgroundLayout.setWidget(6, QtGui.QFormLayout.FieldRole,
self.GradientComboBox)
self.ImageFilenameWidget = QtGui.QWidget(self.BackgroundTab) self.ImageFilenameWidget = QtGui.QWidget(self.BackgroundTab)
self.ImageFilenameWidget.setObjectName(u'ImageFilenameWidget') self.ImageFilenameWidget.setObjectName(u'ImageFilenameWidget')
self.horizontalLayout_2 = QtGui.QHBoxLayout(self.ImageFilenameWidget) self.horizontalLayout_2 = QtGui.QHBoxLayout(self.ImageFilenameWidget)
@ -121,7 +132,8 @@ class Ui_AmendThemeDialog(object):
self.ImageToolButton.setIcon(icon1) self.ImageToolButton.setIcon(icon1)
self.ImageToolButton.setObjectName(u'ImageToolButton') self.ImageToolButton.setObjectName(u'ImageToolButton')
self.horizontalLayout_2.addWidget(self.ImageToolButton) self.horizontalLayout_2.addWidget(self.ImageToolButton)
self.BackgroundLayout.setWidget(4, QtGui.QFormLayout.FieldRole, self.ImageFilenameWidget) self.BackgroundLayout.setWidget(4, QtGui.QFormLayout.FieldRole,
self.ImageFilenameWidget)
self.ThemeTabWidget.addTab(self.BackgroundTab, u'') self.ThemeTabWidget.addTab(self.BackgroundTab, u'')
self.FontMainTab = QtGui.QWidget() self.FontMainTab = QtGui.QWidget()
self.FontMainTab.setObjectName(u'FontMainTab') self.FontMainTab.setObjectName(u'FontMainTab')
@ -138,65 +150,88 @@ class Ui_AmendThemeDialog(object):
self.FontMainGroupBox = QtGui.QGroupBox(self.MainLeftWidget) self.FontMainGroupBox = QtGui.QGroupBox(self.MainLeftWidget)
self.FontMainGroupBox.setObjectName(u'FontMainGroupBox') self.FontMainGroupBox.setObjectName(u'FontMainGroupBox')
self.MainFontLayout = QtGui.QFormLayout(self.FontMainGroupBox) self.MainFontLayout = QtGui.QFormLayout(self.FontMainGroupBox)
self.MainFontLayout.setFormAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter) self.MainFontLayout.setFormAlignment(QtCore.Qt.AlignLeading |
QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter)
self.MainFontLayout.setMargin(8) self.MainFontLayout.setMargin(8)
self.MainFontLayout.setSpacing(8) self.MainFontLayout.setSpacing(8)
self.MainFontLayout.setObjectName(u'MainFontLayout') self.MainFontLayout.setObjectName(u'MainFontLayout')
self.FontMainlabel = QtGui.QLabel(self.FontMainGroupBox) self.FontMainlabel = QtGui.QLabel(self.FontMainGroupBox)
self.FontMainlabel.setObjectName(u'FontMainlabel') self.FontMainlabel.setObjectName(u'FontMainlabel')
self.MainFontLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.FontMainlabel) self.MainFontLayout.setWidget(0, QtGui.QFormLayout.LabelRole,
self.FontMainlabel)
self.FontMainComboBox = QtGui.QFontComboBox(self.FontMainGroupBox) self.FontMainComboBox = QtGui.QFontComboBox(self.FontMainGroupBox)
self.FontMainComboBox.setObjectName(u'FontMainComboBox') self.FontMainComboBox.setObjectName(u'FontMainComboBox')
self.MainFontLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.FontMainComboBox) self.MainFontLayout.setWidget(0, QtGui.QFormLayout.FieldRole,
self.FontMainComboBox)
self.FontMainColorLabel = QtGui.QLabel(self.FontMainGroupBox) self.FontMainColorLabel = QtGui.QLabel(self.FontMainGroupBox)
self.FontMainColorLabel.setObjectName(u'FontMainColorLabel') self.FontMainColorLabel.setObjectName(u'FontMainColorLabel')
self.MainFontLayout.setWidget(1, QtGui.QFormLayout.LabelRole, self.FontMainColorLabel) self.MainFontLayout.setWidget(1, QtGui.QFormLayout.LabelRole,
self.FontMainColorLabel)
self.FontMainColorPushButton = QtGui.QPushButton(self.FontMainGroupBox) self.FontMainColorPushButton = QtGui.QPushButton(self.FontMainGroupBox)
self.FontMainColorPushButton.setObjectName(u'FontMainColorPushButton') self.FontMainColorPushButton.setObjectName(u'FontMainColorPushButton')
self.MainFontLayout.setWidget(1, QtGui.QFormLayout.FieldRole, self.FontMainColorPushButton) self.MainFontLayout.setWidget(1, QtGui.QFormLayout.FieldRole,
self.FontMainColorPushButton)
self.FontMainSize = QtGui.QLabel(self.FontMainGroupBox) self.FontMainSize = QtGui.QLabel(self.FontMainGroupBox)
self.FontMainSize.setObjectName(u'FontMainSize') self.FontMainSize.setObjectName(u'FontMainSize')
self.MainFontLayout.setWidget(2, QtGui.QFormLayout.LabelRole, self.FontMainSize) self.MainFontLayout.setWidget(2, QtGui.QFormLayout.LabelRole,
self.FontMainSize)
self.FontMainSizeSpinBox = QtGui.QSpinBox(self.FontMainGroupBox) self.FontMainSizeSpinBox = QtGui.QSpinBox(self.FontMainGroupBox)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum,
QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0) sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0) sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.FontMainSizeSpinBox.sizePolicy().hasHeightForWidth()) sizePolicy.setHeightForWidth(
self.FontMainSizeSpinBox.sizePolicy().hasHeightForWidth())
self.FontMainSizeSpinBox.setSizePolicy(sizePolicy) self.FontMainSizeSpinBox.setSizePolicy(sizePolicy)
self.FontMainSizeSpinBox.setMinimumSize(QtCore.QSize(70, 0)) self.FontMainSizeSpinBox.setMinimumSize(QtCore.QSize(70, 0))
self.FontMainSizeSpinBox.setProperty(u'value', QtCore.QVariant(16)) self.FontMainSizeSpinBox.setProperty(u'value', QtCore.QVariant(16))
self.FontMainSizeSpinBox.setMaximum(999) self.FontMainSizeSpinBox.setMaximum(999)
self.FontMainSizeSpinBox.setObjectName(u'FontMainSizeSpinBox') self.FontMainSizeSpinBox.setObjectName(u'FontMainSizeSpinBox')
self.MainFontLayout.setWidget(2, QtGui.QFormLayout.FieldRole, self.FontMainSizeSpinBox) self.MainFontLayout.setWidget(2, QtGui.QFormLayout.FieldRole,
self.FontMainSizeSpinBox)
self.FontMainWeightComboBox = QtGui.QComboBox(self.FontMainGroupBox) self.FontMainWeightComboBox = QtGui.QComboBox(self.FontMainGroupBox)
self.FontMainWeightComboBox.setObjectName("FontMainWeightComboBox") self.FontMainWeightComboBox.setObjectName(u'FontMainWeightComboBox')
self.FontMainWeightComboBox.addItem(QtCore.QString()) self.FontMainWeightComboBox.addItem(QtCore.QString())
self.FontMainWeightComboBox.addItem(QtCore.QString()) self.FontMainWeightComboBox.addItem(QtCore.QString())
self.FontMainWeightComboBox.addItem(QtCore.QString()) self.FontMainWeightComboBox.addItem(QtCore.QString())
self.FontMainWeightComboBox.addItem(QtCore.QString()) self.FontMainWeightComboBox.addItem(QtCore.QString())
self.MainFontLayout.setWidget(3, QtGui.QFormLayout.FieldRole, self.FontMainWeightComboBox) self.MainFontLayout.setWidget(3, QtGui.QFormLayout.FieldRole,
self.FontMainWeightComboBox)
self.FontMainWeightLabel = QtGui.QLabel(self.FontMainGroupBox) self.FontMainWeightLabel = QtGui.QLabel(self.FontMainGroupBox)
self.FontMainWeightLabel.setObjectName("FontMainWeightLabel") self.FontMainWeightLabel.setObjectName(u'FontMainWeightLabel')
self.MainFontLayout.setWidget(3, QtGui.QFormLayout.LabelRole, self.FontMainWeightLabel) self.MainFontLayout.setWidget(3, QtGui.QFormLayout.LabelRole,
self.FontMainWeightLabel)
self.MainLeftLayout.addWidget(self.FontMainGroupBox) self.MainLeftLayout.addWidget(self.FontMainGroupBox)
self.FontMainWrapLineAdjustmentLabel = QtGui.QLabel(self.FontMainGroupBox) self.FontMainWrapLineAdjustmentLabel = QtGui.QLabel(
self.FontMainWrapLineAdjustmentLabel.setObjectName("FontMainWrapLineAdjustmentLabel") self.FontMainGroupBox)
self.MainFontLayout.setWidget(4, QtGui.QFormLayout.LabelRole, self.FontMainWrapLineAdjustmentLabel) self.FontMainWrapLineAdjustmentLabel.setObjectName(
self.FontMainLineAdjustmentSpinBox = QtGui.QSpinBox(self.FontMainGroupBox) u'FontMainWrapLineAdjustmentLabel')
self.FontMainLineAdjustmentSpinBox.setObjectName("FontMainLineAdjustmentSpinBox") self.MainFontLayout.setWidget(4, QtGui.QFormLayout.LabelRole,
self.FontMainWrapLineAdjustmentLabel)
self.FontMainLineAdjustmentSpinBox = QtGui.QSpinBox(
self.FontMainGroupBox)
self.FontMainLineAdjustmentSpinBox.setObjectName(
u'FontMainLineAdjustmentSpinBox')
self.FontMainLineAdjustmentSpinBox.setMinimum(-99) self.FontMainLineAdjustmentSpinBox.setMinimum(-99)
self.MainFontLayout.setWidget(4, QtGui.QFormLayout.FieldRole, self.FontMainLineAdjustmentSpinBox) self.MainFontLayout.setWidget(4, QtGui.QFormLayout.FieldRole,
self.FontMainLineAdjustmentSpinBox)
self.FontMainWrapIndentationLabel = QtGui.QLabel(self.FontMainGroupBox) self.FontMainWrapIndentationLabel = QtGui.QLabel(self.FontMainGroupBox)
self.FontMainWrapIndentationLabel.setObjectName("FontMainWrapIndentationLabel") self.FontMainWrapIndentationLabel.setObjectName(
self.MainFontLayout.setWidget(5, QtGui.QFormLayout.LabelRole, self.FontMainWrapIndentationLabel) u'FontMainWrapIndentationLabel')
self.MainFontLayout.setWidget(5, QtGui.QFormLayout.LabelRole,
self.FontMainWrapIndentationLabel)
self.FontMainLineSpacingSpinBox = QtGui.QSpinBox(self.FontMainGroupBox) self.FontMainLineSpacingSpinBox = QtGui.QSpinBox(self.FontMainGroupBox)
self.FontMainLineSpacingSpinBox.setObjectName("FontMainLineSpacingSpinBox") self.FontMainLineSpacingSpinBox.setObjectName(
u'FontMainLineSpacingSpinBox')
self.FontMainLineSpacingSpinBox.setMaximum(10) self.FontMainLineSpacingSpinBox.setMaximum(10)
self.MainFontLayout.setWidget(5, QtGui.QFormLayout.FieldRole, self.FontMainLineSpacingSpinBox) self.MainFontLayout.setWidget(5, QtGui.QFormLayout.FieldRole,
self.FontMainLineSpacingSpinBox)
self.FontMainLinesPageLabel = QtGui.QLabel(self.FontMainGroupBox) self.FontMainLinesPageLabel = QtGui.QLabel(self.FontMainGroupBox)
self.FontMainLinesPageLabel.setObjectName("FontMainLinesPageLabel") self.FontMainLinesPageLabel.setObjectName(u'FontMainLinesPageLabel')
self.MainFontLayout.setWidget(6, QtGui.QFormLayout.LabelRole, self.FontMainLinesPageLabel) self.MainFontLayout.setWidget(6, QtGui.QFormLayout.LabelRole,
spacerItem1 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.FontMainLinesPageLabel)
spacerItem1 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum,
QtGui.QSizePolicy.Expanding)
self.MainLeftLayout.addItem(spacerItem1) self.MainLeftLayout.addItem(spacerItem1)
self.FontMainLayout.addWidget(self.MainLeftWidget) self.FontMainLayout.addWidget(self.MainLeftWidget)
self.MainRightWidget = QtGui.QWidget(self.FontMainTab) self.MainRightWidget = QtGui.QWidget(self.FontMainTab)
@ -213,66 +248,86 @@ class Ui_AmendThemeDialog(object):
self.MainLocationLayout.setObjectName(u'MainLocationLayout') self.MainLocationLayout.setObjectName(u'MainLocationLayout')
self.DefaultLocationLabel = QtGui.QLabel(self.MainLocationGroupBox) self.DefaultLocationLabel = QtGui.QLabel(self.MainLocationGroupBox)
self.DefaultLocationLabel.setObjectName(u'DefaultLocationLabel') self.DefaultLocationLabel.setObjectName(u'DefaultLocationLabel')
self.MainLocationLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.DefaultLocationLabel) self.MainLocationLayout.setWidget(0, QtGui.QFormLayout.LabelRole,
self.FontMainDefaultCheckBox = QtGui.QCheckBox(self.MainLocationGroupBox) self.DefaultLocationLabel)
self.FontMainDefaultCheckBox = QtGui.QCheckBox(
self.MainLocationGroupBox)
self.FontMainDefaultCheckBox.setTristate(False) self.FontMainDefaultCheckBox.setTristate(False)
self.FontMainDefaultCheckBox.setObjectName(u'FontMainDefaultCheckBox') self.FontMainDefaultCheckBox.setObjectName(u'FontMainDefaultCheckBox')
self.MainLocationLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.FontMainDefaultCheckBox) self.MainLocationLayout.setWidget(0, QtGui.QFormLayout.FieldRole,
self.FontMainDefaultCheckBox)
self.FontMainXLabel = QtGui.QLabel(self.MainLocationGroupBox) self.FontMainXLabel = QtGui.QLabel(self.MainLocationGroupBox)
self.FontMainXLabel.setObjectName(u'FontMainXLabel') self.FontMainXLabel.setObjectName(u'FontMainXLabel')
self.MainLocationLayout.setWidget(1, QtGui.QFormLayout.LabelRole, self.FontMainXLabel) self.MainLocationLayout.setWidget(1, QtGui.QFormLayout.LabelRole,
self.FontMainXLabel)
self.FontMainYLabel = QtGui.QLabel(self.MainLocationGroupBox) self.FontMainYLabel = QtGui.QLabel(self.MainLocationGroupBox)
self.FontMainYLabel.setObjectName(u'FontMainYLabel') self.FontMainYLabel.setObjectName(u'FontMainYLabel')
self.MainLocationLayout.setWidget(2, QtGui.QFormLayout.LabelRole, self.FontMainYLabel) self.MainLocationLayout.setWidget(2, QtGui.QFormLayout.LabelRole,
self.FontMainYLabel)
self.FontMainWidthLabel = QtGui.QLabel(self.MainLocationGroupBox) self.FontMainWidthLabel = QtGui.QLabel(self.MainLocationGroupBox)
self.FontMainWidthLabel.setObjectName(u'FontMainWidthLabel') self.FontMainWidthLabel.setObjectName(u'FontMainWidthLabel')
self.MainLocationLayout.setWidget(3, QtGui.QFormLayout.LabelRole, self.FontMainWidthLabel) self.MainLocationLayout.setWidget(3, QtGui.QFormLayout.LabelRole,
self.FontMainWidthLabel)
self.FontMainHeightLabel = QtGui.QLabel(self.MainLocationGroupBox) self.FontMainHeightLabel = QtGui.QLabel(self.MainLocationGroupBox)
self.FontMainHeightLabel.setObjectName(u'FontMainHeightLabel') self.FontMainHeightLabel.setObjectName(u'FontMainHeightLabel')
self.MainLocationLayout.setWidget(4, QtGui.QFormLayout.LabelRole, self.FontMainHeightLabel) self.MainLocationLayout.setWidget(4, QtGui.QFormLayout.LabelRole,
self.FontMainHeightLabel)
self.FontMainXSpinBox = QtGui.QSpinBox(self.MainLocationGroupBox) self.FontMainXSpinBox = QtGui.QSpinBox(self.MainLocationGroupBox)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum,
QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0) sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0) sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.FontMainXSpinBox.sizePolicy().hasHeightForWidth()) sizePolicy.setHeightForWidth(
self.FontMainXSpinBox.sizePolicy().hasHeightForWidth())
self.FontMainXSpinBox.setSizePolicy(sizePolicy) self.FontMainXSpinBox.setSizePolicy(sizePolicy)
self.FontMainXSpinBox.setMinimumSize(QtCore.QSize(78, 0)) self.FontMainXSpinBox.setMinimumSize(QtCore.QSize(78, 0))
self.FontMainXSpinBox.setProperty(u'value', QtCore.QVariant(0)) self.FontMainXSpinBox.setProperty(u'value', QtCore.QVariant(0))
self.FontMainXSpinBox.setMaximum(9999) self.FontMainXSpinBox.setMaximum(9999)
self.FontMainXSpinBox.setObjectName(u'FontMainXSpinBox') self.FontMainXSpinBox.setObjectName(u'FontMainXSpinBox')
self.MainLocationLayout.setWidget(1, QtGui.QFormLayout.FieldRole, self.FontMainXSpinBox) self.MainLocationLayout.setWidget(1, QtGui.QFormLayout.FieldRole,
self.FontMainXSpinBox)
self.FontMainYSpinBox = QtGui.QSpinBox(self.MainLocationGroupBox) self.FontMainYSpinBox = QtGui.QSpinBox(self.MainLocationGroupBox)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum,
QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0) sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0) sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.FontMainYSpinBox.sizePolicy().hasHeightForWidth()) sizePolicy.setHeightForWidth(
self.FontMainYSpinBox.sizePolicy().hasHeightForWidth())
self.FontMainYSpinBox.setSizePolicy(sizePolicy) self.FontMainYSpinBox.setSizePolicy(sizePolicy)
self.FontMainYSpinBox.setMinimumSize(QtCore.QSize(78, 0)) self.FontMainYSpinBox.setMinimumSize(QtCore.QSize(78, 0))
self.FontMainYSpinBox.setMaximum(9999) self.FontMainYSpinBox.setMaximum(9999)
self.FontMainYSpinBox.setObjectName(u'FontMainYSpinBox') self.FontMainYSpinBox.setObjectName(u'FontMainYSpinBox')
self.MainLocationLayout.setWidget(2, QtGui.QFormLayout.FieldRole, self.FontMainYSpinBox) self.MainLocationLayout.setWidget(2, QtGui.QFormLayout.FieldRole,
self.FontMainYSpinBox)
self.FontMainWidthSpinBox = QtGui.QSpinBox(self.MainLocationGroupBox) self.FontMainWidthSpinBox = QtGui.QSpinBox(self.MainLocationGroupBox)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum,
QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0) sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0) sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.FontMainWidthSpinBox.sizePolicy().hasHeightForWidth()) sizePolicy.setHeightForWidth(
self.FontMainWidthSpinBox.sizePolicy().hasHeightForWidth())
self.FontMainWidthSpinBox.setSizePolicy(sizePolicy) self.FontMainWidthSpinBox.setSizePolicy(sizePolicy)
self.FontMainWidthSpinBox.setMinimumSize(QtCore.QSize(78, 0)) self.FontMainWidthSpinBox.setMinimumSize(QtCore.QSize(78, 0))
self.FontMainWidthSpinBox.setMaximum(9999) self.FontMainWidthSpinBox.setMaximum(9999)
self.FontMainWidthSpinBox.setObjectName(u'FontMainWidthSpinBox') self.FontMainWidthSpinBox.setObjectName(u'FontMainWidthSpinBox')
self.MainLocationLayout.setWidget(3, QtGui.QFormLayout.FieldRole, self.FontMainWidthSpinBox) self.MainLocationLayout.setWidget(3, QtGui.QFormLayout.FieldRole,
self.FontMainWidthSpinBox)
self.FontMainHeightSpinBox = QtGui.QSpinBox(self.MainLocationGroupBox) self.FontMainHeightSpinBox = QtGui.QSpinBox(self.MainLocationGroupBox)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum,
QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0) sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0) sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.FontMainHeightSpinBox.sizePolicy().hasHeightForWidth()) sizePolicy.setHeightForWidth(
self.FontMainHeightSpinBox.sizePolicy().hasHeightForWidth())
self.FontMainHeightSpinBox.setSizePolicy(sizePolicy) self.FontMainHeightSpinBox.setSizePolicy(sizePolicy)
self.FontMainHeightSpinBox.setMinimumSize(QtCore.QSize(78, 0)) self.FontMainHeightSpinBox.setMinimumSize(QtCore.QSize(78, 0))
self.FontMainHeightSpinBox.setMaximum(9999) self.FontMainHeightSpinBox.setMaximum(9999)
self.FontMainHeightSpinBox.setObjectName(u'FontMainHeightSpinBox') self.FontMainHeightSpinBox.setObjectName(u'FontMainHeightSpinBox')
self.MainLocationLayout.setWidget(4, QtGui.QFormLayout.FieldRole, self.FontMainHeightSpinBox) self.MainLocationLayout.setWidget(4, QtGui.QFormLayout.FieldRole,
self.FontMainHeightSpinBox)
self.MainRightLayout.addWidget(self.MainLocationGroupBox) self.MainRightLayout.addWidget(self.MainLocationGroupBox)
spacerItem2 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) spacerItem2 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum,
QtGui.QSizePolicy.Expanding)
self.MainRightLayout.addItem(spacerItem2) self.MainRightLayout.addItem(spacerItem2)
self.FontMainLayout.addWidget(self.MainRightWidget) self.FontMainLayout.addWidget(self.MainRightWidget)
self.ThemeTabWidget.addTab(self.FontMainTab, u'') self.ThemeTabWidget.addTab(self.FontMainTab, u'')
@ -291,49 +346,64 @@ class Ui_AmendThemeDialog(object):
self.FooterFontGroupBox = QtGui.QGroupBox(self.FooterLeftWidget) self.FooterFontGroupBox = QtGui.QGroupBox(self.FooterLeftWidget)
self.FooterFontGroupBox.setObjectName(u'FooterFontGroupBox') self.FooterFontGroupBox.setObjectName(u'FooterFontGroupBox')
self.FooterFontLayout = QtGui.QFormLayout(self.FooterFontGroupBox) self.FooterFontLayout = QtGui.QFormLayout(self.FooterFontGroupBox)
self.FooterFontLayout.setFieldGrowthPolicy(QtGui.QFormLayout.ExpandingFieldsGrow) self.FooterFontLayout.setFieldGrowthPolicy(
self.FooterFontLayout.setFormAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter) QtGui.QFormLayout.ExpandingFieldsGrow)
self.FooterFontLayout.setFormAlignment(QtCore.Qt.AlignLeading |
QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter)
self.FooterFontLayout.setMargin(8) self.FooterFontLayout.setMargin(8)
self.FooterFontLayout.setSpacing(8) self.FooterFontLayout.setSpacing(8)
self.FooterFontLayout.setObjectName(u'FooterFontLayout') self.FooterFontLayout.setObjectName(u'FooterFontLayout')
self.FontFooterLabel = QtGui.QLabel(self.FooterFontGroupBox) self.FontFooterLabel = QtGui.QLabel(self.FooterFontGroupBox)
self.FontFooterLabel.setObjectName(u'FontFooterLabel') self.FontFooterLabel.setObjectName(u'FontFooterLabel')
self.FooterFontLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.FontFooterLabel) self.FooterFontLayout.setWidget(0, QtGui.QFormLayout.LabelRole,
self.FontFooterLabel)
self.FontFooterComboBox = QtGui.QFontComboBox(self.FooterFontGroupBox) self.FontFooterComboBox = QtGui.QFontComboBox(self.FooterFontGroupBox)
self.FontFooterComboBox.setObjectName(u'FontFooterComboBox') self.FontFooterComboBox.setObjectName(u'FontFooterComboBox')
self.FooterFontLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.FontFooterComboBox) self.FooterFontLayout.setWidget(0, QtGui.QFormLayout.FieldRole,
self.FontFooterComboBox)
self.FontFooterColorLabel = QtGui.QLabel(self.FooterFontGroupBox) self.FontFooterColorLabel = QtGui.QLabel(self.FooterFontGroupBox)
self.FontFooterColorLabel.setObjectName(u'FontFooterColorLabel') self.FontFooterColorLabel.setObjectName(u'FontFooterColorLabel')
self.FooterFontLayout.setWidget(1, QtGui.QFormLayout.LabelRole, self.FontFooterColorLabel) self.FooterFontLayout.setWidget(1, QtGui.QFormLayout.LabelRole,
self.FontFooterColorPushButton = QtGui.QPushButton(self.FooterFontGroupBox) self.FontFooterColorLabel)
self.FontFooterColorPushButton.setObjectName(u'FontFooterColorPushButton') self.FontFooterColorPushButton = QtGui.QPushButton(
self.FooterFontLayout.setWidget(1, QtGui.QFormLayout.FieldRole, self.FontFooterColorPushButton) self.FooterFontGroupBox)
self.FontFooterColorPushButton.setObjectName(
u'FontFooterColorPushButton')
self.FooterFontLayout.setWidget(1, QtGui.QFormLayout.FieldRole,
self.FontFooterColorPushButton)
self.FontFooterSizeLabel = QtGui.QLabel(self.FooterFontGroupBox) self.FontFooterSizeLabel = QtGui.QLabel(self.FooterFontGroupBox)
self.FontFooterSizeLabel.setObjectName(u'FontFooterSizeLabel') self.FontFooterSizeLabel.setObjectName(u'FontFooterSizeLabel')
self.FooterFontLayout.setWidget(2, QtGui.QFormLayout.LabelRole, self.FontFooterSizeLabel) self.FooterFontLayout.setWidget(2, QtGui.QFormLayout.LabelRole,
self.FontFooterSizeLabel)
self.FontFooterSizeSpinBox = QtGui.QSpinBox(self.FooterFontGroupBox) self.FontFooterSizeSpinBox = QtGui.QSpinBox(self.FooterFontGroupBox)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum,
QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0) sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0) sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.FontFooterSizeSpinBox.sizePolicy().hasHeightForWidth()) sizePolicy.setHeightForWidth(
self.FontFooterSizeSpinBox.sizePolicy().hasHeightForWidth())
self.FontFooterSizeSpinBox.setSizePolicy(sizePolicy) self.FontFooterSizeSpinBox.setSizePolicy(sizePolicy)
self.FontFooterSizeSpinBox.setMinimumSize(QtCore.QSize(70, 0)) self.FontFooterSizeSpinBox.setMinimumSize(QtCore.QSize(70, 0))
self.FontFooterSizeSpinBox.setProperty(u'value', QtCore.QVariant(10)) self.FontFooterSizeSpinBox.setProperty(u'value', QtCore.QVariant(10))
self.FontFooterSizeSpinBox.setMaximum(999) self.FontFooterSizeSpinBox.setMaximum(999)
self.FontFooterSizeSpinBox.setObjectName(u'FontFooterSizeSpinBox') self.FontFooterSizeSpinBox.setObjectName(u'FontFooterSizeSpinBox')
self.FooterFontLayout.setWidget(2, QtGui.QFormLayout.FieldRole, self.FontFooterSizeSpinBox) self.FooterFontLayout.setWidget(2, QtGui.QFormLayout.FieldRole,
self.FontFooterSizeSpinBox)
self.FontFooterWeightComboBox = QtGui.QComboBox(self.FooterFontGroupBox) self.FontFooterWeightComboBox = QtGui.QComboBox(self.FooterFontGroupBox)
self.FontFooterWeightComboBox.setObjectName("FontFooterWeightComboBox") self.FontFooterWeightComboBox.setObjectName(u'FontFooterWeightComboBox')
self.FontFooterWeightComboBox.addItem(QtCore.QString()) self.FontFooterWeightComboBox.addItem(QtCore.QString())
self.FontFooterWeightComboBox.addItem(QtCore.QString()) self.FontFooterWeightComboBox.addItem(QtCore.QString())
self.FontFooterWeightComboBox.addItem(QtCore.QString()) self.FontFooterWeightComboBox.addItem(QtCore.QString())
self.FontFooterWeightComboBox.addItem(QtCore.QString()) self.FontFooterWeightComboBox.addItem(QtCore.QString())
self.FooterFontLayout.setWidget(3, QtGui.QFormLayout.FieldRole, self.FontFooterWeightComboBox) self.FooterFontLayout.setWidget(3, QtGui.QFormLayout.FieldRole,
self.FontFooterWeightComboBox)
self.FontFooterWeightLabel = QtGui.QLabel(self.FooterFontGroupBox) self.FontFooterWeightLabel = QtGui.QLabel(self.FooterFontGroupBox)
self.FontFooterWeightLabel.setObjectName("FontFooterWeightLabel") self.FontFooterWeightLabel.setObjectName(u'FontFooterWeightLabel')
self.FooterFontLayout.setWidget(3, QtGui.QFormLayout.LabelRole, self.FontFooterWeightLabel) self.FooterFontLayout.setWidget(3, QtGui.QFormLayout.LabelRole,
self.FontFooterWeightLabel)
self.FooterLeftLayout.addWidget(self.FooterFontGroupBox) self.FooterLeftLayout.addWidget(self.FooterFontGroupBox)
spacerItem3 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) spacerItem3 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum,
QtGui.QSizePolicy.Expanding)
self.FooterLeftLayout.addItem(spacerItem3) self.FooterLeftLayout.addItem(spacerItem3)
self.FontFooterLayout.addWidget(self.FooterLeftWidget) self.FontFooterLayout.addWidget(self.FooterLeftWidget)
self.FooterRightWidget = QtGui.QWidget(self.FontFooterTab) self.FooterRightWidget = QtGui.QWidget(self.FontFooterTab)
@ -344,65 +414,87 @@ class Ui_AmendThemeDialog(object):
self.FooterRightLayout.setObjectName(u'FooterRightLayout') self.FooterRightLayout.setObjectName(u'FooterRightLayout')
self.LocationFooterGroupBox = QtGui.QGroupBox(self.FooterRightWidget) self.LocationFooterGroupBox = QtGui.QGroupBox(self.FooterRightWidget)
self.LocationFooterGroupBox.setObjectName(u'LocationFooterGroupBox') self.LocationFooterGroupBox.setObjectName(u'LocationFooterGroupBox')
self.LocationFooterLayout = QtGui.QFormLayout(self.LocationFooterGroupBox) self.LocationFooterLayout = QtGui.QFormLayout(
self.LocationFooterLayout.setFieldGrowthPolicy(QtGui.QFormLayout.ExpandingFieldsGrow) self.LocationFooterGroupBox)
self.LocationFooterLayout.setFormAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter) self.LocationFooterLayout.setFieldGrowthPolicy(
QtGui.QFormLayout.ExpandingFieldsGrow)
self.LocationFooterLayout.setFormAlignment(QtCore.Qt.AlignLeading |
QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter)
self.LocationFooterLayout.setMargin(8) self.LocationFooterLayout.setMargin(8)
self.LocationFooterLayout.setSpacing(8) self.LocationFooterLayout.setSpacing(8)
self.LocationFooterLayout.setObjectName(u'LocationFooterLayout') self.LocationFooterLayout.setObjectName(u'LocationFooterLayout')
self.FontFooterDefaultLabel = QtGui.QLabel(self.LocationFooterGroupBox) self.FontFooterDefaultLabel = QtGui.QLabel(self.LocationFooterGroupBox)
self.FontFooterDefaultLabel.setObjectName(u'FontFooterDefaultLabel') self.FontFooterDefaultLabel.setObjectName(u'FontFooterDefaultLabel')
self.LocationFooterLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.FontFooterDefaultLabel) self.LocationFooterLayout.setWidget(0, QtGui.QFormLayout.LabelRole,
self.FontFooterDefaultCheckBox = QtGui.QCheckBox(self.LocationFooterGroupBox) self.FontFooterDefaultLabel)
self.FontFooterDefaultCheckBox = QtGui.QCheckBox(
self.LocationFooterGroupBox)
self.FontFooterDefaultCheckBox.setTristate(False) self.FontFooterDefaultCheckBox.setTristate(False)
self.FontFooterDefaultCheckBox.setObjectName(u'FontFooterDefaultCheckBox') self.FontFooterDefaultCheckBox.setObjectName(
self.LocationFooterLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.FontFooterDefaultCheckBox) u'FontFooterDefaultCheckBox')
self.LocationFooterLayout.setWidget(0, QtGui.QFormLayout.FieldRole,
self.FontFooterDefaultCheckBox)
self.FontFooterXLabel = QtGui.QLabel(self.LocationFooterGroupBox) self.FontFooterXLabel = QtGui.QLabel(self.LocationFooterGroupBox)
self.FontFooterXLabel.setObjectName(u'FontFooterXLabel') self.FontFooterXLabel.setObjectName(u'FontFooterXLabel')
self.LocationFooterLayout.setWidget(1, QtGui.QFormLayout.LabelRole, self.FontFooterXLabel) self.LocationFooterLayout.setWidget(1, QtGui.QFormLayout.LabelRole,
self.FontFooterXLabel)
self.FontFooterYLabel = QtGui.QLabel(self.LocationFooterGroupBox) self.FontFooterYLabel = QtGui.QLabel(self.LocationFooterGroupBox)
self.FontFooterYLabel.setObjectName(u'FontFooterYLabel') self.FontFooterYLabel.setObjectName(u'FontFooterYLabel')
self.LocationFooterLayout.setWidget(2, QtGui.QFormLayout.LabelRole, self.FontFooterYLabel) self.LocationFooterLayout.setWidget(2, QtGui.QFormLayout.LabelRole,
self.FontFooterYLabel)
self.FontFooterWidthLabel = QtGui.QLabel(self.LocationFooterGroupBox) self.FontFooterWidthLabel = QtGui.QLabel(self.LocationFooterGroupBox)
self.FontFooterWidthLabel.setObjectName(u'FontFooterWidthLabel') self.FontFooterWidthLabel.setObjectName(u'FontFooterWidthLabel')
self.LocationFooterLayout.setWidget(3, QtGui.QFormLayout.LabelRole, self.FontFooterWidthLabel) self.LocationFooterLayout.setWidget(3, QtGui.QFormLayout.LabelRole,
self.FontFooterWidthLabel)
self.FontFooterHeightLabel = QtGui.QLabel(self.LocationFooterGroupBox) self.FontFooterHeightLabel = QtGui.QLabel(self.LocationFooterGroupBox)
self.FontFooterHeightLabel.setObjectName(u'FontFooterHeightLabel') self.FontFooterHeightLabel.setObjectName(u'FontFooterHeightLabel')
self.LocationFooterLayout.setWidget(4, QtGui.QFormLayout.LabelRole, self.FontFooterHeightLabel) self.LocationFooterLayout.setWidget(4, QtGui.QFormLayout.LabelRole,
self.FontFooterHeightLabel)
self.FontFooterXSpinBox = QtGui.QSpinBox(self.LocationFooterGroupBox) self.FontFooterXSpinBox = QtGui.QSpinBox(self.LocationFooterGroupBox)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum,
QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0) sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0) sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.FontFooterXSpinBox.sizePolicy().hasHeightForWidth()) sizePolicy.setHeightForWidth(
self.FontFooterXSpinBox.sizePolicy().hasHeightForWidth())
self.FontFooterXSpinBox.setSizePolicy(sizePolicy) self.FontFooterXSpinBox.setSizePolicy(sizePolicy)
self.FontFooterXSpinBox.setMinimumSize(QtCore.QSize(78, 0)) self.FontFooterXSpinBox.setMinimumSize(QtCore.QSize(78, 0))
self.FontFooterXSpinBox.setProperty(u'value', QtCore.QVariant(0)) self.FontFooterXSpinBox.setProperty(u'value', QtCore.QVariant(0))
self.FontFooterXSpinBox.setMaximum(9999) self.FontFooterXSpinBox.setMaximum(9999)
self.FontFooterXSpinBox.setObjectName(u'FontFooterXSpinBox') self.FontFooterXSpinBox.setObjectName(u'FontFooterXSpinBox')
self.LocationFooterLayout.setWidget(1, QtGui.QFormLayout.FieldRole, self.FontFooterXSpinBox) self.LocationFooterLayout.setWidget(1, QtGui.QFormLayout.FieldRole,
self.FontFooterXSpinBox)
self.FontFooterYSpinBox = QtGui.QSpinBox(self.LocationFooterGroupBox) self.FontFooterYSpinBox = QtGui.QSpinBox(self.LocationFooterGroupBox)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum,
QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0) sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0) sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.FontFooterYSpinBox.sizePolicy().hasHeightForWidth()) sizePolicy.setHeightForWidth(
self.FontFooterYSpinBox.sizePolicy().hasHeightForWidth())
self.FontFooterYSpinBox.setSizePolicy(sizePolicy) self.FontFooterYSpinBox.setSizePolicy(sizePolicy)
self.FontFooterYSpinBox.setMinimumSize(QtCore.QSize(78, 0)) self.FontFooterYSpinBox.setMinimumSize(QtCore.QSize(78, 0))
self.FontFooterYSpinBox.setProperty(u'value', QtCore.QVariant(0)) self.FontFooterYSpinBox.setProperty(u'value', QtCore.QVariant(0))
self.FontFooterYSpinBox.setMaximum(9999) self.FontFooterYSpinBox.setMaximum(9999)
self.FontFooterYSpinBox.setObjectName(u'FontFooterYSpinBox') self.FontFooterYSpinBox.setObjectName(u'FontFooterYSpinBox')
self.LocationFooterLayout.setWidget(2, QtGui.QFormLayout.FieldRole, self.FontFooterYSpinBox) self.LocationFooterLayout.setWidget(2, QtGui.QFormLayout.FieldRole,
self.FontFooterWidthSpinBox = QtGui.QSpinBox(self.LocationFooterGroupBox) self.FontFooterYSpinBox)
self.FontFooterWidthSpinBox = QtGui.QSpinBox(
self.LocationFooterGroupBox)
self.FontFooterWidthSpinBox.setMinimumSize(QtCore.QSize(78, 0)) self.FontFooterWidthSpinBox.setMinimumSize(QtCore.QSize(78, 0))
self.FontFooterWidthSpinBox.setMaximum(9999) self.FontFooterWidthSpinBox.setMaximum(9999)
self.FontFooterWidthSpinBox.setObjectName(u'FontFooterWidthSpinBox') self.FontFooterWidthSpinBox.setObjectName(u'FontFooterWidthSpinBox')
self.LocationFooterLayout.setWidget(3, QtGui.QFormLayout.FieldRole, self.FontFooterWidthSpinBox) self.LocationFooterLayout.setWidget(3, QtGui.QFormLayout.FieldRole,
self.FontFooterHeightSpinBox = QtGui.QSpinBox(self.LocationFooterGroupBox) self.FontFooterWidthSpinBox)
self.FontFooterHeightSpinBox = QtGui.QSpinBox(
self.LocationFooterGroupBox)
self.FontFooterHeightSpinBox.setMinimumSize(QtCore.QSize(78, 0)) self.FontFooterHeightSpinBox.setMinimumSize(QtCore.QSize(78, 0))
self.FontFooterHeightSpinBox.setMaximum(9999) self.FontFooterHeightSpinBox.setMaximum(9999)
self.FontFooterHeightSpinBox.setObjectName(u'FontFooterHeightSpinBox') self.FontFooterHeightSpinBox.setObjectName(u'FontFooterHeightSpinBox')
self.LocationFooterLayout.setWidget(4, QtGui.QFormLayout.FieldRole, self.FontFooterHeightSpinBox) self.LocationFooterLayout.setWidget(4, QtGui.QFormLayout.FieldRole,
self.FontFooterHeightSpinBox)
self.FooterRightLayout.addWidget(self.LocationFooterGroupBox) self.FooterRightLayout.addWidget(self.LocationFooterGroupBox)
spacerItem4 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) spacerItem4 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum,
QtGui.QSizePolicy.Expanding)
self.FooterRightLayout.addItem(spacerItem4) self.FooterRightLayout.addItem(spacerItem4)
self.FontFooterLayout.addWidget(self.FooterRightWidget) self.FontFooterLayout.addWidget(self.FooterRightWidget)
self.ThemeTabWidget.addTab(self.FontFooterTab, u'') self.ThemeTabWidget.addTab(self.FontFooterTab, u'')
@ -432,23 +524,29 @@ class Ui_AmendThemeDialog(object):
self.OutlineLayout.setObjectName(u'OutlineLayout') self.OutlineLayout.setObjectName(u'OutlineLayout')
self.OutlineCheckBox = QtGui.QCheckBox(self.OutlineWidget) self.OutlineCheckBox = QtGui.QCheckBox(self.OutlineWidget)
self.OutlineCheckBox.setObjectName(u'OutlineCheckBox') self.OutlineCheckBox.setObjectName(u'OutlineCheckBox')
self.OutlineLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.OutlineCheckBox) self.OutlineLayout.setWidget(0, QtGui.QFormLayout.FieldRole,
self.OutlineCheckBox)
self.OutlineSpinBox = QtGui.QSpinBox(self.OutlineWidget) self.OutlineSpinBox = QtGui.QSpinBox(self.OutlineWidget)
self.OutlineSpinBox.setObjectName("OutlineSpinBox") self.OutlineSpinBox.setObjectName(u'OutlineSpinBox')
self.OutlineSpinBox.setMaximum(10) self.OutlineSpinBox.setMaximum(10)
self.OutlineLayout.setWidget(1, QtGui.QFormLayout.FieldRole, self.OutlineSpinBox) self.OutlineLayout.setWidget(1, QtGui.QFormLayout.FieldRole,
self.OutlineSpinBox)
self.OutlineSpinBoxLabel = QtGui.QLabel(self.OutlineWidget) self.OutlineSpinBoxLabel = QtGui.QLabel(self.OutlineWidget)
self.OutlineSpinBoxLabel.setObjectName(u'OutlineSpinBoxLabel') self.OutlineSpinBoxLabel.setObjectName(u'OutlineSpinBoxLabel')
self.OutlineLayout.setWidget(1, QtGui.QFormLayout.LabelRole, self.OutlineSpinBoxLabel) self.OutlineLayout.setWidget(1, QtGui.QFormLayout.LabelRole,
self.OutlineSpinBoxLabel)
self.OutlineColorLabel = QtGui.QLabel(self.OutlineWidget) self.OutlineColorLabel = QtGui.QLabel(self.OutlineWidget)
self.OutlineColorLabel.setObjectName(u'OutlineColorLabel') self.OutlineColorLabel.setObjectName(u'OutlineColorLabel')
self.OutlineLayout.setWidget(2, QtGui.QFormLayout.LabelRole, self.OutlineColorLabel) self.OutlineLayout.setWidget(2, QtGui.QFormLayout.LabelRole,
self.OutlineColorLabel)
self.OutlineColorPushButton = QtGui.QPushButton(self.OutlineWidget) self.OutlineColorPushButton = QtGui.QPushButton(self.OutlineWidget)
self.OutlineColorPushButton.setObjectName(u'OutlineColorPushButton') self.OutlineColorPushButton.setObjectName(u'OutlineColorPushButton')
self.OutlineLayout.setWidget(2, QtGui.QFormLayout.FieldRole, self.OutlineColorPushButton) self.OutlineLayout.setWidget(2, QtGui.QFormLayout.FieldRole,
self.OutlineColorPushButton)
self.OutlineEnabledLabel = QtGui.QLabel(self.OutlineWidget) self.OutlineEnabledLabel = QtGui.QLabel(self.OutlineWidget)
self.OutlineEnabledLabel.setObjectName(u'OutlineEnabledLabel') self.OutlineEnabledLabel.setObjectName(u'OutlineEnabledLabel')
self.OutlineLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.OutlineEnabledLabel) self.OutlineLayout.setWidget(0, QtGui.QFormLayout.LabelRole,
self.OutlineEnabledLabel)
self.verticalLayout.addWidget(self.OutlineWidget) self.verticalLayout.addWidget(self.OutlineWidget)
self.OptionsLeftLayout.addWidget(self.OutlineGroupBox) self.OptionsLeftLayout.addWidget(self.OutlineGroupBox)
self.ShadowGroupBox = QtGui.QGroupBox(self.OptionsLeftWidget) self.ShadowGroupBox = QtGui.QGroupBox(self.OptionsLeftWidget)
@ -465,26 +563,33 @@ class Ui_AmendThemeDialog(object):
self.ShadowLayout.setObjectName(u'ShadowLayout') self.ShadowLayout.setObjectName(u'ShadowLayout')
self.ShadowCheckBox = QtGui.QCheckBox(self.ShadowWidget) self.ShadowCheckBox = QtGui.QCheckBox(self.ShadowWidget)
self.ShadowCheckBox.setObjectName(u'ShadowCheckBox') self.ShadowCheckBox.setObjectName(u'ShadowCheckBox')
self.ShadowLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.ShadowCheckBox) self.ShadowLayout.setWidget(0, QtGui.QFormLayout.FieldRole,
self.ShadowCheckBox)
self.ShadowSpinBox = QtGui.QSpinBox(self.OutlineWidget) self.ShadowSpinBox = QtGui.QSpinBox(self.OutlineWidget)
self.ShadowSpinBox.setObjectName("ShadowSpinBox") self.ShadowSpinBox.setObjectName(u'ShadowSpinBox')
self.ShadowSpinBox.setMaximum(10) self.ShadowSpinBox.setMaximum(10)
self.ShadowLayout.setWidget(1, QtGui.QFormLayout.FieldRole, self.ShadowSpinBox) self.ShadowLayout.setWidget(1, QtGui.QFormLayout.FieldRole,
self.ShadowSpinBox)
self.ShadowSpinBoxLabel = QtGui.QLabel(self.OutlineWidget) self.ShadowSpinBoxLabel = QtGui.QLabel(self.OutlineWidget)
self.ShadowSpinBoxLabel.setObjectName(u'ShadowSpinBoxLabel') self.ShadowSpinBoxLabel.setObjectName(u'ShadowSpinBoxLabel')
self.ShadowLayout.setWidget(1, QtGui.QFormLayout.LabelRole, self.ShadowSpinBoxLabel) self.ShadowLayout.setWidget(1, QtGui.QFormLayout.LabelRole,
self.ShadowSpinBoxLabel)
self.ShadowColorLabel = QtGui.QLabel(self.ShadowWidget) self.ShadowColorLabel = QtGui.QLabel(self.ShadowWidget)
self.ShadowColorLabel.setObjectName(u'ShadowColorLabel') self.ShadowColorLabel.setObjectName(u'ShadowColorLabel')
self.ShadowLayout.setWidget(2, QtGui.QFormLayout.LabelRole, self.ShadowColorLabel) self.ShadowLayout.setWidget(2, QtGui.QFormLayout.LabelRole,
self.ShadowColorLabel)
self.ShadowColorPushButton = QtGui.QPushButton(self.ShadowWidget) self.ShadowColorPushButton = QtGui.QPushButton(self.ShadowWidget)
self.ShadowColorPushButton.setObjectName(u'ShadowColorPushButton') self.ShadowColorPushButton.setObjectName(u'ShadowColorPushButton')
self.ShadowLayout.setWidget(2, QtGui.QFormLayout.FieldRole, self.ShadowColorPushButton) self.ShadowLayout.setWidget(2, QtGui.QFormLayout.FieldRole,
self.ShadowColorPushButton)
self.ShadowEnabledLabel = QtGui.QLabel(self.ShadowWidget) self.ShadowEnabledLabel = QtGui.QLabel(self.ShadowWidget)
self.ShadowEnabledLabel.setObjectName(u'ShadowEnabledLabel') self.ShadowEnabledLabel.setObjectName(u'ShadowEnabledLabel')
self.ShadowLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.ShadowEnabledLabel) self.ShadowLayout.setWidget(0, QtGui.QFormLayout.LabelRole,
self.ShadowEnabledLabel)
self.verticalLayout.addWidget(self.ShadowWidget) self.verticalLayout.addWidget(self.ShadowWidget)
self.OptionsLeftLayout.addWidget(self.ShadowGroupBox) self.OptionsLeftLayout.addWidget(self.ShadowGroupBox)
spacerItem5 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) spacerItem5 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum,
QtGui.QSizePolicy.Expanding)
self.OptionsLeftLayout.addItem(spacerItem5) self.OptionsLeftLayout.addItem(spacerItem5)
self.OtherOptionsLayout.addWidget(self.OptionsLeftWidget) self.OtherOptionsLayout.addWidget(self.OptionsLeftWidget)
self.OptionsRightWidget = QtGui.QWidget(self.OtherOptionsTab) self.OptionsRightWidget = QtGui.QWidget(self.OtherOptionsTab)
@ -520,14 +625,18 @@ class Ui_AmendThemeDialog(object):
self.TransitionGroupBox.setObjectName(u'TransitionGroupBox') self.TransitionGroupBox.setObjectName(u'TransitionGroupBox')
self.gridLayout_5 = QtGui.QGridLayout(self.TransitionGroupBox) self.gridLayout_5 = QtGui.QGridLayout(self.TransitionGroupBox)
self.gridLayout_5.setObjectName(u'gridLayout_5') self.gridLayout_5.setObjectName(u'gridLayout_5')
self.SlideTransitionCheckedBoxLabel = QtGui.QLabel(self.TransitionGroupBox) self.SlideTransitionCheckedBoxLabel = QtGui.QLabel(
self.SlideTransitionCheckedBoxLabel.setObjectName(u'SlideTransitionCheckedBoxLabel') self.TransitionGroupBox)
self.gridLayout_5.addWidget(self.SlideTransitionCheckedBoxLabel, 0, 0, 1, 1) self.SlideTransitionCheckedBoxLabel.setObjectName(
u'SlideTransitionCheckedBoxLabel')
self.gridLayout_5.addWidget(
self.SlideTransitionCheckedBoxLabel, 0, 0, 1, 1)
self.SlideTransitionCheckedBox = QtGui.QCheckBox(self.AlignmentGroupBox) self.SlideTransitionCheckedBox = QtGui.QCheckBox(self.AlignmentGroupBox)
self.SlideTransitionCheckedBox.setTristate(False) self.SlideTransitionCheckedBox.setTristate(False)
self.gridLayout_5.addWidget(self.SlideTransitionCheckedBox, 0, 1, 1, 1) self.gridLayout_5.addWidget(self.SlideTransitionCheckedBox, 0, 1, 1, 1)
self.OptionsRightLayout.addWidget(self.TransitionGroupBox) self.OptionsRightLayout.addWidget(self.TransitionGroupBox)
spacerItem6 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) spacerItem6 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum,
QtGui.QSizePolicy.Expanding)
self.OptionsRightLayout.addItem(spacerItem6) self.OptionsRightLayout.addItem(spacerItem6)
self.OtherOptionsLayout.addWidget(self.OptionsRightWidget) self.OtherOptionsLayout.addWidget(self.OptionsRightWidget)
self.ThemeTabWidget.addTab(self.OtherOptionsTab, u'') self.ThemeTabWidget.addTab(self.OtherOptionsTab, u'')
@ -539,13 +648,16 @@ class Ui_AmendThemeDialog(object):
self.ThemePreviewLayout.setSpacing(8) self.ThemePreviewLayout.setSpacing(8)
self.ThemePreviewLayout.setMargin(8) self.ThemePreviewLayout.setMargin(8)
self.ThemePreviewLayout.setObjectName(u'ThemePreviewLayout') self.ThemePreviewLayout.setObjectName(u'ThemePreviewLayout')
spacerItem7 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) spacerItem7 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding,
QtGui.QSizePolicy.Expanding)
self.ThemePreviewLayout.addItem(spacerItem7) self.ThemePreviewLayout.addItem(spacerItem7)
self.ThemePreview = QtGui.QLabel(self.PreviewGroupBox) self.ThemePreview = QtGui.QLabel(self.PreviewGroupBox)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,
QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0) sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0) sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.ThemePreview.sizePolicy().hasHeightForWidth()) sizePolicy.setHeightForWidth(
self.ThemePreview.sizePolicy().hasHeightForWidth())
self.ThemePreview.setSizePolicy(sizePolicy) self.ThemePreview.setSizePolicy(sizePolicy)
self.ThemePreview.setMaximumSize(QtCore.QSize(300, 225)) self.ThemePreview.setMaximumSize(QtCore.QSize(300, 225))
self.ThemePreview.setFrameShape(QtGui.QFrame.WinPanel) self.ThemePreview.setFrameShape(QtGui.QFrame.WinPanel)
@ -554,53 +666,87 @@ class Ui_AmendThemeDialog(object):
self.ThemePreview.setScaledContents(True) self.ThemePreview.setScaledContents(True)
self.ThemePreview.setObjectName(u'ThemePreview') self.ThemePreview.setObjectName(u'ThemePreview')
self.ThemePreviewLayout.addWidget(self.ThemePreview) self.ThemePreviewLayout.addWidget(self.ThemePreview)
spacerItem8 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) spacerItem8 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding,
QtGui.QSizePolicy.Expanding)
self.ThemePreviewLayout.addItem(spacerItem8) self.ThemePreviewLayout.addItem(spacerItem8)
self.AmendThemeLayout.addWidget(self.PreviewGroupBox) self.AmendThemeLayout.addWidget(self.PreviewGroupBox)
self.ThemeButtonBox = QtGui.QDialogButtonBox(AmendThemeDialog) self.ThemeButtonBox = QtGui.QDialogButtonBox(AmendThemeDialog)
self.ThemeButtonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok) self.ThemeButtonBox.setStandardButtons(
QtGui.QDialogButtonBox.Cancel | QtGui.QDialogButtonBox.Ok)
self.ThemeButtonBox.setObjectName(u'ThemeButtonBox') self.ThemeButtonBox.setObjectName(u'ThemeButtonBox')
self.AmendThemeLayout.addWidget(self.ThemeButtonBox) self.AmendThemeLayout.addWidget(self.ThemeButtonBox)
self.retranslateUi(AmendThemeDialog) self.retranslateUi(AmendThemeDialog)
self.ThemeTabWidget.setCurrentIndex(0) self.ThemeTabWidget.setCurrentIndex(0)
QtCore.QObject.connect(self.ThemeButtonBox, QtCore.SIGNAL(u'accepted()'), AmendThemeDialog.accept) QtCore.QObject.connect(self.ThemeButtonBox,
QtCore.QObject.connect(self.ThemeButtonBox, QtCore.SIGNAL(u'rejected()'), AmendThemeDialog.reject) QtCore.SIGNAL(u'accepted()'), AmendThemeDialog.accept)
QtCore.QObject.connect(self.ThemeButtonBox,
QtCore.SIGNAL(u'rejected()'), AmendThemeDialog.reject)
QtCore.QMetaObject.connectSlotsByName(AmendThemeDialog) QtCore.QMetaObject.connectSlotsByName(AmendThemeDialog)
AmendThemeDialog.setTabOrder(self.ThemeButtonBox, self.ThemeNameEdit) AmendThemeDialog.setTabOrder(self.ThemeButtonBox, self.ThemeNameEdit)
AmendThemeDialog.setTabOrder(self.ThemeNameEdit, self.ThemeTabWidget) AmendThemeDialog.setTabOrder(self.ThemeNameEdit, self.ThemeTabWidget)
AmendThemeDialog.setTabOrder(self.ThemeTabWidget, self.BackgroundComboBox) AmendThemeDialog.setTabOrder(self.ThemeTabWidget,
AmendThemeDialog.setTabOrder(self.BackgroundComboBox, self.BackgroundTypeComboBox) self.BackgroundComboBox)
AmendThemeDialog.setTabOrder(self.BackgroundTypeComboBox, self.Color1PushButton) AmendThemeDialog.setTabOrder(self.BackgroundComboBox,
AmendThemeDialog.setTabOrder(self.Color1PushButton, self.Color2PushButton) self.BackgroundTypeComboBox)
AmendThemeDialog.setTabOrder(self.BackgroundTypeComboBox,
self.Color1PushButton)
AmendThemeDialog.setTabOrder(self.Color1PushButton,
self.Color2PushButton)
AmendThemeDialog.setTabOrder(self.Color2PushButton, self.ImageLineEdit) AmendThemeDialog.setTabOrder(self.Color2PushButton, self.ImageLineEdit)
AmendThemeDialog.setTabOrder(self.ImageLineEdit, self.ImageToolButton) AmendThemeDialog.setTabOrder(self.ImageLineEdit, self.ImageToolButton)
AmendThemeDialog.setTabOrder(self.ImageToolButton, self.GradientComboBox) AmendThemeDialog.setTabOrder(self.ImageToolButton,
AmendThemeDialog.setTabOrder(self.GradientComboBox, self.FontMainComboBox) self.GradientComboBox)
AmendThemeDialog.setTabOrder(self.FontMainComboBox, self.FontMainColorPushButton) AmendThemeDialog.setTabOrder(self.GradientComboBox,
AmendThemeDialog.setTabOrder(self.FontMainColorPushButton, self.FontMainSizeSpinBox) self.FontMainComboBox)
AmendThemeDialog.setTabOrder(self.FontMainSizeSpinBox, self.FontMainWeightComboBox) AmendThemeDialog.setTabOrder(self.FontMainComboBox,
AmendThemeDialog.setTabOrder(self.FontMainWeightComboBox, self.FontMainLineSpacingSpinBox) self.FontMainColorPushButton)
AmendThemeDialog.setTabOrder(self.FontMainLineSpacingSpinBox, self.FontMainDefaultCheckBox) AmendThemeDialog.setTabOrder(self.FontMainColorPushButton,
AmendThemeDialog.setTabOrder(self.FontMainDefaultCheckBox, self.FontMainXSpinBox) self.FontMainSizeSpinBox)
AmendThemeDialog.setTabOrder(self.FontMainXSpinBox, self.FontMainYSpinBox) AmendThemeDialog.setTabOrder(self.FontMainSizeSpinBox,
AmendThemeDialog.setTabOrder(self.FontMainYSpinBox, self.FontMainWidthSpinBox) self.FontMainWeightComboBox)
AmendThemeDialog.setTabOrder(self.FontMainWidthSpinBox, self.FontMainHeightSpinBox) AmendThemeDialog.setTabOrder(self.FontMainWeightComboBox,
AmendThemeDialog.setTabOrder(self.FontMainHeightSpinBox, self.FontFooterComboBox) self.FontMainLineSpacingSpinBox)
AmendThemeDialog.setTabOrder(self.FontFooterComboBox, self.FontFooterColorPushButton) AmendThemeDialog.setTabOrder(self.FontMainLineSpacingSpinBox,
AmendThemeDialog.setTabOrder(self.FontFooterColorPushButton, self.FontFooterSizeSpinBox) self.FontMainDefaultCheckBox)
AmendThemeDialog.setTabOrder(self.FontFooterSizeSpinBox, self.FontFooterWeightComboBox) AmendThemeDialog.setTabOrder(self.FontMainDefaultCheckBox,
AmendThemeDialog.setTabOrder(self.FontFooterWeightComboBox, self.FontFooterDefaultCheckBox) self.FontMainXSpinBox)
AmendThemeDialog.setTabOrder(self.FontFooterDefaultCheckBox, self.FontFooterXSpinBox) AmendThemeDialog.setTabOrder(self.FontMainXSpinBox,
AmendThemeDialog.setTabOrder(self.FontFooterXSpinBox, self.FontFooterYSpinBox) self.FontMainYSpinBox)
AmendThemeDialog.setTabOrder(self.FontFooterYSpinBox, self.FontFooterWidthSpinBox) AmendThemeDialog.setTabOrder(self.FontMainYSpinBox,
AmendThemeDialog.setTabOrder(self.FontFooterWidthSpinBox, self.FontFooterHeightSpinBox) self.FontMainWidthSpinBox)
AmendThemeDialog.setTabOrder(self.FontFooterHeightSpinBox, self.OutlineCheckBox) AmendThemeDialog.setTabOrder(self.FontMainWidthSpinBox,
AmendThemeDialog.setTabOrder(self.OutlineCheckBox, self.OutlineColorPushButton) self.FontMainHeightSpinBox)
AmendThemeDialog.setTabOrder(self.OutlineColorPushButton, self.ShadowCheckBox) AmendThemeDialog.setTabOrder(self.FontMainHeightSpinBox,
AmendThemeDialog.setTabOrder(self.ShadowCheckBox, self.ShadowColorPushButton) self.FontFooterComboBox)
AmendThemeDialog.setTabOrder(self.ShadowColorPushButton, self.HorizontalComboBox) AmendThemeDialog.setTabOrder(self.FontFooterComboBox,
AmendThemeDialog.setTabOrder(self.HorizontalComboBox, self.VerticalComboBox) self.FontFooterColorPushButton)
AmendThemeDialog.setTabOrder(self.FontFooterColorPushButton,
self.FontFooterSizeSpinBox)
AmendThemeDialog.setTabOrder(self.FontFooterSizeSpinBox,
self.FontFooterWeightComboBox)
AmendThemeDialog.setTabOrder(self.FontFooterWeightComboBox,
self.FontFooterDefaultCheckBox)
AmendThemeDialog.setTabOrder(self.FontFooterDefaultCheckBox,
self.FontFooterXSpinBox)
AmendThemeDialog.setTabOrder(self.FontFooterXSpinBox,
self.FontFooterYSpinBox)
AmendThemeDialog.setTabOrder(self.FontFooterYSpinBox,
self.FontFooterWidthSpinBox)
AmendThemeDialog.setTabOrder(self.FontFooterWidthSpinBox,
self.FontFooterHeightSpinBox)
AmendThemeDialog.setTabOrder(self.FontFooterHeightSpinBox,
self.OutlineCheckBox)
AmendThemeDialog.setTabOrder(self.OutlineCheckBox,
self.OutlineColorPushButton)
AmendThemeDialog.setTabOrder(self.OutlineColorPushButton,
self.ShadowCheckBox)
AmendThemeDialog.setTabOrder(self.ShadowCheckBox,
self.ShadowColorPushButton)
AmendThemeDialog.setTabOrder(self.ShadowColorPushButton,
self.HorizontalComboBox)
AmendThemeDialog.setTabOrder(self.HorizontalComboBox,
self.VerticalComboBox)
def retranslateUi(self, AmendThemeDialog): def retranslateUi(self, AmendThemeDialog):
AmendThemeDialog.setWindowTitle( AmendThemeDialog.setWindowTitle(
@ -611,26 +757,25 @@ class Ui_AmendThemeDialog(object):
translate(u'AmendThemeForm', u'Background:')) translate(u'AmendThemeForm', u'Background:'))
self.BackgroundComboBox.setItemText(0, self.BackgroundComboBox.setItemText(0,
translate(u'AmendThemeForm', u'Opaque')) translate(u'AmendThemeForm', u'Opaque'))
self.BackgroundComboBox.setItemText(1, self.BackgroundComboBox.setItemText(1,
translate(u'AmendThemeForm', u'Transparent')) translate(u'AmendThemeForm', u'Transparent'))
self.BackgroundTypeLabel.setText( self.BackgroundTypeLabel.setText(
translate(u'AmendThemeForm', u'Background Type:')) translate(u'AmendThemeForm', u'Background Type:'))
self.BackgroundTypeComboBox.setItemText(0, self.BackgroundTypeComboBox.setItemText(0,
translate(u'AmendThemeForm', u'Solid Color')) translate(u'AmendThemeForm', u'Solid Color'))
self.BackgroundTypeComboBox.setItemText(1, self.BackgroundTypeComboBox.setItemText(1,
translate(u'AmendThemeForm', u'Gradient')) translate(u'AmendThemeForm', u'Gradient'))
self.BackgroundTypeComboBox.setItemText(2, self.BackgroundTypeComboBox.setItemText(2,
translate(u'AmendThemeForm', u'Image')) translate(u'AmendThemeForm', u'Image'))
self.Color1Label.setText( self.Color1Label.setText(translate(u'AmendThemeForm', u'<Color1>'))
translate(u'AmendThemeForm', u'<Color1>'))
self.Color2Label.setText(translate(u'AmendThemeForm', u'<Color2>')) self.Color2Label.setText(translate(u'AmendThemeForm', u'<Color2>'))
self.ImageLabel.setText(translate(u'AmendThemeForm', u'Image:')) self.ImageLabel.setText(translate(u'AmendThemeForm', u'Image:'))
self.GradientLabel.setText(translate(u'AmendThemeForm', u'Gradient :')) self.GradientLabel.setText(translate(u'AmendThemeForm', u'Gradient :'))
self.GradientComboBox.setItemText(0, self.GradientComboBox.setItemText(0,
translate(u'AmendThemeForm', u'Horizontal')) translate(u'AmendThemeForm', u'Horizontal'))
self.GradientComboBox.setItemText(1, self.GradientComboBox.setItemText(1,
translate(u'AmendThemeForm', u'Vertical')) translate(u'AmendThemeForm', u'Vertical'))
self.GradientComboBox.setItemText(2, self.GradientComboBox.setItemText(2,
translate(u'AmendThemeForm', u'Circular')) translate(u'AmendThemeForm', u'Circular'))
self.ThemeTabWidget.setTabText( self.ThemeTabWidget.setTabText(
self.ThemeTabWidget.indexOf(self.BackgroundTab), self.ThemeTabWidget.indexOf(self.BackgroundTab),
@ -646,13 +791,13 @@ class Ui_AmendThemeDialog(object):
translate(u'AmendThemeForm', u'Wrap Indentation')) translate(u'AmendThemeForm', u'Wrap Indentation'))
self.FontMainWrapLineAdjustmentLabel.setText( self.FontMainWrapLineAdjustmentLabel.setText(
translate(u'AmendThemeForm', u'Adjust Line Spacing')) translate(u'AmendThemeForm', u'Adjust Line Spacing'))
self.FontMainWeightComboBox.setItemText(0, self.FontMainWeightComboBox.setItemText(0,
translate(u'AmendThemeForm', u'Normal')) translate(u'AmendThemeForm', u'Normal'))
self.FontMainWeightComboBox.setItemText(1, self.FontMainWeightComboBox.setItemText(1,
translate(u'AmendThemeForm', u'Bold')) translate(u'AmendThemeForm', u'Bold'))
self.FontMainWeightComboBox.setItemText(2, self.FontMainWeightComboBox.setItemText(2,
translate(u'AmendThemeForm', u'Italics')) translate(u'AmendThemeForm', u'Italics'))
self.FontMainWeightComboBox.setItemText(3, self.FontMainWeightComboBox.setItemText(3,
translate(u'AmendThemeForm', u'Bold/Italics')) translate(u'AmendThemeForm', u'Bold/Italics'))
self.FontMainWeightLabel.setText( self.FontMainWeightLabel.setText(
translate(u'AmendThemeForm', u'Font Weight:')) translate(u'AmendThemeForm', u'Font Weight:'))
@ -668,9 +813,12 @@ class Ui_AmendThemeDialog(object):
translate(u'AmendThemeForm', u'Width:')) translate(u'AmendThemeForm', u'Width:'))
self.FontMainHeightLabel.setText( self.FontMainHeightLabel.setText(
translate(u'AmendThemeForm', u'Height:')) translate(u'AmendThemeForm', u'Height:'))
self.FontMainXSpinBox.setSuffix(translate(u'AmendThemeForm', u'px')) self.FontMainXSpinBox.setSuffix(
self.FontMainYSpinBox.setSuffix(translate(u'AmendThemeForm', u'px')) translate(u'AmendThemeForm', u'px'))
self.FontMainWidthSpinBox.setSuffix(translate(u'AmendThemeForm', u'px')) self.FontMainYSpinBox.setSuffix(
translate(u'AmendThemeForm', u'px'))
self.FontMainWidthSpinBox.setSuffix(
translate(u'AmendThemeForm', u'px'))
self.FontMainHeightSpinBox.setSuffix( self.FontMainHeightSpinBox.setSuffix(
translate(u'AmendThemeForm', u'px')) translate(u'AmendThemeForm', u'px'))
self.ThemeTabWidget.setTabText( self.ThemeTabWidget.setTabText(
@ -683,13 +831,13 @@ class Ui_AmendThemeDialog(object):
translate(u'AmendThemeForm', u'Font Color:')) translate(u'AmendThemeForm', u'Font Color:'))
self.FontFooterSizeLabel.setText(translate(u'AmendThemeForm', u'Size:')) self.FontFooterSizeLabel.setText(translate(u'AmendThemeForm', u'Size:'))
self.FontFooterSizeSpinBox.setSuffix(translate(u'AmendThemeForm', u'pt')) self.FontFooterSizeSpinBox.setSuffix(translate(u'AmendThemeForm', u'pt'))
self.FontFooterWeightComboBox.setItemText(0, self.FontFooterWeightComboBox.setItemText(0,
translate(u'AmendThemeForm', u'Normal')) translate(u'AmendThemeForm', u'Normal'))
self.FontFooterWeightComboBox.setItemText(1, self.FontFooterWeightComboBox.setItemText(1,
translate(u'AmendThemeForm', u'Bold')) translate(u'AmendThemeForm', u'Bold'))
self.FontFooterWeightComboBox.setItemText(2, self.FontFooterWeightComboBox.setItemText(2,
translate(u'AmendThemeForm', u'Italics')) translate(u'AmendThemeForm', u'Italics'))
self.FontFooterWeightComboBox.setItemText(3, self.FontFooterWeightComboBox.setItemText(3,
translate(u'AmendThemeForm', u'Bold/Italics')) translate(u'AmendThemeForm', u'Bold/Italics'))
self.FontFooterWeightLabel.setText( self.FontFooterWeightLabel.setText(
translate(u'AmendThemeForm', u'Font Weight:')) translate(u'AmendThemeForm', u'Font Weight:'))
@ -715,17 +863,16 @@ class Ui_AmendThemeDialog(object):
translate(u'AmendThemeForm', u'px')) translate(u'AmendThemeForm', u'px'))
self.ThemeTabWidget.setTabText( self.ThemeTabWidget.setTabText(
self.ThemeTabWidget.indexOf(self.FontFooterTab), self.ThemeTabWidget.indexOf(self.FontFooterTab),
translate(u'AmendThemeForm', u'Font Footer')) translate('AmendThemeForm', 'Font Footer'))
self.OutlineGroupBox.setTitle(translate(u'AmendThemeForm', u'Outline')) self.OutlineGroupBox.setTitle(translate('AmendThemeForm', 'Outline'))
self.OutlineSpinBoxLabel.setText( self.OutlineSpinBoxLabel.setText(
translate(u'AmendThemeForm', u'Outline Size:')) translate('AmendThemeForm', 'Outline Size:'))
self.OutlineSpinBox.setSuffix(translate(u'AmendThemeForm', u'px')) self.OutlineSpinBox.setSuffix(translate('AmendThemeForm', 'px'))
self.OutlineColorLabel.setText( self.OutlineColorLabel.setText(
translate(u'AmendThemeForm', u'Outline Color:')) translate(u'AmendThemeForm', u'Outline Color:'))
self.OutlineEnabledLabel.setText( self.OutlineEnabledLabel.setText(
translate(u'AmendThemeForm', u'Show Outline:')) translate('AmendThemeForm', 'Show Outline:'))
self.ShadowGroupBox.setTitle( self.ShadowGroupBox.setTitle(translate('AmendThemeForm', 'Shadow'))
translate(u'AmendThemeForm', u'Shadow'))
self.ShadowSpinBoxLabel.setText( self.ShadowSpinBoxLabel.setText(
translate(u'AmendThemeForm', u'Shadow Size:')) translate(u'AmendThemeForm', u'Shadow Size:'))
self.ShadowSpinBox.setSuffix(translate(u'AmendThemeForm', u'px')) self.ShadowSpinBox.setSuffix(translate(u'AmendThemeForm', u'px'))

View File

@ -154,8 +154,8 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog):
unicode(self.theme.background_endColor), unicode(self.theme.background_endColor),
self.theme.background_direction) self.theme.background_direction)
else: else:
(path, filename) = \ filename = \
os.path.split(unicode(self.theme.background_filename)) os.path.split(unicode(self.theme.background_filename))[0]
new_theme.add_background_image(filename) new_theme.add_background_image(filename)
save_to = os.path.join(self.path, theme_name, filename) save_to = os.path.join(self.path, theme_name, filename)
save_from = self.theme.background_filename save_from = self.theme.background_filename

View File

@ -62,7 +62,8 @@ class VersionThread(QtCore.QThread):
QtCore.QThread.__init__(self, parent) QtCore.QThread.__init__(self, parent)
self.parent = parent self.parent = parent
self.app_version = app_version self.app_version = app_version
self.version_splitter = re.compile(r'([0-9]+).([0-9]+).([0-9]+)(?:-bzr([0-9]+))') self.version_splitter = re.compile(
r'([0-9]+).([0-9]+).([0-9]+)(?:-bzr([0-9]+))')
def run(self): def run(self):
""" """
@ -847,7 +848,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
recentFileCount = QtCore.QSettings().value( recentFileCount = QtCore.QSettings().value(
self.generalSettingsSection + u'/max recent files', self.generalSettingsSection + u'/max recent files',
QtCore.QVariant(4)).toInt()[0] QtCore.QVariant(4)).toInt()[0]
if filename and not self.recentFiles.contains(filename): if filename and filename not in self.recentFiles:
self.recentFiles.prepend(QtCore.QString(filename)) self.recentFiles.insert(0, QtCore.QString(filename))
while self.recentFiles.count() > recentFileCount: while self.recentFiles.count() > recentFileCount:
self.recentFiles.takeLast() self.recentFiles.pop()

View File

@ -73,3 +73,4 @@ class Ui_ServiceItemEditDialog(object):
self.deleteButton.setText(translate(u'ServiceItemEditForm', u'Delete')) self.deleteButton.setText(translate(u'ServiceItemEditForm', u'Delete'))
self.downButton.setText(translate(u'ServiceItemEditForm', u'Down')) self.downButton.setText(translate(u'ServiceItemEditForm', u'Down'))

View File

@ -153,9 +153,11 @@ class ServiceManager(QtGui.QWidget):
self.ServiceManagerList.setAlternatingRowColors(True) self.ServiceManagerList.setAlternatingRowColors(True)
self.ServiceManagerList.setHeaderHidden(True) self.ServiceManagerList.setHeaderHidden(True)
self.ServiceManagerList.setExpandsOnDoubleClick(False) self.ServiceManagerList.setExpandsOnDoubleClick(False)
self.ServiceManagerList.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.ServiceManagerList.setContextMenuPolicy(
QtCore.Qt.CustomContextMenu)
QtCore.QObject.connect(self.ServiceManagerList, QtCore.QObject.connect(self.ServiceManagerList,
QtCore.SIGNAL('customContextMenuRequested(QPoint)'), self.contextMenu) QtCore.SIGNAL('customContextMenuRequested(QPoint)'),
self.contextMenu)
self.ServiceManagerList.setObjectName(u'ServiceManagerList') self.ServiceManagerList.setObjectName(u'ServiceManagerList')
# enable drop # enable drop
self.ServiceManagerList.__class__.dragEnterEvent = self.dragEnterEvent self.ServiceManagerList.__class__.dragEnterEvent = self.dragEnterEvent
@ -291,7 +293,7 @@ class ServiceManager(QtGui.QWidget):
self.makeLive() self.makeLive()
def onServiceItemNoteForm(self): def onServiceItemNoteForm(self):
item, count = self.findServiceItem() item = self.findServiceItem()[0]
self.serviceNoteForm.textEdit.setPlainText( self.serviceNoteForm.textEdit.setPlainText(
self.serviceItems[item][u'service_item'].notes) self.serviceItems[item][u'service_item'].notes)
if self.serviceNoteForm.exec_(): if self.serviceNoteForm.exec_():
@ -300,7 +302,7 @@ class ServiceManager(QtGui.QWidget):
self.repaintServiceList(item, 0) self.repaintServiceList(item, 0)
def onServiceItemEditForm(self): def onServiceItemEditForm(self):
item, count = self.findServiceItem() item = self.findServiceItem()[0]
self.serviceItemEditForm.setServiceItem( self.serviceItemEditForm.setServiceItem(
self.serviceItems[item][u'service_item']) self.serviceItems[item][u'service_item'])
if self.serviceItemEditForm.exec_(): if self.serviceItemEditForm.exec_():
@ -500,7 +502,7 @@ class ServiceManager(QtGui.QWidget):
""" """
Remove the current ServiceItem from the list Remove the current ServiceItem from the list
""" """
item, count = self.findServiceItem() item = self.findServiceItem()[0]
if item is not -1: if item is not -1:
self.serviceItems.remove(self.serviceItems[item]) self.serviceItems.remove(self.serviceItems[item])
self.repaintServiceList(0, 0) self.repaintServiceList(0, 0)
@ -526,10 +528,10 @@ class ServiceManager(QtGui.QWidget):
if serviceitem.notes: if serviceitem.notes:
icon = QtGui.QImage(serviceitem.icon) icon = QtGui.QImage(serviceitem.icon)
icon = icon.scaled(80, 80, QtCore.Qt.KeepAspectRatio, icon = icon.scaled(80, 80, QtCore.Qt.KeepAspectRatio,
QtCore.Qt.SmoothTransformation) QtCore.Qt.SmoothTransformation)
overlay = QtGui.QImage(':/services/service_item_notes.png') overlay = QtGui.QImage(':/services/service_item_notes.png')
overlay = overlay.scaled(80, 80, QtCore.Qt.KeepAspectRatio, overlay = overlay.scaled(80, 80, QtCore.Qt.KeepAspectRatio,
QtCore.Qt.SmoothTransformation) QtCore.Qt.SmoothTransformation)
painter = QtGui.QPainter(icon) painter = QtGui.QPainter(icon)
painter.drawImage(0, 0, overlay) painter.drawImage(0, 0, overlay)
painter.end() painter.end()
@ -537,7 +539,8 @@ class ServiceManager(QtGui.QWidget):
else: else:
treewidgetitem.setIcon(0, serviceitem.iconic_representation) treewidgetitem.setIcon(0, serviceitem.iconic_representation)
else: else:
treewidgetitem.setIcon(0, build_icon(u':/general/general_delete.png')) treewidgetitem.setIcon(0,
build_icon(u':/general/general_delete.png'))
treewidgetitem.setText(0, serviceitem.title) treewidgetitem.setText(0, serviceitem.title)
treewidgetitem.setToolTip(0, serviceitem.notes) treewidgetitem.setToolTip(0, serviceitem.notes)
treewidgetitem.setData(0, QtCore.Qt.UserRole, treewidgetitem.setData(0, QtCore.Qt.UserRole,
@ -599,7 +602,7 @@ class ServiceManager(QtGui.QWidget):
cPickle.dump(service, file) cPickle.dump(service, file)
file.close() file.close()
zip.write(servicefile) zip.write(servicefile)
except: except IOError:
log.exception(u'Failed to save service to disk') log.exception(u'Failed to save service to disk')
finally: finally:
if file: if file:
@ -608,7 +611,7 @@ class ServiceManager(QtGui.QWidget):
zip.close() zip.close()
try: try:
os.remove(servicefile) os.remove(servicefile)
except: except (IOError, OSError):
pass #if not present do not worry pass #if not present do not worry
name = filename.split(os.path.sep) name = filename.split(os.path.sep)
self.serviceName = name[-1] self.serviceName = name[-1]
@ -660,23 +663,23 @@ class ServiceManager(QtGui.QWidget):
self.parent.serviceSettingsSection, self.parent.serviceSettingsSection,
os.path.split(filename)[0]) os.path.split(filename)[0])
zip = None zip = None
f = None file_to = None
try: try:
zip = zipfile.ZipFile(unicode(filename)) zip = zipfile.ZipFile(unicode(filename))
for file in zip.namelist(): for file in zip.namelist():
osfile = unicode(QtCore.QDir.toNativeSeparators(file)) osfile = unicode(QtCore.QDir.toNativeSeparators(file))
names = osfile.split(os.path.sep) names = osfile.split(os.path.sep)
file_to = os.path.join(self.servicePath, file_path = os.path.join(self.servicePath,
names[len(names) - 1]) names[len(names) - 1])
f = open(file_to, u'wb') file_to = open(file_path, u'wb')
f.write(zip.read(file)) file_to.write(zip.read(file))
f.flush() file_to.flush()
f.close() file_to.close()
if file_to.endswith(u'osd'): if file_path.endswith(u'osd'):
p_file = file_to p_file = file_path
f = open(p_file, u'r') file_to = open(p_file, u'r')
items = cPickle.load(f) items = cPickle.load(file_to)
f.close() file_to.close()
self.onNewService() self.onNewService()
for item in items: for item in items:
serviceitem = ServiceItem() serviceitem = ServiceItem()
@ -687,13 +690,13 @@ class ServiceManager(QtGui.QWidget):
try: try:
if os.path.isfile(p_file): if os.path.isfile(p_file):
os.remove(p_file) os.remove(p_file)
except: except (IOError, OSError):
log.exception(u'Failed to remove osd file') log.exception(u'Failed to remove osd file')
except: except IOError:
log.exception(u'Problem loading a service file') log.exception(u'Problem loading a service file')
finally: finally:
if f: if file_to:
f.close() file_to.close()
if zip: if zip:
zip.close() zip.close()
self.isNew = False self.isNew = False
@ -720,7 +723,7 @@ class ServiceManager(QtGui.QWidget):
try: try:
if os.path.isfile(file_path): if os.path.isfile(file_path):
os.remove(file_path) os.remove(file_path)
except: except OSError:
log.exception(u'Failed to clean up servicePath') log.exception(u'Failed to clean up servicePath')
def onThemeComboBoxSelected(self, currentIndex): def onThemeComboBoxSelected(self, currentIndex):
@ -761,7 +764,7 @@ class ServiceManager(QtGui.QWidget):
Service Item to be added Service Item to be added
""" """
sitem, count = self.findServiceItem() sitem = self.findServiceItem()[0]
item.render() item.render()
if replace: if replace:
item.merge(self.serviceItems[sitem][u'service_item']) item.merge(self.serviceItems[sitem][u'service_item'])
@ -813,7 +816,7 @@ class ServiceManager(QtGui.QWidget):
""" """
Send the current item to the Preview slide controller Send the current item to the Preview slide controller
""" """
item, count = self.findServiceItem() item = self.findServiceItem()[0]
if item == -1: if item == -1:
return False return False
else: else:
@ -849,7 +852,7 @@ class ServiceManager(QtGui.QWidget):
""" """
Posts a remote edit message to a plugin to allow item to be edited. Posts a remote edit message to a plugin to allow item to be edited.
""" """
item, count = self.findServiceItem() item = self.findServiceItem()[0]
if self.serviceItems[item][u'service_item']\ if self.serviceItems[item][u'service_item']\
.is_capable(ItemCapabilities.AllowsEdit): .is_capable(ItemCapabilities.AllowsEdit):
Receiver.send_message(u'%s_edit' % Receiver.send_message(u'%s_edit' %
@ -966,7 +969,7 @@ class ServiceManager(QtGui.QWidget):
def onThemeChangeAction(self): def onThemeChangeAction(self):
theme = unicode(self.sender().text()) theme = unicode(self.sender().text())
item, count = self.findServiceItem() item = self.findServiceItem()[0]
self.serviceItems[item][u'service_item'].theme = theme self.serviceItems[item][u'service_item'].theme = theme
self.regenerateServiceItems() self.regenerateServiceItems()
@ -979,7 +982,7 @@ class ServiceManager(QtGui.QWidget):
def listRequest(self, message=None): def listRequest(self, message=None):
data = [] data = []
curindex, count = self.findServiceItem() curindex = self.findServiceItem()[0]
if curindex >= 0 and curindex < len(self.serviceItems): if curindex >= 0 and curindex < len(self.serviceItems):
curitem = self.serviceItems[curindex] curitem = self.serviceItems[curindex]
else: else:
@ -993,3 +996,4 @@ class ServiceManager(QtGui.QWidget):
data_item[u'selected'] = (item == curitem) data_item[u'selected'] = (item == curitem)
data.append(data_item) data.append(data_item)
Receiver.send_message(u'servicemanager_list_response', data) Receiver.send_message(u'servicemanager_list_response', data)

View File

@ -39,8 +39,8 @@ class Ui_ServiceNoteEdit(object):
self.textEdit.setObjectName(u'textEdit') self.textEdit.setObjectName(u'textEdit')
self.verticalLayout.addWidget(self.textEdit) self.verticalLayout.addWidget(self.textEdit)
self.buttonBox = QtGui.QDialogButtonBox(self.widget) self.buttonBox = QtGui.QDialogButtonBox(self.widget)
self.buttonBox.setStandardButtons( self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel |
QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Save) QtGui.QDialogButtonBox.Save)
self.buttonBox.setObjectName(u'buttonBox') self.buttonBox.setObjectName(u'buttonBox')
self.verticalLayout.addWidget(self.buttonBox) self.verticalLayout.addWidget(self.buttonBox)

View File

@ -394,9 +394,9 @@ class SlideController(QtGui.QWidget):
width = self.parent.ControlSplitter.sizes()[self.split] width = self.parent.ControlSplitter.sizes()[self.split]
height = width * self.parent.RenderManager.screen_ratio height = width * self.parent.RenderManager.screen_ratio
self.PreviewListWidget.setColumnWidth(0, width) self.PreviewListWidget.setColumnWidth(0, width)
#Sort out image hights (Songs , bibles excluded) #Sort out image heights (Songs, bibles excluded)
if self.serviceItem and not self.serviceItem.is_text(): if self.serviceItem and not self.serviceItem.is_text():
for framenumber, frame in enumerate(self.serviceItem.get_frames()): for framenumber in range(len(self.serviceItem.get_frames())):
self.PreviewListWidget.setRowHeight(framenumber, height) self.PreviewListWidget.setRowHeight(framenumber, height)
def trackSplitter(self, tab, pos): def trackSplitter(self, tab, pos):
@ -554,17 +554,9 @@ class SlideController(QtGui.QWidget):
if self.serviceItem.is_text(): if self.serviceItem.is_text():
if frame[u'verseTag']: if frame[u'verseTag']:
bits = frame[u'verseTag'].split(u':') bits = frame[u'verseTag'].split(u':')
tag = None tag = u'%s\n%s' % (bits[0][0], bits[1][0:] )
#If verse handle verse number else tag only tag1 = u'%s%s' % (bits[0][0], bits[1][0:] )
if bits[0] == translate(u'SlideController', u'Verse') or \ row = tag
bits[0] == translate(u'SlideController', u'Chorus'):
tag = u'%s\n%s' % (bits[0][0], bits[1][0:] )
tag1 = u'%s%s' % (bits[0][0], bits[1][0:] )
row = tag
else:
tag = bits[0]
tag1 = tag
row = bits[0][0:1]
else: else:
row += 1 row += 1
if self.isLive and frame[u'verseTag'] is not None: if self.isLive and frame[u'verseTag'] is not None:
@ -795,7 +787,8 @@ class SlideController(QtGui.QWidget):
def updatePreview(self): def updatePreview(self):
rm = self.parent.RenderManager rm = self.parent.RenderManager
if not rm.screens.current[u'primary']: if not rm.screens.current[u'primary']:
# Grab now, but try again in a couple of seconds if slide change is slow # Grab now, but try again in a couple of seconds if slide change
# is slow
QtCore.QTimer.singleShot(0.5, self.grabMainDisplay) QtCore.QTimer.singleShot(0.5, self.grabMainDisplay)
QtCore.QTimer.singleShot(2.5, self.grabMainDisplay) QtCore.QTimer.singleShot(2.5, self.grabMainDisplay)
else: else:

View File

@ -191,12 +191,11 @@ class ThemeManager(QtGui.QWidget):
else: else:
for plugin in self.parent.plugin_manager.plugins: for plugin in self.parent.plugin_manager.plugins:
if not plugin.can_delete_theme(theme): if not plugin.can_delete_theme(theme):
QtGui.QMessageBox.critical( QtGui.QMessageBox.critical(self,
self, translate(u'ThemeManager', u'Error'), translate(u'ThemeManager', u'Error'),
translate(u'ThemeManager', translate(u'ThemeManager',
u'Theme %s is use in %s plugin' u'Theme %s is use in %s plugin' % (theme,
% (theme, plugin.name)), plugin.name)))
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
return return
if unicode(self.parent.ServiceManagerContents.ThemeComboBox.currentText()) == theme: if unicode(self.parent.ServiceManagerContents.ThemeComboBox.currentText()) == theme:
QtGui.QMessageBox.critical( QtGui.QMessageBox.critical(
@ -213,7 +212,7 @@ class ThemeManager(QtGui.QWidget):
os.remove(os.path.join(self.path, th)) os.remove(os.path.join(self.path, th))
os.remove(os.path.join(self.thumbPath, th)) os.remove(os.path.join(self.thumbPath, th))
shutil.rmtree(os.path.join(self.path, theme)) shutil.rmtree(os.path.join(self.path, theme))
except: except OSError:
#if not present do not worry #if not present do not worry
pass pass
# As we do not reload the themes push out the change # As we do not reload the themes push out the change
@ -244,12 +243,12 @@ class ThemeManager(QtGui.QWidget):
try: try:
zip = zipfile.ZipFile(themePath, u'w') zip = zipfile.ZipFile(themePath, u'w')
source = os.path.join(self.path, theme) source = os.path.join(self.path, theme)
for root, dirs, files in os.walk(source): for files in os.walk(source)[2]:
for name in files: for name in files:
zip.write( zip.write(
os.path.join(source, name), os.path.join(source, name),
os.path.join(theme, name)) os.path.join(theme, name))
except: except (IOError, OSError):
log.exception(u'Export Theme Failed') log.exception(u'Export Theme Failed')
finally: finally:
if zip: if zip:
@ -283,7 +282,6 @@ class ThemeManager(QtGui.QWidget):
#check to see file is in theme root directory #check to see file is in theme root directory
theme = os.path.join(self.path, name) theme = os.path.join(self.path, name)
if os.path.exists(theme): if os.path.exists(theme):
(path, filename) = os.path.split(unicode(file))
textName = os.path.splitext(name)[0] textName = os.path.splitext(name)[0]
if textName == self.global_theme: if textName == self.global_theme:
name = u'%s (%s)' % (textName, name = u'%s (%s)' % (textName,
@ -371,11 +369,10 @@ class ThemeManager(QtGui.QWidget):
outfile = open(fullpath, u'wb') outfile = open(fullpath, u'wb')
outfile.write(zip.read(file)) outfile.write(zip.read(file))
self.generateAndSaveImage(dir, themename, filexml) self.generateAndSaveImage(dir, themename, filexml)
except: except IOError:
QtGui.QMessageBox.critical( QtGui.QMessageBox.critical(
self, translate(u'ThemeManager', u'Error'), self, translate(u'ThemeManager', u'Error'),
translate(u'ThemeManager', u'File is not a valid theme.'), translate(u'ThemeManager', u'File is not a valid theme.'),
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
log.exception(u'Importing theme from zip file failed %s' % filename) log.exception(u'Importing theme from zip file failed %s' % filename)
finally: finally:
if zip: if zip:
@ -468,7 +465,7 @@ class ThemeManager(QtGui.QWidget):
try: try:
outfile = open(theme_file, u'w') outfile = open(theme_file, u'w')
outfile.write(theme_pretty_xml) outfile.write(theme_pretty_xml)
except: except IOError:
log.exception(u'Saving theme to file failed') log.exception(u'Saving theme to file failed')
finally: finally:
if outfile: if outfile:
@ -476,7 +473,7 @@ class ThemeManager(QtGui.QWidget):
if image_from and image_from != image_to: if image_from and image_from != image_to:
try: try:
shutil.copyfile(image_from, image_to) shutil.copyfile(image_from, image_to)
except: except IOError:
log.exception(u'Failed to save theme image') log.exception(u'Failed to save theme image')
self.generateAndSaveImage(self.path, name, theme_xml) self.generateAndSaveImage(self.path, name, theme_xml)
self.loadThemes() self.loadThemes()
@ -579,3 +576,4 @@ class ThemeManager(QtGui.QWidget):
#theme.theme_mode #theme.theme_mode
theme.theme_name = theme.theme_name.strip() theme.theme_name = theme.theme_name.strip()
#theme.theme_version #theme.theme_version

View File

@ -27,10 +27,10 @@ import os
import sys import sys
import sqlite3 import sqlite3
from sqlalchemy import create_engine from sqlalchemy.exceptions import InvalidRequestError
from sqlalchemy.orm import scoped_session, sessionmaker, mapper from sqlalchemy.orm import mapper
from openlp.core.lib import SettingsManager from openlp.core.lib import BaseModel, SettingsManager
from openlp.core.utils import AppLocation from openlp.core.utils import AppLocation
from openlp.plugins.bibles.lib.models import * from openlp.plugins.bibles.lib.models import *
@ -85,13 +85,6 @@ mapper(TTestament, temp_testament_table)
mapper(TBook, temp_book_table) mapper(TBook, temp_book_table)
mapper(TVerse, temp_verse_table) mapper(TVerse, temp_verse_table)
def init_models(url):
engine = create_engine(url)
metadata.bind = engine
session = scoped_session(sessionmaker(autoflush=False,
autocommit=False, bind=engine))
return session
class MigrateBibles(object): class MigrateBibles(object):
def __init__(self, display): def __init__(self, display):
self.display = display self.display = display
@ -105,8 +98,8 @@ class MigrateBibles(object):
def process(self): def process(self):
self.progress(u'Bibles processing started') self.progress(u'Bibles processing started')
for f in self.database_files: for db_file in self.database_files:
self.v_1_9_0(f) self.v_1_9_0(db_file)
self.progress(u'Bibles processing finished') self.progress(u'Bibles processing finished')
def v_1_9_0(self, database): def v_1_9_0(self, database):
@ -143,7 +136,7 @@ class MigrateBibles(object):
try: try:
self.session.add(testament) self.session.add(testament)
self.session.commit() self.session.commit()
except: except InvalidRequestError:
self.session.rollback() self.session.rollback()
print u'Error thrown = ', sys.exc_info()[1] print u'Error thrown = ', sys.exc_info()[1]
self.progress(u'Create book table') self.progress(u'Create book table')
@ -157,7 +150,7 @@ class MigrateBibles(object):
try: try:
self.session.add(book) self.session.add(book)
self.session.commit() self.session.commit()
except: except InvalidRequestError:
self.session.rollback() self.session.rollback()
print u'Error thrown = ', sys.exc_info()[1] print u'Error thrown = ', sys.exc_info()[1]
self.progress(u'Create verse table') self.progress(u'Create verse table')
@ -171,14 +164,10 @@ class MigrateBibles(object):
verse.text = verse_temp.text verse.text = verse_temp.text
try: try:
self.session.add(verse) self.session.add(verse)
except: self.session.commit()
except InvalidRequestError:
self.session.rollback() self.session.rollback()
print u'Error thrown = ', sys.exc_info()[1] print u'Error thrown = ', sys.exc_info()[1]
try:
self.session.commit()
except:
self.session.rollback()
print u'Error thrown = ', sys.exc_info()[1]
self.progress(u'Create metadata table') self.progress(u'Create metadata table')
results = self.session.query(TBibleMeta).order_by(TBibleMeta.key).all() results = self.session.query(TBibleMeta).order_by(TBibleMeta.key).all()
for biblemeta_temp in results: for biblemeta_temp in results:
@ -188,7 +177,7 @@ class MigrateBibles(object):
try: try:
self.session.add(biblemeta) self.session.add(biblemeta)
self.session.commit() self.session.commit()
except: except InvalidRequestError:
self.session.rollback() self.session.rollback()
print u'Error thrown = ', sys.exc_info()[1] print u'Error thrown = ', sys.exc_info()[1]
@ -206,3 +195,4 @@ class MigrateBibles(object):
conn.commit() conn.commit()
conn.execute(u'vacuum;') conn.execute(u'vacuum;')
conn.commit() conn.commit()

View File

@ -27,11 +27,11 @@ import os
import sys import sys
import sqlite3 import sqlite3
from sqlalchemy import *
from sqlalchemy import create_engine from sqlalchemy import create_engine
from sqlalchemy.exceptions import InvalidRequestError
from sqlalchemy.orm import scoped_session, sessionmaker, mapper, relation 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.core.utils import AppLocation
from openlp.plugins.songs.lib.models import metadata, songs_table, Song, \ from openlp.plugins.songs.lib.models import metadata, songs_table, Song, \
Author, Topic, Book Author, Topic, Book
@ -159,7 +159,7 @@ class MigrateSongs(object):
try: try:
self.session.add(song) self.session.add(song)
self.session.commit() self.session.commit()
except: except InvalidRequestError:
self.session.rollback() self.session.rollback()
print u'Error thrown = ', sys.exc_info()[1] print u'Error thrown = ', sys.exc_info()[1]

View File

@ -24,6 +24,7 @@
############################################################################### ###############################################################################
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from openlp.core.lib import translate from openlp.core.lib import translate
class Ui_AlertDialog(object): class Ui_AlertDialog(object):
@ -31,7 +32,8 @@ class Ui_AlertDialog(object):
AlertDialog.setObjectName(u'AlertDialog') AlertDialog.setObjectName(u'AlertDialog')
AlertDialog.resize(567, 440) AlertDialog.resize(567, 440)
icon = QtGui.QIcon() icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(u':/icon/openlp.org-icon-32.bmp'), QtGui.QIcon.Normal, QtGui.QIcon.Off) icon.addPixmap(QtGui.QPixmap(u':/icon/openlp.org-icon-32.bmp'),
QtGui.QIcon.Normal, QtGui.QIcon.Off)
AlertDialog.setWindowIcon(icon) AlertDialog.setWindowIcon(icon)
self.AlertDialogLayout = QtGui.QVBoxLayout(AlertDialog) self.AlertDialogLayout = QtGui.QVBoxLayout(AlertDialog)
self.AlertDialogLayout.setSpacing(8) self.AlertDialogLayout.setSpacing(8)
@ -42,22 +44,28 @@ class Ui_AlertDialog(object):
self.AlertTextLayout.setSpacing(8) self.AlertTextLayout.setSpacing(8)
self.AlertTextLayout.setObjectName(u'AlertTextLayout') self.AlertTextLayout.setObjectName(u'AlertTextLayout')
self.AlertEntryLabel = QtGui.QLabel(AlertDialog) self.AlertEntryLabel = QtGui.QLabel(AlertDialog)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Fixed) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred,
QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0) sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0) sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.AlertEntryLabel.sizePolicy().hasHeightForWidth()) sizePolicy.setHeightForWidth(
self.AlertEntryLabel.sizePolicy().hasHeightForWidth())
self.AlertEntryLabel.setSizePolicy(sizePolicy) self.AlertEntryLabel.setSizePolicy(sizePolicy)
self.AlertEntryLabel.setObjectName(u'AlertEntryLabel') self.AlertEntryLabel.setObjectName(u'AlertEntryLabel')
self.AlertTextLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.AlertEntryLabel) self.AlertTextLayout.setWidget(0, QtGui.QFormLayout.LabelRole,
self.AlertEntryLabel)
self.AlertParameter = QtGui.QLabel(AlertDialog) self.AlertParameter = QtGui.QLabel(AlertDialog)
self.AlertParameter.setObjectName(u'AlertParameter') self.AlertParameter.setObjectName(u'AlertParameter')
self.AlertTextLayout.setWidget(1, QtGui.QFormLayout.LabelRole, self.AlertParameter) self.AlertTextLayout.setWidget(1, QtGui.QFormLayout.LabelRole,
self.AlertParameter)
self.ParameterEdit = QtGui.QLineEdit(AlertDialog) self.ParameterEdit = QtGui.QLineEdit(AlertDialog)
self.ParameterEdit.setObjectName(u'ParameterEdit') self.ParameterEdit.setObjectName(u'ParameterEdit')
self.AlertTextLayout.setWidget(1, QtGui.QFormLayout.FieldRole, self.ParameterEdit) self.AlertTextLayout.setWidget(1, QtGui.QFormLayout.FieldRole,
self.ParameterEdit)
self.AlertTextEdit = QtGui.QLineEdit(AlertDialog) self.AlertTextEdit = QtGui.QLineEdit(AlertDialog)
self.AlertTextEdit.setObjectName(u'AlertTextEdit') self.AlertTextEdit.setObjectName(u'AlertTextEdit')
self.AlertTextLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.AlertTextEdit) self.AlertTextLayout.setWidget(0, QtGui.QFormLayout.FieldRole,
self.AlertTextEdit)
self.AlertDialogLayout.addLayout(self.AlertTextLayout) self.AlertDialogLayout.addLayout(self.AlertTextLayout)
self.ManagementLayout = QtGui.QHBoxLayout() self.ManagementLayout = QtGui.QHBoxLayout()
self.ManagementLayout.setSpacing(8) self.ManagementLayout.setSpacing(8)
@ -72,24 +80,28 @@ class Ui_AlertDialog(object):
self.ManageButtonLayout.setObjectName(u'ManageButtonLayout') self.ManageButtonLayout.setObjectName(u'ManageButtonLayout')
self.NewButton = QtGui.QPushButton(AlertDialog) self.NewButton = QtGui.QPushButton(AlertDialog)
icon1 = QtGui.QIcon() icon1 = QtGui.QIcon()
icon1.addPixmap(QtGui.QPixmap(u':/general/general_new.png'), QtGui.QIcon.Normal, QtGui.QIcon.Off) icon1.addPixmap(QtGui.QPixmap(u':/general/general_new.png'),
QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.NewButton.setIcon(icon1) self.NewButton.setIcon(icon1)
self.NewButton.setObjectName(u'NewButton') self.NewButton.setObjectName(u'NewButton')
self.ManageButtonLayout.addWidget(self.NewButton) self.ManageButtonLayout.addWidget(self.NewButton)
self.SaveButton = QtGui.QPushButton(AlertDialog) self.SaveButton = QtGui.QPushButton(AlertDialog)
self.SaveButton.setEnabled(False) self.SaveButton.setEnabled(False)
icon2 = QtGui.QIcon() icon2 = QtGui.QIcon()
icon2.addPixmap(QtGui.QPixmap(u':/general/general_save.png'), QtGui.QIcon.Normal, QtGui.QIcon.Off) icon2.addPixmap(QtGui.QPixmap(u':/general/general_save.png'),
QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.SaveButton.setIcon(icon2) self.SaveButton.setIcon(icon2)
self.SaveButton.setObjectName(u'SaveButton') self.SaveButton.setObjectName(u'SaveButton')
self.ManageButtonLayout.addWidget(self.SaveButton) self.ManageButtonLayout.addWidget(self.SaveButton)
self.DeleteButton = QtGui.QPushButton(AlertDialog) self.DeleteButton = QtGui.QPushButton(AlertDialog)
icon3 = QtGui.QIcon() icon3 = QtGui.QIcon()
icon3.addPixmap(QtGui.QPixmap(u':/general/general_delete.png'), QtGui.QIcon.Normal, QtGui.QIcon.Off) icon3.addPixmap(QtGui.QPixmap(u':/general/general_delete.png'),
QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.DeleteButton.setIcon(icon3) self.DeleteButton.setIcon(icon3)
self.DeleteButton.setObjectName(u'DeleteButton') self.DeleteButton.setObjectName(u'DeleteButton')
self.ManageButtonLayout.addWidget(self.DeleteButton) self.ManageButtonLayout.addWidget(self.DeleteButton)
spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum,
QtGui.QSizePolicy.Expanding)
self.ManageButtonLayout.addItem(spacerItem) self.ManageButtonLayout.addItem(spacerItem)
self.ManagementLayout.addLayout(self.ManageButtonLayout) self.ManagementLayout.addLayout(self.ManageButtonLayout)
self.AlertDialogLayout.addLayout(self.ManagementLayout) self.AlertDialogLayout.addLayout(self.ManagementLayout)
@ -122,7 +134,8 @@ class Ui_AlertDialog(object):
self.AlertParameter.setBuddy(self.ParameterEdit) self.AlertParameter.setBuddy(self.ParameterEdit)
self.retranslateUi(AlertDialog) self.retranslateUi(AlertDialog)
QtCore.QObject.connect(self.CloseButton, QtCore.SIGNAL(u'clicked()'), AlertDialog.close) QtCore.QObject.connect(self.CloseButton, QtCore.SIGNAL(u'clicked()'),
AlertDialog.close)
QtCore.QMetaObject.connectSlotsByName(AlertDialog) QtCore.QMetaObject.connectSlotsByName(AlertDialog)
AlertDialog.setTabOrder(self.AlertTextEdit, self.ParameterEdit) AlertDialog.setTabOrder(self.AlertTextEdit, self.ParameterEdit)
AlertDialog.setTabOrder(self.ParameterEdit, self.AlertListWidget) AlertDialog.setTabOrder(self.ParameterEdit, self.AlertListWidget)

View File

@ -23,21 +23,7 @@
# Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Temple Place, Suite 330, Boston, MA 02111-1307 USA #
############################################################################### ###############################################################################
class BaseModel(object): from openlp.core.lib import BaseModel
"""
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 AlertItem(BaseModel): class AlertItem(BaseModel):
""" """

View File

@ -26,6 +26,7 @@
import logging import logging
from PyQt4 import QtCore from PyQt4 import QtCore
from sqlalchemy.exceptions import InvalidRequestError
from openlp.core.utils import AppLocation from openlp.core.utils import AppLocation
from openlp.plugins.alerts.lib.models import init_models, metadata, AlertItem from openlp.plugins.alerts.lib.models import init_models, metadata, AlertItem
@ -80,7 +81,7 @@ class DBManager(object):
self.session.commit() self.session.commit()
log.debug(u'Alert saved') log.debug(u'Alert saved')
return True return True
except: except InvalidRequestError:
self.session.rollback() self.session.rollback()
log.exception(u'Alert save failed') log.exception(u'Alert save failed')
return False return False
@ -104,7 +105,7 @@ class DBManager(object):
self.session.delete(alert_item) self.session.delete(alert_item)
self.session.commit() self.session.commit()
return True return True
except: except InvalidRequestError:
self.session.rollback() self.session.rollback()
log.exception(u'Alert deleton failed') log.exception(u'Alert deleton failed')
return False return False

View File

@ -34,6 +34,6 @@ def init_models(url):
engine = create_engine(url) engine = create_engine(url)
metadata.bind = engine metadata.bind = engine
session = scoped_session(sessionmaker(autoflush=True, autocommit=False, session = scoped_session(sessionmaker(autoflush=True, autocommit=False,
bind=engine)) bind=engine))
mapper(AlertItem, alerts_table) mapper(AlertItem, alerts_table)
return session return session

View File

@ -383,4 +383,3 @@ class Ui_BibleImportWizard(object):
translate(u'BiblesPlugin.ImportWizardForm', u'Ready.')) translate(u'BiblesPlugin.ImportWizardForm', u'Ready.'))
self.ImportProgressBar.setFormat(u'%p%') self.ImportProgressBar.setFormat(u'%p%')

View File

@ -146,7 +146,8 @@ class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard):
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok)) QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
self.CsvVerseLocationEdit.setFocus() self.CsvVerseLocationEdit.setFocus()
return False return False
elif self.field(u'source_format').toInt()[0] == BibleFormat.OpenSong: elif self.field(u'source_format').toInt()[0] == \
BibleFormat.OpenSong:
if self.field(u'opensong_file').toString() == u'': if self.field(u'opensong_file').toString() == u'':
QtGui.QMessageBox.critical(self, QtGui.QMessageBox.critical(self,
translate(u'BiblesPlugin.ImportWizardForm', u'Invalid OpenSong Bible'), translate(u'BiblesPlugin.ImportWizardForm', u'Invalid OpenSong Bible'),
@ -159,7 +160,8 @@ class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard):
elif self.currentId() == 2: elif self.currentId() == 2:
# License details # License details
license_version = variant_to_unicode(self.field(u'license_version')) license_version = variant_to_unicode(self.field(u'license_version'))
license_copyright = variant_to_unicode(self.field(u'license_copyright')) license_copyright = variant_to_unicode(
self.field(u'license_copyright'))
if license_version == u'': if license_version == u'':
QtGui.QMessageBox.critical(self, QtGui.QMessageBox.critical(self,
translate(u'BiblesPlugin.ImportWizardForm', u'Empty Version Name'), translate(u'BiblesPlugin.ImportWizardForm', u'Empty Version Name'),
@ -323,7 +325,7 @@ class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard):
if not isinstance(name, unicode): if not isinstance(name, unicode):
name = unicode(name, u'utf8') name = unicode(name, u'utf8')
self.web_bible_list[WebDownload.Crosswalk][ver] = name.strip() self.web_bible_list[WebDownload.Crosswalk][ver] = name.strip()
except: except IOError:
log.exception(u'Crosswalk resources missing') log.exception(u'Crosswalk resources missing')
finally: finally:
if books_file: if books_file:
@ -342,8 +344,9 @@ class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard):
ver = unicode(ver, u'utf8') ver = unicode(ver, u'utf8')
if not isinstance(name, unicode): if not isinstance(name, unicode):
name = unicode(name, u'utf8') name = unicode(name, u'utf8')
self.web_bible_list[WebDownload.BibleGateway][ver] = name.strip() self.web_bible_list[WebDownload.BibleGateway][ver] = \
except: name.strip()
except IOError:
log.exception(u'Biblegateway resources missing') log.exception(u'Biblegateway resources missing')
finally: finally:
if books_file: if books_file:
@ -406,16 +409,19 @@ class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard):
if not isinstance(bible_version, unicode): if not isinstance(bible_version, unicode):
bible_version = unicode(bible_version, u'utf8') bible_version = unicode(bible_version, u'utf8')
if download_location == WebDownload.Crosswalk: if download_location == WebDownload.Crosswalk:
bible = self.web_bible_list[WebDownload.Crosswalk][bible_version] bible = \
self.web_bible_list[WebDownload.Crosswalk][bible_version]
elif download_location == WebDownload.BibleGateway: elif download_location == WebDownload.BibleGateway:
bible = self.web_bible_list[WebDownload.BibleGateway][bible_version] bible = \
self.web_bible_list[WebDownload.BibleGateway][bible_version]
importer = self.manager.import_bible( importer = self.manager.import_bible(
BibleFormat.WebDownload, BibleFormat.WebDownload,
name=license_version, name=license_version,
download_source=WebDownload.get_name(download_location), download_source=WebDownload.get_name(download_location),
download_name=bible, download_name=bible,
proxy_server=variant_to_unicode(self.field(u'proxy_server')), proxy_server=variant_to_unicode(self.field(u'proxy_server')),
proxy_username=variant_to_unicode(self.field(u'proxy_username')), proxy_username=variant_to_unicode(
self.field(u'proxy_username')),
proxy_password=variant_to_unicode(self.field(u'proxy_password')) proxy_password=variant_to_unicode(self.field(u'proxy_password'))
) )
success = importer.do_import() success = importer.do_import()
@ -438,4 +444,3 @@ class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard):
self.cancelButton.setVisible(False) self.cancelButton.setVisible(False)
Receiver.send_message(u'openlp_process_events') Receiver.send_message(u'openlp_process_events')

View File

@ -30,7 +30,8 @@ import chardet
import htmlentitydefs import htmlentitydefs
only_verses = re.compile(r'([\w .]+)[ ]+([0-9]+)[ ]*[:|v|V][ ]*([0-9]+)' only_verses = re.compile(r'([\w .]+)[ ]+([0-9]+)[ ]*[:|v|V][ ]*([0-9]+)'
r'(?:[ ]*-[ ]*([0-9]+|end))?(?:[ ]*,[ ]*([0-9]+)(?:[ ]*-[ ]*([0-9]+|end))?)?', r'(?:[ ]*-[ ]*([0-9]+|end))?(?:[ ]*,[ ]*([0-9]+)'
r'(?:[ ]*-[ ]*([0-9]+|end))?)?',
re.UNICODE) re.UNICODE)
chapter_range = re.compile(r'([\w .]+)[ ]+([0-9]+)[ ]*[:|v|V][ ]*' chapter_range = re.compile(r'([\w .]+)[ ]+([0-9]+)[ ]*[:|v|V][ ]*'
r'([0-9]+|end)[ ]*-[ ]*([0-9]+)[ ]*[:|v|V][ ]*([0-9]+|end)', r'([0-9]+|end)[ ]*-[ ]*([0-9]+)[ ]*[:|v|V][ ]*([0-9]+|end)',

View File

@ -80,7 +80,7 @@ class CSVBible(BibleDB):
self.create_book(unicode(line[1], details['encoding']), self.create_book(unicode(line[1], details['encoding']),
line[2], int(line[0])) line[2], int(line[0]))
Receiver.send_message(u'openlp_process_events') Receiver.send_message(u'openlp_process_events')
except: except IOError:
log.exception(u'Loading books from file failed') log.exception(u'Loading books from file failed')
success = False success = False
finally: finally:
@ -109,7 +109,7 @@ class CSVBible(BibleDB):
unicode(line[3], details['encoding'])) unicode(line[3], details['encoding']))
Receiver.send_message(u'openlp_process_events') Receiver.send_message(u'openlp_process_events')
self.commit() self.commit()
except: except IOError:
log.exception(u'Loading verses from file failed') log.exception(u'Loading verses from file failed')
success = False success = False
finally: finally:

View File

@ -87,8 +87,8 @@ class BibleDB(QtCore.QObject):
unicode(settings.value(u'db hostname').toString()), unicode(settings.value(u'db hostname').toString()),
unicode(settings.value(u'db database').toString())) unicode(settings.value(u'db database').toString()))
settings.endGroup() settings.endGroup()
self.metadata, self.session = init_models(db_url) self.session = init_models(db_url)
self.metadata.create_all(checkfirst=True) metadata.create_all(checkfirst=True)
if u'file' in kwargs: if u'file' in kwargs:
self.get_name() self.get_name()
@ -123,7 +123,7 @@ class BibleDB(QtCore.QObject):
try: try:
os.remove(self.db_file) os.remove(self.db_file)
return True return True
except: except OSError:
return False return False
def register(self, wizard): def register(self, wizard):
@ -320,12 +320,14 @@ class BibleDB(QtCore.QObject):
verses = self.session.query(Verse) verses = self.session.query(Verse)
if text.find(u',') > -1: if text.find(u',') > -1:
or_clause = [] or_clause = []
keywords = [u'%%%s%%' % keyword.strip() for keyword in text.split(u',')] keywords = [u'%%%s%%' % keyword.strip()
for keyword in text.split(u',')]
for keyword in keywords: for keyword in keywords:
or_clause.append(Verse.text.like(keyword)) or_clause.append(Verse.text.like(keyword))
verses = verses.filter(or_(*or_clause)) verses = verses.filter(or_(*or_clause))
else: else:
keywords = [u'%%%s%%' % keyword.strip() for keyword in text.split(u' ')] keywords = [u'%%%s%%' % keyword.strip()
for keyword in text.split(u' ')]
for keyword in keywords: for keyword in keywords:
verses = verses.filter(Verse.text.like(keyword)) verses = verses.filter(Verse.text.like(keyword))
verses = verses.all() verses = verses.all()

View File

@ -33,8 +33,9 @@ from BeautifulSoup import BeautifulSoup, Tag, NavigableString
from openlp.core.lib import Receiver from openlp.core.lib import Receiver
from openlp.core.utils import AppLocation from openlp.core.utils import AppLocation
from common import BibleCommon, SearchResults, unescape from openlp.plugins.bibles.lib.common import BibleCommon, SearchResults, \
from db import BibleDB unescape
from openlp.plugins.bibles.lib.db import BibleDB
from openlp.plugins.bibles.lib.models import Book from openlp.plugins.bibles.lib.models import Book
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@ -462,7 +463,8 @@ class HTTPBible(BibleDB):
""" """
Return the list of books. Return the list of books.
""" """
return [Book.populate(name=book['name']) for book in HTTPBooks.get_books()] return [Book.populate(name=book['name'])
for book in HTTPBooks.get_books()]
def lookup_book(self, book): def lookup_book(self, book):
""" """

View File

@ -181,7 +181,7 @@ class BibleManager(object):
Returns a list of the names of available Bibles. Returns a list of the names of available Bibles.
""" """
log.debug(u'get_bibles') log.debug(u'get_bibles')
return [name for name, bible in self.db_cache.iteritems()] return self.db_cache.keys()
def get_books(self, bible): def get_books(self, bible):
""" """

View File

@ -460,10 +460,14 @@ class BibleMediaItem(MediaManagerItem):
if bible2: if bible2:
bible2_verses = [] bible2_verses = []
for scripture in self.lastReference: for scripture in self.lastReference:
bible2_verses.extend(self.parent.manager.get_verses(bible2, scripture)) bible2_verses.extend(self.parent.manager.get_verses(bible2,
bible2_version = self.parent.manager.get_meta_data(bible2, u'Version') scripture))
bible2_copyright = self.parent.manager.get_meta_data(bible2, u'Copyright') bible2_version = self.parent.manager.get_meta_data(bible2,
bible2_permission = self.parent.manager.get_meta_data(bible2, u'Permissions') u'Version')
bible2_copyright = self.parent.manager.get_meta_data(bible2,
u'Copyright')
bible2_permission = self.parent.manager.get_meta_data(bible2,
u'Permissions')
if bible2_version: if bible2_version:
bible2_version = bible2_version.value bible2_version = bible2_version.value
else: else:
@ -491,25 +495,30 @@ class BibleMediaItem(MediaManagerItem):
copyright = self._decodeQtObject(reference, 'copyright') copyright = self._decodeQtObject(reference, 'copyright')
permission = self._decodeQtObject(reference, 'permission') permission = self._decodeQtObject(reference, 'permission')
if self.parent.settings_tab.display_style == 1: if self.parent.settings_tab.display_style == 1:
verse_text = self.formatVerse(old_chapter, chapter, verse, u'(u', u')') verse_text = self.formatVerse(old_chapter, chapter, verse,
u'(u', u')')
elif self.parent.settings_tab.display_style == 2: elif self.parent.settings_tab.display_style == 2:
verse_text = self.formatVerse(old_chapter, chapter, verse, u'{', u'}') verse_text = self.formatVerse(old_chapter, chapter, verse,
u'{', u'}')
elif self.parent.settings_tab.display_style == 3: elif self.parent.settings_tab.display_style == 3:
verse_text = self.formatVerse(old_chapter, chapter, verse, u'[', u']') verse_text = self.formatVerse(old_chapter, chapter, verse,
u'[', u']')
else: else:
verse_text = self.formatVerse(old_chapter, chapter, verse, u'', u'') verse_text = self.formatVerse(old_chapter, chapter, verse,
u'', u'')
old_chapter = chapter old_chapter = chapter
footer = u'%s (%s %s)' % (book, version, copyright) footer = u'%s (%s %s)' % (book, version, copyright)
#If not found add to footer #If not found add to footer
if footer not in raw_footer: if footer not in raw_footer:
raw_footer.append(footer) raw_footer.append(footer)
if bible2: if bible2:
footer = u'%s (%s %s)' % (book, 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 not found add second version and copyright to footer
if footer not in raw_footer: if footer not in raw_footer:
raw_footer.append(footer) raw_footer.append(footer)
bible_text = u'%s %s \n\n %s %s' % \ bible_text = u'%s %s \n\n %s %s' % (verse_text, text,
(verse_text, text, verse_text, bible2_verses[item.row()].text) verse_text, bible2_verses[item.row()].text)
raw_slides.append(bible_text) raw_slides.append(bible_text)
bible_text = u'' bible_text = u''
else: else:

View File

@ -27,20 +27,7 @@ from sqlalchemy import Column, Table, MetaData, ForeignKey, types, \
create_engine create_engine
from sqlalchemy.orm import mapper, relation, sessionmaker, scoped_session from sqlalchemy.orm import mapper, relation, sessionmaker, scoped_session
class BaseModel(object): from openlp.core.lib import BaseModel
"""
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 BibleMeta(BaseModel): class BibleMeta(BaseModel):
@ -73,10 +60,9 @@ class Verse(BaseModel):
def init_models(db_url): def init_models(db_url):
engine = create_engine(db_url) engine = create_engine(db_url)
metadata.bind = engine metadata.bind = engine
session = scoped_session(sessionmaker(autoflush=True, session = scoped_session(sessionmaker(autoflush=True, autocommit=False,
autocommit=False, bind=engine))
bind=engine)) return session
return metadata, session
metadata = MetaData() metadata = MetaData()
meta_table = Table(u'metadata', metadata, meta_table = Table(u'metadata', metadata,

View File

@ -98,7 +98,7 @@ class OpenSongBible(BibleDB):
translate(u'BiblesPlugin.Opensong', u'Importing'),\ translate(u'BiblesPlugin.Opensong', u'Importing'),\
db_book.name, chapter.attrib[u'n']))) db_book.name, chapter.attrib[u'n'])))
self.commit() self.commit()
except: except IOError:
log.exception(u'Loading bible from OpenSong file failed') log.exception(u'Loading bible from OpenSong file failed')
success = False success = False
finally: finally:

View File

@ -78,7 +78,7 @@ class OSISBible(BibleDB):
book = line.split(u',') book = line.split(u',')
self.books[book[0]] = (book[1].lstrip().rstrip(), self.books[book[0]] = (book[1].lstrip().rstrip(),
book[2].lstrip().rstrip()) book[2].lstrip().rstrip())
except: except IOError:
log.exception(u'OSIS bible import failed') log.exception(u'OSIS bible import failed')
finally: finally:
if fbibles: if fbibles:
@ -104,7 +104,7 @@ class OSISBible(BibleDB):
try: try:
detect_file = open(self.filename, u'r') detect_file = open(self.filename, u'r')
details = chardet.detect(detect_file.read()) details = chardet.detect(detect_file.read())
except: except IOError:
log.exception(u'Failed to detect OSIS file encoding') log.exception(u'Failed to detect OSIS file encoding')
return return
finally: finally:
@ -173,7 +173,7 @@ class OSISBible(BibleDB):
self.wizard.incrementProgressBar(u'Finishing import...') self.wizard.incrementProgressBar(u'Finishing import...')
if match_count == 0: if match_count == 0:
success = False success = False
except: except (ValueError, IOError):
log.exception(u'Loading bible from OSIS file failed') log.exception(u'Loading bible from OSIS file failed')
success = False success = False
finally: finally:
@ -185,4 +185,3 @@ class OSISBible(BibleDB):
else: else:
return success return success

View File

@ -23,21 +23,7 @@
# Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Temple Place, Suite 330, Boston, MA 02111-1307 USA #
############################################################################### ###############################################################################
class BaseModel(object): from openlp.core.lib import BaseModel
"""
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 CustomSlide(BaseModel): class CustomSlide(BaseModel):
""" """

View File

@ -26,6 +26,7 @@
import logging import logging
from PyQt4 import QtCore from PyQt4 import QtCore
from sqlalchemy.exceptions import InvalidRequestError
from openlp.core.utils import AppLocation from openlp.core.utils import AppLocation
from openlp.plugins.custom.lib.models import init_models, metadata, CustomSlide from openlp.plugins.custom.lib.models import init_models, metadata, CustomSlide
@ -80,7 +81,7 @@ class CustomManager(object):
self.session.commit() self.session.commit()
log.debug(u'Custom Slide saved') log.debug(u'Custom Slide saved')
return True return True
except: except InvalidRequestError:
self.session.rollback() self.session.rollback()
log.exception(u'Custom Slide save failed') log.exception(u'Custom Slide save failed')
return False return False
@ -104,7 +105,7 @@ class CustomManager(object):
self.session.delete(customslide) self.session.delete(customslide)
self.session.commit() self.session.commit()
return True return True
except: except InvalidRequestError:
self.session.rollback() self.session.rollback()
log.exception(u'Custom Slide deleton failed') log.exception(u'Custom Slide deleton failed')
return False return False

View File

@ -34,6 +34,6 @@ def init_models(url):
engine = create_engine(url) engine = create_engine(url)
metadata.bind = engine metadata.bind = engine
session = scoped_session(sessionmaker(autoflush=True, autocommit=False, session = scoped_session(sessionmaker(autoflush=True, autocommit=False,
bind=engine)) bind=engine))
mapper(CustomSlide, custom_slide_table) mapper(CustomSlide, custom_slide_table)
return session return session

View File

@ -119,7 +119,7 @@ class ImageMediaItem(MediaManagerItem):
try: try:
os.remove( os.remove(
os.path.join(self.servicePath, unicode(text.text()))) os.path.join(self.servicePath, unicode(text.text())))
except: except OSError:
#if not present do not worry #if not present do not worry
pass pass
self.ListView.takeItem(item.row()) self.ListView.takeItem(item.row())
@ -128,7 +128,7 @@ class ImageMediaItem(MediaManagerItem):
def loadList(self, list): def loadList(self, list):
for file in list: for file in list:
(path, filename) = os.path.split(unicode(file)) filename = os.path.split(unicode(file))[1]
thumb = os.path.join(self.servicePath, filename) thumb = os.path.join(self.servicePath, filename)
if os.path.exists(thumb): if os.path.exists(thumb):
if self.validate(file, thumb): if self.validate(file, thumb):

View File

@ -148,7 +148,7 @@ class MediaMediaItem(MediaManagerItem):
def loadList(self, list): def loadList(self, list):
for file in list: for file in list:
(path, filename) = os.path.split(unicode(file)) filename = os.path.split(unicode(file))[1]
item_name = QtGui.QListWidgetItem(filename) item_name = QtGui.QListWidgetItem(filename)
img = QtGui.QPixmap(u':/media/media_video.png').toImage() img = QtGui.QPixmap(u':/media/media_video.png').toImage()
item_name.setIcon(build_icon(img)) item_name.setIcon(build_icon(img))

View File

@ -176,14 +176,12 @@ class ImpressController(PresentationController):
return doc return doc
class ImpressDocument(PresentationDocument): class ImpressDocument(PresentationDocument):
def __init__(self, controller, presentation): def __init__(self, controller, presentation):
log.debug(u'Init Presentation OpenOffice') log.debug(u'Init Presentation OpenOffice')
self.controller = controller PresentationDocument.__init__(controller, presentation)
self.document = None self.document = None
self.presentation = None self.presentation = None
self.control = None self.control = None
self.store_filename(presentation)
def load_presentation(self): def load_presentation(self):
""" """

View File

@ -136,7 +136,7 @@ class PresentationMediaItem(MediaManagerItem):
for file in list: for file in list:
if currlist.count(file) > 0: if currlist.count(file) > 0:
continue continue
(path, filename) = os.path.split(unicode(file)) filename = os.path.split(unicode(file))[1]
if titles.count(filename) > 0: if titles.count(filename) > 0:
QtGui.QMessageBox.critical( QtGui.QMessageBox.critical(
self, translate(u'PresentationPlugin.MediaItem', self, translate(u'PresentationPlugin.MediaItem',

View File

@ -256,35 +256,35 @@ class MessageListener(object):
self.previewHandler.slide(slide, isLive) self.previewHandler.slide(slide, isLive)
def first(self, message): def first(self, message):
isLive, item = self.decode_message(message) isLive = self.decode_message(message)[0]
if isLive: if isLive:
self.liveHandler.first() self.liveHandler.first()
else: else:
self.previewHandler.first() self.previewHandler.first()
def last(self, message): def last(self, message):
isLive, item = self.decode_message(message) isLive = self.decode_message(message)[0]
if isLive: if isLive:
self.liveHandler.last() self.liveHandler.last()
else: else:
self.previewHandler.last() self.previewHandler.last()
def next(self, message): def next(self, message):
isLive, item = self.decode_message(message) isLive = self.decode_message(message)[0]
if isLive: if isLive:
self.liveHandler.next() self.liveHandler.next()
else: else:
self.previewHandler.next() self.previewHandler.next()
def previous(self, message): def previous(self, message):
isLive, item = self.decode_message(message) isLive = self.decode_message(message)[0]
if isLive: if isLive:
self.liveHandler.previous() self.liveHandler.previous()
else: else:
self.previewHandler.previous() self.previewHandler.previous()
def shutdown(self, message): def shutdown(self, message):
isLive, item = self.decode_message(message) isLive = self.decode_message(message)[0]
if isLive: if isLive:
Receiver.send_message(u'maindisplay_show') Receiver.send_message(u'maindisplay_show')
self.liveHandler.shutdown() self.liveHandler.shutdown()
@ -292,17 +292,17 @@ class MessageListener(object):
self.previewHandler.shutdown() self.previewHandler.shutdown()
def hide(self, message): def hide(self, message):
isLive, item = self.decode_message(message) isLive = self.decode_message(message)[0]
if isLive: if isLive:
self.liveHandler.stop() self.liveHandler.stop()
def blank(self, message): def blank(self, message):
isLive, item = self.decode_message(message) isLive = self.decode_message(message)[0]
if isLive: if isLive:
self.liveHandler.blank() self.liveHandler.blank()
def unblank(self, message): def unblank(self, message):
isLive, item = self.decode_message(message) isLive = self.decode_message(message)[0]
if isLive: if isLive:
self.liveHandler.unblank() self.liveHandler.unblank()

View File

@ -102,12 +102,10 @@ class PowerpointController(PresentationController):
return doc return doc
class PowerpointDocument(PresentationDocument): class PowerpointDocument(PresentationDocument):
def __init__(self, controller, presentation): def __init__(self, controller, presentation):
log.debug(u'Init Presentation Powerpoint') log.debug(u'Init Presentation Powerpoint')
PresentationDocument.__init__(controller, presentation)
self.presentation = None self.presentation = None
self.controller = controller
self.store_filename(presentation)
def load_presentation(self): def load_presentation(self):
""" """

View File

@ -102,11 +102,10 @@ class PptviewController(PresentationController):
class PptviewDocument(PresentationDocument): class PptviewDocument(PresentationDocument):
def __init__(self, controller, presentation): def __init__(self, controller, presentation):
log.debug(u'Init Presentation PowerPoint') log.debug(u'Init Presentation PowerPoint')
PresentationDocument.__init__(controller, presentation)
self.presentation = None self.presentation = None
self.pptid = None self.pptid = None
self.blanked = False self.blanked = False
self.controller = controller
self.store_filename(presentation)
def load_presentation(self): def load_presentation(self):
""" """

View File

@ -100,16 +100,17 @@ class PresentationController(object):
self.docs = [] self.docs = []
self.plugin = plugin self.plugin = plugin
self.name = name self.name = name
self.settingsSection = self.plugin.settingsSection self.settings_section = self.plugin.settingsSection
self.available = self.check_available() self.available = self.check_available()
if self.available: if self.available:
self.enabled = QtCore.QSettings().value( self.enabled = QtCore.QSettings().value(
self.settingsSection + u'/' + name, self.settings_section + u'/' + name,
QtCore.QVariant(QtCore.Qt.Unchecked)).toInt()[0] == QtCore.Qt.Checked QtCore.QVariant(QtCore.Qt.Unchecked)).toInt()[0] == \
QtCore.Qt.Checked
else: else:
self.enabled = False self.enabled = False
self.thumbnailroot = os.path.join( self.thumbnailroot = os.path.join(
AppLocation.get_section_data_path(self.settingsSection), AppLocation.get_section_data_path(self.settings_section),
name, u'thumbnails') name, u'thumbnails')
self.thumbnailprefix = u'slide' self.thumbnailprefix = u'slide'
if not os.path.isdir(self.thumbnailroot): if not os.path.isdir(self.thumbnailroot):
@ -123,7 +124,8 @@ class PresentationController(object):
def start_process(self): def start_process(self):
""" """
Loads a running version of the presentation application in the background. Loads a running version of the presentation application in the
background.
""" """
pass pass
@ -231,7 +233,10 @@ class PresentationDocument(object):
Cleans up/deletes any controller specific files created for Cleans up/deletes any controller specific files created for
a file, e.g. thumbnails a file, e.g. thumbnails
""" """
shutil.rmtree(self.thumbnailpath) try:
shutil.rmtree(self.thumbnailpath)
except OSError:
log.exception(u'Failed to delete presentation controller files')
def store_filename(self, presentation): def store_filename(self, presentation):
""" """
@ -388,3 +393,4 @@ class PresentationDocument(object):
The slide the notes are required for, starting at 1 The slide the notes are required for, starting at 1
""" """
return '' return ''

View File

@ -191,7 +191,7 @@ class HttpConnection(object):
path = os.path.normpath(os.path.join(self.parent.html_dir, filename)) path = os.path.normpath(os.path.join(self.parent.html_dir, filename))
if not path.startswith(self.parent.html_dir): if not path.startswith(self.parent.html_dir):
return None return None
(fileroot, ext) = os.path.splitext(filename) ext = os.path.splitext(filename)[1]
if ext == u'.html': if ext == u'.html':
mimetype = u'text/html' mimetype = u'text/html'
elif ext == u'.css': elif ext == u'.css':

View File

@ -23,6 +23,52 @@
# Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Temple Place, Suite 330, Boston, MA 02111-1307 USA #
############################################################################### ###############################################################################
from openlp.core.lib import translate
class VerseType(object):
Verse = 0
Chorus = 1
Bridge = 2
PreChorus = 3
Intro = 4
Ending = 5
Other = 6
@staticmethod
def to_string(verse_type):
if verse_type == VerseType.Verse:
return translate('VerseType', 'Verse')
elif verse_type == VerseType.Chorus:
return translate('VerseType', 'Chorus')
elif verse_type == VerseType.Bridge:
return translate('VerseType', 'Bridge')
elif verse_type == VerseType.PreChorus:
return translate('VerseType', 'Pre-Chorus')
elif verse_type == VerseType.Intro:
return translate('VerseType', 'Intro')
elif verse_type == VerseType.Ending:
return translate('VerseType', 'Ending')
elif verse_type == VerseType.Other:
return translate('VerseType', 'Other')
@staticmethod
def from_string(verse_type):
verse_type = verse_type.lower()
if verse_type == unicode(VerseType.to_string(VerseType.Verse)).lower():
return VerseType.Verse
elif verse_type == unicode(VerseType.to_string(VerseType.Chorus)).lower():
return VerseType.Chorus
elif verse_type == unicode(VerseType.to_string(VerseType.Bridge)).lower():
return VerseType.Bridge
elif verse_type == unicode(VerseType.to_string(VerseType.PreChorus)).lower():
return VerseType.PreChorus
elif verse_type == unicode(VerseType.to_string(VerseType.Intro)).lower():
return VerseType.Intro
elif verse_type == unicode(VerseType.to_string(VerseType.Ending)).lower():
return VerseType.Ending
elif verse_type == unicode(VerseType.to_string(VerseType.Other)).lower():
return VerseType.Other
from authorsform import AuthorsForm from authorsform import AuthorsForm
from topicsform import TopicsForm from topicsform import TopicsForm
from songbookform import SongBookForm from songbookform import SongBookForm

View File

@ -39,11 +39,13 @@ class AuthorsForm(QtGui.QDialog, Ui_AuthorsDialog):
""" """
QtGui.QDialog.__init__(self, parent) QtGui.QDialog.__init__(self, parent)
self.setupUi(self) self.setupUi(self)
self.autoDisplayName = False self._autoDisplayName = False
QtCore.QObject.connect(self.FirstNameEdit, QtCore.QObject.connect(self.FirstNameEdit,
QtCore.SIGNAL(u'textEdited(QString)'), self.onFirstNameEditTextEdited) QtCore.SIGNAL(u'textEdited(QString)'),
self.onFirstNameEditTextEdited)
QtCore.QObject.connect(self.LastNameEdit, QtCore.QObject.connect(self.LastNameEdit,
QtCore.SIGNAL(u'textEdited(QString)'), self.onLastNameEditTextEdited) QtCore.SIGNAL(u'textEdited(QString)'),
self.onLastNameEditTextEdited)
def exec_(self, clear=True): def exec_(self, clear=True):
if clear: if clear:
@ -54,7 +56,7 @@ class AuthorsForm(QtGui.QDialog, Ui_AuthorsDialog):
return QtGui.QDialog.exec_(self) return QtGui.QDialog.exec_(self)
def onFirstNameEditTextEdited(self, text): def onFirstNameEditTextEdited(self, text):
if not self.autoDisplayName: if not self._autoDisplayName:
return return
display_name = text display_name = text
if self.LastNameEdit.text() != u'': if self.LastNameEdit.text() != u'':
@ -62,7 +64,7 @@ class AuthorsForm(QtGui.QDialog, Ui_AuthorsDialog):
self.DisplayEdit.setText(display_name) self.DisplayEdit.setText(display_name)
def onLastNameEditTextEdited(self, text): def onLastNameEditTextEdited(self, text):
if not self.autoDisplayName: if not self._autoDisplayName:
return return
display_name = text display_name = text
if self.FirstNameEdit.text() != u'': if self.FirstNameEdit.text() != u'':
@ -70,10 +72,10 @@ class AuthorsForm(QtGui.QDialog, Ui_AuthorsDialog):
self.DisplayEdit.setText(display_name) self.DisplayEdit.setText(display_name)
def autoDisplayName(self): def autoDisplayName(self):
return self.autoDisplayName return self._autoDisplayName
def setAutoDisplayName(self, on): def setAutoDisplayName(self, on):
self.autoDisplayName = on self._autoDisplayName = on
def accept(self): def accept(self):
if not self.FirstNameEdit.text(): if not self.FirstNameEdit.text():
@ -110,3 +112,4 @@ class AuthorsForm(QtGui.QDialog, Ui_AuthorsDialog):
return False return False
else: else:
return QtGui.QDialog.accept(self) return QtGui.QDialog.accept(self)

View File

@ -101,6 +101,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
QtCore.QObject.connect(self.VerseOrderEdit, QtCore.QObject.connect(self.VerseOrderEdit,
QtCore.SIGNAL(u'lostFocus()'), self.onVerseOrderEditLostFocus) QtCore.SIGNAL(u'lostFocus()'), self.onVerseOrderEditLostFocus)
self.previewButton = QtGui.QPushButton() self.previewButton = QtGui.QPushButton()
self.previewButton.setObjectName(u'previewButton')
self.previewButton.setText( self.previewButton.setText(
translate(u'SongsPlugin.EditSongForm', u'Save && Preview')) translate(u'SongsPlugin.EditSongForm', u'Save && Preview'))
self.ButtonBox.addButton( self.ButtonBox.addButton(
@ -371,7 +372,8 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
item.setText(afterText) item.setText(afterText)
self.VerseListWidget.setRowCount( self.VerseListWidget.setRowCount(
self.VerseListWidget.rowCount() + 1) self.VerseListWidget.rowCount() + 1)
self.VerseListWidget.setItem(int(self.VerseListWidget.rowCount() - 1), 0, item) self.VerseListWidget.setItem(
int(self.VerseListWidget.rowCount() - 1), 0, item)
self.VerseListWidget.setColumnWidth(0, self.width) self.VerseListWidget.setColumnWidth(0, self.width)
self.VerseListWidget.resizeRowsToContents() self.VerseListWidget.resizeRowsToContents()
self.tagRows() self.tagRows()
@ -472,47 +474,35 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
self.SongTabWidget.setCurrentIndex(1) self.SongTabWidget.setCurrentIndex(1)
self.AuthorsListView.setFocus() self.AuthorsListView.setFocus()
#split the verse list by space and mark lower case for testing #split the verse list by space and mark lower case for testing
taglist = unicode(translate(u'SongsPlugin.EditSongForm', u' bitped')) taglist = unicode(translate(u'SongsPlugin.EditSongForm', u' bitpeovc'))
for verse in unicode(self.VerseOrderEdit.text()).lower().split(u' '): for verse in unicode(self.VerseOrderEdit.text()).lower().split(u' '):
if len(verse) > 1: if len(verse) > 1:
if (verse[0:1] == u'%s' % translate(u'SongsPlugin.EditSongForm', if taglist.find(verse[0:1]) > -1 \
u'v') or
verse[0:1] == u'%s' % translate(u'SongsPlugin.EditSongForm',
u'c')) \
and verse[1:].isdigit(): and verse[1:].isdigit():
pass pass
else: else:
self.SongTabWidget.setCurrentIndex(0) self.SongTabWidget.setCurrentIndex(0)
self.VerseOrderEdit.setFocus() self.VerseOrderEdit.setFocus()
return False, \ return False, \
translate(u'SongsPlugin.EditSongForm', translate(u'SongsPlugin.EditSongForm',
u'Invalid verse entry - Vx or Cx') u'Invalid verse entry, values must be I,B,T,P,E,O,V,C '
else: u'followed by a number')
if taglist.find(verse) > -1:
pass
else:
self.SongTabWidget.setCurrentIndex(0)
self.VerseOrderEdit.setFocus()
return False, \
translate(u'SongsPlugin.EditSongForm',\
u'Invalid verse entry, values must be '
u'I,B,T,P,E,O,Vx,Cx')
return True, u'' return True, u''
def onTitleEditItemLostFocus(self): def onTitleEditItemLostFocus(self):
self.song.title = self.TitleEditItem.text() self.song.title = unicode(self.TitleEditItem.text())
def onVerseOrderEditLostFocus(self): def onVerseOrderEditLostFocus(self):
self.song.verse_order = self.VerseOrderEdit.text() self.song.verse_order = unicode(self.VerseOrderEdit.text())
def onCommentsEditLostFocus(self): def onCommentsEditLostFocus(self):
self.song.comments = self.CommentsEdit.text() self.song.comments = unicode(self.CommentsEdit.text())
def onCCLNumberEditLostFocus(self): def onCCLNumberEditLostFocus(self):
self.song.ccli_number = self.CCLNumberEdit.text() self.song.ccli_number = self.CCLNumberEdit.text()
def onCopyrightInsertButtonTriggered(self): def onCopyrightInsertButtonTriggered(self):
text = self.CopyrightEditItem.displayText() text = self.CopyrightEditItem.text()
pos = self.CopyrightEditItem.cursorPosition() pos = self.CopyrightEditItem.cursorPosition()
text = text[:pos] + u'©' + text[pos:] text = text[:pos] + u'©' + text[pos:]
self.CopyrightEditItem.setText(text) self.CopyrightEditItem.setText(text)
@ -531,9 +521,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
The Song is valid so as the plugin to add it to preview to see. The Song is valid so as the plugin to add it to preview to see.
""" """
log.debug(u'onPreview') log.debug(u'onPreview')
if button.text() == unicode( if unicode(button.objectName()) == u'previewButton' and self.saveSong():
translate(u'SongsPlugin.EditSongForm', u'Save && Preview')) \
and self.saveSong():
Receiver.send_message(u'songs_preview') Receiver.send_message(u'songs_preview')
def closePressed(self): def closePressed(self):
@ -553,13 +541,13 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
self, translate(u'SongsPlugin.EditSongForm', u'Error'), message, self, translate(u'SongsPlugin.EditSongForm', u'Error'), message,
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok)) QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
return False return False
self.song.title = unicode(self.TitleEditItem.displayText()) self.song.title = unicode(self.TitleEditItem.text())
self.song.copyright = unicode(self.CopyrightEditItem.displayText()) self.song.copyright = unicode(self.CopyrightEditItem.text())
self.song.search_title = unicode(self.TitleEditItem.displayText()) + \ self.song.search_title = unicode(self.TitleEditItem.text()) + \
u'@'+ unicode(self.AlternativeEdit.displayText()) u'@'+ unicode(self.AlternativeEdit.text())
self.song.comments = unicode(self.CommentsEdit.toPlainText()) self.song.comments = unicode(self.CommentsEdit.toPlainText())
self.song.verse_order = unicode(self.VerseOrderEdit.text()) self.song.verse_order = unicode(self.VerseOrderEdit.text())
self.song.ccli_number = unicode(self.CCLNumberEdit.displayText()) self.song.ccli_number = unicode(self.CCLNumberEdit.text())
self.processLyrics() self.processLyrics()
self.processTitle() self.processTitle()
self.songmanager.save_song(self.song) self.songmanager.save_song(self.song)
@ -577,7 +565,8 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
verseId = unicode((item.data(QtCore.Qt.UserRole)).toString()) verseId = unicode((item.data(QtCore.Qt.UserRole)).toString())
bits = verseId.split(u':') bits = verseId.split(u':')
sxml.add_verse_to_lyrics(bits[0], bits[1], unicode(item.text())) sxml.add_verse_to_lyrics(bits[0], bits[1], unicode(item.text()))
text = text + unicode(self.VerseListWidget.item(i, 0).text()) + u' ' text = text + unicode(self.VerseListWidget.item(i, 0).text()) \
+ u' '
text = text.replace(u'\'', u'') text = text.replace(u'\'', u'')
text = text.replace(u',', u'') text = text.replace(u',', u'')
text = text.replace(u';', u'') text = text.replace(u';', u'')
@ -595,6 +584,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
def processTitle(self): def processTitle(self):
log.debug(u'processTitle') log.debug(u'processTitle')
self.song.search_title = unicode(self.song.search_title)
self.song.search_title = self.song.search_title.replace(u'\'', u'') self.song.search_title = self.song.search_title.replace(u'\'', u'')
self.song.search_title = self.song.search_title.replace(u'\"', u'') self.song.search_title = self.song.search_title.replace(u'\"', u'')
self.song.search_title = self.song.search_title.replace(u'`', u'') self.song.search_title = self.song.search_title.replace(u'`', u'')
@ -606,6 +596,5 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
self.song.search_title = self.song.search_title.replace(u'{', u'') self.song.search_title = self.song.search_title.replace(u'{', u'')
self.song.search_title = self.song.search_title.replace(u'}', u'') self.song.search_title = self.song.search_title.replace(u'}', u'')
self.song.search_title = self.song.search_title.replace(u'?', u'') self.song.search_title = self.song.search_title.replace(u'?', u'')
self.song.search_title = unicode(self.song.search_title)

View File

@ -24,7 +24,9 @@
############################################################################### ###############################################################################
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from openlp.core.lib import translate from openlp.core.lib import translate
from openlp.plugins.songs.forms import VerseType
class Ui_EditVerseDialog(object): class Ui_EditVerseDialog(object):
def setupUi(self, EditVerseDialog): def setupUi(self, EditVerseDialog):
@ -94,20 +96,13 @@ class Ui_EditVerseDialog(object):
translate(u'SongsPlugin.EditVerseForm', u'Edit Verse')) translate(u'SongsPlugin.EditVerseForm', u'Edit Verse'))
self.VerseTypeLabel.setText( self.VerseTypeLabel.setText(
translate(u'SongsPlugin.EditVerseForm', u'Verse Type:')) translate(u'SongsPlugin.EditVerseForm', u'Verse Type:'))
self.VerseTypeComboBox.setItemText(0, self.VerseTypeComboBox.setItemText(0, VerseType.to_string(VerseType.Verse))
translate(u'SongsPlugin.EditVerseForm', u'Verse')) self.VerseTypeComboBox.setItemText(1, VerseType.to_string(VerseType.Chorus))
self.VerseTypeComboBox.setItemText(1, self.VerseTypeComboBox.setItemText(2, VerseType.to_string(VerseType.Bridge))
translate(u'SongsPlugin.EditVerseForm', u'Chorus')) self.VerseTypeComboBox.setItemText(3, VerseType.to_string(VerseType.PreChorus))
self.VerseTypeComboBox.setItemText(2, self.VerseTypeComboBox.setItemText(4, VerseType.to_string(VerseType.Intro))
translate(u'SongsPlugin.EditVerseForm', u'Bridge')) self.VerseTypeComboBox.setItemText(5, VerseType.to_string(VerseType.Ending))
self.VerseTypeComboBox.setItemText(3, self.VerseTypeComboBox.setItemText(6, VerseType.to_string(VerseType.Other))
translate(u'SongsPlugin.EditVerseForm', u'Pre-Chorus'))
self.VerseTypeComboBox.setItemText(4,
translate(u'SongsPlugin.EditVerseForm', u'Intro'))
self.VerseTypeComboBox.setItemText(5,
translate(u'SongsPlugin.EditVerseForm', u'Ending'))
self.VerseTypeComboBox.setItemText(6,
translate(u'SongsPlugin.EditVerseForm', u'Other'))
self.InsertButton.setText( self.InsertButton.setText(
translate(u'SongsPlugin.EditVerseForm', u'Insert')) translate(u'SongsPlugin.EditVerseForm', u'Insert'))

View File

@ -28,55 +28,12 @@ import logging
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from openlp.plugins.songs.forms import VerseType
from editversedialog import Ui_EditVerseDialog from editversedialog import Ui_EditVerseDialog
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
class VerseType(object):
Verse = 0
Chorus = 1
Bridge = 2
PreChorus = 3
Intro = 4
Ending = 5
Other = 6
@staticmethod
def to_string(verse_type):
if verse_type == VerseType.Verse:
return u'Verse'
elif verse_type == VerseType.Chorus:
return u'Chorus'
elif verse_type == VerseType.Bridge:
return u'Bridge'
elif verse_type == VerseType.PreChorus:
return u'Pre-Chorus'
elif verse_type == VerseType.Intro:
return u'Intro'
elif verse_type == VerseType.Ending:
return u'Ending'
elif verse_type == VerseType.Other:
return u'Other'
@staticmethod
def from_string(verse_type):
verse_type = verse_type.lower()
if verse_type == u'verse':
return VerseType.Verse
elif verse_type == u'chorus':
return VerseType.Chorus
elif verse_type == u'bridge':
return VerseType.Bridge
elif verse_type == u'pre-chorus':
return VerseType.PreChorus
elif verse_type == u'intro':
return VerseType.Intro
elif verse_type == u'ending':
return VerseType.Ending
elif verse_type == u'other':
return VerseType.Other
class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog): class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog):
""" """
This is the form that is used to edit the verses of the song. This is the form that is used to edit the verses of the song.
@ -97,8 +54,6 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog):
QtCore.SIGNAL(u'cursorPositionChanged()'), QtCore.SIGNAL(u'cursorPositionChanged()'),
self.onCursorPositionChanged self.onCursorPositionChanged
) )
# QtCore.QObject.connect(self.VerseListComboBox,
# QtCore.SIGNAL(u'activated(int)'), self.onVerseComboChanged)
self.verse_regex = re.compile(r'---\[([-\w]+):([\d]+)\]---') self.verse_regex = re.compile(r'---\[([-\w]+):([\d]+)\]---')
def insertVerse(self, title, num=1): def insertVerse(self, title, num=1):
@ -112,19 +67,21 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog):
self.VerseTextEdit.insertPlainText(u'\n') self.VerseTextEdit.insertPlainText(u'\n')
verse_type = self.VerseTypeComboBox.currentIndex() verse_type = self.VerseTypeComboBox.currentIndex()
if verse_type == VerseType.Verse: if verse_type == VerseType.Verse:
self.insertVerse('Verse', self.VerseNumberBox.value()) self.insertVerse(VerseType.to_string(VerseType.Verse),
self.VerseNumberBox.value())
elif verse_type == VerseType.Chorus: elif verse_type == VerseType.Chorus:
self.insertVerse('Chorus', self.VerseNumberBox.value()) self.insertVerse(VerseType.to_string(VerseType.Chorus),
self.VerseNumberBox.value())
elif verse_type == VerseType.Bridge: elif verse_type == VerseType.Bridge:
self.insertVerse('Bridge') self.insertVerse(VerseType.to_string(VerseType.Bridge))
elif verse_type == VerseType.PreChorus: elif verse_type == VerseType.PreChorus:
self.insertVerse('Pre-Chorus') self.insertVerse(VerseType.to_string(VerseType.PreChorus))
elif verse_type == VerseType.Intro: elif verse_type == VerseType.Intro:
self.insertVerse('Intro') self.insertVerse(VerseType.to_string(VerseType.Intro))
elif verse_type == VerseType.Ending: elif verse_type == VerseType.Ending:
self.insertVerse('Ending') self.insertVerse(VerseType.to_string(VerseType.Ending))
elif verse_type == VerseType.Other: elif verse_type == VerseType.Other:
self.insertVerse('Other') self.insertVerse(VerseType.to_string(VerseType.Other))
def onCursorPositionChanged(self): def onCursorPositionChanged(self):
position = self.VerseTextEdit.textCursor().position() position = self.VerseTextEdit.textCursor().position()
@ -149,7 +106,8 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog):
self.VerseTypeComboBox.setCurrentIndex(VerseType.from_string(verse_type)) self.VerseTypeComboBox.setCurrentIndex(VerseType.from_string(verse_type))
self.VerseNumberBox.setValue(verse_number) self.VerseNumberBox.setValue(verse_number)
def setVerse(self, text, single=False, tag=u'Verse:1'): def setVerse(self, text, single=False,
tag=u'%s:1' % VerseType.to_string(VerseType.Verse)):
if single: if single:
verse_type, verse_number = tag.split(u':') verse_type, verse_number = tag.split(u':')
self.VerseTypeComboBox.setCurrentIndex(VerseType.from_string(verse_type)) self.VerseTypeComboBox.setCurrentIndex(VerseType.from_string(verse_type))
@ -157,12 +115,13 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog):
self.InsertButton.setVisible(False) self.InsertButton.setVisible(False)
else: else:
if not text: if not text:
text = u'---[Verse:1]---\n' text = u'---[%s:1]---\n' % VerseType.to_string(VerseType.Verse)
self.VerseTypeComboBox.setCurrentIndex(0) self.VerseTypeComboBox.setCurrentIndex(0)
self.VerseNumberBox.setValue(1) self.VerseNumberBox.setValue(1)
self.InsertButton.setVisible(True) self.InsertButton.setVisible(True)
self.VerseTextEdit.setPlainText(text) self.VerseTextEdit.setPlainText(text)
self.VerseTextEdit.setFocus(QtCore.Qt.OtherFocusReason) self.VerseTextEdit.setFocus(QtCore.Qt.OtherFocusReason)
self.VerseTextEdit.moveCursor(QtGui.QTextCursor.End)
def getVerse(self): def getVerse(self):
return self.VerseTextEdit.toPlainText(), \ return self.VerseTextEdit.toPlainText(), \
@ -172,7 +131,6 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog):
def getVerseAll(self): def getVerseAll(self):
text = self.VerseTextEdit.toPlainText() text = self.VerseTextEdit.toPlainText()
if not text.startsWith(u'---['): if not text.startsWith(u'---['):
text = u'---[Verse:1]---\n%s' % text text = u'---[%s:1]---\n%s' % (VerseType.to_string(VerseType.Verse), text)
return text return text

View File

@ -130,12 +130,9 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog):
self.authorform.setAutoDisplayName(True) self.authorform.setAutoDisplayName(True)
if self.authorform.exec_(): if self.authorform.exec_():
author = Author.populate( author = Author.populate(
first_name=unicode( first_name=unicode(self.authorform.FirstNameEdit.text()),
self.authorform.FirstNameEdit.text(), u'utf-8'), last_name=unicode(self.authorform.LastNameEdit.text()),
last_name=unicode( display_name=unicode(self.authorform.DisplayEdit.text()))
self.authorform.LastNameEdit.text(), u'utf-8'),
display_name=unicode(
self.authorform.DisplayEdit.text(), u'utf-8'))
if self.songmanager.save_author(author): if self.songmanager.save_author(author):
self.resetAuthors() self.resetAuthors()
else: else:
@ -147,8 +144,7 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog):
def onTopicAddButtonClick(self): def onTopicAddButtonClick(self):
if self.topicform.exec_(): if self.topicform.exec_():
topic = Topic.populate( topic = Topic.populate(name=unicode(self.topicform.NameEdit.text()))
name=unicode(self.topicform.NameEdit.text(), u'utf-8'))
if self.songmanager.save_topic(topic): if self.songmanager.save_topic(topic):
self.resetTopics() self.resetTopics()
else: else:
@ -161,8 +157,8 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog):
def onBookAddButtonClick(self): def onBookAddButtonClick(self):
if self.bookform.exec_(): if self.bookform.exec_():
book = Book.populate( book = Book.populate(
name=unicode(self.bookform.NameEdit.text(), u'utf-8'), name=unicode(self.bookform.NameEdit.text()),
publisher=unicode(self.bookform.PublisherEdit.text(), u'utf-8')) publisher=unicode(self.bookform.PublisherEdit.text()))
if self.songmanager.save_book(book): if self.songmanager.save_book(book):
self.resetBooks() self.resetBooks()
else: else:
@ -181,12 +177,11 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog):
self.authorform.LastNameEdit.setText(author.last_name) self.authorform.LastNameEdit.setText(author.last_name)
self.authorform.DisplayEdit.setText(author.display_name) self.authorform.DisplayEdit.setText(author.display_name)
if self.authorform.exec_(False): if self.authorform.exec_(False):
author.first_name = unicode( author.first_name = unicode(
self.authorform.FirstNameEdit.text(), u'utf-8') self.authorform.FirstNameEdit.text())
author.last_name = unicode( author.last_name = unicode(self.authorform.LastNameEdit.text())
self.authorform.LastNameEdit.text(), u'utf-8') author.display_name = unicode(
author.display_name = unicode( self.authorform.DisplayEdit.text())
self.authorform.DisplayEdit.text(), u'utf-8')
if self.songmanager.save_author(author): if self.songmanager.save_author(author):
self.resetAuthors() self.resetAuthors()
else: else:
@ -202,7 +197,7 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog):
topic = self.songmanager.get_topic(topic_id) topic = self.songmanager.get_topic(topic_id)
self.topicform.NameEdit.setText(topic.name) self.topicform.NameEdit.setText(topic.name)
if self.topicform.exec_(False): if self.topicform.exec_(False):
topic.name = unicode(self.topicform.NameEdit.text(), u'utf-8') topic.name = unicode(self.topicform.NameEdit.text())
if self.songmanager.save_topic(topic): if self.songmanager.save_topic(topic):
self.resetTopics() self.resetTopics()
else: else:
@ -219,9 +214,8 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog):
self.bookform.NameEdit.setText(book.name) self.bookform.NameEdit.setText(book.name)
self.bookform.PublisherEdit.setText(book.publisher) self.bookform.PublisherEdit.setText(book.publisher)
if self.bookform.exec_(False): if self.bookform.exec_(False):
book.name = unicode(self.bookform.NameEdit.text(), u'utf-8') book.name = unicode(self.bookform.NameEdit.text())
book.publisher = unicode( book.publisher = unicode(self.bookform.PublisherEdit.text())
self.bookform.PublisherEdit.text(), u'utf-8')
if self.songmanager.save_book(book): if self.songmanager.save_book(book):
self.resetBooks() self.resetBooks()
else: else:

View File

@ -29,3 +29,4 @@ from mediaitem import SongMediaItem
from sofimport import SofImport from sofimport import SofImport
from oooimport import OooImport from oooimport import OooImport
from songimport import SongImport from songimport import SongImport

View File

@ -23,21 +23,7 @@
# Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Temple Place, Suite 330, Boston, MA 02111-1307 USA #
############################################################################### ###############################################################################
class BaseModel(object): from openlp.core.lib import BaseModel
"""
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 Author(BaseModel): class Author(BaseModel):
""" """

View File

@ -26,6 +26,7 @@
import logging import logging
from PyQt4 import QtCore from PyQt4 import QtCore
from sqlalchemy.exceptions import InvalidRequestError
from openlp.core.utils import AppLocation from openlp.core.utils import AppLocation
from openlp.plugins.songs.lib.models import init_models, metadata, Song, \ from openlp.plugins.songs.lib.models import init_models, metadata, Song, \
@ -161,7 +162,7 @@ class SongManager(object):
self.session.add(song) self.session.add(song)
self.session.commit() self.session.commit()
return True return True
except: except InvalidRequestError:
log.exception(u'Could not save song to song database') log.exception(u'Could not save song to song database')
self.session.rollback() self.session.rollback()
return False return False
@ -172,7 +173,7 @@ class SongManager(object):
self.session.delete(song) self.session.delete(song)
self.session.commit() self.session.commit()
return True return True
except: except InvalidRequestError:
self.session.rollback() self.session.rollback()
log.exception(u'Could not delete song from song database') log.exception(u'Could not delete song from song database')
return False return False
@ -203,7 +204,7 @@ class SongManager(object):
self.session.add(author) self.session.add(author)
self.session.commit() self.session.commit()
return True return True
except: except InvalidRequestError:
self.session.rollback() self.session.rollback()
log.exception(u'Could not save author to song database') log.exception(u'Could not save author to song database')
return False return False
@ -217,7 +218,7 @@ class SongManager(object):
self.session.delete(author) self.session.delete(author)
self.session.commit() self.session.commit()
return True return True
except: except InvalidRequestError:
self.session.rollback() self.session.rollback()
log.exception(u'Could not delete author from song database') log.exception(u'Could not delete author from song database')
return False return False
@ -248,7 +249,7 @@ class SongManager(object):
self.session.add(topic) self.session.add(topic)
self.session.commit() self.session.commit()
return True return True
except: except InvalidRequestError:
self.session.rollback() self.session.rollback()
log.exception(u'Could not save topic to song database') log.exception(u'Could not save topic to song database')
return False return False
@ -262,7 +263,7 @@ class SongManager(object):
self.session.delete(topic) self.session.delete(topic)
self.session.commit() self.session.commit()
return True return True
except: except InvalidRequestError:
self.session.rollback() self.session.rollback()
log.exception(u'Could not delete topic from song database') log.exception(u'Could not delete topic from song database')
return False return False
@ -293,7 +294,7 @@ class SongManager(object):
self.session.add(book) self.session.add(book)
self.session.commit() self.session.commit()
return True return True
except: except InvalidRequestError:
self.session.rollback() self.session.rollback()
log.exception(u'Could not save book to song database') log.exception(u'Could not save book to song database')
return False return False
@ -307,10 +308,11 @@ class SongManager(object):
self.session.delete(book) self.session.delete(book)
self.session.commit() self.session.commit()
return True return True
except: except InvalidRequestError:
self.session.rollback() self.session.rollback()
log.exception(u'Could not delete book from song database') log.exception(u'Could not delete book from song database')
return False return False
def get_songs_for_theme(self, theme): def get_songs_for_theme(self, theme):
return self.session.query(Song).filter(Song.theme_name == theme).all() return self.session.query(Song).filter(Song.theme_name == theme).all()

View File

@ -196,12 +196,7 @@ class SongMediaItem(MediaManagerItem):
if author_list != u'': if author_list != u'':
author_list = author_list + u', ' author_list = author_list + u', '
author_list = author_list + author.display_name author_list = author_list + author.display_name
if not isinstance(author_list, unicode): song_title = unicode(song.title)
author_list = unicode(author_list, u'utf8')
if isinstance(song.title, unicode):
song_title = song.title
else:
song_title = unicode(song.title, u'utf8')
song_detail = u'%s (%s)' % (song_title, author_list) song_detail = u'%s (%s)' % (song_title, author_list)
song_name = QtGui.QListWidgetItem(song_detail) song_name = QtGui.QListWidgetItem(song_detail)
song_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(song.id)) song_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(song.id))
@ -213,8 +208,8 @@ class SongMediaItem(MediaManagerItem):
for author in searchresults: for author in searchresults:
for song in author.songs: for song in author.songs:
song_detail = unicode( song_detail = unicode(
translate(u'SongsPlugin.MediaItem', u'%s (%s)' % \ translate(u'SongsPlugin.MediaItem', u'%s (%s)') %
(unicode(author.display_name), unicode(song.title)))) (author.display_name, song.title))
song_name = QtGui.QListWidgetItem(song_detail) song_name = QtGui.QListWidgetItem(song_detail)
song_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(song.id)) song_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(song.id))
self.ListView.addItem(song_name) self.ListView.addItem(song_name)
@ -347,21 +342,12 @@ class SongMediaItem(MediaManagerItem):
if len(order) == 0: if len(order) == 0:
break break
for verse in verseList: for verse in verseList:
if verse[1]: if verse[0][u'label'] == order[1:] and \
if verse[0][u'type'] == "Verse" \ verse[0][u'type'][0] == order[0]:
or verse[0][u'type'] == "Chorus": verseTag = u'%s:%s' % \
if verse[0][u'label'] == order[1:] and \ (verse[0][u'type'], verse[0][u'label'])
verse[0][u'type'][0] == order[0]: service_item.add_from_text\
verseTag = u'%s:%s' % \ (verse[1][:30], verse[1], verseTag)
(verse[0][u'type'], verse[0][u'label'])
service_item.add_from_text\
(verse[1][:30], verse[1], verseTag)
else:
if verse[0][u'type'][0] == order[0]:
verseTag = u'%s:%s' % \
(verse[0][u'type'], verse[0][u'label'])
service_item.add_from_text\
(verse[1][:30], verse[1], verseTag)
else: else:
verses = song.lyrics.split(u'\n\n') verses = song.lyrics.split(u'\n\n')
for slide in verses: for slide in verses:

View File

@ -33,15 +33,16 @@ from openlp.plugins.songs.lib.classes import *
def init_models(url): def init_models(url):
engine = create_engine(url) engine = create_engine(url)
metadata.bind = engine metadata.bind = engine
session = scoped_session(sessionmaker(autoflush=False, session = scoped_session(sessionmaker(autoflush=False, autocommit=False,
autocommit=False, bind=engine)) bind=engine))
mapper(Author, authors_table) mapper(Author, authors_table)
mapper(Book, song_books_table) mapper(Book, song_books_table)
mapper(Song, songs_table, mapper(Song, songs_table,
properties={'authors': relation(Author, backref='songs', properties={'authors': relation(Author, backref='songs',
secondary=authors_songs_table), secondary=authors_songs_table),
'book': relation(Book, backref='songs'), 'book': relation(Book, backref='songs'),
'topics': relation(Topic, backref='songs', 'topics': relation(Topic, backref='songs',
secondary=songs_topics_table)}) secondary=songs_topics_table)})
mapper(Topic, topics_table) mapper(Topic, topics_table)
return session return session

View File

@ -24,7 +24,9 @@
############################################################################### ###############################################################################
import os import os
from PyQt4 import QtCore from PyQt4 import QtCore
from songimport import SongImport from songimport import SongImport
if os.name == u'nt': if os.name == u'nt':
@ -35,9 +37,11 @@ if os.name == u'nt':
else: else:
try: try:
import uno import uno
from com.sun.star.style.BreakType import PAGE_BEFORE, PAGE_AFTER, PAGE_BOTH from com.sun.star.style.BreakType import PAGE_BEFORE, PAGE_AFTER, \
except: PAGE_BOTH
except ImportError:
pass pass
class OooImport(object): class OooImport(object):
""" """
Import songs from Impress/Powerpoint docs using Impress Import songs from Impress/Powerpoint docs using Impress
@ -75,7 +79,8 @@ class OooImport(object):
""" """
if os.name == u'nt': if os.name == u'nt':
self.start_ooo_process() self.start_ooo_process()
self.desktop = self.manager.createInstance(u'com.sun.star.frame.Desktop') self.desktop = self.manager.createInstance(
u'com.sun.star.frame.Desktop')
else: else:
context = uno.getComponentContext() context = uno.getComponentContext()
resolver = context.ServiceManager.createInstanceWithContext( resolver = context.ServiceManager.createInstanceWithContext(
@ -101,8 +106,8 @@ class OooImport(object):
self.manager._FlagAsMethod(u'Bridge_GetStruct') self.manager._FlagAsMethod(u'Bridge_GetStruct')
self.manager._FlagAsMethod(u'Bridge_GetValueObject') self.manager._FlagAsMethod(u'Bridge_GetValueObject')
else: else:
cmd = u'openoffice.org -nologo -norestore -minimized -invisible ' \ cmd = u'openoffice.org -nologo -norestore -minimized ' \
+ u'-nofirststartwizard ' \ + u'-invisible -nofirststartwizard ' \
+ '-accept="socket,host=localhost,port=2002;urp;"' + '-accept="socket,host=localhost,port=2002;urp;"'
process = QtCore.QProcess() process = QtCore.QProcess()
process.startDetached(cmd) process.startDetached(cmd)

View File

@ -29,20 +29,21 @@ from PyQt4 import QtGui
from openlp.core.lib import SongXMLBuilder from openlp.core.lib import SongXMLBuilder
from openlp.plugins.songs.lib.models import Song, Author, Topic, Book from openlp.plugins.songs.lib.models import Song, Author, Topic, Book
from openlp.plugins.songs.forms import VerseType
class SongImport(object): class SongImport(object):
""" """
Helper class for import a song from a third party source into OpenLP Helper class for import a song from a third party source into OpenLP
This class just takes the raw strings, and will work out for itself This class just takes the raw strings, and will work out for itself
whether the authors etc already exist and add them or refer to them whether the authors etc already exist and add them or refer to them
as necessary as necessary
""" """
def __init__(self, song_manager): def __init__(self, song_manager):
""" """
Initialise and create defaults for properties Initialise and create defaults for properties
song_manager is an instance of a SongManager, through which all song_manager is an instance of a SongManager, through which all
database access is performed database access is performed
""" """
@ -53,13 +54,13 @@ class SongImport(object):
self.copyright = u'' self.copyright = u''
self.comment = u'' self.comment = u''
self.theme_name = u'' self.theme_name = u''
self.ccli_number = u'' self.ccli_number = u''
self.authors = [] self.authors = []
self.topics = [] self.topics = []
self.song_book_name = u'' self.song_book_name = u''
self.song_book_pub = u'' self.song_book_pub = u''
self.verse_order_list = [] self.verse_order_list = []
self.verses = [] self.verses = []
self.versecount = 0 self.versecount = 0
self.choruscount = 0 self.choruscount = 0
self.copyright_string = unicode(QtGui.QApplication.translate( \ self.copyright_string = unicode(QtGui.QApplication.translate( \
@ -128,39 +129,39 @@ class SongImport(object):
copyright_found = True copyright_found = True
self.add_copyright(line) self.add_copyright(line)
else: else:
self.parse_author(line) self.parse_author(line)
return return
if len(lines) == 1: if len(lines) == 1:
self.parse_author(lines[0]) self.parse_author(lines[0])
return return
if not self.get_title(): if not self.get_title():
self.set_title(lines[0]) self.set_title(lines[0])
self.add_verse(text) self.add_verse(text)
def get_title(self): def get_title(self):
""" """
Return the title Return the title
""" """
return self.title return self.title
def get_copyright(self): def get_copyright(self):
""" """
Return the copyright Return the copyright
""" """
return self.copyright return self.copyright
def get_song_number(self): def get_song_number(self):
""" """
Return the song number Return the song number
""" """
return self.song_number return self.song_number
def set_title(self, title): def set_title(self, title):
""" """
Set the title Set the title
""" """
self.title = title self.title = title
def set_alternate_title(self, title): def set_alternate_title(self, title):
""" """
Set the alternate title Set the alternate title
@ -168,11 +169,11 @@ class SongImport(object):
self.alternate_title = title self.alternate_title = title
def set_song_number(self, song_number): def set_song_number(self, song_number):
""" """
Set the song number Set the song number
""" """
self.song_number = song_number self.song_number = song_number
def set_song_book(self, song_book, publisher): def set_song_book(self, song_book, publisher):
""" """
Set the song book name and publisher Set the song book name and publisher
@ -181,7 +182,7 @@ class SongImport(object):
self.song_book_pub = publisher self.song_book_pub = publisher
def add_copyright(self, copyright): def add_copyright(self, copyright):
""" """
Build the copyright field Build the copyright field
""" """
if self.copyright.find(copyright) >= 0: if self.copyright.find(copyright) >= 0:
@ -194,7 +195,7 @@ class SongImport(object):
""" """
Add the author. OpenLP stores them individually so split by 'and', '&' Add the author. OpenLP stores them individually so split by 'and', '&'
and comma. and comma.
However need to check for "Mr and Mrs Smith" and turn it to However need to check for "Mr and Mrs Smith" and turn it to
"Mr Smith" and "Mrs Smith". "Mr Smith" and "Mrs Smith".
""" """
for author in text.split(u','): for author in text.split(u','):
@ -210,13 +211,13 @@ class SongImport(object):
self.add_author(author2) self.add_author(author2)
def add_author(self, author): def add_author(self, author):
""" """
Add an author to the list Add an author to the list
""" """
if author in self.authors: if author in self.authors:
return return
self.authors.append(author) self.authors.append(author)
def add_verse(self, verse, versetag=None): def add_verse(self, verse, versetag=None):
""" """
Add a verse. This is the whole verse, lines split by \n Add a verse. This is the whole verse, lines split by \n
@ -224,7 +225,7 @@ class SongImport(object):
choruses itself) or None, where it will assume verse choruses itself) or None, where it will assume verse
It will also attempt to detect duplicates. In this case it will just It will also attempt to detect duplicates. In this case it will just
add to the verse order add to the verse order
""" """
for (oldversetag, oldverse) in self.verses: for (oldversetag, oldverse) in self.verses:
if oldverse.strip() == verse.strip(): if oldverse.strip() == verse.strip():
self.verse_order_list.append(oldversetag) self.verse_order_list.append(oldversetag)
@ -253,22 +254,22 @@ class SongImport(object):
def check_complete(self): def check_complete(self):
""" """
Check the mandatory fields are entered (i.e. title and a verse) Check the mandatory fields are entered (i.e. title and a verse)
Author not checked here, if no author then "Author unknown" is Author not checked here, if no author then "Author unknown" is
automatically added automatically added
""" """
if self.title == u'' or len(self.verses) == 0: if self.title == u'' or len(self.verses) == 0:
return False return False
else: else:
return True return True
def remove_punctuation(self, text): def remove_punctuation(self, text):
""" """
Remove punctuation from the string for searchable fields Remove punctuation from the string for searchable fields
""" """
for character in string.punctuation: for character in string.punctuation:
text = text.replace(character, u'') text = text.replace(character, u'')
return text return text
def finish(self): def finish(self):
""" """
All fields have been set to this song. Write it away All fields have been set to this song. Write it away
@ -277,7 +278,7 @@ class SongImport(object):
self.authors.append(u'Author unknown') self.authors.append(u'Author unknown')
self.commit_song() self.commit_song()
#self.print_song() #self.print_song()
def commit_song(self): def commit_song(self):
""" """
Write the song and it's fields to disk Write the song and it's fields to disk
@ -293,27 +294,27 @@ class SongImport(object):
sxml.add_lyrics_to_song() sxml.add_lyrics_to_song()
for (versetag, versetext) in self.verses: for (versetag, versetext) in self.verses:
if versetag[0] == u'C': if versetag[0] == u'C':
versetype = u'Chorus' versetype = VerseType.to_string(VerseType.Chorus)
elif versetag[0] == u'V': elif versetag[0] == u'V':
versetype = u'Verse' versetype = VerseType.to_string(VerseType.Verse)
elif versetag[0] == u'B': elif versetag[0] == u'B':
versetype = u'Bridge' versetype = VerseType.to_string(VerseType.Bridge)
elif versetag[0] == u'I': elif versetag[0] == u'I':
versetype = u'Intro' versetype = VerseType.to_string(VerseType.Intro)
elif versetag[0] == u'P': elif versetag[0] == u'P':
versetype = u'Prechorus' versetype = VerseType.to_string(VerseType.PreChorus)
elif versetag[0] == u'E': elif versetag[0] == u'E':
versetype = u'Ending' versetype = VerseType.to_string(VerseType.Ending)
else: else:
versetype = u'Other' versetype = VerseType.to_string(VerseType.Other)
sxml.add_verse_to_lyrics(versetype, versetag[1:], versetext) sxml.add_verse_to_lyrics(versetype, versetag[1:], versetext)
song.search_lyrics += u' ' + self.remove_punctuation(versetext) song.search_lyrics += u' ' + self.remove_punctuation(versetext)
song.lyrics = unicode(sxml.extract_xml(), u'utf-8') song.lyrics = unicode(sxml.extract_xml(), u'utf-8')
song.verse_order = u' '.join(self.verse_order_list) song.verse_order = u' '.join(self.verse_order_list)
song.copyright = self.copyright song.copyright = self.copyright
song.comment = self.comment song.comment = self.comment
song.theme_name = self.theme_name song.theme_name = self.theme_name
song.ccli_number = self.ccli_number song.ccli_number = self.ccli_number
for authortext in self.authors: for authortext in self.authors:
author = self.manager.get_author_by_name(authortext) author = self.manager.get_author_by_name(authortext)
if author is None: if author is None:
@ -339,15 +340,15 @@ class SongImport(object):
self.manager.save_topic(topic) self.manager.save_topic(topic)
song.topics.append(topictext) song.topics.append(topictext)
self.manager.save_song(song) self.manager.save_song(song)
def print_song(self): def print_song(self):
""" """
For debugging For debugging
""" """
print u'========================================' \ print u'========================================' \
+ u'========================================' + u'========================================'
print u'TITLE: ' + self.title print u'TITLE: ' + self.title
print u'ALT TITLE: ' + self.alternate_title print u'ALT TITLE: ' + self.alternate_title
for (versetag, versetext) in self.verses: for (versetag, versetext) in self.verses:
print u'VERSE ' + versetag + u': ' + versetext print u'VERSE ' + versetag + u': ' + versetext
print u'ORDER: ' + u' '.join(self.verse_order_list) print u'ORDER: ' + u' '.join(self.verse_order_list)
@ -361,7 +362,7 @@ class SongImport(object):
print u'BOOK PUBLISHER: ' + self.song_book_pub print u'BOOK PUBLISHER: ' + self.song_book_pub
if self.song_number: if self.song_number:
print u'NUMBER: ' + self.song_number print u'NUMBER: ' + self.song_number
for topictext in self.topics: for topictext in self.topics:
print u'TOPIC: ' + topictext print u'TOPIC: ' + topictext
if self.comment: if self.comment:
print u'COMMENT: ' + self.comment print u'COMMENT: ' + self.comment
@ -369,5 +370,5 @@ class SongImport(object):
print u'THEME: ' + self.theme_name print u'THEME: ' + self.theme_name
if self.ccli_number: if self.ccli_number:
print u'CCLI: ' + self.ccli_number print u'CCLI: ' + self.ccli_number

View File

@ -60,7 +60,7 @@ class SongFeatureError(SongException):
# TODO: Song: Import ChangingSong # TODO: Song: Import ChangingSong
# TODO: Song: Export ChangingSong # TODO: Song: Export ChangingSong
_blankOpenSongXml = \ _BLANK_OPENSONG_XML = \
'''<?xml version="1.0" encoding="UTF-8"?> '''<?xml version="1.0" encoding="UTF-8"?>
<song> <song>
<title></title> <title></title>
@ -84,7 +84,7 @@ class _OpenSong(XmlRootClass):
def _reset(self): def _reset(self):
"""Reset all song attributes""" """Reset all song attributes"""
self._setFromXml(_blankOpenSongXml, 'song') self._setFromXml(_BLANK_OPENSONG_XML, 'song')
def from_buffer(self, xmlContent): def from_buffer(self, xmlContent):
"""Initialize from buffer(string) with xml content""" """Initialize from buffer(string) with xml content"""
@ -288,7 +288,7 @@ class Song(object):
osfile.close() osfile.close()
xml = "".join(list) xml = "".join(list)
self.from_opensong_buffer(xml) self.from_opensong_buffer(xml)
except: except IOError:
log.exception(u'Failed to load opensong xml file') log.exception(u'Failed to load opensong xml file')
finally: finally:
if osfile: if osfile:
@ -394,7 +394,7 @@ class Song(object):
ccli_file = open(textFileName, 'r') ccli_file = open(textFileName, 'r')
lines = [orgline.rstrip() for orgline in ccli_file] lines = [orgline.rstrip() for orgline in ccli_file]
self.from_ccli_text_buffer(lines) self.from_ccli_text_buffer(lines)
except: except IOError:
log.exception(u'Failed to load CCLI text file') log.exception(u'Failed to load CCLI text file')
finally: finally:
if ccli_file: if ccli_file:

View File

@ -24,6 +24,7 @@
############################################################################### ###############################################################################
from lxml import objectify from lxml import objectify
from lxml.etree import XMLSyntaxError
class LyricsXML(object): class LyricsXML(object):
""" """
@ -73,7 +74,7 @@ class LyricsXML(object):
}) })
self.lyrics.append(language) self.lyrics.append(language)
return True return True
except: except XMLSyntaxError:
return False return False
def extract(self, text): def extract(self, text):

View File

@ -86,7 +86,7 @@ class SongUsageDetailForm(QtGui.QDialog, Ui_SongUsageDetailDialog):
(instance.usagedate,instance.usagetime, instance.title, (instance.usagedate,instance.usagetime, instance.title,
instance.copyright, instance.ccl_number , instance.authors) instance.copyright, instance.ccl_number , instance.authors)
file.write(record) file.write(record)
except: except IOError:
log.exception(u'Failed to write out song usage records') log.exception(u'Failed to write out song usage records')
finally: finally:
if file: if file:

View File

@ -23,21 +23,7 @@
# Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Temple Place, Suite 330, Boston, MA 02111-1307 USA #
############################################################################### ###############################################################################
class BaseModel(object): from openlp.core.lib import BaseModel
"""
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 SongUsageItem(BaseModel): class SongUsageItem(BaseModel):
""" """

View File

@ -26,6 +26,7 @@
import logging import logging
from PyQt4 import QtCore from PyQt4 import QtCore
from sqlalchemy.exceptions import InvalidRequestError
from openlp.core.utils import AppLocation from openlp.core.utils import AppLocation
from openlp.plugins.songusage.lib.models import init_models, metadata, \ from openlp.plugins.songusage.lib.models import init_models, metadata, \
@ -87,7 +88,7 @@ class SongUsageManager(object):
self.session.add(songusageitem) self.session.add(songusageitem)
self.session.commit() self.session.commit()
return True return True
except: except InvalidRequestError:
self.session.rollback() self.session.rollback()
log.exception(u'SongUsage item failed to save') log.exception(u'SongUsage item failed to save')
return False return False
@ -111,7 +112,7 @@ class SongUsageManager(object):
self.session.delete(songusageitem) self.session.delete(songusageitem)
self.session.commit() self.session.commit()
return True return True
except: except InvalidRequestError:
self.session.rollback() self.session.rollback()
log.exception(u'SongUsage Item failed to delete') log.exception(u'SongUsage Item failed to delete')
return False return False
@ -126,7 +127,7 @@ class SongUsageManager(object):
self.session.query(SongUsageItem).delete(synchronize_session=False) self.session.query(SongUsageItem).delete(synchronize_session=False)
self.session.commit() self.session.commit()
return True return True
except: except InvalidRequestError:
self.session.rollback() self.session.rollback()
log.exception(u'Failed to delete all Song Usage items') log.exception(u'Failed to delete all Song Usage items')
return False return False
@ -141,7 +142,8 @@ class SongUsageManager(object):
.delete(synchronize_session=False) .delete(synchronize_session=False)
self.session.commit() self.session.commit()
return True return True
except: except InvalidRequestError:
self.session.rollback() self.session.rollback()
log.exception(u'Failed to delete all Song Usage items to %s' % date) log.exception(u'Failed to delete all Song Usage items to %s' % date)
return False return False

View File

@ -34,6 +34,6 @@ def init_models(url):
engine = create_engine(url) engine = create_engine(url)
metadata.bind = engine metadata.bind = engine
session = scoped_session(sessionmaker(autoflush=True, autocommit=False, session = scoped_session(sessionmaker(autoflush=True, autocommit=False,
bind=engine)) bind=engine))
mapper(SongUsageItem, songusage_table) mapper(SongUsageItem, songusage_table)
return session return session

3098
resources/i18n/openlp_et.ts Normal file

File diff suppressed because it is too large Load Diff