From bc1c7146935145d788d2089cd483866aa3de98ad Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Tue, 12 May 2009 22:06:35 +0100 Subject: [PATCH] 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. --- openlp/core/lib/event.py | 10 +- openlp/core/ui/mainwindow.py | 9 +- openlp/core/ui/servicemanager.py | 165 +++++++++++-------------- openlp/core/ui/slidecontroller.py | 115 ++++++++++++++--- openlp/plugins/bibles/bibleplugin.py | 12 +- openlp/plugins/bibles/lib/mediaitem.py | 29 ++++- openlp/plugins/custom/customplugin.py | 8 +- openlp/plugins/custom/lib/mediaitem.py | 50 ++++---- openlp/plugins/images/imageplugin.py | 26 +++- openlp/plugins/images/lib/mediaitem.py | 40 ++++-- 10 files changed, 307 insertions(+), 157 deletions(-) diff --git a/openlp/core/lib/event.py b/openlp/core/lib/event.py index ef64e632c..6950a3b8e 100644 --- a/openlp/core/lib/event.py +++ b/openlp/core/lib/event.py @@ -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 diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 584474129..ae7ab6143 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -88,13 +88,20 @@ 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.ThemeManagerContents.serviceManager = self.ServiceManagerContents self.ThemeManagerContents.loadThemes() + self.PreviewController.postInit() + self.LiveController.postInit() # Initialise SlideControllers log.info(u'Set Up SlideControllers') diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index fd5b94129..765816341 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -20,9 +20,6 @@ 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 @@ -31,83 +28,6 @@ from openlp.core.lib import RenderManager from openlp.core import translate 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 @@ -153,16 +73,18 @@ 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") + self.ServiceManagerList .__class__.dragEnterEvent=self.dragEnterEvent + self.ServiceManagerList .__class__.dragMoveEvent=self.dragEnterEvent + 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.SIGNAL("activated(int)"), self.onThemeComboBoxSelected) @@ -195,7 +117,7 @@ class ServiceManager(QtGui.QWidget): self.renderManager.default_theme = self.ThemeComboBox.currentText() def addServiceItem(self, item): - treewidgetitem = QtGui.QTreeWidgetItem(self.serviceManagerList) + treewidgetitem = QtGui.QTreeWidgetItem(self.ServiceManagerList) treewidgetitem.setText(0,item.title + u':' + item.shortname) treewidgetitem.setIcon(0,item.iconic_representation) treewidgetitem.setExpanded(True) @@ -203,9 +125,43 @@ class ServiceManager(QtGui.QWidget): for frame in item.frames: treewidgetitem1 = QtGui.QTreeWidgetItem(treewidgetitem) text = frame[u'formatted'][0] - treewidgetitem1.setText(0,text[:10]) + treewidgetitem1.setText(0,text[:30]) #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): """ Accept Drag events @@ -220,8 +176,35 @@ class ServiceManager(QtGui.QWidget): link=event.mimeData() if link.hasText(): plugin = event.mimeData().text() + print 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): text=[] log.info( "oos as text") diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 0d4105974..1705883c6 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -24,6 +24,65 @@ 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 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): """ @@ -54,7 +113,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 +130,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 +173,34 @@ 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.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.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 +224,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,17 +246,16 @@ 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 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): row = self.PreviewListData.createIndex(0, 0) if row.isValid(): @@ -241,5 +323,8 @@ class SlideController(QtGui.QWidget): self.PreviewListView.selectionModel().setCurrentIndex(row, QtGui.QItemSelectionModel.SelectCurrent) self.onSlideSelected(row) + def addServiceManagerItem(self, serviceitem, slideno): + print "addServiceManagerItem" + def render(self): pass diff --git a/openlp/plugins/bibles/bibleplugin.py b/openlp/plugins/bibles/bibleplugin.py index 01e90a40c..7b4410d02 100644 --- a/openlp/plugins/bibles/bibleplugin.py +++ b/openlp/plugins/bibles/bibleplugin.py @@ -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() diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index 9f9a2e825..e5bef4b46 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -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) diff --git a/openlp/plugins/custom/customplugin.py b/openlp/plugins/custom/customplugin.py index 9748a7055..a0c2b5800 100644 --- a/openlp/plugins/custom/customplugin.py +++ b/openlp/plugins/custom/customplugin.py @@ -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() diff --git a/openlp/plugins/custom/lib/mediaitem.py b/openlp/plugins/custom/lib/mediaitem.py index 8a033c3ec..313c2bff4 100644 --- a/openlp/plugins/custom/lib/mediaitem.py +++ b/openlp/plugins/custom/lib/mediaitem.py @@ -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() diff --git a/openlp/plugins/images/imageplugin.py b/openlp/plugins/images/imageplugin.py index f6b8ce2e1..fac8f2f85 100644 --- a/openlp/plugins/images/imageplugin.py +++ b/openlp/plugins/images/imageplugin.py @@ -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() diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index 80f1d7a20..adbdcaf9c 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -28,6 +28,29 @@ from openlp.core.resources import * 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,18 @@ 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.setAlternatingRowColors(True) + self.ImageListView.setDragEnabled(True) self.ImageListView.setObjectName('ImageListView') + self.PageLayout.addWidget(self.ImageListView) #define and add the context menu @@ -96,11 +123,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,7 +148,7 @@ 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): indexes = self.ImageListView.selectedIndexes()