bzr-revno: 445
This commit is contained in:
Tim Bentley 2009-05-14 21:37:57 +01:00
commit 2d870d1146
13 changed files with 285 additions and 186 deletions

View File

@ -15,7 +15,24 @@ 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
"""
__all__ = ['convertStringToBoolean']
import types
from PyQt4 import QtCore, QtGui
__all__ = ['convertStringToBoolean','buildIcon',]
def convertStringToBoolean(stringvalue):
return stringvalue.strip().lower() in (u'true', u'yes', u'y')
def buildIcon(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(QImage(icon)),
QtGui.QIcon.Normal, QtGui.QIcon.Off)
return ButtonIcon

View File

@ -37,10 +37,12 @@ class EventType(object):
AfterSaveService = 4
LoadServiceItem = 5
# Preview events
PreviewBeforeLoad = 11
PreviewAfterLoad = 12
PreviewBeforeShow = 13
PreviewAfterShow = 14
PreviewShow = 10
LiveShow = 11
#PreviewBeforeLoad = 11
#PreviewAfterLoad = 12
#PreviewBeforeShow = 13
#PreviewAfterShow = 14
ThemeListChanged = 15

View File

@ -20,7 +20,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA
import types
from PyQt4 import QtCore, QtGui
from openlp.core.resources import *
from openlp.core.lib.toolbar import *
class MediaManagerItem(QtGui.QWidget):

View File

@ -18,12 +18,12 @@ 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
import time
from openlp import buildIcon
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class ServiceItem():
"""
The service item is a base class for the plugins to use to interact with
@ -50,18 +50,7 @@ class ServiceItem():
log.debug(u'Service item created for %s', self.shortname)
def addIcon(self, icon):
ButtonIcon = None
if type(icon) is QIcon:
ButtonIcon = icon
elif type(icon) is types.StringType or type(icon) is types.UnicodeType:
ButtonIcon = QIcon()
if icon.startswith(u':/'):
ButtonIcon.addPixmap(QPixmap(icon), QIcon.Normal,
QIcon.Off)
else:
ButtonIcon.addPixmap(QPixmap.fromImage(QImage(icon)),
QIcon.Normal, QIcon.Off)
self.iconic_representation = ButtonIcon
self.iconic_representation = buildIcon(icon)
def render(self):
"""

View File

@ -88,11 +88,17 @@ class MainWindow(object):
self.plugin_manager.initialise_plugins()
# Once all components are initialised load the Themes
log.info(u'Load Themes')
log.info(u'Load Themes and Managers')
self.PreviewController.eventManager = self.EventManager
self.PreviewController.serviceManager = self.ServiceManagerContents
self.LiveController.eventManager = self.EventManager
self.LiveController.serviceManager = self.ServiceManagerContents
self.ThemeManagerContents.eventManager = self.EventManager
self.ThemeManagerContents.renderManager = self.RenderManager
self.ServiceManagerContents.renderManager = self.RenderManager
self.ServiceManagerContents.eventManager = self.EventManager
self.ServiceManagerContents.liveController = self.LiveController
self.ServiceManagerContents.previewController = self.PreviewController
self.ThemeManagerContents.serviceManager = self.ServiceManagerContents
self.ThemeManagerContents.loadThemes()

View File

@ -20,94 +20,15 @@ Place, Suite 330, Boston, MA 02111-1307 USA
import os
import logging
from time import sleep
from copy import deepcopy
from PyQt4 import QtCore, QtGui
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 import buildIcon
from openlp.core.lib import Event, EventType, EventManager
#class ServiceData(QtCore.QAbstractItemModel):
# """
# Tree of items for an order of service.
# Includes methods for reading and writing the contents to an OOS file
# Root contains a list of ServiceItems
# """
# global log
# log=logging.getLogger(u'ServiceData')
# def __init__(self):
# QtCore.QAbstractItemModel.__init__(self)
# self.items=[]
# log.info("Starting")
#
# def clearItems(self):
# self.items = []
#
# def columnCount(self, parent=None):
# return 1; # always only a single column (for now)
#
# def rowCount(self, parent=None):
# return len(self.items)
#
# def insertRow(self, row, service_item):
# self.beginInsertRows(QtCore.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()
#
# def removeRow(self, row):
# self.beginRemoveRows(QtCore.QModelIndex(), row,row)
# self.items.pop(row)
# self.endRemoveRows()
#
# def addRow(self, service_item):
# self.insertRow(len(self.items), service_item)
#
# def index(self, row, col, parent = QtCore.QModelIndex()):
# return self.createIndex(row,col)
#
# def parent(self, index=QtCore.QModelIndex()):
# return QtCore.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 QtCore.QVariant()
# item = self.items[row]
# if role == QtCore.Qt.DisplayRole:
# retval= item.title + u':' + item.shortname
# elif role == QtCore.Qt.DecorationRole:
# retval = item.iconic_representation
# elif role == QtCore.Qt.ToolTipRole:
# retval = None
# else:
# retval = None
# if retval == None:
# retval = QtCore.QVariant()
## log.info("Returning"+ str(retval))
# if type(retval) is not type(QtCore.QVariant):
# return QtCore.QVariant(retval)
# else:
# return retval
#
# def __iter__(self):
# for i in self.items:
# yield i
#
# def item(self, row):
# log.info("Get Item:%d -> %s" %(row, str(self.items)))
# return self.items[row]
class ServiceManager(QtGui.QWidget):
"""Manages the orders of service. Currently this involves taking
@ -122,6 +43,7 @@ class ServiceManager(QtGui.QWidget):
def __init__(self, parent):
QtGui.QWidget.__init__(self)
self.parent=parent
self.serviceItems=[]
self.Layout = QtGui.QVBoxLayout(self)
self.Layout.setSpacing(0)
self.Layout.setMargin(0)
@ -153,20 +75,48 @@ class ServiceManager(QtGui.QWidget):
self.Toolbar.addAction(self.ThemeWidget)
self.Layout.addWidget(self.Toolbar)
self.serviceManagerList = QtGui.QTreeWidget(self)
self.serviceManagerList.setEditTriggers(QtGui.QAbstractItemView.CurrentChanged|QtGui.QAbstractItemView.DoubleClicked|QtGui.QAbstractItemView.EditKeyPressed)
self.serviceManagerList.setDragDropMode(QtGui.QAbstractItemView.DragDrop)
self.serviceManagerList.setAlternatingRowColors(True)
self.serviceManagerList.setObjectName("serviceManagerList")
self.serviceManagerList .__class__.dragEnterEvent=self.dragEnterEvent
self.serviceManagerList .__class__.dragMoveEvent=self.dragEnterEvent
self.serviceManagerList .__class__.dropEvent =self.dropEvent
self.ServiceManagerList = QtGui.QTreeWidget(self)
self.ServiceManagerList.setEditTriggers(QtGui.QAbstractItemView.CurrentChanged|QtGui.QAbstractItemView.DoubleClicked|QtGui.QAbstractItemView.EditKeyPressed)
self.ServiceManagerList.setDragDropMode(QtGui.QAbstractItemView.DragDrop)
self.ServiceManagerList.setAlternatingRowColors(True)
self.ServiceManagerList.setObjectName("ServiceManagerList")
#endable drop
self.ServiceManagerList .__class__.dragEnterEvent=self.dragEnterEvent
self.ServiceManagerList .__class__.dragMoveEvent=self.dragEnterEvent
self.ServiceManagerList .__class__.dropEvent =self.dropEvent
self.Layout.addWidget(self.serviceManagerList)
self.ServiceManagerList.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
self.ServiceManagerList.addAction(self.contextMenuAction(
self.ServiceManagerList, ':/system/system_preview.png',
translate(u'ServiceManager',u'&Preview Verse'), self.makePreview))
self.ServiceManagerList.addAction(self.contextMenuAction(
self.ServiceManagerList, ':/system/system_live.png',
translate(u'ServiceManager',u'&Show Live'), self.makeLive))
self.ServiceManagerList.addAction(self.contextMenuSeparator(self.ServiceManagerList))
self.ServiceManagerList.addAction(self.contextMenuAction(
self.ServiceManagerList, ':/services/service_delete',
translate(u'ServiceManager',u'&Remove from Service'), self.onDeleteFromService))
self.Layout.addWidget(self.ServiceManagerList)
QtCore.QObject.connect(self.ThemeComboBox,
QtCore.SIGNAL("activated(int)"), self.onThemeComboBoxSelected)
def contextMenuAction(self, base, icon, text, slot):
"""
Utility method to help build context menus for plugins
"""
action = QtGui.QAction(text, base)
action .setIcon(buildIcon(icon))
QtCore.QObject.connect(action, QtCore.SIGNAL("triggered()"), slot)
return action
def contextMenuSeparator(self, base):
action = QtGui.QAction("", base)
action.setSeparator(True)
return action
def onServiceTop(self):
pass
@ -195,16 +145,43 @@ class ServiceManager(QtGui.QWidget):
self.renderManager.default_theme = self.ThemeComboBox.currentText()
def addServiceItem(self, item):
treewidgetitem = QtGui.QTreeWidgetItem(self.serviceManagerList)
self.serviceItems.append({u'data': item, u'order': len(self.serviceItems)+1})
treewidgetitem = QtGui.QTreeWidgetItem(self.ServiceManagerList)
treewidgetitem.setText(0,item.title + u':' + item.shortname)
treewidgetitem.setIcon(0,item.iconic_representation)
treewidgetitem.setData(0, QtCore.Qt.UserRole, QtCore.QVariant(len(self.serviceItems)))
treewidgetitem.setExpanded(True)
item.render()
count = 0
for frame in item.frames:
treewidgetitem1 = QtGui.QTreeWidgetItem(treewidgetitem)
text = frame[u'formatted'][0]
treewidgetitem1.setText(0,text[:10])
#treewidgetitem1.setIcon(0,frame[u'image'])
treewidgetitem1.setText(0,text[:30])
treewidgetitem1.setData(0, QtCore.Qt.UserRole,QtCore.QVariant(count))
count = count + 1
def makePreview(self):
item, count = self.findServiceItem()
self.previewController.addServiceManagerItem(self.serviceItems[item][u'data'], count)
def makeLive(self):
item, count = self.findServiceItem()
self.liveController.addServiceManagerItem(self.serviceItems[item][u'data'], count)
def findServiceItem(self):
items = self.ServiceManagerList.selectedItems()
pos = 0
count = 0
for item in items:
childCount = item.childCount()
if childCount >= 1: # is the parent
pos = item.data(0, QtCore.Qt.UserRole).toInt()[0]
else:
parentitem = item.parent()
pos = parentitem.data(0, QtCore.Qt.UserRole).toInt()[0]
count = item.data(0, QtCore.Qt.UserRole).toInt()[0]
pos = pos - 1 #adjust for zeor indexing
return pos, count
def dragEnterEvent(self, event):
"""

