forked from openlp/openlp
Head
This commit is contained in:
commit
5be85c07a3
@ -17,7 +17,6 @@ Contents:
|
||||
|
||||
openlp
|
||||
core/index
|
||||
migration/index
|
||||
plugins/index
|
||||
|
||||
Indices and tables
|
||||
|
@ -1,32 +0,0 @@
|
||||
.. _migration-index:
|
||||
|
||||
:mod:`migration` Module
|
||||
=======================
|
||||
|
||||
.. automodule:: openlp.migration
|
||||
:members:
|
||||
|
||||
:mod:`display` Submodule
|
||||
------------------------
|
||||
|
||||
.. automodule:: openlp.migration.display
|
||||
:members:
|
||||
|
||||
:mod:`migratebibles` Submodule
|
||||
------------------------------
|
||||
|
||||
.. automodule:: openlp.migration.migratebibles
|
||||
:members:
|
||||
|
||||
:mod:`migratefiles` Submodule
|
||||
-----------------------------
|
||||
|
||||
.. automodule:: openlp.migration.migratefiles
|
||||
:members:
|
||||
|
||||
:mod:`migratesongs` Submodule
|
||||
-----------------------------
|
||||
|
||||
.. automodule:: openlp.migration.migratesongs
|
||||
:members:
|
||||
|
@ -52,9 +52,10 @@ def translate(context, text, comment=None):
|
||||
|
||||
def get_text_file_string(text_file):
|
||||
"""
|
||||
Open a file and return the contents of the file. If the supplied file name
|
||||
is not a file then the function returns False. If there is an error
|
||||
loading the file then the function will return None.
|
||||
Open a file and return its content as unicode string. If the supplied file
|
||||
name is not a file then the function returns False. If there is an error
|
||||
loading the file or the content can't be decoded then the function will
|
||||
return None.
|
||||
|
||||
``textfile``
|
||||
The name of the file.
|
||||
@ -65,8 +66,9 @@ def get_text_file_string(text_file):
|
||||
content_string = None
|
||||
try:
|
||||
file_handle = open(text_file, u'r')
|
||||
content_string = file_handle.read()
|
||||
except IOError:
|
||||
content = file_handle.read()
|
||||
content_string = content.decode(u'utf-8')
|
||||
except (IOError, UnicodeError):
|
||||
log.exception(u'Failed to open text file %s' % text_file)
|
||||
finally:
|
||||
if file_handle:
|
||||
@ -95,11 +97,10 @@ def build_icon(icon):
|
||||
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``.
|
||||
"""
|
||||
button_icon = None
|
||||
button_icon = QtGui.QIcon()
|
||||
if isinstance(icon, QtGui.QIcon):
|
||||
button_icon = icon
|
||||
elif isinstance(icon, basestring):
|
||||
button_icon = QtGui.QIcon()
|
||||
if icon.startswith(u':/'):
|
||||
button_icon.addPixmap(QtGui.QPixmap(icon), QtGui.QIcon.Normal,
|
||||
QtGui.QIcon.Off)
|
||||
@ -107,7 +108,6 @@ def build_icon(icon):
|
||||
button_icon.addPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(icon)),
|
||||
QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||
elif isinstance(icon, QtGui.QImage):
|
||||
button_icon = QtGui.QIcon()
|
||||
button_icon.addPixmap(QtGui.QPixmap.fromImage(icon),
|
||||
QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||
return button_icon
|
||||
|
@ -96,9 +96,8 @@ class ThemeXML(object):
|
||||
The path name to be added.
|
||||
"""
|
||||
if self.background_filename and path:
|
||||
self.theme_name = self.theme_name.rstrip().lstrip()
|
||||
self.background_filename = \
|
||||
self.background_filename.rstrip().lstrip()
|
||||
self.theme_name = self.theme_name.strip()
|
||||
self.background_filename = self.background_filename.strip()
|
||||
self.background_filename = os.path.join(path, self.theme_name,
|
||||
self.background_filename)
|
||||
|
||||
@ -334,13 +333,13 @@ class ThemeXML(object):
|
||||
Pull out the XML string.
|
||||
"""
|
||||
# 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):
|
||||
"""
|
||||
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):
|
||||
"""
|
||||
@ -365,11 +364,12 @@ class ThemeXML(object):
|
||||
``xml``
|
||||
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()
|
||||
master = u''
|
||||
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():
|
||||
master = element.tag + u'_'
|
||||
else:
|
||||
|
@ -72,9 +72,6 @@ class OpenLPToolbar(QtGui.QToolBar):
|
||||
ToolbarButton = None
|
||||
if icon:
|
||||
ButtonIcon = build_icon(icon)
|
||||
else:
|
||||
ButtonIcon = None
|
||||
if ButtonIcon:
|
||||
if slot and not checkable:
|
||||
ToolbarButton = self.addAction(ButtonIcon, title, slot)
|
||||
else:
|
||||
|
@ -175,7 +175,7 @@ class Theme(object):
|
||||
``xml``
|
||||
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()
|
||||
for element in xml_iter:
|
||||
delphi_color_change = False
|
||||
|
@ -114,451 +114,451 @@ class Ui_AboutDialog(object):
|
||||
QtCore.QMetaObject.connectSlotsByName(AboutDialog)
|
||||
|
||||
def retranslateUi(self, AboutDialog):
|
||||
AboutDialog.setWindowTitle(translate(u'AboutForm', u'About OpenLP'))
|
||||
self.AboutTextEdit.setPlainText(translate(u'AboutForm',
|
||||
u'OpenLP <version><revision> - Open Source Lyrics '
|
||||
u'Projection\n'
|
||||
u'\n'
|
||||
u'OpenLP is free church presentation software, or lyrics '
|
||||
u'projection software, used to display slides of songs, Bible '
|
||||
u'verses, videos, images, and even presentations (if '
|
||||
u'OpenOffice.org, PowerPoint or PowerPoint Viewer is installed) '
|
||||
u'for church worship using a computer and a data projector.\n'
|
||||
u'\n'
|
||||
u'Find out more about OpenLP: http://openlp.org/\n'
|
||||
u'\n'
|
||||
u'OpenLP is written and maintained by volunteers. If you would '
|
||||
u'like to see more free Christian software being written, please '
|
||||
u'consider contributing by using the button below.'
|
||||
AboutDialog.setWindowTitle(translate('AboutForm', 'About OpenLP'))
|
||||
self.AboutTextEdit.setPlainText(translate('AboutForm',
|
||||
'OpenLP <version><revision> - Open Source Lyrics '
|
||||
'Projection\n'
|
||||
'\n'
|
||||
'OpenLP is free church presentation software, or lyrics '
|
||||
'projection software, used to display slides of songs, Bible '
|
||||
'verses, videos, images, and even presentations (if '
|
||||
'OpenOffice.org, PowerPoint or PowerPoint Viewer is installed) '
|
||||
'for church worship using a computer and a data projector.\n'
|
||||
'\n'
|
||||
'Find out more about OpenLP: http://openlp.org/\n'
|
||||
'\n'
|
||||
'OpenLP is written and maintained by volunteers. If you would '
|
||||
'like to see more free Christian software being written, please '
|
||||
'consider contributing by using the button below.'
|
||||
))
|
||||
self.AboutNotebook.setTabText(
|
||||
|
||||
self.AboutNotebook.indexOf(self.AboutTab),
|
||||
translate(u'AboutForm', u'About'))
|
||||
self.CreditsTextEdit.setPlainText(translate(u'AboutForm',
|
||||
u'Project Lead\n'
|
||||
u' Raoul "superfly" Snyman\n'
|
||||
u'\n'
|
||||
u'Developers\n'
|
||||
u' Tim "TRB143" Bentley\n'
|
||||
u' Jonathan "gushie" Corwin\n'
|
||||
u' Michael "cocooncrash" Gorven\n'
|
||||
u' Scott "sguerrieri" Guerrieri\n'
|
||||
u' Raoul "superfly" Snyman\n'
|
||||
u' Martin "mijiti" Thompson\n'
|
||||
u' Jon "Meths" Tibble\n'
|
||||
u'\n'
|
||||
u'Contributors\n'
|
||||
u' Meinert "m2j" Jordan\n'
|
||||
u' Christian "crichter" Richter\n'
|
||||
u' Maikel Stuivenberg\n'
|
||||
u' Carsten "catini" Tingaard\n'
|
||||
u'\n'
|
||||
u'Testers\n'
|
||||
u' Philip "Phill" Ridout\n'
|
||||
u' Wesley "wrst" Stout (lead)\n'
|
||||
u'\n'
|
||||
u'Packagers\n'
|
||||
u' Thomas "tabthorpe" Abthorpe (FreeBSD)\n'
|
||||
u' Tim "TRB143" Bentley (Fedora)\n'
|
||||
u' Michael "cocooncrash" Gorven (Ubuntu)\n'
|
||||
u' Matthias "matthub" Hub (Mac OS X)\n'
|
||||
u' Raoul "superfly" Snyman (Windows)\n'
|
||||
translate('AboutForm', 'About'))
|
||||
self.CreditsTextEdit.setPlainText(translate('AboutForm',
|
||||
'Project Lead\n'
|
||||
' Raoul "superfly" Snyman\n'
|
||||
'\n'
|
||||
'Developers\n'
|
||||
' Tim "TRB143" Bentley\n'
|
||||
' Jonathan "gushie" Corwin\n'
|
||||
' Michael "cocooncrash" Gorven\n'
|
||||
' Scott "sguerrieri" Guerrieri\n'
|
||||
' Raoul "superfly" Snyman\n'
|
||||
' Martin "mijiti" Thompson\n'
|
||||
' Jon "Meths" Tibble\n'
|
||||
'\n'
|
||||
'Contributors\n'
|
||||
' Meinert "m2j" Jordan\n'
|
||||
' Christian "crichter" Richter\n'
|
||||
' Maikel Stuivenberg\n'
|
||||
' Carsten "catini" Tingaard\n'
|
||||
'\n'
|
||||
'Testers\n'
|
||||
' Philip "Phill" Ridout\n'
|
||||
' Wesley "wrst" Stout (lead)\n'
|
||||
'\n'
|
||||
'Packagers\n'
|
||||
' Thomas "tabthorpe" Abthorpe (FreeBSD)\n'
|
||||
' Tim "TRB143" Bentley (Fedora)\n'
|
||||
' Michael "cocooncrash" Gorven (Ubuntu)\n'
|
||||
' Matthias "matthub" Hub (Mac OS X)\n'
|
||||
' Raoul "superfly" Snyman (Windows)\n'
|
||||
))
|
||||
self.AboutNotebook.setTabText(
|
||||
self.AboutNotebook.indexOf(self.CreditsTab),
|
||||
translate(u'AboutForm', u'Credits'))
|
||||
self.LicenseTextEdit.setPlainText(translate(u'AboutForm',
|
||||
u'Copyright \xa9 2004-2010 Raoul Snyman\n'
|
||||
u'Portions copyright \xa9 2004-2010 '
|
||||
u'Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, '
|
||||
u'Christian Richter, Maikel Stuivenberg, Martin Thompson, Jon '
|
||||
u'Tibble, Carsten Tinggaard\n'
|
||||
u'\n'
|
||||
u'This program is free software; you can redistribute it and/or '
|
||||
u'modify it under the terms of the GNU General Public License as '
|
||||
u'published by the Free Software Foundation; version 2 of the '
|
||||
u'License.\n'
|
||||
u'\n'
|
||||
u'This program is distributed in the hope that it will be useful, '
|
||||
u'but WITHOUT ANY WARRANTY; without even the implied warranty of '
|
||||
u'MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below '
|
||||
u'for more details.\n'
|
||||
u'\n'
|
||||
u'\n'
|
||||
u'GNU GENERAL PUBLIC LICENSE\n'
|
||||
u'Version 2, June 1991\n'
|
||||
u'\n'
|
||||
u'Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 '
|
||||
u'Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. '
|
||||
u'Everyone is permitted to copy and distribute verbatim copies of '
|
||||
u'this license document, but changing it is not allowed.\n'
|
||||
u'\n'
|
||||
u'Preamble\n'
|
||||
u'\n'
|
||||
u'The licenses for most software are designed to take away your '
|
||||
u'freedom to share and change it. By contrast, the GNU General '
|
||||
u'Public License is intended to guarantee your freedom to share '
|
||||
u'and change free software--to make sure the software is free for '
|
||||
u'all its users. This General Public License applies to most of '
|
||||
u'the Free Software Foundation\'s software and to any other '
|
||||
u'program whose authors commit to using it. (Some other Free '
|
||||
u'Software Foundation software is covered by the GNU Lesser '
|
||||
u'General Public License instead.) You can apply it to your '
|
||||
u'programs, too.\n'
|
||||
u'\n'
|
||||
u'When we speak of free software, we are referring to freedom, not '
|
||||
u'price. Our General Public Licenses are designed to make sure '
|
||||
u'that you have the freedom to distribute copies of free software '
|
||||
u'(and charge for this service if you wish), that you receive '
|
||||
u'source code or can get it if you want it, that you can change '
|
||||
u'the software or use pieces of it in new free programs; and that '
|
||||
u'you know you can do these things.\n'
|
||||
u'\n'
|
||||
u'To protect your rights, we need to make restrictions that forbid '
|
||||
u'anyone to deny you these rights or to ask you to surrender the '
|
||||
u'rights. These restrictions translate to certain responsibilities '
|
||||
u'for you if you distribute copies of the software, or if you '
|
||||
u'modify it.\n'
|
||||
u'\n'
|
||||
u'For example, if you distribute copies of such a program, whether '
|
||||
u'gratis or for a fee, you must give the recipients all the rights '
|
||||
u'that you have. You must make sure that they, too, receive or '
|
||||
u'can get the source code. And you must show them these terms so '
|
||||
u'they know their rights.\n'
|
||||
u'\n'
|
||||
u'We protect your rights with two steps: (1) copyright the '
|
||||
u'software, and (2) offer you this license which gives you legal '
|
||||
u'permission to copy, distribute and/or modify the software.\n'
|
||||
u'\n'
|
||||
u'Also, for each author\'s protection and ours, we want to make '
|
||||
u'certain that everyone understands that there is no warranty for '
|
||||
u'this free software. If the software is modified by someone else '
|
||||
u'and passed on, we want its recipients to know that what they '
|
||||
u'have is not the original, so that any problems introduced by '
|
||||
u'others will not reflect on the original authors\' reputations.\n'
|
||||
u'\n'
|
||||
u'Finally, any free program is threatened constantly by software '
|
||||
u'patents. We wish to avoid the danger that redistributors of a '
|
||||
u'free program will individually obtain patent licenses, in effect '
|
||||
u'making the program proprietary. To prevent this, we have made '
|
||||
u'it clear that any patent must be licensed for everyone\'s free '
|
||||
u'use or not licensed at all.\n'
|
||||
u'\n'
|
||||
u'The precise terms and conditions for copying, distribution and '
|
||||
u'modification follow.\n'
|
||||
u'\n'
|
||||
u'GNU GENERAL PUBLIC LICENSE\n'
|
||||
u'TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n'
|
||||
u'\n'
|
||||
u'0. This License applies to any program or other work which '
|
||||
u'contains a notice placed by the copyright holder saying it may '
|
||||
u'be distributed under the terms of this General Public License. '
|
||||
u'The "Program", below, refers to any such program or work, and a '
|
||||
u'"work based on the Program" means either the Program or any '
|
||||
u'derivative work under copyright law: that is to say, a work '
|
||||
u'containing the Program or a portion of it, either verbatim or '
|
||||
u'with modifications and/or translated into another language. '
|
||||
u'(Hereinafter, translation is included without limitation in the '
|
||||
u'term "modification".) Each licensee is addressed as "you".\n'
|
||||
u'\n'
|
||||
u'Activities other than copying, distribution and modification are '
|
||||
u'not covered by this License; they are outside its scope. The '
|
||||
u'act of running the Program is not restricted, and the output '
|
||||
u'from the Program is covered only if its contents constitute a '
|
||||
u'work based on the Program (independent of having been made by '
|
||||
u'running the Program). Whether that is true depends on what the '
|
||||
u'Program does.\n'
|
||||
u'\n'
|
||||
u'1. You may copy and distribute verbatim copies of the Program\'s '
|
||||
u'source code as you receive it, in any medium, provided that you '
|
||||
u'conspicuously and appropriately publish on each copy an '
|
||||
u'appropriate copyright notice and disclaimer of warranty; keep '
|
||||
u'intact all the notices that refer to this License and to the '
|
||||
u'absence of any warranty; and give any other recipients of the '
|
||||
u'Program a copy of this License along with the Program.\n'
|
||||
u'\n'
|
||||
u'You may charge a fee for the physical act of transferring a '
|
||||
u'copy, and you may at your option offer warranty protection in '
|
||||
u'exchange for a fee.\n'
|
||||
u'\n'
|
||||
u'2. You may modify your copy or copies of the Program or any '
|
||||
u'portion of it, thus forming a work based on the Program, and '
|
||||
u'copy and distribute such modifications or work under the terms '
|
||||
u'of Section 1 above, provided that you also meet all of these '
|
||||
u'conditions:\n'
|
||||
u'\n'
|
||||
u'a) You must cause the modified files to carry prominent notices '
|
||||
u'stating that you changed the files and the date of any change.\n'
|
||||
u'\n'
|
||||
u'b) You must cause any work that you distribute or publish, that '
|
||||
u'in whole or in part contains or is derived from the Program or '
|
||||
u'any part thereof, to be licensed as a whole at no charge to all '
|
||||
u'third parties under the terms of this License.\n'
|
||||
u'\n'
|
||||
u'c) If the modified program normally reads commands interactively '
|
||||
u'when run, you must cause it, when started running for such '
|
||||
u'interactive use in the most ordinary way, to print or display an '
|
||||
u'announcement including an appropriate copyright notice and a '
|
||||
u'notice that there is no warranty (or else, saying that you '
|
||||
u'provide a warranty) and that users may redistribute the program '
|
||||
u'under these conditions, and telling the user how to view a copy '
|
||||
u'of this License. (Exception: if the Program itself is '
|
||||
u'interactive but does not normally print such an announcement, '
|
||||
u'your work based on the Program is not required to print an '
|
||||
u'announcement.)\n'
|
||||
u'\n'
|
||||
u'These requirements apply to the modified work as a whole. If '
|
||||
u'identifiable sections of that work are not derived from the '
|
||||
u'Program, and can be reasonably considered independent and '
|
||||
u'separate works in themselves, then this License, and its terms, '
|
||||
u'do not apply to those sections when you distribute them as '
|
||||
u'separate works. But when you distribute the same sections as '
|
||||
u'part of a whole which is a work based on the Program, the '
|
||||
u'distribution of the whole must be on the terms of this License, '
|
||||
u'whose permissions for other licensees extend to the entire '
|
||||
u'whole, and thus to each and every part regardless of who wrote '
|
||||
u'it.\n'
|
||||
u'\n'
|
||||
u'Thus, it is not the intent of this section to claim rights or '
|
||||
u'contest your rights to work written entirely by you; rather, the '
|
||||
u'intent is to exercise the right to control the distribution of '
|
||||
u'derivative or collective works based on the Program.\n'
|
||||
u'\n'
|
||||
u'In addition, mere aggregation of another work not based on the '
|
||||
u'Program with the Program (or with a work based on the Program) '
|
||||
u'on a volume of a storage or distribution medium does not bring '
|
||||
u'the other work under the scope of this License.\n'
|
||||
u'\n'
|
||||
u'3. You may copy and distribute the Program (or a work based on '
|
||||
u'it, under Section 2) in object code or executable form under the '
|
||||
u'terms of Sections 1 and 2 above provided that you also do one of '
|
||||
u'the following:\n'
|
||||
u'\n'
|
||||
u'a) Accompany it with the complete corresponding machine-readable '
|
||||
u'source code, which must be distributed under the terms of '
|
||||
u'Sections 1 and 2 above on a medium customarily used for software '
|
||||
u'interchange; or,\n'
|
||||
u'\n'
|
||||
u'b) Accompany it with a written offer, valid for at least three '
|
||||
u'years, to give any third party, for a charge no more than your '
|
||||
u'cost of physically performing source distribution, a complete '
|
||||
u'machine-readable copy of the corresponding source code, to be '
|
||||
u'distributed under the terms of Sections 1 and 2 above on a '
|
||||
u'medium customarily used for software interchange; or,\n'
|
||||
u'\n'
|
||||
u'c) Accompany it with the information you received as to the '
|
||||
u'offer to distribute corresponding source code. (This '
|
||||
u'alternative is allowed only for noncommercial distribution and '
|
||||
u'only if you received the program in object code or executable '
|
||||
u'form with such an offer, in accord with Subsection b above.)\n'
|
||||
u'\n'
|
||||
u'The source code for a work means the preferred form of the work '
|
||||
u'for making modifications to it. For an executable work, '
|
||||
u'complete source code means all the source code for all modules '
|
||||
u'it contains, plus any associated interface definition files, '
|
||||
u'plus the scripts used to control compilation and installation of '
|
||||
u'the executable. However, as a special exception, the source '
|
||||
u'code distributed need not include anything that is normally '
|
||||
u'distributed (in either source or binary form) with the major '
|
||||
u'components (compiler, kernel, and so on) of the operating system '
|
||||
u'on which the executable runs, unless that component itself '
|
||||
u'accompanies the executable.\n'
|
||||
u'\n'
|
||||
u'If distribution of executable or object code is made by offering '
|
||||
u'access to copy from a designated place, then offering equivalent '
|
||||
u'access to copy the source code from the same place counts as '
|
||||
u'distribution of the source code, even though third parties are '
|
||||
u'not compelled to copy the source along with the object code.\n'
|
||||
u'\n'
|
||||
u'4. You may not copy, modify, sublicense, or distribute the '
|
||||
u'Program except as expressly provided under this License. Any '
|
||||
u'attempt otherwise to copy, modify, sublicense or distribute the '
|
||||
u'Program is void, and will automatically terminate your rights '
|
||||
u'under this License. However, parties who have received copies, '
|
||||
u'or rights, from you under this License will not have their '
|
||||
u'licenses terminated so long as such parties remain in full '
|
||||
u'compliance.\n'
|
||||
u'\n'
|
||||
u'5. You are not required to accept this License, since you have '
|
||||
u'not signed it. However, nothing else grants you permission to '
|
||||
u'modify or distribute the Program or its derivative works. These '
|
||||
u'actions are prohibited by law if you do not accept this '
|
||||
u'License. Therefore, by modifying or distributing the Program '
|
||||
u'(or any work based on the Program), you indicate your acceptance '
|
||||
u'of this License to do so, and all its terms and conditions for '
|
||||
u'copying, distributing or modifying the Program or works based on '
|
||||
u'it.\n'
|
||||
u'\n'
|
||||
u'6. Each time you redistribute the Program (or any work based on '
|
||||
u'the Program), the recipient automatically receives a license '
|
||||
u'from the original licensor to copy, distribute or modify the '
|
||||
u'Program subject to these terms and conditions. You may not '
|
||||
u'impose any further restrictions on the recipients\' exercise of '
|
||||
u'the rights granted herein. You are not responsible for enforcing '
|
||||
u'compliance by third parties to this License.\n'
|
||||
u'\n'
|
||||
u'7. If, as a consequence of a court judgment or allegation of '
|
||||
u'patent infringement or for any other reason (not limited to '
|
||||
u'patent issues), conditions are imposed on you (whether by court '
|
||||
u'order, agreement or otherwise) that contradict the conditions of '
|
||||
u'this License, they do not excuse you from the conditions of this '
|
||||
u'License. If you cannot distribute so as to satisfy '
|
||||
u'simultaneously your obligations under this License and any other '
|
||||
u'pertinent obligations, then as a consequence you may not '
|
||||
u'distribute the Program at all. For example, if a patent license '
|
||||
u'would not permit royalty-free redistribution of the Program by '
|
||||
u'all those who receive copies directly or indirectly through you, '
|
||||
u'then the only way you could satisfy both it and this License '
|
||||
u'would be to refrain entirely from distribution of the Program.\n'
|
||||
u'\n'
|
||||
u'If any portion of this section is held invalid or unenforceable '
|
||||
u'under any particular circumstance, the balance of the section is '
|
||||
u'intended to apply and the section as a whole is intended to '
|
||||
u'apply in other circumstances.\n'
|
||||
u'\n'
|
||||
u'It is not the purpose of this section to induce you to infringe '
|
||||
u'any patents or other property right claims or to contest '
|
||||
u'validity of any such claims; this section has the sole purpose '
|
||||
u'of protecting the integrity of the free software distribution '
|
||||
u'system, which is implemented by public license practices. Many '
|
||||
u'people have made generous contributions to the wide range of '
|
||||
u'software distributed through that system in reliance on '
|
||||
u'consistent application of that system; it is up to the '
|
||||
u'author/donor to decide if he or she is willing to distribute '
|
||||
u'software through any other system and a licensee cannot impose '
|
||||
u'that choice.\n'
|
||||
u'\n'
|
||||
u'This section is intended to make thoroughly clear what is '
|
||||
u'believed to be a consequence of the rest of this License.\n'
|
||||
u'\n'
|
||||
u'8. If the distribution and/or use of the Program is restricted '
|
||||
u'in certain countries either by patents or by copyrighted '
|
||||
u'interfaces, the original copyright holder who places the Program '
|
||||
u'under this License may add an explicit geographical distribution '
|
||||
u'limitation excluding those countries, so that distribution is '
|
||||
u'permitted only in or among countries not thus excluded. In such '
|
||||
u'case, this License incorporates the limitation as if written in '
|
||||
u'the body of this License.\n'
|
||||
u'\n'
|
||||
u'9. The Free Software Foundation may publish revised and/or new '
|
||||
u'versions of the General Public License from time to time. Such '
|
||||
u'new versions will be similar in spirit to the present version, '
|
||||
u'but may differ in detail to address new problems or concerns.\n'
|
||||
u'\n'
|
||||
u'Each version is given a distinguishing version number. If the '
|
||||
u'Program specifies a version number of this License which applies '
|
||||
u'to it and \"any later version\', you have the option of '
|
||||
u'following the terms and conditions either of that version or of '
|
||||
u'any later version published by the Free Software Foundation. If '
|
||||
u'the Program does not specify a version number of this License, '
|
||||
u'you may choose any version ever published by the Free Software '
|
||||
u'Foundation.\n'
|
||||
u'\n'
|
||||
u'10. If you wish to incorporate parts of the Program into other '
|
||||
u'free programs whose distribution conditions are different, write '
|
||||
u'to the author to ask for permission. For software which is '
|
||||
u'copyrighted by the Free Software Foundation, write to the Free '
|
||||
u'Software Foundation; we sometimes make exceptions for this. Our '
|
||||
u'decision will be guided by the two goals of preserving the free '
|
||||
u'status of all derivatives of our free software and of promoting '
|
||||
u'the sharing and reuse of software generally.\n'
|
||||
u'\n'
|
||||
u'NO WARRANTY\n'
|
||||
u'\n'
|
||||
u'11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO '
|
||||
u'WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE '
|
||||
u'LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT '
|
||||
u'HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT '
|
||||
u'WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, '
|
||||
u'BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY '
|
||||
u'AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE '
|
||||
u'QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE '
|
||||
u'PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY '
|
||||
u'SERVICING, REPAIR OR CORRECTION.\n'
|
||||
u'\n'
|
||||
u'12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO '
|
||||
u'IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY '
|
||||
u'MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE '
|
||||
u'LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, '
|
||||
u'INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR '
|
||||
u'INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS '
|
||||
u'OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY '
|
||||
u'YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH '
|
||||
u'ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN '
|
||||
u'ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\n'
|
||||
u'\n'
|
||||
u'END OF TERMS AND CONDITIONS\n'
|
||||
u'\n'
|
||||
u'How to Apply These Terms to Your New Programs\n'
|
||||
u'\n'
|
||||
u'If you develop a new program, and you want it to be of the '
|
||||
u'greatest possible use to the public, the best way to achieve '
|
||||
u'this is to make it free software which everyone can redistribute '
|
||||
u'and change under these terms.\n'
|
||||
u'\n'
|
||||
u'To do so, attach the following notices to the program. It is '
|
||||
u'safest to attach them to the start of each source file to most '
|
||||
u'effectively convey the exclusion of warranty; and each file '
|
||||
u'should have at least the "copyright" line and a pointer to where '
|
||||
u'the full notice is found.\n'
|
||||
u'\n'
|
||||
u'<one line to give the program\'s name and a brief idea of what '
|
||||
u'it does.>\n'
|
||||
u'Copyright (C) <year> <name of author>\n'
|
||||
u'\n'
|
||||
u'This program is free software; you can redistribute it and/or '
|
||||
u'modify it under the terms of the GNU General Public License as '
|
||||
u'published by the Free Software Foundation; either version 2 of '
|
||||
u'the License, or (at your option) any later version.\n'
|
||||
u'\n'
|
||||
u'This program is distributed in the hope that it will be useful, '
|
||||
u'but WITHOUT ANY WARRANTY; without even the implied warranty of '
|
||||
u'MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the '
|
||||
u'GNU General Public License for more details.\n'
|
||||
u'\n'
|
||||
u'You should have received a copy of the GNU General Public '
|
||||
u'License along with this program; if not, write to the Free '
|
||||
u'Software Foundation, Inc., 51 Franklin Street, Fifth Floor, '
|
||||
u'Boston, MA 02110-1301 USA.\n'
|
||||
u'\n'
|
||||
u'Also add information on how to contact you by electronic and '
|
||||
u'paper mail.\n'
|
||||
u'\n'
|
||||
u'If the program is interactive, make it output a short notice '
|
||||
u'like this when it starts in an interactive mode:\n'
|
||||
u'\n'
|
||||
u'Gnomovision version 69, Copyright (C) year name of author\n'
|
||||
u'Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type '
|
||||
u'"show w".\n'
|
||||
u'This is free software, and you are welcome to redistribute it '
|
||||
u'under certain conditions; type "show c" for details.\n'
|
||||
u'\n'
|
||||
u'The hypothetical commands "show w" and "show c" should show '
|
||||
u'the appropriate parts of the General Public License. Of course, '
|
||||
u'the commands you use may be called something other than "show '
|
||||
u'w" and "show c"; they could even be mouse-clicks or menu items--'
|
||||
u'whatever suits your program.\n'
|
||||
u'\n'
|
||||
u'You should also get your employer (if you work as a programmer) '
|
||||
u'or your school, if any, to sign a "copyright disclaimer" for the '
|
||||
u'program, if necessary. Here is a sample; alter the names:\n'
|
||||
u'\n'
|
||||
u'Yoyodyne, Inc., hereby disclaims all copyright interest in the '
|
||||
u'program "Gnomovision" (which makes passes at compilers) written '
|
||||
u'by James Hacker.\n'
|
||||
u'\n'
|
||||
u'<signature of Ty Coon>, 1 April 1989\n'
|
||||
u'Ty Coon, President of Vice\n'
|
||||
u'\n'
|
||||
u'This General Public License does not permit incorporating your '
|
||||
u'program into proprietary programs. If your program is a '
|
||||
u'subroutine library, you may consider it more useful to permit '
|
||||
u'linking proprietary applications with the library. If this is '
|
||||
u'what you want to do, use the GNU Lesser General Public License '
|
||||
u'instead of this License.'))
|
||||
translate('AboutForm', 'Credits'))
|
||||
self.LicenseTextEdit.setPlainText(translate('AboutForm',
|
||||
'Copyright \xa9 2004-2010 Raoul Snyman\n'
|
||||
'Portions copyright \xa9 2004-2010 '
|
||||
'Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, '
|
||||
'Christian Richter, Maikel Stuivenberg, Martin Thompson, Jon '
|
||||
'Tibble, Carsten Tinggaard\n'
|
||||
'\n'
|
||||
'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.\n'
|
||||
'\n'
|
||||
'This program is distributed in the hope that it will be useful, '
|
||||
'but WITHOUT ANY WARRANTY; without even the implied warranty of '
|
||||
'MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below '
|
||||
'for more details.\n'
|
||||
'\n'
|
||||
'\n'
|
||||
'GNU GENERAL PUBLIC LICENSE\n'
|
||||
'Version 2, June 1991\n'
|
||||
'\n'
|
||||
'Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 '
|
||||
'Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. '
|
||||
'Everyone is permitted to copy and distribute verbatim copies of '
|
||||
'this license document, but changing it is not allowed.\n'
|
||||
'\n'
|
||||
'Preamble\n'
|
||||
'\n'
|
||||
'The licenses for most software are designed to take away your '
|
||||
'freedom to share and change it. By contrast, the GNU General '
|
||||
'Public License is intended to guarantee your freedom to share '
|
||||
'and change free software--to make sure the software is free for '
|
||||
'all its users. This General Public License applies to most of '
|
||||
'the Free Software Foundation\'s software and to any other '
|
||||
'program whose authors commit to using it. (Some other Free '
|
||||
'Software Foundation software is covered by the GNU Lesser '
|
||||
'General Public License instead.) You can apply it to your '
|
||||
'programs, too.\n'
|
||||
'\n'
|
||||
'When we speak of free software, we are referring to freedom, not '
|
||||
'price. Our General Public Licenses are designed to make sure '
|
||||
'that you have the freedom to distribute copies of free software '
|
||||
'(and charge for this service if you wish), that you receive '
|
||||
'source code or can get it if you want it, that you can change '
|
||||
'the software or use pieces of it in new free programs; and that '
|
||||
'you know you can do these things.\n'
|
||||
'\n'
|
||||
'To protect your rights, we need to make restrictions that forbid '
|
||||
'anyone to deny you these rights or to ask you to surrender the '
|
||||
'rights. These restrictions translate to certain responsibilities '
|
||||
'for you if you distribute copies of the software, or if you '
|
||||
'modify it.\n'
|
||||
'\n'
|
||||
'For example, if you distribute copies of such a program, whether '
|
||||
'gratis or for a fee, you must give the recipients all the rights '
|
||||
'that you have. You must make sure that they, too, receive or '
|
||||
'can get the source code. And you must show them these terms so '
|
||||
'they know their rights.\n'
|
||||
'\n'
|
||||
'We protect your rights with two steps: (1) copyright the '
|
||||
'software, and (2) offer you this license which gives you legal '
|
||||
'permission to copy, distribute and/or modify the software.\n'
|
||||
'\n'
|
||||
'Also, for each author\'s protection and ours, we want to make '
|
||||
'certain that everyone understands that there is no warranty for '
|
||||
'this free software. If the software is modified by someone else '
|
||||
'and passed on, we want its recipients to know that what they '
|
||||
'have is not the original, so that any problems introduced by '
|
||||
'others will not reflect on the original authors\' reputations.\n'
|
||||
'\n'
|
||||
'Finally, any free program is threatened constantly by software '
|
||||
'patents. We wish to avoid the danger that redistributors of a '
|
||||
'free program will individually obtain patent licenses, in effect '
|
||||
'making the program proprietary. To prevent this, we have made '
|
||||
'it clear that any patent must be licensed for everyone\'s free '
|
||||
'use or not licensed at all.\n'
|
||||
'\n'
|
||||
'The precise terms and conditions for copying, distribution and '
|
||||
'modification follow.\n'
|
||||
'\n'
|
||||
'GNU GENERAL PUBLIC LICENSE\n'
|
||||
'TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n'
|
||||
'\n'
|
||||
'0. This License applies to any program or other work which '
|
||||
'contains a notice placed by the copyright holder saying it may '
|
||||
'be distributed under the terms of this General Public License. '
|
||||
'The "Program", below, refers to any such program or work, and a '
|
||||
'"work based on the Program" means either the Program or any '
|
||||
'derivative work under copyright law: that is to say, a work '
|
||||
'containing the Program or a portion of it, either verbatim or '
|
||||
'with modifications and/or translated into another language. '
|
||||
'(Hereinafter, translation is included without limitation in the '
|
||||
'term "modification".) Each licensee is addressed as "you".\n'
|
||||
'\n'
|
||||
'Activities other than copying, distribution and modification are '
|
||||
'not covered by this License; they are outside its scope. The '
|
||||
'act of running the Program is not restricted, and the output '
|
||||
'from the Program is covered only if its contents constitute a '
|
||||
'work based on the Program (independent of having been made by '
|
||||
'running the Program). Whether that is true depends on what the '
|
||||
'Program does.\n'
|
||||
'\n'
|
||||
'1. You may copy and distribute verbatim copies of the Program\'s '
|
||||
'source code as you receive it, in any medium, provided that you '
|
||||
'conspicuously and appropriately publish on each copy an '
|
||||
'appropriate copyright notice and disclaimer of warranty; keep '
|
||||
'intact all the notices that refer to this License and to the '
|
||||
'absence of any warranty; and give any other recipients of the '
|
||||
'Program a copy of this License along with the Program.\n'
|
||||
'\n'
|
||||
'You may charge a fee for the physical act of transferring a '
|
||||
'copy, and you may at your option offer warranty protection in '
|
||||
'exchange for a fee.\n'
|
||||
'\n'
|
||||
'2. You may modify your copy or copies of the Program or any '
|
||||
'portion of it, thus forming a work based on the Program, and '
|
||||
'copy and distribute such modifications or work under the terms '
|
||||
'of Section 1 above, provided that you also meet all of these '
|
||||
'conditions:\n'
|
||||
'\n'
|
||||
'a) You must cause the modified files to carry prominent notices '
|
||||
'stating that you changed the files and the date of any change.\n'
|
||||
'\n'
|
||||
'b) You must cause any work that you distribute or publish, that '
|
||||
'in whole or in part contains or is derived from the Program or '
|
||||
'any part thereof, to be licensed as a whole at no charge to all '
|
||||
'third parties under the terms of this License.\n'
|
||||
'\n'
|
||||
'c) If the modified program normally reads commands interactively '
|
||||
'when run, you must cause it, when started running for such '
|
||||
'interactive use in the most ordinary way, to print or display an '
|
||||
'announcement including an appropriate copyright notice and a '
|
||||
'notice that there is no warranty (or else, saying that you '
|
||||
'provide a warranty) and that users may redistribute the program '
|
||||
'under these conditions, and telling the user how to view a copy '
|
||||
'of this License. (Exception: if the Program itself is '
|
||||
'interactive but does not normally print such an announcement, '
|
||||
'your work based on the Program is not required to print an '
|
||||
'announcement.)\n'
|
||||
'\n'
|
||||
'These requirements apply to the modified work as a whole. If '
|
||||
'identifiable sections of that work are not derived from the '
|
||||
'Program, and can be reasonably considered independent and '
|
||||
'separate works in themselves, then this License, and its terms, '
|
||||
'do not apply to those sections when you distribute them as '
|
||||
'separate works. But when you distribute the same sections as '
|
||||
'part of a whole which is a work based on the Program, the '
|
||||
'distribution of the whole must be on the terms of this License, '
|
||||
'whose permissions for other licensees extend to the entire '
|
||||
'whole, and thus to each and every part regardless of who wrote '
|
||||
'it.\n'
|
||||
'\n'
|
||||
'Thus, it is not the intent of this section to claim rights or '
|
||||
'contest your rights to work written entirely by you; rather, the '
|
||||
'intent is to exercise the right to control the distribution of '
|
||||
'derivative or collective works based on the Program.\n'
|
||||
'\n'
|
||||
'In addition, mere aggregation of another work not based on the '
|
||||
'Program with the Program (or with a work based on the Program) '
|
||||
'on a volume of a storage or distribution medium does not bring '
|
||||
'the other work under the scope of this License.\n'
|
||||
'\n'
|
||||
'3. You may copy and distribute the Program (or a work based on '
|
||||
'it, under Section 2) in object code or executable form under the '
|
||||
'terms of Sections 1 and 2 above provided that you also do one of '
|
||||
'the following:\n'
|
||||
'\n'
|
||||
'a) Accompany it with the complete corresponding machine-readable '
|
||||
'source code, which must be distributed under the terms of '
|
||||
'Sections 1 and 2 above on a medium customarily used for software '
|
||||
'interchange; or,\n'
|
||||
'\n'
|
||||
'b) Accompany it with a written offer, valid for at least three '
|
||||
'years, to give any third party, for a charge no more than your '
|
||||
'cost of physically performing source distribution, a complete '
|
||||
'machine-readable copy of the corresponding source code, to be '
|
||||
'distributed under the terms of Sections 1 and 2 above on a '
|
||||
'medium customarily used for software interchange; or,\n'
|
||||
'\n'
|
||||
'c) Accompany it with the information you received as to the '
|
||||
'offer to distribute corresponding source code. (This '
|
||||
'alternative is allowed only for noncommercial distribution and '
|
||||
'only if you received the program in object code or executable '
|
||||
'form with such an offer, in accord with Subsection b above.)\n'
|
||||
'\n'
|
||||
'The source code for a work means the preferred form of the work '
|
||||
'for making modifications to it. For an executable work, '
|
||||
'complete source code means all the source code for all modules '
|
||||
'it contains, plus any associated interface definition files, '
|
||||
'plus the scripts used to control compilation and installation of '
|
||||
'the executable. However, as a special exception, the source '
|
||||
'code distributed need not include anything that is normally '
|
||||
'distributed (in either source or binary form) with the major '
|
||||
'components (compiler, kernel, and so on) of the operating system '
|
||||
'on which the executable runs, unless that component itself '
|
||||
'accompanies the executable.\n'
|
||||
'\n'
|
||||
'If distribution of executable or object code is made by offering '
|
||||
'access to copy from a designated place, then offering equivalent '
|
||||
'access to copy the source code from the same place counts as '
|
||||
'distribution of the source code, even though third parties are '
|
||||
'not compelled to copy the source along with the object code.\n'
|
||||
'\n'
|
||||
'4. You may not copy, modify, sublicense, or distribute the '
|
||||
'Program except as expressly provided under this License. Any '
|
||||
'attempt otherwise to copy, modify, sublicense or distribute the '
|
||||
'Program is void, and will automatically terminate your rights '
|
||||
'under this License. However, parties who have received copies, '
|
||||
'or rights, from you under this License will not have their '
|
||||
'licenses terminated so long as such parties remain in full '
|
||||
'compliance.\n'
|
||||
'\n'
|
||||
'5. You are not required to accept this License, since you have '
|
||||
'not signed it. However, nothing else grants you permission to '
|
||||
'modify or distribute the Program or its derivative works. These '
|
||||
'actions are prohibited by law if you do not accept this '
|
||||
'License. Therefore, by modifying or distributing the Program '
|
||||
'(or any work based on the Program), you indicate your acceptance '
|
||||
'of this License to do so, and all its terms and conditions for '
|
||||
'copying, distributing or modifying the Program or works based on '
|
||||
'it.\n'
|
||||
'\n'
|
||||
'6. Each time you redistribute the Program (or any work based on '
|
||||
'the Program), the recipient automatically receives a license '
|
||||
'from the original licensor to copy, distribute or modify the '
|
||||
'Program subject to these terms and conditions. You may not '
|
||||
'impose any further restrictions on the recipients\' exercise of '
|
||||
'the rights granted herein. You are not responsible for enforcing '
|
||||
'compliance by third parties to this License.\n'
|
||||
'\n'
|
||||
'7. If, as a consequence of a court judgment or allegation of '
|
||||
'patent infringement or for any other reason (not limited to '
|
||||
'patent issues), conditions are imposed on you (whether by court '
|
||||
'order, agreement or otherwise) that contradict the conditions of '
|
||||
'this License, they do not excuse you from the conditions of this '
|
||||
'License. If you cannot distribute so as to satisfy '
|
||||
'simultaneously your obligations under this License and any other '
|
||||
'pertinent obligations, then as a consequence you may not '
|
||||
'distribute the Program at all. For example, if a patent license '
|
||||
'would not permit royalty-free redistribution of the Program by '
|
||||
'all those who receive copies directly or indirectly through you, '
|
||||
'then the only way you could satisfy both it and this License '
|
||||
'would be to refrain entirely from distribution of the Program.\n'
|
||||
'\n'
|
||||
'If any portion of this section is held invalid or unenforceable '
|
||||
'under any particular circumstance, the balance of the section is '
|
||||
'intended to apply and the section as a whole is intended to '
|
||||
'apply in other circumstances.\n'
|
||||
'\n'
|
||||
'It is not the purpose of this section to induce you to infringe '
|
||||
'any patents or other property right claims or to contest '
|
||||
'validity of any such claims; this section has the sole purpose '
|
||||
'of protecting the integrity of the free software distribution '
|
||||
'system, which is implemented by public license practices. Many '
|
||||
'people have made generous contributions to the wide range of '
|
||||
'software distributed through that system in reliance on '
|
||||
'consistent application of that system; it is up to the '
|
||||
'author/donor to decide if he or she is willing to distribute '
|
||||
'software through any other system and a licensee cannot impose '
|
||||
'that choice.\n'
|
||||
'\n'
|
||||
'This section is intended to make thoroughly clear what is '
|
||||
'believed to be a consequence of the rest of this License.\n'
|
||||
'\n'
|
||||
'8. If the distribution and/or use of the Program is restricted '
|
||||
'in certain countries either by patents or by copyrighted '
|
||||
'interfaces, the original copyright holder who places the Program '
|
||||
'under this License may add an explicit geographical distribution '
|
||||
'limitation excluding those countries, so that distribution is '
|
||||
'permitted only in or among countries not thus excluded. In such '
|
||||
'case, this License incorporates the limitation as if written in '
|
||||
'the body of this License.\n'
|
||||
'\n'
|
||||
'9. The Free Software Foundation may publish revised and/or new '
|
||||
'versions of the General Public License from time to time. Such '
|
||||
'new versions will be similar in spirit to the present version, '
|
||||
'but may differ in detail to address new problems or concerns.\n'
|
||||
'\n'
|
||||
'Each version is given a distinguishing version number. If the '
|
||||
'Program specifies a version number of this License which applies '
|
||||
'to it and \"any later version\', you have the option of '
|
||||
'following the terms and conditions either of that version or of '
|
||||
'any later version published by the Free Software Foundation. If '
|
||||
'the Program does not specify a version number of this License, '
|
||||
'you may choose any version ever published by the Free Software '
|
||||
'Foundation.\n'
|
||||
'\n'
|
||||
'10. If you wish to incorporate parts of the Program into other '
|
||||
'free programs whose distribution conditions are different, write '
|
||||
'to the author to ask for permission. For software which is '
|
||||
'copyrighted by the Free Software Foundation, write to the Free '
|
||||
'Software Foundation; we sometimes make exceptions for this. Our '
|
||||
'decision will be guided by the two goals of preserving the free '
|
||||
'status of all derivatives of our free software and of promoting '
|
||||
'the sharing and reuse of software generally.\n'
|
||||
'\n'
|
||||
'NO WARRANTY\n'
|
||||
'\n'
|
||||
'11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO '
|
||||
'WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE '
|
||||
'LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT '
|
||||
'HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT '
|
||||
'WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, '
|
||||
'BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY '
|
||||
'AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE '
|
||||
'QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE '
|
||||
'PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY '
|
||||
'SERVICING, REPAIR OR CORRECTION.\n'
|
||||
'\n'
|
||||
'12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO '
|
||||
'IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY '
|
||||
'MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE '
|
||||
'LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, '
|
||||
'INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR '
|
||||
'INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS '
|
||||
'OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY '
|
||||
'YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH '
|
||||
'ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN '
|
||||
'ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\n'
|
||||
'\n'
|
||||
'END OF TERMS AND CONDITIONS\n'
|
||||
'\n'
|
||||
'How to Apply These Terms to Your New Programs\n'
|
||||
'\n'
|
||||
'If you develop a new program, and you want it to be of the '
|
||||
'greatest possible use to the public, the best way to achieve '
|
||||
'this is to make it free software which everyone can redistribute '
|
||||
'and change under these terms.\n'
|
||||
'\n'
|
||||
'To do so, attach the following notices to the program. It is '
|
||||
'safest to attach them to the start of each source file to most '
|
||||
'effectively convey the exclusion of warranty; and each file '
|
||||
'should have at least the "copyright" line and a pointer to where '
|
||||
'the full notice is found.\n'
|
||||
'\n'
|
||||
'<one line to give the program\'s name and a brief idea of what '
|
||||
'it does.>\n'
|
||||
'Copyright (C) <year> <name of author>\n'
|
||||
'\n'
|
||||
'This program is free software; you can redistribute it and/or '
|
||||
'modify it under the terms of the GNU General Public License as '
|
||||
'published by the Free Software Foundation; either version 2 of '
|
||||
'the License, or (at your option) any later version.\n'
|
||||
'\n'
|
||||
'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.\n'
|
||||
'\n'
|
||||
'You should have received a copy of the GNU General Public '
|
||||
'License along with this program; if not, write to the Free '
|
||||
'Software Foundation, Inc., 51 Franklin Street, Fifth Floor, '
|
||||
'Boston, MA 02110-1301 USA.\n'
|
||||
'\n'
|
||||
'Also add information on how to contact you by electronic and '
|
||||
'paper mail.\n'
|
||||
'\n'
|
||||
'If the program is interactive, make it output a short notice '
|
||||
'like this when it starts in an interactive mode:\n'
|
||||
'\n'
|
||||
'Gnomovision version 69, Copyright (C) year name of author\n'
|
||||
'Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type '
|
||||
'"show w".\n'
|
||||
'This is free software, and you are welcome to redistribute it '
|
||||
'under certain conditions; type "show c" for details.\n'
|
||||
'\n'
|
||||
'The hypothetical commands "show w" and "show c" should show '
|
||||
'the appropriate parts of the General Public License. Of course, '
|
||||
'the commands you use may be called something other than "show '
|
||||
'w" and "show c"; they could even be mouse-clicks or menu items--'
|
||||
'whatever suits your program.\n'
|
||||
'\n'
|
||||
'You should also get your employer (if you work as a programmer) '
|
||||
'or your school, if any, to sign a "copyright disclaimer" for the '
|
||||
'program, if necessary. Here is a sample; alter the names:\n'
|
||||
'\n'
|
||||
'Yoyodyne, Inc., hereby disclaims all copyright interest in the '
|
||||
'program "Gnomovision" (which makes passes at compilers) written '
|
||||
'by James Hacker.\n'
|
||||
'\n'
|
||||
'<signature of Ty Coon>, 1 April 1989\n'
|
||||
'Ty Coon, President of Vice\n'
|
||||
'\n'
|
||||
'This General Public License does not permit incorporating your '
|
||||
'program into proprietary programs. If your program is a '
|
||||
'subroutine library, you may consider it more useful to permit '
|
||||
'linking proprietary applications with the library. If this is '
|
||||
'what you want to do, use the GNU Lesser General Public License '
|
||||
'instead of this License.'))
|
||||
self.AboutNotebook.setTabText(
|
||||
self.AboutNotebook.indexOf(self.LicenseTab),
|
||||
translate(u'AboutForm', u'License'))
|
||||
self.ContributeButton.setText(translate(u'AboutForm', u'Contribute'))
|
||||
self.CloseButton.setText(translate(u'AboutForm', u'Close'))
|
||||
translate('AboutForm', 'License'))
|
||||
self.ContributeButton.setText(translate('AboutForm', 'Contribute'))
|
||||
self.CloseButton.setText(translate('AboutForm', 'Close'))
|
||||
|
@ -44,7 +44,7 @@ class AboutForm(QtGui.QDialog, Ui_AboutDialog):
|
||||
about_text = about_text.replace(u'<version>',
|
||||
self.applicationVersion[u'version'])
|
||||
if self.applicationVersion[u'build']:
|
||||
build_text = unicode(translate(u'AboutForm', u' build %s')) % \
|
||||
build_text = unicode(translate('AboutForm', ' build %s')) % \
|
||||
self.applicationVersion[u'build']
|
||||
else:
|
||||
build_text = u''
|
||||
|
@ -750,158 +750,153 @@ class Ui_AmendThemeDialog(object):
|
||||
|
||||
def retranslateUi(self, AmendThemeDialog):
|
||||
AmendThemeDialog.setWindowTitle(
|
||||
translate(u'AmendThemeForm', u'Theme Maintenance'))
|
||||
translate('AmendThemeForm', 'Theme Maintenance'))
|
||||
self.ThemeNameLabel.setText(
|
||||
translate(u'AmendThemeForm', u'Theme Name:'))
|
||||
translate('AmendThemeForm', 'Theme Name:'))
|
||||
self.BackgroundLabel.setText(
|
||||
translate(u'AmendThemeForm', u'Background:'))
|
||||
translate('AmendThemeForm', 'Visibility:'))
|
||||
self.BackgroundComboBox.setItemText(0,
|
||||
translate(u'AmendThemeForm', u'Opaque'))
|
||||
translate('AmendThemeForm', 'Opaque'))
|
||||
self.BackgroundComboBox.setItemText(1,
|
||||
translate(u'AmendThemeForm', u'Transparent'))
|
||||
translate('AmendThemeForm', 'Transparent'))
|
||||
self.BackgroundTypeLabel.setText(
|
||||
translate(u'AmendThemeForm', u'Background Type:'))
|
||||
translate('AmendThemeForm', 'Type:'))
|
||||
self.BackgroundTypeComboBox.setItemText(0,
|
||||
translate(u'AmendThemeForm', u'Solid Color'))
|
||||
translate('AmendThemeForm', 'Solid Color'))
|
||||
self.BackgroundTypeComboBox.setItemText(1,
|
||||
translate(u'AmendThemeForm', u'Gradient'))
|
||||
translate('AmendThemeForm', 'Gradient'))
|
||||
self.BackgroundTypeComboBox.setItemText(2,
|
||||
translate(u'AmendThemeForm', u'Image'))
|
||||
self.Color1Label.setText(translate(u'AmendThemeForm', u'<Color1>'))
|
||||
self.Color2Label.setText(translate(u'AmendThemeForm', u'<Color2>'))
|
||||
self.ImageLabel.setText(translate(u'AmendThemeForm', u'Image:'))
|
||||
self.GradientLabel.setText(translate(u'AmendThemeForm', u'Gradient :'))
|
||||
translate('AmendThemeForm', 'Image'))
|
||||
self.Color1Label.setText(u'<Color1>:')
|
||||
self.Color2Label.setText(u'<Color2>:')
|
||||
self.ImageLabel.setText(translate('AmendThemeForm', 'Image:'))
|
||||
self.GradientLabel.setText(translate('AmendThemeForm', 'Gradient:'))
|
||||
self.GradientComboBox.setItemText(0,
|
||||
translate(u'AmendThemeForm', u'Horizontal'))
|
||||
translate('AmendThemeForm', 'Horizontal'))
|
||||
self.GradientComboBox.setItemText(1,
|
||||
translate(u'AmendThemeForm', u'Vertical'))
|
||||
translate('AmendThemeForm', 'Vertical'))
|
||||
self.GradientComboBox.setItemText(2,
|
||||
translate(u'AmendThemeForm', u'Circular'))
|
||||
translate('AmendThemeForm', 'Circular'))
|
||||
self.ThemeTabWidget.setTabText(
|
||||
self.ThemeTabWidget.indexOf(self.BackgroundTab),
|
||||
translate(u'AmendThemeForm', u'Background'))
|
||||
translate('AmendThemeForm', '&Background'))
|
||||
self.FontMainGroupBox.setTitle(
|
||||
translate(u'AmendThemeForm', u'Main Font'))
|
||||
self.FontMainlabel.setText(translate(u'AmendThemeForm', u'Font:'))
|
||||
translate('AmendThemeForm', 'Main Font'))
|
||||
self.FontMainlabel.setText(translate('AmendThemeForm', 'Font:'))
|
||||
self.FontMainColorLabel.setText(
|
||||
translate(u'AmendThemeForm', u'Font Color:'))
|
||||
self.FontMainSize.setText(translate(u'AmendThemeForm', u'Size:'))
|
||||
self.FontMainSizeSpinBox.setSuffix(translate(u'AmendThemeForm', u'pt'))
|
||||
translate('AmendThemeForm', 'Color:'))
|
||||
self.FontMainSize.setText(translate('AmendThemeForm', 'Size:'))
|
||||
self.FontMainSizeSpinBox.setSuffix(translate('AmendThemeForm', 'pt'))
|
||||
self.FontMainWrapIndentationLabel.setText(
|
||||
translate(u'AmendThemeForm', u'Wrap Indentation'))
|
||||
translate('AmendThemeForm', 'Wrap indentation:'))
|
||||
self.FontMainWrapLineAdjustmentLabel.setText(
|
||||
translate(u'AmendThemeForm', u'Adjust Line Spacing'))
|
||||
translate('AmendThemeForm', 'Adjust line spacing:'))
|
||||
self.FontMainWeightComboBox.setItemText(0,
|
||||
translate(u'AmendThemeForm', u'Normal'))
|
||||
translate('AmendThemeForm', 'Normal'))
|
||||
self.FontMainWeightComboBox.setItemText(1,
|
||||
translate(u'AmendThemeForm', u'Bold'))
|
||||
translate('AmendThemeForm', 'Bold'))
|
||||
self.FontMainWeightComboBox.setItemText(2,
|
||||
translate(u'AmendThemeForm', u'Italics'))
|
||||
translate('AmendThemeForm', 'Italics'))
|
||||
self.FontMainWeightComboBox.setItemText(3,
|
||||
translate(u'AmendThemeForm', u'Bold/Italics'))
|
||||
translate('AmendThemeForm', 'Bold/Italics'))
|
||||
self.FontMainWeightLabel.setText(
|
||||
translate(u'AmendThemeForm', u'Font Weight:'))
|
||||
translate('AmendThemeForm', 'Style:'))
|
||||
self.MainLocationGroupBox.setTitle(
|
||||
translate(u'AmendThemeForm', u'Display Location'))
|
||||
translate('AmendThemeForm', 'Display Location'))
|
||||
self.DefaultLocationLabel.setText(
|
||||
translate(u'AmendThemeForm', u'Use Default Location:'))
|
||||
translate('AmendThemeForm', 'Use default location:'))
|
||||
self.FontMainXLabel.setText(
|
||||
translate(u'AmendThemeForm', u'X Position:'))
|
||||
translate('AmendThemeForm', 'X position:'))
|
||||
self.FontMainYLabel.setText(
|
||||
translate(u'AmendThemeForm', u'Y Position:'))
|
||||
translate('AmendThemeForm', 'Y position:'))
|
||||
self.FontMainWidthLabel.setText(
|
||||
translate(u'AmendThemeForm', u'Width:'))
|
||||
translate('AmendThemeForm', 'Width:'))
|
||||
self.FontMainHeightLabel.setText(
|
||||
translate(u'AmendThemeForm', u'Height:'))
|
||||
self.FontMainXSpinBox.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(
|
||||
translate(u'AmendThemeForm', u'px'))
|
||||
translate('AmendThemeForm', 'Height:'))
|
||||
self.FontMainXSpinBox.setSuffix(translate('AmendThemeForm', 'px'))
|
||||
self.FontMainYSpinBox.setSuffix(translate('AmendThemeForm', 'px'))
|
||||
self.FontMainWidthSpinBox.setSuffix(translate('AmendThemeForm', 'px'))
|
||||
self.FontMainHeightSpinBox.setSuffix(translate('AmendThemeForm', 'px'))
|
||||
self.ThemeTabWidget.setTabText(
|
||||
self.ThemeTabWidget.indexOf(self.FontMainTab),
|
||||
translate(u'AmendThemeForm', u'Font Main'))
|
||||
translate('AmendThemeForm', '&Main Font'))
|
||||
self.FooterFontGroupBox.setTitle(
|
||||
translate(u'AmendThemeForm', u'Footer Font'))
|
||||
self.FontFooterLabel.setText(translate(u'AmendThemeForm', u'Font:'))
|
||||
translate('AmendThemeForm', 'Footer Font'))
|
||||
self.FontFooterLabel.setText(translate('AmendThemeForm', 'Font:'))
|
||||
self.FontFooterColorLabel.setText(
|
||||
translate(u'AmendThemeForm', u'Font Color:'))
|
||||
self.FontFooterSizeLabel.setText(translate(u'AmendThemeForm', u'Size:'))
|
||||
self.FontFooterSizeSpinBox.setSuffix(
|
||||
translate(u'AmendThemeForm', u'pt'))
|
||||
translate('AmendThemeForm', 'Color:'))
|
||||
self.FontFooterSizeLabel.setText(translate('AmendThemeForm', 'Size:'))
|
||||
self.FontFooterSizeSpinBox.setSuffix(translate('AmendThemeForm', 'pt'))
|
||||
self.FontFooterWeightComboBox.setItemText(0,
|
||||
translate(u'AmendThemeForm', u'Normal'))
|
||||
translate('AmendThemeForm', 'Normal'))
|
||||
self.FontFooterWeightComboBox.setItemText(1,
|
||||
translate(u'AmendThemeForm', u'Bold'))
|
||||
translate('AmendThemeForm', 'Bold'))
|
||||
self.FontFooterWeightComboBox.setItemText(2,
|
||||
translate(u'AmendThemeForm', u'Italics'))
|
||||
translate('AmendThemeForm', 'Italics'))
|
||||
self.FontFooterWeightComboBox.setItemText(3,
|
||||
translate(u'AmendThemeForm', u'Bold/Italics'))
|
||||
translate('AmendThemeForm', 'Bold/Italics'))
|
||||
self.FontFooterWeightLabel.setText(
|
||||
translate(u'AmendThemeForm', u'Font Weight:'))
|
||||
translate('AmendThemeForm', 'Style:'))
|
||||
self.LocationFooterGroupBox.setTitle(
|
||||
translate(u'AmendThemeForm', u'Display Location'))
|
||||
translate('AmendThemeForm', 'Display Location'))
|
||||
self.FontFooterDefaultLabel.setText(
|
||||
translate(u'AmendThemeForm', u'Use Default Location:'))
|
||||
translate('AmendThemeForm', 'Use default location:'))
|
||||
self.FontFooterXLabel.setText(
|
||||
translate(u'AmendThemeForm', u'X Position:'))
|
||||
translate('AmendThemeForm', 'X position:'))
|
||||
self.FontFooterYLabel.setText(
|
||||
translate(u'AmendThemeForm', u'Y Position:'))
|
||||
translate('AmendThemeForm', 'Y position:'))
|
||||
self.FontFooterWidthLabel.setText(
|
||||
translate(u'AmendThemeForm', u'Width:'))
|
||||
translate('AmendThemeForm', 'Width:'))
|
||||
self.FontFooterHeightLabel.setText(
|
||||
translate(u'AmendThemeForm', u'Height:'))
|
||||
self.FontFooterXSpinBox.setSuffix(
|
||||
translate(u'AmendThemeForm', u'px'))
|
||||
self.FontFooterYSpinBox.setSuffix(
|
||||
translate(u'AmendThemeForm', u'px'))
|
||||
self.FontFooterWidthSpinBox.setSuffix(
|
||||
translate(u'AmendThemeForm', u'px'))
|
||||
translate('AmendThemeForm', 'Height:'))
|
||||
self.FontFooterXSpinBox.setSuffix(translate('AmendThemeForm', 'px'))
|
||||
self.FontFooterYSpinBox.setSuffix(translate('AmendThemeForm', 'px'))
|
||||
self.FontFooterWidthSpinBox.setSuffix(translate('AmendThemeForm', 'px'))
|
||||
self.FontFooterHeightSpinBox.setSuffix(
|
||||
translate(u'AmendThemeForm', u'px'))
|
||||
translate('AmendThemeForm', 'px'))
|
||||
self.ThemeTabWidget.setTabText(
|
||||
self.ThemeTabWidget.indexOf(self.FontFooterTab),
|
||||
translate(u'AmendThemeForm', u'Font Footer'))
|
||||
self.OutlineGroupBox.setTitle(translate(u'AmendThemeForm', u'Outline'))
|
||||
translate('AmendThemeForm', '&Footer Font'))
|
||||
self.OutlineGroupBox.setTitle(translate('AmendThemeForm', 'Outline'))
|
||||
self.OutlineSpinBoxLabel.setText(
|
||||
translate(u'AmendThemeForm', u'Outline Size:'))
|
||||
self.OutlineSpinBox.setSuffix(translate(u'AmendThemeForm', u'px'))
|
||||
translate('AmendThemeForm', 'Outline size:'))
|
||||
self.OutlineSpinBox.setSuffix(translate('AmendThemeForm', 'px'))
|
||||
self.OutlineColorLabel.setText(
|
||||
translate(u'AmendThemeForm', u'Outline Color:'))
|
||||
translate('AmendThemeForm', 'Outline color:'))
|
||||
self.OutlineEnabledLabel.setText(
|
||||
translate(u'AmendThemeForm', u'Show Outline:'))
|
||||
self.ShadowGroupBox.setTitle(translate(u'AmendThemeForm', u'Shadow'))
|
||||
translate('AmendThemeForm', 'Show outline:'))
|
||||
self.ShadowGroupBox.setTitle(translate('AmendThemeForm', 'Shadow'))
|
||||
self.ShadowSpinBoxLabel.setText(
|
||||
translate(u'AmendThemeForm', u'Shadow Size:'))
|
||||
self.ShadowSpinBox.setSuffix(translate(u'AmendThemeForm', u'px'))
|
||||
translate('AmendThemeForm', 'Shadow size:'))
|
||||
self.ShadowSpinBox.setSuffix(translate('AmendThemeForm', 'px'))
|
||||
self.ShadowColorLabel.setText(
|
||||
translate(u'AmendThemeForm', u'Shadow Color:'))
|
||||
translate('AmendThemeForm', 'Shadow color:'))
|
||||
self.ShadowEnabledLabel.setText(
|
||||
translate(u'AmendThemeForm', u'Show Shadow:'))
|
||||
translate('AmendThemeForm', 'Show shadow:'))
|
||||
self.AlignmentGroupBox.setTitle(
|
||||
translate(u'AmendThemeForm', u'Alignment'))
|
||||
translate('AmendThemeForm', 'Alignment'))
|
||||
self.HorizontalLabel.setText(
|
||||
translate(u'AmendThemeForm', u'Horizontal Align:'))
|
||||
translate('AmendThemeForm', 'Horizontal align:'))
|
||||
self.HorizontalComboBox.setItemText(0,
|
||||
translate(u'AmendThemeForm', u'Left'))
|
||||
translate('AmendThemeForm', 'Left'))
|
||||
self.HorizontalComboBox.setItemText(1,
|
||||
translate(u'AmendThemeForm', u'Right'))
|
||||
translate('AmendThemeForm', 'Right'))
|
||||
self.HorizontalComboBox.setItemText(2,
|
||||
translate(u'AmendThemeForm', u'Center'))
|
||||
translate('AmendThemeForm', 'Center'))
|
||||
self.VerticalLabel.setText(
|
||||
translate(u'AmendThemeForm', u'Vertical Align:'))
|
||||
translate('AmendThemeForm', 'Vertical align:'))
|
||||
self.VerticalComboBox.setItemText(0,
|
||||
translate(u'AmendThemeForm', u'Top'))
|
||||
translate('AmendThemeForm', 'Top'))
|
||||
self.VerticalComboBox.setItemText(1,
|
||||
translate(u'AmendThemeForm', u'Middle'))
|
||||
translate('AmendThemeForm', 'Middle'))
|
||||
self.VerticalComboBox.setItemText(2,
|
||||
translate(u'AmendThemeForm', u'Bottom'))
|
||||
translate('AmendThemeForm', 'Bottom'))
|
||||
self.TransitionGroupBox.setTitle(
|
||||
translate(u'AmendThemeForm', u'Slide Transition'))
|
||||
translate('AmendThemeForm', 'Slide Transition'))
|
||||
self.SlideTransitionCheckedBoxLabel.setText(
|
||||
translate(u'AmendThemeForm', u'Transition Active:'))
|
||||
translate('AmendThemeForm', 'Transition active:'))
|
||||
self.ThemeTabWidget.setTabText(
|
||||
self.ThemeTabWidget.indexOf(self.OtherOptionsTab),
|
||||
translate(u'AmendThemeForm', u'Other Options'))
|
||||
self.PreviewGroupBox.setTitle(translate(u'AmendThemeForm', u'Preview'))
|
||||
translate('AmendThemeForm', '&Other Options'))
|
||||
self.PreviewGroupBox.setTitle(translate('AmendThemeForm', 'Preview'))
|
||||
|
||||
|
@ -138,8 +138,8 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog):
|
||||
|
||||
def accept(self):
|
||||
new_theme = ThemeXML()
|
||||
theme_name = unicode(self.ThemeNameEdit.displayText())
|
||||
new_theme.new_document(theme_name.encode('unicode-escape'))
|
||||
theme_name = unicode(self.ThemeNameEdit.text())
|
||||
new_theme.new_document(theme_name)
|
||||
save_from = None
|
||||
save_to = None
|
||||
if self.theme.background_mode == u'transparent':
|
||||
@ -209,8 +209,8 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog):
|
||||
self.previewTheme()
|
||||
|
||||
def onImageToolButtonClicked(self):
|
||||
filename = QtGui.QFileDialog.getOpenFileName(
|
||||
self, translate(u'AmendThemeForm', u'Open file'))
|
||||
filename = unicode(QtGui.QFileDialog.getOpenFileName(
|
||||
self, translate('AmendThemeForm', 'Open File')))
|
||||
if filename:
|
||||
self.ImageLineEdit.setText(filename)
|
||||
self.theme.background_filename = filename
|
||||
@ -647,7 +647,7 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog):
|
||||
self.Color1PushButton.setStyleSheet(
|
||||
u'background-color: %s' % unicode(theme.background_color))
|
||||
self.Color1Label.setText(
|
||||
translate(u'AmendThemeForm', u'Background Color:'))
|
||||
translate('AmendThemeForm', 'Color:'))
|
||||
self.Color1Label.setVisible(True)
|
||||
self.Color1PushButton.setVisible(True)
|
||||
self.Color2Label.setVisible(False)
|
||||
@ -663,9 +663,9 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog):
|
||||
self.Color2PushButton.setStyleSheet(u'background-color: %s' \
|
||||
% unicode(theme.background_endColor))
|
||||
self.Color1Label.setText(
|
||||
translate(u'AmendThemeForm', u'First Color:'))
|
||||
translate('AmendThemeForm', 'First color:'))
|
||||
self.Color2Label.setText(
|
||||
translate(u'AmendThemeForm', u'Second Color:'))
|
||||
translate('AmendThemeForm', 'Second color:'))
|
||||
self.Color1Label.setVisible(True)
|
||||
self.Color1PushButton.setVisible(True)
|
||||
self.Color2Label.setVisible(True)
|
||||
@ -734,7 +734,7 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog):
|
||||
(self.FontMainHeightSpinBox.value(), metrics.height(),
|
||||
page_length))
|
||||
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)
|
||||
frame = self.thememanager.generateImage(self.theme)
|
||||
self.ThemePreview.setPixmap(QtGui.QPixmap.fromImage(frame))
|
||||
|
@ -42,7 +42,7 @@ class DisplayTab(SettingsTab):
|
||||
"""
|
||||
Set up the UI widgets to show the settings
|
||||
"""
|
||||
self.tabTitleVisible = translate(u'DisplayTab', u'Displays')
|
||||
self.tabTitleVisible = translate('DisplayTab', 'Displays')
|
||||
self.layoutWidget = QtGui.QWidget(self)
|
||||
self.layoutWidget.setGeometry(QtCore.QRect(0, 40, 241, 79))
|
||||
self.layoutWidget.setObjectName(u'layoutWidget')
|
||||
@ -164,25 +164,25 @@ class DisplayTab(SettingsTab):
|
||||
"""
|
||||
Provide i18n support for this UI
|
||||
"""
|
||||
self.setWindowTitle(translate(u'DisplayTab', u'Amend Display Settings'))
|
||||
self.setWindowTitle(translate('DisplayTab', 'Amend Display Settings'))
|
||||
self.CurrentGroupBox.setTitle(
|
||||
translate(u'DisplayTab', u'Default Settings'))
|
||||
self.XLabel.setText(translate(u'DisplayTab', u'X'))
|
||||
translate('DisplayTab', 'Default Settings'))
|
||||
self.XLabel.setText(translate('DisplayTab', 'X'))
|
||||
self.Xpos.setText(u'0')
|
||||
self.YLabel.setText(translate(u'DisplayTab', u'Y'))
|
||||
self.YLabel.setText(translate('DisplayTab', 'Y'))
|
||||
self.Ypos.setText(u'0')
|
||||
self.HeightLabel.setText(translate(u'DisplayTab', u'Height'))
|
||||
self.HeightLabel.setText(translate('DisplayTab', 'Height'))
|
||||
self.Height.setText(u'0')
|
||||
self.WidthLabel.setText(translate(u'DisplayTab', u'Width'))
|
||||
self.WidthLabel.setText(translate('DisplayTab', 'Width'))
|
||||
self.Width.setText(u'0')
|
||||
self.CurrentGroupBox_2.setTitle(
|
||||
translate(u'DisplayTab', u'Amend Settings'))
|
||||
self.XAmendLabel.setText(translate(u'DisplayTab', u'X'))
|
||||
self.YAmendLabel.setText(translate(u'DisplayTab', u'Y'))
|
||||
self.HeightAmendLabel.setText(translate(u'DisplayTab', u'Height'))
|
||||
self.WidthAmendLabel.setText(translate(u'DisplayTab', u'Width'))
|
||||
translate('DisplayTab', 'Amend Settings'))
|
||||
self.XAmendLabel.setText(translate('DisplayTab', 'X'))
|
||||
self.YAmendLabel.setText(translate('DisplayTab', 'Y'))
|
||||
self.HeightAmendLabel.setText(translate('DisplayTab', 'Height'))
|
||||
self.WidthAmendLabel.setText(translate('DisplayTab', 'Width'))
|
||||
self.OverrideCheckBox.setText(
|
||||
translate(u'DisplayTab', u'Override Output Display'))
|
||||
translate('DisplayTab', 'Override Output Display'))
|
||||
|
||||
def load(self):
|
||||
"""
|
||||
|
@ -54,7 +54,7 @@ class GeneralTab(SettingsTab):
|
||||
|
||||
def setupUi(self):
|
||||
self.setObjectName(u'GeneralTab')
|
||||
self.tabTitleVisible = translate(u'GeneralTab', u'General')
|
||||
self.tabTitleVisible = translate('GeneralTab', 'General')
|
||||
self.GeneralLayout = QtGui.QHBoxLayout(self)
|
||||
self.GeneralLayout.setSpacing(8)
|
||||
self.GeneralLayout.setMargin(8)
|
||||
@ -177,32 +177,32 @@ class GeneralTab(SettingsTab):
|
||||
QtCore.SIGNAL(u'editingFinished()'), self.onPasswordEditLostFocus)
|
||||
|
||||
def retranslateUi(self):
|
||||
self.MonitorGroupBox.setTitle(translate(u'GeneralTab', u'Monitors'))
|
||||
self.MonitorGroupBox.setTitle(translate('GeneralTab', 'Monitors'))
|
||||
self.MonitorLabel.setText(
|
||||
translate(u'GeneralTab', u'Select monitor for output display:'))
|
||||
translate('GeneralTab', 'Select monitor for output display:'))
|
||||
self.DisplayOnMonitorCheck.setText(
|
||||
translate(u'GeneralTab', u'Display if a single screen'))
|
||||
translate('GeneralTab', 'Display if a single screen'))
|
||||
self.StartupGroupBox.setTitle(
|
||||
translate(u'GeneralTab', u'Application Startup'))
|
||||
translate('GeneralTab', 'Application Startup'))
|
||||
self.WarningCheckBox.setText(
|
||||
translate(u'GeneralTab', u'Show blank screen warning'))
|
||||
translate('GeneralTab', 'Show blank screen warning'))
|
||||
self.AutoOpenCheckBox.setText(
|
||||
translate(u'GeneralTab', u'Automatically open the last service'))
|
||||
translate('GeneralTab', 'Automatically open the last service'))
|
||||
self.ShowSplashCheckBox.setText(
|
||||
translate(u'GeneralTab', u'Show the splash screen'))
|
||||
translate('GeneralTab', 'Show the splash screen'))
|
||||
self.SettingsGroupBox.setTitle(
|
||||
translate(u'GeneralTab', u'Application Settings'))
|
||||
translate('GeneralTab', 'Application Settings'))
|
||||
self.SaveCheckServiceCheckBox.setText(
|
||||
translate(u'GeneralTab',
|
||||
u'Prompt to save Service before starting New'))
|
||||
translate('GeneralTab',
|
||||
'Prompt to save Service before starting New'))
|
||||
self.AutoPreviewCheckBox.setText(
|
||||
translate(u'GeneralTab', u'Preview Next Song from Service Manager'))
|
||||
self.CCLIGroupBox.setTitle(translate(u'GeneralTab', u'CCLI Details'))
|
||||
self.NumberLabel.setText(translate(u'GeneralTab', u'CCLI Number:'))
|
||||
translate('GeneralTab', 'Preview Next Song from Service Manager'))
|
||||
self.CCLIGroupBox.setTitle(translate('GeneralTab', 'CCLI Details'))
|
||||
self.NumberLabel.setText(translate('GeneralTab', 'CCLI Number:'))
|
||||
self.UsernameLabel.setText(
|
||||
translate(u'GeneralTab', u'SongSelect Username:'))
|
||||
translate('GeneralTab', 'SongSelect Username:'))
|
||||
self.PasswordLabel.setText(
|
||||
translate(u'GeneralTab', u'SongSelect Password:'))
|
||||
translate('GeneralTab', 'SongSelect Password:'))
|
||||
|
||||
def onMonitorComboBoxChanged(self):
|
||||
self.MonitorNumber = self.MonitorComboBox.currentIndex()
|
||||
@ -238,11 +238,11 @@ class GeneralTab(SettingsTab):
|
||||
settings = QtCore.QSettings()
|
||||
settings.beginGroup(self.settingsSection)
|
||||
for screen in self.screens.screen_list:
|
||||
screen_name = u'%s %d' % (translate(u'GeneralTab', u'Screen'),
|
||||
screen_name = u'%s %d' % (translate('GeneralTab', 'Screen'),
|
||||
screen[u'number'] + 1)
|
||||
if screen[u'primary']:
|
||||
screen_name = u'%s (%s)' % (screen_name,
|
||||
translate(u'GeneralTab', u'primary'))
|
||||
translate('GeneralTab', 'primary'))
|
||||
self.MonitorComboBox.addItem(screen_name)
|
||||
# Get the configs
|
||||
self.Warning = settings.value(
|
||||
|
@ -354,113 +354,111 @@ class Ui_MainWindow(object):
|
||||
"""
|
||||
Set up the translation system
|
||||
"""
|
||||
MainWindow.mainTitle = translate(u'MainWindow', u'OpenLP 2.0')
|
||||
MainWindow.language = translate(u'MainWindow', u'English')
|
||||
MainWindow.defaultThemeText = translate(u'MainWindow',
|
||||
u'Default Theme: ')
|
||||
MainWindow.mainTitle = translate('MainWindow', 'OpenLP 2.0')
|
||||
MainWindow.language = translate('MainWindow', 'English')
|
||||
MainWindow.setWindowTitle(MainWindow.mainTitle)
|
||||
self.FileMenu.setTitle(translate(u'MainWindow', u'&File'))
|
||||
self.FileImportMenu.setTitle(translate(u'MainWindow', u'&Import'))
|
||||
self.FileExportMenu.setTitle(translate(u'MainWindow', u'&Export'))
|
||||
self.OptionsMenu.setTitle(translate(u'MainWindow', u'&Options'))
|
||||
self.OptionsViewMenu.setTitle(translate(u'MainWindow', u'&View'))
|
||||
self.ViewModeMenu.setTitle(translate(u'MainWindow', u'M&ode'))
|
||||
self.OptionsLanguageMenu.setTitle(translate(u'MainWindow',
|
||||
u'&Language'))
|
||||
self.ToolsMenu.setTitle(translate(u'MainWindow', u'&Tools'))
|
||||
self.HelpMenu.setTitle(translate(u'MainWindow', u'&Help'))
|
||||
self.FileMenu.setTitle(translate('MainWindow', '&File'))
|
||||
self.FileImportMenu.setTitle(translate('MainWindow', '&Import'))
|
||||
self.FileExportMenu.setTitle(translate('MainWindow', '&Export'))
|
||||
self.OptionsMenu.setTitle(translate('MainWindow', '&Options'))
|
||||
self.OptionsViewMenu.setTitle(translate('MainWindow', '&View'))
|
||||
self.ViewModeMenu.setTitle(translate('MainWindow', 'M&ode'))
|
||||
self.OptionsLanguageMenu.setTitle(translate('MainWindow',
|
||||
'&Language'))
|
||||
self.ToolsMenu.setTitle(translate('MainWindow', '&Tools'))
|
||||
self.HelpMenu.setTitle(translate('MainWindow', '&Help'))
|
||||
self.MediaManagerDock.setWindowTitle(
|
||||
translate(u'MainWindow', u'Media Manager'))
|
||||
translate('MainWindow', 'Media Manager'))
|
||||
self.ServiceManagerDock.setWindowTitle(
|
||||
translate(u'MainWindow', u'Service Manager'))
|
||||
translate('MainWindow', 'Service Manager'))
|
||||
self.ThemeManagerDock.setWindowTitle(
|
||||
translate(u'MainWindow', u'Theme Manager'))
|
||||
self.FileNewItem.setText(translate(u'MainWindow', u'&New'))
|
||||
self.FileNewItem.setToolTip(translate(u'MainWindow', u'New Service'))
|
||||
translate('MainWindow', 'Theme Manager'))
|
||||
self.FileNewItem.setText(translate('MainWindow', '&New'))
|
||||
self.FileNewItem.setToolTip(translate('MainWindow', 'New Service'))
|
||||
self.FileNewItem.setStatusTip(
|
||||
translate(u'MainWindow', u'Create a new Service'))
|
||||
self.FileNewItem.setShortcut(translate(u'MainWindow', u'Ctrl+N'))
|
||||
self.FileOpenItem.setText(translate(u'MainWindow', u'&Open'))
|
||||
self.FileOpenItem.setToolTip(translate(u'MainWindow', u'Open Service'))
|
||||
translate('MainWindow', 'Create a new Service'))
|
||||
self.FileNewItem.setShortcut(translate('MainWindow', 'Ctrl+N'))
|
||||
self.FileOpenItem.setText(translate('MainWindow', '&Open'))
|
||||
self.FileOpenItem.setToolTip(translate('MainWindow', 'Open Service'))
|
||||
self.FileOpenItem.setStatusTip(
|
||||
translate(u'MainWindow', u'Open an existing service'))
|
||||
self.FileOpenItem.setShortcut(translate(u'MainWindow', u'Ctrl+O'))
|
||||
self.FileSaveItem.setText(translate(u'MainWindow', u'&Save'))
|
||||
self.FileSaveItem.setToolTip(translate(u'MainWindow', u'Save Service'))
|
||||
translate('MainWindow', 'Open an existing service'))
|
||||
self.FileOpenItem.setShortcut(translate('MainWindow', 'Ctrl+O'))
|
||||
self.FileSaveItem.setText(translate('MainWindow', '&Save'))
|
||||
self.FileSaveItem.setToolTip(translate('MainWindow', 'Save Service'))
|
||||
self.FileSaveItem.setStatusTip(
|
||||
translate(u'MainWindow', u'Save the current service to disk'))
|
||||
self.FileSaveItem.setShortcut(translate(u'MainWindow', u'Ctrl+S'))
|
||||
self.FileSaveAsItem.setText(translate(u'MainWindow', u'Save &As...'))
|
||||
translate('MainWindow', 'Save the current service to disk'))
|
||||
self.FileSaveItem.setShortcut(translate('MainWindow', 'Ctrl+S'))
|
||||
self.FileSaveAsItem.setText(translate('MainWindow', 'Save &As...'))
|
||||
self.FileSaveAsItem.setToolTip(
|
||||
translate(u'MainWindow', u'Save Service As'))
|
||||
self.FileSaveAsItem.setStatusTip(translate(u'MainWindow',
|
||||
u'Save the current service under a new name'))
|
||||
self.FileSaveAsItem.setShortcut(translate(u'MainWindow', u'F12'))
|
||||
self.FileExitItem.setText(translate(u'MainWindow', u'E&xit'))
|
||||
self.FileExitItem.setStatusTip(translate(u'MainWindow', u'Quit OpenLP'))
|
||||
self.FileExitItem.setShortcut(translate(u'MainWindow', u'Alt+F4'))
|
||||
self.ImportThemeItem.setText(translate(u'MainWindow', u'&Theme'))
|
||||
self.ImportLanguageItem.setText(translate(u'MainWindow', u'&Language'))
|
||||
self.ExportThemeItem.setText(translate(u'MainWindow', u'&Theme'))
|
||||
self.ExportLanguageItem.setText(translate(u'MainWindow', u'&Language'))
|
||||
self.actionLook_Feel.setText(translate(u'MainWindow', u'Look && &Feel'))
|
||||
self.OptionsSettingsItem.setText(translate(u'MainWindow', u'&Settings'))
|
||||
translate('MainWindow', 'Save Service As'))
|
||||
self.FileSaveAsItem.setStatusTip(translate('MainWindow',
|
||||
'Save the current service under a new name'))
|
||||
self.FileSaveAsItem.setShortcut(translate('MainWindow', 'F12'))
|
||||
self.FileExitItem.setText(translate('MainWindow', 'E&xit'))
|
||||
self.FileExitItem.setStatusTip(translate('MainWindow', 'Quit OpenLP'))
|
||||
self.FileExitItem.setShortcut(translate('MainWindow', 'Alt+F4'))
|
||||
self.ImportThemeItem.setText(translate('MainWindow', '&Theme'))
|
||||
self.ImportLanguageItem.setText(translate('MainWindow', '&Language'))
|
||||
self.ExportThemeItem.setText(translate('MainWindow', '&Theme'))
|
||||
self.ExportLanguageItem.setText(translate('MainWindow', '&Language'))
|
||||
self.actionLook_Feel.setText(translate('MainWindow', 'Look && &Feel'))
|
||||
self.OptionsSettingsItem.setText(translate('MainWindow', '&Settings'))
|
||||
self.ViewMediaManagerItem.setText(
|
||||
translate(u'MainWindow', u'&Media Manager'))
|
||||
translate('MainWindow', '&Media Manager'))
|
||||
self.ViewMediaManagerItem.setToolTip(
|
||||
translate(u'MainWindow', u'Toggle Media Manager'))
|
||||
self.ViewMediaManagerItem.setStatusTip(translate(u'MainWindow',
|
||||
u'Toggle the visibility of the Media Manager'))
|
||||
self.ViewMediaManagerItem.setShortcut(translate(u'MainWindow', u'F8'))
|
||||
translate('MainWindow', 'Toggle Media Manager'))
|
||||
self.ViewMediaManagerItem.setStatusTip(translate('MainWindow',
|
||||
'Toggle the visibility of the Media Manager'))
|
||||
self.ViewMediaManagerItem.setShortcut(translate('MainWindow', 'F8'))
|
||||
self.ViewThemeManagerItem.setText(
|
||||
translate(u'MainWindow', u'&Theme Manager'))
|
||||
translate('MainWindow', '&Theme Manager'))
|
||||
self.ViewThemeManagerItem.setToolTip(
|
||||
translate(u'MainWindow', u'Toggle Theme Manager'))
|
||||
self.ViewThemeManagerItem.setStatusTip(translate(u'MainWindow',
|
||||
u'Toggle the visibility of the Theme Manager'))
|
||||
self.ViewThemeManagerItem.setShortcut(translate(u'MainWindow', u'F10'))
|
||||
translate('MainWindow', 'Toggle Theme Manager'))
|
||||
self.ViewThemeManagerItem.setStatusTip(translate('MainWindow',
|
||||
'Toggle the visibility of the Theme Manager'))
|
||||
self.ViewThemeManagerItem.setShortcut(translate('MainWindow', 'F10'))
|
||||
self.ViewServiceManagerItem.setText(
|
||||
translate(u'MainWindow', u'&Service Manager'))
|
||||
translate('MainWindow', '&Service Manager'))
|
||||
self.ViewServiceManagerItem.setToolTip(
|
||||
translate(u'MainWindow', u'Toggle Service Manager'))
|
||||
self.ViewServiceManagerItem.setStatusTip(translate(u'MainWindow',
|
||||
u'Toggle the visibility of the Service Manager'))
|
||||
self.ViewServiceManagerItem.setShortcut(translate(u'MainWindow', u'F9'))
|
||||
translate('MainWindow', 'Toggle Service Manager'))
|
||||
self.ViewServiceManagerItem.setStatusTip(translate('MainWindow',
|
||||
'Toggle the visibility of the Service Manager'))
|
||||
self.ViewServiceManagerItem.setShortcut(translate('MainWindow', 'F9'))
|
||||
self.action_Preview_Panel.setText(
|
||||
translate(u'MainWindow', u'&Preview Panel'))
|
||||
translate('MainWindow', '&Preview Panel'))
|
||||
self.action_Preview_Panel.setToolTip(
|
||||
translate(u'MainWindow', u'Toggle Preview Panel'))
|
||||
self.action_Preview_Panel.setStatusTip(translate(u'MainWindow',
|
||||
u'Toggle the visibility of the Preview Panel'))
|
||||
self.action_Preview_Panel.setShortcut(translate(u'MainWindow', u'F11'))
|
||||
self.PluginItem.setText(translate(u'MainWindow', u'&Plugin List'))
|
||||
translate('MainWindow', 'Toggle Preview Panel'))
|
||||
self.action_Preview_Panel.setStatusTip(translate('MainWindow',
|
||||
'Toggle the visibility of the Preview Panel'))
|
||||
self.action_Preview_Panel.setShortcut(translate('MainWindow', 'F11'))
|
||||
self.PluginItem.setText(translate('MainWindow', '&Plugin List'))
|
||||
self.PluginItem.setStatusTip(
|
||||
translate(u'MainWindow', u'List the Plugins'))
|
||||
self.PluginItem.setShortcut(translate(u'MainWindow', u'Alt+F7'))
|
||||
translate('MainWindow', 'List the Plugins'))
|
||||
self.PluginItem.setShortcut(translate('MainWindow', 'Alt+F7'))
|
||||
self.HelpDocumentationItem.setText(
|
||||
translate(u'MainWindow', u'&User Guide'))
|
||||
self.HelpAboutItem.setText(translate(u'MainWindow', u'&About'))
|
||||
translate('MainWindow', '&User Guide'))
|
||||
self.HelpAboutItem.setText(translate('MainWindow', '&About'))
|
||||
self.HelpAboutItem.setStatusTip(
|
||||
translate(u'MainWindow', u'More information about OpenLP'))
|
||||
self.HelpAboutItem.setShortcut(translate(u'MainWindow', u'Ctrl+F1'))
|
||||
translate('MainWindow', 'More information about OpenLP'))
|
||||
self.HelpAboutItem.setShortcut(translate('MainWindow', 'Ctrl+F1'))
|
||||
self.HelpOnlineHelpItem.setText(
|
||||
translate(u'MainWindow', u'&Online Help'))
|
||||
self.HelpWebSiteItem.setText(translate(u'MainWindow', u'&Web Site'))
|
||||
translate('MainWindow', '&Online Help'))
|
||||
self.HelpWebSiteItem.setText(translate('MainWindow', '&Web Site'))
|
||||
#i18n
|
||||
self.AutoLanguageItem.setText(translate(u'MainWindow', u'&Auto Detect'))
|
||||
self.AutoLanguageItem.setText(translate('MainWindow', '&Auto Detect'))
|
||||
self.AutoLanguageItem.setStatusTip(
|
||||
translate(u'MainWindow', u'Choose System language, if available'))
|
||||
translate('MainWindow', 'Choose System language, if available'))
|
||||
for item in self.LanguageGroup.actions():
|
||||
item.setText(item.objectName())
|
||||
item.setStatusTip(unicode(translate(u'MainWindow',
|
||||
u'Set the interface language to %s')) % item.objectName())
|
||||
self.ToolsAddToolItem.setText(translate(u'MainWindow', u'Add &Tool...'))
|
||||
item.setStatusTip(unicode(translate('MainWindow',
|
||||
'Set the interface language to %s')) % item.objectName())
|
||||
self.ToolsAddToolItem.setText(translate('MainWindow', 'Add &Tool...'))
|
||||
self.ToolsAddToolItem.setStatusTip(
|
||||
translate(u'MainWindow',
|
||||
u'Add an application to the list of tools'))
|
||||
translate('MainWindow',
|
||||
'Add an application to the list of tools'))
|
||||
self.action_Preview_Panel.setText(
|
||||
translate(u'MainWindow', u'&Preview Pane'))
|
||||
self.ModeLiveItem.setText(translate(u'MainWindow', u'&Live'))
|
||||
translate('MainWindow', '&Preview Pane'))
|
||||
self.ModeLiveItem.setText(translate('MainWindow', '&Live'))
|
||||
|
||||
|
||||
class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
|
||||
@ -620,12 +618,12 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
|
||||
Triggered by delay thread.
|
||||
"""
|
||||
app_version = self.applicationVersion[u'full']
|
||||
version_text = unicode(translate(u'MainWindow', u'Version %s of OpenLP '
|
||||
u'is now available for download (you are currently running version '
|
||||
u' %s). \n\nYou can download the latest version from '
|
||||
u'http://openlp.org'))
|
||||
version_text = unicode(translate('MainWindow', 'Version %s of OpenLP '
|
||||
'is now available for download (you are currently running version '
|
||||
' %s). \n\nYou can download the latest version from '
|
||||
'http://openlp.org'))
|
||||
QtGui.QMessageBox.question(self,
|
||||
translate(u'MainWindow', u'OpenLP Version Updated'),
|
||||
translate('MainWindow', 'OpenLP Version Updated'),
|
||||
version_text % (version, app_version),
|
||||
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok),
|
||||
QtGui.QMessageBox.Ok)
|
||||
@ -657,9 +655,9 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
|
||||
if settings.value(u'blank warning',
|
||||
QtCore.QVariant(False)).toBool():
|
||||
QtGui.QMessageBox.question(self,
|
||||
translate(u'MainWindow', u'OpenLP Main Display Blanked'),
|
||||
translate(u'MainWindow',
|
||||
u'The Main Display has been blanked out'))
|
||||
translate('MainWindow', 'OpenLP Main Display Blanked'),
|
||||
translate('MainWindow',
|
||||
'The Main Display has been blanked out'))
|
||||
settings.endGroup()
|
||||
|
||||
def versionThread(self):
|
||||
@ -712,9 +710,9 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
|
||||
"""
|
||||
if self.serviceNotSaved:
|
||||
ret = QtGui.QMessageBox.question(self,
|
||||
translate(u'MainWindow', u'Save Changes to Service?'),
|
||||
translate(u'MainWindow', u'Your service has changed. '
|
||||
u'Do you want to save those changes?'),
|
||||
translate('MainWindow', 'Save Changes to Service?'),
|
||||
translate('MainWindow', 'Your service has changed. '
|
||||
'Do you want to save those changes?'),
|
||||
QtGui.QMessageBox.StandardButtons(
|
||||
QtGui.QMessageBox.Cancel |
|
||||
QtGui.QMessageBox.Discard |
|
||||
@ -774,7 +772,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
|
||||
|
||||
def defaultThemeChanged(self, theme):
|
||||
self.DefaultThemeLabel.setText(
|
||||
u'%s %s' % (self.defaultThemeText, theme))
|
||||
unicode(translate('MainWindow', 'Default Theme: %s')) % theme)
|
||||
|
||||
def toggleMediaManager(self, visible):
|
||||
if self.MediaManagerDock.isVisible() != visible:
|
||||
|
@ -60,4 +60,4 @@ class Ui_SettingsDialog(object):
|
||||
QtCore.QMetaObject.connectSlotsByName(SettingsDialog)
|
||||
|
||||
def retranslateUi(self, SettingsDialog):
|
||||
SettingsDialog.setWindowTitle(translate(u'SettingsForm', u'Settings'))
|
||||
SettingsDialog.setWindowTitle(translate('SettingsForm', 'Settings'))
|
||||
|
@ -32,7 +32,7 @@ class SplashScreen(object):
|
||||
self.splash_screen = QtGui.QSplashScreen()
|
||||
self.setupUi()
|
||||
self.message = translate(
|
||||
u'Splashscreen', u'Starting')\
|
||||
'Splashscreen', 'Starting')\
|
||||
+ '..... ' + version
|
||||
|
||||
def setupUi(self):
|
||||
@ -60,7 +60,7 @@ class SplashScreen(object):
|
||||
|
||||
def retranslateUi(self):
|
||||
self.splash_screen.setWindowTitle(
|
||||
translate(u'Splashscreen', u'Splash Screen'))
|
||||
translate('Splashscreen', 'Splash Screen'))
|
||||
|
||||
def show(self):
|
||||
self.splash_screen.show()
|
||||
|
@ -54,25 +54,25 @@ class ThemeManager(QtGui.QWidget):
|
||||
self.amendThemeForm = AmendThemeForm(self)
|
||||
self.Toolbar = OpenLPToolbar(self)
|
||||
self.Toolbar.addToolbarButton(
|
||||
translate(u'ThemeManager', u'New Theme'), u':/themes/theme_new.png',
|
||||
translate(u'ThemeManager', u'Create a new theme'), self.onAddTheme)
|
||||
translate('ThemeManager', 'New Theme'), u':/themes/theme_new.png',
|
||||
translate('ThemeManager', 'Create a new theme.'), self.onAddTheme)
|
||||
self.Toolbar.addToolbarButton(
|
||||
translate(u'ThemeManager', u'Edit Theme'),
|
||||
translate('ThemeManager', 'Edit Theme'),
|
||||
u':/themes/theme_edit.png',
|
||||
translate(u'ThemeManager', u'Edit a theme'), self.onEditTheme)
|
||||
translate('ThemeManager', 'Edit a theme.'), self.onEditTheme)
|
||||
self.Toolbar.addToolbarButton(
|
||||
translate(u'ThemeManager', u'Delete Theme'),
|
||||
translate('ThemeManager', 'Delete Theme'),
|
||||
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.addToolbarButton(
|
||||
translate(u'ThemeManager', u'Import Theme'),
|
||||
translate('ThemeManager', 'Import Theme'),
|
||||
u':/general/general_import.png',
|
||||
translate(u'ThemeManager', u'Import a theme'), self.onImportTheme)
|
||||
translate('ThemeManager', 'Import a theme.'), self.onImportTheme)
|
||||
self.Toolbar.addToolbarButton(
|
||||
translate(u'ThemeManager', u'Export Theme'),
|
||||
translate('ThemeManager', 'Export Theme'),
|
||||
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.Layout.addWidget(self.Toolbar)
|
||||
self.ThemeListWidget = QtGui.QListWidget(self)
|
||||
@ -83,23 +83,23 @@ class ThemeManager(QtGui.QWidget):
|
||||
self.ThemeListWidget.addAction(
|
||||
context_menu_action(self.ThemeListWidget,
|
||||
u':/themes/theme_edit.png',
|
||||
translate(u'ThemeManager', u'Edit a theme'), self.onEditTheme))
|
||||
translate('ThemeManager', '&Edit Theme'), self.onEditTheme))
|
||||
self.ThemeListWidget.addAction(
|
||||
context_menu_separator(self.ThemeListWidget))
|
||||
self.ThemeListWidget.addAction(
|
||||
context_menu_action(self.ThemeListWidget,
|
||||
u':/general/general_delete.png',
|
||||
translate(u'ThemeManager', u'Delete theme'),
|
||||
translate('ThemeManager', '&Delete Theme'),
|
||||
self.onDeleteTheme))
|
||||
self.ThemeListWidget.addAction(
|
||||
context_menu_action(self.ThemeListWidget,
|
||||
u':/general/general_export.png',
|
||||
translate(u'ThemeManager', u'Make Global'),
|
||||
translate('ThemeManager', 'Set As &Global Default'),
|
||||
self.changeGlobalFromScreen))
|
||||
self.ThemeListWidget.addAction(
|
||||
context_menu_action(self.ThemeListWidget,
|
||||
u':/general/general_export.png',
|
||||
translate(u'ThemeManager', u'Export theme'),
|
||||
translate('ThemeManager', 'E&xport Theme'),
|
||||
self.onExportTheme))
|
||||
self.ThemeListWidget.addAction(
|
||||
context_menu_separator(self.ThemeListWidget))
|
||||
@ -136,7 +136,7 @@ class ThemeManager(QtGui.QWidget):
|
||||
self.ThemeListWidget.item(count).setText(newName)
|
||||
#Set the new name
|
||||
if themeName == newName:
|
||||
name = unicode(translate(u'ThemeManager', u'%s (default)')) % \
|
||||
name = unicode(translate('ThemeManager', '%s (default)')) % \
|
||||
newName
|
||||
self.ThemeListWidget.item(count).setText(name)
|
||||
|
||||
@ -158,7 +158,7 @@ class ThemeManager(QtGui.QWidget):
|
||||
if count == selected_row:
|
||||
self.global_theme = unicode(
|
||||
self.ThemeListWidget.item(count).text())
|
||||
name = unicode(translate(u'ThemeManager', u'%s (default)')) % \
|
||||
name = unicode(translate('ThemeManager', '%s (default)')) % \
|
||||
self.global_theme
|
||||
self.ThemeListWidget.item(count).setText(name)
|
||||
QtCore.QSettings().setValue(
|
||||
@ -203,26 +203,26 @@ class ThemeManager(QtGui.QWidget):
|
||||
theme = unicode(item.text())
|
||||
# should be the same unless default
|
||||
if theme != unicode(item.data(QtCore.Qt.UserRole).toString()):
|
||||
QtGui.QMessageBox.critical(
|
||||
self, translate(u'ThemeManager', u'Error'),
|
||||
translate(u'ThemeManager',
|
||||
u'You are unable to delete the default theme.'),
|
||||
QtGui.QMessageBox.critical(self,
|
||||
translate('ThemeManager', 'Error'),
|
||||
translate('ThemeManager',
|
||||
'You are unable to delete the default theme.'),
|
||||
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
|
||||
else:
|
||||
for plugin in self.parent.plugin_manager.plugins:
|
||||
if not plugin.can_delete_theme(theme):
|
||||
QtGui.QMessageBox.critical(self,
|
||||
translate(u'ThemeManager', u'Error'),
|
||||
translate(u'ThemeManager',
|
||||
u'Theme %s is use in %s plugin' % (theme,
|
||||
plugin.name)))
|
||||
translate('ThemeManager', 'Error'),
|
||||
unicode(translate('ThemeManager',
|
||||
'Theme %s is use in %s plugin.')) % \
|
||||
(theme, plugin.name))
|
||||
return
|
||||
if unicode(self.parent.ServiceManagerContents.ThemeComboBox \
|
||||
.currentText()) == theme:
|
||||
QtGui.QMessageBox.critical(self,
|
||||
translate(u'ThemeManager', u'Error'),
|
||||
translate(u'ThemeManager',
|
||||
u'Theme %s is use by Service Manager' % theme))
|
||||
translate('ThemeManager', 'Error'),
|
||||
unicode(translate('ThemeManager',
|
||||
'Theme %s is use by the service manager.')) % theme)
|
||||
return
|
||||
self.themelist.remove(theme)
|
||||
th = theme + u'.png'
|
||||
@ -249,12 +249,12 @@ class ThemeManager(QtGui.QWidget):
|
||||
item = self.ThemeListWidget.currentItem()
|
||||
if item is None:
|
||||
QtGui.QMessageBox.critical(self,
|
||||
translate(u'ThemeManager', u'Error'),
|
||||
translate(u'ThemeManager', u'You have not selected a theme.'))
|
||||
translate('ThemeManager', 'Error'),
|
||||
translate('ThemeManager', 'You have not selected a theme.'))
|
||||
return
|
||||
theme = unicode(item.data(QtCore.Qt.UserRole).toString())
|
||||
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))
|
||||
path = unicode(path)
|
||||
if path:
|
||||
@ -270,15 +270,15 @@ class ThemeManager(QtGui.QWidget):
|
||||
os.path.join(source, name).encode(u'utf-8'),
|
||||
os.path.join(theme, name).encode(u'utf-8'))
|
||||
QtGui.QMessageBox.information(self,
|
||||
translate(u'ThemeManager', u'Theme Exported'),
|
||||
translate(u'ThemeManager',
|
||||
u'Your theme has been successfully exported.'))
|
||||
translate('ThemeManager', 'Theme Exported'),
|
||||
translate('ThemeManager',
|
||||
'Your theme has been successfully exported.'))
|
||||
except (IOError, OSError):
|
||||
log.exception(u'Export Theme Failed')
|
||||
QtGui.QMessageBox.critical(self,
|
||||
translate(u'ThemeManager', u'Theme Export Failed'),
|
||||
translate(u'ThemeManager',
|
||||
u'Your theme could not be exported due to an error.'))
|
||||
translate('ThemeManager', 'Theme Export Failed'),
|
||||
translate('ThemeManager',
|
||||
'Your theme could not be exported due to an error.'))
|
||||
finally:
|
||||
if zip:
|
||||
zip.close()
|
||||
@ -289,9 +289,10 @@ class ThemeManager(QtGui.QWidget):
|
||||
attempting to extract OpenLP themes from those files. This process
|
||||
will load both OpenLP version 1 and version 2 themes.
|
||||
"""
|
||||
files = QtGui.QFileDialog.getOpenFileNames(
|
||||
self, translate(u'ThemeManager', u'Select Theme Import File'),
|
||||
SettingsManager.get_last_dir(self.settingsSection), u'Theme (*.*)')
|
||||
files = QtGui.QFileDialog.getOpenFileNames(self,
|
||||
translate('ThemeManager', 'Select Theme Import File'),
|
||||
SettingsManager.get_last_dir(self.settingsSection),
|
||||
translate('ThemeManager', 'Theme (*.*)'))
|
||||
log.info(u'New Themes %s', unicode(files))
|
||||
if files:
|
||||
for file in files:
|
||||
@ -318,8 +319,8 @@ class ThemeManager(QtGui.QWidget):
|
||||
if os.path.exists(theme):
|
||||
textName = os.path.splitext(name)[0]
|
||||
if textName == self.global_theme:
|
||||
name = unicode(translate(u'ThemeManager',
|
||||
u'%s (default)')) % textName
|
||||
name = unicode(translate('ThemeManager',
|
||||
'%s (default)')) % textName
|
||||
else:
|
||||
name = 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')
|
||||
except UnicodeDecodeError:
|
||||
QtGui.QMessageBox.critical(
|
||||
self, translate(u'ThemeManager', u'Error'),
|
||||
translate(u'ThemeManager', u'File is not a valid '
|
||||
u'theme.\nThe content encoding is not UTF-8.'))
|
||||
self, translate('ThemeManager', 'Error'),
|
||||
translate('ThemeManager', 'File is not a valid theme.\n'
|
||||
'The content encoding is not UTF-8.'))
|
||||
log.exception(u'Filename "%s" is not valid UTF-8' % \
|
||||
file.decode(u'utf-8', u'replace'))
|
||||
continue
|
||||
@ -417,30 +418,36 @@ class ThemeManager(QtGui.QWidget):
|
||||
theme_dir = os.path.join(dir, names[0])
|
||||
if not os.path.exists(theme_dir):
|
||||
os.mkdir(os.path.join(dir, names[0]))
|
||||
xml_data = zip.read(file)
|
||||
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):
|
||||
# upgrade theme xml
|
||||
filexml = self.migrateVersion122(xml_data)
|
||||
else:
|
||||
filexml = xml_data
|
||||
outfile = open(fullpath, u'w')
|
||||
outfile.write(filexml)
|
||||
outfile.write(filexml.encode(u'utf-8'))
|
||||
else:
|
||||
outfile = open(fullpath, u'wb')
|
||||
outfile.write(zip.read(file))
|
||||
if filexml:
|
||||
self.generateAndSaveImage(dir, themename, filexml)
|
||||
else:
|
||||
QtGui.QMessageBox.critical(
|
||||
self, translate(u'ThemeManager', u'Error'),
|
||||
translate(u'ThemeManager', u'File is not a valid theme.'))
|
||||
QtGui.QMessageBox.critical(self,
|
||||
translate('ThemeManager', 'Error'),
|
||||
translate('ThemeManager', 'File is not a valid theme.'))
|
||||
log.exception(u'Theme file dosen\'t contain XML data %s' %
|
||||
filename)
|
||||
except (IOError, NameError):
|
||||
QtGui.QMessageBox.critical(
|
||||
self, translate(u'ThemeManager', u'Error'),
|
||||
translate(u'ThemeManager', u'File is not a valid theme.'))
|
||||
QtGui.QMessageBox.critical(self,
|
||||
translate('ThemeManager', 'Error'),
|
||||
translate('ThemeManager', 'File is not a valid theme.'))
|
||||
log.exception(u'Importing theme from zip file failed %s' % filename)
|
||||
finally:
|
||||
if zip:
|
||||
@ -456,7 +463,7 @@ class ThemeManager(QtGui.QWidget):
|
||||
Theme XML to check the version of
|
||||
"""
|
||||
log.debug(u'checkVersion1 ')
|
||||
theme = xmlfile
|
||||
theme = xmlfile.encode(u'ascii', u'xmlcharrefreplace')
|
||||
tree = ElementTree(element=XML(theme)).getroot()
|
||||
if tree.find(u'BackgroundType') is None:
|
||||
return False
|
||||
@ -526,11 +533,11 @@ class ThemeManager(QtGui.QWidget):
|
||||
result = QtGui.QMessageBox.Yes
|
||||
if self.saveThemeName != name:
|
||||
if os.path.exists(theme_file):
|
||||
result = QtGui.QMessageBox.question(
|
||||
self, translate(u'ThemeManager', u'Theme Exists'),
|
||||
translate(u'ThemeManager',
|
||||
u'A theme with this name already exists, '
|
||||
u'would you like to overwrite it?'),
|
||||
result = QtGui.QMessageBox.question(self,
|
||||
translate('ThemeManager', 'Theme Exists'),
|
||||
translate('ThemeManager',
|
||||
'A theme with this name already exists. '
|
||||
'Would you like to overwrite it?'),
|
||||
(QtGui.QMessageBox.Yes | QtGui.QMessageBox.No),
|
||||
QtGui.QMessageBox.No)
|
||||
if result == QtGui.QMessageBox.Yes:
|
||||
@ -598,7 +605,7 @@ class ThemeManager(QtGui.QWidget):
|
||||
"""
|
||||
log.debug(u'base theme created')
|
||||
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_font(unicode(QtGui.QFont().family()), unicode(u'#FFFFFF'),
|
||||
unicode(30), u'False')
|
||||
|
@ -37,7 +37,7 @@ class ThemesTab(SettingsTab):
|
||||
|
||||
def setupUi(self):
|
||||
self.setObjectName(u'ThemesTab')
|
||||
self.tabTitleVisible = translate(u'ThemesTab', u'Themes')
|
||||
self.tabTitleVisible = translate('ThemesTab', 'Themes')
|
||||
self.ThemesTabLayout = QtGui.QHBoxLayout(self)
|
||||
self.ThemesTabLayout.setSpacing(8)
|
||||
self.ThemesTabLayout.setMargin(8)
|
||||
@ -106,26 +106,26 @@ class ThemesTab(SettingsTab):
|
||||
QtCore.SIGNAL(u'theme_update_list'), self.updateThemeList)
|
||||
|
||||
def retranslateUi(self):
|
||||
self.GlobalGroupBox.setTitle(translate(u'ThemesTab', u'Global theme'))
|
||||
self.LevelGroupBox.setTitle(translate(u'ThemesTab', u'Theme level'))
|
||||
self.GlobalGroupBox.setTitle(translate('ThemesTab', 'Global Theme'))
|
||||
self.LevelGroupBox.setTitle(translate('ThemesTab', 'Theme Level'))
|
||||
self.SongLevelRadioButton.setText(
|
||||
translate(u'ThemesTab', u'Song level'))
|
||||
translate('ThemesTab', 'S&ong Level'))
|
||||
self.SongLevelLabel.setText(
|
||||
translate(u'ThemesTab', u'Use the theme from each song '
|
||||
u'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 '
|
||||
u'a theme, then use the global theme.'))
|
||||
translate('ThemesTab', 'Use the theme from each song '
|
||||
'in the database. If a song doesn\'t have a theme associated with '
|
||||
'it, then use the service\'s theme. If the service doesn\'t have '
|
||||
'a theme, then use the global theme.'))
|
||||
self.ServiceLevelRadioButton.setText(
|
||||
translate(u'ThemesTab', u'Service level'))
|
||||
translate('ThemesTab', '&Service Level'))
|
||||
self.ServiceLevelLabel.setText(
|
||||
translate(u'ThemesTab', u'Use the theme from the service, '
|
||||
u'overriding any of the individual songs\' themes. If the '
|
||||
u'service doesn\'t have a theme, then use the global theme.'))
|
||||
translate('ThemesTab', 'Use the theme from the service, '
|
||||
'overriding any of the individual songs\' themes. If the '
|
||||
'service doesn\'t have a theme, then use the global theme.'))
|
||||
self.GlobalLevelRadioButton.setText(
|
||||
translate(u'ThemesTab', u'Global level'))
|
||||
translate('ThemesTab', '&Global Level'))
|
||||
self.GlobalLevelLabel.setText(
|
||||
translate(u'ThemesTab', u'Use the global theme, overriding any '
|
||||
u'themes associated with either the service or the songs.'))
|
||||
translate('ThemesTab', 'Use the global theme, overriding any '
|
||||
'themes associated with either the service or the songs.'))
|
||||
|
||||
def load(self):
|
||||
settings = QtCore.QSettings()
|
||||
|
@ -1,24 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
|
||||
|
||||
###############################################################################
|
||||
# OpenLP - Open Source Lyrics Projection #
|
||||
# --------------------------------------------------------------------------- #
|
||||
# Copyright (c) 2008-2010 Raoul Snyman #
|
||||
# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael #
|
||||
# Gorven, Scott Guerrieri, 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 #
|
||||
###############################################################################
|
@ -1,42 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
|
||||
|
||||
###############################################################################
|
||||
# OpenLP - Open Source Lyrics Projection #
|
||||
# --------------------------------------------------------------------------- #
|
||||
# Copyright (c) 2008-2010 Raoul Snyman #
|
||||
# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael #
|
||||
# Gorven, Scott Guerrieri, Christian Richter, Maikel Stuivenberg, Martin #
|
||||
# Thompson, Jon Tibble, Carsten Tinggaard #
|
||||
# --------------------------------------------------------------------------- #
|
||||
# This program is free software; you can redistribute it and/or modify it #
|
||||
# under the terms of the GNU General Public License as published by the Free #
|
||||
# Software Foundation; version 2 of the License. #
|
||||
# #
|
||||
# This program is distributed in the hope that it will be useful, but WITHOUT #
|
||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
|
||||
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
|
||||
# more details. #
|
||||
# #
|
||||
# You should have received a copy of the GNU General Public License along #
|
||||
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
|
||||
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
|
||||
###############################################################################
|
||||
|
||||
import logging
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
class Display(object):
|
||||
log.info(u'Display Class loaded')
|
||||
|
||||
@staticmethod
|
||||
def output(string):
|
||||
log.debug(string)
|
||||
#print (string)
|
||||
|
||||
@staticmethod
|
||||
def sub_output(string):
|
||||
if not string is None:
|
||||
log.debug(u' '+string)
|
||||
#print (u' '+string)
|
@ -1,198 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
|
||||
|
||||
###############################################################################
|
||||
# OpenLP - Open Source Lyrics Projection #
|
||||
# --------------------------------------------------------------------------- #
|
||||
# Copyright (c) 2008-2010 Raoul Snyman #
|
||||
# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael #
|
||||
# Gorven, Scott Guerrieri, Christian Richter, Maikel Stuivenberg, Martin #
|
||||
# Thompson, Jon Tibble, Carsten Tinggaard #
|
||||
# --------------------------------------------------------------------------- #
|
||||
# This program is free software; you can redistribute it and/or modify it #
|
||||
# under the terms of the GNU General Public License as published by the Free #
|
||||
# Software Foundation; version 2 of the License. #
|
||||
# #
|
||||
# This program is distributed in the hope that it will be useful, but WITHOUT #
|
||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
|
||||
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
|
||||
# more details. #
|
||||
# #
|
||||
# You should have received a copy of the GNU General Public License along #
|
||||
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
|
||||
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
|
||||
###############################################################################
|
||||
|
||||
import os
|
||||
import sys
|
||||
import sqlite3
|
||||
|
||||
from sqlalchemy.exceptions import InvalidRequestError
|
||||
from sqlalchemy.orm import mapper
|
||||
|
||||
from openlp.core.lib import BaseModel, SettingsManager
|
||||
from openlp.core.utils import AppLocation
|
||||
from openlp.plugins.bibles.lib.models import *
|
||||
|
||||
class TBibleMeta(BaseModel):
|
||||
"""
|
||||
Bible Meta Data
|
||||
"""
|
||||
pass
|
||||
|
||||
class TTestament(BaseModel):
|
||||
"""
|
||||
Bible Testaments
|
||||
"""
|
||||
pass
|
||||
|
||||
class TBook(BaseModel):
|
||||
"""
|
||||
Song model
|
||||
"""
|
||||
pass
|
||||
|
||||
class TVerse(BaseModel):
|
||||
"""
|
||||
Topic model
|
||||
"""
|
||||
pass
|
||||
|
||||
temp_meta_table = Table(u'metadata_temp', metadata,
|
||||
Column(u'key', types.Unicode(255), primary_key=True),
|
||||
Column(u'value', types.Unicode(255)),
|
||||
)
|
||||
temp_testament_table = Table(u'testament_temp', metadata,
|
||||
Column(u'id', types.Integer, primary_key=True),
|
||||
Column(u'name', types.Unicode(30)),
|
||||
)
|
||||
temp_book_table = Table(u'book_temp', metadata,
|
||||
Column(u'id', types.Integer, primary_key=True),
|
||||
Column(u'testament_id', types.Integer),
|
||||
Column(u'name', types.Unicode(30)),
|
||||
Column(u'abbreviation', types.Unicode(5)),
|
||||
)
|
||||
temp_verse_table = Table(u'verse_temp', metadata,
|
||||
Column(u'id', types.Integer, primary_key=True),
|
||||
Column(u'book_id', types.Integer),
|
||||
Column(u'chapter', types.Integer),
|
||||
Column(u'verse', types.Integer),
|
||||
Column(u'text', types.UnicodeText),
|
||||
)
|
||||
|
||||
mapper(TBibleMeta, temp_meta_table)
|
||||
mapper(TTestament, temp_testament_table)
|
||||
mapper(TBook, temp_book_table)
|
||||
mapper(TVerse, temp_verse_table)
|
||||
|
||||
class MigrateBibles(object):
|
||||
def __init__(self, display):
|
||||
self.display = display
|
||||
self.data_path = AppLocation.get_section_data_path(u'bibles')
|
||||
self.database_files = SettingsManager.get_files(u'bibles', u'.sqlite')
|
||||
print self.database_files
|
||||
|
||||
def progress(self, text):
|
||||
print text
|
||||
self.display.output(text)
|
||||
|
||||
def process(self):
|
||||
self.progress(u'Bibles processing started')
|
||||
for db_file in self.database_files:
|
||||
self.v_1_9_0(db_file)
|
||||
self.progress(u'Bibles processing finished')
|
||||
|
||||
def v_1_9_0(self, database):
|
||||
self.progress(u'Migration 1.9.0 Started for ' + database)
|
||||
self._v1_9_0_old(database)
|
||||
self._v1_9_0_new(database)
|
||||
self._v1_9_0_cleanup(database)
|
||||
self.progress(u'Migration 1.9.0 Finished for ' + database)
|
||||
|
||||
def _v1_9_0_old(self, database):
|
||||
self.progress(u'Rename Tables ' + database)
|
||||
conn = sqlite3.connect(os.path.join(self.data_path, database))
|
||||
conn.execute(u'alter table book rename to book_temp;')
|
||||
conn.commit()
|
||||
conn.execute(u'alter table testament rename to testament_temp;')
|
||||
conn.commit()
|
||||
conn.execute(u'alter table verse rename to verse_temp;')
|
||||
conn.commit()
|
||||
conn.execute(u'alter table metadata rename to metadata_temp;')
|
||||
conn.commit()
|
||||
|
||||
def _v1_9_0_new(self, database):
|
||||
self.progress(u'Create new Tables ' + database)
|
||||
self.db_url = u'sqlite:///' + self.data_path + u'/' + database
|
||||
print self.db_url
|
||||
self.session = init_models(self.db_url)
|
||||
metadata.create_all(checkfirst=True)
|
||||
self.progress(u'Create testament table')
|
||||
results = self.session.query(TTestament).order_by(TTestament.id).all()
|
||||
for testament_temp in results:
|
||||
testament = Testament()
|
||||
testament.id = testament_temp.id
|
||||
testament.name = testament_temp.name
|
||||
try:
|
||||
self.session.add(testament)
|
||||
self.session.commit()
|
||||
except InvalidRequestError:
|
||||
self.session.rollback()
|
||||
print u'Error thrown = ', sys.exc_info()[1]
|
||||
self.progress(u'Create book table')
|
||||
results = self.session.query(TBook).order_by(TBook.id).all()
|
||||
for book_temp in results:
|
||||
book = Book()
|
||||
book.id = book_temp.id
|
||||
book.testament_id = book_temp.testament_id
|
||||
book.name = book_temp.name
|
||||
book.abbreviation = book_temp.abbreviation
|
||||
try:
|
||||
self.session.add(book)
|
||||
self.session.commit()
|
||||
except InvalidRequestError:
|
||||
self.session.rollback()
|
||||
print u'Error thrown = ', sys.exc_info()[1]
|
||||
self.progress(u'Create verse table')
|
||||
results = self.session.query(TVerse).order_by(TVerse.id).all()
|
||||
for verse_temp in results:
|
||||
verse = Verse()
|
||||
verse.id = verse_temp.id
|
||||
verse.book_id = verse_temp.book_id
|
||||
verse.chapter = verse_temp.chapter
|
||||
verse.verse = verse_temp.verse
|
||||
verse.text = verse_temp.text
|
||||
try:
|
||||
self.session.add(verse)
|
||||
self.session.commit()
|
||||
except InvalidRequestError:
|
||||
self.session.rollback()
|
||||
print u'Error thrown = ', sys.exc_info()[1]
|
||||
self.progress(u'Create metadata table')
|
||||
results = self.session.query(TBibleMeta).order_by(TBibleMeta.key).all()
|
||||
for biblemeta_temp in results:
|
||||
biblemeta = BibleMeta()
|
||||
biblemeta.key = biblemeta_temp.key
|
||||
biblemeta.value = biblemeta_temp.value
|
||||
try:
|
||||
self.session.add(biblemeta)
|
||||
self.session.commit()
|
||||
except InvalidRequestError:
|
||||
self.session.rollback()
|
||||
print u'Error thrown = ', sys.exc_info()[1]
|
||||
|
||||
def _v1_9_0_cleanup(self, database):
|
||||
self.progress(u'Update Internal Data ' + database)
|
||||
conn = sqlite3.connect(os.path.join(self.data_path, database))
|
||||
conn.commit()
|
||||
conn.execute(u'drop table book_temp;')
|
||||
conn.commit()
|
||||
conn.execute(u'drop table testament_temp;')
|
||||
conn.commit()
|
||||
conn.execute(u'drop table verse_temp;')
|
||||
conn.commit()
|
||||
conn.execute(u'drop table metadata_temp;')
|
||||
conn.commit()
|
||||
conn.execute(u'vacuum;')
|
||||
conn.commit()
|
||||
|
@ -1,54 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
|
||||
|
||||
###############################################################################
|
||||
# OpenLP - Open Source Lyrics Projection #
|
||||
# --------------------------------------------------------------------------- #
|
||||
# Copyright (c) 2008-2010 Raoul Snyman #
|
||||
# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael #
|
||||
# Gorven, Scott Guerrieri, 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 #
|
||||
###############################################################################
|
||||
|
||||
from openlp.core.utils import AppLocation
|
||||
|
||||
class MigrateFiles(object):
|
||||
def __init__(self, display):
|
||||
self.display = display
|
||||
|
||||
def process(self):
|
||||
self.display.output(u'Files process started')
|
||||
self._initial_setup()
|
||||
self.display.output(u'Files process finished')
|
||||
|
||||
def _initial_setup(self):
|
||||
self.display.output(u'Initial Setup started')
|
||||
data_path = AppLocation.get_data_path()
|
||||
print data_path
|
||||
self.display.sub_output(u'Config created')
|
||||
bibles_path = AppLocation.get_section_data_path(u'bibles')
|
||||
print bibles_path
|
||||
self.display.sub_output(u'Config created')
|
||||
# Media doesn't use a directory like the other plugins.
|
||||
#media_path = AppLocation.get_section_data_path(u'media')
|
||||
#self.display.sub_output(u'videos created')
|
||||
images_path = AppLocation.get_section_data_path(u'images')
|
||||
print images_path
|
||||
self.display.sub_output(u'images created')
|
||||
presentations_path = AppLocation.get_section_data_path(u'presentations')
|
||||
print presentations_path
|
||||
self.display.sub_output(u'presentations created')
|
||||
self.display.output(u'Initial Setup finished')
|
@ -1,186 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
|
||||
|
||||
###############################################################################
|
||||
# OpenLP - Open Source Lyrics Projection #
|
||||
# --------------------------------------------------------------------------- #
|
||||
# Copyright (c) 2008-2010 Raoul Snyman #
|
||||
# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael #
|
||||
# Gorven, Scott Guerrieri, Christian Richter, Maikel Stuivenberg, Martin #
|
||||
# Thompson, Jon Tibble, Carsten Tinggaard #
|
||||
# --------------------------------------------------------------------------- #
|
||||
# This program is free software; you can redistribute it and/or modify it #
|
||||
# under the terms of the GNU General Public License as published by the Free #
|
||||
# Software Foundation; version 2 of the License. #
|
||||
# #
|
||||
# This program is distributed in the hope that it will be useful, but WITHOUT #
|
||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
|
||||
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
|
||||
# more details. #
|
||||
# #
|
||||
# You should have received a copy of the GNU General Public License along #
|
||||
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
|
||||
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
|
||||
###############################################################################
|
||||
|
||||
import os
|
||||
import sys
|
||||
import sqlite3
|
||||
|
||||
from sqlalchemy import create_engine
|
||||
from sqlalchemy.exceptions import InvalidRequestError
|
||||
from sqlalchemy.orm import scoped_session, sessionmaker, mapper, relation
|
||||
|
||||
from openlp.core.lib import BaseModel, SettingsManager
|
||||
from openlp.core.utils import AppLocation
|
||||
from openlp.plugins.songs.lib.models import metadata, songs_table, Song, \
|
||||
Author, Topic, Book
|
||||
from openlp.plugins.songs.lib.tables import *
|
||||
from openlp.plugins.songs.lib.classes import *
|
||||
|
||||
def init_models(url):
|
||||
engine = create_engine(url)
|
||||
metadata.bind = engine
|
||||
session = scoped_session(
|
||||
sessionmaker(autoflush=True, autocommit=False, bind=engine))
|
||||
mapper(Author, authors_table)
|
||||
mapper(TAuthor, temp_authors_table)
|
||||
mapper(Book, song_books_table)
|
||||
mapper(Song, songs_table,
|
||||
properties={'authors': relation(Author, backref='songs',
|
||||
secondary=authors_songs_table),
|
||||
'book': relation(Book, backref='songs'),
|
||||
'topics': relation(Topic, backref='songs',
|
||||
secondary=songs_topics_table)})
|
||||
mapper(TSong, temp_songs_table)
|
||||
mapper(TSongAuthor, temp_authors_songs_table)
|
||||
mapper(Topic, topics_table)
|
||||
return session
|
||||
|
||||
temp_authors_table = Table(u'authors_temp', metadata,
|
||||
Column(u'authorid', types.Integer, primary_key=True),
|
||||
Column(u'authorname', String(40))
|
||||
)
|
||||
|
||||
temp_songs_table = Table(u'songs_temp', metadata,
|
||||
Column(u'songid', types.Integer, primary_key=True),
|
||||
Column(u'songtitle', String(60)),
|
||||
Column(u'lyrics', types.UnicodeText),
|
||||
Column(u'copyrightinfo', String(255)),
|
||||
Column(u'settingsid', types.Integer)
|
||||
)
|
||||
|
||||
# Definition of the "authors_songs" table
|
||||
temp_authors_songs_table = Table(u'songauthors_temp', metadata,
|
||||
Column(u'authorid', types.Integer, primary_key=True),
|
||||
Column(u'songid', types.Integer)
|
||||
)
|
||||
|
||||
class TAuthor(BaseModel):
|
||||
"""
|
||||
Author model
|
||||
"""
|
||||
pass
|
||||
|
||||
class TSong(BaseModel):
|
||||
"""
|
||||
Author model
|
||||
"""
|
||||
pass
|
||||
|
||||
class TSongAuthor(BaseModel):
|
||||
"""
|
||||
Author model
|
||||
"""
|
||||
pass
|
||||
|
||||
class MigrateSongs(object):
|
||||
def __init__(self, display):
|
||||
self.display = display
|
||||
self.data_path = AppLocation.get_section_data_path(u'songs')
|
||||
self.database_files = SettingsManager.get_files(u'songs', u'.sqlite')
|
||||
print self.database_files
|
||||
|
||||
def process(self):
|
||||
self.display.output(u'Songs processing started')
|
||||
for f in self.database_files:
|
||||
self.v_1_9_0(f)
|
||||
self.display.output(u'Songs processing finished')
|
||||
|
||||
def v_1_9_0(self, database):
|
||||
self.display.output(u'Migration 1.9.0 Started for ' + database)
|
||||
self._v1_9_0_old(database)
|
||||
self._v1_9_0_new(database)
|
||||
self._v1_9_0_cleanup(database)
|
||||
self.display.output(u'Migration 1.9.0 Finished for ' + database)
|
||||
|
||||
def _v1_9_0_old(self, database):
|
||||
self.display.sub_output(u'Rename Tables ' + database)
|
||||
conn = sqlite3.connect(self.data_path + os.sep + database)
|
||||
conn.execute(u'alter table authors rename to authors_temp;')
|
||||
conn.commit()
|
||||
conn.execute(u'alter table songs rename to songs_temp;')
|
||||
conn.commit()
|
||||
conn.execute(u'alter table songauthors rename to songauthors_temp;')
|
||||
conn.commit()
|
||||
|
||||
def _v1_9_0_new(self, database):
|
||||
self.display.sub_output(u'Create new Tables ' + database)
|
||||
self.db_url = u'sqlite:///' + self.data_path + u'/songs.sqlite'
|
||||
print self.db_url
|
||||
self.session = init_models(self.db_url)
|
||||
metadata.create_all(checkfirst=True)
|
||||
results = self.session.query(TSong).order_by(TSong.songid).all()
|
||||
for songs_temp in results:
|
||||
song = Song()
|
||||
song.title = songs_temp.songtitle
|
||||
song.lyrics = songs_temp.lyrics.replace(u'\r\n', u'\n')
|
||||
song.copyright = songs_temp.copyrightinfo
|
||||
song.search_title = u''
|
||||
song.search_lyrics = u''
|
||||
print songs_temp.songtitle
|
||||
aa = self.session.execute(
|
||||
u'select * from songauthors_temp where songid =' + \
|
||||
unicode(songs_temp.songid))
|
||||
for row in aa:
|
||||
a = row['authorid']
|
||||
authors_temp = self.session.query(TAuthor).get(a)
|
||||
bb = self.session.execute(
|
||||
u'select * from authors where display_name = \"%s\"' % \
|
||||
unicode(authors_temp.authorname)).fetchone()
|
||||
if bb is None:
|
||||
author = Author()
|
||||
author.display_name = authors_temp.authorname
|
||||
author.first_name = u''
|
||||
author.last_name = u''
|
||||
else:
|
||||
author = self.session.query(Author).get(bb[0])
|
||||
song.authors.append(author)
|
||||
try:
|
||||
self.session.add(song)
|
||||
self.session.commit()
|
||||
except InvalidRequestError:
|
||||
self.session.rollback()
|
||||
print u'Error thrown = ', sys.exc_info()[1]
|
||||
|
||||
def _v1_9_0_cleanup(self, database):
|
||||
self.display.sub_output(u'Update Internal Data ' + database)
|
||||
conn = sqlite3.connect(self.data_path + os.sep + database)
|
||||
conn.execute("""update songs set search_title =
|
||||
replace(replace(replace(replace(replace(replace(replace(replace(
|
||||
replace(title, '&', 'and'), ',', ''), ';', ''), ':', ''),
|
||||
'(u', ''), ')', ''), '{', ''), '}',''),'?','');""")
|
||||
conn.execute("""update songs set search_lyrics =
|
||||
replace(replace(replace(replace(replace(replace(replace(replace(
|
||||
replace(lyrics, '&', 'and'), ',', ''), ';', ''), ':', ''),
|
||||
'(u', ''), ')', ''), '{', ''), '}',''),'?','')
|
||||
;""")
|
||||
conn.commit()
|
||||
conn.execute(u'drop table authors_temp;')
|
||||
conn.commit()
|
||||
conn.execute(u'drop table songs_temp;')
|
||||
conn.commit()
|
||||
conn.execute(u'drop table songauthors_temp;')
|
||||
conn.commit()
|
||||
conn.execute(u'drop table settings;')
|
||||
conn.commit()
|
@ -29,7 +29,7 @@ import os
|
||||
from PyQt4 import QtCore, QtGui
|
||||
|
||||
from openlp.core.lib import MediaManagerItem, BaseListWithDnD, build_icon, \
|
||||
ItemCapabilities, SettingsManager, context_menu_action, Receiver, translate
|
||||
ItemCapabilities, SettingsManager, translate
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
@ -298,8 +298,10 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
|
||||
last_name=text.rsplit(u' ', 1)[1], display_name=text)
|
||||
self.songmanager.save_author(author)
|
||||
self.song.authors.append(author)
|
||||
author_item = QtGui.QListWidgetItem(unicode(author.display_name))
|
||||
author_item.setData(QtCore.Qt.UserRole, QtCore.QVariant(author.id))
|
||||
author_item = QtGui.QListWidgetItem(
|
||||
unicode(author.display_name))
|
||||
author_item.setData(QtCore.Qt.UserRole,
|
||||
QtCore.QVariant(author.id))
|
||||
self.AuthorsListView.addItem(author_item)
|
||||
self.loadAuthors()
|
||||
self.AuthorsSelectionComboItem.setCurrentIndex(0)
|
||||
@ -349,7 +351,8 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
|
||||
self.songmanager.save_topic(topic)
|
||||
self.song.topics.append(topic)
|
||||
topic_item = QtGui.QListWidgetItem(unicode(topic.name))
|
||||
topic_item.setData(QtCore.Qt.UserRole, QtCore.QVariant(topic.id))
|
||||
topic_item.setData(QtCore.Qt.UserRole,
|
||||
QtCore.QVariant(topic.id))
|
||||
self.TopicsListView.addItem(topic_item)
|
||||
self.loadTopics()
|
||||
self.SongTopicCombo.setCurrentIndex(0)
|
||||
|
Loading…
Reference in New Issue
Block a user