This commit is contained in:
Jonathan Corwin 2010-08-30 20:07:54 +01:00
commit 3ea9ed2643
21 changed files with 301 additions and 244 deletions

View File

@ -229,7 +229,7 @@ def context_menu_separator(base):
def image_to_byte(image): def image_to_byte(image):
""" """
Resize an image to fit on the current screen for the web and retuns Resize an image to fit on the current screen for the web and returns
it as a byte stream. it as a byte stream.
``image`` ``image``
@ -253,12 +253,16 @@ def resize_image(image, width, height, background=QtCore.Qt.black):
``image`` ``image``
The image to resize. The image to resize.
``width`` ``width``
The new image width. The new image width.
``height`` ``height``
The new image height. The new image height.
``background ``
``background``
The background colour defaults to black. The background colour defaults to black.
""" """
preview = QtGui.QImage(image) preview = QtGui.QImage(image)
if not preview.isNull(): if not preview.isNull():

View File

@ -253,7 +253,7 @@ Therefore one table for text, one for outline and one for shadow.
</html> </html>
""" """
def build_html(item, screen, alert): def build_html(item, screen, alert, islive):
""" """
Build the full web paged structure for display Build the full web paged structure for display
@ -274,11 +274,11 @@ def build_html(item, screen, alert):
html = HTMLSRC % (width, height, html = HTMLSRC % (width, height,
build_alert(alert, width), build_alert(alert, width),
build_footer(item), build_footer(item),
build_lyrics(item), build_lyrics(item, islive),
image) image)
return html return html
def build_lyrics(item): def build_lyrics(item, islive):
""" """
Build the video display div Build the video display div
@ -307,10 +307,10 @@ td.fadeout { opacity: 0; }
transition = u'' transition = u''
if theme: if theme:
lyricscommon = u'width: %spx; height: %spx; word-wrap: break-word; ' \ lyricscommon = u'width: %spx; height: %spx; word-wrap: break-word; ' \
u'font-family: %s; font-size: %spx; color: %s; line-height: %d%%;' % \ u'font-family: %s; font-size: %spt; color: %s; line-height: %d%%;' \
(item.main.width(), item.main.height(), % (item.main.width(), item.main.height(), theme.font_main_name,
theme.font_main_name, theme.font_main_proportion, theme.font_main_proportion, theme.font_main_color,
theme.font_main_color, 100 + int(theme.font_main_line_adjustment)) 100 + int(theme.font_main_line_adjustment))
lyricstable = u'left: %spx; top: %spx;' % \ lyricstable = u'left: %spx; top: %spx;' % \
(item.main.x(), item.main.y()) (item.main.x(), item.main.y())
outlinetable = u'left: %spx; top: %spx;' % \ outlinetable = u'left: %spx; top: %spx;' % \
@ -319,7 +319,7 @@ td.fadeout { opacity: 0; }
(item.main.x() + float(theme.display_shadow_size), (item.main.x() + float(theme.display_shadow_size),
item.main.y() + float(theme.display_shadow_size)) item.main.y() + float(theme.display_shadow_size))
align = u'' align = u''
if theme.display_slideTransition: if theme.display_slideTransition and islive:
transition = u'-webkit-transition: opacity 5s ease-in-out;' transition = u'-webkit-transition: opacity 5s ease-in-out;'
if theme.display_horizontalAlign == 2: if theme.display_horizontalAlign == 2:
align = u'text-align:center;' align = u'text-align:center;'
@ -341,7 +341,7 @@ td.fadeout { opacity: 0; }
theme.display_outline_color) theme.display_outline_color)
if theme.display_shadow: if theme.display_shadow:
shadow = u'-webkit-text-stroke: %sem %s; ' \ shadow = u'-webkit-text-stroke: %sem %s; ' \
u'-webkit-text-fill-color: %s; '% \ u'-webkit-text-fill-color: %s; ' % \
(float(theme.display_outline_size) / 16, (float(theme.display_outline_size) / 16,
theme.display_shadow_color, theme.display_shadow_color) theme.display_shadow_color, theme.display_shadow_color)
else: else:
@ -364,7 +364,7 @@ top: %spx;
width: %spx; width: %spx;
height: %spx; height: %spx;
font-family: %s; font-family: %s;
font-size: %spx; font-size: %spt;
color: %s; color: %s;
text-align: %s; text-align: %s;
""" """
@ -393,7 +393,7 @@ def build_alert(alertTab, width):
width: %s; width: %s;
vertical-align: %s; vertical-align: %s;
font-family: %s; font-family: %s;
font-size: %spx; font-size: %spt;
color: %s; color: %s;
background-color: %s; background-color: %s;
""" """

View File

@ -200,7 +200,7 @@ class RenderManager(object):
serviceItem.raw_footer = footer serviceItem.raw_footer = footer
serviceItem.render(True) serviceItem.render(True)
self.display.buildHtml(serviceItem) self.display.buildHtml(serviceItem)
frame, raw_html = serviceItem.get_rendered_frame(0) raw_html = serviceItem.get_rendered_frame(0)[1]
preview = self.display.text(raw_html) preview = self.display.text(raw_html)
# Reset the real screen size for subsequent render requests # Reset the real screen size for subsequent render requests
self.calculate_default(self.screens.current[u'size']) self.calculate_default(self.screens.current[u'size'])

View File

@ -204,7 +204,7 @@ class Theme(object):
val = element_text val = element_text
if (element.tag.find(u'Color') > 0 or if (element.tag.find(u'Color') > 0 or
(element.tag.find(u'BackgroundParameter') == 0 and (element.tag.find(u'BackgroundParameter') == 0 and
isinstance(int, val))): isinstance(val, int))):
# convert to a wx.Colour # convert to a wx.Colour
if not delphi_color_change: if not delphi_color_change:
val = QtGui.QColor( val = QtGui.QColor(

View File

@ -41,7 +41,6 @@ from PyQt4 import QtCore, QtGui
from openlp.core.lib import html_expands, translate, context_menu_action from openlp.core.lib import html_expands, translate, context_menu_action
class SpellTextEdit(QtGui.QPlainTextEdit): class SpellTextEdit(QtGui.QPlainTextEdit):
def __init__(self, *args): def __init__(self, *args):
QtGui.QPlainTextEdit.__init__(self, *args) QtGui.QPlainTextEdit.__init__(self, *args)
# Default dictionary based on the current locale. # Default dictionary based on the current locale.
@ -54,18 +53,17 @@ class SpellTextEdit(QtGui.QPlainTextEdit):
if event.button() == QtCore.Qt.RightButton: if event.button() == QtCore.Qt.RightButton:
# Rewrite the mouse event to a left button event so the cursor is # Rewrite the mouse event to a left button event so the cursor is
# moved to the location of the pointer. # moved to the location of the pointer.
event = QtGui.QMouseEvent(QtCore.QEvent.MouseButtonPress, event.pos(), event = QtGui.QMouseEvent(QtCore.QEvent.MouseButtonPress,
QtCore.Qt.LeftButton, QtCore.Qt.LeftButton, QtCore.Qt.NoModifier) event.pos(), QtCore.Qt.LeftButton, QtCore.Qt.LeftButton,
QtCore.Qt.NoModifier)
QtGui.QPlainTextEdit.mousePressEvent(self, event) QtGui.QPlainTextEdit.mousePressEvent(self, event)
def contextMenuEvent(self, event): def contextMenuEvent(self, event):
popup_menu = self.createStandardContextMenu() popup_menu = self.createStandardContextMenu()
# Select the word under the cursor. # Select the word under the cursor.
cursor = self.textCursor() cursor = self.textCursor()
cursor.select(QtGui.QTextCursor.WordUnderCursor) cursor.select(QtGui.QTextCursor.WordUnderCursor)
self.setTextCursor(cursor) self.setTextCursor(cursor)
# Check if the selected word is misspelled and offer spelling # Check if the selected word is misspelled and offer spelling
# suggestions if it is. # suggestions if it is.
if enchant_available and self.textCursor().hasSelection(): if enchant_available and self.textCursor().hasSelection():
@ -94,9 +92,9 @@ class SpellTextEdit(QtGui.QPlainTextEdit):
popup_menu.exec_(event.globalPos()) popup_menu.exec_(event.globalPos())
def correctWord(self, word): def correctWord(self, word):
''' """
Replaces the selected text with word. Replaces the selected text with word.
''' """
cursor = self.textCursor() cursor = self.textCursor()
cursor.beginEditBlock() cursor.beginEditBlock()
@ -106,9 +104,9 @@ class SpellTextEdit(QtGui.QPlainTextEdit):
cursor.endEditBlock() cursor.endEditBlock()
def htmlTag(self, tag): def htmlTag(self, tag):
''' """
Replaces the selected text with word. Replaces the selected text with word.
''' """
for html in html_expands: for html in html_expands:
if tag == html[u'desc']: if tag == html[u'desc']:
cursor = self.textCursor() cursor = self.textCursor()
@ -153,9 +151,9 @@ class Highlighter(QtGui.QSyntaxHighlighter):
word_object.end() - word_object.start(), format) word_object.end() - word_object.start(), format)
class SpellAction(QtGui.QAction): class SpellAction(QtGui.QAction):
''' """
A special QAction that returns the text in a signal. A special QAction that returns the text in a signal.
''' """
correct = QtCore.pyqtSignal(unicode) correct = QtCore.pyqtSignal(unicode)
def __init__(self, *args): def __init__(self, *args):

View File

@ -31,7 +31,7 @@ from PyQt4 import QtCore, QtGui, QtWebKit
from PyQt4.phonon import Phonon from PyQt4.phonon import Phonon
from openlp.core.lib import Receiver, resize_image, build_html, ServiceItem, \ from openlp.core.lib import Receiver, resize_image, build_html, ServiceItem, \
image_to_byte image_to_byte
from openlp.core.ui import HideMode from openlp.core.ui import HideMode
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@ -58,6 +58,9 @@ class DisplayWidget(QtGui.QGraphicsView):
self.setStyleSheet(u'border: none;') self.setStyleSheet(u'border: none;')
def keyPressEvent(self, event): def keyPressEvent(self, event):
"""
Handle key events from display screen
"""
# Key events only needed for live # Key events only needed for live
if not self.live: if not self.live:
return return
@ -104,6 +107,9 @@ class MainDisplay(DisplayWidget):
QtCore.SIGNAL(u'maindisplay_show'), self.showDisplay) QtCore.SIGNAL(u'maindisplay_show'), self.showDisplay)
def setup(self): def setup(self):
"""
Set up and build the output screen
"""
log.debug(u'Setup live = %s for %s ' % (self.isLive, log.debug(u'Setup live = %s for %s ' % (self.isLive,
self.screens.monitor_number)) self.screens.monitor_number))
self.screen = self.screens.current self.screen = self.screens.current
@ -146,12 +152,12 @@ class MainDisplay(DisplayWidget):
splash_image) splash_image)
serviceItem = ServiceItem() serviceItem = ServiceItem()
serviceItem.bg_frame = initialFrame serviceItem.bg_frame = initialFrame
self.webView.setHtml(build_html(serviceItem, self.screen, \ self.webView.setHtml(build_html(serviceItem, self.screen,
self.parent.alertTab)) self.parent.alertTab, self.isLive))
self.initialFrame = True self.initialFrame = True
self.show()
# To display or not to display? # To display or not to display?
if not self.screen[u'primary']: if not self.screen[u'primary']:
self.show()
self.primary = False self.primary = False
else: else:
self.primary = True self.primary = True
@ -291,13 +297,14 @@ class MainDisplay(DisplayWidget):
Generates a preview of the image displayed. Generates a preview of the image displayed.
""" """
log.debug(u'preview for %s', self.isLive) log.debug(u'preview for %s', self.isLive)
# Wait for the fade to finish before geting the preview. if self.isLive:
# Important otherwise preview will have incorrect text if at all ! # Wait for the fade to finish before geting the preview.
if self.serviceItem.themedata and \ # Important otherwise preview will have incorrect text if at all !
self.serviceItem.themedata.display_slideTransition: if self.serviceItem.themedata and \
while self.frame.evaluateJavaScript(u'show_text_complete()') \ self.serviceItem.themedata.display_slideTransition:
.toString() == u'false': while self.frame.evaluateJavaScript(u'show_text_complete()') \
Receiver.send_message(u'openlp_process_events') .toString() == u'false':
Receiver.send_message(u'openlp_process_events')
# Wait for the webview to update before geting the preview. # Wait for the webview to update before geting the preview.
# Important otherwise first preview will miss the background ! # Important otherwise first preview will miss the background !
while not self.loaded: while not self.loaded:
@ -326,12 +333,16 @@ class MainDisplay(DisplayWidget):
self.loaded = False self.loaded = False
self.initialFrame = False self.initialFrame = False
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.webView.setHtml(html) self.webView.setHtml(html)
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)
def footer(self, text): def footer(self, text):
"""
Display the Footer
"""
log.debug(u'footer') log.debug(u'footer')
js = "show_footer('" + \ js = "show_footer('" + \
text.replace("\\", "\\\\").replace("\'", "\\\'") + "')" text.replace("\\", "\\\\").replace("\'", "\\\'") + "')"

