Various changes see loog for details

bzr-revno: 516
This commit is contained in:
Tim Bentley 2009-09-01 20:35:02 +01:00
commit 8df57d5bad
15 changed files with 215 additions and 253 deletions

View File

@ -20,7 +20,8 @@ Place, Suite 330, Boston, MA 02111-1307 USA
""" """
import sys import sys
import logging import logging, logging.handlers
from optparse import OptionParser
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
@ -28,9 +29,15 @@ from openlp.core.lib import Receiver
from openlp.core.resources import * from openlp.core.resources import *
from openlp.core.ui import MainWindow, SplashScreen from openlp.core.ui import MainWindow, SplashScreen
logging.basicConfig(level=logging.DEBUG, filename=u'openlp.log'
format=u'%(asctime)s:%(msecs)3d %(name)-15s %(levelname)-8s %(message)s', log = logging.getLogger()
datefmt=u'%m-%d %H:%M:%S', filename=u'openlp.log', filemode=u'w') log.setLevel(logging.INFO)
logfile = logging.handlers.RotatingFileHandler(filename ,maxBytes=200000, backupCount=5)
logfile.setLevel(logging.DEBUG)
logfile.setFormatter(logging.Formatter(u'%(asctime)s %(name)-15s %(levelname)-8s %(message)s'))
log.addHandler(logfile)
class OpenLP(QtGui.QApplication): class OpenLP(QtGui.QApplication):
""" """
@ -38,8 +45,7 @@ class OpenLP(QtGui.QApplication):
class in order to provide the core of the application. class in order to provide the core of the application.
""" """
global log global log
log = logging.getLogger(u'OpenLP Application') log.info(u'OpenLP Application Loaded')
log.info(u'Application Loaded')
def run(self): def run(self):
""" """
@ -74,10 +80,19 @@ class OpenLP(QtGui.QApplication):
self.splash.finish(self.mainWindow) self.splash.finish(self.mainWindow)
sys.exit(app.exec_()) sys.exit(app.exec_())
def main():
usage = "usage: %prog [options] arg1 arg2"
parser = OptionParser(usage=usage)
parser.add_option("-d", "--debug",dest="debug",action="store_true",
help="Switch on Debugging ")
(options, args) = parser.parse_args()
if options.debug is not None:
log.setLevel(logging.DEBUG)
if __name__ == u'__main__': if __name__ == u'__main__':
""" """
Instantiate and run the application. Instantiate and run the application.
""" """
main()
app = OpenLP(sys.argv) app = OpenLP(sys.argv)
#import cProfile #import cProfile
#cProfile.run("app.run()", "profile.out") #cProfile.run("app.run()", "profile.out")

View File

@ -234,17 +234,20 @@ class MediaManagerItem(QtGui.QWidget):
def onPreviewClick(self): def onPreviewClick(self):
log.debug(self.PluginTextShort+u' Preview Requested') log.debug(self.PluginTextShort+u' Preview Requested')
service_item = self.buildServiceItem() service_item = self.buildServiceItem()
self.parent.preview_controller.addServiceItem(service_item) if service_item is not None:
self.parent.preview_controller.addServiceItem(service_item)
def onLiveClick(self): def onLiveClick(self):
log.debug(self.PluginTextShort + u' Live Requested') log.debug(self.PluginTextShort + u' Live Requested')
service_item = self.buildServiceItem() service_item = self.buildServiceItem()
self.parent.live_controller.addServiceItem(service_item) if service_item is not None:
self.parent.live_controller.addServiceItem(service_item)
def onAddClick(self): def onAddClick(self):
log.debug(self.PluginTextShort+u' Add Requested') log.debug(self.PluginTextShort+u' Add Requested')
service_item = self.buildServiceItem() service_item = self.buildServiceItem()
self.parent.service_manager.addServiceItem(service_item) if service_item is not None:
self.parent.service_manager.addServiceItem(service_item)
def buildServiceItem(self): def buildServiceItem(self):
""" """
@ -252,6 +255,8 @@ class MediaManagerItem(QtGui.QWidget):
""" """
service_item = ServiceItem(self.parent) service_item = ServiceItem(self.parent)
service_item.addIcon(u':/media/media_'+self.PluginTextShort.lower()+u'.png') service_item.addIcon(u':/media/media_'+self.PluginTextShort.lower()+u'.png')
self.generateSlideData(service_item) if self.generateSlideData(service_item):
self.ListView.clearSelection() self.ListView.clearSelection()
return service_item return service_item
else:
return None

View File

@ -147,7 +147,8 @@ class Renderer(object):
# print words # print words
verses = [] verses = []
words = words.replace(u'\r\n', u'\n') words = words.replace(u'\r\n', u'\n')
verses_text = words.split(u'\n\n') verses_text = words.split(u'\n')
#print verses_text
text = [] text = []
for verse in verses_text: for verse in verses_text:
lines = verse.split(u'\n') lines = verse.split(u'\n')
@ -173,7 +174,10 @@ class Renderer(object):
split_lines = [] split_lines = []
count = 0 count = 0
for line in text: 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: while len(line) > 0:
# print "C1", line , len(line) # print "C1", line , len(line)
if len(line) > ave_line_width: if len(line) > ave_line_width:
@ -391,29 +395,8 @@ class Renderer(object):
Defaults to *False*. Whether or not this is a live screen. Defaults to *False*. Whether or not this is a live screen.
""" """
x, y = tlcorner x, y = tlcorner
# We draw the text to see how big it is and then iterate to make it fit
# when we line wrap we do in in the "lyrics" style, so the second line is
# right aligned with a "hanging indent"
#print "----------------------------"
#print line
# words = line.split(u' ')
# thisline = u' '.join(words)
# lastword = len(words)
# lines = []
maxx = self._rect.width(); maxx = self._rect.width();
maxy = self._rect.height(); maxy = self._rect.height();
# while (len(words) > 0):
# w , h = self._get_extent_and_render(thisline, footer)
# print "m", w, h, x, maxx
# rhs = w + x
# if rhs < maxx - self._right_margin:
# lines.append(thisline)
# words = words[lastword:]
# thisline = ' '.join(words)
# lastword = len(words)
# else:
# lastword -= 1
# thisline = ' '.join(words[:lastword])
lines = [] lines = []
lines.append(line) lines.append(line)
startx = x startx = x