View File

@ -24,6 +24,7 @@ from PyQt4 import QtCore, QtGui
from openlp.core.lib import OpenLPToolbar
from openlp.core import translate
from openlp.core.lib import Event, EventType, EventManager
class SlideData(QtCore.QAbstractListModel):
"""
@ -41,6 +42,10 @@ class SlideData(QtCore.QAbstractListModel):
self.maximagewidth=self.rowheight*16/9.0;
log.info(u'Starting')
def eventFilter(self, obj, event):
print obj, event
return false
def clear(self):
self.items=[]
@ -54,7 +59,7 @@ class SlideData(QtCore.QAbstractListModel):
self.beginInsertRows(QtCore.QModelIndex(),row,row)
log.info(u'insert row %d' % row)
# create a preview image
frame1 = frame.scaled(QtCore.QSize(350,260), QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
frame1 = frame.scaled(QtCore.QSize(300,225), QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
self.items.insert(row,(frame1, framenumber))
log.info(u'Items: %s' % self.items)
self.endInsertRows()
@ -71,13 +76,10 @@ class SlideData(QtCore.QAbstractListModel):
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 QtCore.QVariant()
# if role==Qt.DisplayRole:
# retval= self.items[row][1]
if role == QtCore.Qt.DecorationRole:
retval= self.items[row][0]
else:
retval= QtCore.QVariant()
# log.info("Returning"+ str(retval))
if type(retval) is not type(QtCore.QVariant):
return QtCore.QVariant(retval)
else:
@ -117,17 +119,26 @@ class SlideController(QtGui.QWidget):
self.PanelLayout.setMargin(0)
self.Controller = QtGui.QScrollArea(self.Splitter)
self.Controller.setGeometry(QtCore.QRect(0, 0, 700, 536))
self.Controller.setWidgetResizable(True)
self.Controller.setObjectName("scrollArea")
self.PreviewListView = QtGui.QListView(self.Splitter)
self.PreviewListView.setEditTriggers(QtGui.QAbstractItemView.CurrentChanged)
self.PreviewListView.setAlternatingRowColors(True)
self.scrollAreaWidgetContents = QtGui.QWidget(self.Controller)
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 700, 536))
self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
self.gridLayout = QtGui.QGridLayout(self.scrollAreaWidgetContents)
self.gridLayout.setObjectName("gridLayout")
self.PreviewListView = QtGui.QListView(self.scrollAreaWidgetContents)
self.PreviewListData = SlideData()
self.PreviewListView.isLive = self.isLive
self.PreviewListView.setModel(self.PreviewListData)
self.PreviewListView.setSelectionRectVisible(True)
self.PreviewListView.setSpacing(5)
self.PreviewListView.setObjectName("PreviewListView")
self.Controller.setGeometry(QtCore.QRect(0, 0, 828, 536))
self.Controller.setWidget(self.PreviewListView)
self.gridLayout.addWidget(self.PreviewListView, 0, 0, 1, 1)
self.Controller.setWidget(self.scrollAreaWidgetContents)
self.Toolbar = OpenLPToolbar(self.Splitter)
sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
@ -151,7 +162,17 @@ class SlideController(QtGui.QWidget):
self.Toolbar.setSizePolicy(sizeToolbarPolicy)
self.SlidePreview = QtGui.QLabel(self.Splitter)
self.PreviewFrame = QtGui.QFrame(self.Splitter)
self.PreviewFrame.setGeometry(QtCore.QRect(50, 270, 250, 190))
self.PreviewFrame.setFrameShape(QtGui.QFrame.StyledPanel)
self.PreviewFrame.setFrameShadow(QtGui.QFrame.Sunken)
self.PreviewFrame.setObjectName(u'PreviewFrame')
self.grid = QtGui.QGridLayout(self.PreviewFrame)
self.grid.setMargin(10)
self.grid.setObjectName(u'grid')
self.SlidePreview = QtGui.QLabel(self.PreviewFrame)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
@ -163,16 +184,12 @@ class SlideController(QtGui.QWidget):
self.SlidePreview.setLineWidth(1)
self.SlidePreview.setScaledContents(True)
self.SlidePreview.setObjectName(u'SlidePreview')
self.grid.addWidget(self.SlidePreview, 0, 0, 1, 1)
QtCore.QObject.connect(self.PreviewListView,
QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected)
QtCore.QObject.connect(self.PreviewListView,
QtCore.SIGNAL(u'clicked(QListViewItem)'), self.onCurrentItemChanged)
def onCurrentItemChanged(self, current, previous):
print u'Method slideControllerList currentItemChanged called', current, previous
QtCore.SIGNAL(u'activated(QModelIndex)'), self.onSlideSelected)
def onSlideSelectedFirst(self):
row = self.PreviewListData.createIndex(0, 0)
@ -241,5 +258,9 @@ class SlideController(QtGui.QWidget):
self.PreviewListView.selectionModel().setCurrentIndex(row, QtGui.QItemSelectionModel.SelectCurrent)
self.onSlideSelected(row)
def render(self):
pass
def addServiceManagerItem(self, serviceitem, slideno):
self.addServiceItem(serviceitem)
row = self.PreviewListData.createIndex(slideno, 0)
if row.isValid():
self.PreviewListView.selectionModel().setCurrentIndex(row, QtGui.QItemSelectionModel.SelectCurrent)
self.onSlideSelected(row)

View File

@ -23,7 +23,6 @@ from PyQt4 import QtCore, QtGui
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from openlp.core.resources import *
from openlp.core.lib import Plugin, Event
from openlp.core.lib import EventType
@ -83,7 +82,16 @@ class BiblePlugin(Plugin):
"""
Handle the event contained in the event object.
"""
log.debug(u'Handle event called with event %s'%event.event_type)
log.debug(u'Handle event called with event %s with payload %s'%(event.event_type, event.payload))
if event.event_type == EventType.ThemeListChanged:
log.debug(u'New Theme request received')
#self.edit_custom_form.loadThemes(self.theme_manager.getThemes())
if event.event_type == EventType.LoadServiceItem and event.payload == 'Bibles':
log.debug(u'Load Service Item received')
self.media_item.onBibleAddClick()
if event.event_type == EventType.PreviewShow and event.payload == 'Bibles':
log.debug(u'Load Service Item received')
self.media_item.onBiblePreviewClick()
if event.event_type == EventType.LiveShow and event.payload == 'Bibles':
log.debug(u'Load Service Item received')
self.media_item.onBibleLiveClick()

View File

@ -28,6 +28,30 @@ from openlp.core.lib import ServiceItem
from openlp.plugins.bibles.forms import BibleImportForm
from openlp.plugins.bibles.lib import TextListData
class BibleList(QtGui.QListView):
def __init__(self,parent=None,name=None):
QtGui.QListView.__init__(self,parent)
def mouseMoveEvent(self, event):
"""
Drag and drop event does not care what data is selected
as the recepient will use events to request the data move
just tell it what plugin to call
"""
if event.buttons() != QtCore.Qt.LeftButton:
return
drag = QtGui.QDrag(self)
mimeData = QtCore.QMimeData()
drag.setMimeData(mimeData)
mimeData.setText(u'Bibles')
dropAction = drag.start(QtCore.Qt.CopyAction)
if dropAction == QtCore.Qt.CopyAction:
self.close()
class BibleMediaItem(MediaManagerItem):
"""
This is the custom media manager item for Bibles.
@ -179,11 +203,12 @@ class BibleMediaItem(MediaManagerItem):
# Add the search tab widget to the page layout
self.PageLayout.addWidget(self.SearchTabWidget)
self.BibleListView = QtGui.QListView()
self.BibleListView = BibleList()
self.BibleListView.setAlternatingRowColors(True)
self.BibleListData = TextListData()
self.BibleListView.setModel(self.BibleListData)
self.BibleListView.setSelectionMode(2)
self.BibleListView.setSelectionMode(QtGui.QAbstractItemView.MultiSelection)
self.BibleListView.setDragEnabled(True)
self.PageLayout.addWidget(self.BibleListView)
@ -205,6 +230,7 @@ class BibleMediaItem(MediaManagerItem):
QtCore.SIGNAL("pressed()"), self.onQuickSearchButton)
# Context Menus
self.BibleListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
self.BibleListView.addAction(self.contextMenuAction(
self.BibleListView, ':/system/system_preview.png',
translate(u'BibleMediaItem',u'&Preview Verse'), self.onBiblePreviewClick))