View File

@ -94,8 +94,10 @@ class Ui_MainWindow(object):
self.ControlSplitter.setObjectName(u'ControlSplitter') self.ControlSplitter.setObjectName(u'ControlSplitter')
self.MainContentLayout.addWidget(self.ControlSplitter) self.MainContentLayout.addWidget(self.ControlSplitter)
# Create slide controllers # Create slide controllers
self.PreviewController = SlideController(self, self.settingsmanager, self.screens) self.PreviewController = SlideController(self, self.settingsmanager,
self.LiveController = SlideController(self, self.settingsmanager, self.screens, True) self.screens)
self.LiveController = SlideController(self, self.settingsmanager,
self.screens, True)
# Create menu # Create menu
self.MenuBar = QtGui.QMenuBar(MainWindow) self.MenuBar = QtGui.QMenuBar(MainWindow)
self.MenuBar.setGeometry(QtCore.QRect(0, 0, 1087, 27)) self.MenuBar.setGeometry(QtCore.QRect(0, 0, 1087, 27))

View File

@ -117,7 +117,8 @@ class SlideController(QtGui.QWidget):
self.split = 1 self.split = 1
self.typePrefix = u'live' self.typePrefix = u'live'
else: else:
self.TypeLabel.setText(translate('OpenLP.SlideController', 'Preview')) self.TypeLabel.setText(translate('OpenLP.SlideController',
'Preview'))
self.split = 0 self.split = 0
self.typePrefix = u'preview' self.typePrefix = u'preview'
self.TypeLabel.setStyleSheet(u'font-weight: bold; font-size: 12pt;') self.TypeLabel.setStyleSheet(u'font-weight: bold; font-size: 12pt;')
@ -199,7 +200,8 @@ class SlideController(QtGui.QWidget):
QtCore.SIGNAL("triggered(bool)"), self.onThemeDisplay) QtCore.SIGNAL("triggered(bool)"), self.onThemeDisplay)
if self.screens.display_count > 1: if self.screens.display_count > 1:
self.DesktopScreen = QtGui.QAction(QtGui.QIcon( self.DesktopScreen = QtGui.QAction(QtGui.QIcon(
u':/slides/slide_desktop.png'), u'Show Desktop', self.HideMenu) u':/slides/slide_desktop.png'), u'Show Desktop',
self.HideMenu)
self.DesktopScreen.setCheckable(True) self.DesktopScreen.setCheckable(True)
QtCore.QObject.connect(self.DesktopScreen, QtCore.QObject.connect(self.DesktopScreen,
QtCore.SIGNAL("triggered(bool)"), self.onHideDisplay) QtCore.SIGNAL("triggered(bool)"), self.onHideDisplay)
@ -212,7 +214,8 @@ class SlideController(QtGui.QWidget):
self.Toolbar.addToolbarSeparator(u'Close Separator') self.Toolbar.addToolbarSeparator(u'Close Separator')
self.Toolbar.addToolbarButton( self.Toolbar.addToolbarButton(
u'Go Live', u':/general/general_live.png', u'Go Live', u':/general/general_live.png',
translate('OpenLP.SlideController', 'Move to live'), self.onGoLive) translate('OpenLP.SlideController', 'Move to live'),
self.onGoLive)
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',
@ -233,7 +236,8 @@ class SlideController(QtGui.QWidget):
self.DelaySpinBox.setMaximum(180) self.DelaySpinBox.setMaximum(180)
self.Toolbar.addToolbarWidget( self.Toolbar.addToolbarWidget(
u'Image SpinBox', self.DelaySpinBox) u'Image SpinBox', self.DelaySpinBox)
self.DelaySpinBox.setSuffix(translate('OpenLP.SlideController', 's')) self.DelaySpinBox.setSuffix(translate('OpenLP.SlideController',
's'))
self.DelaySpinBox.setToolTip(translate('OpenLP.SlideController', self.DelaySpinBox.setToolTip(translate('OpenLP.SlideController',
'Delay between slides in seconds')) 'Delay between slides in seconds'))
self.ControllerLayout.addWidget(self.Toolbar) self.ControllerLayout.addWidget(self.Toolbar)
@ -274,11 +278,13 @@ class SlideController(QtGui.QWidget):
# Build the Song Toolbar # Build the Song Toolbar
if isLive: if isLive:
self.SongMenu = QtGui.QToolButton(self.Toolbar) self.SongMenu = QtGui.QToolButton(self.Toolbar)
self.SongMenu.setText(translate('OpenLP.SlideController', 'Go to Verse')) self.SongMenu.setText(translate('OpenLP.SlideController',
'Go to Verse'))
self.SongMenu.setPopupMode(QtGui.QToolButton.InstantPopup) self.SongMenu.setPopupMode(QtGui.QToolButton.InstantPopup)
self.Toolbar.addToolbarWidget(u'Song Menu', self.SongMenu) self.Toolbar.addToolbarWidget(u'Song Menu', self.SongMenu)
self.SongMenu.setMenu(QtGui.QMenu( self.SongMenu.setMenu(QtGui.QMenu(
translate('OpenLP.SlideController', 'Go to Verse'), self.Toolbar)) translate('OpenLP.SlideController', 'Go to Verse'),
self.Toolbar))
self.Toolbar.makeWidgetsInvisible([u'Song Menu']) self.Toolbar.makeWidgetsInvisible([u'Song Menu'])
# Screen preview area # Screen preview area
self.PreviewFrame = QtGui.QFrame(self.Splitter) self.PreviewFrame = QtGui.QFrame(self.Splitter)
@ -317,7 +323,7 @@ class SlideController(QtGui.QWidget):
self.SlidePreview.setSizePolicy(sizePolicy) self.SlidePreview.setSizePolicy(sizePolicy)
self.SlidePreview.setFixedSize( self.SlidePreview.setFixedSize(
QtCore.QSize(self.settingsmanager.slidecontroller_image, QtCore.QSize(self.settingsmanager.slidecontroller_image,
self.settingsmanager.slidecontroller_image / self.ratio )) self.settingsmanager.slidecontroller_image / self.ratio))
self.SlidePreview.setFrameShape(QtGui.QFrame.Box) self.SlidePreview.setFrameShape(QtGui.QFrame.Box)
self.SlidePreview.setFrameShadow(QtGui.QFrame.Plain) self.SlidePreview.setFrameShadow(QtGui.QFrame.Plain)
self.SlidePreview.setLineWidth(1) self.SlidePreview.setLineWidth(1)
@ -404,7 +410,7 @@ class SlideController(QtGui.QWidget):
self.display.setup() self.display.setup()
self.SlidePreview.setFixedSize( self.SlidePreview.setFixedSize(
QtCore.QSize(self.settingsmanager.slidecontroller_image, QtCore.QSize(self.settingsmanager.slidecontroller_image,
self.settingsmanager.slidecontroller_image / self.ratio )) self.settingsmanager.slidecontroller_image / self.ratio))
def widthChanged(self): def widthChanged(self):
""" """