View File

@ -58,7 +58,7 @@ class RenderManager(object):
else: else:
self.current_display = screen_number self.current_display = screen_number
self.renderer = Renderer() self.renderer = Renderer()
self.calculate_default(self.screen_list[self.current_display][u'size']) #self.calculate_default(self.screen_list[self.current_display][u'size'])
self.theme = u'' self.theme = u''
self.service_theme = u'' self.service_theme = u''
self.global_style = u'' self.global_style = u''
@ -133,6 +133,7 @@ class RenderManager(object):
def build_text_rectangle(self, theme): def build_text_rectangle(self, theme):
""" """
Builds a text block using the settings in ``theme``. Builds a text block using the settings in ``theme``.
One is needed per slide
``theme`` ``theme``
The theme to build a text block for. The theme to build a text block for.
@ -149,8 +150,8 @@ class RenderManager(object):
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: else:
footer_rect = QtCore.QRect(int(theme.font_footer_x),int(theme.font_footer_y), 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) int(theme.font_footer_width)-1, int(theme.font_footer_height) - 1)
self.renderer.set_text_rectangle(main_rect,footer_rect) self.renderer.set_text_rectangle(main_rect, footer_rect)
def generate_preview(self, themedata): def generate_preview(self, themedata):
""" """
@ -178,15 +179,15 @@ class RenderManager(object):
def format_slide(self, words): def format_slide(self, words):
""" """
Calculate how much text can fid on a slide. Calculate how much text can fit on a slide.
``words`` ``words``
The words to go on the slides. The words to go on the slides.
""" """
log.debug(u'format slide') log.debug(u'format slide')
self.calculate_default(self.screen_list[self.current_display][u'size']) #self.calculate_default(self.screen_list[self.current_display][u'size'])
self.build_text_rectangle(self.themedata) self.build_text_rectangle(self.themedata)
self.renderer.set_frame_dest(self.width, self.height) #self.renderer.set_frame_dest(self.width, self.height)
return self.renderer.format_slide(words, False) return self.renderer.format_slide(words, False)
def generate_slide(self, main_text, footer_text): def generate_slide(self, main_text, footer_text):
@ -200,7 +201,6 @@ class RenderManager(object):
The text for the slide footer. The text for the slide footer.
""" """
log.debug(u'generate slide') log.debug(u'generate slide')
self.calculate_default(self.screen_list[self.current_display][u'size'])
self.build_text_rectangle(self.themedata) self.build_text_rectangle(self.themedata)
self.renderer.set_frame_dest(self.width, self.height) self.renderer.set_frame_dest(self.width, self.height)
return self.renderer.generate_frame_from_lines(main_text, footer_text) return self.renderer.generate_frame_from_lines(main_text, footer_text)
@ -233,6 +233,7 @@ class RenderManager(object):
The QWidget instance of the screen. The QWidget instance of the screen.
""" """
log.debug(u'calculate default %s', screen) log.debug(u'calculate default %s', screen)
#size fixed so reflects the preview size.
if self.current_display == 0: if self.current_display == 0:
self.width = 1024 self.width = 1024
self.height = 768 self.height = 768

View File

@ -96,7 +96,6 @@ class ServiceItem(object):
self.frames.append({u'title': slide[u'title'], u'image': frame}) self.frames.append({u'title': slide[u'title'], u'image': frame})
elif self.service_item_type == ServiceType.Command: elif self.service_item_type == ServiceType.Command:
self.frames = self.service_frames self.frames = self.service_frames
self.service_frames = []
elif self.service_item_type == ServiceType.Image: elif self.service_item_type == ServiceType.Image:
for slide in self.service_frames: 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'])
@ -135,7 +134,7 @@ class ServiceItem(object):
frame_title = frame_title.split(u'\n')[0] 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, frame_title, command): def add_from_command(self, path , frame_title):
""" """
Add a slide from a command. Add a slide from a command.
@ -146,7 +145,8 @@ class ServiceItem(object):
The command of/for the slide. The command of/for the slide.
""" """
self.service_item_type = ServiceType.Command self.service_item_type = ServiceType.Command
self.service_frames.append({u'title': frame_title, u'command': command}) self.service_item_path = path
self.service_frames.append({u'title': frame_title, u'command': None})
def get_oos_repr(self): def get_oos_repr(self):
""" """
@ -168,6 +168,9 @@ class ServiceItem(object):
elif self.service_item_type == ServiceType.Image: elif self.service_item_type == ServiceType.Image:
for slide in self.service_frames: for slide in self.service_frames:
oos_data.append(slide[u'title']) oos_data.append(slide[u'title'])
elif self.service_item_type == ServiceType.Command:
for slide in self.service_frames:
oos_data.append(slide[u'title'])
return {u'header': oos_header, u'data': oos_data} return {u'header': oos_header, u'data': oos_data}
def set_from_oos(self, serviceitem, path=None): def set_from_oos(self, serviceitem, path=None):
@ -196,3 +199,7 @@ class ServiceItem(object):
filename = os.path.join(path, text_image) filename = os.path.join(path, text_image)
real_image = QtGui.QImage(unicode(filename)) real_image = QtGui.QImage(unicode(filename))
self.add_from_image(path, text_image, real_image) self.add_from_image(path, text_image, real_image)
elif self.service_item_type == ServiceType.Command:
for text_image in serviceitem[u'serviceitem'][u'data']:
filename = os.path.join(path, text_image)
self.add_from_command(path, text_image)

