forked from openlp/openlp
commit
2d870d1146
@ -15,7 +15,24 @@ You should have received a copy of the GNU General Public License along with
|
||||
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
||||
Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
"""
|
||||
__all__ = ['convertStringToBoolean']
|
||||
import types
|
||||
from PyQt4 import QtCore, QtGui
|
||||
|
||||
__all__ = ['convertStringToBoolean','buildIcon',]
|
||||
|
||||
def convertStringToBoolean(stringvalue):
|
||||
return stringvalue.strip().lower() in (u'true', u'yes', u'y')
|
||||
|
||||
def buildIcon(icon):
|
||||
ButtonIcon = None
|
||||
if type(icon) is QtGui.QIcon:
|
||||
ButtonIcon = icon
|
||||
elif type(icon) is types.StringType or type(icon) is types.UnicodeType:
|
||||
ButtonIcon = QtGui.QIcon()
|
||||
if icon.startswith(u':/'):
|
||||
ButtonIcon.addPixmap(QtGui.QPixmap(icon), QtGui.QIcon.Normal,
|
||||
QtGui.QIcon.Off)
|
||||
else:
|
||||
ButtonIcon.addPixmap(QtGui.QPixmap.fromImage(QImage(icon)),
|
||||
QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||
return ButtonIcon
|
||||
|
@ -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
|
||||
|
||||
|
@ -20,7 +20,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
import types
|
||||
|
||||
from PyQt4 import QtCore, QtGui
|
||||
from openlp.core.resources import *
|
||||
from openlp.core.lib.toolbar import *
|
||||
|
||||
class MediaManagerItem(QtGui.QWidget):
|
||||
|
@ -18,12 +18,12 @@ this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
||||
Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
"""
|
||||
import logging
|
||||
import types
|
||||
import time
|
||||
|
||||
from openlp import buildIcon
|
||||
from PyQt4.QtCore import *
|
||||
from PyQt4.QtGui import *
|
||||
|
||||
|
||||
class ServiceItem():
|
||||
"""
|
||||
The service item is a base class for the plugins to use to interact with
|
||||
@ -50,18 +50,7 @@ class ServiceItem():
|
||||
log.debug(u'Service item created for %s', self.shortname)
|
||||
|
||||
def addIcon(self, icon):
|
||||
ButtonIcon = None
|
||||
if type(icon) is QIcon:
|
||||
ButtonIcon = icon
|
||||
elif type(icon) is types.StringType or type(icon) is types.UnicodeType:
|
||||
ButtonIcon = QIcon()
|
||||
if icon.startswith(u':/'):
|
||||
ButtonIcon.addPixmap(QPixmap(icon), QIcon.Normal,
|
||||
QIcon.Off)
|
||||
else:
|
||||
ButtonIcon.addPixmap(QPixmap.fromImage(QImage(icon)),
|
||||
QIcon.Normal, QIcon.Off)
|
||||
self.iconic_representation = ButtonIcon
|
||||
self.iconic_representation = buildIcon(icon)
|
||||
|
||||
def render(self):
|
||||
"""
|
||||
|
@ -88,11 +88,17 @@ 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.ServiceManagerContents.previewController = self.PreviewController
|
||||
self.ThemeManagerContents.serviceManager = self.ServiceManagerContents
|
||||
self.ThemeManagerContents.loadThemes()
|
||||
|
||||
|
@ -20,94 +20,15 @@ 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
|
||||
from openlp.core.lib import ServiceItem
|
||||
from openlp.core.lib import RenderManager
|
||||
from openlp.core import translate
|
||||
from openlp import buildIcon
|
||||
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
|
||||
@ -122,6 +43,7 @@ class ServiceManager(QtGui.QWidget):
|
||||
def __init__(self, parent):
|
||||
QtGui.QWidget.__init__(self)
|
||||
self.parent=parent
|
||||
self.serviceItems=[]
|
||||
self.Layout = QtGui.QVBoxLayout(self)
|
||||
self.Layout.setSpacing(0)
|
||||
self.Layout.setMargin(0)
|
||||
@ -153,20 +75,48 @@ 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")
|
||||
#endable drop
|
||||
self.ServiceManagerList .__class__.dragEnterEvent=self.dragEnterEvent
|
||||
self.ServiceManagerList .__class__.dragMoveEvent=self.dragEnterEvent
|
||||
self.ServiceManagerList .__class__.dropEvent =self.dropEvent
|
||||
|
||||
self.Layout.addWidget(self.serviceManagerList)
|
||||
self.ServiceManagerList.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
|
||||
|
||||
self.ServiceManagerList.addAction(self.contextMenuAction(
|
||||
self.ServiceManagerList, ':/system/system_preview.png',
|
||||
translate(u'ServiceManager',u'&Preview Verse'), self.makePreview))
|
||||
self.ServiceManagerList.addAction(self.contextMenuAction(
|
||||
self.ServiceManagerList, ':/system/system_live.png',
|
||||
translate(u'ServiceManager',u'&Show Live'), self.makeLive))
|
||||
self.ServiceManagerList.addAction(self.contextMenuSeparator(self.ServiceManagerList))
|
||||
self.ServiceManagerList.addAction(self.contextMenuAction(
|
||||
self.ServiceManagerList, ':/services/service_delete',
|
||||
translate(u'ServiceManager',u'&Remove from Service'), self.onDeleteFromService))
|
||||
|
||||
self.Layout.addWidget(self.ServiceManagerList)
|
||||
|
||||
QtCore.QObject.connect(self.ThemeComboBox,
|
||||
QtCore.SIGNAL("activated(int)"), self.onThemeComboBoxSelected)
|
||||
|
||||
def contextMenuAction(self, base, icon, text, slot):
|
||||
"""
|
||||
Utility method to help build context menus for plugins
|
||||
"""
|
||||
action = QtGui.QAction(text, base)
|
||||
action .setIcon(buildIcon(icon))
|
||||
QtCore.QObject.connect(action, QtCore.SIGNAL("triggered()"), slot)
|
||||
return action
|
||||
|
||||
def contextMenuSeparator(self, base):
|
||||
action = QtGui.QAction("", base)
|
||||
action.setSeparator(True)
|
||||
return action
|
||||
|
||||
def onServiceTop(self):
|
||||
pass
|
||||
|
||||
@ -195,16 +145,43 @@ class ServiceManager(QtGui.QWidget):
|
||||
self.renderManager.default_theme = self.ThemeComboBox.currentText()
|
||||
|
||||
def addServiceItem(self, item):
|
||||
treewidgetitem = QtGui.QTreeWidgetItem(self.serviceManagerList)
|
||||
self.serviceItems.append({u'data': item, u'order': len(self.serviceItems)+1})
|
||||
treewidgetitem = QtGui.QTreeWidgetItem(self.ServiceManagerList)
|
||||
treewidgetitem.setText(0,item.title + u':' + item.shortname)
|
||||
treewidgetitem.setIcon(0,item.iconic_representation)
|
||||
treewidgetitem.setData(0, QtCore.Qt.UserRole, QtCore.QVariant(len(self.serviceItems)))
|
||||
treewidgetitem.setExpanded(True)
|
||||
item.render()
|
||||
count = 0
|
||||
for frame in item.frames:
|
||||
treewidgetitem1 = QtGui.QTreeWidgetItem(treewidgetitem)
|
||||
text = frame[u'formatted'][0]
|
||||
treewidgetitem1.setText(0,text[:10])
|
||||
#treewidgetitem1.setIcon(0,frame[u'image'])
|
||||
treewidgetitem1.setText(0,text[:30])
|
||||
treewidgetitem1.setData(0, QtCore.Qt.UserRole,QtCore.QVariant(count))
|
||||
count = count + 1
|
||||
|
||||
def makePreview(self):
|
||||
item, count = self.findServiceItem()
|
||||
self.previewController.addServiceManagerItem(self.serviceItems[item][u'data'], count)
|
||||
|
||||
def makeLive(self):
|
||||
item, count = self.findServiceItem()
|
||||
self.liveController.addServiceManagerItem(self.serviceItems[item][u'data'], count)
|
||||
|
||||
def findServiceItem(self):
|
||||
items = self.ServiceManagerList.selectedItems()
|
||||
pos = 0
|
||||
count = 0
|
||||
for item in items:
|
||||
childCount = item.childCount()
|
||||
if childCount >= 1: # is the parent
|
||||
pos = item.data(0, QtCore.Qt.UserRole).toInt()[0]
|
||||
else:
|
||||
parentitem = item.parent()
|
||||
pos = parentitem.data(0, QtCore.Qt.UserRole).toInt()[0]
|
||||
count = item.data(0, QtCore.Qt.UserRole).toInt()[0]
|
||||
pos = pos - 1 #adjust for zeor indexing
|
||||
return pos, count
|
||||
|
||||
def dragEnterEvent(self, event):
|
||||
"""
|
||||
|
@ -24,6 +24,7 @@ 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 SlideData(QtCore.QAbstractListModel):
|
||||
"""
|
||||
@ -41,6 +42,10 @@ class SlideData(QtCore.QAbstractListModel):
|
||||
self.maximagewidth=self.rowheight*16/9.0;
|
||||
log.info(u'Starting')
|
||||
|
||||
def eventFilter(self, obj, event):
|
||||
print obj, event
|
||||
return false
|
||||
|
||||
def clear(self):
|
||||
self.items=[]
|
||||
|
||||
@ -54,7 +59,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 +76,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 +119,26 @@ 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.PreviewListView = QtGui.QListView(self.Splitter)
|
||||
self.PreviewListView.setEditTriggers(QtGui.QAbstractItemView.CurrentChanged)
|
||||
self.PreviewListView.setAlternatingRowColors(True)
|
||||
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")
|
||||
|
||||
self.PreviewListView = QtGui.QListView(self.scrollAreaWidgetContents)
|
||||
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 +162,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,16 +184,12 @@ 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 onCurrentItemChanged(self, current, previous):
|
||||
print u'Method slideControllerList currentItemChanged called', current, previous
|
||||
QtCore.SIGNAL(u'activated(QModelIndex)'), self.onSlideSelected)
|
||||
|
||||
def onSlideSelectedFirst(self):
|
||||
row = self.PreviewListData.createIndex(0, 0)
|
||||
@ -241,5 +258,9 @@ class SlideController(QtGui.QWidget):
|
||||
self.PreviewListView.selectionModel().setCurrentIndex(row, QtGui.QItemSelectionModel.SelectCurrent)
|
||||
self.onSlideSelected(row)
|
||||
|
||||
def render(self):
|
||||
pass
|
||||
def addServiceManagerItem(self, serviceitem, slideno):
|
||||
self.addServiceItem(serviceitem)
|
||||
row = self.PreviewListData.createIndex(slideno, 0)
|
||||
if row.isValid():
|
||||
self.PreviewListView.selectionModel().setCurrentIndex(row, QtGui.QItemSelectionModel.SelectCurrent)
|
||||
self.onSlideSelected(row)
|
||||
|
@ -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()
|
||||
|
@ -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)
|
||||
|
||||
@ -205,6 +230,7 @@ class BibleMediaItem(MediaManagerItem):
|
||||
QtCore.SIGNAL("pressed()"), self.onQuickSearchButton)
|
||||
# Context Menus
|
||||
self.BibleListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
|
||||
|
||||
self.BibleListView.addAction(self.contextMenuAction(
|
||||
self.BibleListView, ':/system/system_preview.png',
|
||||
translate(u'BibleMediaItem',u'&Preview Verse'), self.onBiblePreviewClick))
|
||||
|
@ -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()
|
||||
|
@ -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()
|
||||
|
@ -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()
|
||||
|
||||
|
||||
|
@ -24,10 +24,33 @@ from PyQt4 import QtCore, QtGui
|
||||
|
||||
from openlp.core import translate
|
||||
from openlp.core.lib import MediaManagerItem
|
||||
from openlp.core.resources import *
|
||||
from openlp.core.lib import ServiceItem
|
||||
|
||||
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,19 @@ 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.setSelectionMode(QtGui.QAbstractItemView.MultiSelection)
|
||||
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 +124,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'))
|
||||
@ -128,20 +151,33 @@ class ImageMediaItem(MediaManagerItem):
|
||||
self.ImageListData.removeRow(current_row)
|
||||
self.parent.config.set_list(u'images', self.ImageListData.getFileList())
|
||||
|
||||
def onImageClick(self, where):
|
||||
def generateSlideData(self, service_item):
|
||||
indexes = self.ImageListView.selectedIndexes()
|
||||
for index in indexes:
|
||||
filename = self.ImageListData.getFilename(index)
|
||||
log.info(u"Click %s:%s"%(str(where), filename))
|
||||
where.add(filename)
|
||||
where.render()
|
||||
frame = QtGui.QPixmap(str(filename))
|
||||
service_item.frames.append({u'formatted': u'Image', u'image': frame})
|
||||
|
||||
def onImagePreviewClick(self):
|
||||
self.onImageClick(self.parent.preview_service_item)
|
||||
log.debug(u'Image Preview Requested')
|
||||
service_item = ServiceItem(self.parent)
|
||||
service_item.addIcon( ":/media/media_image.png")
|
||||
service_item.render_manager = self.parent.render_manager
|
||||
self.generateSlideData(service_item)
|
||||
self.parent.preview_controller.addServiceItem(service_item)
|
||||
|
||||
def onImageLiveClick(self):
|
||||
self.onImageClick(self.parent.live_service_item)
|
||||
log.debug(u'Image Live Requested')
|
||||
service_item = ServiceItem(self.parent)
|
||||
service_item.addIcon( ":/media/media_image.png")
|
||||
service_item.render_manager = self.parent.render_manager
|
||||
self.generateSlideData(service_item)
|
||||
self.parent.live_controller.addServiceItem(service_item)
|
||||
|
||||
def onImageAddClick(self):
|
||||
"""Add this item to the OOS"""
|
||||
pass
|
||||
log.debug(u'Image Live Requested')
|
||||
service_item = ServiceItem(self.parent)
|
||||
service_item.addIcon( ":/media/media_image.png")
|
||||
service_item.render_manager = self.parent.render_manager
|
||||
self.generateSlideData(service_item)
|
||||
self.parent.service_manager.addServiceItem(service_item)
|
||||
|
Loading…
Reference in New Issue
Block a user