From 0ba52fbd669c8f3e02916158cfcc4de354267185 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Wed, 13 May 2009 20:47:25 +0100 Subject: [PATCH] Added context menus to ServiceManager Refactored Icon Construction to single method --- openlp/__init__.py | 19 ++++++- openlp/core/lib/mediamanageritem.py | 1 - openlp/core/lib/serviceitem.py | 17 ++---- openlp/core/ui/servicemanager.py | 61 ++++++++++----------- openlp/core/ui/slidecontroller.py | 73 ++++---------------------- openlp/plugins/bibles/lib/mediaitem.py | 1 + openlp/plugins/images/lib/mediaitem.py | 1 + 7 files changed, 65 insertions(+), 108 deletions(-) diff --git a/openlp/__init__.py b/openlp/__init__.py index e614bce89..7a3d0718a 100644 --- a/openlp/__init__.py +++ b/openlp/__init__.py @@ -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 diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py index c965854ad..096165f7b 100644 --- a/openlp/core/lib/mediamanageritem.py +++ b/openlp/core/lib/mediamanageritem.py @@ -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): diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index 31b70a017..d0b30016c 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -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): """ diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index c4bca2b42..78d01d70d 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -26,6 +26,7 @@ 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 ServiceManager(QtGui.QWidget): @@ -82,15 +83,39 @@ class ServiceManager(QtGui.QWidget): self.ServiceManagerList .__class__.dragEnterEvent=self.dragEnterEvent self.ServiceManagerList .__class__.dragMoveEvent=self.dragEnterEvent self.ServiceManagerList .__class__.dropEvent =self.dropEvent - #endable drag - #self.ServiceManagerList.setDragEnabled(True) - #self.ServiceManagerList .__class__.mouseMoveEvent =self.onMouseMoveEvent + + self.ServiceManagerList.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) + + self.ServiceManagerList.addAction(self.contextMenuAction( + self.ServiceManagerList, ':/system/system_preview.png', + translate(u'ServiceManager',u'&Preview Verse'), self.makeLive)) + self.ServiceManagerList.addAction(self.contextMenuAction( + self.ServiceManagerList, ':/system/system_live.png', + translate(u'ServiceManager',u'&Show Live'), self.makePreview)) + 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 @@ -130,6 +155,9 @@ class ServiceManager(QtGui.QWidget): treewidgetitem1.setText(0,text[:30]) #treewidgetitem1.setIcon(0,frame[u'image']) + def makePreview(self): + print "make Preview" + def makeLive(self): print "make live" self.liveController.addServiceManagerItem(None, 1) @@ -178,35 +206,8 @@ 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 fcf97301d..410588ade 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -26,66 +26,6 @@ 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) -# self.setDropIndicatorShown(True) -# self.setDragEnabled(False) -# self.setDragDropMode(QtGui.QAbstractItemView.DropOnly) -# -# def dragEnterEvent(self, event): -# """ -# Accept Drag events -# """ -# event.accept() -# -# 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) -# self.setDropIndicatorShown(True) -# self.setDragEnabled(False) -# self.setDragDropMode(QtGui.QAbstractItemView.DropOnly) -# -# def dragEnterEvent(self, event): -# """ -# Accept Drag events -# """ -# event.accept() -# -# 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': -# self.serviceManager.makeLive() -# else: -# self.eventManager.post_event(Event(EventType.LiveShow, plugin)) - - class SlideData(QtCore.QAbstractListModel): """ Tree of items for an order of Theme. @@ -102,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=[] @@ -185,8 +129,6 @@ class SlideController(QtGui.QWidget): self.gridLayout = QtGui.QGridLayout(self.scrollAreaWidgetContents) self.gridLayout.setObjectName("gridLayout") - #load the correct class for drag and drop - self.PreviewListView = QtGui.QListView(self.scrollAreaWidgetContents) self.PreviewListData = SlideData() self.PreviewListView.isLive = self.isLive @@ -246,6 +188,13 @@ class SlideController(QtGui.QWidget): QtCore.QObject.connect(self.PreviewListView, QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected) + QtCore.QObject.connect(self.PreviewListView, + QtCore.SIGNAL(u'activated(QModelIndex)'), self.onSlideSelected) + QtCore.QObject.connect(self.PreviewListView, + QtCore.SIGNAL(u'keyPressEvent(QKeyEvent)'), self.onSlideSelecteda) + + def onSlideSelecteda(self, index): + print "a", index def onSlideSelectedFirst(self): row = self.PreviewListData.createIndex(0, 0) diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index e5bef4b46..d179d1654 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -230,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)) diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index 3e7851878..5188bf53a 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -101,6 +101,7 @@ class ImageMediaItem(MediaManagerItem): 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')