View File

@ -510,45 +510,60 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog):
self.VerticalComboBox.setCurrentIndex(int(self.theme.display_verticalAlign)) self.VerticalComboBox.setCurrentIndex(int(self.theme.display_verticalAlign))
def stateChanging(self, theme): def stateChanging(self, theme):
if theme.background_type == u'solid': if theme.background_mode == u'transparent':
self.Color1PushButton.setStyleSheet( self.Color1Label.setVisible(False)
u'background-color: %s' % unicode(theme.background_color)) self.Color1PushButton.setVisible(False)
self.Color1Label.setText(translate(u'ThemeManager', u'Background Color:')) self.Color2Label.setVisible(False)
self.Color1Label.setVisible(True) self.Color2PushButton.setVisible(False)
self.Color1PushButton.setVisible(True) self.ImageLabel.setVisible(False)
self.Color2Label.setVisible(False) self.ImageLineEdit.setVisible(False)
self.Color2PushButton.setVisible(False) self.ImageFilenameWidget.setVisible(False)
self.ImageLabel.setVisible(False) self.GradientLabel.setVisible(False)
self.ImageLineEdit.setVisible(False) self.GradientComboBox.setVisible(False)
self.ImageFilenameWidget.setVisible(False) self.BackgroundTypeComboBox.setVisible(False)
self.GradientLabel.setVisible(False) self.BackgroundTypeLabel.setVisible(False)
self.GradientComboBox.setVisible(False) else:
elif theme.background_type == u'gradient': self.BackgroundTypeComboBox.setVisible(True)
self.Color1PushButton.setStyleSheet( self.BackgroundTypeLabel.setVisible(True)
u'background-color: %s' % unicode(theme.background_startColor)) if theme.background_type == u'solid':
self.Color2PushButton.setStyleSheet( self.Color1PushButton.setStyleSheet(
u'background-color: %s' % unicode(theme.background_endColor)) u'background-color: %s' % unicode(theme.background_color))
self.Color1Label.setText(translate(u'ThemeManager', u'First Color:')) self.Color1Label.setText(translate(u'ThemeManager', u'Background Color:'))
self.Color2Label.setText(translate(u'ThemeManager', u'Second Color:')) self.Color1Label.setVisible(True)
self.Color1Label.setVisible(True) self.Color1PushButton.setVisible(True)
self.Color1PushButton.setVisible(True) self.Color2Label.setVisible(False)
self.Color2Label.setVisible(True) self.Color2PushButton.setVisible(False)
self.Color2PushButton.setVisible(True) self.ImageLabel.setVisible(False)
self.ImageLabel.setVisible(False) self.ImageLineEdit.setVisible(False)
self.ImageLineEdit.setVisible(False) self.ImageFilenameWidget.setVisible(False)
self.ImageFilenameWidget.setVisible(False) self.GradientLabel.setVisible(False)
self.GradientLabel.setVisible(True) self.GradientComboBox.setVisible(False)
self.GradientComboBox.setVisible(True) elif theme.background_type == u'gradient':
else: # must be image self.Color1PushButton.setStyleSheet(
self.Color1Label.setVisible(False) u'background-color: %s' % unicode(theme.background_startColor))
self.Color1PushButton.setVisible(False) self.Color2PushButton.setStyleSheet(
self.Color2Label.setVisible(False) u'background-color: %s' % unicode(theme.background_endColor))
self.Color2PushButton.setVisible(False) self.Color1Label.setText(translate(u'ThemeManager', u'First Color:'))
self.ImageLabel.setVisible(True) self.Color2Label.setText(translate(u'ThemeManager', u'Second Color:'))
self.ImageLineEdit.setVisible(True) self.Color1Label.setVisible(True)
self.ImageFilenameWidget.setVisible(True) self.Color1PushButton.setVisible(True)
self.GradientLabel.setVisible(False) self.Color2Label.setVisible(True)
self.GradientComboBox.setVisible(False) self.Color2PushButton.setVisible(True)
self.ImageLabel.setVisible(False)
self.ImageLineEdit.setVisible(False)
self.ImageFilenameWidget.setVisible(False)
self.GradientLabel.setVisible(True)
self.GradientComboBox.setVisible(True)
else: # must be image
self.Color1Label.setVisible(False)
self.Color1PushButton.setVisible(False)
self.Color2Label.setVisible(False)
self.Color2PushButton.setVisible(False)
self.ImageLabel.setVisible(True)
self.ImageLineEdit.setVisible(True)
self.ImageFilenameWidget.setVisible(True)
self.GradientLabel.setVisible(False)
self.GradientComboBox.setVisible(False)
if theme.font_main_override == False: if theme.font_main_override == False:
self.FontMainXSpinBox.setEnabled(False) self.FontMainXSpinBox.setEnabled(False)

View File

