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.event_manager=plugin_helpers[u'event']
|
||||
self.render_manager=plugin_helpers[u'render']
|
||||
self.service_manager=plugin_helpers[u'service']
|
||||
|
||||
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
|
||||
"""
|
||||
import logging
|
||||
|
||||
import types
|
||||
from PyQt4 import QtCore, QtGui
|
||||
from PyQt4.QtCore import *
|
||||
from PyQt4.QtGui import *
|
||||
|
||||
#was Qabstratctitemodel
|
||||
class ServiceItem():
|
||||
"""
|
||||
The service item is a base class for the plugins to use to interact with
|
||||
@ -37,9 +37,9 @@ class ServiceItem():
|
||||
"""
|
||||
Init Method
|
||||
"""
|
||||
|
||||
self.plugin = hostplugin
|
||||
self.shortname = hostplugin.name
|
||||
self.title = u''
|
||||
self.items = []
|
||||
self.iconic_representation = None
|
||||
self.raw_slides = None
|
||||
@ -49,6 +49,20 @@ class ServiceItem():
|
||||
self.theme = None
|
||||
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):
|
||||
"""
|
||||
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:
|
||||
|
||||
self.frames.append(self.render_manager.generate_slide(slide, self.raw_footer, False))
|
||||
print self.frames
|
||||
|
||||
def get_parent_node(self):
|
||||
"""
|
||||
|
@ -60,8 +60,9 @@ class MainWindow(object):
|
||||
self.plugin_helpers[u'preview'] = self.PreviewController
|
||||
self.plugin_helpers[u'live'] = self.LiveController
|
||||
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'service'] = self.ServiceManagerContents
|
||||
|
||||
self.plugin_manager.find_plugins(pluginpath, self.plugin_helpers, self.EventManager)
|
||||
# hook methods have to happen after find_plugins. Find plugins needs the controllers
|
||||
|
@ -46,20 +46,25 @@ class ServiceData(QAbstractItemModel):
|
||||
QAbstractItemModel.__init__(self)
|
||||
self.items=[]
|
||||
log.info("Starting")
|
||||
|
||||
def columnCount(self, parent):
|
||||
return 1; # always only a single column (for now)
|
||||
|
||||
def rowCount(self, parent):
|
||||
return len(self.items)
|
||||
|
||||
def insertRow(self, row, service_item):
|
||||
# self.beginInsertRows(QModelIndex(),row,row)
|
||||
log.info("insert row %d:%s"%(row,service_item))
|
||||
self.beginInsertRows(QModelIndex(),row,row)
|
||||
log.info("insert row %s:%s" % (row,service_item))
|
||||
self.items.insert(row, service_item)
|
||||
log.info("Items: %s" % self.items)
|
||||
# self.endInsertRows()
|
||||
self.endInsertRows()
|
||||
|
||||
def removeRow(self, row):
|
||||
self.beginRemoveRows(QModelIndex(), row,row)
|
||||
self.items.pop(row)
|
||||
self.endRemoveRows()
|
||||
|
||||
def addRow(self, item):
|
||||
self.insertRow(len(self.items), item)
|
||||
|
||||
@ -68,16 +73,18 @@ class ServiceData(QAbstractItemModel):
|
||||
|
||||
def parent(self, index=QModelIndex()):
|
||||
return QModelIndex() # no children as yet
|
||||
|
||||
def data(self, index, role):
|
||||
"""
|
||||
Called by the service manager to draw us in the service window
|
||||
"""
|
||||
log.debug(u'data %s %d', index, role)
|
||||
row=index.row()
|
||||
if row > len(self.items): # if the last row is selected and deleted, we then get called with an empty row!
|
||||
return QVariant()
|
||||
item=self.items[row]
|
||||
if role==Qt.DisplayRole:
|
||||
retval= item.pluginname + ":" + item.shortname
|
||||
retval= item.title + u':' + item.shortname
|
||||
elif role == Qt.DecorationRole:
|
||||
retval = item.iconic_representation
|
||||
elif role == Qt.ToolTipRole:
|
||||
@ -139,6 +146,7 @@ class ServiceManager(QWidget):
|
||||
self.service_data=ServiceData()
|
||||
self.TreeView.setModel(self.service_data)
|
||||
self.Layout.addWidget(self.TreeView)
|
||||
|
||||
QtCore.QObject.connect(self.ThemeComboBox,
|
||||
QtCore.SIGNAL("activated(int)"), self.onThemeComboBoxSelected)
|
||||
|
||||
@ -159,6 +167,7 @@ class ServiceManager(QWidget):
|
||||
# if currently selected is of correct type, add it to it
|
||||
log.info("row:%d"%row)
|
||||
selected_item=self.service_data.item(row)
|
||||
|
||||
if type(selected_item) == type(item):
|
||||
log.info("Add to existing item")
|
||||
selected_item.add(item)
|
||||
|
@ -154,7 +154,7 @@ class SlideController(QtGui.QWidget):
|
||||
def addServiceItem(self, serviceitem):
|
||||
self.serviceitem = serviceitem
|
||||
self.serviceitem.render()
|
||||
print self.serviceitem.frames
|
||||
self.CustomListData.clearItems()
|
||||
for frame in self.serviceitem.frames:
|
||||
self.CustomListData.addRow(frame, u'some text')
|
||||
|
||||
|
@ -230,7 +230,17 @@ class ThemeManager(QWidget):
|
||||
def getThemeData(self, themename):
|
||||
log.debug(u'getthemedata for theme %s', themename)
|
||||
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.parse(xml)
|
||||
return theme
|
||||
|
@ -23,7 +23,7 @@ from PyQt4 import QtCore, QtGui
|
||||
|
||||
from openlp.core import translate
|
||||
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.lib import TextListData
|
||||
@ -270,12 +270,6 @@ class BibleMediaItem(MediaManagerItem):
|
||||
self.bibleimportform.exec_()
|
||||
pass
|
||||
|
||||
def onBibleLiveClick(self):
|
||||
pass
|
||||
|
||||
def onBibleAddClick(self):
|
||||
pass
|
||||
|
||||
def onAdvancedFromVerse(self):
|
||||
frm = self.AdvancedFromVerse.currentText()
|
||||
self.adjustComboBox(frm, self.verses, self.AdvancedToVerse)
|
||||
@ -325,12 +319,33 @@ class BibleMediaItem(MediaManagerItem):
|
||||
if not self.search_results == None:
|
||||
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):
|
||||
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')
|
||||
items = self.BibleListView.selectedIndexes()
|
||||
old_chapter = ''
|
||||
main_lines=[]
|
||||
footer_lines = []
|
||||
raw_slides=[]
|
||||
raw_footer = []
|
||||
for item in items:
|
||||
text = self.BibleListData.getValue(item)
|
||||
verse = text[:text.find("(")]
|
||||
@ -351,13 +366,15 @@ class BibleMediaItem(MediaManagerItem):
|
||||
else:
|
||||
loc = self.formatVerse(old_chapter, chapter, verse, u'', u'')
|
||||
old_chapter = chapter
|
||||
main_lines.append(loc + u' '+text)
|
||||
if len(footer_lines) <= 1:
|
||||
footer_lines.append(book)
|
||||
raw_slides.append(loc + u' '+text)
|
||||
service_item.title = book + u' ' + loc
|
||||
if len(raw_footer) <= 1:
|
||||
raw_footer.append(book)
|
||||
|
||||
self.parent.render_manager.set_override_theme(None)
|
||||
frame=self.parent.render_manager.generate_slide(main_lines, footer_lines)
|
||||
self.parent.preview_controller.previewFrame(frame)
|
||||
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
|
||||
|
@ -136,7 +136,7 @@ class CustomMediaItem(MediaManagerItem):
|
||||
translate('CustomMediaItem',u'&Show Live'), self.onCustomLiveClick))
|
||||
self.CustomListView.addAction(self.contextMenuAction(
|
||||
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):
|
||||
# self.ClearTextButton.setText(translate('CustomMediaItem', u'Clear'))
|
||||
@ -188,20 +188,24 @@ class CustomMediaItem(MediaManagerItem):
|
||||
|
||||
def onCustomPreviewClick(self):
|
||||
service_item = ServiceItem(self.parent)
|
||||
service_item.addIcon( ":/media/media_song.png")
|
||||
service_item.render_manager = self.parent.render_manager
|
||||
self.generateSlideData(service_item)
|
||||
self.parent.preview_controller.addServiceItem(service_item)
|
||||
|
||||
def onCustomLiveClick(self):
|
||||
service_item = ServiceItem(self.parent)
|
||||
service_item.addIcon( ":/media/media_song.png")
|
||||
service_item.render_manager = self.parent.render_manager
|
||||
self.generateSlideData(service_item)
|
||||
self.parent.live_controller.addServiceItem(service_item)
|
||||
|
||||
def onCustomAddClick(self):
|
||||
service_item = ServiceItem(self.parent)
|
||||
service_item.addIcon( ":/media/media_song.png")
|
||||
service_item.render_manager = self.parent.render_manager
|
||||
self.generateSlideData(service_item)
|
||||
self.parent.service_manager.addServiceItem(service_item)
|
||||
|
||||
def generateSlideData(self, service_item):
|
||||
indexes = self.CustomListView.selectedIndexes()
|
||||
@ -215,20 +219,13 @@ class CustomMediaItem(MediaManagerItem):
|
||||
title = customSlide.title
|
||||
credit = customSlide.credits
|
||||
theme = customSlide.theme_name
|
||||
if len(theme) == 0 or theme == None:
|
||||
self.parent.render_manager.set_override_theme(None)
|
||||
else:
|
||||
self.parent.render_manager.set_override_theme(theme)
|
||||
if len(theme) is not 0 :
|
||||
service_item.theme = theme
|
||||
songXML=SongXMLParser(customSlide.text)
|
||||
verseList = songXML.get_verses()
|
||||
for verse in verseList:
|
||||
slide = self.parent.render_manager.format_slide(verse[1], False)
|
||||
raw_slides.append(verse[1])
|
||||
|
||||
raw_footer.append(title + u' '+ credit)
|
||||
if slide is not None:
|
||||
frame=self.parent.render_manager.generate_slide(slide, raw_footer, False)
|
||||
self.parent.preview_controller.previewFrame(frame)
|
||||
service_item.title = title
|
||||
service_item.raw_slides = raw_slides
|
||||
service_item.raw_footer = raw_footer
|
||||
|
Loading…
Reference in New Issue
Block a user