Add drag and drop eventing to Bibles and Images

Revamp Pluging drag and drop code to handle class clashing
Add Drag and drop code to SlideController
Start to hook up servicemanger with slide controller.
This commit is contained in:
Tim Bentley 2009-05-12 22:06:35 +01:00
parent b2d2de6ad8
commit bc1c714693
10 changed files with 307 additions and 157 deletions

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

@ -88,13 +88,20 @@ 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.ThemeManagerContents.serviceManager = self.ServiceManagerContents self.ThemeManagerContents.serviceManager = self.ServiceManagerContents
self.ThemeManagerContents.loadThemes() self.ThemeManagerContents.loadThemes()
self.PreviewController.postInit()
self.LiveController.postInit()
# Initialise SlideControllers # Initialise SlideControllers
log.info(u'Set Up SlideControllers') log.info(u'Set Up SlideControllers')

View File

@ -20,9 +20,6 @@ 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
@ -31,83 +28,6 @@ from openlp.core.lib import RenderManager
from openlp.core import translate from openlp.core import translate
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
@ -153,16 +73,18 @@ 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 self.ServiceManagerList .__class__.dragEnterEvent=self.dragEnterEvent
self.serviceManagerList .__class__.dragMoveEvent=self.dragEnterEvent self.ServiceManagerList .__class__.dragMoveEvent=self.dragEnterEvent
self.serviceManagerList .__class__.dropEvent =self.dropEvent self.ServiceManagerList .__class__.dropEvent =self.dropEvent
self.ServiceManagerList.setDragEnabled(True)
self.ServiceManagerList .__class__.mouseMoveEvent =self.onMouseMoveEvent
self.Layout.addWidget(self.serviceManagerList) 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)
@ -195,7 +117,7 @@ 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) 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.setExpanded(True) treewidgetitem.setExpanded(True)
@ -203,9 +125,43 @@ class ServiceManager(QtGui.QWidget):
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.setIcon(0,frame[u'image'])
def makeLive(self):
print "make live"
self.liveController.addServiceManagerItem(None, 1)
# items = self.serviceManagerList.selectedItems()
# if items == []:
# return
#
# for item in items:
# childCount = item.childCount()
# print childCount, item.text(0)
# if childCount >= 1: # is parent
# who = item.text(0)
# listwidgetitem = QListWidgetItem()
# listwidgetitem.setText(who)
# self.slideControllerList.insertItem(0, listwidgetitem)
# self.slideControllerList.setCurrentRow(0)
#
# listwidgetitem1 = QListWidgetItem()
# listwidgetitem1.setText(u'Children inserted here')
# self.slideControllerList.insertItem(1, listwidgetitem1)
#
# else:
# parentitem = item.parent()
# print parentitem
# who = parentitem.text(0)
# listwidgetitem = QListWidgetItem()
# listwidgetitem.setText(who)
# self.slideControllerList.insertItem(0, listwidgetitem)
#
# listwidgetitem1 = QListWidgetItem()
# listwidgetitem1.setText(u'Children inserted here')
# self.slideControllerList.insertItem(1, listwidgetitem1)
# self.slideControllerList.setCurrentRow(1)
def dragEnterEvent(self, event): def dragEnterEvent(self, event):
""" """
Accept Drag events Accept Drag events
@ -220,8 +176,35 @@ class ServiceManager(QtGui.QWidget):
link=event.mimeData() link=event.mimeData()
if link.hasText(): if link.hasText():
plugin = event.mimeData().text() plugin = event.mimeData().text()
print plugin
self.eventManager.post_event(Event(EventType.LoadServiceItem, plugin)) self.eventManager.post_event(Event(EventType.LoadServiceItem, plugin))
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
"""
print "ServiceManager"
if event.buttons() != QtCore.Qt.LeftButton:
return
items = self.ServiceManagerList.selectedIndexes()
if items == []:
return
drag = QtGui.QDrag(self)
mimeData = QtCore.QMimeData()
drag.setMimeData(mimeData)
for item in items:
mimeData.setText(u'ServiceManager')
dropAction = drag.start(QtCore.Qt.CopyAction)
if dropAction == QtCore.Qt.CopyAction:
self.close()
def oos_as_text(self): def oos_as_text(self):
text=[] text=[]
log.info( "oos as text") log.info( "oos as text")

View File

@ -24,6 +24,65 @@ 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 PreviewList(QtGui.QListView):
def __init__(self,parent=None):
QtGui.QListView.__init__(self,parent)
self.setAcceptDrops(True)
def dragEnterEvent(self, event):
"""
Accept Drag events
"""
event.accept()
self.dropEvent(event)
def dropEvent(self, event):
"""
Handle the release of the event and trigger the plugin
to add the data
"""
print "preview drop event"
link=event.mimeData()
if link.hasText():
plugin = event.mimeData().text()
if plugin == u'ServiceManager':
#Service Manager to Preview is not a sane
self.serviceManager.makeLive()
else:
print "preview fired ", plugin
self.eventManager.post_event(Event(EventType.PreviewShow, plugin))
class LiveList(QtGui.QListView):
def __init__(self,parent=None):
QtGui.QListView.__init__(self,parent)
self.setAcceptDrops(True)
def dragEnterEvent(self, event):
"""
Accept Drag events
"""
event.accept()
self.dropEvent(event)
def dropEvent(self, event):
"""
Handle the release of the event and trigger the plugin
to add the data
"""
print "Live drop event"
link=event.mimeData()
if link.hasText():
plugin = event.mimeData().text()
if plugin == u'ServiceManager':
#Service Manager to Preview is not a sane
self.serviceManager.makeLive()
else:
print "live fired plugin ", plugin
self.eventManager.post_event(Event(EventType.LiveShow, plugin))
class SlideData(QtCore.QAbstractListModel): class SlideData(QtCore.QAbstractListModel):
""" """
@ -54,7 +113,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 +130,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 +173,34 @@ 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.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")
#load the correct class for drag and drop
if self.isLive:
self.PreviewListView = LiveList(self.scrollAreaWidgetContents)
else:
self.PreviewListView = PreviewList(self.scrollAreaWidgetContents)
self.PreviewListView.setDragEnabled(False)
self.PreviewListView.setDragDropMode(QtGui.QAbstractItemView.DropOnly)
self.PreviewListView = QtGui.QListView(self.Splitter)
self.PreviewListView.setEditTriggers(QtGui.QAbstractItemView.CurrentChanged)
self.PreviewListView.setAlternatingRowColors(True)
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 +224,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,17 +246,16 @@ 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.SIGNAL(u'clicked(QListViewItem)'), self.onCurrentItemChanged)
def postInit(self):
self.PreviewListView.eventManager = self.eventManager
self.PreviewListView.serviceManager = self.serviceManager
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)
if row.isValid(): if row.isValid():
@ -241,5 +323,8 @@ 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 addServiceManagerItem(self, serviceitem, slideno):
print "addServiceManagerItem"
def render(self): def render(self):
pass pass

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)

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

@ -28,6 +28,29 @@ from openlp.core.resources import *
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,18 @@ 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.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 +123,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,7 +148,7 @@ 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 onImageClick(self, where):
indexes = self.ImageListView.selectedIndexes() indexes = self.ImageListView.selectedIndexes()