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 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
""" """
__all__ = ['convertStringToBoolean'] import types
from PyQt4 import QtCore, QtGui
__all__ = ['convertStringToBoolean','buildIcon',]
def convertStringToBoolean(stringvalue): def convertStringToBoolean(stringvalue):
return stringvalue.strip().lower() in (u'true', u'yes', u'y') 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 AfterSaveService = 4
LoadServiceItem = 5 LoadServiceItem = 5
# Preview events # Preview events
PreviewBeforeLoad = 11 PreviewShow = 10
PreviewAfterLoad = 12 LiveShow = 11
PreviewBeforeShow = 13 #PreviewBeforeLoad = 11
PreviewAfterShow = 14 #PreviewAfterLoad = 12
#PreviewBeforeShow = 13
#PreviewAfterShow = 14
ThemeListChanged = 15 ThemeListChanged = 15

View File

@ -20,7 +20,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA
import types import types
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from openlp.core.resources import *
from openlp.core.lib.toolbar import * from openlp.core.lib.toolbar import *
class MediaManagerItem(QtGui.QWidget): 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 Place, Suite 330, Boston, MA 02111-1307 USA
""" """
import logging import logging
import types
import time import time
from openlp import buildIcon
from PyQt4.QtCore import * from PyQt4.QtCore import *
from PyQt4.QtGui import * from PyQt4.QtGui import *
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
@ -50,18 +50,7 @@ class ServiceItem():
log.debug(u'Service item created for %s', self.shortname) log.debug(u'Service item created for %s', self.shortname)
def addIcon(self, icon): def addIcon(self, icon):
ButtonIcon = None self.iconic_representation = buildIcon(icon)
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
def render(self): def render(self):
""" """

View File

@ -88,11 +88,17 @@ class MainWindow(object):
self.plugin_manager.initialise_plugins() self.plugin_manager.initialise_plugins()
# Once all components are initialised load the Themes # 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.eventManager = self.EventManager
self.ThemeManagerContents.renderManager = self.RenderManager self.ThemeManagerContents.renderManager = self.RenderManager
self.ServiceManagerContents.renderManager = self.RenderManager self.ServiceManagerContents.renderManager = self.RenderManager
self.ServiceManagerContents.eventManager = self.EventManager self.ServiceManagerContents.eventManager = self.EventManager
self.ServiceManagerContents.liveController = self.LiveController
self.ServiceManagerContents.previewController = self.PreviewController
self.ThemeManagerContents.serviceManager = self.ServiceManagerContents self.ThemeManagerContents.serviceManager = self.ServiceManagerContents
self.ThemeManagerContents.loadThemes() self.ThemeManagerContents.loadThemes()

View File

