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()