diff --git a/.gitignore b/.bzrignore
similarity index 60%
rename from .gitignore
rename to .bzrignore
index 19f017b62..fedd1a25e 100644
--- a/.gitignore
+++ b/.bzrignore
@@ -5,3 +5,6 @@
*.eric4project
*.ropeproject
*.e4*
+.eric4project
+list
+openlp.org 2.0.e4*
diff --git a/.eric4project/openlp.org 2.0.e4q b/.eric4project/openlp.org 2.0.e4q
deleted file mode 100644
index 1fd5f428b..000000000
--- a/.eric4project/openlp.org 2.0.e4q
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.eric4project/openlp.org 2.0.e4s b/.eric4project/openlp.org 2.0.e4s
deleted file mode 100644
index ac5031bac..000000000
--- a/.eric4project/openlp.org 2.0.e4s
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
-
-
-
- /home/raoul/Projects/openlp-2/openlp.pyw
- /home/raoul/Projects/openlp-2/openlp/ui/forms/splashscreen.py
- /home/raoul/Projects/openlp-2/openlp/ui/forms/mainwindow.py
- /home/raoul/Projects/openlp-2/openlp/ui/forms/__init__.py
-
- /home/raoul/Projects/openlp-2/openlp.pyw
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.eric4project/openlp.org 2.0.e4t b/.eric4project/openlp.org 2.0.e4t
deleted file mode 100644
index 3bd5abd6d..000000000
--- a/.eric4project/openlp.org 2.0.e4t
+++ /dev/null
@@ -1,132 +0,0 @@
-
-
-
-
-
-
- TODO: what is the tags for bridge, pre-chorus?
-
- 2008-11-26, 21:10:45
-
- openlp/song/song.py
- 138
-
-
-
- TODO: check font formatting
-
- 2008-11-26, 21:10:45
-
- openlp/song/song.py
- 523
-
-
-
- TODO: Song: Logging - not all, but enough
-
- 2008-12-07, 10:06:59
-
- openlp/plugins/songs/songxml.py
- 39
-
-
-
- TODO: Song: Handle OpenLP2 format
-
- 2008-12-07, 10:06:59
-
- openlp/plugins/songs/songxml.py
- 40
-
-
-
- TODO: Song: Import OpenLP1
-
- 2008-12-07, 10:06:59
-
- openlp/plugins/songs/songxml.py
- 41
-
-
-
- TODO: Song: Export OpenLP1
-
- 2008-12-07, 10:07:00
-
- openlp/plugins/songs/songxml.py
- 42
-
-
-
- TODO: Song: Export Song to CCLI
-
- 2008-12-07, 10:07:00
-
- openlp/plugins/songs/songxml.py
- 43
-
-
-
- TODO: Song: Export Song to OpenSong
-
- 2008-12-07, 10:07:00
-
- openlp/plugins/songs/songxml.py
- 44
-
-
-
- TODO: Song: Import ChangingSong
-
- 2008-12-07, 10:07:00
-
- openlp/plugins/songs/songxml.py
- 45
-
-
-
- TODO: Song: Export ChangingSong
-
- 2008-12-07, 10:07:00
-
- openlp/plugins/songs/songxml.py
- 46
-
-
-
- TODO: what is the tags for bridge, pre-chorus?
-
- 2008-12-07, 10:07:00
-
- openlp/plugins/songs/songxml.py
- 149
-
-
-
- TODO: check font formatting
-
- 2008-12-07, 10:07:00
-
- openlp/plugins/songs/songxml.py
- 534
-
-
-
- TODO: need to get rid of this once all plugins are up to date
-
- 2009-03-01, 01:10:29
-
- openlp/core/pluginmanager.py
- 86
-
-
-
- TODO: These shouldn't be called here...
-
- 2009-03-01, 01:10:29
-
- openlp/core/pluginmanager.py
- 108
-
-
-
\ No newline at end of file
diff --git a/openlp.org 2.0.e4p b/openlp.org 2.0.e4p
deleted file mode 100644
index af320dd82..000000000
--- a/openlp.org 2.0.e4p
+++ /dev/null
@@ -1,330 +0,0 @@
-
-
-
-
-
-
- en
- Python
- Qt4
-
- 1.9.0
- Raoul Snyman
- raoulsnyman@openlp.org
-
- openlp.pyw
- openlp/controls/__init__.py
- openlp/core/test/test_render_theme.py
- openlp/core/test/test_render.py
- openlp/core/__init__.py
- openlp/__init__.py
- demo.py
- openlp/core/settingsmanager.py
- openlp/plugins/__init__.py
- openlp/core/ui/__init__.py
- openlp/core/ui/mainwindow.py
- openlp/core/ui/splashscreen.py
- openlp/core/ui/alertform.py
- openlp/core/ui/about.py
- openlp/plugins/songs/songsplugin.py
- openlp/plugins/songs/__init__.py
- openlp/plugins/songs/forms/__init__.py
- openlp/plugins/songs/forms/openlpimportform.py
- openlp/plugins/songs/forms/editsongform.py
- openlp/plugins/songs/forms/opensongexportform.py
- openlp/plugins/songs/forms/openlpexportform.py
- openlp/plugins/songs/forms/opensongimportform.py
- openlp/core/utils/__init__.py
- openlp/core/theme/__init__.py
- openlp/core/theme/theme.py
- openlp/plugins/songs/test/test_song_opensong.py
- openlp/plugins/songs/test/test_song_basic.py
- openlp/plugins/songs/test/test_song_verse.py
- openlp/plugins/songs/test/test_song_text.py
- openlp/core/theme/test/test_theme.py
- openlp/core/resources.py
- openlp/core/lib/__init__.py
- openlp/core/lib/xmlrootclass.py
- openlp/core/lib/plugin.py
- openlp/core/lib/mediamanageritem.py
- openlp/core/lib/event.py
- openlp/core/utils/confighelper.py
- openlp/core/utils/winregistry.py
- openlp/core/utils/registry.py
- openlp/core/utils/linregistry.py
- setup.py
- openlp/core/lib/pluginconfig.py
- openlp/core/test/test_plugin_manager.py
- openlp/core/test/test_mediamanageritem.py
- openlp/core/test/testplugins/testplugin1.py
- openlp/core/test/testplugins/testplugin2/__init__.py
- openlp/core/test/testplugins/testplugin2/testplugin2.py
- openlp/plugins/bibles/bibleplugin.py
- openlp/plugins/bibles/forms/bibleimportdialog.py
- openlp/plugins/bibles/forms/bibleimportform.py
- openlp/plugins/bibles/lib/bibleDBimpl.py
- openlp/plugins/bibles/lib/bibleOSISimpl.py
- openlp/plugins/bibles/lib/bibleHTTPimpl.py
- openlp/plugins/bibles/lib/bibleCSVimpl.py
- openlp/plugins/bibles/__init__.py
- openlp/plugins/bibles/lib/__init__.py
- openlp/plugins/bibles/forms/__init__.py
- openlp/plugins/songs/lib/__init__.py
- openlp/plugins/songs/lib/songxml.py
- openlp/plugins/songs/lib/models.py
- openlp/plugins/bibles/test/__init__.py
- openlp/plugins/bibles/test/test_bibleManagerAPI.py
- openlp/plugins/bibles/test/test_bibleManager.py
- openlp/plugins/bibles/test/test_bibleManagerOSIS.py
- openlp/plugins/bibles/test/test_bibleManagerCSV.py
- openlp/plugins/presentations/lib/pptview.py
- openlp/plugins/presentations/lib/impresscom.py
- openlp/plugins/presentations/lib/powerpoint.py
- openlp/plugins/presentations/lib/pptviewlib/ppttest.py
- openlp/plugins/presentations/__init__.py
- openlp/plugins/presentations/presentationplugin.py
- openlp/plugins/videos/__init__.py
- openlp/plugins/videos/videoplugin.py
- openlp/plugins/images/__init__.py
- openlp/plugins/images/imageplugin.py
- openlp/plugins/songs/forms/editsongdialog.py
- openlpcnv.pyw
- openlp/plugins/songs/forms/songbookdialog.py
- openlp/plugins/songs/forms/topicsdialog.py
- openlp/plugins/songs/forms/authorsdialog.py
- openlp/plugins/songs/forms/topicsform.py
- openlp/plugins/songs/forms/authorsform.py
- openlp/plugins/songs/forms/songbookform.py
- openlp/migration/__init__.py
- openlp/migration/migratefiles.py
- openlp/migration/migratesongs.py
- openlp/migration/display.py
- openlp/migration/migratebibles.py
- openlp/plugins/songs/lib/tables.py
- openlp/plugins/songs/lib/classes.py
- openlp/plugins/songs/lib/manager.py
- openlp/plugins/bibles/lib/classes.py
- openlp/plugins/bibles/lib/tables.py
- openlp/plugins/bibles/lib/manager.py
- openlp/plugins/bibles/lib/common.py
- openlp/plugins/songs/lib/meta.py
- openlp/core/test/testplugins/deeper/__init__.py
- openlp/core/test/testplugins/deeper/toodeep/__init__.py
- openlp/core/test/testplugins/deeper/toodeep/plugin3toodeep.py
- openlp/core/lib/serviceitem.py
- openlp/core/ui/slidecontroller.py
- openlp/core/lib/eventreceiver.py
- openlp/core/ui/servicemanager.py
- openlp/core/lib/toolbar.py
- openlp/core/ui/settingsform.py
- openlp/core/ui/generaltab.py
- openlp/core/ui/themestab.py
- openlp/core/ui/alertstab.py
- openlp/core/ui/settingsdialog.py
- openlp/core/lib/settingstab.py
- openlp/plugins/bibles/lib/biblestab.py
- openlp/plugins/songs/lib/songstab.py
- openlp/plugins/videos/lib/__init__.py
- openlp/plugins/videos/lib/videotab.py
- openlp/core/ui/test/test_service_manager.py
- openlp/plugins/images/lib/__init__.py
- openlp/plugins/images/lib/imageserviceitem.py
- openlp/plugins/images/lib/listwithpreviews.py
- openlp/plugins/songs/forms/editverseform.py
- openlp/plugins/songs/forms/editversedialog.py
- openlp/plugins/custom/__init__.py
- openlp/plugins/custom/customplugin.py
- openlp/plugins/custom/forms/__init__.py
- openlp/plugins/custom/forms/editcustomform.py
- openlp/plugins/custom/forms/editcustomdialog.py
- openlp/plugins/custom/lib/__init__.py
- openlp/plugins/custom/lib/customtab.py
- openlp/plugins/custom/lib/classes.py
- openlp/plugins/custom/lib/tables.py
- openlp/plugins/custom/lib/meta.py
- openlp/plugins/custom/lib/models.py
- openlp/plugins/custom/lib/manager.py
- openlp/plugins/images/lib/mediaitem.py
- openlp/plugins/songs/lib/mediaitem.py
- openlp/core/ui/maindisplay.py
- openlp/core/ui/amendthemedialog.py
- openlp/core/ui/thememanager.py
- openlp/core/ui/amendthemeform.py
- openlp/core/lib/eventmanager.py
- openlp/core/lib/rendermanager.py
- openlp/core/lib/renderer.py
- openlp/core/lib/songxmlhandler.py
- openlp/core/lib/pluginmanager.py
- openlp/core/lib/themexmlhandler.py
- openlp/plugins/bibles/lib/mediaitem.py
- openlp/plugins/bibles/lib/textlistdata.py
- openlp/plugins/presentations/lib/__init__.py
- openlp/plugins/presentations/lib/mediaitem.py
- openlp/plugins/presentations/lib/filelistdata.py
- openlp/plugins/videos/lib/mediaitem.py
- openlp/plugins/videos/lib/filelistdata.py
- openlp/plugins/custom/lib/mediaitem.py
- openlp/plugins/custom/lib/textlistdata.py
- openlp/plugins/custom/lib/customserviceitem.py
- resources/images/openlp-2_rc.py
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- resources/images/openlp-2.qrc
-
-
-
-
- copyright.txt
- documentation/SongFormat.txt
- documentation/pyqt-sql-py2exe.txt
- documentation/PluginDevelopersGuide.txt
-
- openlp.pyw
-
- None
-
-
-
- add
-
-
-
-
-
-
-
- checkout
-
-
-
-
-
-
-
- commit
-
-
-
-
-
-
-
- diff
-
-
-
-
-
-
-
- export
-
-
-
-
-
-
-
- global
-
-
-
-
-
-
-
- history
-
-
-
-
-
-
-
- log
-
-
-
-
-
-
-
- remove
-
-
-
-
-
-
-
- status
-
-
-
-
-
-
-
- tag
-
-
-
-
-
-
-
- update
-
-
-
-
-
-
-
-
-
-
-
- standardLayout
-
-
- True
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/openlp.org 2.0.e4x b/openlp.org 2.0.e4x
deleted file mode 100644
index 8d2f9e205..000000000
--- a/openlp.org 2.0.e4x
+++ /dev/null
@@ -1,45 +0,0 @@
-SOURCES = openlp/theme/test/test_theme.py \
- openlp/theme/__init__.py \
- openlp/theme/theme.py \
- openlp/controls/__init__.py \
- openlp/core/test/test_render_theme.py \
- openlp/core/test/test_render.py \
- openlp/core/interpolate.py \
- openlp/core/__init__.py \
- openlp/core/render.py \
- openlp/ui/__init__.py \
- openlp/ui/forms/__init__.py \
- openlp/__init__.py \
- openlp/utils/ConfigHelper.py \
- openlp/utils/__init__.py \
- demo.py \
- openlp/core/settingsmanager.py \
- openlp/resources/openlp_rc.py \
- openlp/resources/__init__.py \
- openlp/ui/forms/about.py \
- openlp/ui/forms/mainwindow.py \
- openlp/core/plugin.py \
- openlp/core/xmlrootclass.py \
- openlp/song/__init__.py \
- openlp/song/song.py \
- openlp/song/test/test_song_opensong.py \
- openlp/song/test/test_song_basic.py \
- openlp/song/test/test_song_text.py \
- openlp/plugins/biblemanager/__init__.py \
- openlp/plugins/biblemanager/BibleDBImpl.py \
- openlp/plugins/biblemanager/BibleManager.py \
- openlp/plugins/biblemanager/BibleHTTPImpl.py \
- openlp/plugins/biblemanager/test/__init__.py \
- openlp/plugins/biblemanager/test/test_bibleManager.py
-
-FORMS = openlp/resources/forms/mainwindow.ui \
- openlp/resources/forms/settings.ui \
- openlp/resources/forms/themewizard.ui \
- openlp/resources/forms/about.ui \
- openlp/resources/forms/editsongform.ui \
- openlp/resources/forms/alertform.ui \
- openlp/resources/forms/openlpimportform.ui \
- openlp/resources/forms/openlpexportform.ui
-
-TRANSLATIONS = openlp_en.ts
-
diff --git a/openlp.pyw b/openlp.pyw
index 4e5e7736a..3909046c7 100755
--- a/openlp.pyw
+++ b/openlp.pyw
@@ -27,7 +27,7 @@ from openlp.core.lib import Receiver
logging.basicConfig(level=logging.DEBUG,
format=u'%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
- datefmt=u'%m-%d %H:%M',
+ datefmt=u'%m-%d %H:%M:%S',
filename=u'openlp.log',
filemode=u'w')
diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py
index 1c2de9e04..c49943e0f 100644
--- a/openlp/core/lib/renderer.py
+++ b/openlp/core/lib/renderer.py
@@ -114,7 +114,6 @@ class Renderer:
def render_screen(self, screennum):
log.debug(u'render screen\n %s %s ', screennum, self.words[screennum])
- import time
t=0.0
words=self.words[screennum]
retval=self._render_lines(words)
@@ -173,7 +172,6 @@ class Renderer:
else:
p.fillRect(self._paint.rect(), QtGui.QColor(u'#000000'))
p.end()
- log.debug(u'render background done')
def split_set_of_lines(self, lines, footer):
@@ -252,7 +250,7 @@ class Renderer:
def render_lines(self, lines, footer_lines=None):
"""render a set of lines according to the theme, return bounding box"""
- #log.debug(u'_render_lines %s', lines)
+ log.debug(u'_render_lines %s', lines)
bbox=self._render_lines_unaligned(lines, False) # Main font
if footer_lines is not None:
@@ -264,11 +262,8 @@ class Renderer:
bbox=self._render_lines_unaligned(lines, False, (x, y))
if footer_lines is not None:
- #x, y = self._correctAlignment(self._rect_footer, bbox1)
bbox=self._render_lines_unaligned(footer_lines, True, (self._rect_footer.left(), self._rect_footer.top()) )
- log.debug(u'render lines DONE')
-
return bbox
def _render_lines_unaligned(self, lines, footer, tlcorner=(0,0)):
@@ -279,7 +274,7 @@ class Renderer:
than a screenful (eg. by using split_set_of_lines)
Returns the bounding box of the text as QRect"""
- log.debug(u'render unaligned %s', lines)
+ log.debug(u'render lines unaligned %s', lines)
x, y=tlcorner
brx=x
bry=y
@@ -298,7 +293,7 @@ class Renderer:
p.setPen(QtGui.QPen(QtGui.QColor(0,0,255)))
p.drawRect(retval)
p.end()
- log.debug(u'render unaligned DONE')
+
return retval
@@ -410,7 +405,7 @@ class Renderer:
return width and height of text as a tuple (w,h)"""
# setup defaults
- #log.debug(u"_get_extent_and_render %s %s %s ", [line], tlcorner, draw)
+ log.debug(u'_get_extent_and_render %s %s %s ', [line], tlcorner, draw)
p=QtGui.QPainter()
p.begin(self._paint)
# 'twould be more efficient to set this once when theme changes
diff --git a/openlp/core/lib/rendermanager.py b/openlp/core/lib/rendermanager.py
index b891ce0a0..dbb7ead2a 100644
--- a/openlp/core/lib/rendermanager.py
+++ b/openlp/core/lib/rendermanager.py
@@ -18,6 +18,7 @@ this program; if not, write to the Free Software Foundation, Inc., 59 Temple
Place, Suite 330, Boston, MA 02111-1307 USA
"""
import logging
+import time
import os, os.path
import sys
from PyQt4 import QtGui, QtCore, Qt
@@ -41,21 +42,20 @@ class RenderManager:
self.current_display = 0
self.renderer = Renderer(None)
self.calculate_default(self.screen_list[self.current_display]['size'])
- self.frame = None
def set_override_theme(self, theme):
- log.debug("set override theme to %s", theme)
+ log.debug(u'set override theme to %s', theme)
if theme is not None:
self.theme = theme
else:
self.theme = self.default_theme
- log.debug("theme is now %s", self.theme)
+ log.debug(u'theme is now %s', self.theme)
self.themedata = self.theme_manager.getThemeData(self.theme)
self.renderer.set_theme(self.themedata)
self.build_text_rectangle(self.themedata)
def build_text_rectangle(self, theme):
-
+ log.debug(u'build_text_rectangle ')
main_rect = None
footer_rect = None
@@ -74,6 +74,7 @@ class RenderManager:
self.renderer.set_text_rectangle(main_rect,footer_rect)
def generate_preview(self, themedata):
+ log.debug(u'generate preview ')
self.calculate_default(QtCore.QSize(800,600))
self.renderer.set_theme(themedata)
self.build_text_rectangle(themedata)
@@ -94,25 +95,23 @@ class RenderManager:
return frame
def format_slide(self, words, footer):
- self.calculate_default(QtCore.QSize(800,600))
- frame = QtGui.QPixmap(self.width, self.height)
- self.renderer.set_paint_dest(frame)
+ log.debug(u'format slide')
+ self.calculate_default(self.screen_list[self.current_display]['size'])
+ self.renderer.set_paint_dest(QtGui.QPixmap(self.width, self.height))
return self.renderer.format_slide(words, footer)
- def generate_slide(self,main_text, footer_text, preview=True):
- if preview == True:
- self.calculate_default(QtCore.QSize(800,600))
+ def generate_slide(self,main_text, footer_text):
+ log.debug(u'generate slide')
+ self.calculate_default(self.screen_list[self.current_display]['size'])
frame = QtGui.QPixmap(self.width, self.height)
self.renderer.set_paint_dest(frame)
-
answer=self.renderer.render_lines(main_text, footer_text)
return frame
def calculate_default(self, screen):
+ log.debug(u'calculate default %s' , screen)
self.width = screen.width()
self.height = screen.height()
+ log.debug(u'calculate default %d,%d' , self.width, self.height)
self.footer_start = int(self.height*0.95) # 95% is start of footer
- #update the rederer frame
- self.frame = QtGui.QPixmap(self.width, self.height)
- self.renderer.set_paint_dest(self.frame)
diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py
index 1e438ff1c..543fa41ca 100644
--- a/openlp/core/lib/serviceitem.py
+++ b/openlp/core/lib/serviceitem.py
@@ -19,7 +19,8 @@ Place, Suite 330, Boston, MA 02111-1307 USA
"""
import logging
import types
-from PyQt4 import QtCore, QtGui
+import time
+
from PyQt4.QtCore import *
from PyQt4.QtGui import *
@@ -51,34 +52,34 @@ class ServiceItem():
def addIcon(self, icon):
ButtonIcon = None
- if type(icon) is QtGui.QIcon:
+ if type(icon) is QIcon:
ButtonIcon = icon
elif type(icon) is types.StringType or type(icon) is types.UnicodeType:
- ButtonIcon = QtGui.QIcon()
+ ButtonIcon = QIcon()
if icon.startswith(u':/'):
- ButtonIcon.addPixmap(QtGui.QPixmap(icon), QtGui.QIcon.Normal,
- QtGui.QIcon.Off)
+ ButtonIcon.addPixmap(QPixmap(icon), QIcon.Normal,
+ QIcon.Off)
else:
- ButtonIcon.addPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(icon)),
- QtGui.QIcon.Normal, QtGui.QIcon.Off)
+ ButtonIcon.addPixmap(QPixmap.fromImage(QImage(icon)),
+ QIcon.Normal, QIcon.Off)
self.iconic_representation = ButtonIcon
def render(self):
"""
- The render method is what the plugin uses to render it's meda to the
- screen.
+ The render method is what renders the frames for the screen.
"""
log.debug(u'Render called')
if self.theme == None:
self.render_manager.set_override_theme(None)
else:
self.render_manager.set_override_theme(self.theme)
-
+ log.debug(u'Formatting slides')
for slide in self.raw_slides:
self.format_slides.append(self.render_manager.format_slide(slide, False))
+ log.debug(u'Rendering slides')
for slide in self.format_slides:
+ self.frames.append(self.render_manager.generate_slide(slide, self.raw_footer))
- self.frames.append(self.render_manager.generate_slide(slide, self.raw_footer, False))
def get_parent_node(self):
"""
diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py
index 628dcff1e..a5eb85076 100644
--- a/openlp/core/ui/maindisplay.py
+++ b/openlp/core/ui/maindisplay.py
@@ -29,6 +29,9 @@ class MainDisplay(QtGui.QWidget):
self.setWindowTitle(u'OpenLP Display')
self.screens = screens
self.display = QtGui.QLabel(self)
+ self.display.setScaledContents(True)
+ self.displayBlank = False
+ self.blankFrame= None
def setup(self, screenNumber):
"""
@@ -51,8 +54,24 @@ class MainDisplay(QtGui.QWidget):
else:
self.showMinimized()
+ painter=QtGui.QPainter()
+ self.blankFrame = QtGui.QPixmap(800, 600)
+ painter.begin(self.blankFrame)
+ painter.fillRect(self.blankFrame.rect(), QtGui.QColor(u'#000000'))
+
def frameView(self, frame):
- self.display.setPixmap(frame)
+ if self.displayBlank == False:
+ self.display.setPixmap(frame)
+ self.frame = frame
+
+ def blankDisplay(self):
+ if self.displayBlank == False:
+ self.displayBlank = True
+ self.display.setPixmap(self.blankFrame)
+ else:
+ self.displayBlank = False
+ self.frameView(self.frame)
+
def kill(self):
pass
diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py
index 386976772..853d669cf 100644
--- a/openlp/core/ui/mainwindow.py
+++ b/openlp/core/ui/mainwindow.py
@@ -97,8 +97,6 @@ class MainWindow(object):
# Initialise SlideControllers
log.info(u'Set Up SlideControllers')
- self.PreviewController.isLive = False
- self.LiveController.isLive = True
self.LiveController.mainDisplay = self.main_display
def setupUi(self):
@@ -130,8 +128,8 @@ class MainWindow(object):
self.ControlSplitter.setOrientation(QtCore.Qt.Horizontal)
self.ControlSplitter.setObjectName(u'ControlSplitter')
self.MainContentLayout.addWidget(self.ControlSplitter)
- self.PreviewController = SlideController(self.ControlSplitter)
- self.LiveController = SlideController(self.ControlSplitter)
+ self.PreviewController = SlideController(self.ControlSplitter, False)
+ self.LiveController = SlideController(self.ControlSplitter, True)
self.MenuBar = QtGui.QMenuBar(self.main_window)
self.MenuBar.setGeometry(QtCore.QRect(0, 0, 1087, 27))
self.MenuBar.setObjectName(u'MenuBar')
@@ -296,10 +294,10 @@ class MainWindow(object):
QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.ToolsAddToolItem.setIcon(AddToolIcon)
self.ToolsAddToolItem.setObjectName(u'ToolsAddToolItem')
- self.action_Preview_Pane = QtGui.QAction(self.main_window)
- self.action_Preview_Pane.setCheckable(True)
- self.action_Preview_Pane.setChecked(True)
- self.action_Preview_Pane.setObjectName(u'action_Preview_Pane')
+ self.action_Preview_Panel = QtGui.QAction(self.main_window)
+ self.action_Preview_Panel.setCheckable(True)
+ self.action_Preview_Panel.setChecked(True)
+ self.action_Preview_Panel.setObjectName(u'action_Preview_Panel')
self.ModeLiveItem = QtGui.QAction(self.main_window)
self.ModeLiveItem.setObjectName(u'ModeLiveItem')
self.FileImportMenu.addAction(self.ImportThemeItem)
@@ -322,7 +320,7 @@ class MainWindow(object):
self.OptionsViewMenu.addAction(self.ViewServiceManagerItem)
self.OptionsViewMenu.addAction(self.ViewThemeManagerItem)
self.OptionsViewMenu.addSeparator()
- self.OptionsViewMenu.addAction(self.action_Preview_Pane)
+ self.OptionsViewMenu.addAction(self.action_Preview_Panel)
self.OptionsLanguageMenu.addAction(self.LanguageEnglishItem)
self.OptionsLanguageMenu.addSeparator()
self.OptionsLanguageMenu.addAction(self.LanguageTranslateItem)
@@ -353,8 +351,8 @@ class MainWindow(object):
QtCore.SIGNAL(u'triggered(bool)'), self.ServiceManagerDock.setVisible)
QtCore.QObject.connect(self.ViewThemeManagerItem,
QtCore.SIGNAL(u'triggered(bool)'), self.ThemeManagerDock.setVisible)
- QtCore.QObject.connect(self.action_Preview_Pane,
- QtCore.SIGNAL(u'toggled(bool)'), self.PreviewController.Pane.setVisible)
+ QtCore.QObject.connect(self.action_Preview_Panel,
+ QtCore.SIGNAL(u'toggled(bool)'), self.PreviewController.Panel.setVisible)
QtCore.QObject.connect(self.MediaManagerDock,
QtCore.SIGNAL(u'visibilityChanged(bool)'), self.ViewMediaManagerItem.setChecked)
QtCore.QObject.connect(self.ServiceManagerDock,
@@ -451,7 +449,7 @@ class MainWindow(object):
self.LanguageEnglishItem.setStatusTip(translate(u'main_window', u'Set the interface language to English'))
self.ToolsAddToolItem.setText(translate(u'main_window', u'&Add Tool...'))
self.ToolsAddToolItem.setStatusTip(translate(u'main_window', u'Add an application to the list of tools'))
- self.action_Preview_Pane.setText(translate(u'main_window', u'&Preview Pane'))
+ self.action_Preview_Panel.setText(translate(u'main_window', u'&Preview Pane'))
self.ModeLiveItem.setText(translate(u'main_window', u'&Live'))
def show(self):
diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py
index 9905a91ed..f1e721a14 100644
--- a/openlp/core/ui/servicemanager.py
+++ b/openlp/core/ui/servicemanager.py
@@ -21,15 +21,16 @@ import os
from time import sleep
from copy import deepcopy
-from PyQt4 import *
-from PyQt4 import QtCore, QtGui
+
from PyQt4.QtCore import *
from PyQt4.QtGui import *
+
# from openlp.core.resources import *
# from openlp.core.ui import AboutForm, AlertForm, SettingsForm, SlideController
from openlp.core.lib import OpenLPToolbar
from openlp.core.lib import ServiceItem
from openlp.core.lib import RenderManager
+from openlp.core import translate
# from openlp.core import PluginManager
import logging
@@ -47,6 +48,9 @@ class ServiceData(QAbstractItemModel):
self.items=[]
log.info("Starting")
+ def clearItems(self):
+ self.items = []
+
def columnCount(self, parent):
return 1; # always only a single column (for now)
@@ -122,33 +126,73 @@ class ServiceManager(QWidget):
def __init__(self, parent):
QWidget.__init__(self)
self.parent=parent
- self.Layout = QtGui.QVBoxLayout(self)
+ self.Layout = QVBoxLayout(self)
self.Layout.setSpacing(0)
self.Layout.setMargin(0)
self.Toolbar = OpenLPToolbar(self)
- self.Toolbar.addToolbarButton("Move to top", ":/services/service_top.png")
- self.Toolbar.addToolbarButton("Move up", ":/services/service_up.png")
- self.Toolbar.addToolbarButton("Move down", ":/services/service_down.png")
- self.Toolbar.addToolbarButton("Move to bottom", ":/services/service_bottom.png")
+ self.Toolbar.addToolbarButton("Move to top", ":/services/service_top.png",
+ translate(u'ServiceManager', u'Move to start'), self.onServiceTop)
+ self.Toolbar.addToolbarButton("Move up", ":/services/service_up.png",
+ translate(u'ServiceManager', u'Move up order'), self.onServiceUp)
+ self.Toolbar.addToolbarButton("Move down", ":/services/service_down.png",
+ translate(u'ServiceManager', u'Move down order'), self.onServiceDown)
+ self.Toolbar.addToolbarButton("Move to bottom", ":/services/service_bottom.png",
+ translate(u'ServiceManager', u'Move to end'), self.onServiceEnd)
self.Toolbar.addSeparator()
- self.Toolbar.addToolbarButton("New Service", ":/services/service_new.png")
- self.Toolbar.addToolbarButton("Save Service", ":/services/service_save.png")
+ self.Toolbar.addToolbarButton("New Service", ":/services/service_new.png",
+ translate(u'ServiceManager', u'Create a new Service'), self.onNewService)
+ self.Toolbar.addToolbarButton("Delete From Service", ":/services/service_delete.png",
+ translate(u'ServiceManager', u'Delete From Service'), self.onDeleteFromService)
self.Toolbar.addSeparator()
- self.ThemeComboBox = QtGui.QComboBox(self.Toolbar)
- self.ThemeComboBox.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToContents)
- self.ThemeWidget = QtGui.QWidgetAction(self.Toolbar)
+ self.Toolbar.addToolbarButton("Save Service", ":/services/service_save.png",
+ translate(u'ServiceManager', u'Save Service'), self.onSaveService)
+ self.Toolbar.addToolbarButton("Load Service", ":/services/service_open.png",
+ translate(u'ServiceManager', u'Load Existing'), self.onLoadService)
+
+ self.Toolbar.addSeparator()
+ self.ThemeComboBox = QComboBox(self.Toolbar)
+ self.ThemeComboBox.setSizeAdjustPolicy(QComboBox.AdjustToContents)
+ self.ThemeWidget = QWidgetAction(self.Toolbar)
self.ThemeWidget.setDefaultWidget(self.ThemeComboBox)
self.Toolbar.addAction(self.ThemeWidget)
self.Layout.addWidget(self.Toolbar)
- self.TreeView = QtGui.QTreeView(self)
+ self.TreeView = QTreeView(self)
self.service_data=ServiceData()
self.TreeView.setModel(self.service_data)
+ self.TreeView.setAlternatingRowColors(True)
self.Layout.addWidget(self.TreeView)
- QtCore.QObject.connect(self.ThemeComboBox,
- QtCore.SIGNAL("activated(int)"), self.onThemeComboBoxSelected)
+ QObject.connect(self.ThemeComboBox,
+ SIGNAL("activated(int)"), self.onThemeComboBoxSelected)
+
+ def onServiceTop(self):
+ pass
+
+ def onServiceUp(self):
+ pass
+
+ def onServiceDown(self):
+ pass
+
+ def onServiceEnd(self):
+ pass
+
+ def onNewService(self):
+ self.service_data.clearItems()
+
+ def onDeleteFromService(self):
+ pass
+
+ def onSaveService(self):
+ Pass
+
+ def onLoadService(self):
+ Pass
+
+
+
def onThemeComboBoxSelected(self, currentIndex):
self.renderManager.default_theme = self.ThemeComboBox.currentText()
diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py
index 2ffbf9c01..079d2f64e 100644
--- a/openlp/core/ui/slidecontroller.py
+++ b/openlp/core/ui/slidecontroller.py
@@ -20,10 +20,12 @@ Place, Suite 330, Boston, MA 02111-1307 USA
import logging
import os
-from PyQt4 import QtCore, QtGui
from PyQt4.QtCore import *
from PyQt4.QtGui import *
+from openlp.core.lib import OpenLPToolbar
+from openlp.core import translate
+
class SlideData(QAbstractListModel):
"""
Tree of items for an order of Theme.
@@ -46,14 +48,14 @@ class SlideData(QAbstractListModel):
def columnCount(self, parent):
return 1
- def rowCount(self, parent):
+ def rowCount(self, parent=None):
return len(self.items)
def insertRow(self, row, frame):
self.beginInsertRows(QModelIndex(),row,row)
log.info(u'insert row %d' % row)
# create a preview image
- frame1 = frame.scaled(QtCore.QSize(350,260))
+ frame1 = frame.scaled(QSize(350,260))
self.items.insert(row,(frame1))
log.info(u'Items: %s' % self.items)
self.endInsertRows()
@@ -99,48 +101,112 @@ class SlideData(QAbstractListModel):
return filelist
-class SlideController(QtGui.QWidget):
+class SlideController(QWidget):
global log
log=logging.getLogger(u'SlideController')
- def __init__(self, control_splitter):
- QtGui.QWidget.__init__(self)
- self.Pane = QtGui.QWidget(control_splitter)
- self.Splitter = QtGui.QSplitter(self.Pane)
- self.Splitter.setOrientation(QtCore.Qt.Vertical)
+ def __init__(self, control_splitter, isLive):
+ QWidget.__init__(self)
+ self.isLive = isLive
+ self.Panel = QWidget(control_splitter)
+ self.Splitter = QSplitter(self.Panel)
+ self.Splitter.setOrientation(Qt.Vertical)
- self.PaneLayout = QtGui.QVBoxLayout(self.Pane)
- self.PaneLayout.addWidget(self.Splitter)
- self.PaneLayout.setSpacing(50)
- self.PaneLayout.setMargin(0)
+ self.PanelLayout = QVBoxLayout(self.Panel)
+ self.PanelLayout.addWidget(self.Splitter)
+ self.PanelLayout.setSpacing(50)
+ self.PanelLayout.setMargin(0)
- self.Controller = QtGui.QScrollArea(self.Splitter)
+ self.Controller = QScrollArea(self.Splitter)
self.Controller.setWidgetResizable(True)
- self.PreviewListView = QtGui.QListView(self.Splitter)
+ self.PreviewListView = QListView(self.Splitter)
self.PreviewListView.setAlternatingRowColors(True)
self.PreviewListData = SlideData()
self.PreviewListView.setModel(self.PreviewListData)
- self.Controller.setGeometry(QtCore.QRect(0, 0, 828, 536))
+ self.Controller.setGeometry(QRect(0, 0, 828, 536))
self.Controller.setWidget(self.PreviewListView)
- self.SlidePreview = QtGui.QLabel(self.Splitter)
- sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
+ self.Toolbar = OpenLPToolbar(self.Splitter)
+ sizeToolbarPolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
+ sizeToolbarPolicy.setHorizontalStretch(0)
+ sizeToolbarPolicy.setVerticalStretch(0)
+ sizeToolbarPolicy.setHeightForWidth(self.Toolbar.sizePolicy().hasHeightForWidth())
+
+ if self.isLive:
+ self.Toolbar.addToolbarButton("First Slide", ":/slides/slide_first.png",
+ translate(u'SlideController', u'Move to first'), self.onSlideSelectedFirst)
+ self.Toolbar.addToolbarButton("Last Slide", ":/slides/slide_previous.png",
+ translate(u'SlideController', u'Move to previous'), self.onSlideSelectedPrevious)
+ self.Toolbar.addToolbarButton("First Slide", ":/slides/slide_next.png",
+ translate(u'SlideController', u'Move to next'), self.onSlideSelectedNext)
+ if self.isLive:
+ self.Toolbar.addToolbarButton("Last Slide", ":/slides/slide_last.png",
+ translate(u'SlideController', u'Move to last'), self.onSlideSelectedLast)
+ self.Toolbar.addSeparator()
+ self.Toolbar.addToolbarButton("Close Sscreen", ":/slides/slide_close.png",
+ translate(u'SlideController', u'Close Screen'), self.onBlankScreen)
+
+ self.Toolbar.setSizePolicy(sizeToolbarPolicy)
+
+ self.SlidePreview = QLabel(self.Splitter)
+ sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.SlidePreview.sizePolicy().hasHeightForWidth())
self.SlidePreview.setSizePolicy(sizePolicy)
- self.SlidePreview.setMinimumSize(QtCore.QSize(250, 190))
- self.SlidePreview.setFrameShape(QtGui.QFrame.WinPanel)
- self.SlidePreview.setFrameShadow(QtGui.QFrame.Sunken)
+ self.SlidePreview.setMinimumSize(QSize(250, 190))
+ self.SlidePreview.setFrameShape(QFrame.WinPanel)
+ self.SlidePreview.setFrameShadow(QFrame.Sunken)
self.SlidePreview.setLineWidth(1)
self.SlidePreview.setScaledContents(True)
self.SlidePreview.setObjectName("SlidePreview")
- QtCore.QObject.connect(self.PreviewListView,
- QtCore.SIGNAL("clicked(QModelIndex)"), self.onSlideSelected)
+ QObject.connect(self.PreviewListView,
+ SIGNAL("clicked(QModelIndex)"), self.onSlideSelected)
+ def onSlideSelectedFirst(self):
+ row = self.PreviewListData.createIndex(0, 0)
+ if row.isValid():
+ self.PreviewListView.selectionModel().setCurrentIndex(row, QItemSelectionModel.SelectCurrent)
+ self.onSlideSelected(row)
+
+ def onSlideSelectedNext(self):
+ indexes = self.PreviewListView.selectedIndexes()
+ rowNumber = 0
+ for index in indexes:
+ if index.row() == self.PreviewListData.rowCount() - 1:
+ rowNumber = 0
+ else:
+ rowNumber = index.row() + 1
+ row = self.PreviewListData.createIndex(rowNumber , 0)
+ if row.isValid():
+ self.PreviewListView.selectionModel().setCurrentIndex(row, QItemSelectionModel.SelectCurrent)
+ self.onSlideSelected(row)
+
+
+ def onSlideSelectedPrevious(self):
+ indexes = self.PreviewListView.selectedIndexes()
+ rowNumber = 0
+ for index in indexes:
+ if index.row() == 0:
+ rowNumber = self.PreviewListData.rowCount() - 1
+ else:
+ rowNumber = index.row() - 1
+ row = self.PreviewListData.createIndex(rowNumber , 0)
+ if row.isValid():
+ self.PreviewListView.selectionModel().setCurrentIndex(row, QItemSelectionModel.SelectCurrent)
+ self.onSlideSelected(row)
+
+ def onSlideSelectedLast(self):
+ row = self.PreviewListData.createIndex(self.PreviewListData.rowCount() - 1 , 0)
+ if row.isValid():
+ self.PreviewListView.selectionModel().setCurrentIndex(row, QItemSelectionModel.SelectCurrent)
+ self.onSlideSelected(row)
+
+ def onBlankScreen(self):
+ self.mainDisplay.blankDisplay()
def onSlideSelected(self, index):
frame = self.PreviewListData.getValue(index)
@@ -152,11 +218,17 @@ class SlideController(QtGui.QWidget):
self.mainDisplay.frameView(frame)
def addServiceItem(self, serviceitem):
+ log.debug(u'addServiceItem')
self.serviceitem = serviceitem
self.serviceitem.render()
self.PreviewListData.clearItems()
for frame in self.serviceitem.frames:
self.PreviewListData.addRow(frame)
+ row = self.PreviewListData.createIndex(0, 0)
+ if row.isValid():
+ self.PreviewListView.selectionModel().setCurrentIndex(row, QItemSelectionModel.SelectCurrent)
+ self.onSlideSelected(row)
+
def render(self):
pass
diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py
index 7de4d32bf..40a16e020 100644
--- a/openlp/core/ui/thememanager.py
+++ b/openlp/core/ui/thememanager.py
@@ -164,12 +164,13 @@ class ThemeManager(QWidget):
translate(u'ThemeManager', u'Export a theme'), self.onExportTheme)
self.ThemeWidget = QtGui.QWidgetAction(self.Toolbar)
self.Layout.addWidget(self.Toolbar)
+
self.ThemeListView = QtGui.QListView(self)
self.themeData = ThemeData()
self.ThemeListView.setModel(self.themeData)
self.ThemeListView.setAlternatingRowColors(True)
self.Layout.addWidget(self.ThemeListView)
- self.ThemeListView.setAlternatingRowColors(True)
+
self.themelist = []
self.path = os.path.join(ConfigHelper.get_data_path(), u'themes')
self.checkThemesExists(self.path)
diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py
index b4c24459a..9f9a2e825 100644
--- a/openlp/plugins/bibles/lib/mediaitem.py
+++ b/openlp/plugins/bibles/lib/mediaitem.py
@@ -371,10 +371,10 @@ class BibleMediaItem(MediaManagerItem):
if len(raw_footer) <= 1:
raw_footer.append(book)
- service_item.theme = None
-
- service_item.raw_slides = raw_slides
- service_item.raw_footer = raw_footer
+ if len(raw_slides) > 0:
+ service_item.theme = None
+ service_item.raw_slides = raw_slides
+ service_item.raw_footer = raw_footer
def formatVerse(self, old_chapter, chapter, verse, opening, closing):
loc = opening
diff --git a/openlp/plugins/custom/lib/mediaitem.py b/openlp/plugins/custom/lib/mediaitem.py
index 3f24ac285..0e6a73e3d 100644
--- a/openlp/plugins/custom/lib/mediaitem.py
+++ b/openlp/plugins/custom/lib/mediaitem.py
@@ -187,6 +187,7 @@ class CustomMediaItem(MediaManagerItem):
self.CustomListData.deleteRow(index)
def onCustomPreviewClick(self):
+ log.debug(u'Custom Preview Requested')
service_item = ServiceItem(self.parent)
service_item.addIcon( ":/media/media_song.png")
service_item.render_manager = self.parent.render_manager
@@ -194,6 +195,7 @@ class CustomMediaItem(MediaManagerItem):
self.parent.preview_controller.addServiceItem(service_item)
def onCustomLiveClick(self):
+ log.debug(u'Custom Live Requested')
service_item = ServiceItem(self.parent)
service_item.addIcon( ":/media/media_song.png")
service_item.render_manager = self.parent.render_manager
@@ -201,6 +203,7 @@ class CustomMediaItem(MediaManagerItem):
self.parent.live_controller.addServiceItem(service_item)
def onCustomAddClick(self):
+ log.debug(u'Custom Add Requested')
service_item = ServiceItem(self.parent)
service_item.addIcon( ":/media/media_song.png")
service_item.render_manager = self.parent.render_manager
@@ -226,6 +229,7 @@ class CustomMediaItem(MediaManagerItem):
for verse in verseList:
raw_slides.append(verse[1])
raw_footer.append(title + u' '+ credit)
- service_item.title = title
- service_item.raw_slides = raw_slides
- service_item.raw_footer = raw_footer
+ if theme is not None:
+ service_item.title = title
+ service_item.raw_slides = raw_slides
+ service_item.raw_footer = raw_footer