@ -25,7 +25,7 @@ import shutil
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from openlp.core.lib import PluginConfig, OpenLPToolbar, ServiceItem, \ from openlp.core.lib import PluginConfig, OpenLPToolbar, ServiceItem, \
RenderManager, translate, buildIcon, \ RenderManager, translate, buildIcon, ServiceType, \
contextMenuAction, contextMenuSeparator, Receiver contextMenuAction, contextMenuSeparator, Receiver
from openlp.core.utils import ConfigHelper from openlp.core.utils import ConfigHelper
@ -341,7 +341,8 @@ class ServiceManager(QtGui.QWidget):
zip = zipfile.ZipFile(unicode(filename) + u'.oos', 'w') zip = zipfile.ZipFile(unicode(filename) + u'.oos', 'w')
for item in self.serviceItems: for item in self.serviceItems:
service.append({u'serviceitem':item[u'data'].get_oos_repr()}) service.append({u'serviceitem':item[u'data'].get_oos_repr()})
if item[u'data'].service_item_type == u'image': if item[u'data'].service_item_type == ServiceType.Image or \
item[u'data'].service_item_type == ServiceType.Command:
for frame in item[u'data'].frames: for frame in item[u'data'].frames:
path_from = unicode(item[u'data'].service_item_path + u'/' + frame[u'title']) path_from = unicode(item[u'data'].service_item_path + u'/' + frame[u'title'])
zip.write(path_from) zip.write(path_from)
@ -354,7 +355,7 @@ class ServiceManager(QtGui.QWidget):
os.remove(servicefile) os.remove(servicefile)
except: except:
pass #if not present do not worry pass #if not present do not worry
self.parent.OosChanged(True, self.serviceName) self.parent.OosChanged(True, filename + u'.oos')
def onLoadService(self): def onLoadService(self):
""" """
@ -368,31 +369,34 @@ class ServiceManager(QtGui.QWidget):
name = filename.split(os.path.sep) name = filename.split(os.path.sep)
if filename != u'': if filename != u'':
self.config.set_last_dir(filename) self.config.set_last_dir(filename)
zip = zipfile.ZipFile(unicode(filename))
filexml = None
themename = None
for file in zip.namelist():
names = file.split(os.path.sep)
file_to = os.path.join(self.servicePath, names[len(names) - 1])
file_data = zip.read(file)
f = open(file_to, u'w')
f.write(file_data)
f.close()
if file_to.endswith(u'ood'):
p_file = file_to
f = open(p_file, u'r')
items = cPickle.load(f)
f.close()
self.onNewService()
for item in items:
serviceitem = ServiceItem()
serviceitem.RenderManager = self.parent.RenderManager
serviceitem.set_from_oos(item, self.servicePath )
self.addServiceItem(serviceitem)
try: try:
os.remove(p_file) zip = zipfile.ZipFile(unicode(filename))
filexml = None
themename = None
for file in zip.namelist():
names = file.split(os.path.sep)
file_to = os.path.join(self.servicePath, names[len(names) - 1])
file_data = zip.read(file)
f = open(file_to, u'w')
f.write(file_data)
f.close()
if file_to.endswith(u'ood'):
p_file = file_to
f = open(p_file, u'r')
items = cPickle.load(f)
f.close()
self.onNewService()
for item in items:
serviceitem = ServiceItem()
serviceitem.RenderManager = self.parent.RenderManager
serviceitem.set_from_oos(item, self.servicePath )
self.addServiceItem(serviceitem)
try:
os.remove(p_file)
except:
#if not present do not worry
pass
except: except:
#if not present do not worry
pass pass
self.serviceName = name[len(name) - 1] self.serviceName = name[len(name) - 1]
self.parent.OosChanged(True, self.serviceName) self.parent.OosChanged(True, self.serviceName)

View File

@ -228,6 +228,7 @@ class SlideController(QtGui.QWidget):
request the correct the toolbar of the plugin request the correct the toolbar of the plugin
Called by plugins Called by plugins
""" """
log.debug(u'addServiceItem')
item.render() item.render()
self.enableToolBar(item) self.enableToolBar(item)
self.displayServiceManagerItems(item, 0) self.displayServiceManagerItems(item, 0)
@ -238,6 +239,7 @@ class SlideController(QtGui.QWidget):
request the correct the toolbar of the plugin request the correct the toolbar of the plugin
Called by ServiceManager Called by ServiceManager
""" """
log.debug(u'addServiceItem')
self.enableToolBar(item) self.enableToolBar(item)
self.displayServiceManagerItems(item, slideno) self.displayServiceManagerItems(item, slideno)
@ -246,7 +248,7 @@ class SlideController(QtGui.QWidget):
Loads a ServiceItem into the system from ServiceManager Loads a ServiceItem into the system from ServiceManager
Display the slide number passed Display the slide number passed
""" """
log.debug(u'add Service Manager Item') log.debug(u'displayServiceManagerItems Start')
self.serviceitem = serviceitem self.serviceitem = serviceitem
slide_pixmap = QtGui.QPixmap.fromImage(self.serviceitem.frames[0][u'image']) slide_pixmap = QtGui.QPixmap.fromImage(self.serviceitem.frames[0][u'image'])
slide_width = 300 slide_width = 300
@ -273,6 +275,7 @@ class SlideController(QtGui.QWidget):
self.PreviewListWidget.selectRow(slideno) self.PreviewListWidget.selectRow(slideno)
self.onSlideSelected() self.onSlideSelected()
self.PreviewListWidget.setFocus() self.PreviewListWidget.setFocus()
log.debug(u'displayServiceManagerItems End')
#Screen event methods #Screen event methods
def onSlideSelectedFirst(self): def onSlideSelectedFirst(self):

View File

