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
LoadServiceItem = 5
# Preview events
PreviewBeforeLoad = 11
PreviewAfterLoad = 12
PreviewBeforeShow = 13
PreviewAfterShow = 14
PreviewShow = 10
LiveShow = 11
#PreviewBeforeLoad = 11
#PreviewAfterLoad = 12
#PreviewBeforeShow = 13
#PreviewAfterShow = 14
ThemeListChanged = 15

View File

@ -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')

View File

@ -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")

View File

@ -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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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