forked from openlp/openlp
HEAD
This commit is contained in:
commit
51e109cfc6
22
openlp.pyw
22
openlp.pyw
@ -162,18 +162,18 @@ def main():
|
|||||||
the PyQt4 Application.
|
the PyQt4 Application.
|
||||||
"""
|
"""
|
||||||
# Set up command line options.
|
# Set up command line options.
|
||||||
usage = u'Usage: %prog [options] [qt-options]'
|
usage = 'Usage: %prog [options] [qt-options]'
|
||||||
parser = OptionParser(usage=usage)
|
parser = OptionParser(usage=usage)
|
||||||
parser.add_option(u'-e', u'--no-error-form', dest=u'no_error_form',
|
parser.add_option('-e', '--no-error-form', dest='no_error_form',
|
||||||
action=u'store_true', help=u'Disable the error notification form.')
|
action='store_true', help='Disable the error notification form.')
|
||||||
parser.add_option(u'-l', u'--log-level', dest=u'loglevel',
|
parser.add_option('-l', '--log-level', dest='loglevel',
|
||||||
default=u'warning', metavar=u'LEVEL', help=u'Set logging to LEVEL '
|
default='warning', metavar='LEVEL', help='Set logging to LEVEL '
|
||||||
u'level. Valid values are "debug", "info", "warning".')
|
'level. Valid values are "debug", "info", "warning".')
|
||||||
parser.add_option(u'-p', u'--portable', dest=u'portable',
|
parser.add_option('-p', '--portable', dest='portable',
|
||||||
action=u'store_true', help=u'Specify if this should be run as a '
|
action='store_true', help='Specify if this should be run as a '
|
||||||
u'portable app, off a USB flash drive (not implemented).')
|
'portable app, off a USB flash drive (not implemented).')
|
||||||
parser.add_option(u'-s', u'--style', dest=u'style',
|
parser.add_option('-s', '--style', dest='style',
|
||||||
help=u'Set the Qt4 style (passed directly to Qt4).')
|
help='Set the Qt4 style (passed directly to Qt4).')
|
||||||
# Set up logging
|
# Set up logging
|
||||||
log_path = AppLocation.get_directory(AppLocation.CacheDir)
|
log_path = AppLocation.get_directory(AppLocation.CacheDir)
|
||||||
if not os.path.exists(log_path):
|
if not os.path.exists(log_path):
|
||||||
|
@ -220,6 +220,7 @@ def image_to_byte(image):
|
|||||||
``image``
|
``image``
|
||||||
The image to converted.
|
The image to converted.
|
||||||
"""
|
"""
|
||||||
|
log.debug(u'image_to_byte')
|
||||||
byte_array = QtCore.QByteArray()
|
byte_array = QtCore.QByteArray()
|
||||||
# use buffer to store pixmap into byteArray
|
# use buffer to store pixmap into byteArray
|
||||||
buffie = QtCore.QBuffer(byte_array)
|
buffie = QtCore.QBuffer(byte_array)
|
||||||
@ -249,6 +250,7 @@ def resize_image(image, width, height, background=QtCore.Qt.black):
|
|||||||
The background colour defaults to black.
|
The background colour defaults to black.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
log.debug(u'resize_image')
|
||||||
preview = QtGui.QImage(image)
|
preview = QtGui.QImage(image)
|
||||||
if not preview.isNull():
|
if not preview.isNull():
|
||||||
# Only resize if different size
|
# Only resize if different size
|
||||||
|
@ -27,8 +27,6 @@
|
|||||||
import logging
|
import logging
|
||||||
from PyQt4 import QtWebKit
|
from PyQt4 import QtWebKit
|
||||||
|
|
||||||
from openlp.core.lib import image_to_byte
|
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
HTMLSRC = u"""
|
HTMLSRC = u"""
|
||||||
@ -274,7 +272,7 @@ body {
|
|||||||
</script>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<img id="image" class="size" src="%s" />
|
<img id="image" class="size" %s />
|
||||||
<video id="video" class="size"></video>
|
<video id="video" class="size"></video>
|
||||||
%s
|
%s
|
||||||
<div id="footer" class="footer"></div>
|
<div id="footer" class="footer"></div>
|
||||||
@ -301,10 +299,10 @@ def build_html(item, screen, alert, islive):
|
|||||||
height = screen[u'size'].height()
|
height = screen[u'size'].height()
|
||||||
theme = item.themedata
|
theme = item.themedata
|
||||||
webkitvers = webkit_version()
|
webkitvers = webkit_version()
|
||||||
if item.bg_frame:
|
if item.bg_image_bytes:
|
||||||
image = u'data:image/png;base64,%s' % image_to_byte(item.bg_frame)
|
image = u'src="data:image/png;base64,%s"' % item.bg_image_bytes
|
||||||
else:
|
else:
|
||||||
image = u''
|
image = u'style="display:none;"'
|
||||||
html = HTMLSRC % (build_background_css(item, width, height),
|
html = HTMLSRC % (build_background_css(item, width, height),
|
||||||
width, height,
|
width, height,
|
||||||
build_alert_css(alert, width),
|
build_alert_css(alert, width),
|
||||||
|
@ -32,7 +32,8 @@ import logging
|
|||||||
from PyQt4 import QtGui, QtCore, QtWebKit
|
from PyQt4 import QtGui, QtCore, QtWebKit
|
||||||
|
|
||||||
from openlp.core.lib import resize_image, expand_tags, \
|
from openlp.core.lib import resize_image, expand_tags, \
|
||||||
build_lyrics_format_css, build_lyrics_outline_css
|
build_lyrics_format_css, build_lyrics_outline_css, image_to_byte
|
||||||
|
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -54,6 +55,7 @@ class Renderer(object):
|
|||||||
self.frame = None
|
self.frame = None
|
||||||
self.bg_frame = None
|
self.bg_frame = None
|
||||||
self.bg_image = None
|
self.bg_image = None
|
||||||
|
self.bg_image_bytes = None
|
||||||
|
|
||||||
def set_theme(self, theme):
|
def set_theme(self, theme):
|
||||||
"""
|
"""
|
||||||
@ -66,15 +68,12 @@ class Renderer(object):
|
|||||||
self._theme = theme
|
self._theme = theme
|
||||||
self.bg_frame = None
|
self.bg_frame = None
|
||||||
self.bg_image = None
|
self.bg_image = None
|
||||||
|
self.bg_image_bytes = None
|
||||||
self._bg_image_filename = None
|
self._bg_image_filename = None
|
||||||
self.theme_name = theme.theme_name
|
self.theme_name = theme.theme_name
|
||||||
if theme.background_type == u'image':
|
if theme.background_type == u'image':
|
||||||
if theme.background_filename:
|
if theme.background_filename:
|
||||||
self._bg_image_filename = unicode(theme.background_filename)
|
self._bg_image_filename = unicode(theme.background_filename)
|
||||||
if self.frame:
|
|
||||||
self.bg_image = resize_image(self._bg_image_filename,
|
|
||||||
self.frame.width(),
|
|
||||||
self.frame.height())
|
|
||||||
|
|
||||||
def set_text_rectangle(self, rect_main, rect_footer):
|
def set_text_rectangle(self, rect_main, rect_footer):
|
||||||
"""
|
"""
|
||||||
@ -89,6 +88,22 @@ class Renderer(object):
|
|||||||
log.debug(u'set_text_rectangle %s , %s' % (rect_main, rect_footer))
|
log.debug(u'set_text_rectangle %s , %s' % (rect_main, rect_footer))
|
||||||
self._rect = rect_main
|
self._rect = rect_main
|
||||||
self._rect_footer = rect_footer
|
self._rect_footer = rect_footer
|
||||||
|
self.page_width = self._rect.width()
|
||||||
|
self.page_height = self._rect.height()
|
||||||
|
if self._theme.display_shadow:
|
||||||
|
self.page_width -= int(self._theme.display_shadow_size)
|
||||||
|
self.page_height -= int(self._theme.display_shadow_size)
|
||||||
|
self.web = QtWebKit.QWebView()
|
||||||
|
self.web.setVisible(False)
|
||||||
|
self.web.resize(self.page_width, self.page_height)
|
||||||
|
self.web_frame = self.web.page().mainFrame()
|
||||||
|
# Adjust width and height to account for shadow. outline done in css
|
||||||
|
self.page_shell = u'<html><head><style>' \
|
||||||
|
u'*{margin: 0; padding: 0; border: 0;} '\
|
||||||
|
u'#main {position:absolute; top:0px; %s %s}</style><body>' \
|
||||||
|
u'<div id="main">' % \
|
||||||
|
(build_lyrics_format_css(self._theme, self.page_width,
|
||||||
|
self.page_height), build_lyrics_outline_css(self._theme))
|
||||||
|
|
||||||
def set_frame_dest(self, frame_width, frame_height):
|
def set_frame_dest(self, frame_width, frame_height):
|
||||||
"""
|
"""
|
||||||
@ -110,15 +125,18 @@ class Renderer(object):
|
|||||||
self.frame.width(), self.frame.height())
|
self.frame.width(), self.frame.height())
|
||||||
if self._theme.background_type == u'image':
|
if self._theme.background_type == u'image':
|
||||||
self.bg_frame = QtGui.QImage(self.frame.width(),
|
self.bg_frame = QtGui.QImage(self.frame.width(),
|
||||||
self.frame.height(), QtGui.QImage.Format_ARGB32_Premultiplied)
|
self.frame.height(),
|
||||||
|
QtGui.QImage.Format_ARGB32_Premultiplied)
|
||||||
painter = QtGui.QPainter()
|
painter = QtGui.QPainter()
|
||||||
painter.begin(self.bg_frame)
|
painter.begin(self.bg_frame)
|
||||||
painter.fillRect(self.frame.rect(), QtCore.Qt.black)
|
painter.fillRect(self.frame.rect(), QtCore.Qt.black)
|
||||||
if self.bg_image:
|
if self.bg_image:
|
||||||
painter.drawImage(0, 0, self.bg_image)
|
painter.drawImage(0, 0, self.bg_image)
|
||||||
painter.end()
|
painter.end()
|
||||||
|
self.bg_image_bytes = image_to_byte(self.bg_frame)
|
||||||
else:
|
else:
|
||||||
self.bg_frame = None
|
self.bg_frame = None
|
||||||
|
self.bg_image_bytes = None
|
||||||
|
|
||||||
def format_slide(self, words, line_break):
|
def format_slide(self, words, line_break):
|
||||||
"""
|
"""
|
||||||
@ -139,29 +157,16 @@ class Renderer(object):
|
|||||||
lines = verse.split(u'\n')
|
lines = verse.split(u'\n')
|
||||||
for line in lines:
|
for line in lines:
|
||||||
text.append(line)
|
text.append(line)
|
||||||
web = QtWebKit.QWebView()
|
|
||||||
web.resize(self._rect.width(), self._rect.height())
|
|
||||||
web.setVisible(False)
|
|
||||||
frame = web.page().mainFrame()
|
|
||||||
# Adjust width and height to account for shadow. outline done in css
|
|
||||||
width = self._rect.width() - int(self._theme.display_shadow_size)
|
|
||||||
height = self._rect.height() - int(self._theme.display_shadow_size)
|
|
||||||
shell = u'<html><head><style>#main {%s %s}</style><body>' \
|
|
||||||
u'<div id="main">' % \
|
|
||||||
(build_lyrics_format_css(self._theme, width, height),
|
|
||||||
build_lyrics_outline_css(self._theme))
|
|
||||||
formatted = []
|
formatted = []
|
||||||
html_text = u''
|
html_text = u''
|
||||||
styled_text = u''
|
styled_text = u''
|
||||||
js_height = 'document.getElementById("main").scrollHeight'
|
|
||||||
for line in text:
|
for line in text:
|
||||||
styled_line = expand_tags(line) + line_end
|
styled_line = expand_tags(line) + line_end
|
||||||
styled_text += styled_line
|
styled_text += styled_line
|
||||||
html = shell + styled_text + u'</div></body></html>'
|
html = self.page_shell + styled_text + u'</div></body></html>'
|
||||||
web.setHtml(html)
|
self.web.setHtml(html)
|
||||||
# Text too long so go to next page
|
# Text too long so go to next page
|
||||||
text_height = int(frame.evaluateJavaScript(js_height).toString())
|
if self.web_frame.contentsSize().height() > self.page_height:
|
||||||
if text_height > height:
|
|
||||||
formatted.append(html_text)
|
formatted.append(html_text)
|
||||||
html_text = u''
|
html_text = u''
|
||||||
styled_text = styled_line
|
styled_text = styled_line
|
||||||
|
@ -223,7 +223,6 @@ class RenderManager(object):
|
|||||||
The words to go on the slides.
|
The words to go on the slides.
|
||||||
"""
|
"""
|
||||||
log.debug(u'format slide')
|
log.debug(u'format slide')
|
||||||
self.build_text_rectangle(self.themedata)
|
|
||||||
return self.renderer.format_slide(words, line_break)
|
return self.renderer.format_slide(words, line_break)
|
||||||
|
|
||||||
def calculate_default(self, screen):
|
def calculate_default(self, screen):
|
||||||
|
@ -97,7 +97,7 @@ class ServiceItem(object):
|
|||||||
self.themedata = None
|
self.themedata = None
|
||||||
self.main = None
|
self.main = None
|
||||||
self.footer = None
|
self.footer = None
|
||||||
self.bg_frame = None
|
self.bg_image_bytes = None
|
||||||
|
|
||||||
def _new_item(self):
|
def _new_item(self):
|
||||||
"""
|
"""
|
||||||
@ -145,7 +145,7 @@ class ServiceItem(object):
|
|||||||
"""
|
"""
|
||||||
log.debug(u'Render called')
|
log.debug(u'Render called')
|
||||||
self._display_frames = []
|
self._display_frames = []
|
||||||
self.bg_frame = None
|
self.bg_image_bytes = None
|
||||||
line_break = True
|
line_break = True
|
||||||
if self.is_capable(ItemCapabilities.NoLineBreaks):
|
if self.is_capable(ItemCapabilities.NoLineBreaks):
|
||||||
line_break = False
|
line_break = False
|
||||||
@ -156,7 +156,7 @@ class ServiceItem(object):
|
|||||||
theme = self.theme
|
theme = self.theme
|
||||||
self.main, self.footer = \
|
self.main, self.footer = \
|
||||||
self.render_manager.set_override_theme(theme, useOverride)
|
self.render_manager.set_override_theme(theme, useOverride)
|
||||||
self.bg_frame = self.render_manager.renderer.bg_frame
|
self.bg_image_bytes = self.render_manager.renderer.bg_image_bytes
|
||||||
self.themedata = self.render_manager.renderer._theme
|
self.themedata = self.render_manager.renderer._theme
|
||||||
for slide in self._raw_frames:
|
for slide in self._raw_frames:
|
||||||
before = time.time()
|
before = time.time()
|
||||||
|
@ -99,6 +99,7 @@ class MainDisplay(DisplayWidget):
|
|||||||
self.alertTab = None
|
self.alertTab = None
|
||||||
self.hide_mode = None
|
self.hide_mode = None
|
||||||
self.setWindowTitle(u'OpenLP Display')
|
self.setWindowTitle(u'OpenLP Display')
|
||||||
|
self.setStyleSheet(u'border: 0px; margin: 0px; padding: 0px;')
|
||||||
self.setWindowFlags(QtCore.Qt.FramelessWindowHint |
|
self.setWindowFlags(QtCore.Qt.FramelessWindowHint |
|
||||||
QtCore.Qt.WindowStaysOnTopHint)
|
QtCore.Qt.WindowStaysOnTopHint)
|
||||||
if self.isLive:
|
if self.isLive:
|
||||||
@ -116,12 +117,18 @@ class MainDisplay(DisplayWidget):
|
|||||||
self.screen = self.screens.current
|
self.screen = self.screens.current
|
||||||
self.setVisible(False)
|
self.setVisible(False)
|
||||||
self.setGeometry(self.screen[u'size'])
|
self.setGeometry(self.screen[u'size'])
|
||||||
self.scene = QtGui.QGraphicsScene()
|
try:
|
||||||
self.setScene(self.scene)
|
|
||||||
self.webView = QtWebKit.QGraphicsWebView()
|
self.webView = QtWebKit.QGraphicsWebView()
|
||||||
|
self.scene = QtGui.QGraphicsScene(self)
|
||||||
|
self.setScene(self.scene)
|
||||||
self.scene.addItem(self.webView)
|
self.scene.addItem(self.webView)
|
||||||
self.webView.resize(self.screen[u'size'].width(),
|
self.webView.setGeometry(QtCore.QRectF(0, 0,
|
||||||
self.screen[u'size'].height())
|
self.screen[u'size'].width(), self.screen[u'size'].height()))
|
||||||
|
except AttributeError:
|
||||||
|
# QGraphicsWebView a recent addition, so fall back to QWebView
|
||||||
|
self.webView = QtWebKit.QWebView(self)
|
||||||
|
self.webView.setGeometry(0, 0,
|
||||||
|
self.screen[u'size'].width(), self.screen[u'size'].height())
|
||||||
self.page = self.webView.page()
|
self.page = self.webView.page()
|
||||||
self.frame = self.page.mainFrame()
|
self.frame = self.page.mainFrame()
|
||||||
QtCore.QObject.connect(self.webView,
|
QtCore.QObject.connect(self.webView,
|
||||||
@ -306,6 +313,7 @@ class MainDisplay(DisplayWidget):
|
|||||||
# We must have a service item to preview
|
# We must have a service item to preview
|
||||||
if not hasattr(self, u'serviceItem'):
|
if not hasattr(self, u'serviceItem'):
|
||||||
return
|
return
|
||||||
|
Receiver.send_message(u'openlp_process_events')
|
||||||
if self.isLive:
|
if self.isLive:
|
||||||
# Wait for the fade to finish before geting the preview.
|
# Wait for the fade to finish before geting the preview.
|
||||||
# Important otherwise preview will have incorrect text if at all !
|
# Important otherwise preview will have incorrect text if at all !
|
||||||
@ -318,6 +326,8 @@ class MainDisplay(DisplayWidget):
|
|||||||
# Important otherwise first preview will miss the background !
|
# Important otherwise first preview will miss the background !
|
||||||
while not self.loaded:
|
while not self.loaded:
|
||||||
Receiver.send_message(u'openlp_process_events')
|
Receiver.send_message(u'openlp_process_events')
|
||||||
|
if self.isLive:
|
||||||
|
self.setVisible(True)
|
||||||
preview = QtGui.QImage(self.screen[u'size'].width(),
|
preview = QtGui.QImage(self.screen[u'size'].width(),
|
||||||
self.screen[u'size'].height(),
|
self.screen[u'size'].height(),
|
||||||
QtGui.QImage.Format_ARGB32_Premultiplied)
|
QtGui.QImage.Format_ARGB32_Premultiplied)
|
||||||
@ -326,8 +336,6 @@ class MainDisplay(DisplayWidget):
|
|||||||
self.frame.render(painter)
|
self.frame.render(painter)
|
||||||
painter.end()
|
painter.end()
|
||||||
# Make display show up if in single screen mode
|
# Make display show up if in single screen mode
|
||||||
if self.isLive:
|
|
||||||
self.setVisible(True)
|
|
||||||
return preview
|
return preview
|
||||||
|
|
||||||
def buildHtml(self, serviceItem):
|
def buildHtml(self, serviceItem):
|
||||||
@ -341,7 +349,9 @@ class MainDisplay(DisplayWidget):
|
|||||||
self.serviceItem = serviceItem
|
self.serviceItem = serviceItem
|
||||||
html = build_html(self.serviceItem, self.screen, self.parent.alertTab,
|
html = build_html(self.serviceItem, self.screen, self.parent.alertTab,
|
||||||
self.isLive)
|
self.isLive)
|
||||||
|
log.debug(u'buildHtml - pre setHtml')
|
||||||
self.webView.setHtml(html)
|
self.webView.setHtml(html)
|
||||||
|
log.debug(u'buildHtml - post setHtml')
|
||||||
if serviceItem.foot_text and serviceItem.foot_text:
|
if serviceItem.foot_text and serviceItem.foot_text:
|
||||||
self.footer(serviceItem.foot_text)
|
self.footer(serviceItem.foot_text)
|
||||||
# if was hidden keep it hidden
|
# if was hidden keep it hidden
|
||||||
|
@ -575,7 +575,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
|
|||||||
QtCore.SIGNAL(u'toggled(bool)'), self.setAutoLanguage)
|
QtCore.SIGNAL(u'toggled(bool)'), self.setAutoLanguage)
|
||||||
self.LanguageGroup.triggered.connect(LanguageManager.set_language)
|
self.LanguageGroup.triggered.connect(LanguageManager.set_language)
|
||||||
QtCore.QObject.connect(self.ModeDefaultItem,
|
QtCore.QObject.connect(self.ModeDefaultItem,
|
||||||
QtCore.SIGNAL(u'triggered()'), self.setViewMode)
|
QtCore.SIGNAL(u'triggered()'), self.onModeDefaultItemClicked)
|
||||||
QtCore.QObject.connect(self.ModeSetupItem,
|
QtCore.QObject.connect(self.ModeSetupItem,
|
||||||
QtCore.SIGNAL(u'triggered()'), self.onModeSetupItemClicked)
|
QtCore.SIGNAL(u'triggered()'), self.onModeSetupItemClicked)
|
||||||
QtCore.QObject.connect(self.ModeLiveItem,
|
QtCore.QObject.connect(self.ModeLiveItem,
|
||||||
@ -670,6 +670,16 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
|
|||||||
self.generalSettingsSection + u'/auto open',
|
self.generalSettingsSection + u'/auto open',
|
||||||
QtCore.QVariant(False)).toBool():
|
QtCore.QVariant(False)).toBool():
|
||||||
self.ServiceManagerContents.onLoadService(True)
|
self.ServiceManagerContents.onLoadService(True)
|
||||||
|
view_mode = QtCore.QSettings().value(u'%s/view mode' % \
|
||||||
|
self.generalSettingsSection, u'default')
|
||||||
|
if view_mode == u'default':
|
||||||
|
self.ModeDefaultItem.setChecked(True)
|
||||||
|
elif view_mode == u'setup':
|
||||||
|
self.setViewMode(True, True, False, True, False)
|
||||||
|
self.ModeSetupItem.setChecked(True)
|
||||||
|
elif view_mode == u'live':
|
||||||
|
self.setViewMode(False, True, False, False, True)
|
||||||
|
self.ModeLiveItem.setChecked(True)
|
||||||
|
|
||||||
def blankCheck(self):
|
def blankCheck(self):
|
||||||
"""
|
"""
|
||||||
@ -677,8 +687,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
|
|||||||
Triggered by delay thread.
|
Triggered by delay thread.
|
||||||
"""
|
"""
|
||||||
settings = QtCore.QSettings()
|
settings = QtCore.QSettings()
|
||||||
settings.beginGroup(self.generalSettingsSection)
|
if settings.value(u'%s/screen blank' % self.generalSettingsSection,
|
||||||
if settings.value(u'screen blank', QtCore.QVariant(False)).toBool():
|
QtCore.QVariant(False)).toBool():
|
||||||
self.LiveController.mainDisplaySetBackground()
|
self.LiveController.mainDisplaySetBackground()
|
||||||
if settings.value(u'blank warning',
|
if settings.value(u'blank warning',
|
||||||
QtCore.QVariant(False)).toBool():
|
QtCore.QVariant(False)).toBool():
|
||||||
@ -687,7 +697,6 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
|
|||||||
'OpenLP Main Display Blanked'),
|
'OpenLP Main Display Blanked'),
|
||||||
translate('OpenLP.MainWindow',
|
translate('OpenLP.MainWindow',
|
||||||
'The Main Display has been blanked out'))
|
'The Main Display has been blanked out'))
|
||||||
settings.endGroup()
|
|
||||||
|
|
||||||
def onHelpWebSiteClicked(self):
|
def onHelpWebSiteClicked(self):
|
||||||
"""
|
"""
|
||||||
@ -716,16 +725,31 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
|
|||||||
"""
|
"""
|
||||||
self.settingsForm.exec_()
|
self.settingsForm.exec_()
|
||||||
|
|
||||||
|
def onModeDefaultItemClicked(self):
|
||||||
|
"""
|
||||||
|
Put OpenLP into "Default" view mode.
|
||||||
|
"""
|
||||||
|
settings = QtCore.QSettings()
|
||||||
|
settings.setValue(u'%s/view mode' % self.generalSettingsSection,
|
||||||
|
u'default')
|
||||||
|
self.setViewMode(True, True, True, True, True)
|
||||||
|
|
||||||
def onModeSetupItemClicked(self):
|
def onModeSetupItemClicked(self):
|
||||||
"""
|
"""
|
||||||
Put OpenLP into "Setup" view mode.
|
Put OpenLP into "Setup" view mode.
|
||||||
"""
|
"""
|
||||||
|
settings = QtCore.QSettings()
|
||||||
|
settings.setValue(u'%s/view mode' % self.generalSettingsSection,
|
||||||
|
u'setup')
|
||||||
self.setViewMode(True, True, False, True, False)
|
self.setViewMode(True, True, False, True, False)
|
||||||
|
|
||||||
def onModeLiveItemClicked(self):
|
def onModeLiveItemClicked(self):
|
||||||
"""
|
"""
|
||||||
Put OpenLP into "Live" view mode.
|
Put OpenLP into "Live" view mode.
|
||||||
"""
|
"""
|
||||||
|
settings = QtCore.QSettings()
|
||||||
|
settings.setValue(u'%s/view mode' % self.generalSettingsSection,
|
||||||
|
u'live')
|
||||||
self.setViewMode(False, True, False, False, True)
|
self.setViewMode(False, True, False, False, True)
|
||||||
|
|
||||||
def setViewMode(self, media=True, service=True, theme=True, preview=True,
|
def setViewMode(self, media=True, service=True, theme=True, preview=True,
|
||||||
|
@ -884,7 +884,8 @@ class ServiceManager(QtGui.QWidget):
|
|||||||
QtGui.QMessageBox.critical(self,
|
QtGui.QMessageBox.critical(self,
|
||||||
translate('OpenLP.ServiceManager', 'Missing Display Handler'),
|
translate('OpenLP.ServiceManager', 'Missing Display Handler'),
|
||||||
translate('OpenLP.ServiceManager', 'Your item cannot be '
|
translate('OpenLP.ServiceManager', 'Your item cannot be '
|
||||||
'displayed as there is no handler to display it'))
|
'displayed as the plugin required to display it is missing '
|
||||||
|
'or inactive'))
|
||||||
|
|
||||||
def remoteEdit(self):
|
def remoteEdit(self):
|
||||||
"""
|
"""
|
||||||
|
@ -209,7 +209,8 @@ class SlideController(QtGui.QWidget):
|
|||||||
self.Toolbar.addToolbarSeparator(u'Close Separator')
|
self.Toolbar.addToolbarSeparator(u'Close Separator')
|
||||||
self.Toolbar.addToolbarButton(
|
self.Toolbar.addToolbarButton(
|
||||||
u'Edit Song', u':/general/general_edit.png',
|
u'Edit Song', u':/general/general_edit.png',
|
||||||
translate('OpenLP.SlideController', 'Edit and re-preview song'),
|
translate('OpenLP.SlideController',
|
||||||
|
'Edit and reload song preview'),
|
||||||
self.onEditSong)
|
self.onEditSong)
|
||||||
if isLive:
|
if isLive:
|
||||||
self.Toolbar.addToolbarSeparator(u'Loop Separator')
|
self.Toolbar.addToolbarSeparator(u'Loop Separator')
|
||||||
@ -636,9 +637,9 @@ class SlideController(QtGui.QWidget):
|
|||||||
"""
|
"""
|
||||||
if not self.serviceItem:
|
if not self.serviceItem:
|
||||||
return
|
return
|
||||||
|
if self.serviceItem.is_command():
|
||||||
Receiver.send_message(u'%s_first' % self.serviceItem.name.lower(),
|
Receiver.send_message(u'%s_first' % self.serviceItem.name.lower(),
|
||||||
[self.serviceItem, self.isLive])
|
[self.serviceItem, self.isLive])
|
||||||
if self.serviceItem.is_command():
|
|
||||||
self.updatePreview()
|
self.updatePreview()
|
||||||
else:
|
else:
|
||||||
self.PreviewListWidget.selectRow(0)
|
self.PreviewListWidget.selectRow(0)
|
||||||
@ -651,9 +652,9 @@ class SlideController(QtGui.QWidget):
|
|||||||
index = int(message[0])
|
index = int(message[0])
|
||||||
if not self.serviceItem:
|
if not self.serviceItem:
|
||||||
return
|
return
|
||||||
|
if self.serviceItem.is_command():
|
||||||
Receiver.send_message(u'%s_slide' % self.serviceItem.name.lower(),
|
Receiver.send_message(u'%s_slide' % self.serviceItem.name.lower(),
|
||||||
[self.serviceItem, self.isLive, index])
|
[self.serviceItem, self.isLive, index])
|
||||||
if self.serviceItem.is_command():
|
|
||||||
self.updatePreview()
|
self.updatePreview()
|
||||||
else:
|
else:
|
||||||
self.PreviewListWidget.selectRow(index)
|
self.PreviewListWidget.selectRow(index)
|
||||||
@ -768,9 +769,9 @@ class SlideController(QtGui.QWidget):
|
|||||||
row = self.PreviewListWidget.currentRow()
|
row = self.PreviewListWidget.currentRow()
|
||||||
self.selectedRow = 0
|
self.selectedRow = 0
|
||||||
if row > -1 and row < self.PreviewListWidget.rowCount():
|
if row > -1 and row < self.PreviewListWidget.rowCount():
|
||||||
|
if self.serviceItem.is_command() and self.isLive:
|
||||||
Receiver.send_message(u'%s_slide' % self.serviceItem.name.lower(),
|
Receiver.send_message(u'%s_slide' % self.serviceItem.name.lower(),
|
||||||
[self.serviceItem, self.isLive, row])
|
[self.serviceItem, self.isLive, row])
|
||||||
if self.serviceItem.is_command() and self.isLive:
|
|
||||||
self.updatePreview()
|
self.updatePreview()
|
||||||
else:
|
else:
|
||||||
frame, raw_html = self.serviceItem.get_rendered_frame(row)
|
frame, raw_html = self.serviceItem.get_rendered_frame(row)
|
||||||
|
@ -242,14 +242,14 @@ class ThemeManager(QtGui.QWidget):
|
|||||||
QtGui.QMessageBox.critical(self,
|
QtGui.QMessageBox.critical(self,
|
||||||
translate('OpenLP.ThemeManager', 'Error'),
|
translate('OpenLP.ThemeManager', 'Error'),
|
||||||
unicode(translate('OpenLP.ThemeManager',
|
unicode(translate('OpenLP.ThemeManager',
|
||||||
'Theme %s is use in %s plugin.')) % \
|
'Theme %s is used in the %s plugin.')) % \
|
||||||
(theme, plugin.name))
|
(theme, plugin.name))
|
||||||
return
|
return
|
||||||
if unicode(self.serviceComboBox.currentText()) == theme:
|
if unicode(self.serviceComboBox.currentText()) == theme:
|
||||||
QtGui.QMessageBox.critical(self,
|
QtGui.QMessageBox.critical(self,
|
||||||
translate('OpenLP.ThemeManager', 'Error'),
|
translate('OpenLP.ThemeManager', 'Error'),
|
||||||
unicode(translate('OpenLP.ThemeManager',
|
unicode(translate('OpenLP.ThemeManager',
|
||||||
'Theme %s is use by the service manager.')) % theme)
|
'Theme %s is used by the service manager.')) % theme)
|
||||||
return
|
return
|
||||||
row = self.themeListWidget.row(item)
|
row = self.themeListWidget.row(item)
|
||||||
self.themeListWidget.takeItem(row)
|
self.themeListWidget.takeItem(row)
|
||||||
|
@ -182,7 +182,7 @@ class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard):
|
|||||||
translate('BiblesPlugin.ImportWizardForm',
|
translate('BiblesPlugin.ImportWizardForm',
|
||||||
'Empty Copyright'),
|
'Empty Copyright'),
|
||||||
translate('BiblesPlugin.ImportWizardForm',
|
translate('BiblesPlugin.ImportWizardForm',
|
||||||
'You need to set a copyright for your Bible! '
|
'You need to set a copyright for your Bible. '
|
||||||
'Bibles in the Public Domain need to be marked as '
|
'Bibles in the Public Domain need to be marked as '
|
||||||
'such.'))
|
'such.'))
|
||||||
self.CopyrightEdit.setFocus()
|
self.CopyrightEdit.setFocus()
|
||||||
@ -192,7 +192,7 @@ class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard):
|
|||||||
translate('BiblesPlugin.ImportWizardForm',
|
translate('BiblesPlugin.ImportWizardForm',
|
||||||
'Bible Exists'),
|
'Bible Exists'),
|
||||||
translate('BiblesPlugin.ImportWizardForm',
|
translate('BiblesPlugin.ImportWizardForm',
|
||||||
'This Bible already exists! Please import '
|
'This Bible already exists. Please import '
|
||||||
'a different Bible or first delete the existing one.'))
|
'a different Bible or first delete the existing one.'))
|
||||||
self.VersionNameEdit.setFocus()
|
self.VersionNameEdit.setFocus()
|
||||||
return False
|
return False
|
||||||
|
@ -246,7 +246,7 @@ class BibleManager(object):
|
|||||||
translate('BiblesPlugin.BibleManager',
|
translate('BiblesPlugin.BibleManager',
|
||||||
'Scripture Reference Error'),
|
'Scripture Reference Error'),
|
||||||
translate('BiblesPlugin.BibleManager', 'Your scripture '
|
translate('BiblesPlugin.BibleManager', 'Your scripture '
|
||||||
'reference is either not supported by OpenLP or invalid. '
|
'reference is either not supported by OpenLP or is invalid. '
|
||||||
'Please make sure your reference conforms to one of the '
|
'Please make sure your reference conforms to one of the '
|
||||||
'following patterns:\n\n'
|
'following patterns:\n\n'
|
||||||
'Book Chapter\n'
|
'Book Chapter\n'
|
||||||
|
@ -74,6 +74,7 @@ class ImpressController(PresentationController):
|
|||||||
self.process = None
|
self.process = None
|
||||||
self.desktop = None
|
self.desktop = None
|
||||||
self.manager = None
|
self.manager = None
|
||||||
|
self.uno_connection_type = u'pipe' #u'socket'
|
||||||
|
|
||||||
def check_available(self):
|
def check_available(self):
|
||||||
"""
|
"""
|
||||||
@ -98,7 +99,14 @@ class ImpressController(PresentationController):
|
|||||||
self.manager._FlagAsMethod(u'Bridge_GetValueObject')
|
self.manager._FlagAsMethod(u'Bridge_GetValueObject')
|
||||||
else:
|
else:
|
||||||
# -headless
|
# -headless
|
||||||
cmd = u'openoffice.org -nologo -norestore -minimized -invisible -nofirststartwizard -accept="socket,host=localhost,port=2002;urp;"'
|
if self.uno_connection_type == u'pipe':
|
||||||
|
cmd = u'openoffice.org -nologo -norestore -minimized ' \
|
||||||
|
+ u'-invisible -nofirststartwizard ' \
|
||||||
|
+ u'-accept=pipe,name=openlp_pipe;urp;'
|
||||||
|
else:
|
||||||
|
cmd = u'openoffice.org -nologo -norestore -minimized ' \
|
||||||
|
+ u'-invisible -nofirststartwizard ' \
|
||||||
|
+ u'-accept=socket,host=localhost,port=2002;urp;'
|
||||||
self.process = QtCore.QProcess()
|
self.process = QtCore.QProcess()
|
||||||
self.process.startDetached(cmd)
|
self.process.startDetached(cmd)
|
||||||
self.process.waitForStarted()
|
self.process.waitForStarted()
|
||||||
@ -120,8 +128,14 @@ class ImpressController(PresentationController):
|
|||||||
while ctx is None and loop < 3:
|
while ctx is None and loop < 3:
|
||||||
try:
|
try:
|
||||||
log.debug(u'get UNO Desktop Openoffice - resolve')
|
log.debug(u'get UNO Desktop Openoffice - resolve')
|
||||||
ctx = resolver.resolve(u'uno:socket,host=localhost,port=2002;'
|
if self.uno_connection_type == u'pipe':
|
||||||
u'urp;StarOffice.ComponentContext')
|
ctx = resolver.resolve(u'uno:' \
|
||||||
|
+ u'pipe,name=openlp_pipe;' \
|
||||||
|
+ u'urp;StarOffice.ComponentContext')
|
||||||
|
else:
|
||||||
|
ctx = resolver.resolve(u'uno:' \
|
||||||
|
+ u'socket,host=localhost,port=2002;' \
|
||||||
|
+ u'urp;StarOffice.ComponentContext')
|
||||||
except:
|
except:
|
||||||
log.exception(u'Unable to find running instance ')
|
log.exception(u'Unable to find running instance ')
|
||||||
self.start_process()
|
self.start_process()
|
||||||
|
@ -97,8 +97,7 @@ class AuthorsForm(QtGui.QDialog, Ui_AuthorsDialog):
|
|||||||
self, translate('SongsPlugin.AuthorsForm', 'Error'),
|
self, translate('SongsPlugin.AuthorsForm', 'Error'),
|
||||||
translate('SongsPlugin.AuthorsForm',
|
translate('SongsPlugin.AuthorsForm',
|
||||||
'You have not set a display name for the '
|
'You have not set a display name for the '
|
||||||
'author, would you like me to combine the first and '
|
'author, combine the first and last names?'),
|
||||||
'last names for you?'),
|
|
||||||
QtGui.QMessageBox.StandardButtons(
|
QtGui.QMessageBox.StandardButtons(
|
||||||
QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
|
QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
|
||||||
) == QtGui.QMessageBox.Yes:
|
) == QtGui.QMessageBox.Yes:
|
||||||
|
@ -51,7 +51,7 @@ class TopicsForm(QtGui.QDialog, Ui_TopicsDialog):
|
|||||||
QtGui.QMessageBox.critical(
|
QtGui.QMessageBox.critical(
|
||||||
self, translate('SongsPlugin.TopicsForm', 'Error'),
|
self, translate('SongsPlugin.TopicsForm', 'Error'),
|
||||||
translate('SongsPlugin.TopicsForm',
|
translate('SongsPlugin.TopicsForm',
|
||||||
'You need to type in a topic name!'))
|
'You need to type in a topic name.'))
|
||||||
self.NameEdit.setFocus()
|
self.NameEdit.setFocus()
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
|
@ -59,6 +59,7 @@ class OooImport(SongImport):
|
|||||||
self.document = None
|
self.document = None
|
||||||
self.process_started = False
|
self.process_started = False
|
||||||
self.filenames = kwargs[u'filenames']
|
self.filenames = kwargs[u'filenames']
|
||||||
|
self.uno_connection_type = u'pipe' #u'socket'
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
QtCore.SIGNAL(u'song_stop_import'), self.stop_import)
|
QtCore.SIGNAL(u'song_stop_import'), self.stop_import)
|
||||||
|
|
||||||
@ -106,8 +107,14 @@ class OooImport(SongImport):
|
|||||||
loop = 0
|
loop = 0
|
||||||
while ctx is None and loop < 5:
|
while ctx is None and loop < 5:
|
||||||
try:
|
try:
|
||||||
ctx = resolver.resolve(u'uno:socket,host=localhost,' \
|
if self.uno_connection_type == u'pipe':
|
||||||
+ 'port=2002;urp;StarOffice.ComponentContext')
|
ctx = resolver.resolve(u'uno:' \
|
||||||
|
+ u'pipe,name=openlp_pipe;' \
|
||||||
|
+ u'urp;StarOffice.ComponentContext')
|
||||||
|
else:
|
||||||
|
ctx = resolver.resolve(u'uno:' \
|
||||||
|
+ u'socket,host=localhost,port=2002;' \
|
||||||
|
+ u'urp;StarOffice.ComponentContext')
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
self.start_ooo_process()
|
self.start_ooo_process()
|
||||||
@ -123,9 +130,14 @@ class OooImport(SongImport):
|
|||||||
self.manager._FlagAsMethod(u'Bridge_GetStruct')
|
self.manager._FlagAsMethod(u'Bridge_GetStruct')
|
||||||
self.manager._FlagAsMethod(u'Bridge_GetValueObject')
|
self.manager._FlagAsMethod(u'Bridge_GetValueObject')
|
||||||
else:
|
else:
|
||||||
|
if self.uno_connection_type == u'pipe':
|
||||||
cmd = u'openoffice.org -nologo -norestore -minimized ' \
|
cmd = u'openoffice.org -nologo -norestore -minimized ' \
|
||||||
+ u'-invisible -nofirststartwizard ' \
|
+ u'-invisible -nofirststartwizard ' \
|
||||||
+ '-accept="socket,host=localhost,port=2002;urp;"'
|
+ u'-accept=pipe,name=openlp_pipe;urp;'
|
||||||
|
else:
|
||||||
|
cmd = u'openoffice.org -nologo -norestore -minimized ' \
|
||||||
|
+ u'-invisible -nofirststartwizard ' \
|
||||||
|
+ u'-accept=socket,host=localhost,port=2002;urp;'
|
||||||
process = QtCore.QProcess()
|
process = QtCore.QProcess()
|
||||||
process.startDetached(cmd)
|
process.startDetached(cmd)
|
||||||
process.waitForStarted()
|
process.waitForStarted()
|
||||||
|
1353
resources/i18n/af.ts
1353
resources/i18n/af.ts
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
0
resources/images/about-new.bmp
Executable file → Normal file
0
resources/images/about-new.bmp
Executable file → Normal file
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 76 KiB |
1
resources/openlp.desktop
Normal file → Executable file
1
resources/openlp.desktop
Normal file → Executable file
@ -1,3 +1,4 @@
|
|||||||
|
#!/usr/bin/env xdg-open
|
||||||
[Desktop Entry]
|
[Desktop Entry]
|
||||||
Encoding=UTF-8
|
Encoding=UTF-8
|
||||||
Name=OpenLP
|
Name=OpenLP
|
||||||
|
@ -127,6 +127,8 @@ def import_bible():
|
|||||||
for row in rows:
|
for row in rows:
|
||||||
key = unicode(row[0], u'cp1252')
|
key = unicode(row[0], u'cp1252')
|
||||||
value = unicode(row[1], u'cp1252')
|
value = unicode(row[1], u'cp1252')
|
||||||
|
if key == u'Permission':
|
||||||
|
key = u'Permissions'
|
||||||
sql_insert = u'INSERT INTO metadata '\
|
sql_insert = u'INSERT INTO metadata '\
|
||||||
'("key", "value") '\
|
'("key", "value") '\
|
||||||
'VALUES (?, ?)'
|
'VALUES (?, ?)'
|
||||||
|
@ -85,7 +85,9 @@ class CommandStack(object):
|
|||||||
return len(self.data)
|
return len(self.data)
|
||||||
|
|
||||||
def __getitem__(self, index):
|
def __getitem__(self, index):
|
||||||
if self.data[index].get(u'arguments'):
|
if not index in self.data:
|
||||||
|
return None
|
||||||
|
elif self.data[index].get(u'arguments'):
|
||||||
return self.data[index][u'command'], self.data[index][u'arguments']
|
return self.data[index][u'command'], self.data[index][u'arguments']
|
||||||
else:
|
else:
|
||||||
return self.data[index][u'command']
|
return self.data[index][u'command']
|
||||||
@ -110,6 +112,21 @@ class CommandStack(object):
|
|||||||
def reset(self):
|
def reset(self):
|
||||||
self.current_index = 0
|
self.current_index = 0
|
||||||
|
|
||||||
|
def arguments(self):
|
||||||
|
if self.data[self.current_index - 1].get(u'arguments'):
|
||||||
|
return self.data[self.current_index - 1][u'arguments']
|
||||||
|
else:
|
||||||
|
return []
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
results = []
|
||||||
|
for item in self.data:
|
||||||
|
if item.get(u'arguments'):
|
||||||
|
results.append(str((item[u'command'], item[u'arguments'])))
|
||||||
|
else:
|
||||||
|
results.append(str((item[u'command'], )))
|
||||||
|
return u'[%s]' % u', '.join(results)
|
||||||
|
|
||||||
|
|
||||||
def print_verbose(text):
|
def print_verbose(text):
|
||||||
"""
|
"""
|
||||||
@ -231,7 +248,7 @@ def update_translations():
|
|||||||
def generate_binaries():
|
def generate_binaries():
|
||||||
print u'Generate the related *.qm files'
|
print u'Generate the related *.qm files'
|
||||||
if not os.path.exists(os.path.join(os.path.abspath(u'..'), u'openlp.pro')):
|
if not os.path.exists(os.path.join(os.path.abspath(u'..'), u'openlp.pro')):
|
||||||
print u'You have no generated a project file yet, please run this ' + \
|
print u'You have not generated a project file yet, please run this ' + \
|
||||||
u'script with the -p option. It is also recommended that you ' + \
|
u'script with the -p option. It is also recommended that you ' + \
|
||||||
u'this script with the -u option to update the translation ' + \
|
u'this script with the -u option to update the translation ' + \
|
||||||
u'files as well.'
|
u'files as well.'
|
||||||
@ -248,13 +265,15 @@ def create_translation(language):
|
|||||||
The language file to create.
|
The language file to create.
|
||||||
"""
|
"""
|
||||||
print "Create new Translation File"
|
print "Create new Translation File"
|
||||||
|
if not language.endswith(u'.ts'):
|
||||||
|
language += u'.ts'
|
||||||
filename = os.path.join(os.path.abspath(u'..'), u'resources', u'i18n', language)
|
filename = os.path.join(os.path.abspath(u'..'), u'resources', u'i18n', language)
|
||||||
download_file(u'en.ts', filename)
|
download_file(u'en.ts', filename)
|
||||||
print u'\n** Please Note **\n'
|
print u' ** Please Note **'
|
||||||
print u'In order to get this file into OpenLP and onto the Pootle ' + \
|
print u' In order to get this file into OpenLP and onto the Pootle ' + \
|
||||||
u'translation server you will need to subscribe to the OpenLP' + \
|
u'translation server you will need to subscribe to the OpenLP' + \
|
||||||
u'Translators mailing list, and request that your language file ' + \
|
u'Translators mailing list, and request that your language file ' + \
|
||||||
u'be added to the project.\n'
|
u'be added to the project.'
|
||||||
print u' Done'
|
print u' Done'
|
||||||
|
|
||||||
def process_stack(command_stack):
|
def process_stack(command_stack):
|
||||||
@ -278,7 +297,7 @@ def process_stack(command_stack):
|
|||||||
elif command == Command.Generate:
|
elif command == Command.Generate:
|
||||||
generate_binaries()
|
generate_binaries()
|
||||||
elif command == Command.Create:
|
elif command == Command.Create:
|
||||||
command, arguments = command_stack[command_stack.current_index]
|
arguments = command_stack.arguments()
|
||||||
create_translation(*arguments)
|
create_translation(*arguments)
|
||||||
print u'Finished processing commands.'
|
print u'Finished processing commands.'
|
||||||
else:
|
else:
|
||||||
@ -293,7 +312,7 @@ def main():
|
|||||||
parser = OptionParser(usage=usage)
|
parser = OptionParser(usage=usage)
|
||||||
parser.add_option('-d', '--download-ts', dest='download',
|
parser.add_option('-d', '--download-ts', dest='download',
|
||||||
action='store_true', help='download language files from Pootle')
|
action='store_true', help='download language files from Pootle')
|
||||||
parser.add_option('-c', '--create', dest=u'create', metavar='LANG',
|
parser.add_option('-c', '--create', dest='create', metavar='LANG',
|
||||||
help='create a new translation file for language LANG, e.g. "en_GB"')
|
help='create a new translation file for language LANG, e.g. "en_GB"')
|
||||||
parser.add_option('-p', '--prepare', dest='prepare', action='store_true',
|
parser.add_option('-p', '--prepare', dest='prepare', action='store_true',
|
||||||
help='generate a project file, used to update the translations')
|
help='generate a project file, used to update the translations')
|
||||||
|
@ -179,7 +179,16 @@ def copy_windows_files():
|
|||||||
copy(os.path.join(iss_path, u'OpenLP.ico'), os.path.join(dist_path, u'OpenLP.ico'))
|
copy(os.path.join(iss_path, u'OpenLP.ico'), os.path.join(dist_path, u'OpenLP.ico'))
|
||||||
copy(os.path.join(iss_path, u'LICENSE.txt'), os.path.join(dist_path, u'LICENSE.txt'))
|
copy(os.path.join(iss_path, u'LICENSE.txt'), os.path.join(dist_path, u'LICENSE.txt'))
|
||||||
|
|
||||||
|
def update_translations():
|
||||||
|
print u'Updating translations...'
|
||||||
|
os.chdir(script_path)
|
||||||
|
translation_utils = Popen(u'python translation_utils.py -dpu')
|
||||||
|
code = translation_utils.wait()
|
||||||
|
if code != 0:
|
||||||
|
print u'Error running translation_utils.py'
|
||||||
|
|
||||||
def compile_translations():
|
def compile_translations():
|
||||||
|
print u'Compiling translations...'
|
||||||
files = os.listdir(i18n_path)
|
files = os.listdir(i18n_path)
|
||||||
if not os.path.exists(os.path.join(dist_path, u'i18n')):
|
if not os.path.exists(os.path.join(dist_path, u'i18n')):
|
||||||
os.makedirs(os.path.join(dist_path, u'i18n'))
|
os.makedirs(os.path.join(dist_path, u'i18n'))
|
||||||
@ -221,6 +230,7 @@ def main():
|
|||||||
copy_enchant()
|
copy_enchant()
|
||||||
copy_plugins()
|
copy_plugins()
|
||||||
copy_windows_files()
|
copy_windows_files()
|
||||||
|
update_translations()
|
||||||
compile_translations()
|
compile_translations()
|
||||||
run_innosetup()
|
run_innosetup()
|
||||||
print "Done."
|
print "Done."
|
||||||
|
Loading…
Reference in New Issue
Block a user