@ -20,94 +20,15 @@ Place, Suite 330, Boston, MA 02111-1307 USA
import os import os
import logging import logging
from time import sleep
from copy import deepcopy
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from openlp.core.lib import OpenLPToolbar from openlp.core.lib import OpenLPToolbar
from openlp.core.lib import ServiceItem from openlp.core.lib import ServiceItem
from openlp.core.lib import RenderManager from openlp.core.lib import RenderManager
from openlp.core import translate from openlp.core import translate
from openlp import buildIcon
from openlp.core.lib import Event, EventType, EventManager 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): class ServiceManager(QtGui.QWidget):
"""Manages the orders of service. Currently this involves taking """Manages the orders of service. Currently this involves taking
@ -122,6 +43,7 @@ class ServiceManager(QtGui.QWidget):
def __init__(self, parent): def __init__(self, parent):
QtGui.QWidget.__init__(self) QtGui.QWidget.__init__(self)
self.parent=parent self.parent=parent
self.serviceItems=[]
self.Layout = QtGui.QVBoxLayout(self) self.Layout = QtGui.QVBoxLayout(self)
self.Layout.setSpacing(0) self.Layout.setSpacing(0)
self.Layout.setMargin(0) self.Layout.setMargin(0)
@ -153,20 +75,48 @@ class ServiceManager(QtGui.QWidget):
self.Toolbar.addAction(self.ThemeWidget) self.Toolbar.addAction(self.ThemeWidget)
self.Layout.addWidget(self.Toolbar) self.Layout.addWidget(self.Toolbar)
self.serviceManagerList = QtGui.QTreeWidget(self) self.ServiceManagerList = QtGui.QTreeWidget(self)
self.serviceManagerList.setEditTriggers(QtGui.QAbstractItemView.CurrentChanged|QtGui.QAbstractItemView.DoubleClicked|QtGui.QAbstractItemView.EditKeyPressed) self.ServiceManagerList.setEditTriggers(QtGui.QAbstractItemView.CurrentChanged|QtGui.QAbstractItemView.DoubleClicked|QtGui.QAbstractItemView.EditKeyPressed)
self.serviceManagerList.setDragDropMode(QtGui.QAbstractItemView.DragDrop) self.ServiceManagerList.setDragDropMode(QtGui.QAbstractItemView.DragDrop)
self.serviceManagerList.setAlternatingRowColors(True) self.ServiceManagerList.setAlternatingRowColors(True)
self.serviceManagerList.setObjectName("serviceManagerList") self.ServiceManagerList.setObjectName("ServiceManagerList")
self.serviceManagerList .__class__.dragEnterEvent=self.dragEnterEvent #endable drop
self.serviceManagerList .__class__.dragMoveEvent=self.dragEnterEvent self.ServiceManagerList .__class__.dragEnterEvent=self.dragEnterEvent
self.serviceManagerList .__class__.dropEvent =self.dropEvent 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.QObject.connect(self.ThemeComboBox,
QtCore.SIGNAL("activated(int)"), self.onThemeComboBoxSelected) 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): def onServiceTop(self):
pass pass
@ -195,16 +145,43 @@ class ServiceManager(QtGui.QWidget):
self.renderManager.default_theme = self.ThemeComboBox.currentText() self.renderManager.default_theme = self.ThemeComboBox.currentText()
def addServiceItem(self, item): 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.setText(0,item.title + u':' + item.shortname)
treewidgetitem.setIcon(0,item.iconic_representation) treewidgetitem.setIcon(0,item.iconic_representation)
treewidgetitem.setData(0, QtCore.Qt.UserRole, QtCore.QVariant(len(self.serviceItems)))
treewidgetitem.setExpanded(True) treewidgetitem.setExpanded(True)
item.render() item.render()
count = 0
for frame in item.frames: for frame in item.frames:
treewidgetitem1 = QtGui.QTreeWidgetItem(treewidgetitem) treewidgetitem1 = QtGui.QTreeWidgetItem(treewidgetitem)
text = frame[u'formatted'][0] text = frame[u'formatted'][0]
treewidgetitem1.setText(0,text[:10]) treewidgetitem1.setText(0,text[:30])
#treewidgetitem1.setIcon(0,frame[u'image']) 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): def dragEnterEvent(self, event):
""" """

View File

