Fix problems with last merger

This commit is contained in:
Tim Bentley 2009-09-03 18:46:46 +01:00
commit 06ab5df285
28 changed files with 313 additions and 249 deletions

View File

@ -49,14 +49,15 @@ class ListWithPreviews(QtCore.QAbstractListModel):
if preview is not None:
w = self.maximagewidth;
h = self.rowheight
preview = preview.scaled(w, h, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
preview = preview.scaled(w, h, QtCore.Qt.KeepAspectRatio,
QtCore.Qt.SmoothTransformation)
realw = preview.width();
realh = preview.height()
# and move it to the centre of the preview space
p = QtGui.QImage(w, h, QtGui.QImage.Format_ARGB32_Premultiplied)
p.fill(QtCore.Qt.transparent)
painter = QtGui.QPainter(p)
painter.drawImage((w-realw) / 2 , (h-realh) / 2, preview)
painter.drawImage((w-realw) / 2, (h-realh) / 2, preview)
else:
w = self.maximagewidth;
h = self.rowheight
@ -91,7 +92,8 @@ class ListWithPreviews(QtCore.QAbstractListModel):
def data(self, index, role):
row = index.row()
if row > len(self.items):
# if the last row is selected and deleted, we then get called with an empty row!
# If the last row is selected and deleted, we then get called
# with an empty row!
return QtCore.QVariant()
if role == QtCore.Qt.DisplayRole:
retval = self.items[row][2]

View File

@ -132,7 +132,7 @@ class PluginConfig(object):
list_count = 0
list = []
if list_count > 0:
for counter in range(0 , list_count):
for counter in range(0, list_count):
item = unicode(self.get_config(u'%s %d' % (name, counter)))
list.append(item)
return list

View File

@ -96,17 +96,20 @@ class Renderer(object):
preview = QtGui.QImage(self._bg_image_filename)
width = self._frame.width()
height = self._frame.height()
preview = preview.scaled(width, height, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
preview = preview.scaled(width, height, QtCore.Qt.KeepAspectRatio,
QtCore.Qt.SmoothTransformation)
realwidth = preview.width()
realheight = preview.height()
# and move it to the centre of the preview space
self.bg_image = QtGui.QImage(width, height, QtGui.QImage.Format_ARGB32_Premultiplied)
self.bg_image = QtGui.QImage(width, height,
QtGui.QImage.Format_ARGB32_Premultiplied)
self.bg_image.fill(QtCore.Qt.black)
painter = QtGui.QPainter()
painter.begin(self.bg_image)
self.background_offsetx = (width - realwidth) / 2
self.background_offsety = (height - realheight) / 2
painter.drawImage(self.background_offsetx, self.background_offsety, preview)
painter.drawImage(self.background_offsetx, self.background_offsety,
preview)
painter.end()
def set_frame_dest(self, frame_width, frame_height, preview=False):
@ -124,7 +127,8 @@ class Renderer(object):
"""
if preview == True:
self._bg_frame = None
log.debug(u'set frame dest (frame) w %d h %d', frame_width, frame_height)
log.debug(u'set frame dest (frame) w %d h %d', frame_width,
frame_height)
self._frame = QtGui.QImage(frame_width, frame_height,
QtGui.QImage.Format_ARGB32_Premultiplied)
if self._bg_image_filename is not None and self.bg_image is None:
@ -174,12 +178,12 @@ class Renderer(object):
split_lines = []
count = 0
for line in text:
#print "C", line , len(line)
#print "C", line, len(line)
#Must be a blank line so keep it.
if len(line) == 0:
line = u' '
while len(line) > 0:
# print "C1", line , len(line)
# print "C1", line, len(line)
if len(line) > ave_line_width:
pos = line.find(u' ', ave_line_width)
split_text = line[:pos]
@ -272,25 +276,30 @@ class Renderer(object):
painter.fillRect(self._frame.rect(), QtCore.Qt.transparent)
else:
if self._theme.background_type == u'solid':
painter.fillRect(self._frame.rect(), QtGui.QColor(self._theme.background_color))
painter.fillRect(self._frame.rect(),
QtGui.QColor(self._theme.background_color))
elif self._theme.background_type == u'gradient':
# gradient
gradient = None
if self._theme.background_direction == u'horizontal':
w = int(self._frame.width()) / 2
# vertical
gradient = QtGui.QLinearGradient(w, 0, w, self._frame.height())
gradient = QtGui.QLinearGradient(w, 0, w,
self._frame.height())
elif self._theme.background_direction == u'vertical':
h = int(self._frame.height()) / 2
# Horizontal
gradient = QtGui.QLinearGradient(0, h, self._frame.width(), h)
gradient = QtGui.QLinearGradient(0, h, self._frame.width(),
h)
else:
w = int(self._frame.width()) / 2
h = int(self._frame.height()) / 2
# Circular
gradient = QtGui.QRadialGradient(w, h, w)
gradient.setColorAt(0, QtGui.QColor(self._theme.background_startColor))
gradient.setColorAt(1, QtGui.QColor(self._theme.background_endColor))
gradient.setColorAt(0,
QtGui.QColor(self._theme.background_startColor))
gradient.setColorAt(1,
QtGui.QColor(self._theme.background_endColor))
painter.setBrush(QtGui.QBrush(gradient))
rectPath = QtGui.QPainterPath()
max_x = self._frame.width()
@ -305,10 +314,10 @@ class Renderer(object):
# image
painter.fillRect(self._frame.rect(), QtCore.Qt.black)
if self.bg_image is not None:
painter.drawImage(0 ,0 , self.bg_image)
painter.drawImage(0, 0, self.bg_image)
painter.end()
self._bg_frame_small = self._bg_frame.scaled(QtCore.QSize(280, 210), QtCore.Qt.KeepAspectRatio,
QtCore.Qt.SmoothTransformation)
self._bg_frame_small = self._bg_frame.scaled(QtCore.QSize(280, 210),
QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
log.debug(u'render background End')
def _correctAlignment(self, rect, bbox):
@ -335,7 +344,8 @@ class Renderer(object):
log.error(u'Invalid value for theme.VerticalAlign:%s' % self._theme.display_verticalAlign)
return x, y
def _render_lines_unaligned(self, lines, footer, tlcorner=(0, 0), live=False):
def _render_lines_unaligned(self, lines, footer, tlcorner=(0, 0),
live=False):
"""
Given a list of lines to render, render each one in turn (using the
``_render_single_line`` fn - which may result in going off the bottom).
@ -362,7 +372,8 @@ class Renderer(object):
for line in lines:
# render after current bottom, but at original left edge
# keep track of right edge to see which is biggest
(thisx, bry) = self._render_and_wrap_single_line(line, footer, (x, bry), live)
(thisx, bry) = self._render_and_wrap_single_line(line, footer,
(x, bry), live)
if (thisx > brx):
brx = thisx
retval = QtCore.QRect(x, y, brx - x, bry - y)
@ -374,7 +385,8 @@ class Renderer(object):
painter.end()
return retval
def _render_and_wrap_single_line(self, line, footer, tlcorner=(0, 0), live=False):
def _render_and_wrap_single_line(self, line, footer, tlcorner=(0, 0),
live=False):
"""
Render a single line of words onto the DC, top left corner specified.
If the line is too wide for the context, it wraps, but right-aligns
@ -414,7 +426,8 @@ class Renderer(object):
for linenum in range(len(lines)):
line = lines[linenum]
#find out how wide line is
w , h = self._get_extent_and_render(line, footer, tlcorner=(x, y), draw=False)
w, h = self._get_extent_and_render(line, footer, tlcorner=(x, y),
draw=False)
if self._theme.display_shadow:
w += shadow_offset
h += shadow_offset
@ -427,7 +440,8 @@ class Renderer(object):
rightextent = x + w
# shift right from last line's rh edge
if self._theme.display_wrapStyle == 1 and linenum != 0:
rightextent = self._first_line_right_extent + self._right_margin
rightextent = self._first_line_right_extent + \
self._right_margin
if rightextent > maxx:
rightextent = maxx
x = rightextent - w
@ -442,27 +456,41 @@ class Renderer(object):
if live:
# now draw the text, and any outlines/shadows
if self._theme.display_shadow:
self._get_extent_and_render(line, footer, tlcorner=(x + shadow_offset, y + shadow_offset),
self._get_extent_and_render(line, footer,
tlcorner=(x + shadow_offset, y + shadow_offset),
draw=True, color = self._theme.display_shadow_color)
if self._theme.display_outline:
self._get_extent_and_render(line, footer, (x+self._outline_offset,y), draw=True,
color = self._theme.display_outline_color)
self._get_extent_and_render(line, footer, (x, y+self._outline_offset), draw=True,
color = self._theme.display_outline_color)
self._get_extent_and_render(line, footer, (x, y-self._outline_offset), draw=True,
color = self._theme.display_outline_color)
self._get_extent_and_render(line, footer, (x-self._outline_offset,y), draw=True,
color = self._theme.display_outline_color)
self._get_extent_and_render(line, footer,
(x+self._outline_offset, y), draw=True,
color = self._theme.display_outline_color)
self._get_extent_and_render(line, footer,
(x, y+self._outline_offset), draw=True,
color = self._theme.display_outline_color)
self._get_extent_and_render(line, footer,
(x, y-self._outline_offset), draw=True,
color = self._theme.display_outline_color)
self._get_extent_and_render(line, footer,
(x-self._outline_offset, y), draw=True,
color = self._theme.display_outline_color)
if self._outline_offset > 1:
self._get_extent_and_render(line, footer, (x+self._outline_offset,y+self._outline_offset), draw=True,
self._get_extent_and_render(line, footer,
(x+self._outline_offset, y+self._outline_offset),
draw=True,
color = self._theme.display_outline_color)
self._get_extent_and_render(line, footer, (x-self._outline_offset,y+self._outline_offset), draw=True,
self._get_extent_and_render(line, footer,
(x-self._outline_offset, y+self._outline_offset),
draw=True,
color = self._theme.display_outline_color)
self._get_extent_and_render(line, footer, (x+self._outline_offset,y-self._outline_offset), draw=True,
self._get_extent_and_render(line, footer,
(x+self._outline_offset, y-self._outline_offset),
draw=True,
color = self._theme.display_outline_color)
self._get_extent_and_render(line, footer, (x-self._outline_offset,y-self._outline_offset), draw=True,
self._get_extent_and_render(line, footer,
(x-self._outline_offset, y-self._outline_offset),
draw=True,
color = self._theme.display_outline_color)
self._get_extent_and_render(line, footer,tlcorner=(x, y), draw=True)
self._get_extent_and_render(line, footer,tlcorner=(x, y),
draw=True)
y += h
if linenum == 0:
self._first_line_right_extent = rightextent
@ -471,9 +499,9 @@ class Renderer(object):
painter = QtGui.QPainter()
painter.begin(self._frame)
painter.setPen(QtGui.QPen(QtGui.QColor(0,255,0)))
painter.drawRect(startx , starty , rightextent-startx , y-starty)
painter.drawRect(startx, starty, rightextent-startx, y-starty)
painter.end()
brcorner = (rightextent , y)
brcorner = (rightextent, y)
return brcorner
def _set_theme_font(self):
@ -497,7 +525,8 @@ class Renderer(object):
self._theme.font_main_italics)# italic
self.mainFont.setPixelSize(int(self._theme.font_main_proportion))
def _get_extent_and_render(self, line, footer, tlcorner=(0, 0), draw=False, color=None):
def _get_extent_and_render(self, line, footer, tlcorner=(0, 0), draw=False,
color=None):
"""
Find bounding box of text - as render_single_line. If draw is set,
actually draw the text to the current DC as well return width and
@ -538,7 +567,7 @@ class Renderer(object):
w = metrics.width(line)
h = metrics.height() - 2
if draw:
painter.drawText(x, y + metrics.ascent() , line)
painter.drawText(x, y + metrics.ascent(), line)
painter.end()
return (w, h)

View File

@ -142,15 +142,19 @@ class RenderManager(object):
main_rect = None
footer_rect = None
if theme.font_main_override == False:
main_rect = QtCore.QRect(10,0, self.width - 1, self.footer_start - 20)
main_rect = QtCore.QRect(10, 0, self.width - 1,
self.footer_start - 20)
else:
main_rect = QtCore.QRect(int(theme.font_main_x) , int(theme.font_main_y),
int(theme.font_main_width)-1, int(theme.font_main_height) - 1)
main_rect = QtCore.QRect(int(theme.font_main_x),
int(theme.font_main_y), int(theme.font_main_width)-1,
int(theme.font_main_height) - 1)
if theme.font_footer_override == False:
footer_rect = QtCore.QRect(10,self.footer_start, self.width - 1, self.height-self.footer_start)
footer_rect = QtCore.QRect(10,self.footer_start, self.width - 1,
self.height-self.footer_start)
else:
footer_rect = QtCore.QRect(int(theme.font_footer_x),int(theme.font_footer_y),
int(theme.font_footer_width)-1, int(theme.font_footer_height) - 1)
footer_rect = QtCore.QRect(int(theme.font_footer_x),
int(theme.font_footer_y), int(theme.font_footer_width)-1,
int(theme.font_footer_height) - 1)
self.renderer.set_text_rectangle(main_rect, footer_rect)
def generate_preview(self, themedata):
@ -219,14 +223,15 @@ class RenderManager(object):
else:
w = width
h = height
preview = preview.scaled(w, h, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
preview = preview.scaled(w, h, QtCore.Qt.KeepAspectRatio,
QtCore.Qt.SmoothTransformation)
realw = preview.width();
realh = preview.height()
# and move it to the centre of the preview space
newImage = QtGui.QImage(w, h, QtGui.QImage.Format_ARGB32_Premultiplied)
newImage.fill(QtCore.Qt.transparent)
painter = QtGui.QPainter(newImage)
painter.drawImage((w-realw) / 2 , (h-realh) / 2, preview)
painter.drawImage((w-realw) / 2, (h-realh) / 2, preview)
return newImage
def calculate_default(self, screen):

View File

@ -92,13 +92,16 @@ class ServiceItem(object):
for slide in self.service_frames:
formated = self.RenderManager.format_slide(slide[u'raw_slide'])
for format in formated:
frame = self.RenderManager.generate_slide(format, self.raw_footer)
self.frames.append({u'title': slide[u'title'], u'image': frame})
frame = self.RenderManager.generate_slide(format,
self.raw_footer)
self.frames.append({u'title': slide[u'title'],
u'image': frame})
elif self.service_item_type == ServiceType.Command:
self.frames = self.service_frames
elif self.service_item_type == ServiceType.Image:
for slide in self.service_frames:
slide[u'image'] = self.RenderManager.resize_image(slide[u'image'])
slide[u'image'] = \
self.RenderManager.resize_image(slide[u'image'])
self.frames = self.service_frames
else:
log.error(u'Invalid value renderer :%s' % self.service_item_type)
@ -132,9 +135,10 @@ class ServiceItem(object):
"""
self.service_item_type = ServiceType.Text
frame_title = frame_title.split(u'\n')[0]
self.service_frames.append({u'title': frame_title, u'raw_slide': raw_slide})
self.service_frames.append({u'title': frame_title,
u'raw_slide': raw_slide})
def add_from_command(self, path , frame_title):
def add_from_command(self, path, frame_title):
"""
Add a slide from a command.

View File

@ -340,9 +340,10 @@ class ThemeXML(object):
for e in element.attrib.iteritems():
if master == u'font_' and e[0] == u'type':
master += e[1] + u'_'
elif master == u'display_' and (element.tag == u'shadow' or element.tag == u'outline'):
elif master == u'display_' and (element.tag == u'shadow' or
element.tag == u'outline'):
et = str_to_bool(element.text)
setattr(self, master + element.tag , et)
setattr(self, master + element.tag, et)
setattr(self, master + element.tag + u'_'+ e[0], e[1])
else:
field = master + e[0]

View File

@ -23,52 +23,60 @@ from openlp.core.lib import MediaManagerItem
class TestMediaManager:
def setup_class(self):
self.app = QtGui.QApplication([])
logging.info (u'App is " + unicode(self.app))
logging.info (u'App is ' + unicode(self.app))
self.main_window = QtGui.QMainWindow()
self.main_window.resize(200, 600)
self.MediaManagerDock = QtGui.QDockWidget(self.main_window)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding,
QtGui.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.MediaManagerDock.sizePolicy().hasHeightForWidth())
sizePolicy.setHeightForWidth(
self.MediaManagerDock.sizePolicy().hasHeightForWidth())
self.MediaManagerDock.setSizePolicy(sizePolicy)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(u':/system/system_mediamanager.png'), QtGui.QIcon.Normal, QtGui.QIcon.Off)
icon.addPixmap(QtGui.QPixmap(u':/system/system_mediamanager.png'),
QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.MediaManagerDock.setWindowIcon(icon)
self.MediaManagerDock.setFloating(False)
self.MediaManagerContents = QtGui.QWidget()
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding,
QtGui.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.MediaManagerContents.sizePolicy().hasHeightForWidth())
sizePolicy.setHeightForWidth(
self.MediaManagerContents.sizePolicy().hasHeightForWidth())
self.MediaManagerContents.setSizePolicy(sizePolicy)
self.MediaManagerLayout = QtGui.QHBoxLayout(self.MediaManagerContents)
self.MediaManagerLayout.setContentsMargins(0, 2, 0, 0)
self.MediaToolBox = QtGui.QToolBox(self.MediaManagerContents)
self.MediaManagerDock.setWidget(self.MediaManagerContents)
self.main_window.addDockWidget(QtCore.Qt.DockWidgetArea(1), self.MediaManagerDock)
self.main_window.addDockWidget(QtCore.Qt.DockWidgetArea(1),
self.MediaManagerDock)
self.MediaManagerLayout.addWidget(self.MediaToolBox)
def test1(self):
log=logging.getLogger(u'test1')
log.info(u'Start')
i1=MediaManagerItem(self.MediaToolBox)
i2=MediaManagerItem(self.MediaToolBox)
log.info(u'i1"+unicode(i1))
log.info(u'i2"+unicode(i2))
log.info(u'i1'+unicode(i1))
log.info(u'i2'+unicode(i2))
i1.addToolbar()
i1.addToolbarButton(u'Test1", u'Test1", None)
i1.addToolbarButton(u'Test1', u'Test1', None)
i2.addToolbar()
i2.addToolbarButton(u'Test2", u'Test2", None)
self.MediaToolBox.setItemText(self.MediaToolBox.indexOf(i1), translate(u'main_window", u'Item1"))
self.MediaToolBox.setItemText(self.MediaToolBox.indexOf(i2), translate(u'main_window", u'Item2"))
i2.addToolbarButton(u'Test2', u'Test2', None)
self.MediaToolBox.setItemText(self.MediaToolBox.indexOf(i1),
translate(u'main_window', u'Item1'))
self.MediaToolBox.setItemText(self.MediaToolBox.indexOf(i2),
translate(u'main_window', u'Item2'))
log.info(u'Show window')
self.main_window.show()
log.info(u'End')
return 1
if __name__=="__main__":
if __name__ == "__main__":
t=TestMediaManager()
t.setup_class()
t.test1()
log.info(u'exec')
sys.exit(t.app.exec_())
sys.exit(t.app.exec_())

View File

@ -31,17 +31,18 @@ class TestPluginManager:
# get list of the names of the plugins
names=[plugin.name for plugin in p.plugins]
# see which ones we've got
assert (u'testplugin1" in names)
assert (u'testplugin2" in names)
assert (u'testplugin1' in names)
assert (u'testplugin2' in names)
# and not got - it's too deep in the hierarchy!
assert (u'testplugin3" not in names)
assert (u'testplugin3' not in names)
# test that the weighting is done right
assert p.plugins[0].name=="testplugin2"
assert p.plugins[1].name=="testplugin1"
if __name__=="__main__":
assert p.plugins[0].name == "testplugin2"
assert p.plugins[1].name == "testplugin1"
if __name__ == "__main__":
log.debug(u'Starting')
t=TestPluginManager()
t.test_init()
log.debug(u'List of plugins found:')
for plugin in t.p.plugins:
log.debug(u'Plugin %s, name=%s (version=%d)"%(unicode(plugin), plugin.name, plugin.version))
log.debug(u'Plugin %s, name=%s (version=%d)' %(unicode(plugin),
plugin.name, plugin.version))

View File

@ -84,7 +84,7 @@ class TestRender_base:
def setup_method(self, method):
print "SSsetup", method
if not hasattr(self, "app'):
if not hasattr(self, 'app'):
self.app=None
try: # see if we already have an app for some reason.
# have to try and so something, cant just test against None
@ -109,7 +109,7 @@ class TestRender_base:
print "--------------- Setup Done -------------"
def teardown_method(self, method):
self.write_to_file(self.frame.GetPixmap(), "test_render')
self.write_to_file(self.frame.GetPixmap(), 'test_render')
class TestRender(TestRender_base):
def __init__(self):
@ -121,19 +121,22 @@ class TestRender(TestRender_base):
themefile=os.path.abspath(u'data_for_tests/render_theme.xml')
self.r.set_theme(Theme(themefile)) # set default theme
self.r._render_background()
self.r.set_text_rectangle(QtCore.QRect(0,0, self.size.width()-1, self.size.height()-1))
self.r.set_text_rectangle(QtCore.QRect(0,0, self.size.width()-1,
self.size.height()-1))
self.msg=None
def test_easy(self):
answer=self.r._render_single_line(u'Test line", tlcorner=(0,100))
answer=self.r._render_single_line(u'Test line', tlcorner=(0,100))
assert (answer==(219,163))
def test_longer(self):
answer=self.r._render_single_line(u'Test line with more words than fit on one line",
tlcorner=(10,10))
answer=self.r._render_single_line(
u'Test line with more words than fit on one line',
tlcorner=(10,10))
assert (answer==(753,136))
def test_even_longer(self):
answer=self.r._render_single_line(u'Test line with more words than fit on either one or two lines",
tlcorner=(10,10))
answer=self.r._render_single_line(
u'Test line with more words than fit on either one or two lines',
tlcorner=(10,10))
assert(answer==(753,199))
def test_lines(self):
lines=[]
@ -187,7 +190,7 @@ Line 3"""
extra=""
if i == 51: # make an extra long line on line 51 to test wrapping
extra="Some more words to make it wrap around don't you know until it wraps so many times we don't know what to do"
lines.append(u'Line %d %s" % (i, extra))
lines.append(u'Line %d %s' % (i, extra))
result=self.r.split_set_of_lines(lines)
print "results---------------__", result
for i in range(len(result)):

View File

@ -131,7 +131,7 @@ And drives away his fear.
def test_bg_stretch_y(self):
t=Theme(u'blank_theme.xml')
t.BackgroundType = 2
t.BackgroundParameter1 = os.path.join(u'data_for_tests', "snowsmall.jpg');
t.BackgroundParameter1 = os.path.join(u'data_for_tests', 'snowsmall.jpg');
t.BackgroundParameter2 = QtGui.QColor(0,0,64);
t.BackgroundParameter3 = 0
t.Name="stretch y"
@ -144,7 +144,7 @@ And drives away his fear.
def test_bg_shrink_y(self):
t=Theme(u'blank_theme.xml')
t.BackgroundType = 2
t.BackgroundParameter1 = os.path.join(u'data_for_tests', "snowbig.jpg');
t.BackgroundParameter1 = os.path.join(u'data_for_tests', 'snowbig.jpg');
t.BackgroundParameter2 = QtGui.QColor(0,0,64);
t.BackgroundParameter3 = 0
t.Name="shrink y"
@ -155,7 +155,8 @@ And drives away his fear.
def test_bg_stretch_x(self):
t=Theme(u'blank_theme.xml')
t.BackgroundType = 2
t.BackgroundParameter1 = os.path.join(u'data_for_tests', "treessmall.jpg');
t.BackgroundParameter1 = os.path.join(u'data_for_tests',
'treessmall.jpg');
t.BackgroundParameter2 = QtGui.QColor(0,0,64);
t.BackgroundParameter3 = 0
t.VerticalAlign = 2
@ -168,7 +169,7 @@ And drives away his fear.
def test_bg_shrink_x(self):
t=Theme(u'blank_theme.xml')
t.BackgroundType = 2
t.BackgroundParameter1 = os.path.join(u'data_for_tests', "treesbig.jpg');
t.BackgroundParameter1 = os.path.join(u'data_for_tests', 'treesbig.jpg');
t.BackgroundParameter2 = QtGui.QColor(0,0,64);
t.BackgroundParameter3 = 0
t.VerticalAlign = 2
@ -298,4 +299,4 @@ if __name__=="__main__":
t.setup_class()
t.setup_method(None)
t.test_bg_stretch_y()
t.teardown_method(None)
t.teardown_method(None)

View File

@ -11,18 +11,18 @@ from PyQt4 import QtGui
def test_read_theme():
dir=os.path.split(__file__)[0]
# test we can read a theme
t=Theme(os.path.join(dir, "test_theme.xml'))
t=Theme(os.path.join(dir, 'test_theme.xml'))
print t
assert(t.BackgroundParameter1 == "sunset1.jpg')
assert(t.BackgroundParameter1 == 'sunset1.jpg')
assert(t.BackgroundParameter2 == None)
assert(t.BackgroundParameter3 == None)
assert(t.BackgroundType == 2)
assert(t.FontColor == QtGui.QColor(255,255,255))
assert(t.FontName == "Tahoma')
assert(t.FontName == 'Tahoma')
assert(t.FontProportion == 16)
assert(t.FontUnits == "pixels')
assert(t.FontUnits == 'pixels')
assert(t.HorizontalAlign == 2)
assert(t.Name == "openlp.org Packaged Theme')
assert(t.Name == 'openlp.org Packaged Theme')
assert(t.Outline == -1)
assert(t.OutlineColor == QtGui.QColor(255,0,0))
assert(t.Shadow == -1)
@ -37,11 +37,11 @@ def test_theme():
assert(t.BackgroundParameter3 == None)
assert(t.BackgroundType == 0)
assert(t.FontColor == QtGui.QColor(255,255,255))
assert(t.FontName == "Arial')
assert(t.FontName == 'Arial')
assert(t.FontProportion == 30)
assert(t.HorizontalAlign == 0)
assert(t.FontUnits == "pixels')
assert(t.Name == "BlankStyle')
assert(t.FontUnits == 'pixels')
assert(t.Name == 'BlankStyle')
assert(t.Outline == 0)
assert(t.Shadow == 0)
assert(t.VerticalAlign == 0)
@ -52,4 +52,4 @@ def test_theme():
if __name__=="__main__":
test_read_theme()
test_theme()
test_theme()

View File

@ -64,10 +64,10 @@ class ServiceManagerList(QtGui.QTreeWidget):
event.ignore()
class Iter(QtGui.QTreeWidgetItemIterator):
def __init__(self, *args):
def __init__(self, *args):
QtGui.QTreeWidgetItemIterator.__init__(self, *args)
def next(self):
def next(self):
self.__iadd__(1)
value = self.value()
if value:
@ -99,12 +99,15 @@ class ServiceManager(QtGui.QWidget):
self.Layout.setMargin(0)
# Create the top toolbar
self.Toolbar = OpenLPToolbar(self)
self.Toolbar.addToolbarButton(u'New Service', u':/services/service_new.png',
translate(u'ServiceManager', u'Create a new Service'), self.onNewService)
self.Toolbar.addToolbarButton(u'Open Service', u':/services/service_open.png',
translate(u'ServiceManager', u'Load Existing'), self.onLoadService)
self.Toolbar.addToolbarButton(u'Save Service', u':/services/service_save.png',
translate(u'ServiceManager', u'Save Service'), self.onSaveService)
self.Toolbar.addToolbarButton(u'New Service',
u':/services/service_new.png', translate(u'ServiceManager',
u'Create a new Service'), self.onNewService)
self.Toolbar.addToolbarButton(u'Open Service',
u':/services/service_open.png', translate(u'ServiceManager',
u'Load Existing'), self.onLoadService)
self.Toolbar.addToolbarButton(u'Save Service',
u':/services/service_save.png', translate(u'ServiceManager',
u'Save Service'), self.onSaveService)
self.Toolbar.addSeparator()
self.ThemeComboBox = QtGui.QComboBox(self.Toolbar)
self.ThemeComboBox.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToContents)
@ -250,7 +253,7 @@ class ServiceManager(QtGui.QWidget):
temp = self.serviceItems[item]
self.serviceItems.remove(self.serviceItems[item])
self.serviceItems.insert(item - 1, temp)
self.repaintServiceList(item - 1 , count)
self.repaintServiceList(item - 1, count)
self.parent.OosChanged(False, self.serviceName)
def onServiceDown(self):
@ -263,7 +266,7 @@ class ServiceManager(QtGui.QWidget):
temp = self.serviceItems[item]
self.serviceItems.remove(self.serviceItems[item])
self.serviceItems.insert(item + 1, temp)
self.repaintServiceList(item + 1 , count)
self.repaintServiceList(item + 1, count)
self.parent.OosChanged(False, self.serviceName)
def onServiceEnd(self):
@ -315,13 +318,15 @@ class ServiceManager(QtGui.QWidget):
treewidgetitem = QtGui.QTreeWidgetItem(self.ServiceManagerList)
treewidgetitem.setText(0,serviceitem.title)
treewidgetitem.setIcon(0,serviceitem.iconic_representation)
treewidgetitem.setData(0, QtCore.Qt.UserRole, QtCore.QVariant(item[u'order']))
treewidgetitem.setData(0, QtCore.Qt.UserRole,
QtCore.QVariant(item[u'order']))
treewidgetitem.setExpanded(item[u'expanded'])
for count , frame in enumerate(serviceitem.frames):
for count, frame in enumerate(serviceitem.frames):
treewidgetitem1 = QtGui.QTreeWidgetItem(treewidgetitem)
text = frame[u'title']
treewidgetitem1.setText(0,text[:40])
treewidgetitem1.setData(0, QtCore.Qt.UserRole,QtCore.QVariant(count))
treewidgetitem1.setData(0, QtCore.Qt.UserRole,
QtCore.QVariant(count))
if serviceItem == itemcount and serviceItemCount == count:
self.ServiceManagerList.setCurrentItem(treewidgetitem1)
@ -330,7 +335,7 @@ class ServiceManager(QtGui.QWidget):
Save the current service in a zip file
This file contains
* An ood which is a pickle of the service items
* All image , presentation and video files needed to run the service.
* All image, presentation and video files needed to run the service.
"""
filename = QtGui.QFileDialog.getSaveFileName(self, u'Save Order of Service',self.config.get_last_dir() )
filename = unicode(filename)

View File

@ -28,7 +28,8 @@ from openlp.core.ui import ServiceManager
from openlp.plugins.images.lib import ImageServiceItem
import logging
logging.basicConfig(filename="test_service_manager.log",level=logging.INFO, filemode="w')
logging.basicConfig(filename='test_service_manager.log', level=logging.INFO,
filemode='w')
# # from http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66062
# def whoami(depth=1):
@ -53,7 +54,7 @@ class TestServiceManager_base:
pass
def setup_method(self, method):
log.info(u'Setup method:"+unicode(method))
log.info(u'Setup method:' + unicode(method))
self.expected_answer="Don't know yet"
self.answer=None
self.s=ServiceManager(None)
@ -71,16 +72,16 @@ class TestServiceManager_base:
self.sm.select(i, QItemSelectionModel.ClearAndSelect)
log.info(unicode(self.sm.selectedIndexes()))
self.s.TreeView.setSelectionModel(self.sm)
log.info(u'Selected indexes = " + unicode(self.s.TreeView.selectedIndexes()))
log.info(u'Selected indexes = ' + unicode(self.s.TreeView.selectedIndexes()))
def test_easy(self):
log.info(u'test_easy')
item=ImageServiceItem(None)
item.add(u'test.gif')
self.s.addServiceItem(item)
answer = self.s.oos_as_text()
log.info(u'Answer = " + unicode(answer))
log.info(u'Answer = ' + unicode(answer))
lines=answer.split(u'\n')
log.info(u'lines = " + unicode(lines))
log.info(u'lines = ' + unicode(lines))
assert lines[0].startswith(u'# <openlp.plugins.images.imageserviceitem.ImageServiceItem object')
assert lines[1] == "test.gif"
log.info(u'done')
@ -96,9 +97,9 @@ class TestServiceManager_base:
item.add(u'test3.gif')
self.s.addServiceItem(item)
answer = self.s.oos_as_text()
log.info(u'Answer = " + unicode(answer))
log.info(u'Answer = ' + unicode(answer))
lines=answer.split(u'\n')
log.info(u'lines = " + unicode(lines))
log.info(u'lines = ' + unicode(lines))
assert lines[0].startswith(u'# <openlp.plugins.images.imageserviceitem.ImageServiceItem object')
assert lines[1] == "test.gif"
assert lines[2].startswith(u'# <openlp.plugins.images.imageserviceitem.ImageServiceItem object')
@ -113,15 +114,15 @@ class TestServiceManager_base:
item.add(u'test.gif')
self.s.addServiceItem(item)
self.select_row(0)
log.info(u'Selected indexes = " + unicode(self.s.TreeView.selectedIndexes()))
log.info(u'Selected indexes = ' + unicode(self.s.TreeView.selectedIndexes()))
item=ImageServiceItem(None)
item.add(u'test2.gif')
item.add(u'test3.gif')
self.s.addServiceItem(item)
answer = self.s.oos_as_text()
log.info(u'Answer = " + unicode(answer))
log.info(u'Answer = ' + unicode(answer))
lines=answer.split(u'\n')
log.info(u'lines = " + unicode(lines))
log.info(u'lines = ' + unicode(lines))
assert lines[0].startswith(u'# <openlp.plugins.images.imageserviceitem.ImageServiceItem object')
assert lines[1] == "test.gif"
assert lines[2] == "test2.gif"
@ -143,4 +144,4 @@ if __name__=="__main__":
t.test_easy()
t.teardown_method(None)
print "Pass"
log.info(u'Pass')
log.info(u'Pass')

View File

@ -105,9 +105,9 @@ class ThemesTab(SettingsTab):
self.SongLevelRadioButton.setText(translate(u'ThemesTab', u'Song level'))
self.SongLevelLabel.setText(translate(u'ThemesTab', u'Use the theme from each song in the database. If a song doesn\'t have a theme associated with it, then use the service\'s theme. If the service doesn\'t have a theme, then use the global theme.'))
self.ServiceLevelRadioButton.setText(translate(u'ThemesTab', u'Service level'))
self.ServiceLevelLabel.setText(translate(u'ThemesTab', u'Use the theme from the service , overriding any of the individual songs\' themes. If the service doesn\'t have a theme, then use the global theme.'))
self.ServiceLevelLabel.setText(translate(u'ThemesTab', u'Use the theme from the service, overriding any of the individual songs\' themes. If the service doesn\'t have a theme, then use the global theme.'))
self.GlobalLevelRadioButton.setText(translate(u'ThemesTab', u'Global level'))
self.GlobalLevelLabel.setText(translate(u'ThemesTab', u'Use the global theme, overriding any themes associated wither either the service or the songs.'))
self.GlobalLevelLabel.setText(translate(u'ThemesTab', u'Use the global theme, overriding any themes associated with either the service or the songs.'))
def load(self):
self.global_style = self.config.get_config(u'theme global style', u'Global')

View File

@ -53,8 +53,8 @@ class TestBibleManager:
def testRegisterCSVBibleFiles(self):
# Register a bible from files
log.debug(u'\n.......testRegisterBibleFiles')
self.bm.registerFileBible(u'TheMessage",'biblebooks_msg_short.csv','bibleverses_msg_short.csv')
self.bm.registerFileBible(u'NIV",'biblebooks_niv_short.csv','bibleverses_niv_short.csv')
self.bm.registerFileBible(u'TheMessage','biblebooks_msg_short.csv','bibleverses_msg_short.csv')
self.bm.registerFileBible(u'NIV','biblebooks_niv_short.csv','bibleverses_niv_short.csv')
b = self.bm.get_bibles()
for b1 in b:
log.debug( b1)
@ -62,10 +62,11 @@ class TestBibleManager:
def testRegisterHTTPBible(self):
# Register a bible from files
log.debug( "\n.......testRegisterBibleHTTP')
self.bm.registerHTTPBible(u'asv","Crosswalk", u'", u'", u'')
self.bm.registerHTTPBible(u'nasb","Biblegateway", u'", u'", u'')
self.bm.registerHTTPBible(u'nkj","Biblegateway", u'http://tigger2:3128/", u'", u'')
log.debug( '\n.......testRegisterBibleHTTP')
self.bm.registerHTTPBible(u'asv', u'Crosswalk', u'', u'', u'')
self.bm.registerHTTPBible(u'nasb', u'Biblegateway', u'', u'', u'')
self.bm.registerHTTPBible(u'nkj', u'Biblegateway',
u'http://tigger2:3128/', u'', u'')
b = self.bm.get_bibles()
for b1 in b:
log.debug( b1)
@ -73,7 +74,7 @@ class TestBibleManager:
def testGetBibles(self):
log.debug( "\n.......testGetBibles')
log.debug(u'\n.......testGetBibles')
# make sure the shuffled sequence does not lose any elements
b = self.bm.get_bibles()
for b1 in b:
@ -81,25 +82,25 @@ class TestBibleManager:
assert(b1 in b)
def testGetBibleBooks(self):
log.debug( "\n.......testGetBibleBooks')
log.debug(u'\n.......testGetBibleBooks')
c = self.bm.get_bible_books(u'NIV')
for c1 in c:
log.debug( c1)
assert(c1 in c)
def testGetBookChapterCount(self):
log.debug( "\n.......testGetBookChapterCount')
log.debug(u'\n.......testGetBookChapterCount')
assert(self.bm.get_book_chapter_count(u'Matthew') == '28')
def testGetBookVerseCount(self):
log.debug( "\n.......testGetBookVerseCount')
assert(self.bm.get_book_verse_count(u'Genesis", 1) == '31')
assert(self.bm.get_book_verse_count(u'Genesis", 2) == '25')
assert(self.bm.get_book_verse_count(u'Matthew", 1) == '25')
assert(self.bm.get_book_verse_count(u'Revelation", 1) == '20')
log.debug(u'\n.......testGetBookVerseCount')
assert(self.bm.get_book_verse_count(u'Genesis', 1) == '31')
assert(self.bm.get_book_verse_count(u'Genesis', 2) == '25')
assert(self.bm.get_book_verse_count(u'Matthew', 1) == '25')
assert(self.bm.get_book_verse_count(u'Revelation', 1) == '20')
def testGetVerseText(self):
log.debug( "\n.......testGetVerseText')
log.debug(u'\n.......testGetVerseText')
#c = self.bm.get_verse_text(u'TheMessage",'Genesis',1,2,1)
#log.debug( c )
#c = self.bm.get_verse_text(u'NIV','Genesis',1,1,2)
@ -112,7 +113,7 @@ class TestBibleManager:
log.debug( c )
def testLoadBible(self):
log.debug( "\n.......testLoadBible')
log.debug(u'\n.......testLoadBible')
#self.bm.loadBible(u'asv')
#self.bm.loadBible(u'nasb')
#self.bm.loadBible(u'nkj')
#self.bm.loadBible(u'nkj')

View File

@ -51,7 +51,7 @@ class TestBibleManager:
self.bm = BibleManager()
def testGetBibles(self):
log.debug( "\n.......testGetBibles')
log.debug(u'\n.......testGetBibles')
# make sure the shuffled sequence does not lose any elements
b = self.bm.getBibles()
for b1 in b:
@ -59,36 +59,37 @@ class TestBibleManager:
assert(b1 in b)
def testGetBibleBooks(self):
log.debug( "\n.......testGetBibleBooks')
log.debug(u'\n.......testGetBibleBooks')
c = self.bm.getBibleBooks(u'asv')
for c1 in c:
log.debug( c1)
assert(c1 in c)
def testGetBookChapterCount(self):
log.debug( "\n.......testGetBookChapterCount')
assert(self.bm.getBookChapterCount(u'asv","Matthew')[0] == 28)
log.debug(u'\n.......testGetBookChapterCount')
assert(self.bm.getBookChapterCount(u'asv', u'Matthew')[0] == 28)
def testGetBookVerseCount(self):
log.debug( "\n.......testGetBookVerseCount')
assert(self.bm.getBookVerseCount(u'asv","Genesis", 1)[0] == 31)
assert(self.bm.getBookVerseCount(u'TheMessage","Genesis", 2)[0] == 25)
assert(self.bm.getBookVerseCount(u'asv","Matthew", 1)[0] == 25)
assert(self.bm.getBookVerseCount(u'TheMessage","Revelation", 1)[0] == 20)
log.debug(u'\n.......testGetBookVerseCount')
assert(self.bm.getBookVerseCount(u'asv', u'Genesis', 1)[0] == 31)
assert(self.bm.getBookVerseCount(u'TheMessage', u'Genesis', 2)[0] == 25)
assert(self.bm.getBookVerseCount(u'asv', u'Matthew', 1)[0] == 25)
assert(self.bm.getBookVerseCount(u'TheMessage', u'Revelation',
1)[0] == 20)
def testGetVerseText(self):
log.debug( "\n.......testGetVerseText')
log.debug(u'\n.......testGetVerseText')
#c = self.bm.getVerseText(u'TheMessage",'Genesis',1,2,1)
#log.debug( c )
#c = self.bm.getVerseText(u'NIV','Genesis',1,1,2)
#log.debug( c )
c = self.bm.getVerseText(u'asv','Genesis',10,1,20)
c = self.bm.getVerseText(u'asv', u'Genesis', 10, 1, 20)
log.debug( c )
c = self.bm.getVerseText(u'TheMessage','Genesis',10,1,20)
c = self.bm.getVerseText(u'TheMessage', u'Genesis', 10, 1, 20)
log.debug( c )
c = self.bm.getVerseText(u'asv','Revelation',10,1,20)
c = self.bm.getVerseText(u'asv', u'Revelation', 10, 1, 20)
log.debug( c )
c = self.bm.getVersesFromText(u'asv", u'Jesus wept')
c = self.bm.getVersesFromText(u'asv', u'Jesus wept')
log.debug( c )
c = self.bm.getVersesFromText(u'TheMessage", u'Jesus wept')
log.debug( c )
c = self.bm.getVersesFromText(u'TheMessage', u'Jesus wept')
log.debug( c )

View File

@ -53,9 +53,11 @@ class TestBibleManager:
def testRegisterCSVBibleFiles(self):
# Register a bible from files
log.debug(u'\n.......testRegisterBibleFiles')
self.bm.registerCSVFileBible(u'TheMessage",'biblebooks_msg_short.csv','bibleverses_msg_short.csv')
self.bm.registerCSVFileBible(u'NIV",'biblebooks_niv_short.csv','bibleverses_niv_short.csv')
self.bm.registerCSVFileBible(u'TheMessage',
u'biblebooks_msg_short.csv', u'bibleverses_msg_short.csv')
self.bm.registerCSVFileBible(u'NIV', u'biblebooks_niv_short.csv',
u'bibleverses_niv_short.csv')
b = self.bm.get_bibles()
for b1 in b:
log.debug( b1)
assert(b1 in b)
assert(b1 in b)

View File

@ -53,8 +53,8 @@ class TestBibleManager:
def testRegisterOSISBibleFiles(self):
# Register a bible from files
log.debug(u'\n.......testRegisterOSISBibleFiles')
self.bm.register_osis_file_bible(u'asv",'asv.osis')
self.bm.register_osis_file_bible(u'asv', u'asv.osis')
b = self.bm.get_bibles()
for b1 in b:
log.debug( b1)
assert(b1 in b)
assert(b1 in b)

View File

@ -24,7 +24,8 @@ Place, Suite 330, Boston, MA 02111-1307 USA
# http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/Working_with_Presentations
# http://mail.python.org/pipermail/python-win32/2008-January/006676.html
import os , subprocess
import os
import subprocess
import time
import uno

View File

@ -4,7 +4,7 @@ from PyQt4 import QtGui, QtCore
from ctypes import *
from ctypes.wintypes import RECT
pptdll = cdll.LoadLibrary(r"C:\Documents and Settings\jonathan\My Documents\Personal\openlp\openlp-2\trunk\openlp\libraries\pptviewlib\pptviewlib.dll')
pptdll = cdll.LoadLibrary(r'C:\Documents and Settings\jonathan\My Documents\Personal\openlp\openlp-2\trunk\openlp\libraries\pptviewlib\pptviewlib.dll')
class BoxLayout(QtGui.QWidget):
def __init__(self, parent=None):
@ -107,7 +107,7 @@ class BoxLayout(QtGui.QWidget):
rect.width = 900
rect.hight = 700
#self.pptid = pptdll.OpenPPT(self.PPTEdit.text, None, rect, "c:\temp\slide')
self.pptid = pptdll.OpenPPT(u'C:\\test 1.ppt", None, rect, "c:\temp\slide')
self.pptid = pptdll.OpenPPT(u'C:\\test 1.ppt', None, rect, 'c:\temp\slide')
self.total.setText(pptdll.GetSlideCount(self.pptid))
self.slideEdit.setText(unicode(pptdll.GetCurrentSlide(self.pptid)))
@ -122,4 +122,4 @@ class BoxLayout(QtGui.QWidget):
app = QtGui.QApplication(sys.argv)
qb = BoxLayout()
qb.show()
sys.exit(app.exec_())
sys.exit(app.exec_())

View File

@ -109,7 +109,7 @@ class PPTViewer(QtGui.QWidget):
rect = RECT(100,100,900,700)
filename = unicode(self.PPTEdit.text())
print filename
self.pptid = pptdll.OpenPPT(filename, None, rect, "c:\\temp\\slide')
self.pptid = pptdll.OpenPPT(filename, None, rect, 'c:\\temp\\slide')
print "id: " + unicode(self.pptid)
if oldid>=0:
pptdll.ClosePPT(oldid);
@ -136,11 +136,11 @@ class PPTViewer(QtGui.QWidget):
self.PPTEdit.setText(QtGui.QFileDialog.getOpenFileName(self, 'Open file'))
if __name__ == '__main__':
#pptdll = cdll.LoadLibrary(r"C:\Documents and Settings\jonathan\Desktop\pptviewlib.dll')
pptdll = cdll.LoadLibrary(r"pptviewlib.dll')
#pptdll = cdll.LoadLibrary(r'C:\Documents and Settings\jonathan\Desktop\pptviewlib.dll')
pptdll = cdll.LoadLibrary(r'pptviewlib.dll')
pptdll.SetDebug(1)
print "Begin..."
app = QtGui.QApplication(sys.argv)
qb = PPTViewer()
qb.show()
sys.exit(app.exec_())
sys.exit(app.exec_())

View File

@ -28,7 +28,7 @@ def sendData(options, message):
try:
UDPSock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
UDPSock.sendto(message, addr)
print u'message sent ', message , addr
print u'message sent ', message, addr
except:
print u'Errow thrown ', sys.exc_info()[1]

View File

@ -350,7 +350,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
def accept(self):
log.debug(u'accept')
valid , message = self._validate_song()
valid, message = self._validate_song()
if not valid:
QtGui.QMessageBox.critical(self,
translate(u'SongFormDialog', u'Error'), message,

View File

@ -75,13 +75,13 @@ class _OpenSong(XmlRootClass):
def _reset(self):
"""Reset all song attributes"""
global _blankOpenSongXml
self._setFromXml(_blankOpenSongXml, "song')
self._setFromXml(_blankOpenSongXml, 'song')
def from_buffer(self, xmlContent):
"""Initialize from buffer(string) with xml content"""
self._reset()
if xmlContent != None :
self._setFromXml(xmlContent, "song')
self._setFromXml(xmlContent, 'song')
def get_author_list(self):
"""Convert author field to an authorlist
@ -94,7 +94,7 @@ class _OpenSong(XmlRootClass):
lst = self.author.split(u' and ')
for l in lst :
res.append(l.strip())
s = ", u'.join(res)
s = u', '.join(res)
return s
def get_category_array(self):
@ -107,7 +107,7 @@ class _OpenSong(XmlRootClass):
res.append(self.theme)
if self.alttheme != None :
res.append(self.alttheme)
s = ", u'.join(res)
s = u', u'.join(res)
return s
def _reorder_verse(self, tag, tmpVerse):
@ -134,7 +134,7 @@ class _OpenSong(XmlRootClass):
newtag = "Pre-chorus"
else :
newtag = t
s = (u'# %s %s"%(newtag, c)).rstrip()
s = (u'# %s %s'%(newtag, c)).rstrip()
res.append(s)
res.append(l[1:])
if (len(l) == 0) and (not tagPending) :
@ -355,7 +355,7 @@ class Song(object) :
elif l.startswith(u'Misc') :
metMisc = True
elif l.startswith(u'Verse') or l.startswith(u'Chorus'):
lyrics.append(u'# %s"%l)
lyrics.append(u'# %s'%l)
else :
# should we remove multiple blank lines?
if n == 1 :
@ -366,7 +366,7 @@ class Song(object) :
lst = sAuthor.split(u'/')
if len(lst) < 2:
lst = sAuthor.split(u'|')
author_list = ", u'.join(lst)
author_list = u', '.join(lst)
self.set_title(sName)
self.set_author_list(author_list)
self.set_copyright(sCopyright)
@ -413,7 +413,7 @@ class Song(object) :
lst = []
else :
raise SongTypeError(u'Variable not String or List')
s = ", u'.join(lst)
s = u', '.join(lst)
return s
def get_copyright(self):
@ -660,4 +660,4 @@ class Song(object) :
return res
__all__ = ['SongException', 'SongTitleError', 'SongSlideError', 'SongTypeError',
'SongFeatureError', 'Song']
'SongFeatureError', 'Song']

View File

@ -26,7 +26,7 @@ __ThisDir__ = os.path.dirname(__file__)
if "" == __ThisDir__ :
__ThisDir__ = os.path.abspath(u'.')
sys.path.append(os.path.abspath(u'%s/../../../.."%__ThisDir__))
sys.path.append(os.path.abspath(u'%s/../../../..'%__ThisDir__))
from openlp.plugins.songs.lib.songxml import *
@ -43,7 +43,7 @@ class Test_Basic(object):
def test_Title1(self):
"""Set an empty title - raises an exception"""
s = Song()
py.test.raises(SongTitleError, s.set_title, "')
py.test.raises(SongTitleError, s.set_title, '')
def test_Title2(self):
"""Set a normal title"""
@ -74,101 +74,101 @@ class Test_Basic(object):
def test_Title5(self):
"""Set a title, where searchable title becomes empty - raises an exception"""
s = Song()
py.test.raises(SongTitleError, s.set_title, ",*')
py.test.raises(SongTitleError, s.set_title, ',*')
def test_Copyright(self):
"""Set a copyright string"""
s = Song()
assert(s.get_copyright() == "')
assert(s.get_copyright() == '')
s.set_copyright(u'A B Car')
assert(s.get_copyright() == "A B Car')
assert(s.get_copyright() == 'A B Car')
def test_SongCclino(self):
"""Set a SongCcliNo"""
s = Song()
assert(s.get_song_cclino() == "')
assert(s.get_song_cclino() == '')
s.set_song_cclino(12345)
assert(s.get_song_cclino() == "12345')
assert(s.get_song_cclino() == '12345')
def test_SongBook(self):
"""Set a songbook value"""
s = Song()
assert(s.get_song_book() == "')
assert(s.get_song_book() == '')
s.set_song_book(u'Hymns')
assert(s.get_song_book() == "Hymns')
assert(s.get_song_book() == u'Hymns')
def test_SongNumber(self):
"""Set a song number"""
s = Song()
assert(s.get_song_number() == "')
assert(s.get_song_number() == '')
s.set_song_number(278)
assert(s.get_song_number() == "278')
assert(s.get_song_number() == '278')
def test_Theme(self):
"""Set a theme name"""
s = Song()
assert(s.get_theme() == "')
assert(s.get_theme() == '')
s.set_theme(u'Red')
assert(s.get_theme() == "Red')
assert(s.get_theme() == 'Red')
def test_VerseOrder(self):
"""Set a verse order"""
s = Song()
assert(s.get_verse_order() == "')
assert(s.get_verse_order() == '')
s.set_verse_order(u'V1 C V2')
assert(s.get_verse_order() == "V1 C V2')
assert(s.get_verse_order() == 'V1 C V2')
def test_Comments(self):
"""Set a comment"""
s = Song()
assert(s.get_comments() == "')
assert(s.get_comments() == '')
s.set_comments(u'a comment')
assert(s.get_comments() == "a comment')
assert(s.get_comments() == 'a comment')
def test_AuthorList(self):
"""Set author lists"""
s = Song()
assert(s.get_author_list(True) == "')
assert(s.get_author_list(True) == '')
assert(s.get_author_list(False) == [])
t1 = "John Newton"
s.set_author_list(t1)
assert(s.get_author_list(True) == t1)
assert(s.get_author_list(False) == [t1])
s.set_author_list(u' Peter Done , John Newton')
assert(s.get_author_list(True)== "Peter Done, John Newton')
assert(s.get_author_list(False) == ["Peter Done", u'John Newton"])
assert(s.get_author_list(True)== 'Peter Done, John Newton')
assert(s.get_author_list(False) == ["Peter Done", u'John Newton'])
s.set_author_list(None)
assert(s.get_author_list(True) == "')
assert(s.get_author_list(True) == '')
assert(s.get_author_list(False) == [])
s.set_author_list(u'')
assert(s.get_author_list(True) == "')
assert(s.get_author_list(True) == '')
assert(s.get_author_list(False) == [""])
s.set_author_list([])
assert(s.get_author_list(True) == "')
assert(s.get_author_list(True) == '')
assert(s.get_author_list(False) == [""])
def test_CategoryArray(self):
"""Set categories"""
s = Song()
assert(s.get_category_array(True) == "')
assert(s.get_category_array(True) == '')
assert(s.get_category_array(False) == [])
t1 = "Gospel"
s.set_category_array(t1)
assert(s.get_category_array(True) == t1)
assert(s.get_category_array(False) == [t1])
s.set_category_array(u' Gospel, Hymns ')
assert(s.get_category_array(True) == "Gospel, Hymns')
assert(s.get_category_array(False) == ["Gospel", u'Hymns"])
assert(s.get_category_array(True) == 'Gospel, Hymns')
assert(s.get_category_array(False) == ["Gospel", u'Hymns'])
s.set_category_array(None)
assert(s.get_category_array(True) == "')
assert(s.get_category_array(True) == '')
assert(s.get_category_array(False) == [])
s.set_category_array(u'')
assert(s.get_category_array(True) == "')
assert(s.get_category_array(True) == '')
assert(s.get_category_array(False) == [""])
s.set_category_array([])
assert(s.get_category_array(True) == "')
assert(s.get_category_array(True) == '')
assert(s.get_category_array(False) == [""])
if '__main__' == __name__:
r = Test_Basic()
r.test_asString()
r.test_asString()

View File

@ -24,7 +24,7 @@ __ThisDir__ = os.path.dirname(__file__)
if "" == __ThisDir__ :
__ThisDir__ = os.path.abspath(u'.')
sys.path.append(os.path.abspath(u'%s/../../../.."%__ThisDir__))
sys.path.append(os.path.abspath(u'%s/../../../..'%__ThisDir__))
from openlp.plugins.songs.lib.songxml import *
@ -147,40 +147,40 @@ class Test_OpenSong(object):
"""OpenSong: parse Amazing Grace"""
global __ThisDir__
s = Song()
s.from_opensong_file(u'%s/data_opensong/Amazing Grace"%(__ThisDir__))
assert(s.get_title() == "Amazing Grace')
assert(s.get_copyright() == "1982 Jubilate Hymns Limited')
assert(s.get_song_cclino() == "1037882')
assert(s.get_category_array(True) == "God: Attributes')
assert(s.get_author_list(True) == "John Newton')
assert(s.get_verse_order() == "')
s.from_opensong_file(u'%s/data_opensong/Amazing Grace'%(__ThisDir__))
assert(s.get_title() == 'Amazing Grace')
assert(s.get_copyright() == '1982 Jubilate Hymns Limited')
assert(s.get_song_cclino() == '1037882')
assert(s.get_category_array(True) == 'God: Attributes')
assert(s.get_author_list(True) == 'John Newton')
assert(s.get_verse_order() == '')
assert(s.get_number_of_slides() == 4)
def test_file2(self):
"""OpenSong: parse The Solid Rock"""
s = Song()
s.from_opensong_file(u'%s/data_opensong/The Solid Rock"%(__ThisDir__))
assert(s.get_title() == "The Solid Rock')
assert(s.get_copyright() == "Public Domain')
assert(s.get_song_cclino() == "101740')
assert(s.get_category_array(True) == "Christ: Victory, Fruit: Peace/Comfort')
assert(s.get_author_list(True) == "Edward Mote, John B. Dykes')
assert(s.get_verse_order() == "V1 C V2 C V3 C V4 C')
s.from_opensong_file(u'%s/data_opensong/The Solid Rock'%(__ThisDir__))
assert(s.get_title() == 'The Solid Rock')
assert(s.get_copyright() == 'Public Domain')
assert(s.get_song_cclino() == '101740')
assert(s.get_category_array(True) == 'Christ: Victory, Fruit: Peace/Comfort')
assert(s.get_author_list(True) == 'Edward Mote, John B. Dykes')
assert(s.get_verse_order() == 'V1 C V2 C V3 C V4 C')
assert(s.get_number_of_slides() == 5)
def test_file3(self):
"""OpenSong: parse 'På en fjern ensom høj' (danish)"""
#FIXME: problem with XML convert and danish characters
s = Song()
s.from_opensong_file(u'%s/data_opensong/På en fjern ensom høj"%(__ThisDir__))
assert(s.get_title() == u"På en fjern ensom høj')
assert(s.get_copyright() == "')
assert(s.get_song_cclino() == "')
assert(s.get_category_array(True) == "')
assert(s.get_author_list(True) == "')
assert(s.get_verse_order() == "V1 C1 V2 C2 V3 C3 V4 C4')
s.from_opensong_file(u'%s/data_opensong/På en fjern ensom høj'%(__ThisDir__))
assert(s.get_title() == u'På en fjern ensom høj')
assert(s.get_copyright() == '')
assert(s.get_song_cclino() == '')
assert(s.get_category_array(True) == '')
assert(s.get_author_list(True) == '')
assert(s.get_verse_order() == 'V1 C1 V2 C2 V3 C3 V4 C4')
assert(s.get_number_of_slides() == 8)
if '__main__' == __name__:
r = Test_OpenSong()
r.test_file3()
r.test_file3()

View File

@ -25,7 +25,7 @@ __ThisDir__ = os.path.dirname(__file__)
if "" == __ThisDir__ :
__ThisDir__ = os.path.abspath(u'.')
sys.path.append(os.path.abspath(u'%s/../../../.."%__ThisDir__))
sys.path.append(os.path.abspath(u'%s/../../../..'%__ThisDir__))
from openlp.plugins.songs.lib.songxml import *
@ -49,19 +49,19 @@ class Test_Verse(object):
def check_allfields(self, r, isblank = 0):
#[theme, title, author, cpright, ccli, lyrics]
if isblank == 1 :
assert(r[1] == "')
assert(r[1] == '')
else :
assert(r[1] == self.title)
if isblank == 2 :
assert(r[2] == "')
assert(r[2] == '')
else :
assert(r[2] == self.author)
if isblank == 3 :
assert(r[3] == "')
assert(r[3] == '')
else :
assert(r[3] == self.copyright)
if isblank == 4 :
assert(r[4] == "')
assert(r[4] == '')
else :
assert(r[4] == self.ccli)
@ -135,18 +135,17 @@ class Test_Verse(object):
def test_verse3b(self):
"""Test a one liner song"""
s = Song()
s.set_lyrics(["", u'Single verse"])
s.set_lyrics(["", u'Single verse'])
assert(s.get_number_of_slides() == 1)
def test_verse3c(self):
"""Test a one liner song"""
s = Song()
s.set_lyrics(["", u'Single verse", u'", u'"])
s.set_lyrics(["", u'Single verse', u'', u''])
assert(s.get_number_of_slides() == 1)
def test_verse3d(self):
"""Test a one liner song"""
s = Song()
s.set_lyrics(["", u'# Verse", u'", u'"])
s.set_lyrics(["", u'# Verse', u'', u''])
assert(s.get_number_of_slides() == 1)

View File

@ -305,7 +305,7 @@
<item row="1" column="1">
<widget class="QLabel" name="ServiceLevelLabel">
<property name="text">
<string>Use the theme from the service , overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme.</string>
<string>Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
@ -325,7 +325,7 @@
<item row="2" column="1">
<widget class="QLabel" name="GlobalLevelLabel">
<property name="text">
<string>Use the global theme, overriding any themes associated wither either the service or the songs.</string>
<string>Use the global theme, overriding any themes associated with either the service or the songs.</string>
</property>
<property name="wordWrap">
<bool>true</bool>