forked from openlp/openlp
Add servicemanager access from Plugins
Add bibles to preview , live and servicemanager.py Add icons to servicemanager lists Fix thememanager to work with missing theme
This commit is contained in:
parent
0d27d61b7f
commit
183a7e54c7
|
@ -93,6 +93,7 @@ class Plugin(object):
|
||||||
self.theme_manager=plugin_helpers[u'theme']
|
self.theme_manager=plugin_helpers[u'theme']
|
||||||
self.event_manager=plugin_helpers[u'event']
|
self.event_manager=plugin_helpers[u'event']
|
||||||
self.render_manager=plugin_helpers[u'render']
|
self.render_manager=plugin_helpers[u'render']
|
||||||
|
self.service_manager=plugin_helpers[u'service']
|
||||||
|
|
||||||
def check_pre_conditions(self):
|
def check_pre_conditions(self):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -18,11 +18,11 @@ this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
||||||
Place, Suite 330, Boston, MA 02111-1307 USA
|
Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
"""
|
"""
|
||||||
import logging
|
import logging
|
||||||
|
import types
|
||||||
|
from PyQt4 import QtCore, QtGui
|
||||||
from PyQt4.QtCore import *
|
from PyQt4.QtCore import *
|
||||||
from PyQt4.QtGui import *
|
from PyQt4.QtGui import *
|
||||||
|
|
||||||
#was Qabstratctitemodel
|
|
||||||
class ServiceItem():
|
class ServiceItem():
|
||||||
"""
|
"""
|
||||||
The service item is a base class for the plugins to use to interact with
|
The service item is a base class for the plugins to use to interact with
|
||||||
|
@ -37,9 +37,9 @@ class ServiceItem():
|
||||||
"""
|
"""
|
||||||
Init Method
|
Init Method
|
||||||
"""
|
"""
|
||||||
|
|
||||||
self.plugin = hostplugin
|
self.plugin = hostplugin
|
||||||
self.shortname = hostplugin.name
|
self.shortname = hostplugin.name
|
||||||
|
self.title = u''
|
||||||
self.items = []
|
self.items = []
|
||||||
self.iconic_representation = None
|
self.iconic_representation = None
|
||||||
self.raw_slides = None
|
self.raw_slides = None
|
||||||
|
@ -49,6 +49,20 @@ class ServiceItem():
|
||||||
self.theme = None
|
self.theme = None
|
||||||
log.debug(u'Service item created for %s', self.shortname)
|
log.debug(u'Service item created for %s', self.shortname)
|
||||||
|
|
||||||
|
def addIcon(self, icon):
|
||||||
|
ButtonIcon = None
|
||||||
|
if type(icon) is QtGui.QIcon:
|
||||||
|
ButtonIcon = icon
|
||||||
|
elif type(icon) is types.StringType or type(icon) is types.UnicodeType:
|
||||||
|
ButtonIcon = QtGui.QIcon()
|
||||||
|
if icon.startswith(u':/'):
|
||||||
|
ButtonIcon.addPixmap(QtGui.QPixmap(icon), QtGui.QIcon.Normal,
|
||||||
|
QtGui.QIcon.Off)
|
||||||
|
else:
|
||||||
|
ButtonIcon.addPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(icon)),
|
||||||
|
QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||||
|
self.iconic_representation = ButtonIcon
|
||||||
|
|
||||||
def render(self):
|
def render(self):
|
||||||
"""
|
"""
|
||||||
The render method is what the plugin uses to render it's meda to the
|
The render method is what the plugin uses to render it's meda to the
|
||||||
|
@ -65,7 +79,6 @@ class ServiceItem():
|
||||||
for slide in self.format_slides:
|
for slide in self.format_slides:
|
||||||
|
|
||||||
self.frames.append(self.render_manager.generate_slide(slide, self.raw_footer, False))
|
self.frames.append(self.render_manager.generate_slide(slide, self.raw_footer, False))
|
||||||
print self.frames
|
|
||||||
|
|
||||||
def get_parent_node(self):
|
def get_parent_node(self):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -60,8 +60,9 @@ class MainWindow(object):
|
||||||
self.plugin_helpers[u'preview'] = self.PreviewController
|
self.plugin_helpers[u'preview'] = self.PreviewController
|
||||||
self.plugin_helpers[u'live'] = self.LiveController
|
self.plugin_helpers[u'live'] = self.LiveController
|
||||||
self.plugin_helpers[u'event'] = self.EventManager
|
self.plugin_helpers[u'event'] = self.EventManager
|
||||||
self.plugin_helpers[u'theme'] = self.ThemeManagerContents # Theme manger
|
self.plugin_helpers[u'theme'] = self.ThemeManagerContents
|
||||||
self.plugin_helpers[u'render'] = self.RenderManager
|
self.plugin_helpers[u'render'] = self.RenderManager
|
||||||
|
self.plugin_helpers[u'service'] = self.ServiceManagerContents
|
||||||
|
|
||||||
self.plugin_manager.find_plugins(pluginpath, self.plugin_helpers, self.EventManager)
|
self.plugin_manager.find_plugins(pluginpath, self.plugin_helpers, self.EventManager)
|
||||||
# hook methods have to happen after find_plugins. Find plugins needs the controllers
|
# hook methods have to happen after find_plugins. Find plugins needs the controllers
|
||||||
|
|
|
@ -46,20 +46,25 @@ class ServiceData(QAbstractItemModel):
|
||||||
QAbstractItemModel.__init__(self)
|
QAbstractItemModel.__init__(self)
|
||||||
self.items=[]
|
self.items=[]
|
||||||
log.info("Starting")
|
log.info("Starting")
|
||||||
|
|
||||||
def columnCount(self, parent):
|
def columnCount(self, parent):
|
||||||
return 1; # always only a single column (for now)
|
return 1; # always only a single column (for now)
|
||||||
|
|
||||||
def rowCount(self, parent):
|
def rowCount(self, parent):
|
||||||
return len(self.items)
|
return len(self.items)
|
||||||
|
|
||||||
def insertRow(self, row, service_item):
|
def insertRow(self, row, service_item):
|
||||||
# self.beginInsertRows(QModelIndex(),row,row)
|
self.beginInsertRows(QModelIndex(),row,row)
|
||||||
log.info("insert row %d:%s"%(row,service_item))
|
log.info("insert row %s:%s" % (row,service_item))
|
||||||
self.items.insert(row, service_item)
|
self.items.insert(row, service_item)
|
||||||
log.info("Items: %s" % self.items)
|
log.info("Items: %s" % self.items)
|
||||||
# self.endInsertRows()
|
self.endInsertRows()
|
||||||
|
|
||||||
def removeRow(self, row):
|
def removeRow(self, row):
|
||||||
self.beginRemoveRows(QModelIndex(), row,row)
|
self.beginRemoveRows(QModelIndex(), row,row)
|
||||||
self.items.pop(row)
|
self.items.pop(row)
|
||||||
self.endRemoveRows()
|
self.endRemoveRows()
|
||||||
|
|
||||||
def addRow(self, item):
|
def addRow(self, item):
|
||||||
self.insertRow(len(self.items), item)
|
self.insertRow(len(self.items), item)
|
||||||
|
|
||||||
|
@ -68,16 +73,18 @@ class ServiceData(QAbstractItemModel):
|
||||||
|
|
||||||
def parent(self, index=QModelIndex()):
|
def parent(self, index=QModelIndex()):
|
||||||
return QModelIndex() # no children as yet
|
return QModelIndex() # no children as yet
|
||||||
|
|
||||||
def data(self, index, role):
|
def data(self, index, role):
|
||||||
"""
|
"""
|
||||||
Called by the service manager to draw us in the service window
|
Called by the service manager to draw us in the service window
|
||||||
"""
|
"""
|
||||||
|
log.debug(u'data %s %d', index, role)
|
||||||
row=index.row()
|
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 row > len(self.items): # if the last row is selected and deleted, we then get called with an empty row!
|
||||||
return QVariant()
|
return QVariant()
|
||||||
item=self.items[row]
|
item=self.items[row]
|
||||||
if role==Qt.DisplayRole:
|
if role==Qt.DisplayRole:
|
||||||
retval= item.pluginname + ":" + item.shortname
|
retval= item.title + u':' + item.shortname
|
||||||
elif role == Qt.DecorationRole:
|
elif role == Qt.DecorationRole:
|
||||||
retval = item.iconic_representation
|
retval = item.iconic_representation
|
||||||
elif role == Qt.ToolTipRole:
|
elif role == Qt.ToolTipRole:
|
||||||
|
@ -139,6 +146,7 @@ class ServiceManager(QWidget):
|
||||||
self.service_data=ServiceData()
|
self.service_data=ServiceData()
|
||||||
self.TreeView.setModel(self.service_data)
|
self.TreeView.setModel(self.service_data)
|
||||||
self.Layout.addWidget(self.TreeView)
|
self.Layout.addWidget(self.TreeView)
|
||||||
|
|
||||||
QtCore.QObject.connect(self.ThemeComboBox,
|
QtCore.QObject.connect(self.ThemeComboBox,
|
||||||
QtCore.SIGNAL("activated(int)"), self.onThemeComboBoxSelected)
|
QtCore.SIGNAL("activated(int)"), self.onThemeComboBoxSelected)
|
||||||
|
|
||||||
|
@ -159,6 +167,7 @@ class ServiceManager(QWidget):
|
||||||
# if currently selected is of correct type, add it to it
|
# if currently selected is of correct type, add it to it
|
||||||
log.info("row:%d"%row)
|
log.info("row:%d"%row)
|
||||||
selected_item=self.service_data.item(row)
|
selected_item=self.service_data.item(row)
|
||||||
|
|
||||||
if type(selected_item) == type(item):
|
if type(selected_item) == type(item):
|
||||||
log.info("Add to existing item")
|
log.info("Add to existing item")
|
||||||
selected_item.add(item)
|
selected_item.add(item)
|
||||||
|
|
|
@ -154,7 +154,7 @@ class SlideController(QtGui.QWidget):
|
||||||
def addServiceItem(self, serviceitem):
|
def addServiceItem(self, serviceitem):
|
||||||
self.serviceitem = serviceitem
|
self.serviceitem = serviceitem
|
||||||
self.serviceitem.render()
|
self.serviceitem.render()
|
||||||
print self.serviceitem.frames
|
self.CustomListData.clearItems()
|
||||||
for frame in self.serviceitem.frames:
|
for frame in self.serviceitem.frames:
|
||||||
self.CustomListData.addRow(frame, u'some text')
|
self.CustomListData.addRow(frame, u'some text')
|
||||||
|
|
||||||
|
|
|
@ -230,7 +230,17 @@ class ThemeManager(QWidget):
|
||||||
def getThemeData(self, themename):
|
def getThemeData(self, themename):
|
||||||
log.debug(u'getthemedata for theme %s', themename)
|
log.debug(u'getthemedata for theme %s', themename)
|
||||||
xml_file = os.path.join(self.path, str(themename), str(themename) + u'.xml')
|
xml_file = os.path.join(self.path, str(themename), str(themename) + u'.xml')
|
||||||
xml = fileToXML(xml_file)
|
try:
|
||||||
|
xml = fileToXML(xml_file)
|
||||||
|
except:
|
||||||
|
newtheme = ThemeXML()
|
||||||
|
newtheme.new_document(u'New Theme')
|
||||||
|
newtheme.add_background_solid(str(u'#000000'))
|
||||||
|
newtheme.add_font(str(QFont().family()), str(u'#FFFFFF'), str(30), u'False')
|
||||||
|
newtheme.add_font(str(QFont().family()), str(u'#FFFFFF'), str(12), u'False', u'footer')
|
||||||
|
newtheme.add_display(u'False', str(u'#FFFFFF'), u'False', str(u'#FFFFFF'),
|
||||||
|
str(0), str(0), str(0))
|
||||||
|
xml = newtheme.extract_xml()
|
||||||
theme = ThemeXML()
|
theme = ThemeXML()
|
||||||
theme.parse(xml)
|
theme.parse(xml)
|
||||||
return theme
|
return theme
|
||||||
|
|
|
@ -23,7 +23,7 @@ from PyQt4 import QtCore, QtGui
|
||||||
|
|
||||||
from openlp.core import translate
|
from openlp.core import translate
|
||||||
from openlp.core.lib import MediaManagerItem, Receiver
|
from openlp.core.lib import MediaManagerItem, Receiver
|
||||||
from openlp.core.resources import *
|
from openlp.core.lib import ServiceItem
|
||||||
|
|
||||||
from openlp.plugins.bibles.forms import BibleImportForm
|
from openlp.plugins.bibles.forms import BibleImportForm
|
||||||
from openlp.plugins.bibles.lib import TextListData
|
from openlp.plugins.bibles.lib import TextListData
|
||||||
|
@ -270,12 +270,6 @@ class BibleMediaItem(MediaManagerItem):
|
||||||
self.bibleimportform.exec_()
|
self.bibleimportform.exec_()
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def onBibleLiveClick(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def onBibleAddClick(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def onAdvancedFromVerse(self):
|
def onAdvancedFromVerse(self):
|
||||||
frm = self.AdvancedFromVerse.currentText()
|
frm = self.AdvancedFromVerse.currentText()
|
||||||
self.adjustComboBox(frm, self.verses, self.AdvancedToVerse)
|
self.adjustComboBox(frm, self.verses, self.AdvancedToVerse)
|
||||||
|
@ -325,12 +319,33 @@ class BibleMediaItem(MediaManagerItem):
|
||||||
if not self.search_results == None:
|
if not self.search_results == None:
|
||||||
self.displayResults(bible)
|
self.displayResults(bible)
|
||||||
|
|
||||||
|
def onBibleLiveClick(self):
|
||||||
|
service_item = ServiceItem(self.parent)
|
||||||
|
service_item.addIcon( ":/media/media_verse.png")
|
||||||
|
service_item.render_manager = self.parent.render_manager
|
||||||
|
self.generateSlideData(service_item)
|
||||||
|
self.parent.live_controller.addServiceItem(service_item)
|
||||||
|
|
||||||
|
def onBibleAddClick(self):
|
||||||
|
service_item = ServiceItem(self.parent)
|
||||||
|
service_item.addIcon( ":/media/media_verse.png")
|
||||||
|
service_item.render_manager = self.parent.render_manager
|
||||||
|
self.generateSlideData(service_item)
|
||||||
|
self.parent.service_manager.addServiceItem(service_item)
|
||||||
|
|
||||||
def onBiblePreviewClick(self):
|
def onBiblePreviewClick(self):
|
||||||
|
service_item = ServiceItem(self.parent)
|
||||||
|
service_item.addIcon( ":/media/media_verse.png")
|
||||||
|
service_item.render_manager = self.parent.render_manager
|
||||||
|
self.generateSlideData(service_item)
|
||||||
|
self.parent.preview_controller.addServiceItem(service_item)
|
||||||
|
|
||||||
|
def generateSlideData(self, service_item):
|
||||||
log.debug(u'Bible Preview Button pressed')
|
log.debug(u'Bible Preview Button pressed')
|
||||||
items = self.BibleListView.selectedIndexes()
|
items = self.BibleListView.selectedIndexes()
|
||||||
old_chapter = ''
|
old_chapter = ''
|
||||||
main_lines=[]
|
raw_slides=[]
|
||||||
footer_lines = []
|
raw_footer = []
|
||||||
for item in items:
|
for item in items:
|
||||||
text = self.BibleListData.getValue(item)
|
text = self.BibleListData.getValue(item)
|
||||||
verse = text[:text.find("(")]
|
verse = text[:text.find("(")]
|
||||||
|
@ -351,13 +366,15 @@ class BibleMediaItem(MediaManagerItem):
|
||||||
else:
|
else:
|
||||||
loc = self.formatVerse(old_chapter, chapter, verse, u'', u'')
|
loc = self.formatVerse(old_chapter, chapter, verse, u'', u'')
|
||||||
old_chapter = chapter
|
old_chapter = chapter
|
||||||
main_lines.append(loc + u' '+text)
|
raw_slides.append(loc + u' '+text)
|
||||||
if len(footer_lines) <= 1:
|
service_item.title = book + u' ' + loc
|
||||||
footer_lines.append(book)
|
if len(raw_footer) <= 1:
|
||||||
|
raw_footer.append(book)
|
||||||
|
|
||||||
self.parent.render_manager.set_override_theme(None)
|
service_item.theme = None
|
||||||
frame=self.parent.render_manager.generate_slide(main_lines, footer_lines)
|
|
||||||
self.parent.preview_controller.previewFrame(frame)
|
service_item.raw_slides = raw_slides
|
||||||
|
service_item.raw_footer = raw_footer
|
||||||
|
|
||||||
def formatVerse(self, old_chapter, chapter, verse, opening, closing):
|
def formatVerse(self, old_chapter, chapter, verse, opening, closing):
|
||||||
loc = opening
|
loc = opening
|
||||||
|
|
|
@ -136,7 +136,7 @@ class CustomMediaItem(MediaManagerItem):
|
||||||
translate('CustomMediaItem',u'&Show Live'), self.onCustomLiveClick))
|
translate('CustomMediaItem',u'&Show Live'), self.onCustomLiveClick))
|
||||||
self.CustomListView.addAction(self.contextMenuAction(
|
self.CustomListView.addAction(self.contextMenuAction(
|
||||||
self.CustomListView, ':/system/system_add.png',
|
self.CustomListView, ':/system/system_add.png',
|
||||||
translate('CustomMediaItem',u'&Add to Service'), self.onCustomEditClick))
|
translate('CustomMediaItem',u'&Add to Service'), self.onCustomAddClick))
|
||||||
|
|
||||||
# def retranslateUi(self):
|
# def retranslateUi(self):
|
||||||
# self.ClearTextButton.setText(translate('CustomMediaItem', u'Clear'))
|
# self.ClearTextButton.setText(translate('CustomMediaItem', u'Clear'))
|
||||||
|
@ -188,20 +188,24 @@ class CustomMediaItem(MediaManagerItem):
|
||||||
|
|
||||||
def onCustomPreviewClick(self):
|
def onCustomPreviewClick(self):
|
||||||
service_item = ServiceItem(self.parent)
|
service_item = ServiceItem(self.parent)
|
||||||
|
service_item.addIcon( ":/media/media_song.png")
|
||||||
service_item.render_manager = self.parent.render_manager
|
service_item.render_manager = self.parent.render_manager
|
||||||
self.generateSlideData(service_item)
|
self.generateSlideData(service_item)
|
||||||
self.parent.preview_controller.addServiceItem(service_item)
|
self.parent.preview_controller.addServiceItem(service_item)
|
||||||
|
|
||||||
def onCustomLiveClick(self):
|
def onCustomLiveClick(self):
|
||||||
service_item = ServiceItem(self.parent)
|
service_item = ServiceItem(self.parent)
|
||||||
|
service_item.addIcon( ":/media/media_song.png")
|
||||||
service_item.render_manager = self.parent.render_manager
|
service_item.render_manager = self.parent.render_manager
|
||||||
self.generateSlideData(service_item)
|
self.generateSlideData(service_item)
|
||||||
self.parent.live_controller.addServiceItem(service_item)
|
self.parent.live_controller.addServiceItem(service_item)
|
||||||
|
|
||||||
def onCustomAddClick(self):
|
def onCustomAddClick(self):
|
||||||
service_item = ServiceItem(self.parent)
|
service_item = ServiceItem(self.parent)
|
||||||
|
service_item.addIcon( ":/media/media_song.png")
|
||||||
service_item.render_manager = self.parent.render_manager
|
service_item.render_manager = self.parent.render_manager
|
||||||
self.generateSlideData(service_item)
|
self.generateSlideData(service_item)
|
||||||
|
self.parent.service_manager.addServiceItem(service_item)
|
||||||
|
|
||||||
def generateSlideData(self, service_item):
|
def generateSlideData(self, service_item):
|
||||||
indexes = self.CustomListView.selectedIndexes()
|
indexes = self.CustomListView.selectedIndexes()
|
||||||
|
@ -215,20 +219,13 @@ class CustomMediaItem(MediaManagerItem):
|
||||||
title = customSlide.title
|
title = customSlide.title
|
||||||
credit = customSlide.credits
|
credit = customSlide.credits
|
||||||
theme = customSlide.theme_name
|
theme = customSlide.theme_name
|
||||||
if len(theme) == 0 or theme == None:
|
if len(theme) is not 0 :
|
||||||
self.parent.render_manager.set_override_theme(None)
|
|
||||||
else:
|
|
||||||
self.parent.render_manager.set_override_theme(theme)
|
|
||||||
service_item.theme = theme
|
service_item.theme = theme
|
||||||
songXML=SongXMLParser(customSlide.text)
|
songXML=SongXMLParser(customSlide.text)
|
||||||
verseList = songXML.get_verses()
|
verseList = songXML.get_verses()
|
||||||
for verse in verseList:
|
for verse in verseList:
|
||||||
slide = self.parent.render_manager.format_slide(verse[1], False)
|
|
||||||
raw_slides.append(verse[1])
|
raw_slides.append(verse[1])
|
||||||
|
|
||||||
raw_footer.append(title + u' '+ credit)
|
raw_footer.append(title + u' '+ credit)
|
||||||
if slide is not None:
|
service_item.title = title
|
||||||
frame=self.parent.render_manager.generate_slide(slide, raw_footer, False)
|
|
||||||
self.parent.preview_controller.previewFrame(frame)
|
|
||||||
service_item.raw_slides = raw_slides
|
service_item.raw_slides = raw_slides
|
||||||
service_item.raw_footer = raw_footer
|
service_item.raw_footer = raw_footer
|
||||||
|
|
Loading…
Reference in New Issue