View File

@ -56,10 +56,16 @@ class CustomPlugin(Plugin):
"""
Handle the event contained in the event object.
"""
log.debug(u'Handle event called with event %s'%event.event_type)
log.debug(u'Handle event called with event %s with payload %s'%(event.event_type, event.payload))
if event.event_type == EventType.ThemeListChanged:
log.debug(u'New Theme request received')
self.edit_custom_form.loadThemes(self.theme_manager.getThemes())
if event.event_type == EventType.LoadServiceItem and event.payload == 'Custom':
log.debug(u'Load Service Item received')
self.media_item.onCustomAddClick()
if event.event_type == EventType.PreviewShow and event.payload == 'Custom':
log.debug(u'Load Service Item received ')
self.media_item.onCustomPreviewClick()
if event.event_type == EventType.LiveShow and event.payload == 'Custom':
log.debug(u'Load Service Item received')
self.media_item.onCustomLiveClick()

View File

@ -28,6 +28,29 @@ from openlp.core.lib import ServiceItem
from openlp.plugins.custom.lib import TextListData
class CustomList(QtGui.QListView):
def __init__(self,parent=None,name=None):
QtGui.QListView.__init__(self,parent)
def mouseMoveEvent(self, event):
"""
Drag and drop event does not care what data is selected
as the recepient will use events to request the data move
just tell it what plugin to call
"""
if event.buttons() != QtCore.Qt.LeftButton:
return
drag = QtGui.QDrag(self)
mimeData = QtCore.QMimeData()
drag.setMimeData(mimeData)
mimeData.setText(u'Custom')
dropAction = drag.start(QtCore.Qt.CopyAction)
if dropAction == QtCore.Qt.CopyAction:
self.close()
class CustomMediaItem(MediaManagerItem):
"""
This is the custom media manager item for Custom Slides.
@ -105,12 +128,11 @@ class CustomMediaItem(MediaManagerItem):
# Add the Custom widget to the page layout
self.PageLayout.addWidget(self.CustomWidget)
self.CustomListView = QtGui.QListView()
self.CustomListView = CustomList()
self.CustomListView.setAlternatingRowColors(True)
self.CustomListData = TextListData()
self.CustomListView.setModel(self.CustomListData)
self.CustomListView.setDragEnabled(True)
self.CustomListView .__class__.mouseMoveEvent =self.onMouseMoveEvent
self.PageLayout.addWidget(self.CustomListView)
@ -235,27 +257,3 @@ class CustomMediaItem(MediaManagerItem):
service_item.title = title
service_item.raw_slides = raw_slides
service_item.raw_footer = raw_footer
def onMouseMoveEvent(self, event):
"""
Drag and drop eventDo not care what data is selected
as the recepient will use events to request the data move
just tell it what plugin to call
"""
if event.buttons() != QtCore.Qt.LeftButton:
return
items = self.CustomListView.selectedIndexes()
if items == []:
return
drag = QtGui.QDrag(self)
mimeData = QtCore.QMimeData()
drag.setMimeData(mimeData)
for item in items:
mimeData.setText(u'Custom')
dropAction = drag.start(QtCore.Qt.CopyAction)
if dropAction == QtCore.Qt.CopyAction:
self.close()

View File

@ -21,8 +21,8 @@ import logging
from PyQt4 import QtCore, QtGui
from openlp.core.lib import Plugin
from openlp.core.resources import *
from openlp.core.lib import Plugin, Event
from openlp.core.lib import EventType
from openlp.plugins.images.lib import ImageMediaItem, ImageServiceItem
@ -37,7 +37,7 @@ class ImagePlugin(Plugin):
self.weight = -7
# Create the plugin icon
self.icon = QtGui.QIcon()
self.icon.addPixmap(QtGui.QPixmap(':/media/media_image.png'),
self.icon.addPixmap(QtGui.QPixmap(u':/media/media_image.png'),
QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.preview_service_item = ImageServiceItem(self.preview_controller)
@ -45,11 +45,25 @@ class ImagePlugin(Plugin):
def get_media_manager_item(self):
# Create the MediaManagerItem object
self.MediaManagerItem = ImageMediaItem(self, self.icon, u'Images')
return self.MediaManagerItem
self.media_item = ImageMediaItem(self, self.icon, u'Images')
return self.media_item
def initialise(self):
log.info(u'Plugin Initialising')
log.info(u'Done')
def handle_event(self, event):
"""
Handle the event contained in the event object.
"""
log.debug(u'Handle event called with event %s with payload %s'%(event.event_type, event.payload))
if event.event_type == EventType.LoadServiceItem and event.payload == 'Image':
log.debug(u'Load Service Item received')
self.media_item.onImageAddClick()
if event.event_type == EventType.PreviewShow and event.payload == 'Image':
log.debug(u'Load Service Item received')
self.media_item.onImagePreviewClick()
if event.event_type == EventType.LiveShow and event.payload == 'Image':
log.debug(u'Load Service Item received')
self.media_item.onImageLiveClick()

View File

@ -24,10 +24,33 @@ from PyQt4 import QtCore, QtGui
from openlp.core import translate
from openlp.core.lib import MediaManagerItem
from openlp.core.resources import *
from openlp.core.lib import ServiceItem
from openlp.plugins.images.lib import ListWithPreviews
class ImageList(QtGui.QListView):
def __init__(self,parent=None,name=None):
QtGui.QListView.__init__(self,parent)
def mouseMoveEvent(self, event):
"""
Drag and drop event does not care what data is selected
as the recepient will use events to request the data move
just tell it what plugin to call
"""
if event.buttons() != QtCore.Qt.LeftButton:
return
drag = QtGui.QDrag(self)
mimeData = QtCore.QMimeData()
drag.setMimeData(mimeData)
mimeData.setText(u'Image')
dropAction = drag.start(QtCore.Qt.CopyAction)
if dropAction == QtCore.Qt.CopyAction:
self.close()
class ImageMediaItem(MediaManagerItem):
"""
This is the custom media manager item for images.
@ -70,14 +93,19 @@ class ImageMediaItem(MediaManagerItem):
translate('ImageMediaItem', u'Add Image To Service'),
translate('ImageMediaItem', u'Add the selected image(s) to the service'),
':/system/system_add.png', self.onImageAddClick, 'ImageAddItem')
## Add the songlist widget ##
self.ImageListView = QtGui.QListView()
#Add the Image List widget
self.ImageListView = ImageList()
self.ImageListView.uniformItemSizes = True
self.ImageListData = ListWithPreviews()
self.ImageListView.setModel(self.ImageListData)
self.ImageListView.setGeometry(QtCore.QRect(10, 100, 256, 591))
self.ImageListView.setSpacing(1)
self.ImageListView.setSelectionMode(QtGui.QAbstractItemView.MultiSelection)
self.ImageListView.setAlternatingRowColors(True)
self.ImageListView.setDragEnabled(True)
self.ImageListView.setObjectName('ImageListView')
self.PageLayout.addWidget(self.ImageListView)
#define and add the context menu
@ -96,11 +124,6 @@ class ImageMediaItem(MediaManagerItem):
translate('ImageMediaItem', u'&Add to Service'),
self.onImageAddClick))
self.ImageListPreview = QtGui.QWidget()
self.PageLayout.addWidget(self.ImageListPreview)
self.ImageListView.setGeometry(QtCore.QRect(10, 100, 256, 591))
self.ImageListView.setSpacing(1)
self.ImageListView.setAlternatingRowColors(True)
def initialise(self):
self.loadImageList(self.parent.config.load_list(u'images'))
@ -126,22 +149,35 @@ class ImageMediaItem(MediaManagerItem):
for index in indexes:
current_row = int(index.row())
self.ImageListData.removeRow(current_row)
self.parent.config.set_list(u'images', self.ImageListData.getFileList())
self.parent.config.set_list(u'images', self.ImageListData.getFileList())
def onImageClick(self, where):
def generateSlideData(self, service_item):
indexes = self.ImageListView.selectedIndexes()
for index in indexes:
filename = self.ImageListData.getFilename(index)
log.info(u"Click %s:%s"%(str(where), filename))
where.add(filename)
where.render()
frame = QtGui.QPixmap(str(filename))
service_item.frames.append({u'formatted': u'Image', u'image': frame})
def onImagePreviewClick(self):
self.onImageClick(self.parent.preview_service_item)
log.debug(u'Image Preview Requested')
service_item = ServiceItem(self.parent)
service_item.addIcon( ":/media/media_image.png")
service_item.render_manager = self.parent.render_manager
self.generateSlideData(service_item)
self.parent.preview_controller.addServiceItem(service_item)
def onImageLiveClick(self):
self.onImageClick(self.parent.live_service_item)
log.debug(u'Image Live Requested')
service_item = ServiceItem(self.parent)
service_item.addIcon( ":/media/media_image.png")
service_item.render_manager = self.parent.render_manager
self.generateSlideData(service_item)
self.parent.live_controller.addServiceItem(service_item)
def onImageAddClick(self):
"""Add this item to the OOS"""
pass
log.debug(u'Image Live Requested')
service_item = ServiceItem(self.parent)
service_item.addIcon( ":/media/media_image.png")
service_item.render_manager = self.parent.render_manager
self.generateSlideData(service_item)
self.parent.service_manager.addServiceItem(service_item)