View File

@ -139,13 +139,13 @@ class ThemeManager(QtGui.QWidget):
""" """
log.debug(u'changeGlobalFromTab %s', themeName) log.debug(u'changeGlobalFromTab %s', themeName)
for count in range (0, self.themeListWidget.count()): for count in range (0, self.themeListWidget.count()):
#reset the old name # reset the old name
item = self.themeListWidget.item(count) item = self.themeListWidget.item(count)
oldName = item.text() oldName = item.text()
newName = unicode(item.data(QtCore.Qt.UserRole).toString()) newName = unicode(item.data(QtCore.Qt.UserRole).toString())
if oldName != newName: if oldName != newName:
self.themeListWidget.item(count).setText(newName) self.themeListWidget.item(count).setText(newName)
#Set the new name # Set the new name
if themeName == newName: if themeName == newName:
name = unicode(translate('OpenLP.ThemeManager', name = unicode(translate('OpenLP.ThemeManager',
'%s (default)')) % newName '%s (default)')) % newName
@ -161,11 +161,11 @@ class ThemeManager(QtGui.QWidget):
for count in range (0, self.themeListWidget.count()): for count in range (0, self.themeListWidget.count()):
item = self.themeListWidget.item(count) item = self.themeListWidget.item(count)
oldName = item.text() oldName = item.text()
#reset the old name # reset the old name
if oldName != unicode(item.data(QtCore.Qt.UserRole).toString()): if oldName != unicode(item.data(QtCore.Qt.UserRole).toString()):
self.themeListWidget.item(count).setText( self.themeListWidget.item(count).setText(
unicode(item.data(QtCore.Qt.UserRole).toString())) unicode(item.data(QtCore.Qt.UserRole).toString()))
#Set the new name # Set the new name
if count == selected_row: if count == selected_row:
self.global_theme = unicode( self.global_theme = unicode(
self.themeListWidget.item(count).text()) self.themeListWidget.item(count).text())
@ -295,7 +295,7 @@ class ThemeManager(QtGui.QWidget):
path = unicode(path) path = unicode(path)
if path: if path:
SettingsManager.set_last_dir(self.settingsSection, path, 1) SettingsManager.set_last_dir(self.settingsSection, path, 1)
themePath = os.path.join(path, theme + u'.thz') themePath = os.path.join(path, theme + u'.otz')
zip = None zip = None
try: try:
zip = zipfile.ZipFile(themePath, u'w') zip = zipfile.ZipFile(themePath, u'w')
@ -346,11 +346,10 @@ class ThemeManager(QtGui.QWidget):
log.debug(u'Load themes from dir') log.debug(u'Load themes from dir')
self.themelist = [] self.themelist = []
self.themeListWidget.clear() self.themeListWidget.clear()
#root, dirs, files = os.walk(self.path)
dirList = os.listdir(self.path) dirList = os.listdir(self.path)
for name in dirList: for name in dirList:
if name.endswith(u'.png'): if name.endswith(u'.png'):
#check to see file is in theme root directory # check to see file is in theme root directory
theme = os.path.join(self.path, name) theme = os.path.join(self.path, name)
if os.path.exists(theme): if os.path.exists(theme):
textName = os.path.splitext(name)[0] textName = os.path.splitext(name)[0]
@ -731,8 +730,6 @@ class ThemeManager(QtGui.QWidget):
theme.display_slideTransition = theme.display_slideTransition theme.display_slideTransition = theme.display_slideTransition
theme.font_footer_color = theme.font_footer_color.strip() theme.font_footer_color = theme.font_footer_color.strip()
theme.font_footer_height = int(theme.font_footer_height.strip()) theme.font_footer_height = int(theme.font_footer_height.strip())
# theme.font_footer_indentation = \
# int(theme.font_footer_indentation.strip())
theme.font_footer_italics = str_to_bool(theme.font_footer_italics) theme.font_footer_italics = str_to_bool(theme.font_footer_italics)
theme.font_footer_name = theme.font_footer_name.strip() theme.font_footer_name = theme.font_footer_name.strip()
#theme.font_footer_override #theme.font_footer_override
@ -745,7 +742,6 @@ class ThemeManager(QtGui.QWidget):
theme.font_main_color = theme.font_main_color.strip() theme.font_main_color = theme.font_main_color.strip()
theme.font_main_height = int(theme.font_main_height.strip()) theme.font_main_height = int(theme.font_main_height.strip())
theme.font_main_italics = str_to_bool(theme.font_main_italics) theme.font_main_italics = str_to_bool(theme.font_main_italics)
# theme.font_main_indentation = int(theme.font_main_indentation)
theme.font_main_name = theme.font_main_name.strip() theme.font_main_name = theme.font_main_name.strip()
#theme.font_main_override #theme.font_main_override
theme.font_main_proportion = int(theme.font_main_proportion.strip()) theme.font_main_proportion = int(theme.font_main_proportion.strip())

View File

@ -83,7 +83,7 @@ class AlertsPlugin(Plugin):
self.liveController.alertTab = self.alertsTab self.liveController.alertTab = self.alertsTab
def finalise(self): def finalise(self):
log.info(u'Alerts Finaliseing') log.info(u'Alerts Finalising')
Plugin.finalise(self) Plugin.finalise(self)
self.toolsAlertItem.setVisible(False) self.toolsAlertItem.setVisible(False)

View File