@ -24,6 +24,7 @@ from PyQt4 import QtCore, QtGui
from openlp.core.lib import OpenLPToolbar from openlp.core.lib import OpenLPToolbar
from openlp.core import translate from openlp.core import translate
from openlp.core.lib import Event, EventType, EventManager
class SlideData(QtCore.QAbstractListModel): class SlideData(QtCore.QAbstractListModel):
""" """
@ -41,6 +42,10 @@ class SlideData(QtCore.QAbstractListModel):
self.maximagewidth=self.rowheight*16/9.0; self.maximagewidth=self.rowheight*16/9.0;
log.info(u'Starting') log.info(u'Starting')
def eventFilter(self, obj, event):
print obj, event
return false
def clear(self): def clear(self):
self.items=[] self.items=[]
@ -54,7 +59,7 @@ class SlideData(QtCore.QAbstractListModel):
self.beginInsertRows(QtCore.QModelIndex(),row,row) self.beginInsertRows(QtCore.QModelIndex(),row,row)
log.info(u'insert row %d' % row) log.info(u'insert row %d' % row)
# create a preview image # 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)) self.items.insert(row,(frame1, framenumber))
log.info(u'Items: %s' % self.items) log.info(u'Items: %s' % self.items)
self.endInsertRows() self.endInsertRows()
@ -71,13 +76,10 @@ class SlideData(QtCore.QAbstractListModel):
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 QtCore.QVariant() return QtCore.QVariant()
# if role==Qt.DisplayRole:
# retval= self.items[row][1]
if role == QtCore.Qt.DecorationRole: if role == QtCore.Qt.DecorationRole:
retval= self.items[row][0] retval= self.items[row][0]
else: else:
retval= QtCore.QVariant() retval= QtCore.QVariant()
# log.info("Returning"+ str(retval))
if type(retval) is not type(QtCore.QVariant): if type(retval) is not type(QtCore.QVariant):
return QtCore.QVariant(retval) return QtCore.QVariant(retval)
else: else:
@ -117,17 +119,26 @@ class SlideController(QtGui.QWidget):
self.PanelLayout.setMargin(0) self.PanelLayout.setMargin(0)
self.Controller = QtGui.QScrollArea(self.Splitter) self.Controller = QtGui.QScrollArea(self.Splitter)
self.Controller.setGeometry(QtCore.QRect(0, 0, 700, 536))
self.Controller.setWidgetResizable(True) self.Controller.setWidgetResizable(True)
self.Controller.setObjectName("scrollArea")
self.PreviewListView = QtGui.QListView(self.Splitter) self.scrollAreaWidgetContents = QtGui.QWidget(self.Controller)
self.PreviewListView.setEditTriggers(QtGui.QAbstractItemView.CurrentChanged) self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 700, 536))
self.PreviewListView.setAlternatingRowColors(True) self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
self.gridLayout = QtGui.QGridLayout(self.scrollAreaWidgetContents)
self.gridLayout.setObjectName("gridLayout")
self.PreviewListView = QtGui.QListView(self.scrollAreaWidgetContents)
self.PreviewListData = SlideData() self.PreviewListData = SlideData()
self.PreviewListView.isLive = self.isLive
self.PreviewListView.setModel(self.PreviewListData) self.PreviewListView.setModel(self.PreviewListData)
self.PreviewListView.setSelectionRectVisible(True) self.PreviewListView.setSelectionRectVisible(True)
self.PreviewListView.setSpacing(5)
self.PreviewListView.setObjectName("PreviewListView")
self.Controller.setGeometry(QtCore.QRect(0, 0, 828, 536)) self.gridLayout.addWidget(self.PreviewListView, 0, 0, 1, 1)
self.Controller.setWidget(self.PreviewListView) self.Controller.setWidget(self.scrollAreaWidgetContents)
self.Toolbar = OpenLPToolbar(self.Splitter) self.Toolbar = OpenLPToolbar(self.Splitter)
sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
@ -151,7 +162,17 @@ class SlideController(QtGui.QWidget):
self.Toolbar.setSizePolicy(sizeToolbarPolicy) 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 = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0) sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0) sizePolicy.setVerticalStretch(0)
@ -163,16 +184,12 @@ class SlideController(QtGui.QWidget):
self.SlidePreview.setLineWidth(1) self.SlidePreview.setLineWidth(1)
self.SlidePreview.setScaledContents(True) self.SlidePreview.setScaledContents(True)
self.SlidePreview.setObjectName(u'SlidePreview') self.SlidePreview.setObjectName(u'SlidePreview')
self.grid.addWidget(self.SlidePreview, 0, 0, 1, 1)
QtCore.QObject.connect(self.PreviewListView, QtCore.QObject.connect(self.PreviewListView,
QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected) QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected)
QtCore.QObject.connect(self.PreviewListView, QtCore.QObject.connect(self.PreviewListView,
QtCore.SIGNAL(u'clicked(QListViewItem)'), self.onCurrentItemChanged) QtCore.SIGNAL(u'activated(QModelIndex)'), self.onSlideSelected)
def onCurrentItemChanged(self, current, previous):
print u'Method slideControllerList currentItemChanged called', current, previous
def onSlideSelectedFirst(self): def onSlideSelectedFirst(self):
row = self.PreviewListData.createIndex(0, 0) row = self.PreviewListData.createIndex(0, 0)
@ -241,5 +258,9 @@ class SlideController(QtGui.QWidget):
self.PreviewListView.selectionModel().setCurrentIndex(row, QtGui.QItemSelectionModel.SelectCurrent) self.PreviewListView.selectionModel().setCurrentIndex(row, QtGui.QItemSelectionModel.SelectCurrent)
self.onSlideSelected(row) self.onSlideSelected(row)
def render(self): def addServiceManagerItem(self, serviceitem, slideno):
pass 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.QtCore import *
from PyQt4.QtGui import * from PyQt4.QtGui import *
from openlp.core.resources import *
from openlp.core.lib import Plugin, Event from openlp.core.lib import Plugin, Event
from openlp.core.lib import EventType from openlp.core.lib import EventType
@ -83,7 +82,16 @@ class BiblePlugin(Plugin):
""" """
Handle the event contained in the event object. 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: if event.event_type == EventType.ThemeListChanged:
log.debug(u'New Theme request received') log.debug(u'New Theme request received')
#self.edit_custom_form.loadThemes(self.theme_manager.getThemes()) #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.forms import BibleImportForm
from openlp.plugins.bibles.lib import TextListData 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): class BibleMediaItem(MediaManagerItem):
""" """
This is the custom media manager item for Bibles. 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 # Add the search tab widget to the page layout
self.PageLayout.addWidget(self.SearchTabWidget) self.PageLayout.addWidget(self.SearchTabWidget)
self.BibleListView = QtGui.QListView() self.BibleListView = BibleList()
self.BibleListView.setAlternatingRowColors(True) self.BibleListView.setAlternatingRowColors(True)
self.BibleListData = TextListData() self.BibleListData = TextListData()
self.BibleListView.setModel(self.BibleListData) self.BibleListView.setModel(self.BibleListData)
self.BibleListView.setSelectionMode(2) self.BibleListView.setSelectionMode(QtGui.QAbstractItemView.MultiSelection)
self.BibleListView.setDragEnabled(True)
self.PageLayout.addWidget(self.BibleListView) self.PageLayout.addWidget(self.BibleListView)
@ -205,6 +230,7 @@ class BibleMediaItem(MediaManagerItem):
QtCore.SIGNAL("pressed()"), self.onQuickSearchButton) QtCore.SIGNAL("pressed()"), self.onQuickSearchButton)
# Context Menus # Context Menus
self.BibleListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) self.BibleListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
self.BibleListView.addAction(self.contextMenuAction( self.BibleListView.addAction(self.contextMenuAction(
self.BibleListView, ':/system/system_preview.png', self.BibleListView, ':/system/system_preview.png',
translate(u'BibleMediaItem',u'&Preview Verse'), self.onBiblePreviewClick)) 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. 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: if event.event_type == EventType.ThemeListChanged:
log.debug(u'New Theme request received') log.debug(u'New Theme request received')
self.edit_custom_form.loadThemes(self.theme_manager.getThemes()) self.edit_custom_form.loadThemes(self.theme_manager.getThemes())
if event.event_type == EventType.LoadServiceItem and event.payload == 'Custom': if event.event_type == EventType.LoadServiceItem and event.payload == 'Custom':
log.debug(u'Load Service Item received') log.debug(u'Load Service Item received')
self.media_item.onCustomAddClick() 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 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): class CustomMediaItem(MediaManagerItem):
""" """
This is the custom media manager item for Custom Slides. 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 # Add the Custom widget to the page layout
self.PageLayout.addWidget(self.CustomWidget) self.PageLayout.addWidget(self.CustomWidget)
self.CustomListView = QtGui.QListView() self.CustomListView = CustomList()
self.CustomListView.setAlternatingRowColors(True) self.CustomListView.setAlternatingRowColors(True)
self.CustomListData = TextListData() self.CustomListData = TextListData()
self.CustomListView.setModel(self.CustomListData) self.CustomListView.setModel(self.CustomListData)
self.CustomListView.setDragEnabled(True) self.CustomListView.setDragEnabled(True)
self.CustomListView .__class__.mouseMoveEvent =self.onMouseMoveEvent
self.PageLayout.addWidget(self.CustomListView) self.PageLayout.addWidget(self.CustomListView)
@ -235,27 +257,3 @@ class CustomMediaItem(MediaManagerItem):
service_item.title = title service_item.title = title
service_item.raw_slides = raw_slides service_item.raw_slides = raw_slides
service_item.raw_footer = raw_footer 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 PyQt4 import QtCore, QtGui
from openlp.core.lib import Plugin from openlp.core.lib import Plugin, Event
from openlp.core.resources import * from openlp.core.lib import EventType
from openlp.plugins.images.lib import ImageMediaItem, ImageServiceItem from openlp.plugins.images.lib import ImageMediaItem, ImageServiceItem
@ -37,7 +37,7 @@ class ImagePlugin(Plugin):
self.weight = -7 self.weight = -7
# Create the plugin icon # Create the plugin icon
self.icon = QtGui.QIcon() 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) QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.preview_service_item = ImageServiceItem(self.preview_controller) self.preview_service_item = ImageServiceItem(self.preview_controller)
@ -45,11 +45,25 @@ class ImagePlugin(Plugin):
def get_media_manager_item(self): def get_media_manager_item(self):
# Create the MediaManagerItem object # Create the MediaManagerItem object
self.MediaManagerItem = ImageMediaItem(self, self.icon, u'Images') self.media_item = ImageMediaItem(self, self.icon, u'Images')
return self.MediaManagerItem return self.media_item
def initialise(self): def initialise(self):
log.info(u'Plugin Initialising') 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 import translate
from openlp.core.lib import MediaManagerItem from openlp.core.lib import MediaManagerItem
from openlp.core.resources import * from openlp.core.lib import ServiceItem
from openlp.plugins.images.lib import ListWithPreviews 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): class ImageMediaItem(MediaManagerItem):
""" """
This is the custom media manager item for images. 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 Image To Service'),
translate('ImageMediaItem', u'Add the selected image(s) to the service'), translate('ImageMediaItem', u'Add the selected image(s) to the service'),
':/system/system_add.png', self.onImageAddClick, 'ImageAddItem') ':/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.ImageListView.uniformItemSizes = True
self.ImageListData = ListWithPreviews() self.ImageListData = ListWithPreviews()
self.ImageListView.setModel(self.ImageListData) self.ImageListView.setModel(self.ImageListData)
self.ImageListView.setGeometry(QtCore.QRect(10, 100, 256, 591)) 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.ImageListView.setObjectName('ImageListView')
self.PageLayout.addWidget(self.ImageListView) self.PageLayout.addWidget(self.ImageListView)
#define and add the context menu #define and add the context menu
@ -96,11 +124,6 @@ class ImageMediaItem(MediaManagerItem):
translate('ImageMediaItem', u'&Add to Service'), translate('ImageMediaItem', u'&Add to Service'),
self.onImageAddClick)) 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): def initialise(self):
self.loadImageList(self.parent.config.load_list(u'images')) self.loadImageList(self.parent.config.load_list(u'images'))
@ -126,22 +149,35 @@ class ImageMediaItem(MediaManagerItem):
for index in indexes: for index in indexes:
current_row = int(index.row()) current_row = int(index.row())
self.ImageListData.removeRow(current_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() indexes = self.ImageListView.selectedIndexes()
for index in indexes: for index in indexes:
filename = self.ImageListData.getFilename(index) filename = self.ImageListData.getFilename(index)
log.info(u"Click %s:%s"%(str(where), filename)) frame = QtGui.QPixmap(str(filename))
where.add(filename) service_item.frames.append({u'formatted': u'Image', u'image': frame})
where.render()
def onImagePreviewClick(self): 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): 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): def onImageAddClick(self):
"""Add this item to the OOS""" log.debug(u'Image Live Requested')
pass 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)