@ -341,8 +341,10 @@ class BibleMediaItem(MediaManagerItem):
def generateSlideData(self, service_item): def generateSlideData(self, 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:
return False
old_chapter = u'' old_chapter = u''
raw_slides=[] raw_slides = []
raw_footer = [] raw_footer = []
bible_text = u'' bible_text = u''
for item in items: for item in items:
@ -389,6 +391,7 @@ class BibleMediaItem(MediaManagerItem):
for slide in raw_slides: for slide in raw_slides:
service_item.add_from_text(slide[:30], slide) service_item.add_from_text(slide[:30], slide)
service_item.raw_footer = raw_footer service_item.raw_footer = raw_footer
return True
def formatVerse(self, old_chapter, chapter, verse, opening, closing): def formatVerse(self, old_chapter, chapter, verse, opening, closing):
loc = opening loc = opening
@ -432,27 +435,30 @@ class BibleMediaItem(MediaManagerItem):
combo.addItem(unicode(i)) combo.addItem(unicode(i))
def displayResults(self, bible): def displayResults(self, bible):
for verse in self.search_results: for count, verse in enumerate(self.search_results):
bible_text = u' %s %d:%d (%s)' % (verse.book.name, bible_text = u' %s %d:%d (%s)' % (verse.book.name,
verse.chapter, verse.verse, bible) verse.chapter, verse.verse, bible)
bible_verse = QtGui.QListWidgetItem(bible_text) bible_verse = QtGui.QListWidgetItem(bible_text)
bible_verse.setData(QtCore.Qt.UserRole, bible_verse.setData(QtCore.Qt.UserRole,
QtCore.QVariant(bible_text)) QtCore.QVariant(bible_text))
self.ListView.addItem(bible_verse) self.ListView.addItem(bible_verse)
cr = self.ListView.setCurrentRow(count)
if cr is not None:
cr.setSelected(True)
def searchByReference(self, bible, search): def searchByReference(self, bible, search):
log.debug(u'searchByReference %s ,%s', bible, search) log.debug(u'searchByReference %s ,%s', bible, search)
book = '' book = u''
start_chapter = '' start_chapter = u''
end_chapter = '' end_chapter = u''
start_verse = '' start_verse = u''
end_verse = '' end_verse = u''
search = search.replace(u' ', u' ').strip() search = search.replace(u' ', u' ').strip()
original = search original = search
message = None message = None
# Remove book beware 0 index arrays # Remove book beware 0 index arrays
for i in range (len(search)-1, 0, - 1): for i in range (len(search)-1, 0, - 1):
if search[i] == ' ': if search[i] == u' ':
book = search[:i] book = search[:i]
# remove book from string # remove book from string
search = search[i:] search = search[i:]
@ -466,7 +472,7 @@ class BibleMediaItem(MediaManagerItem):
# number : found # number : found
i = search.rfind(u' ') i = search.rfind(u' ')
if i == -1: if i == -1:
chapter = '' chapter = u''
else: else:
chapter = search[i:len(search)] chapter = search[i:len(search)]
hyphen = chapter.find(u'-') hyphen = chapter.find(u'-')
@ -493,29 +499,25 @@ class BibleMediaItem(MediaManagerItem):
end_verse = start_verse end_verse = start_verse
else: else:
sp1 = sp[1].split(u':') sp1 = sp[1].split(u':')
#print "2nd details", sp1, len(sp1)
if len(sp1) == 1: if len(sp1) == 1:
end_chapter = start_chapter end_chapter = start_chapter
end_verse = sp1[0] end_verse = sp1[0]
else: else:
end_chapter = sp1[0] end_chapter = sp1[0]
end_verse = sp1[1] end_verse = sp1[1]
#print 'search = ' + unicode(original) if end_chapter == u'':
#print 'results = ' + unicode(book) + ' @ '+ unicode(start_chapter)+' @ '+ unicode(end_chapter)+' @ '+ unicode(start_verse)+ ' @ '+ unicode(end_verse)
if end_chapter == '':
end_chapter = start_chapter.rstrip() end_chapter = start_chapter.rstrip()
if start_verse == '': if start_verse == u'':
if end_verse == '': if end_verse == u'':
start_verse = 1 start_verse = 1
else: else:
start_verse = end_verse start_verse = end_verse
if end_verse == '': if end_verse == u'':
end_verse = 99 end_verse = 99
if start_chapter == '': if start_chapter == u'':
message = u'No chapter found for search criteria' message = u'No chapter found for search criteria'
#print 'message = ' + unicode(message) log.debug(u'results = %s @ %s : %s @ %s : %s'% \
#print 'search = ' + unicode(original) (unicode(book), unicode(start_chapter), unicode(end_chapter), unicode(start_verse), unicode(end_verse)))
#print 'results = ' + unicode(book) + ' @ '+ unicode(start_chapter)+' @ '+ unicode(end_chapter)+' @ '+ unicode(start_verse)+ ' @ '+ unicode(end_verse)
if message == None: if message == None:
self.search_results = None self.search_results = None
self.search_results = self.parent.biblemanager.get_verse_text(bible, book, self.search_results = self.parent.biblemanager.get_verse_text(bible, book,

View File

@ -68,17 +68,17 @@ class CustomMediaItem(MediaManagerItem):
self.addToolbarButton( self.addToolbarButton(
translate(u'CustomMediaItem',u'Preview Custom Item'), translate(u'CustomMediaItem',u'Preview Custom Item'),
translate(u'CustomMediaItem',u'Preview the selected Custom Item'), translate(u'CustomMediaItem',u'Preview the selected Custom Item'),
u':/system/system_preview.png', self.onCustomPreviewClick, u'CustomPreviewItem') u':/system/system_preview.png', self.onPreviewClick, u'CustomPreviewItem')
## Live Custom Button ## ## Live Custom Button ##
self.addToolbarButton( self.addToolbarButton(
translate(u'CustomMediaItem',u'Go Live'), translate(u'CustomMediaItem',u'Go Live'),
translate(u'CustomMediaItem', u'Send the selected Custom live'), translate(u'CustomMediaItem', u'Send the selected Custom live'),
u':/system/system_live.png', self.onCustomLiveClick, u'CustomLiveItem') u':/system/system_live.png', self.onLiveClick, u'CustomLiveItem')
## Add Custom Button ## ## Add Custom Button ##
self.addToolbarButton( self.addToolbarButton(
translate(u'CustomMediaItem',u'Add Custom To Service'), translate(u'CustomMediaItem',u'Add Custom To Service'),
translate(u'CustomMediaItem',u'Add the selected Custom(s) to the service'), translate(u'CustomMediaItem',u'Add the selected Custom(s) to the service'),
u':/system/system_add.png', self.onCustomAddClick, u'CustomAddItem') u':/system/system_add.png', self.onAddClick, u'CustomAddItem')
# Add the CustomListView widget # Add the CustomListView widget
self.CustomWidget = QtGui.QWidget(self) self.CustomWidget = QtGui.QWidget(self)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
@ -95,7 +95,7 @@ class CustomMediaItem(MediaManagerItem):
self.PageLayout.addWidget(self.ListView) self.PageLayout.addWidget(self.ListView)
# Signals # Signals
QtCore.QObject.connect(self.ListView, QtCore.QObject.connect(self.ListView,
QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onCustomPreviewClick) QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onPreviewClick)
#define and add the context menu #define and add the context menu
self.ListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) self.ListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
self.ListView.addAction(contextMenuAction(self.ListView, self.ListView.addAction(contextMenuAction(self.ListView,
@ -104,13 +104,13 @@ class CustomMediaItem(MediaManagerItem):
self.ListView.addAction(contextMenuSeparator(self.ListView)) self.ListView.addAction(contextMenuSeparator(self.ListView))
self.ListView.addAction(contextMenuAction( self.ListView.addAction(contextMenuAction(
self.ListView, ':/system/system_preview.png', self.ListView, ':/system/system_preview.png',
translate(u'CustomMediaItem',u'&Preview Custom'), self.onCustomPreviewClick)) translate(u'CustomMediaItem',u'&Preview Custom'), self.onPreviewClick))
self.ListView.addAction(contextMenuAction( self.ListView.addAction(contextMenuAction(
self.ListView, ':/system/system_live.png', self.ListView, ':/system/system_live.png',
translate(u'CustomMediaItem',u'&Show Live'), self.onCustomLiveClick)) translate(u'CustomMediaItem',u'&Show Live'), self.onLiveClick))
self.ListView.addAction(contextMenuAction( self.ListView.addAction(contextMenuAction(
self.ListView, ':/system/system_add.png', self.ListView, ':/system/system_add.png',
translate(u'CustomMediaItem',u'&Add to Service'), self.onCustomAddClick)) translate(u'CustomMediaItem',u'&Add to Service'), self.onAddClick))
def initialise(self): def initialise(self):
self.loadCustomListView(self.parent.custommanager.get_all_slides()) self.loadCustomListView(self.parent.custommanager.get_all_slides())
@ -143,33 +143,14 @@ class CustomMediaItem(MediaManagerItem):
row = self.ListView.row(item) row = self.ListView.row(item)
self.ListView.takeItem(row) self.ListView.takeItem(row)
def onCustomPreviewClick(self):
log.debug(u'Custom Preview Requested')
service_item = ServiceItem(self.parent)
service_item.addIcon(u':/media/media_song.png')
self.generateSlideData(service_item)
self.parent.preview_controller.addServiceItem(service_item)
def onCustomLiveClick(self):
log.debug(u'Custom Live Requested')
service_item = ServiceItem(self.parent)
service_item.addIcon(u':/media/media_song.png')
self.generateSlideData(service_item)
self.parent.live_controller.addServiceItem(service_item)
def onCustomAddClick(self):
log.debug(u'Custom Add Requested')
service_item = ServiceItem(self.parent)
service_item.addIcon(u':/media/media_song.png')
self.generateSlideData(service_item)
self.parent.service_manager.addServiceItem(service_item)
def generateSlideData(self, service_item): def generateSlideData(self, service_item):
raw_slides =[] raw_slides =[]
raw_footer = [] raw_footer = []
slide = None slide = None
theme = None theme = None
item = self.ListView.currentItem() item = self.ListView.currentItem()
if item is None:
return False
item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
customSlide = self.parent.custommanager.get_custom(item_id) customSlide = self.parent.custommanager.get_custom(item_id)
title = customSlide.title title = customSlide.title
@ -187,3 +168,4 @@ class CustomMediaItem(MediaManagerItem):
for slide in raw_slides: for slide in raw_slides:
service_item.add_from_text(slide[:30], slide) service_item.add_from_text(slide[:30], slide)
service_item.raw_footer = raw_footer service_item.raw_footer = raw_footer
return True

View File

@ -1,63 +0,0 @@
# -*- coding: utf-8 -*-
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
"""
OpenLP - Open Source Lyrics Projection
Copyright (c) 2008 Raoul Snyman
Portions copyright (c) 2008-2009 Martin Thompson, Tim Bentley,
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
Place, Suite 330, Boston, MA 02111-1307 USA
"""
import logging
import os
from PyQt4 import QtCore, QtGui
from openlp.core.lib import OpenLPToolbar, translate, Receiver
from openlp.core.ui.slidecontroller import MasterToolbar
class ImageToolbar(MasterToolbar):
def __init__(self, parent, isLive):
MasterToolbar.__init__(self, isLive)
self.parent = parent
self.Toolbar = None
self.isLive = isLive
def defineZone5(self):
self.Toolbar.addSeparator()
self.Toolbar.addToolbarButton(u'Start Loop',
u':/media/media_time.png',
translate(u'SlideController', u'Start continuous loop'),
self.onStartLoop)
self.Toolbar.addToolbarButton(u'Stop Loop',
u':/media/media_stop.png',
translate(u'SlideController', u'Stop continuous loop'),
self.onStopLoop)
self.Toolbar.addSeparator()
self.DelaySpinBox = QtGui.QSpinBox(self.Toolbar)
self.SpinWidget = QtGui.QWidgetAction(self.Toolbar)
self.SpinWidget.setDefaultWidget(self.DelaySpinBox)
self.Toolbar.addAction(self.SpinWidget)
self.DelaySpinBox.setValue(self.parent.parent.ImageTab.loop_delay)
self.DelaySpinBox.setSuffix(translate(u'ImageSlideController', u's'))
def onStartLoop(self):
"""
Trigger the slide controller to start to loop passing the delay
"""
Receiver().send_message(u'%sslide_start_loop' % self.prefix, self.DelaySpinBox.value())
def onStopLoop(self):
"""
Trigger the slide controller to stop the loop
"""
Receiver().send_message(u'%sslide_stop_loop' % self.prefix)

View File

@ -95,6 +95,8 @@ class ImageMediaItem(MediaManagerItem):
def generateSlideData(self, service_item): def generateSlideData(self, service_item):
items = self.ListView.selectedIndexes() items = self.ListView.selectedIndexes()
if len(items) == 0:
return False
service_item.title = u'Image(s)' service_item.title = u'Image(s)'
for item in items: for item in items:
bitem = self.ListView.item(item.row()) bitem = self.ListView.item(item.row())
@ -102,3 +104,4 @@ class ImageMediaItem(MediaManagerItem):
frame = QtGui.QImage(unicode(filename)) frame = QtGui.QImage(unicode(filename))
(path, name) = os.path.split(filename) (path, name) = os.path.split(filename)
service_item.add_from_image(path, name, frame) service_item.add_from_image(path, name, frame)
return True

View File

@ -100,12 +100,15 @@ class MediaMediaItem(MediaManagerItem):
def generateSlideData(self, service_item): def generateSlideData(self, service_item):
indexes = self.ListView.selectedIndexes() indexes = self.ListView.selectedIndexes()
if len(items) > 1:
return False
service_item.title = u'Media' service_item.title = u'Media'
for index in indexes: for index in indexes:
filename = self.ListData.getFilename(index) filename = self.ListData.getFilename(index)
frame = QtGui.QImage(unicode(filename)) frame = QtGui.QImage(unicode(filename))
(path, name) = os.path.split(filename) (path, name) = os.path.split(filename)
service_item.add_from_image(path, name, frame) service_item.add_from_image(path, name, frame)
return True
def onPreviewClick(self): def onPreviewClick(self):
log.debug(u'Media Preview Button pressed') log.debug(u'Media Preview Button pressed')

View File

@ -43,7 +43,7 @@ class PresentationMediaItem(MediaManagerItem):
self.controllers = controllers self.controllers = controllers
self.TranslationContext = u'PresentationPlugin' self.TranslationContext = u'PresentationPlugin'
self.PluginTextShort = u'Presentation' self.PluginTextShort = u'Presentation'
self.ConfigSection = u'presentation' self.ConfigSection = u'presentations'
self.hasFileIcon = True self.hasFileIcon = True
self.hasNewIcon = False self.hasNewIcon = False
self.hasEditIcon = False self.hasEditIcon = False
@ -81,9 +81,6 @@ class PresentationMediaItem(MediaManagerItem):
for item in self.controllers: for item in self.controllers:
#load the drop down selection #load the drop down selection
self.DisplayTypeComboBox.addItem(item) self.DisplayTypeComboBox.addItem(item)
#load the preview toolbars
#self.parent.preview_controller.registerToolbar(item, self.controllers[item])
#self.parent.live_controller.registerToolbar(item, self.controllers[item])
def loadList(self, list): def loadList(self, list):
for file in list: for file in list:
@ -102,11 +99,13 @@ class PresentationMediaItem(MediaManagerItem):
def generateSlideData(self, service_item): def generateSlideData(self, service_item):
items = self.ListView.selectedIndexes() items = self.ListView.selectedIndexes()
service_item.title = self.DisplayTypeComboBox.currentText() if len(items) > 1:
return False
service_item.title = unicode(self.DisplayTypeComboBox.currentText())
service_item.shortname = unicode(self.DisplayTypeComboBox.currentText()) service_item.shortname = unicode(self.DisplayTypeComboBox.currentText())
for item in items: for item in items:
bitem = self.ListView.item(item.row()) bitem = self.ListView.item(item.row())
filename = unicode((bitem.data(QtCore.Qt.UserRole)).toString()) filename = unicode((bitem.data(QtCore.Qt.UserRole)).toString())
frame = QtGui.QImage(unicode(filename))
(path, name) = os.path.split(filename) (path, name) = os.path.split(filename)
service_item.add_using_toolbar(path, name) service_item.add_from_command(path, name)
return True

View File

@ -68,15 +68,15 @@ class SongMediaItem(MediaManagerItem):
## Preview Song Button ## ## Preview Song Button ##
self.addToolbarButton(translate(u'SongMediaItem', u'Preview Song'), self.addToolbarButton(translate(u'SongMediaItem', u'Preview Song'),
translate(u'SongMediaItem', u'Preview the selected song'), translate(u'SongMediaItem', u'Preview the selected song'),
':/system/system_preview.png', self.onSongPreviewClick, 'SongPreviewItem') ':/system/system_preview.png', self.onPreviewClick, 'SongPreviewItem')
## Live Song Button ## ## Live Song Button ##
self.addToolbarButton(translate(u'SongMediaItem', u'Go Live'), self.addToolbarButton(translate(u'SongMediaItem', u'Go Live'),
translate(u'SongMediaItem', u'Send the selected song live'), translate(u'SongMediaItem', u'Send the selected song live'),
':/system/system_live.png', self.onSongLiveClick, 'SongLiveItem') ':/system/system_live.png', self.onLiveClick, 'SongLiveItem')
## Add Song Button ## ## Add Song Button ##
self.addToolbarButton(translate(u'SongMediaItem', u'Add Song To Service'), self.addToolbarButton(translate(u'SongMediaItem', u'Add Song To Service'),
translate(u'SongMediaItem', u'Add the selected song(s) to the service'), translate(u'SongMediaItem', u'Add the selected song(s) to the service'),
':/system/system_add.png', self.onSongAddClick, 'SongAddItem') ':/system/system_add.png', self.onAddClick, 'SongAddItem')
self.addToolbarSeparator() self.addToolbarSeparator()
## Song Maintenance Button ## ## Song Maintenance Button ##
self.addToolbarButton(translate(u'SongMediaItem', u'Song Maintenance'), self.addToolbarButton(translate(u'SongMediaItem', u'Song Maintenance'),
@ -127,7 +127,7 @@ class SongMediaItem(MediaManagerItem):
QtCore.QObject.connect(self.SearchTextEdit, QtCore.QObject.connect(self.SearchTextEdit,
QtCore.SIGNAL(u'textChanged(const QString&)'), self.onSearchTextEditChanged) QtCore.SIGNAL(u'textChanged(const QString&)'), self.onSearchTextEditChanged)
QtCore.QObject.connect(self.ListView, QtCore.QObject.connect(self.ListView,
QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onSongPreviewClick) QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onPreviewClick)
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'load_song_list'), self.onSearchTextButtonClick) QtCore.SIGNAL(u'load_song_list'), self.onSearchTextButtonClick)
@ -139,13 +139,13 @@ class SongMediaItem(MediaManagerItem):
self.ListView.addAction(contextMenuSeparator(self.ListView)) self.ListView.addAction(contextMenuSeparator(self.ListView))
self.ListView.addAction(contextMenuAction(self.ListView, self.ListView.addAction(contextMenuAction(self.ListView,
':/system/system_preview.png', translate(u'SongMediaItem', u'&Preview Song'), ':/system/system_preview.png', translate(u'SongMediaItem', u'&Preview Song'),
self.onSongPreviewClick)) self.onPreviewClick))
self.ListView.addAction(contextMenuAction(self.ListView, self.ListView.addAction(contextMenuAction(self.ListView,
':/system/system_live.png', translate(u'SongMediaItem', u'&Show Live'), ':/system/system_live.png', translate(u'SongMediaItem', u'&Show Live'),
self.onSongLiveClick)) self.onLiveClick))
self.ListView.addAction(contextMenuAction(self.ListView, self.ListView.addAction(contextMenuAction(self.ListView,
':/system/system_add.png', translate(u'SongMediaItem', u'&Add to Service'), ':/system/system_add.png', translate(u'SongMediaItem', u'&Add to Service'),
self.onSongAddClick)) self.onAddClick))
def retranslateUi(self): def retranslateUi(self):
self.SearchTypeLabel.setText(translate(u'SongMediaItem', u'Search Type:')) self.SearchTypeLabel.setText(translate(u'SongMediaItem', u'Search Type:'))
@ -246,12 +246,12 @@ class SongMediaItem(MediaManagerItem):
self.parent.songmanager.delete_song(item_id) self.parent.songmanager.delete_song(item_id)
row = self.ListView.row(item) row = self.ListView.row(item)
self.ListView.takeItem(row) self.ListView.takeItem(row)
#
def onSongPreviewClick(self): # def onSongPreviewClick(self):
service_item = ServiceItem(self.parent) # service_item = ServiceItem(self.parent)
service_item.addIcon(u':/media/media_song.png') # service_item.addIcon(u':/media/media_song.png')
self.generateSlideData(service_item) # self.generateSlideData(service_item)
self.parent.preview_controller.addServiceItem(service_item) # self.parent.preview_controller.addServiceItem(service_item)
def generateSlideData(self, service_item): def generateSlideData(self, service_item):
raw_slides =[] raw_slides =[]
@ -259,6 +259,8 @@ class SongMediaItem(MediaManagerItem):
author_list = u'' author_list = u''
ccl = u'' ccl = u''
item = self.ListView.currentItem() item = self.ListView.currentItem()
if item is None:
return False
item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
song = self.parent.songmanager.get_song(item_id) song = self.parent.songmanager.get_song(item_id)
service_item.theme = song.theme_name service_item.theme = song.theme_name
@ -286,15 +288,16 @@ class SongMediaItem(MediaManagerItem):
raw_footer.append(song.copyright ) raw_footer.append(song.copyright )
raw_footer.append(unicode(translate(u'SongMediaItem', u'CCL Licence: ') + ccl )) raw_footer.append(unicode(translate(u'SongMediaItem', u'CCL Licence: ') + ccl ))
service_item.raw_footer = raw_footer service_item.raw_footer = raw_footer
return True
def onSongLiveClick(self): # def onSongLiveClick(self):
service_item = ServiceItem(self.parent) # service_item = ServiceItem(self.parent)
service_item.addIcon(u':/media/media_song.png') # service_item.addIcon(u':/media/media_song.png')
self.generateSlideData(service_item) # self.generateSlideData(service_item)
self.parent.live_controller.addServiceItem(service_item) # self.parent.live_controller.addServiceItem(service_item)
#
def onSongAddClick(self): # def onSongAddClick(self):
service_item = ServiceItem(self.parent) # service_item = ServiceItem(self.parent)
service_item.addIcon( u':/media/media_song.png') # service_item.addIcon( u':/media/media_song.png')
self.generateSlideData(service_item) # self.generateSlideData(service_item)
self.parent.service_manager.addServiceItem(service_item) # self.parent.service_manager.addServiceItem(service_item)