@ -465,9 +465,9 @@ class BibleMediaItem(MediaManagerItem):
self.displayResults(bible, dual_bible) self.displayResults(bible, dual_bible)
def generateSlideData(self, service_item, item=None): def generateSlideData(self, service_item, item=None):
''' """
Generates and formats the slides for the service item. Generates and formats the slides for the service item.
''' """
log.debug(u'generating slide data') log.debug(u'generating slide data')
items = self.listView.selectedIndexes() items = self.listView.selectedIndexes()
if len(items) == 0: if len(items) == 0:
@ -551,7 +551,8 @@ class BibleMediaItem(MediaManagerItem):
if isinstance(reference, QtCore.QVariant): if isinstance(reference, QtCore.QVariant):
reference = reference.toPyObject() reference = reference.toPyObject()
bible_new = self._decodeQtObject(reference, 'bible') bible_new = self._decodeQtObject(reference, 'bible')
dual_bible_new = self._decodeQtObject(reference, 'dual_bible') dual_bible_new = self._decodeQtObject(reference,
'dual_bible')
if dual_bible_new: if dual_bible_new:
raw_slides.append(bible_text) raw_slides.append(bible_text)
bible_text = u'' bible_text = u''
@ -639,10 +640,10 @@ class BibleMediaItem(MediaManagerItem):
combo.addItem(unicode(i)) combo.addItem(unicode(i))
def displayResults(self, bible, dual_bible=None): def displayResults(self, bible, dual_bible=None):
''' """
Displays the search results in the media manager. All data needed for further Displays the search results in the media manager. All data needed for
action is saved for/in each row. further action is saved for/in each row.
''' """
version = self.parent.manager.get_meta_data(bible, u'Version') version = self.parent.manager.get_meta_data(bible, u'Version')
copyright = self.parent.manager.get_meta_data(bible, u'Copyright') copyright = self.parent.manager.get_meta_data(bible, u'Copyright')
#permission = self.parent.manager.get_meta_data(bible, u'Permissions') #permission = self.parent.manager.get_meta_data(bible, u'Permissions')

View File

@ -263,8 +263,8 @@ class Ui_EditSongDialog(object):
self.SongbookLayout.setSpacing(8) self.SongbookLayout.setSpacing(8)
self.SongbookLayout.setObjectName(u'SongbookLayout') self.SongbookLayout.setObjectName(u'SongbookLayout')
self.SongbookCombo = QtGui.QComboBox(self.SongBookGroup) self.SongbookCombo = QtGui.QComboBox(self.SongBookGroup)
sizePolicy = QtGui.QSizePolicy( sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding,
QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.Fixed) QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0) sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0) sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth( sizePolicy.setHeightForWidth(
@ -273,6 +273,12 @@ class Ui_EditSongDialog(object):
self.SongbookCombo.setSizePolicy(sizePolicy) self.SongbookCombo.setSizePolicy(sizePolicy)
self.SongbookCombo.setObjectName(u'SongbookCombo') self.SongbookCombo.setObjectName(u'SongbookCombo')
self.SongbookLayout.addWidget(self.SongbookCombo, 0, 0, 1, 1) self.SongbookLayout.addWidget(self.SongbookCombo, 0, 0, 1, 1)
self.songBookNumberLabel = QtGui.QLabel(self.SongBookGroup)
self.SongbookLayout.addWidget(self.songBookNumberLabel, 0, 1, 1, 1)
self.songBookNumberEdit = QtGui.QLineEdit(self.SongBookGroup)
self.songBookNumberLabel.setBuddy(self.songBookNumberEdit)
self.songBookNumberEdit.setMaximumWidth(35)
self.SongbookLayout.addWidget(self.songBookNumberEdit, 0, 2, 1, 1)
self.TopicBookLayout.addWidget(self.SongBookGroup) self.TopicBookLayout.addWidget(self.SongBookGroup)
self.AuthorsTabLayout.addWidget(self.TopicBookWidget) self.AuthorsTabLayout.addWidget(self.TopicBookWidget)
self.SongTabWidget.addTab(self.AuthorsTab, u'') self.SongTabWidget.addTab(self.AuthorsTab, u'')
@ -440,6 +446,8 @@ class Ui_EditSongDialog(object):
translate('SongsPlugin.EditSongForm', 'R&emove')) translate('SongsPlugin.EditSongForm', 'R&emove'))
self.SongBookGroup.setTitle( self.SongBookGroup.setTitle(
translate('SongsPlugin.EditSongForm', 'Song Book')) translate('SongsPlugin.EditSongForm', 'Song Book'))
self.songBookNumberLabel.setText(translate('SongsPlugin.EditSongForm',
'Song No.:'))
self.SongTabWidget.setTabText( self.SongTabWidget.setTabText(
self.SongTabWidget.indexOf(self.AuthorsTab), self.SongTabWidget.indexOf(self.AuthorsTab),
translate('SongsPlugin.EditSongForm', translate('SongsPlugin.EditSongForm',

View File

@ -49,6 +49,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
""" """
QtGui.QDialog.__init__(self, parent) QtGui.QDialog.__init__(self, parent)
self.parent = parent self.parent = parent
self.song = None
# can this be automated? # can this be automated?
self.width = 400 self.width = 400
self.setupUi(self) self.setupUi(self)
@ -83,10 +84,6 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
QtCore.QObject.connect(self.VerseListWidget, QtCore.QObject.connect(self.VerseListWidget,
QtCore.SIGNAL(u'itemClicked(QTableWidgetItem*)'), QtCore.SIGNAL(u'itemClicked(QTableWidgetItem*)'),
self.onVerseListViewPressed) self.onVerseListViewPressed)
QtCore.QObject.connect(self.SongbookCombo,
QtCore.SIGNAL(u'activated(int)'), self.onSongBookComboChanged)
QtCore.QObject.connect(self.ThemeSelectionComboItem,
QtCore.SIGNAL(u'activated(int)'), self.onThemeComboChanged)
QtCore.QObject.connect(self.ThemeAddButton, QtCore.QObject.connect(self.ThemeAddButton,
QtCore.SIGNAL(u'clicked()'), QtCore.SIGNAL(u'clicked()'),
self.parent.parent.renderManager.theme_manager.onAddTheme) self.parent.parent.renderManager.theme_manager.onAddTheme)
@ -157,7 +154,6 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
def newSong(self): def newSong(self):
log.debug(u'New Song') log.debug(u'New Song')
self.SongTabWidget.setCurrentIndex(0) self.SongTabWidget.setCurrentIndex(0)
self.song = Song()
self.TitleEditItem.setText(u'') self.TitleEditItem.setText(u'')
self.AlternativeEdit.setText(u'') self.AlternativeEdit.setText(u'')
self.CopyrightEditItem.setText(u'') self.CopyrightEditItem.setText(u'')
@ -298,8 +294,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
else: else:
author = Author.populate(first_name=text.rsplit(u' ', 1)[0], author = Author.populate(first_name=text.rsplit(u' ', 1)[0],
last_name=text.rsplit(u' ', 1)[1], display_name=text) last_name=text.rsplit(u' ', 1)[1], display_name=text)
self.songmanager.save_object(author, False) self.songmanager.save_object(author)
self.song.authors.append(author)
author_item = QtGui.QListWidgetItem( author_item = QtGui.QListWidgetItem(
unicode(author.display_name)) unicode(author.display_name))
author_item.setData(QtCore.Qt.UserRole, author_item.setData(QtCore.Qt.UserRole,
@ -312,13 +307,13 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
elif item > 0: elif item > 0:
item_id = (self.AuthorsSelectionComboItem.itemData(item)).toInt()[0] item_id = (self.AuthorsSelectionComboItem.itemData(item)).toInt()[0]
author = self.songmanager.get_object(Author, item_id) author = self.songmanager.get_object(Author, item_id)
if author in self.song.authors: if self.AuthorsListView.findItems(unicode(author.display_name),
QtCore.Qt.MatchExactly):
QtGui.QMessageBox.warning(self, QtGui.QMessageBox.warning(self,
translate('SongsPlugin.EditSongForm', 'Error'), translate('SongsPlugin.EditSongForm', 'Error'),
translate('SongsPlugin.EditSongForm', 'This author is ' translate('SongsPlugin.EditSongForm', 'This author is '
'already in the list.')) 'already in the list.'))
else: else:
self.song.authors.append(author)
author_item = QtGui.QListWidgetItem(unicode( author_item = QtGui.QListWidgetItem(unicode(
author.display_name)) author.display_name))
author_item.setData(QtCore.Qt.UserRole, author_item.setData(QtCore.Qt.UserRole,
@ -340,9 +335,6 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
def onAuthorRemoveButtonClicked(self): def onAuthorRemoveButtonClicked(self):
self.AuthorRemoveButton.setEnabled(False) self.AuthorRemoveButton.setEnabled(False)
item = self.AuthorsListView.currentItem() item = self.AuthorsListView.currentItem()
author_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
author = self.songmanager.get_object(Author, author_id)
self.song.authors.remove(author)
row = self.AuthorsListView.row(item) row = self.AuthorsListView.row(item)
self.AuthorsListView.takeItem(row) self.AuthorsListView.takeItem(row)
@ -357,8 +349,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.Yes | QtGui.QMessageBox.No,
QtGui.QMessageBox.Yes) == QtGui.QMessageBox.Yes: QtGui.QMessageBox.Yes) == QtGui.QMessageBox.Yes:
topic = Topic.populate(name=text) topic = Topic.populate(name=text)
self.songmanager.save_object(topic, False) self.songmanager.save_object(topic)
self.song.topics.append(topic)
topic_item = QtGui.QListWidgetItem(unicode(topic.name)) topic_item = QtGui.QListWidgetItem(unicode(topic.name))
topic_item.setData(QtCore.Qt.UserRole, topic_item.setData(QtCore.Qt.UserRole,
QtCore.QVariant(topic.id)) QtCore.QVariant(topic.id))
@ -370,13 +361,13 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
elif item > 0: elif item > 0:
item_id = (self.SongTopicCombo.itemData(item)).toInt()[0] item_id = (self.SongTopicCombo.itemData(item)).toInt()[0]
topic = self.songmanager.get_object(Topic, item_id) topic = self.songmanager.get_object(Topic, item_id)
if topic in self.song.topics: if self.TopicsListView.findItems(unicode(topic.name),
QtCore.Qt.MatchExactly):
QtGui.QMessageBox.warning(self, QtGui.QMessageBox.warning(self,
translate('SongsPlugin.EditSongForm', 'Error'), translate('SongsPlugin.EditSongForm', 'Error'),
translate('SongsPlugin.EditSongForm', 'This topic is ' translate('SongsPlugin.EditSongForm', 'This topic is '
'already in the list.')) 'already in the list.'))
else: else:
self.song.topics.append(topic)
topic_item = QtGui.QListWidgetItem(unicode(topic.name)) topic_item = QtGui.QListWidgetItem(unicode(topic.name))
topic_item.setData(QtCore.Qt.UserRole, topic_item.setData(QtCore.Qt.UserRole,
QtCore.QVariant(topic.id)) QtCore.QVariant(topic.id))
@ -396,27 +387,9 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
def onTopicRemoveButtonClicked(self): def onTopicRemoveButtonClicked(self):
self.TopicRemoveButton.setEnabled(False) self.TopicRemoveButton.setEnabled(False)
item = self.TopicsListView.currentItem() item = self.TopicsListView.currentItem()
topic_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
topic = self.songmanager.get_object(Topic, topic_id)
self.song.topics.remove(topic)
row = self.TopicsListView.row(item) row = self.TopicsListView.row(item)
self.TopicsListView.takeItem(row) self.TopicsListView.takeItem(row)
def onSongBookComboChanged(self, item):
if item >= 1:
self.song.song_book_id = \
(self.SongbookCombo.itemData(item)).toInt()[0]
else:
self.song.song_book_id = 0
def onThemeComboChanged(self, item):
if item == 0:
# None means no Theme
self.song.theme_name = None
else:
them_name = unicode(self.ThemeSelectionComboItem.itemText(item))
self.song.theme_name = them_name
def onVerseListViewPressed(self): def onVerseListViewPressed(self):
self.VerseEditButton.setEnabled(True) self.VerseEditButton.setEnabled(True)
self.VerseDeleteButton.setEnabled(True) self.VerseDeleteButton.setEnabled(True)
@ -602,10 +575,17 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
self.CopyrightEditItem.setCursorPosition(pos + 1) self.CopyrightEditItem.setCursorPosition(pos + 1)
def onMaintenanceButtonClicked(self): def onMaintenanceButtonClicked(self):
temp_song_book = None
item = int(self.SongbookCombo.currentIndex())
text = unicode(self.SongbookCombo.currentText())
if item == 0 and text:
temp_song_book = text
self.parent.song_maintenance_form.exec_() self.parent.song_maintenance_form.exec_()
self.loadAuthors() self.loadAuthors()
self.loadBooks() self.loadBooks()
self.loadTopics() self.loadTopics()
if temp_song_book:
self.SongbookCombo.setEditText(temp_song_book)
def onPreview(self, button): def onPreview(self, button):
""" """
@ -622,6 +602,8 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
def accept(self): def accept(self):
log.debug(u'accept') log.debug(u'accept')
if not self.song:
self.song = Song()
item = int(self.SongbookCombo.currentIndex()) item = int(self.SongbookCombo.currentIndex())
text = unicode(self.SongbookCombo.currentText()) text = unicode(self.SongbookCombo.currentText())
if item == 0 and text: if item == 0 and text:
@ -634,7 +616,6 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
book = Book.populate(name=text, publisher=u'') book = Book.populate(name=text, publisher=u'')
self.songmanager.save_object(book) self.songmanager.save_object(book)
self.song.book = book self.song.book = book
self.loadBooks()
else: else:
return return
if self.saveSong(): if self.saveSong():
@ -650,9 +631,22 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
self.song.comments = unicode(self.CommentsEdit.toPlainText()) self.song.comments = unicode(self.CommentsEdit.toPlainText())
self.song.verse_order = unicode(self.VerseOrderEdit.text()) self.song.verse_order = unicode(self.VerseOrderEdit.text())
self.song.ccli_number = unicode(self.CCLNumberEdit.text()) self.song.ccli_number = unicode(self.CCLNumberEdit.text())
self.song.song_number = unicode(self.songBookNumberEdit.text())
if self._validate_song(): if self._validate_song():
self.processLyrics() self.processLyrics()
self.processTitle() self.processTitle()
self.song.authors = []
for row in range(self.AuthorsListView.count()):
item = self.AuthorsListView.item(row)
authorId = (item.data(QtCore.Qt.UserRole)).toInt()[0]
self.song.authors.append(self.songmanager.get_object(Author,
authorId))
self.song.topics = []
for row in range(self.TopicsListView.count()):
item = self.TopicsListView.item(row)
topicId = (item.data(QtCore.Qt.UserRole)).toInt()[0]
self.song.topics.append(self.songmanager.get_object(Topic,
topicId))
self.songmanager.save_object(self.song) self.songmanager.save_object(self.song)
return True return True
return False return False
@ -684,5 +678,5 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
def processTitle(self): def processTitle(self):
log.debug(u'processTitle') log.debug(u'processTitle')
self.song.search_title = \ self.song.search_title = re.sub(r'[\'"`,;:(){}?]+', u'',
re.sub(r'[\'"`,;:(){}?]+', u'', unicode(self.song.search_title)) unicode(self.song.search_title))

View File

@ -31,77 +31,78 @@ from openlp.core.ui import SpellTextEdit
from openlp.plugins.songs.lib import VerseType from openlp.plugins.songs.lib import VerseType
class Ui_EditVerseDialog(object): class Ui_EditVerseDialog(object):
def setupUi(self, EditVerseDialog): def setupUi(self, editVerseDialog):
EditVerseDialog.setObjectName(u'EditVerseDialog') editVerseDialog.setObjectName(u'editVerseDialog')
EditVerseDialog.resize(474, 442) editVerseDialog.resize(474, 442)
EditVerseDialog.setModal(True) editVerseDialog.setModal(True)
self.EditVerseLayout = QtGui.QVBoxLayout(EditVerseDialog) self.editVerseLayout = QtGui.QVBoxLayout(editVerseDialog)
self.EditVerseLayout.setSpacing(8) self.editVerseLayout.setSpacing(8)
self.EditVerseLayout.setMargin(8) self.editVerseLayout.setMargin(8)
self.EditVerseLayout.setObjectName(u'EditVerseLayout') self.editVerseLayout.setObjectName(u'editVerseLayout')
self.VerseTextEdit = SpellTextEdit(EditVerseDialog) self.verseTextEdit = SpellTextEdit(editVerseDialog)
self.VerseTextEdit.setObjectName(u'VerseTextEdit') self.verseTextEdit.setObjectName(u'verseTextEdit')
self.EditVerseLayout.addWidget(self.VerseTextEdit) self.editVerseLayout.addWidget(self.verseTextEdit)
self.VerseTypeLayout = QtGui.QHBoxLayout() self.verseTypeLayout = QtGui.QHBoxLayout()
self.VerseTypeLayout.setSpacing(8) self.verseTypeLayout.setSpacing(8)
self.VerseTypeLayout.setObjectName(u'VerseTypeLayout') self.verseTypeLayout.setObjectName(u'verseTypeLayout')
self.VerseTypeLabel = QtGui.QLabel(EditVerseDialog) self.verseTypeLabel = QtGui.QLabel(editVerseDialog)
self.VerseTypeLabel.setObjectName(u'VerseTypeLabel') self.verseTypeLabel.setObjectName(u'verseTypeLabel')
self.VerseTypeLayout.addWidget(self.VerseTypeLabel) self.verseTypeLayout.addWidget(self.verseTypeLabel)
self.VerseTypeComboBox = QtGui.QComboBox(EditVerseDialog) self.verseTypeComboBox = QtGui.QComboBox(editVerseDialog)
self.VerseTypeComboBox.setObjectName(u'VerseTypeComboBox') self.verseTypeComboBox.setObjectName(u'verseTypeComboBox')
self.VerseTypeComboBox.addItem(u'') self.verseTypeLabel.setBuddy(self.verseTypeComboBox)
self.VerseTypeComboBox.addItem(u'') self.verseTypeComboBox.addItem(u'')
self.VerseTypeComboBox.addItem(u'') self.verseTypeComboBox.addItem(u'')
self.VerseTypeComboBox.addItem(u'') self.verseTypeComboBox.addItem(u'')
self.VerseTypeComboBox.addItem(u'') self.verseTypeComboBox.addItem(u'')
self.VerseTypeComboBox.addItem(u'') self.verseTypeComboBox.addItem(u'')
self.VerseTypeComboBox.addItem(u'') self.verseTypeComboBox.addItem(u'')
self.VerseTypeLayout.addWidget(self.VerseTypeComboBox) self.verseTypeComboBox.addItem(u'')
self.VerseNumberBox = QtGui.QSpinBox(EditVerseDialog) self.verseTypeLayout.addWidget(self.verseTypeComboBox)
self.VerseNumberBox.setMinimum(1) self.verseNumberBox = QtGui.QSpinBox(editVerseDialog)
self.VerseNumberBox.setObjectName(u'VerseNumberBox') self.verseNumberBox.setMinimum(1)
self.VerseTypeLayout.addWidget(self.VerseNumberBox) self.verseNumberBox.setObjectName(u'verseNumberBox')
self.InsertButton = QtGui.QPushButton(EditVerseDialog) self.verseTypeLayout.addWidget(self.verseNumberBox)
self.InsertButton.setIcon(build_icon(u':/general/general_add.png')) self.insertButton = QtGui.QPushButton(editVerseDialog)
self.InsertButton.setObjectName(u'InsertButton') self.insertButton.setIcon(build_icon(u':/general/general_add.png'))
self.VerseTypeLayout.addWidget(self.InsertButton) self.insertButton.setObjectName(u'insertButton')
self.VerseTypeSpacer = QtGui.QSpacerItem(40, 20, self.verseTypeLayout.addWidget(self.insertButton)
self.verseTypeSpacer = QtGui.QSpacerItem(40, 20,
QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
self.VerseTypeLayout.addItem(self.VerseTypeSpacer) self.verseTypeLayout.addItem(self.verseTypeSpacer)
self.EditVerseLayout.addLayout(self.VerseTypeLayout) self.editVerseLayout.addLayout(self.verseTypeLayout)
self.EditButtonBox = QtGui.QDialogButtonBox(EditVerseDialog) self.editButtonBox = QtGui.QDialogButtonBox(editVerseDialog)
self.EditButtonBox.setOrientation(QtCore.Qt.Horizontal) self.editButtonBox.setOrientation(QtCore.Qt.Horizontal)
self.EditButtonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel | self.editButtonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel |
QtGui.QDialogButtonBox.Save) QtGui.QDialogButtonBox.Save)
self.EditButtonBox.setObjectName(u'EditButtonBox') self.editButtonBox.setObjectName(u'editButtonBox')
self.EditVerseLayout.addWidget(self.EditButtonBox) self.editVerseLayout.addWidget(self.editButtonBox)
self.retranslateUi(EditVerseDialog) self.retranslateUi(editVerseDialog)
QtCore.QObject.connect(self.EditButtonBox, QtCore.SIGNAL(u'accepted()'), QtCore.QObject.connect(self.editButtonBox, QtCore.SIGNAL(u'accepted()'),
EditVerseDialog.accept) editVerseDialog.accept)
QtCore.QObject.connect(self.EditButtonBox, QtCore.SIGNAL(u'rejected()'), QtCore.QObject.connect(self.editButtonBox, QtCore.SIGNAL(u'rejected()'),
EditVerseDialog.reject) editVerseDialog.reject)
QtCore.QMetaObject.connectSlotsByName(EditVerseDialog) QtCore.QMetaObject.connectSlotsByName(editVerseDialog)
def retranslateUi(self, EditVerseDialog): def retranslateUi(self, editVerseDialog):
EditVerseDialog.setWindowTitle( editVerseDialog.setWindowTitle(
translate('SongsPlugin.EditVerseForm', 'Edit Verse')) translate('SongsPlugin.EditVerseForm', 'Edit Verse'))
self.VerseTypeLabel.setText( self.verseTypeLabel.setText(
translate('SongsPlugin.EditVerseForm', '&Verse type:')) translate('SongsPlugin.EditVerseForm', '&Verse type:'))
self.VerseTypeComboBox.setItemText(0, self.verseTypeComboBox.setItemText(0,
VerseType.to_string(VerseType.Verse)) VerseType.to_string(VerseType.Verse))
self.VerseTypeComboBox.setItemText(1, self.verseTypeComboBox.setItemText(1,
VerseType.to_string(VerseType.Chorus)) VerseType.to_string(VerseType.Chorus))
self.VerseTypeComboBox.setItemText(2, self.verseTypeComboBox.setItemText(2,
VerseType.to_string(VerseType.Bridge)) VerseType.to_string(VerseType.Bridge))
self.VerseTypeComboBox.setItemText(3, self.verseTypeComboBox.setItemText(3,
VerseType.to_string(VerseType.PreChorus)) VerseType.to_string(VerseType.PreChorus))
self.VerseTypeComboBox.setItemText(4, self.verseTypeComboBox.setItemText(4,
VerseType.to_string(VerseType.Intro)) VerseType.to_string(VerseType.Intro))
self.VerseTypeComboBox.setItemText(5, self.verseTypeComboBox.setItemText(5,
VerseType.to_string(VerseType.Ending)) VerseType.to_string(VerseType.Ending))
self.VerseTypeComboBox.setItemText(6, self.verseTypeComboBox.setItemText(6,
VerseType.to_string(VerseType.Other)) VerseType.to_string(VerseType.Other))
self.InsertButton.setText( self.insertButton.setText(
translate('SongsPlugin.EditVerseForm', '&Insert')) translate('SongsPlugin.EditVerseForm', '&Insert'))

View File

@ -45,19 +45,14 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog):
""" """
QtGui.QDialog.__init__(self, parent) QtGui.QDialog.__init__(self, parent)
self.setupUi(self) self.setupUi(self)
QtCore.QObject.connect(self.VerseTextEdit, QtCore.QObject.connect(self.verseTextEdit,
QtCore.SIGNAL('customContextMenuRequested(QPoint)'), QtCore.SIGNAL('customContextMenuRequested(QPoint)'),
self.contextMenu) self.contextMenu)
QtCore.QObject.connect( QtCore.QObject.connect(self.insertButton, QtCore.SIGNAL(u'clicked()'),
self.InsertButton, self.onInsertButtonClicked)
QtCore.SIGNAL(u'clicked()'), QtCore.QObject.connect(self.verseTextEdit,
self.onInsertButtonClicked
)
QtCore.QObject.connect(
self.VerseTextEdit,
QtCore.SIGNAL(u'cursorPositionChanged()'), QtCore.SIGNAL(u'cursorPositionChanged()'),
self.onCursorPositionChanged self.onCursorPositionChanged)
)
self.verse_regex = re.compile(r'---\[([-\w]+):([\d]+)\]---') self.verse_regex = re.compile(r'---\[([-\w]+):([\d]+)\]---')
def contextMenu(self, point): def contextMenu(self, point):
@ -65,21 +60,21 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog):
print item print item
def insertVerse(self, title, num=1): def insertVerse(self, title, num=1):
if self.VerseTextEdit.textCursor().columnNumber() != 0: if self.verseTextEdit.textCursor().columnNumber() != 0:
self.VerseTextEdit.insertPlainText(u'\n') self.verseTextEdit.insertPlainText(u'\n')
self.VerseTextEdit.insertPlainText(u'---[%s:%s]---\n' % (title, num)) self.verseTextEdit.insertPlainText(u'---[%s:%s]---\n' % (title, num))
self.VerseTextEdit.setFocus() self.verseTextEdit.setFocus()
def onInsertButtonClicked(self): def onInsertButtonClicked(self):
if self.VerseTextEdit.textCursor().columnNumber() != 0: if self.verseTextEdit.textCursor().columnNumber() != 0:
self.VerseTextEdit.insertPlainText(u'\n') self.verseTextEdit.insertPlainText(u'\n')
verse_type = self.VerseTypeComboBox.currentIndex() verse_type = self.verseTypeComboBox.currentIndex()
if verse_type == VerseType.Verse: if verse_type == VerseType.Verse:
self.insertVerse(VerseType.to_string(VerseType.Verse), self.insertVerse(VerseType.to_string(VerseType.Verse),
self.VerseNumberBox.value()) self.verseNumberBox.value())
elif verse_type == VerseType.Chorus: elif verse_type == VerseType.Chorus:
self.insertVerse(VerseType.to_string(VerseType.Chorus), self.insertVerse(VerseType.to_string(VerseType.Chorus),
self.VerseNumberBox.value()) self.verseNumberBox.value())
elif verse_type == VerseType.Bridge: elif verse_type == VerseType.Bridge:
self.insertVerse(VerseType.to_string(VerseType.Bridge)) self.insertVerse(VerseType.to_string(VerseType.Bridge))
elif verse_type == VerseType.PreChorus: elif verse_type == VerseType.PreChorus:
@ -92,12 +87,12 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog):
self.insertVerse(VerseType.to_string(VerseType.Other)) self.insertVerse(VerseType.to_string(VerseType.Other))
def onCursorPositionChanged(self): def onCursorPositionChanged(self):
position = self.VerseTextEdit.textCursor().position() position = self.verseTextEdit.textCursor().position()
text = unicode(self.VerseTextEdit.toPlainText()) text = unicode(self.verseTextEdit.toPlainText())
if not text: if not text:
return return
if text.rfind(u'[', 0, position) > text.rfind(u']', 0, position) and \ if text.rfind(u'[', 0, position) > text.rfind(u']', 0, position) and \
text.find(u']', position) < text.find(u'[', position): text.find(u']', position) < text.find(u'[', position):
return return
position = text.rfind(u'---[', 0, position) position = text.rfind(u'---[', 0, position)
if position == -1: if position == -1:
@ -113,8 +108,8 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog):
verse_number = int(match.group(2)) verse_number = int(match.group(2))
verse_type_index = VerseType.from_string(verse_type) verse_type_index = VerseType.from_string(verse_type)
if verse_type_index is not None: if verse_type_index is not None:
self.VerseTypeComboBox.setCurrentIndex(verse_type_index) self.verseTypeComboBox.setCurrentIndex(verse_type_index)
self.VerseNumberBox.setValue(verse_number) self.verseNumberBox.setValue(verse_number)
def setVerse(self, text, single=False, def setVerse(self, text, single=False,
tag=u'%s:1' % VerseType.to_string(VerseType.Verse)): tag=u'%s:1' % VerseType.to_string(VerseType.Verse)):
@ -122,26 +117,26 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog):
verse_type, verse_number = tag.split(u':') verse_type, verse_number = tag.split(u':')
verse_type_index = VerseType.from_string(verse_type) verse_type_index = VerseType.from_string(verse_type)
if verse_type_index is not None: if verse_type_index is not None:
self.VerseTypeComboBox.setCurrentIndex(verse_type_index) self.verseTypeComboBox.setCurrentIndex(verse_type_index)
self.VerseNumberBox.setValue(int(verse_number)) self.verseNumberBox.setValue(int(verse_number))
self.InsertButton.setVisible(False) self.insertButton.setVisible(False)
else: else:
if not text: if not text:
text = u'---[%s:1]---\n' % VerseType.to_string(VerseType.Verse) text = u'---[%s:1]---\n' % VerseType.to_string(VerseType.Verse)
self.VerseTypeComboBox.setCurrentIndex(0) self.verseTypeComboBox.setCurrentIndex(0)
self.VerseNumberBox.setValue(1) self.verseNumberBox.setValue(1)
self.InsertButton.setVisible(True) self.insertButton.setVisible(True)
self.VerseTextEdit.setPlainText(text) self.verseTextEdit.setPlainText(text)
self.VerseTextEdit.setFocus(QtCore.Qt.OtherFocusReason) self.verseTextEdit.setFocus(QtCore.Qt.OtherFocusReason)
self.VerseTextEdit.moveCursor(QtGui.QTextCursor.End) self.verseTextEdit.moveCursor(QtGui.QTextCursor.End)
def getVerse(self): def getVerse(self):
return self.VerseTextEdit.toPlainText(), \ return self.verseTextEdit.toPlainText(), \
VerseType.to_string(self.VerseTypeComboBox.currentIndex()), \ VerseType.to_string(self.verseTypeComboBox.currentIndex()), \
unicode(self.VerseNumberBox.value()) unicode(self.verseNumberBox.value())
def getVerseAll(self): def getVerseAll(self):
text = self.VerseTextEdit.toPlainText() text = self.verseTextEdit.toPlainText()
if not text.startsWith(u'---['): if not text.startsWith(u'---['):
text = u'---[%s:1]---\n%s' % (VerseType.to_string(VerseType.Verse), text = u'---[%s:1]---\n%s' % (VerseType.to_string(VerseType.Verse),
text) text)

View File

@ -302,8 +302,8 @@ class ImportWizardForm(QtGui.QWizard, Ui_SongImportWizard):
Stop the import on pressing the cancel button. Stop the import on pressing the cancel button.
""" """
log.debug('Cancel button pressed!') log.debug('Cancel button pressed!')
if self.currentId() == 3: if self.currentId() == 2:
Receiver.send_message(u'song_stop_import') Receiver.send_message(u'songs_stop_import')
def onCurrentIdChanged(self, id): def onCurrentIdChanged(self, id):
if id == 2: if id == 2:

View File

@ -215,25 +215,32 @@ class Ui_SongImportWizard(object):
self.wordsOfWorshipLayout.setSpacing(8) self.wordsOfWorshipLayout.setSpacing(8)
self.wordsOfWorshipLayout.setMargin(0) self.wordsOfWorshipLayout.setMargin(0)
self.wordsOfWorshipLayout.setObjectName(u'wordsOfWorshipLayout') self.wordsOfWorshipLayout.setObjectName(u'wordsOfWorshipLayout')
self.wordsOfWorshipFileListWidget = QtGui.QListWidget(self.wordsOfWorshipPage) self.wordsOfWorshipFileListWidget = QtGui.QListWidget(
self.wordsOfWorshipPage)
self.wordsOfWorshipFileListWidget.setSelectionMode( self.wordsOfWorshipFileListWidget.setSelectionMode(
QtGui.QAbstractItemView.ExtendedSelection) QtGui.QAbstractItemView.ExtendedSelection)
self.wordsOfWorshipFileListWidget.setObjectName(u'wordsOfWorshipFileListWidget') self.wordsOfWorshipFileListWidget.setObjectName(
u'wordsOfWorshipFileListWidget')
self.wordsOfWorshipLayout.addWidget(self.wordsOfWorshipFileListWidget) self.wordsOfWorshipLayout.addWidget(self.wordsOfWorshipFileListWidget)
self.wordsOfWorshipButtonLayout = QtGui.QHBoxLayout() self.wordsOfWorshipButtonLayout = QtGui.QHBoxLayout()
self.wordsOfWorshipButtonLayout.setSpacing(8) self.wordsOfWorshipButtonLayout.setSpacing(8)
self.wordsOfWorshipButtonLayout.setObjectName(u'wordsOfWorshipButtonLayout') self.wordsOfWorshipButtonLayout.setObjectName(
self.wordsOfWorshipAddButton = QtGui.QPushButton(self.wordsOfWorshipPage) u'wordsOfWorshipButtonLayout')
self.wordsOfWorshipAddButton = QtGui.QPushButton(
self.wordsOfWorshipPage)
self.wordsOfWorshipAddButton.setIcon(openIcon) self.wordsOfWorshipAddButton.setIcon(openIcon)
self.wordsOfWorshipAddButton.setObjectName(u'wordsOfWorshipAddButton') self.wordsOfWorshipAddButton.setObjectName(u'wordsOfWorshipAddButton')
self.wordsOfWorshipButtonLayout.addWidget(self.wordsOfWorshipAddButton) self.wordsOfWorshipButtonLayout.addWidget(self.wordsOfWorshipAddButton)
self.wordsOfWorshipButtonSpacer = QtGui.QSpacerItem(40, 20, self.wordsOfWorshipButtonSpacer = QtGui.QSpacerItem(40, 20,
QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
self.wordsOfWorshipButtonLayout.addItem(self.wordsOfWorshipButtonSpacer) self.wordsOfWorshipButtonLayout.addItem(self.wordsOfWorshipButtonSpacer)
self.wordsOfWorshipRemoveButton = QtGui.QPushButton(self.wordsOfWorshipPage) self.wordsOfWorshipRemoveButton = QtGui.QPushButton(
self.wordsOfWorshipPage)
self.wordsOfWorshipRemoveButton.setIcon(deleteIcon) self.wordsOfWorshipRemoveButton.setIcon(deleteIcon)
self.wordsOfWorshipRemoveButton.setObjectName(u'wordsOfWorshipRemoveButton') self.wordsOfWorshipRemoveButton.setObjectName(
self.wordsOfWorshipButtonLayout.addWidget(self.wordsOfWorshipRemoveButton) u'wordsOfWorshipRemoveButton')
self.wordsOfWorshipButtonLayout.addWidget(
self.wordsOfWorshipRemoveButton)
self.wordsOfWorshipLayout.addLayout(self.wordsOfWorshipButtonLayout) self.wordsOfWorshipLayout.addLayout(self.wordsOfWorshipButtonLayout)
self.formatStackedWidget.addWidget(self.wordsOfWorshipPage) self.formatStackedWidget.addWidget(self.wordsOfWorshipPage)
# CCLI File import # CCLI File import
@ -267,30 +274,43 @@ class Ui_SongImportWizard(object):
# Songs of Fellowship # Songs of Fellowship
self.songsOfFellowshipPage = QtGui.QWidget() self.songsOfFellowshipPage = QtGui.QWidget()
self.songsOfFellowshipPage.setObjectName(u'songsOfFellowshipPage') self.songsOfFellowshipPage.setObjectName(u'songsOfFellowshipPage')
self.songsOfFellowshipLayout = QtGui.QVBoxLayout(self.songsOfFellowshipPage) self.songsOfFellowshipLayout = QtGui.QVBoxLayout(
self.songsOfFellowshipPage)
self.songsOfFellowshipLayout.setMargin(0) self.songsOfFellowshipLayout.setMargin(0)
self.songsOfFellowshipLayout.setSpacing(8) self.songsOfFellowshipLayout.setSpacing(8)
self.songsOfFellowshipLayout.setObjectName(u'songsOfFellowshipLayout') self.songsOfFellowshipLayout.setObjectName(u'songsOfFellowshipLayout')
self.songsOfFellowshipFileListWidget = QtGui.QListWidget(self.songsOfFellowshipPage) self.songsOfFellowshipFileListWidget = QtGui.QListWidget(
self.songsOfFellowshipPage)
self.songsOfFellowshipFileListWidget.setSelectionMode( self.songsOfFellowshipFileListWidget.setSelectionMode(
QtGui.QAbstractItemView.ExtendedSelection) QtGui.QAbstractItemView.ExtendedSelection)
self.songsOfFellowshipFileListWidget.setObjectName(u'songsOfFellowshipFileListWidget') self.songsOfFellowshipFileListWidget.setObjectName(
self.songsOfFellowshipLayout.addWidget(self.songsOfFellowshipFileListWidget) u'songsOfFellowshipFileListWidget')
self.songsOfFellowshipLayout.addWidget(
self.songsOfFellowshipFileListWidget)
self.songsOfFellowshipButtonLayout = QtGui.QHBoxLayout() self.songsOfFellowshipButtonLayout = QtGui.QHBoxLayout()
self.songsOfFellowshipButtonLayout.setSpacing(8) self.songsOfFellowshipButtonLayout.setSpacing(8)
self.songsOfFellowshipButtonLayout.setObjectName(u'songsOfFellowshipButtonLayout') self.songsOfFellowshipButtonLayout.setObjectName(
self.songsOfFellowshipAddButton = QtGui.QPushButton(self.songsOfFellowshipPage) u'songsOfFellowshipButtonLayout')
self.songsOfFellowshipAddButton = QtGui.QPushButton(
self.songsOfFellowshipPage)
self.songsOfFellowshipAddButton.setIcon(openIcon) self.songsOfFellowshipAddButton.setIcon(openIcon)
self.songsOfFellowshipAddButton.setObjectName(u'songsOfFellowshipAddButton') self.songsOfFellowshipAddButton.setObjectName(
self.songsOfFellowshipButtonLayout.addWidget(self.songsOfFellowshipAddButton) u'songsOfFellowshipAddButton')
self.songsOfFellowshipButtonLayout.addWidget(
self.songsOfFellowshipAddButton)
self.songsOfFellowshipButtonSpacer = QtGui.QSpacerItem(40, 20, self.songsOfFellowshipButtonSpacer = QtGui.QSpacerItem(40, 20,
QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
self.songsOfFellowshipButtonLayout.addItem(self.songsOfFellowshipButtonSpacer) self.songsOfFellowshipButtonLayout.addItem(
self.songsOfFellowshipRemoveButton = QtGui.QPushButton(self.songsOfFellowshipPage) self.songsOfFellowshipButtonSpacer)
self.songsOfFellowshipRemoveButton = QtGui.QPushButton(
self.songsOfFellowshipPage)
self.songsOfFellowshipRemoveButton.setIcon(deleteIcon) self.songsOfFellowshipRemoveButton.setIcon(deleteIcon)
self.songsOfFellowshipRemoveButton.setObjectName(u'songsOfFellowshipRemoveButton') self.songsOfFellowshipRemoveButton.setObjectName(
self.songsOfFellowshipButtonLayout.addWidget(self.songsOfFellowshipRemoveButton) u'songsOfFellowshipRemoveButton')
self.songsOfFellowshipLayout.addLayout(self.songsOfFellowshipButtonLayout) self.songsOfFellowshipButtonLayout.addWidget(
self.songsOfFellowshipRemoveButton)
self.songsOfFellowshipLayout.addLayout(
self.songsOfFellowshipButtonLayout)
self.formatStackedWidget.addWidget(self.songsOfFellowshipPage) self.formatStackedWidget.addWidget(self.songsOfFellowshipPage)
# Generic Document/Presentation import # Generic Document/Presentation import
self.genericPage = QtGui.QWidget() self.genericPage = QtGui.QWidget()

View File

@ -404,12 +404,12 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog):
book.publisher = temp_publisher book.publisher = temp_publisher
def mergeAuthors(self, old_author): def mergeAuthors(self, old_author):
''' """
Merges two authors into one author. Merges two authors into one author.
``old_author`` ``old_author``
The author which will be deleted afterwards. The author which will be deleted afterwards.
''' """
existing_author = self.songmanager.get_object_filtered(Author, existing_author = self.songmanager.get_object_filtered(Author,
and_(Author.first_name == old_author.first_name, and_(Author.first_name == old_author.first_name,
Author.last_name == old_author.last_name, Author.last_name == old_author.last_name,
@ -426,12 +426,12 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog):
self.songmanager.delete_object(Author, old_author.id) self.songmanager.delete_object(Author, old_author.id)
def mergeTopics(self, old_topic): def mergeTopics(self, old_topic):
''' """
Merges two topics into one topic. Merges two topics into one topic.
``old_topic`` ``old_topic``
The topic which will be deleted afterwards. The topic which will be deleted afterwards.
''' """
existing_topic = self.songmanager.get_object_filtered(Topic, existing_topic = self.songmanager.get_object_filtered(Topic,
Topic.name == old_topic.name) Topic.name == old_topic.name)
songs = self.songmanager.get_all_objects(Song, songs = self.songmanager.get_all_objects(Song,
@ -446,12 +446,12 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog):
self.songmanager.delete_object(Topic, old_topic.id) self.songmanager.delete_object(Topic, old_topic.id)
def mergeBooks(self, old_book): def mergeBooks(self, old_book):
''' """
Merges two books into one book. Merges two books into one book.
``old_book`` ``old_book``
The book which will be deleted afterwards. The book which will be deleted afterwards.
''' """
existing_book = self.songmanager.get_object_filtered(Book, existing_book = self.songmanager.get_object_filtered(Book,
and_(Book.name == old_book.name, and_(Book.name == old_book.name,
Book.publisher == old_book.publisher)) Book.publisher == old_book.publisher))

View File

@ -72,7 +72,7 @@ def init_schema(url):
``url`` ``url``
The database to setup The database to setup
""" """
session, metadata = init_db(url, auto_flush=False) session, metadata = init_db(url)
# Definition of the "authors" table # Definition of the "authors" table
authors_table = Table(u'authors', metadata, authors_table = Table(u'authors', metadata,

View File

@ -75,18 +75,17 @@ class OpenLPSongImport(SongImport):
The :class:`OpenLPSongImport` class provides OpenLP with the ability to The :class:`OpenLPSongImport` class provides OpenLP with the ability to
import song databases from other installations of OpenLP. import song databases from other installations of OpenLP.
""" """
def __init__(self, master_manager, **kwargs): def __init__(self, manager, **kwargs):
""" """
Initialise the import. Initialise the import.
``master_manager`` ``manager``
The song manager for the running OpenLP installation. The song manager for the running OpenLP installation.
``source_db`` ``source_db``
The database providing the data to import. The database providing the data to import.
""" """
SongImport.__init__(self, master_manager) SongImport.__init__(self, manager)
self.master_manager = master_manager
self.import_source = u'sqlite:///%s' % kwargs[u'filename'] self.import_source = u'sqlite:///%s' % kwargs[u'filename']
log.debug(self.import_source) log.debug(self.import_source)
self.source_session = None self.source_session = None
@ -145,7 +144,12 @@ class OpenLPSongImport(SongImport):
mapper(OldTopic, source_topics_table) mapper(OldTopic, source_topics_table)
source_songs = self.source_session.query(OldSong).all() source_songs = self.source_session.query(OldSong).all()
song_total = len(source_songs)
self.import_wizard.importProgressBar.setMaximum(song_total)
song_count = 1
for song in source_songs: for song in source_songs:
self.import_wizard.incrementProgressBar(
u'Importing song %s of %s' % (song_count, song_total))
new_song = Song() new_song = Song()
new_song.title = song.title new_song.title = song.title
if has_media_files: if has_media_files:
@ -167,7 +171,7 @@ class OpenLPSongImport(SongImport):
new_song.ccli_number = song.ccli_number new_song.ccli_number = song.ccli_number
if song.authors: if song.authors:
for author in song.authors: for author in song.authors:
existing_author = self.master_manager.get_object_filtered( existing_author = self.manager.get_object_filtered(
Author, Author.display_name == author.display_name) Author, Author.display_name == author.display_name)
if existing_author: if existing_author:
new_song.authors.append(existing_author) new_song.authors.append(existing_author)
@ -177,7 +181,7 @@ class OpenLPSongImport(SongImport):
last_name=author.last_name, last_name=author.last_name,
display_name=author.display_name)) display_name=author.display_name))
else: else:
au = self.master_manager.get_object_filtered(Author, au = self.manager.get_object_filtered(Author,
Author.display_name == u'Author Unknown') Author.display_name == u'Author Unknown')
if au: if au:
new_song.authors.append(au) new_song.authors.append(au)
@ -185,7 +189,7 @@ class OpenLPSongImport(SongImport):
new_song.authors.append(Author.populate( new_song.authors.append(Author.populate(
display_name=u'Author Unknown')) display_name=u'Author Unknown'))
if song.book: if song.book:
existing_song_book = self.master_manager.get_object_filtered( existing_song_book = self.manager.get_object_filtered(
Book, Book.name == song.book.name) Book, Book.name == song.book.name)
if existing_song_book: if existing_song_book:
new_song.book = existing_song_book new_song.book = existing_song_book
@ -194,7 +198,7 @@ class OpenLPSongImport(SongImport):
publisher=song.book.publisher) publisher=song.book.publisher)
if song.topics: if song.topics:
for topic in song.topics: for topic in song.topics:
existing_topic = self.master_manager.get_object_filtered( existing_topic = self.manager.get_object_filtered(
Topic, Topic.name == topic.name) Topic, Topic.name == topic.name)
if existing_topic: if existing_topic:
new_song.topics.append(existing_topic) new_song.topics.append(existing_topic)
@ -204,12 +208,16 @@ class OpenLPSongImport(SongImport):
# if song.media_files: # if song.media_files:
# for media_file in song.media_files: # for media_file in song.media_files:
# existing_media_file = \ # existing_media_file = \
# self.master_manager.get_object_filtered(MediaFile, # self.manager.get_object_filtered(MediaFile,
# MediaFile.file_name == media_file.file_name) # MediaFile.file_name == media_file.file_name)
# if existing_media_file: # if existing_media_file:
# new_song.media_files.append(existing_media_file) # new_song.media_files.append(existing_media_file)
# else: # else:
# new_song.media_files.append(MediaFile.populate( # new_song.media_files.append(MediaFile.populate(
# file_name=media_file.file_name)) # file_name=media_file.file_name))
self.master_manager.save_object(new_song) self.manager.save_object(new_song)
song_count += 1
if self.stop_import_flag:
return False
engine.dispose() engine.dispose()
return True

View File

@ -24,14 +24,18 @@
# Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Temple Place, Suite 330, Boston, MA 02111-1307 USA #
############################################################################### ###############################################################################
import logging
import re import re
from PyQt4 import QtCore
from openlp.core.lib import translate from openlp.core.lib import Receiver, translate
from openlp.plugins.songs.lib import VerseType from openlp.plugins.songs.lib import VerseType
from openlp.plugins.songs.lib.db import Song, Author, Topic, Book from openlp.plugins.songs.lib.db import Song, Author, Topic, Book
from openlp.plugins.songs.lib.xml import SongXMLBuilder from openlp.plugins.songs.lib.xml import SongXMLBuilder
class SongImport(object): log = logging.getLogger(__name__)
class SongImport(QtCore.QObject):
""" """
Helper class for import a song from a third party source into OpenLP Helper class for import a song from a third party source into OpenLP
@ -39,7 +43,6 @@ class SongImport(object):
whether the authors etc already exist and add them or refer to them whether the authors etc already exist and add them or refer to them
as necessary as necessary
""" """
def __init__(self, manager): def __init__(self, manager):
""" """
Initialise and create defaults for properties Initialise and create defaults for properties
@ -48,6 +51,7 @@ class SongImport(object):
database access is performed database access is performed
""" """
self.manager = manager self.manager = manager
self.stop_import_flag = False
self.title = u'' self.title = u''
self.song_number = u'' self.song_number = u''
self.alternate_title = u'' self.alternate_title = u''
@ -67,6 +71,15 @@ class SongImport(object):
'SongsPlugin.SongImport', 'copyright')) 'SongsPlugin.SongImport', 'copyright'))
self.copyright_symbol = unicode(translate( self.copyright_symbol = unicode(translate(
'SongsPlugin.SongImport', '\xa9')) 'SongsPlugin.SongImport', '\xa9'))
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'songs_stop_import'), self.stop_import)
def stop_import(self):
"""
Sets the flag for importers to stop their import
"""
log.debug(u'Stopping songs import')
self.stop_import_flag = True
def register(self, import_wizard): def register(self, import_wizard):
self.import_wizard = import_wizard self.import_wizard = import_wizard