forked from openlp/openlp
Head r860
This commit is contained in:
commit
91c0fcb9e7
@ -55,9 +55,10 @@ def translate(context, text, comment=None):
|
|||||||
|
|
||||||
def get_text_file_string(text_file):
|
def get_text_file_string(text_file):
|
||||||
"""
|
"""
|
||||||
Open a file and return the contents of the file. If the supplied file name
|
Open a file and return its content as unicode string. If the supplied file
|
||||||
is not a file then the function returns False. If there is an error
|
name is not a file then the function returns False. If there is an error
|
||||||
loading the file then the function will return None.
|
loading the file or the content can't be decoded then the function will
|
||||||
|
return None.
|
||||||
|
|
||||||
``textfile``
|
``textfile``
|
||||||
The name of the file.
|
The name of the file.
|
||||||
@ -68,8 +69,9 @@ def get_text_file_string(text_file):
|
|||||||
content_string = None
|
content_string = None
|
||||||
try:
|
try:
|
||||||
file_handle = open(text_file, u'r')
|
file_handle = open(text_file, u'r')
|
||||||
content_string = file_handle.read()
|
content = file_handle.read()
|
||||||
except IOError:
|
content_string = content.decode(u'utf-8')
|
||||||
|
except (IOError, UnicodeError):
|
||||||
log.exception(u'Failed to open text file %s' % text_file)
|
log.exception(u'Failed to open text file %s' % text_file)
|
||||||
finally:
|
finally:
|
||||||
if file_handle:
|
if file_handle:
|
||||||
@ -98,11 +100,10 @@ def build_icon(icon):
|
|||||||
The icon to build. This can be a QIcon, a resource string in the form
|
The icon to build. This can be a QIcon, a resource string in the form
|
||||||
``:/resource/file.png``, or a file location like ``/path/to/file.png``.
|
``:/resource/file.png``, or a file location like ``/path/to/file.png``.
|
||||||
"""
|
"""
|
||||||
button_icon = None
|
button_icon = QtGui.QIcon()
|
||||||
if isinstance(icon, QtGui.QIcon):
|
if isinstance(icon, QtGui.QIcon):
|
||||||
button_icon = icon
|
button_icon = icon
|
||||||
elif isinstance(icon, basestring):
|
elif isinstance(icon, basestring):
|
||||||
button_icon = QtGui.QIcon()
|
|
||||||
if icon.startswith(u':/'):
|
if icon.startswith(u':/'):
|
||||||
button_icon.addPixmap(QtGui.QPixmap(icon), QtGui.QIcon.Normal,
|
button_icon.addPixmap(QtGui.QPixmap(icon), QtGui.QIcon.Normal,
|
||||||
QtGui.QIcon.Off)
|
QtGui.QIcon.Off)
|
||||||
@ -110,7 +111,6 @@ def build_icon(icon):
|
|||||||
button_icon.addPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(icon)),
|
button_icon.addPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(icon)),
|
||||||
QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||||
elif isinstance(icon, QtGui.QImage):
|
elif isinstance(icon, QtGui.QImage):
|
||||||
button_icon = QtGui.QIcon()
|
|
||||||
button_icon.addPixmap(QtGui.QPixmap.fromImage(icon),
|
button_icon.addPixmap(QtGui.QPixmap.fromImage(icon),
|
||||||
QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||||
return button_icon
|
return button_icon
|
||||||
|
@ -96,9 +96,8 @@ class ThemeXML(object):
|
|||||||
The path name to be added.
|
The path name to be added.
|
||||||
"""
|
"""
|
||||||
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.strip()
|
||||||
self.background_filename = \
|
self.background_filename = self.background_filename.strip()
|
||||||
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)
|
||||||
|
|
||||||
@ -334,13 +333,13 @@ class ThemeXML(object):
|
|||||||
Pull out the XML string.
|
Pull out the XML string.
|
||||||
"""
|
"""
|
||||||
# Print our newly created XML
|
# Print our newly created XML
|
||||||
return self.theme_xml.toxml()
|
return self.theme_xml.toxml(u'utf-8').decode(u'utf-8')
|
||||||
|
|
||||||
def extract_formatted_xml(self):
|
def extract_formatted_xml(self):
|
||||||
"""
|
"""
|
||||||
Pull out the XML string formatted for human consumption
|
Pull out the XML string formatted for human consumption
|
||||||
"""
|
"""
|
||||||
return self.theme_xml.toprettyxml(indent=u' ', newl=u'\n')
|
return self.theme_xml.toprettyxml(indent=u' ', newl=u'\n', encoding=u'utf-8')
|
||||||
|
|
||||||
def parse(self, xml):
|
def parse(self, xml):
|
||||||
"""
|
"""
|
||||||
@ -365,11 +364,12 @@ class ThemeXML(object):
|
|||||||
``xml``
|
``xml``
|
||||||
The XML string to parse.
|
The XML string to parse.
|
||||||
"""
|
"""
|
||||||
theme_xml = ElementTree(element=XML(xml))
|
theme_xml = ElementTree(element=XML(xml.encode(u'ascii', u'xmlcharrefreplace')))
|
||||||
xml_iter = theme_xml.getiterator()
|
xml_iter = theme_xml.getiterator()
|
||||||
master = u''
|
master = u''
|
||||||
for element in xml_iter:
|
for element in xml_iter:
|
||||||
element.text = unicode(element.text).decode('unicode-escape')
|
if not isinstance(element.text, unicode):
|
||||||
|
element.text = unicode(str(element.text), u'utf-8')
|
||||||
if element.getchildren():
|
if element.getchildren():
|
||||||
master = element.tag + u'_'
|
master = element.tag + u'_'
|
||||||
else:
|
else:
|
||||||
|
@ -72,9 +72,6 @@ class OpenLPToolbar(QtGui.QToolBar):
|
|||||||
ToolbarButton = None
|
ToolbarButton = None
|
||||||
if icon:
|
if icon:
|
||||||
ButtonIcon = build_icon(icon)
|
ButtonIcon = build_icon(icon)
|
||||||
else:
|
|
||||||
ButtonIcon = None
|
|
||||||
if ButtonIcon:
|
|
||||||
if slot and not checkable:
|
if slot and not checkable:
|
||||||
ToolbarButton = self.addAction(ButtonIcon, title, slot)
|
ToolbarButton = self.addAction(ButtonIcon, title, slot)
|
||||||
else:
|
else:
|
||||||
|
@ -175,7 +175,7 @@ class Theme(object):
|
|||||||
``xml``
|
``xml``
|
||||||
The data to apply to the theme
|
The data to apply to the theme
|
||||||
"""
|
"""
|
||||||
root = ElementTree(element=XML(xml))
|
root = ElementTree(element=XML(xml.encode(u'ascii', u'xmlcharrefreplace')))
|
||||||
xml_iter = root.getiterator()
|
xml_iter = root.getiterator()
|
||||||
for element in xml_iter:
|
for element in xml_iter:
|
||||||
delphi_color_change = False
|
delphi_color_change = False
|
||||||
|
@ -750,158 +750,153 @@ class Ui_AmendThemeDialog(object):
|
|||||||
|
|
||||||
def retranslateUi(self, AmendThemeDialog):
|
def retranslateUi(self, AmendThemeDialog):
|
||||||
AmendThemeDialog.setWindowTitle(
|
AmendThemeDialog.setWindowTitle(
|
||||||
translate(u'AmendThemeForm', u'Theme Maintenance'))
|
translate('AmendThemeForm', 'Theme Maintenance'))
|
||||||
self.ThemeNameLabel.setText(
|
self.ThemeNameLabel.setText(
|
||||||
translate(u'AmendThemeForm', u'Theme Name:'))
|
translate('AmendThemeForm', 'Theme Name:'))
|
||||||
self.BackgroundLabel.setText(
|
self.BackgroundLabel.setText(
|
||||||
translate(u'AmendThemeForm', u'Background:'))
|
translate('AmendThemeForm', 'Visibility:'))
|
||||||
self.BackgroundComboBox.setItemText(0,
|
self.BackgroundComboBox.setItemText(0,
|
||||||
translate(u'AmendThemeForm', u'Opaque'))
|
translate('AmendThemeForm', 'Opaque'))
|
||||||
self.BackgroundComboBox.setItemText(1,
|
self.BackgroundComboBox.setItemText(1,
|
||||||
translate(u'AmendThemeForm', u'Transparent'))
|
translate('AmendThemeForm', 'Transparent'))
|
||||||
self.BackgroundTypeLabel.setText(
|
self.BackgroundTypeLabel.setText(
|
||||||
translate(u'AmendThemeForm', u'Background Type:'))
|
translate('AmendThemeForm', 'Type:'))
|
||||||
self.BackgroundTypeComboBox.setItemText(0,
|
self.BackgroundTypeComboBox.setItemText(0,
|
||||||
translate(u'AmendThemeForm', u'Solid Color'))
|
translate('AmendThemeForm', 'Solid Color'))
|
||||||
self.BackgroundTypeComboBox.setItemText(1,
|
self.BackgroundTypeComboBox.setItemText(1,
|
||||||
translate(u'AmendThemeForm', u'Gradient'))
|
translate('AmendThemeForm', 'Gradient'))
|
||||||
self.BackgroundTypeComboBox.setItemText(2,
|
self.BackgroundTypeComboBox.setItemText(2,
|
||||||
translate(u'AmendThemeForm', u'Image'))
|
translate('AmendThemeForm', 'Image'))
|
||||||
self.Color1Label.setText(translate(u'AmendThemeForm', u'<Color1>'))
|
self.Color1Label.setText(u'<Color1>:')
|
||||||
self.Color2Label.setText(translate(u'AmendThemeForm', u'<Color2>'))
|
self.Color2Label.setText(u'<Color2>:')
|
||||||
self.ImageLabel.setText(translate(u'AmendThemeForm', u'Image:'))
|
self.ImageLabel.setText(translate('AmendThemeForm', 'Image:'))
|
||||||
self.GradientLabel.setText(translate(u'AmendThemeForm', u'Gradient :'))
|
self.GradientLabel.setText(translate('AmendThemeForm', 'Gradient:'))
|
||||||
self.GradientComboBox.setItemText(0,
|
self.GradientComboBox.setItemText(0,
|
||||||
translate(u'AmendThemeForm', u'Horizontal'))
|
translate('AmendThemeForm', 'Horizontal'))
|
||||||
self.GradientComboBox.setItemText(1,
|
self.GradientComboBox.setItemText(1,
|
||||||
translate(u'AmendThemeForm', u'Vertical'))
|
translate('AmendThemeForm', 'Vertical'))
|
||||||
self.GradientComboBox.setItemText(2,
|
self.GradientComboBox.setItemText(2,
|
||||||
translate(u'AmendThemeForm', u'Circular'))
|
translate('AmendThemeForm', 'Circular'))
|
||||||
self.ThemeTabWidget.setTabText(
|
self.ThemeTabWidget.setTabText(
|
||||||
self.ThemeTabWidget.indexOf(self.BackgroundTab),
|
self.ThemeTabWidget.indexOf(self.BackgroundTab),
|
||||||
translate(u'AmendThemeForm', u'Background'))
|
translate('AmendThemeForm', '&Background'))
|
||||||
self.FontMainGroupBox.setTitle(
|
self.FontMainGroupBox.setTitle(
|
||||||
translate(u'AmendThemeForm', u'Main Font'))
|
translate('AmendThemeForm', 'Main Font'))
|
||||||
self.FontMainlabel.setText(translate(u'AmendThemeForm', u'Font:'))
|
self.FontMainlabel.setText(translate('AmendThemeForm', 'Font:'))
|
||||||
self.FontMainColorLabel.setText(
|
self.FontMainColorLabel.setText(
|
||||||
translate(u'AmendThemeForm', u'Font Color:'))
|
translate('AmendThemeForm', 'Color:'))
|
||||||
self.FontMainSize.setText(translate(u'AmendThemeForm', u'Size:'))
|
self.FontMainSize.setText(translate('AmendThemeForm', 'Size:'))
|
||||||
self.FontMainSizeSpinBox.setSuffix(translate(u'AmendThemeForm', u'pt'))
|
self.FontMainSizeSpinBox.setSuffix(translate('AmendThemeForm', 'pt'))
|
||||||
self.FontMainWrapIndentationLabel.setText(
|
self.FontMainWrapIndentationLabel.setText(
|
||||||
translate(u'AmendThemeForm', u'Wrap Indentation'))
|
translate('AmendThemeForm', 'Wrap indentation:'))
|
||||||
self.FontMainWrapLineAdjustmentLabel.setText(
|
self.FontMainWrapLineAdjustmentLabel.setText(
|
||||||
translate(u'AmendThemeForm', u'Adjust Line Spacing'))
|
translate('AmendThemeForm', 'Adjust line spacing:'))
|
||||||
self.FontMainWeightComboBox.setItemText(0,
|
self.FontMainWeightComboBox.setItemText(0,
|
||||||
translate(u'AmendThemeForm', u'Normal'))
|
translate('AmendThemeForm', 'Normal'))
|
||||||
self.FontMainWeightComboBox.setItemText(1,
|
self.FontMainWeightComboBox.setItemText(1,
|
||||||
translate(u'AmendThemeForm', u'Bold'))
|
translate('AmendThemeForm', 'Bold'))
|
||||||
self.FontMainWeightComboBox.setItemText(2,
|
self.FontMainWeightComboBox.setItemText(2,
|
||||||
translate(u'AmendThemeForm', u'Italics'))
|
translate('AmendThemeForm', 'Italics'))
|
||||||
self.FontMainWeightComboBox.setItemText(3,
|
self.FontMainWeightComboBox.setItemText(3,
|
||||||
translate(u'AmendThemeForm', u'Bold/Italics'))
|
translate('AmendThemeForm', 'Bold/Italics'))
|
||||||
self.FontMainWeightLabel.setText(
|
self.FontMainWeightLabel.setText(
|
||||||
translate(u'AmendThemeForm', u'Font Weight:'))
|
translate('AmendThemeForm', 'Style:'))
|
||||||
self.MainLocationGroupBox.setTitle(
|
self.MainLocationGroupBox.setTitle(
|
||||||
translate(u'AmendThemeForm', u'Display Location'))
|
translate('AmendThemeForm', 'Display Location'))
|
||||||
self.DefaultLocationLabel.setText(
|
self.DefaultLocationLabel.setText(
|
||||||
translate(u'AmendThemeForm', u'Use Default Location:'))
|
translate('AmendThemeForm', 'Use default location:'))
|
||||||
self.FontMainXLabel.setText(
|
self.FontMainXLabel.setText(
|
||||||
translate(u'AmendThemeForm', u'X Position:'))
|
translate('AmendThemeForm', 'X position:'))
|
||||||
self.FontMainYLabel.setText(
|
self.FontMainYLabel.setText(
|
||||||
translate(u'AmendThemeForm', u'Y Position:'))
|
translate('AmendThemeForm', 'Y position:'))
|
||||||
self.FontMainWidthLabel.setText(
|
self.FontMainWidthLabel.setText(
|
||||||
translate(u'AmendThemeForm', u'Width:'))
|
translate('AmendThemeForm', 'Width:'))
|
||||||
self.FontMainHeightLabel.setText(
|
self.FontMainHeightLabel.setText(
|
||||||
translate(u'AmendThemeForm', u'Height:'))
|
translate('AmendThemeForm', 'Height:'))
|
||||||
self.FontMainXSpinBox.setSuffix(translate(u'AmendThemeForm', u'px'))
|
self.FontMainXSpinBox.setSuffix(translate('AmendThemeForm', 'px'))
|
||||||
self.FontMainYSpinBox.setSuffix(translate(u'AmendThemeForm', u'px'))
|
self.FontMainYSpinBox.setSuffix(translate('AmendThemeForm', 'px'))
|
||||||
self.FontMainWidthSpinBox.setSuffix(translate(u'AmendThemeForm', u'px'))
|
self.FontMainWidthSpinBox.setSuffix(translate('AmendThemeForm', 'px'))
|
||||||
self.FontMainHeightSpinBox.setSuffix(
|
self.FontMainHeightSpinBox.setSuffix(translate('AmendThemeForm', 'px'))
|
||||||
translate(u'AmendThemeForm', u'px'))
|
|
||||||
self.ThemeTabWidget.setTabText(
|
self.ThemeTabWidget.setTabText(
|
||||||
self.ThemeTabWidget.indexOf(self.FontMainTab),
|
self.ThemeTabWidget.indexOf(self.FontMainTab),
|
||||||
translate(u'AmendThemeForm', u'Font Main'))
|
translate('AmendThemeForm', '&Main Font'))
|
||||||
self.FooterFontGroupBox.setTitle(
|
self.FooterFontGroupBox.setTitle(
|
||||||
translate(u'AmendThemeForm', u'Footer Font'))
|
translate('AmendThemeForm', 'Footer Font'))
|
||||||
self.FontFooterLabel.setText(translate(u'AmendThemeForm', u'Font:'))
|
self.FontFooterLabel.setText(translate('AmendThemeForm', 'Font:'))
|
||||||
self.FontFooterColorLabel.setText(
|
self.FontFooterColorLabel.setText(
|
||||||
translate(u'AmendThemeForm', u'Font Color:'))
|
translate('AmendThemeForm', 'Color:'))
|
||||||
self.FontFooterSizeLabel.setText(translate(u'AmendThemeForm', u'Size:'))
|
self.FontFooterSizeLabel.setText(translate('AmendThemeForm', 'Size:'))
|
||||||
self.FontFooterSizeSpinBox.setSuffix(
|
self.FontFooterSizeSpinBox.setSuffix(translate('AmendThemeForm', 'pt'))
|
||||||
translate(u'AmendThemeForm', u'pt'))
|
|
||||||
self.FontFooterWeightComboBox.setItemText(0,
|
self.FontFooterWeightComboBox.setItemText(0,
|
||||||
translate(u'AmendThemeForm', u'Normal'))
|
translate('AmendThemeForm', 'Normal'))
|
||||||
self.FontFooterWeightComboBox.setItemText(1,
|
self.FontFooterWeightComboBox.setItemText(1,
|
||||||
translate(u'AmendThemeForm', u'Bold'))
|
translate('AmendThemeForm', 'Bold'))
|
||||||
self.FontFooterWeightComboBox.setItemText(2,
|
self.FontFooterWeightComboBox.setItemText(2,
|
||||||
translate(u'AmendThemeForm', u'Italics'))
|
translate('AmendThemeForm', 'Italics'))
|
||||||
self.FontFooterWeightComboBox.setItemText(3,
|
self.FontFooterWeightComboBox.setItemText(3,
|
||||||
translate(u'AmendThemeForm', u'Bold/Italics'))
|
translate('AmendThemeForm', 'Bold/Italics'))
|
||||||
self.FontFooterWeightLabel.setText(
|
self.FontFooterWeightLabel.setText(
|
||||||
translate(u'AmendThemeForm', u'Font Weight:'))
|
translate('AmendThemeForm', 'Style:'))
|
||||||
self.LocationFooterGroupBox.setTitle(
|
self.LocationFooterGroupBox.setTitle(
|
||||||
translate(u'AmendThemeForm', u'Display Location'))
|
translate('AmendThemeForm', 'Display Location'))
|
||||||
self.FontFooterDefaultLabel.setText(
|
self.FontFooterDefaultLabel.setText(
|
||||||
translate(u'AmendThemeForm', u'Use Default Location:'))
|
translate('AmendThemeForm', 'Use default location:'))
|
||||||
self.FontFooterXLabel.setText(
|
self.FontFooterXLabel.setText(
|
||||||
translate(u'AmendThemeForm', u'X Position:'))
|
translate('AmendThemeForm', 'X position:'))
|
||||||
self.FontFooterYLabel.setText(
|
self.FontFooterYLabel.setText(
|
||||||
translate(u'AmendThemeForm', u'Y Position:'))
|
translate('AmendThemeForm', 'Y position:'))
|
||||||
self.FontFooterWidthLabel.setText(
|
self.FontFooterWidthLabel.setText(
|
||||||
translate(u'AmendThemeForm', u'Width:'))
|
translate('AmendThemeForm', 'Width:'))
|
||||||
self.FontFooterHeightLabel.setText(
|
self.FontFooterHeightLabel.setText(
|
||||||
translate(u'AmendThemeForm', u'Height:'))
|
translate('AmendThemeForm', 'Height:'))
|
||||||
self.FontFooterXSpinBox.setSuffix(
|
self.FontFooterXSpinBox.setSuffix(translate('AmendThemeForm', 'px'))
|
||||||
translate(u'AmendThemeForm', u'px'))
|
self.FontFooterYSpinBox.setSuffix(translate('AmendThemeForm', 'px'))
|
||||||
self.FontFooterYSpinBox.setSuffix(
|
self.FontFooterWidthSpinBox.setSuffix(translate('AmendThemeForm', 'px'))
|
||||||
translate(u'AmendThemeForm', u'px'))
|
|
||||||
self.FontFooterWidthSpinBox.setSuffix(
|
|
||||||
translate(u'AmendThemeForm', u'px'))
|
|
||||||
self.FontFooterHeightSpinBox.setSuffix(
|
self.FontFooterHeightSpinBox.setSuffix(
|
||||||
translate(u'AmendThemeForm', u'px'))
|
translate('AmendThemeForm', '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', '&Footer Font'))
|
||||||
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('AmendThemeForm', 'Outline color:'))
|
||||||
self.OutlineEnabledLabel.setText(
|
self.OutlineEnabledLabel.setText(
|
||||||
translate(u'AmendThemeForm', u'Show Outline:'))
|
translate('AmendThemeForm', 'Show outline:'))
|
||||||
self.ShadowGroupBox.setTitle(translate(u'AmendThemeForm', u'Shadow'))
|
self.ShadowGroupBox.setTitle(translate('AmendThemeForm', 'Shadow'))
|
||||||
self.ShadowSpinBoxLabel.setText(
|
self.ShadowSpinBoxLabel.setText(
|
||||||
translate(u'AmendThemeForm', u'Shadow Size:'))
|
translate('AmendThemeForm', 'Shadow size:'))
|
||||||
self.ShadowSpinBox.setSuffix(translate(u'AmendThemeForm', u'px'))
|
self.ShadowSpinBox.setSuffix(translate('AmendThemeForm', 'px'))
|
||||||
self.ShadowColorLabel.setText(
|
self.ShadowColorLabel.setText(
|
||||||
translate(u'AmendThemeForm', u'Shadow Color:'))
|
translate('AmendThemeForm', 'Shadow color:'))
|
||||||
self.ShadowEnabledLabel.setText(
|
self.ShadowEnabledLabel.setText(
|
||||||
translate(u'AmendThemeForm', u'Show Shadow:'))
|
translate('AmendThemeForm', 'Show shadow:'))
|
||||||
self.AlignmentGroupBox.setTitle(
|
self.AlignmentGroupBox.setTitle(
|
||||||
translate(u'AmendThemeForm', u'Alignment'))
|
translate('AmendThemeForm', 'Alignment'))
|
||||||
self.HorizontalLabel.setText(
|
self.HorizontalLabel.setText(
|
||||||
translate(u'AmendThemeForm', u'Horizontal Align:'))
|
translate('AmendThemeForm', 'Horizontal align:'))
|
||||||
self.HorizontalComboBox.setItemText(0,
|
self.HorizontalComboBox.setItemText(0,
|
||||||
translate(u'AmendThemeForm', u'Left'))
|
translate('AmendThemeForm', 'Left'))
|
||||||
self.HorizontalComboBox.setItemText(1,
|
self.HorizontalComboBox.setItemText(1,
|
||||||
translate(u'AmendThemeForm', u'Right'))
|
translate('AmendThemeForm', 'Right'))
|
||||||
self.HorizontalComboBox.setItemText(2,
|
self.HorizontalComboBox.setItemText(2,
|
||||||
translate(u'AmendThemeForm', u'Center'))
|
translate('AmendThemeForm', 'Center'))
|
||||||
self.VerticalLabel.setText(
|
self.VerticalLabel.setText(
|
||||||
translate(u'AmendThemeForm', u'Vertical Align:'))
|
translate('AmendThemeForm', 'Vertical align:'))
|
||||||
self.VerticalComboBox.setItemText(0,
|
self.VerticalComboBox.setItemText(0,
|
||||||
translate(u'AmendThemeForm', u'Top'))
|
translate('AmendThemeForm', 'Top'))
|
||||||
self.VerticalComboBox.setItemText(1,
|
self.VerticalComboBox.setItemText(1,
|
||||||
translate(u'AmendThemeForm', u'Middle'))
|
translate('AmendThemeForm', 'Middle'))
|
||||||
self.VerticalComboBox.setItemText(2,
|
self.VerticalComboBox.setItemText(2,
|
||||||
translate(u'AmendThemeForm', u'Bottom'))
|
translate('AmendThemeForm', 'Bottom'))
|
||||||
self.TransitionGroupBox.setTitle(
|
self.TransitionGroupBox.setTitle(
|
||||||
translate(u'AmendThemeForm', u'Slide Transition'))
|
translate('AmendThemeForm', 'Slide Transition'))
|
||||||
self.SlideTransitionCheckedBoxLabel.setText(
|
self.SlideTransitionCheckedBoxLabel.setText(
|
||||||
translate(u'AmendThemeForm', u'Transition Active:'))
|
translate('AmendThemeForm', 'Transition active:'))
|
||||||
self.ThemeTabWidget.setTabText(
|
self.ThemeTabWidget.setTabText(
|
||||||
self.ThemeTabWidget.indexOf(self.OtherOptionsTab),
|
self.ThemeTabWidget.indexOf(self.OtherOptionsTab),
|
||||||
translate(u'AmendThemeForm', u'Other Options'))
|
translate('AmendThemeForm', '&Other Options'))
|
||||||
self.PreviewGroupBox.setTitle(translate(u'AmendThemeForm', u'Preview'))
|
self.PreviewGroupBox.setTitle(translate('AmendThemeForm', 'Preview'))
|
||||||
|
|
||||||
|
@ -138,8 +138,8 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog):
|
|||||||
|
|
||||||
def accept(self):
|
def accept(self):
|
||||||
new_theme = ThemeXML()
|
new_theme = ThemeXML()
|
||||||
theme_name = unicode(self.ThemeNameEdit.displayText())
|
theme_name = unicode(self.ThemeNameEdit.text())
|
||||||
new_theme.new_document(theme_name.encode('unicode-escape'))
|
new_theme.new_document(theme_name)
|
||||||
save_from = None
|
save_from = None
|
||||||
save_to = None
|
save_to = None
|
||||||
if self.theme.background_mode == u'transparent':
|
if self.theme.background_mode == u'transparent':
|
||||||
@ -209,8 +209,8 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog):
|
|||||||
self.previewTheme()
|
self.previewTheme()
|
||||||
|
|
||||||
def onImageToolButtonClicked(self):
|
def onImageToolButtonClicked(self):
|
||||||
filename = QtGui.QFileDialog.getOpenFileName(
|
filename = unicode(QtGui.QFileDialog.getOpenFileName(
|
||||||
self, translate(u'AmendThemeForm', u'Open file'))
|
self, translate('AmendThemeForm', 'Open File')))
|
||||||
if filename:
|
if filename:
|
||||||
self.ImageLineEdit.setText(filename)
|
self.ImageLineEdit.setText(filename)
|
||||||
self.theme.background_filename = filename
|
self.theme.background_filename = filename
|
||||||
@ -647,7 +647,7 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog):
|
|||||||
self.Color1PushButton.setStyleSheet(
|
self.Color1PushButton.setStyleSheet(
|
||||||
u'background-color: %s' % unicode(theme.background_color))
|
u'background-color: %s' % unicode(theme.background_color))
|
||||||
self.Color1Label.setText(
|
self.Color1Label.setText(
|
||||||
translate(u'AmendThemeForm', u'Background Color:'))
|
translate('AmendThemeForm', 'Color:'))
|
||||||
self.Color1Label.setVisible(True)
|
self.Color1Label.setVisible(True)
|
||||||
self.Color1PushButton.setVisible(True)
|
self.Color1PushButton.setVisible(True)
|
||||||
self.Color2Label.setVisible(False)
|
self.Color2Label.setVisible(False)
|
||||||
@ -663,9 +663,9 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog):
|
|||||||
self.Color2PushButton.setStyleSheet(u'background-color: %s' \
|
self.Color2PushButton.setStyleSheet(u'background-color: %s' \
|
||||||
% unicode(theme.background_endColor))
|
% unicode(theme.background_endColor))
|
||||||
self.Color1Label.setText(
|
self.Color1Label.setText(
|
||||||
translate(u'AmendThemeForm', u'First Color:'))
|
translate('AmendThemeForm', 'First color:'))
|
||||||
self.Color2Label.setText(
|
self.Color2Label.setText(
|
||||||
translate(u'AmendThemeForm', u'Second Color:'))
|
translate('AmendThemeForm', 'Second color:'))
|
||||||
self.Color1Label.setVisible(True)
|
self.Color1Label.setVisible(True)
|
||||||
self.Color1PushButton.setVisible(True)
|
self.Color1PushButton.setVisible(True)
|
||||||
self.Color2Label.setVisible(True)
|
self.Color2Label.setVisible(True)
|
||||||
@ -734,7 +734,7 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog):
|
|||||||
(self.FontMainHeightSpinBox.value(), metrics.height(),
|
(self.FontMainHeightSpinBox.value(), metrics.height(),
|
||||||
page_length))
|
page_length))
|
||||||
page_length_text = unicode(
|
page_length_text = unicode(
|
||||||
translate(u'AmendThemeForm', u'Slide Height is %s rows'))
|
translate('AmendThemeForm', 'Slide height is %s rows.'))
|
||||||
self.FontMainLinesPageLabel.setText(page_length_text % page_length)
|
self.FontMainLinesPageLabel.setText(page_length_text % page_length)
|
||||||
frame = self.thememanager.generateImage(self.theme)
|
frame = self.thememanager.generateImage(self.theme)
|
||||||
self.ThemePreview.setPixmap(QtGui.QPixmap.fromImage(frame))
|
self.ThemePreview.setPixmap(QtGui.QPixmap.fromImage(frame))
|
||||||
|
@ -356,8 +356,6 @@ class Ui_MainWindow(object):
|
|||||||
"""
|
"""
|
||||||
MainWindow.mainTitle = translate('MainWindow', 'OpenLP 2.0')
|
MainWindow.mainTitle = translate('MainWindow', 'OpenLP 2.0')
|
||||||
MainWindow.language = translate('MainWindow', 'English')
|
MainWindow.language = translate('MainWindow', 'English')
|
||||||
MainWindow.defaultThemeText = translate('MainWindow',
|
|
||||||
'Default Theme: ')
|
|
||||||
MainWindow.setWindowTitle(MainWindow.mainTitle)
|
MainWindow.setWindowTitle(MainWindow.mainTitle)
|
||||||
self.FileMenu.setTitle(translate('MainWindow', '&File'))
|
self.FileMenu.setTitle(translate('MainWindow', '&File'))
|
||||||
self.FileImportMenu.setTitle(translate('MainWindow', '&Import'))
|
self.FileImportMenu.setTitle(translate('MainWindow', '&Import'))
|
||||||
@ -774,7 +772,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
|
|||||||
|
|
||||||
def defaultThemeChanged(self, theme):
|
def defaultThemeChanged(self, theme):
|
||||||
self.DefaultThemeLabel.setText(
|
self.DefaultThemeLabel.setText(
|
||||||
u'%s %s' % (self.defaultThemeText, theme))
|
unicode(translate('MainWindow', 'Default Theme: %s')) % theme)
|
||||||
|
|
||||||
def toggleMediaManager(self, visible):
|
def toggleMediaManager(self, visible):
|
||||||
if self.MediaManagerDock.isVisible() != visible:
|
if self.MediaManagerDock.isVisible() != visible:
|
||||||
|
@ -54,25 +54,25 @@ class ThemeManager(QtGui.QWidget):
|
|||||||
self.amendThemeForm = AmendThemeForm(self)
|
self.amendThemeForm = AmendThemeForm(self)
|
||||||
self.Toolbar = OpenLPToolbar(self)
|
self.Toolbar = OpenLPToolbar(self)
|
||||||
self.Toolbar.addToolbarButton(
|
self.Toolbar.addToolbarButton(
|
||||||
translate(u'ThemeManager', u'New Theme'), u':/themes/theme_new.png',
|
translate('ThemeManager', 'New Theme'), u':/themes/theme_new.png',
|
||||||
translate(u'ThemeManager', u'Create a new theme'), self.onAddTheme)
|
translate('ThemeManager', 'Create a new theme.'), self.onAddTheme)
|
||||||
self.Toolbar.addToolbarButton(
|
self.Toolbar.addToolbarButton(
|
||||||
translate(u'ThemeManager', u'Edit Theme'),
|
translate('ThemeManager', 'Edit Theme'),
|
||||||
u':/themes/theme_edit.png',
|
u':/themes/theme_edit.png',
|
||||||
translate(u'ThemeManager', u'Edit a theme'), self.onEditTheme)
|
translate('ThemeManager', 'Edit a theme.'), self.onEditTheme)
|
||||||
self.Toolbar.addToolbarButton(
|
self.Toolbar.addToolbarButton(
|
||||||
translate(u'ThemeManager', u'Delete Theme'),
|
translate('ThemeManager', 'Delete Theme'),
|
||||||
u':/general/general_delete.png',
|
u':/general/general_delete.png',
|
||||||
translate(u'ThemeManager', u'Delete a theme'), self.onDeleteTheme)
|
translate('ThemeManager', 'Delete a theme.'), self.onDeleteTheme)
|
||||||
self.Toolbar.addSeparator()
|
self.Toolbar.addSeparator()
|
||||||
self.Toolbar.addToolbarButton(
|
self.Toolbar.addToolbarButton(
|
||||||
translate(u'ThemeManager', u'Import Theme'),
|
translate('ThemeManager', 'Import Theme'),
|
||||||
u':/general/general_import.png',
|
u':/general/general_import.png',
|
||||||
translate(u'ThemeManager', u'Import a theme'), self.onImportTheme)
|
translate('ThemeManager', 'Import a theme.'), self.onImportTheme)
|
||||||
self.Toolbar.addToolbarButton(
|
self.Toolbar.addToolbarButton(
|
||||||
translate(u'ThemeManager', u'Export Theme'),
|
translate('ThemeManager', 'Export Theme'),
|
||||||
u':/general/general_export.png',
|
u':/general/general_export.png',
|
||||||
translate(u'ThemeManager', u'Export a theme'), self.onExportTheme)
|
translate('ThemeManager', 'Export a theme.'), self.onExportTheme)
|
||||||
self.ThemeWidget = QtGui.QWidgetAction(self.Toolbar)
|
self.ThemeWidget = QtGui.QWidgetAction(self.Toolbar)
|
||||||
self.Layout.addWidget(self.Toolbar)
|
self.Layout.addWidget(self.Toolbar)
|
||||||
self.ThemeListWidget = QtGui.QListWidget(self)
|
self.ThemeListWidget = QtGui.QListWidget(self)
|
||||||
@ -83,23 +83,23 @@ class ThemeManager(QtGui.QWidget):
|
|||||||
self.ThemeListWidget.addAction(
|
self.ThemeListWidget.addAction(
|
||||||
context_menu_action(self.ThemeListWidget,
|
context_menu_action(self.ThemeListWidget,
|
||||||
u':/themes/theme_edit.png',
|
u':/themes/theme_edit.png',
|
||||||
translate(u'ThemeManager', u'Edit a theme'), self.onEditTheme))
|
translate('ThemeManager', '&Edit Theme'), self.onEditTheme))
|
||||||
self.ThemeListWidget.addAction(
|
self.ThemeListWidget.addAction(
|
||||||
context_menu_separator(self.ThemeListWidget))
|
context_menu_separator(self.ThemeListWidget))
|
||||||
self.ThemeListWidget.addAction(
|
self.ThemeListWidget.addAction(
|
||||||
context_menu_action(self.ThemeListWidget,
|
context_menu_action(self.ThemeListWidget,
|
||||||
u':/general/general_delete.png',
|
u':/general/general_delete.png',
|
||||||
translate(u'ThemeManager', u'Delete theme'),
|
translate('ThemeManager', '&Delete Theme'),
|
||||||
self.onDeleteTheme))
|
self.onDeleteTheme))
|
||||||
self.ThemeListWidget.addAction(
|
self.ThemeListWidget.addAction(
|
||||||
context_menu_action(self.ThemeListWidget,
|
context_menu_action(self.ThemeListWidget,
|
||||||
u':/general/general_export.png',
|
u':/general/general_export.png',
|
||||||
translate(u'ThemeManager', u'Make Global'),
|
translate('ThemeManager', 'Set As &Global Default'),
|
||||||
self.changeGlobalFromScreen))
|
self.changeGlobalFromScreen))
|
||||||
self.ThemeListWidget.addAction(
|
self.ThemeListWidget.addAction(
|
||||||
context_menu_action(self.ThemeListWidget,
|
context_menu_action(self.ThemeListWidget,
|
||||||
u':/general/general_export.png',
|
u':/general/general_export.png',
|
||||||
translate(u'ThemeManager', u'Export theme'),
|
translate('ThemeManager', 'E&xport Theme'),
|
||||||
self.onExportTheme))
|
self.onExportTheme))
|
||||||
self.ThemeListWidget.addAction(
|
self.ThemeListWidget.addAction(
|
||||||
context_menu_separator(self.ThemeListWidget))
|
context_menu_separator(self.ThemeListWidget))
|
||||||
@ -136,7 +136,7 @@ class ThemeManager(QtGui.QWidget):
|
|||||||
self.ThemeListWidget.item(count).setText(newName)
|
self.ThemeListWidget.item(count).setText(newName)
|
||||||
#Set the new name
|
#Set the new name
|
||||||
if themeName == newName:
|
if themeName == newName:
|
||||||
name = unicode(translate(u'ThemeManager', u'%s (default)')) % \
|
name = unicode(translate('ThemeManager', '%s (default)')) % \
|
||||||
newName
|
newName
|
||||||
self.ThemeListWidget.item(count).setText(name)
|
self.ThemeListWidget.item(count).setText(name)
|
||||||
|
|
||||||
@ -158,7 +158,7 @@ class ThemeManager(QtGui.QWidget):
|
|||||||
if count == selected_row:
|
if count == selected_row:
|
||||||
self.global_theme = unicode(
|
self.global_theme = unicode(
|
||||||
self.ThemeListWidget.item(count).text())
|
self.ThemeListWidget.item(count).text())
|
||||||
name = unicode(translate(u'ThemeManager', u'%s (default)')) % \
|
name = unicode(translate('ThemeManager', '%s (default)')) % \
|
||||||
self.global_theme
|
self.global_theme
|
||||||
self.ThemeListWidget.item(count).setText(name)
|
self.ThemeListWidget.item(count).setText(name)
|
||||||
QtCore.QSettings().setValue(
|
QtCore.QSettings().setValue(
|
||||||
@ -203,26 +203,26 @@ class ThemeManager(QtGui.QWidget):
|
|||||||
theme = unicode(item.text())
|
theme = unicode(item.text())
|
||||||
# should be the same unless default
|
# should be the same unless default
|
||||||
if theme != unicode(item.data(QtCore.Qt.UserRole).toString()):
|
if theme != unicode(item.data(QtCore.Qt.UserRole).toString()):
|
||||||
QtGui.QMessageBox.critical(
|
QtGui.QMessageBox.critical(self,
|
||||||
self, translate(u'ThemeManager', u'Error'),
|
translate('ThemeManager', 'Error'),
|
||||||
translate(u'ThemeManager',
|
translate('ThemeManager',
|
||||||
u'You are unable to delete the default theme.'),
|
'You are unable to delete the default theme.'),
|
||||||
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
|
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
|
||||||
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(self,
|
QtGui.QMessageBox.critical(self,
|
||||||
translate(u'ThemeManager', u'Error'),
|
translate('ThemeManager', 'Error'),
|
||||||
translate(u'ThemeManager',
|
unicode(translate('ThemeManager',
|
||||||
u'Theme %s is use in %s plugin' % (theme,
|
'Theme %s is use in %s plugin.')) % \
|
||||||
plugin.name)))
|
(theme, plugin.name))
|
||||||
return
|
return
|
||||||
if unicode(self.parent.ServiceManagerContents.ThemeComboBox \
|
if unicode(self.parent.ServiceManagerContents.ThemeComboBox \
|
||||||
.currentText()) == theme:
|
.currentText()) == theme:
|
||||||
QtGui.QMessageBox.critical(self,
|
QtGui.QMessageBox.critical(self,
|
||||||
translate(u'ThemeManager', u'Error'),
|
translate('ThemeManager', 'Error'),
|
||||||
translate(u'ThemeManager',
|
unicode(translate('ThemeManager',
|
||||||
u'Theme %s is use by Service Manager' % theme))
|
'Theme %s is use by the service manager.')) % theme)
|
||||||
return
|
return
|
||||||
self.themelist.remove(theme)
|
self.themelist.remove(theme)
|
||||||
th = theme + u'.png'
|
th = theme + u'.png'
|
||||||
@ -249,12 +249,12 @@ class ThemeManager(QtGui.QWidget):
|
|||||||
item = self.ThemeListWidget.currentItem()
|
item = self.ThemeListWidget.currentItem()
|
||||||
if item is None:
|
if item is None:
|
||||||
QtGui.QMessageBox.critical(self,
|
QtGui.QMessageBox.critical(self,
|
||||||
translate(u'ThemeManager', u'Error'),
|
translate('ThemeManager', 'Error'),
|
||||||
translate(u'ThemeManager', u'You have not selected a theme.'))
|
translate('ThemeManager', 'You have not selected a theme.'))
|
||||||
return
|
return
|
||||||
theme = unicode(item.data(QtCore.Qt.UserRole).toString())
|
theme = unicode(item.data(QtCore.Qt.UserRole).toString())
|
||||||
path = QtGui.QFileDialog.getExistingDirectory(self,
|
path = QtGui.QFileDialog.getExistingDirectory(self,
|
||||||
unicode(translate(u'ThemeManager', u'Save Theme - (%s)')) % theme,
|
unicode(translate('ThemeManager', 'Save Theme - (%s)')) % theme,
|
||||||
SettingsManager.get_last_dir(self.settingsSection, 1))
|
SettingsManager.get_last_dir(self.settingsSection, 1))
|
||||||
path = unicode(path)
|
path = unicode(path)
|
||||||
if path:
|
if path:
|
||||||
@ -270,15 +270,15 @@ class ThemeManager(QtGui.QWidget):
|
|||||||
os.path.join(source, name).encode(u'utf-8'),
|
os.path.join(source, name).encode(u'utf-8'),
|
||||||
os.path.join(theme, name).encode(u'utf-8'))
|
os.path.join(theme, name).encode(u'utf-8'))
|
||||||
QtGui.QMessageBox.information(self,
|
QtGui.QMessageBox.information(self,
|
||||||
translate(u'ThemeManager', u'Theme Exported'),
|
translate('ThemeManager', 'Theme Exported'),
|
||||||
translate(u'ThemeManager',
|
translate('ThemeManager',
|
||||||
u'Your theme has been successfully exported.'))
|
'Your theme has been successfully exported.'))
|
||||||
except (IOError, OSError):
|
except (IOError, OSError):
|
||||||
log.exception(u'Export Theme Failed')
|
log.exception(u'Export Theme Failed')
|
||||||
QtGui.QMessageBox.critical(self,
|
QtGui.QMessageBox.critical(self,
|
||||||
translate(u'ThemeManager', u'Theme Export Failed'),
|
translate('ThemeManager', 'Theme Export Failed'),
|
||||||
translate(u'ThemeManager',
|
translate('ThemeManager',
|
||||||
u'Your theme could not be exported due to an error.'))
|
'Your theme could not be exported due to an error.'))
|
||||||
finally:
|
finally:
|
||||||
if zip:
|
if zip:
|
||||||
zip.close()
|
zip.close()
|
||||||
@ -289,9 +289,10 @@ class ThemeManager(QtGui.QWidget):
|
|||||||
attempting to extract OpenLP themes from those files. This process
|
attempting to extract OpenLP themes from those files. This process
|
||||||
will load both OpenLP version 1 and version 2 themes.
|
will load both OpenLP version 1 and version 2 themes.
|
||||||
"""
|
"""
|
||||||
files = QtGui.QFileDialog.getOpenFileNames(
|
files = QtGui.QFileDialog.getOpenFileNames(self,
|
||||||
self, translate(u'ThemeManager', u'Select Theme Import File'),
|
translate('ThemeManager', 'Select Theme Import File'),
|
||||||
SettingsManager.get_last_dir(self.settingsSection), u'Theme (*.*)')
|
SettingsManager.get_last_dir(self.settingsSection),
|
||||||
|
translate('ThemeManager', 'Theme (*.*)'))
|
||||||
log.info(u'New Themes %s', unicode(files))
|
log.info(u'New Themes %s', unicode(files))
|
||||||
if files:
|
if files:
|
||||||
for file in files:
|
for file in files:
|
||||||
@ -318,8 +319,8 @@ class ThemeManager(QtGui.QWidget):
|
|||||||
if os.path.exists(theme):
|
if os.path.exists(theme):
|
||||||
textName = os.path.splitext(name)[0]
|
textName = os.path.splitext(name)[0]
|
||||||
if textName == self.global_theme:
|
if textName == self.global_theme:
|
||||||
name = unicode(translate(u'ThemeManager',
|
name = unicode(translate('ThemeManager',
|
||||||
u'%s (default)')) % textName
|
'%s (default)')) % textName
|
||||||
else:
|
else:
|
||||||
name = textName
|
name = textName
|
||||||
thumb = os.path.join(self.thumbPath, u'%s.png' % textName)
|
thumb = os.path.join(self.thumbPath, u'%s.png' % textName)
|
||||||
@ -394,9 +395,9 @@ class ThemeManager(QtGui.QWidget):
|
|||||||
ucsfile = file.decode(u'utf-8')
|
ucsfile = file.decode(u'utf-8')
|
||||||
except UnicodeDecodeError:
|
except UnicodeDecodeError:
|
||||||
QtGui.QMessageBox.critical(
|
QtGui.QMessageBox.critical(
|
||||||
self, translate(u'ThemeManager', u'Error'),
|
self, translate('ThemeManager', 'Error'),
|
||||||
translate(u'ThemeManager', u'File is not a valid '
|
translate('ThemeManager', 'File is not a valid theme.\n'
|
||||||
u'theme.\nThe content encoding is not UTF-8.'))
|
'The content encoding is not UTF-8.'))
|
||||||
log.exception(u'Filename "%s" is not valid UTF-8' % \
|
log.exception(u'Filename "%s" is not valid UTF-8' % \
|
||||||
file.decode(u'utf-8', u'replace'))
|
file.decode(u'utf-8', u'replace'))
|
||||||
continue
|
continue
|
||||||
@ -417,30 +418,36 @@ class ThemeManager(QtGui.QWidget):
|
|||||||
theme_dir = os.path.join(dir, names[0])
|
theme_dir = os.path.join(dir, names[0])
|
||||||
if not os.path.exists(theme_dir):
|
if not os.path.exists(theme_dir):
|
||||||
os.mkdir(os.path.join(dir, names[0]))
|
os.mkdir(os.path.join(dir, names[0]))
|
||||||
xml_data = zip.read(file)
|
|
||||||
if os.path.splitext(ucsfile)[1].lower() in [u'.xml']:
|
if os.path.splitext(ucsfile)[1].lower() in [u'.xml']:
|
||||||
|
xml_data = zip.read(file)
|
||||||
|
try:
|
||||||
|
xml_data = xml_data.decode(u'utf-8')
|
||||||
|
except UnicodeDecodeError:
|
||||||
|
log.exception(u'Theme XML is not UTF-8 '
|
||||||
|
'encoded.')
|
||||||
|
break;
|
||||||
if self.checkVersion1(xml_data):
|
if self.checkVersion1(xml_data):
|
||||||
# upgrade theme xml
|
# upgrade theme xml
|
||||||
filexml = self.migrateVersion122(xml_data)
|
filexml = self.migrateVersion122(xml_data)
|
||||||
else:
|
else:
|
||||||
filexml = xml_data
|
filexml = xml_data
|
||||||
outfile = open(fullpath, u'w')
|
outfile = open(fullpath, u'w')
|
||||||
outfile.write(filexml)
|
outfile.write(filexml.encode(u'utf-8'))
|
||||||
else:
|
else:
|
||||||
outfile = open(fullpath, u'wb')
|
outfile = open(fullpath, u'wb')
|
||||||
outfile.write(zip.read(file))
|
outfile.write(zip.read(file))
|
||||||
if filexml:
|
if filexml:
|
||||||
self.generateAndSaveImage(dir, themename, filexml)
|
self.generateAndSaveImage(dir, themename, filexml)
|
||||||
else:
|
else:
|
||||||
QtGui.QMessageBox.critical(
|
QtGui.QMessageBox.critical(self,
|
||||||
self, translate(u'ThemeManager', u'Error'),
|
translate('ThemeManager', 'Error'),
|
||||||
translate(u'ThemeManager', u'File is not a valid theme.'))
|
translate('ThemeManager', 'File is not a valid theme.'))
|
||||||
log.exception(u'Theme file dosen\'t contain XML data %s' %
|
log.exception(u'Theme file dosen\'t contain XML data %s' %
|
||||||
filename)
|
filename)
|
||||||
except (IOError, NameError):
|
except (IOError, NameError):
|
||||||
QtGui.QMessageBox.critical(
|
QtGui.QMessageBox.critical(self,
|
||||||
self, translate(u'ThemeManager', u'Error'),
|
translate('ThemeManager', 'Error'),
|
||||||
translate(u'ThemeManager', u'File is not a valid theme.'))
|
translate('ThemeManager', 'File is not a valid theme.'))
|
||||||
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:
|
||||||
@ -456,7 +463,7 @@ class ThemeManager(QtGui.QWidget):
|
|||||||
Theme XML to check the version of
|
Theme XML to check the version of
|
||||||
"""
|
"""
|
||||||
log.debug(u'checkVersion1 ')
|
log.debug(u'checkVersion1 ')
|
||||||
theme = xmlfile
|
theme = xmlfile.encode(u'ascii', u'xmlcharrefreplace')
|
||||||
tree = ElementTree(element=XML(theme)).getroot()
|
tree = ElementTree(element=XML(theme)).getroot()
|
||||||
if tree.find(u'BackgroundType') is None:
|
if tree.find(u'BackgroundType') is None:
|
||||||
return False
|
return False
|
||||||
@ -526,11 +533,11 @@ class ThemeManager(QtGui.QWidget):
|
|||||||
result = QtGui.QMessageBox.Yes
|
result = QtGui.QMessageBox.Yes
|
||||||
if self.saveThemeName != name:
|
if self.saveThemeName != name:
|
||||||
if os.path.exists(theme_file):
|
if os.path.exists(theme_file):
|
||||||
result = QtGui.QMessageBox.question(
|
result = QtGui.QMessageBox.question(self,
|
||||||
self, translate(u'ThemeManager', u'Theme Exists'),
|
translate('ThemeManager', 'Theme Exists'),
|
||||||
translate(u'ThemeManager',
|
translate('ThemeManager',
|
||||||
u'A theme with this name already exists, '
|
'A theme with this name already exists. '
|
||||||
u'would you like to overwrite it?'),
|
'Would you like to overwrite it?'),
|
||||||
(QtGui.QMessageBox.Yes | QtGui.QMessageBox.No),
|
(QtGui.QMessageBox.Yes | QtGui.QMessageBox.No),
|
||||||
QtGui.QMessageBox.No)
|
QtGui.QMessageBox.No)
|
||||||
if result == QtGui.QMessageBox.Yes:
|
if result == QtGui.QMessageBox.Yes:
|
||||||
@ -598,7 +605,7 @@ class ThemeManager(QtGui.QWidget):
|
|||||||
"""
|
"""
|
||||||
log.debug(u'base theme created')
|
log.debug(u'base theme created')
|
||||||
newtheme = ThemeXML()
|
newtheme = ThemeXML()
|
||||||
newtheme.new_document(unicode(translate(u'ThemeManager', u'New Theme')))
|
newtheme.new_document(unicode(translate('ThemeManager', 'New Theme')))
|
||||||
newtheme.add_background_solid(unicode(u'#000000'))
|
newtheme.add_background_solid(unicode(u'#000000'))
|
||||||
newtheme.add_font(unicode(QtGui.QFont().family()), unicode(u'#FFFFFF'),
|
newtheme.add_font(unicode(QtGui.QFont().family()), unicode(u'#FFFFFF'),
|
||||||
unicode(30), u'False')
|
unicode(30), u'False')
|
||||||
|
@ -37,7 +37,7 @@ class ThemesTab(SettingsTab):
|
|||||||
|
|
||||||
def setupUi(self):
|
def setupUi(self):
|
||||||
self.setObjectName(u'ThemesTab')
|
self.setObjectName(u'ThemesTab')
|
||||||
self.tabTitleVisible = translate(u'ThemesTab', u'Themes')
|
self.tabTitleVisible = translate('ThemesTab', 'Themes')
|
||||||
self.ThemesTabLayout = QtGui.QHBoxLayout(self)
|
self.ThemesTabLayout = QtGui.QHBoxLayout(self)
|
||||||
self.ThemesTabLayout.setSpacing(8)
|
self.ThemesTabLayout.setSpacing(8)
|
||||||
self.ThemesTabLayout.setMargin(8)
|
self.ThemesTabLayout.setMargin(8)
|
||||||
@ -106,26 +106,26 @@ class ThemesTab(SettingsTab):
|
|||||||
QtCore.SIGNAL(u'theme_update_list'), self.updateThemeList)
|
QtCore.SIGNAL(u'theme_update_list'), self.updateThemeList)
|
||||||
|
|
||||||
def retranslateUi(self):
|
def retranslateUi(self):
|
||||||
self.GlobalGroupBox.setTitle(translate(u'ThemesTab', u'Global theme'))
|
self.GlobalGroupBox.setTitle(translate('ThemesTab', 'Global Theme'))
|
||||||
self.LevelGroupBox.setTitle(translate(u'ThemesTab', u'Theme level'))
|
self.LevelGroupBox.setTitle(translate('ThemesTab', 'Theme Level'))
|
||||||
self.SongLevelRadioButton.setText(
|
self.SongLevelRadioButton.setText(
|
||||||
translate(u'ThemesTab', u'Song level'))
|
translate('ThemesTab', 'S&ong Level'))
|
||||||
self.SongLevelLabel.setText(
|
self.SongLevelLabel.setText(
|
||||||
translate(u'ThemesTab', u'Use the theme from each song '
|
translate('ThemesTab', 'Use the theme from each song '
|
||||||
u'in the database. If a song doesn\'t have a theme associated with '
|
'in the database. If a song doesn\'t have a theme associated with '
|
||||||
u'it, then use the service\'s theme. If the service doesn\'t have '
|
'it, then use the service\'s theme. If the service doesn\'t have '
|
||||||
u'a theme, then use the global theme.'))
|
'a theme, then use the global theme.'))
|
||||||
self.ServiceLevelRadioButton.setText(
|
self.ServiceLevelRadioButton.setText(
|
||||||
translate(u'ThemesTab', u'Service level'))
|
translate('ThemesTab', '&Service Level'))
|
||||||
self.ServiceLevelLabel.setText(
|
self.ServiceLevelLabel.setText(
|
||||||
translate(u'ThemesTab', u'Use the theme from the service, '
|
translate('ThemesTab', 'Use the theme from the service, '
|
||||||
u'overriding any of the individual songs\' themes. If the '
|
'overriding any of the individual songs\' themes. If the '
|
||||||
u'service doesn\'t have a theme, then use the global theme.'))
|
'service doesn\'t have a theme, then use the global theme.'))
|
||||||
self.GlobalLevelRadioButton.setText(
|
self.GlobalLevelRadioButton.setText(
|
||||||
translate(u'ThemesTab', u'Global level'))
|
translate('ThemesTab', '&Global Level'))
|
||||||
self.GlobalLevelLabel.setText(
|
self.GlobalLevelLabel.setText(
|
||||||
translate(u'ThemesTab', u'Use the global theme, overriding any '
|
translate('ThemesTab', 'Use the global theme, overriding any '
|
||||||
u'themes associated with either the service or the songs.'))
|
'themes associated with either the service or the songs.'))
|
||||||
|
|
||||||
def load(self):
|
def load(self):
|
||||||
settings = QtCore.QSettings()
|
settings = QtCore.QSettings()
|
||||||
|
@ -29,7 +29,7 @@ import os
|
|||||||
from PyQt4 import QtCore, QtGui
|
from PyQt4 import QtCore, QtGui
|
||||||
|
|
||||||
from openlp.core.lib import MediaManagerItem, BaseListWithDnD, build_icon, \
|
from openlp.core.lib import MediaManagerItem, BaseListWithDnD, build_icon, \
|
||||||
ItemCapabilities, SettingsManager, context_menu_action, Receiver, translate
|
ItemCapabilities, SettingsManager, translate
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user