From 23f49bfee7c6684f4c57b0b3688d775bc0c15964 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 27 Jun 2009 06:46:05 +0100 Subject: [PATCH 1/7] Update new plugin infrastructure --- openlp/core/lib/mediamanageritem.py | 59 ++++++--- openlp/plugins/images/lib/mediaitem.py | 10 ++ openlp/plugins/presentations/lib/mediaitem.py | 114 +++++------------- 3 files changed, 82 insertions(+), 101 deletions(-) diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py index c262d58c9..4db60a598 100644 --- a/openlp/core/lib/mediamanageritem.py +++ b/openlp/core/lib/mediamanageritem.py @@ -50,7 +50,6 @@ class MediaManagerItem(QtGui.QWidget): if title is not None: self.title = title self.Toolbar = None - #self.ConfigSection = None self.PageLayout = QtGui.QVBoxLayout(self) self.PageLayout.setSpacing(0) self.PageLayout.setMargin(0) @@ -118,13 +117,17 @@ class MediaManagerItem(QtGui.QWidget): # self.PluginTextShort # eg "Image" for the image plugin # self.ConfigSection - where the items in the media manager are stored # this could potentially be self.PluginTextShort.lower() + # self.IconPath=u'images/images' - allows specific icons to be used + # self.hasFileIcon - Is the file Icon required + # self.hasEditIcon - Is the edit Icon required + # self.hasNewIcon - Is the new Icon required # # self.OnNewPrompt=u'Select Image(s)' # self.OnNewFileMasks=u'Images (*.jpg *jpeg *.gif *.png *.bmp)' # assumes that the new action is to load a file. If not, override onnew # self.ListViewWithDnD_class - there is a base list class with DnD assigned to it (openlp.core.lib.BaseListWithDnD()) - # each plugin needs to inherit a class from this and pass that *class* (not an instance) to here - # via the ListViewWithDnD_class member + # each plugin needs to inherit a class from this and pass that *class* (not an instance) to here + # via the ListViewWithDnD_class member # The assumption is that given that at least two plugins are of the form # "text with an icon" then all this will help # even for plugins of another sort, the setup of the right-click menu, common toolbar @@ -139,16 +142,29 @@ class MediaManagerItem(QtGui.QWidget): # Add a toolbar self.addToolbar() # Create buttons for the toolbar - ## New Song Button ## - self.addToolbarButton( - translate(self.TranslationContext, u'Load '+self.PluginTextShort), - translate(self.TranslationContext, u'Load item into openlp.org'), - u':/images/image_load.png', self.onNewClick, u'ImageNewItem') - ## Delete Song Button ## + ## File Button ## + if self.hasFileIcon: + self.addToolbarButton( + translate(self.TranslationContext, u'Load '+self.PluginTextShort), + translate(self.TranslationContext, u'Load a new '+self.PluginTextShort), + u':'+self.IconPath+ u'_load.png', self.onFileClick, self.PluginTextShort+u'FileItem') + ## New Button ## + if self.hasNewIcon: + self.addToolbarButton( + translate(self.TranslationContext, u'New '+self.PluginTextShort), + translate(self.TranslationContext, u'Add a new '+self.PluginTextShort), + u':'+self.IconPath+ u'_load.png', self.onNewClick, self.PluginTextShort+u'NewItem') + ## Edit Button ## + if self.hasEditIcon: + self.addToolbarButton( + translate(self.TranslationContext, u'Edit '+self.PluginTextShort), + translate(self.TranslationContext, u'Edit the selected '+self.PluginTextShort), + u':'+self.IconPath+ u'_load.png', self.onEditClick, self.PluginTextShort+u'EditItem') + ## Delete Button ## self.addToolbarButton( translate(self.TranslationContext, u'Delete '+self.PluginTextShort), translate(self.TranslationContext, u'Delete the selected item'), - u':/images/image_delete.png', self.onDeleteClick, u'DeleteItem') + u':'+self.IconPath+ u'_delete.png', self.onDeleteClick, self.PluginTextShort+u'DeleteItem') ## Separator Line ## self.addToolbarSeparator() ## Preview Button ## @@ -166,20 +182,27 @@ class MediaManagerItem(QtGui.QWidget): translate(self.TranslationContext, u'Add '+self.PluginTextShort+u' To Service'), translate(self.TranslationContext, u'Add the selected item(s) to the service'), u':/system/system_add.png', self.onAddClick, self.PluginTextShort+u'AddItem') + #Allow the plugin to define it's own header + self.addHeaderBar() #Add the List widget self.ListView = self.ListViewWithDnD_class() self.ListView.uniformItemSizes = True - self.ListData = ListWithPreviews() - self.ListView.setModel(self.ListData) self.ListView.setGeometry(QtCore.QRect(10, 100, 256, 591)) self.ListView.setSpacing(1) self.ListView.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) self.ListView.setAlternatingRowColors(True) self.ListView.setDragEnabled(True) self.ListView.setObjectName(self.PluginTextShort+u'ListView') + #Add tp PageLayout self.PageLayout.addWidget(self.ListView) #define and add the context menu self.ListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) + if self.hasEditIcon: + self.ListView.addAction(self.contextMenuAction(self.ListView, + ':' +self.IconPath+u'_new.png', + translate(self.TranslationContext, u'&Edit '+self.PluginTextShort), + self.onEditClick)) + self.ListView.addAction(self.contextMenuSeparator(self.SongListWidget)) self.ListView.addAction(self.contextMenuAction( self.ListView, ':/system/system_preview.png', translate(self.TranslationContext, u'&Preview '+self.PluginTextShort), @@ -195,10 +218,10 @@ class MediaManagerItem(QtGui.QWidget): QtCore.QObject.connect(self.ListView, QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onPreviewClick) - def initialise(self): - self.loadList(self.parent.config.load_list(self.ConfigSection)) + def addHeaderBar(self): + pass - def onNewClick(self): + def onFileClick(self): files = QtGui.QFileDialog.getOpenFileNames(None, translate(self.TranslationContext, self.OnNewPrompt), self.parent.config.get_last_dir(), @@ -214,6 +237,12 @@ class MediaManagerItem(QtGui.QWidget): for file in list: self.ListData.addRow(file) + def onNewClick(self): + raise NotImplementedError(u'MediaManagerItem.onNewClick needs to be defined by the plugin') + + def onEditClick(self): + raise NotImplementedError(u'MediaManagerItem.onEditClick needs to be defined by the plugin') + def onDeleteClick(self): indexes = self.ListView.selectedIndexes() for index in indexes: diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index 687e0c53d..453dd730c 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -45,6 +45,10 @@ class ImageMediaItem(MediaManagerItem): self.TranslationContext = u'ImagePlugin' self.PluginTextShort = u'Image' self.ConfigSection = u'images' + self.IconPath = u'images/image' + self.hasFileIcon = True + self.hasNewIcon = False + self.hasEditIcon = False self.OnNewPrompt = u'Select Image(s)' self.OnNewFileMasks = u'Images (*.jpg *jpeg *.gif *.png *.bmp)' # this next is a class, not an instance of a class - it will @@ -52,6 +56,12 @@ class ImageMediaItem(MediaManagerItem): self.ListViewWithDnD_class = ImageListView MediaManagerItem.__init__(self, parent, icon, title) + def initialise(self): + self.ListData = ListWithPreviews() + self.ListView.setModel(self.ListData) + + self.loadList(self.parent.config.load_list(self.ConfigSection)) + def generateSlideData(self, service_item): indexes = self.ListView.selectedIndexes() service_item.title = u'Image(s)' diff --git a/openlp/plugins/presentations/lib/mediaitem.py b/openlp/plugins/presentations/lib/mediaitem.py index ab341c430..aeb5f4cdc 100644 --- a/openlp/plugins/presentations/lib/mediaitem.py +++ b/openlp/plugins/presentations/lib/mediaitem.py @@ -43,104 +43,46 @@ class PresentationMediaItem(MediaManagerItem): self.TranslationContext = u'PresentationPlugin' self.PluginTextShort = u'Presentation' self.ConfigSection = u'presentation' - self.OnNewPrompt = u'Select Image(s)' - self.OnNewFileMasks = u'Images (*.ppt *.pps *.odp)' + self.hasFileIcon = True + self.hasNewIcon = False + self.hasEditIcon = False + self.IconPath = u'presentations/presentation' + self.OnNewPrompt = u'Select Presentation(s)' + self.OnNewFileMasks = u'Presentations (*.ppt *.pps *.odp)' # this next is a class, not an instance of a class - it will # be instanced by the base MediaManagerItem self.ListViewWithDnD_class = PresentationListView MediaManagerItem.__init__(self, parent, icon, title) -# def setupUi(self): -# # Add a toolbar -# self.addToolbar() -# # Create buttons for the toolbar -# ## New Presentation Button ## -# self.addToolbarButton( -# translate(u'PresentationsMediaItem',u'New presentations'), -# translate(u'PresentationsMediaItem',u'Load presentations into openlp.org'), -# ':/presentations/presentation_load.png', self.onPresentationNewClick, 'PresentationNewItem') -# ## Delete Presentation Button ## -# self.addToolbarButton( -# translate(u'PresentationsMediaItem',u'Delete Presentation'), -# translate(u'PresentationsMediaItem',u'Delete the selected presentation'), -# ':/presentations/presentation_delete.png', self.onPresentationDeleteClick, 'PresentationDeleteItem') -# ## Separator Line ## -# self.addToolbarSeparator() -# ## Preview Presentation Button ## -# self.addToolbarButton( -# translate(u'PresentationsMediaItem',u'Preview Presentation'), -# translate(u'PresentationsMediaItem',u'Preview the selected Presentation'), -# ':/system/system_preview.png', self.onPresentationPreviewClick, 'PresentationPreviewItem') -# ## Live Presentation Button ## -# self.addToolbarButton( -# translate(u'PresentationsMediaItem',u'Go Live'), -# translate(u'PresentationsMediaItem',u'Send the selected presentation live'), -# ':/system/system_live.png', self.onPresentationLiveClick, 'PresentationLiveItem') -# ## Add Presentation Button ## -# self.addToolbarButton( -# translate(u'PresentationsMediaItem',u'Add Presentation To Service'), -# translate(u'PresentationsMediaItem',u'Add the selected Presentations(s) to the service'), -# ':/system/system_add.png',self.onPresentationAddClick, 'PresentationsAddItem') -# ## Add the Presentationlist widget ## -# -# self.PresentationWidget = QtGui.QWidget(self) -# sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) -# sizePolicy.setHorizontalStretch(0) -# sizePolicy.setVerticalStretch(0) -# sizePolicy.setHeightForWidth(self.PresentationWidget.sizePolicy().hasHeightForWidth()) -# self.PresentationWidget.setSizePolicy(sizePolicy) -# self.PresentationWidget.setObjectName(u'PresentationWidget') -# self.DisplayLayout = QtGui.QGridLayout(self.PresentationWidget) -# self.DisplayLayout.setObjectName(u'DisplayLayout') -# self.DisplayTypeComboBox = QtGui.QComboBox(self.PresentationWidget) -# self.DisplayTypeComboBox.setObjectName(u'DisplayTypeComboBox') -# self.DisplayLayout.addWidget(self.DisplayTypeComboBox, 0, 1, 1, 2) -# self.DisplayTypeLabel = QtGui.QLabel(self.PresentationWidget) -# self.DisplayTypeLabel.setObjectName(u'SearchTypeLabel') -# self.DisplayLayout.addWidget(self.DisplayTypeLabel, 0, 0, 1, 1) -# -# self.DisplayTypeLabel.setText(translate(u'PresentationMediaItem', u'Present using:')) -# -# # Add the song widget to the page layout -# self.PageLayout.addWidget(self.PresentationWidget) -# -# self.PresentationsListView = QtGui.QListView() -# self.PresentationsListView.setAlternatingRowColors(True) -# self.PresentationsListData = FileListData() -# self.PresentationsListView.setModel(self.PresentationsListData) -# -# self.PageLayout.addWidget(self.PresentationsListView) -# -# #define and add the context menu -# self.PresentationsListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) -# -# self.PresentationsListView.addAction(self.contextMenuAction( -# self.PresentationsListView, ':/system/system_preview.png', -# translate(u'PresentationsMediaItem',u'&Preview presentations'), self.onPresentationPreviewClick)) -# self.PresentationsListView.addAction(self.contextMenuAction( -# self.PresentationsListView, ':/system/system_live.png', -# translate(u'PresentationsMediaItem',u'&Show Live'), self.onPresentationLiveClick)) -# self.PresentationsListView.addAction(self.contextMenuAction( -# self.PresentationsListView, ':/system/system_add.png', -# translate(u'PresentationsMediaItem',u'&Add to Service'), self.onPresentationAddClick)) + def addHeaderBar(self): + self.PresentationWidget = QtGui.QWidget(self) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.PresentationWidget.sizePolicy().hasHeightForWidth()) + self.PresentationWidget.setSizePolicy(sizePolicy) + self.PresentationWidget.setObjectName(u'PresentationWidget') + self.DisplayLayout = QtGui.QGridLayout(self.PresentationWidget) + self.DisplayLayout.setObjectName(u'DisplayLayout') + self.DisplayTypeComboBox = QtGui.QComboBox(self.PresentationWidget) + self.DisplayTypeComboBox.setObjectName(u'DisplayTypeComboBox') + self.DisplayLayout.addWidget(self.DisplayTypeComboBox, 0, 1, 1, 2) + self.DisplayTypeLabel = QtGui.QLabel(self.PresentationWidget) + self.DisplayTypeLabel.setObjectName(u'SearchTypeLabel') + self.DisplayLayout.addWidget(self.DisplayTypeLabel, 0, 0, 1, 1) + + self.DisplayTypeLabel.setText(translate(u'PresentationMediaItem', u'Present using:')) + + # Add the Presentation widget to the page layout + self.PageLayout.addWidget(self.PresentationWidget) def initialise(self): list = self.parent.config.load_list(u'presentations') self.loadPresentationList(list) -# self.DisplayTypeComboBox.addItem(u'Impress') + self.DisplayTypeComboBox.addItem(u'Impress') # self.DisplayTypeComboBox.addItem(u'Powerpoint') # self.DisplayTypeComboBox.addItem(u'Keynote') - def onPresentationNewClick(self): - files = QtGui.QFileDialog.getOpenFileNames(None, - translate(u'PresentationsMediaItem', u'Select presentations(s)'), - self.parent.config.get_last_dir(), u'Presentations (*.ppt *.pps *.odp)') - if len(files) > 0: - self.loadPresentationList(files) - dir, filename = os.path.split(unicode(files[0])) - self.parent.config.set_last_dir(dir) - self.parent.config.set_list(u'Presentations', self.PresentationsListData.getFileList()) - def getFileList(self): filelist = [item[0] for item in self.PresentationsListView]; return filelist From c78ea3c911d9b06b12102703c95344f446b49187 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 27 Jun 2009 16:33:03 +0100 Subject: [PATCH 2/7] More cleanups with the media manager --- openlp/core/lib/baselistwithdnd.py | 4 ++-- openlp/core/lib/mediamanageritem.py | 6 ++++- openlp/plugins/bibles/lib/mediaitem.py | 18 -------------- openlp/plugins/custom/lib/mediaitem.py | 1 - openlp/plugins/images/imageplugin.py | 1 - openlp/plugins/images/lib/__init__.py | 2 -- openlp/plugins/images/lib/mediaitem.py | 24 +++++++++++-------- openlp/plugins/presentations/lib/mediaitem.py | 12 +++++++++- 8 files changed, 32 insertions(+), 36 deletions(-) diff --git a/openlp/core/lib/baselistwithdnd.py b/openlp/core/lib/baselistwithdnd.py index 90c51ca90..99331126d 100644 --- a/openlp/core/lib/baselistwithdnd.py +++ b/openlp/core/lib/baselistwithdnd.py @@ -24,13 +24,13 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib.toolbar import * from openlp.core.lib import translate -class BaseListWithDnD(QtGui.QListView): +class BaseListWithDnD(QtGui.QListWidget): """ Please put a short description of what this class does in here. """ def __init__(self,parent = None): - QtGui.QListView.__init__(self,parent) + QtGui.QListWidget.__init__(self,parent) # this must be set by the class which is inheriting assert(self.PluginName) diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py index 4db60a598..518bf2ca7 100644 --- a/openlp/core/lib/mediamanageritem.py +++ b/openlp/core/lib/mediamanageritem.py @@ -18,6 +18,7 @@ this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA """ import types +import os from PyQt4 import QtCore, QtGui @@ -231,7 +232,7 @@ class MediaManagerItem(QtGui.QWidget): self.loadList(files) dir, filename = os.path.split(unicode(files[0])) self.parent.config.set_last_dir(dir) - self.parent.config.set_list(self.ConfigSection, self.ListData.getFileList()) + #self.parent.config.set_list(self.ConfigSection, self.ListData.getFileList()) def loadList(self, list): for file in list: @@ -259,6 +260,7 @@ class MediaManagerItem(QtGui.QWidget): service_item.addIcon(u':/media/media_image.png') self.generateSlideData(service_item) self.parent.preview_controller.addServiceItem(service_item) + self.ListView.clearSelection() def onLiveClick(self): log.debug(self.PluginTextShort+u' Live Requested') @@ -266,6 +268,7 @@ class MediaManagerItem(QtGui.QWidget): service_item.addIcon(u':/media/media_image.png') self.generateSlideData(service_item) self.parent.live_controller.addServiceItem(service_item) + self.ListView.clearSelection() def onAddClick(self): log.debug(self.PluginTextShort+u' Add Requested') @@ -273,3 +276,4 @@ class MediaManagerItem(QtGui.QWidget): service_item.addIcon(u':/media/media_image.png') self.generateSlideData(service_item) self.parent.service_manager.addServiceItem(service_item) + self.ListView.clearSelection() diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index ffce9712b..41f2fb799 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -335,24 +335,6 @@ class BibleMediaItem(MediaManagerItem): if self.search_results is not None: self.displayResults(bible) -# def onLiveClick(self): -# service_item = ServiceItem(self.parent) -# service_item.addIcon( u':/media/media_verse.png') -# self.generateSlideData(service_item) -# self.parent.live_controller.addServiceItem(service_item) -# -# def onAddClick(self): -# service_item = ServiceItem(self.parent) -# service_item.addIcon(u':/media/media_verse.png') -# self.generateSlideData(service_item) -# self.parent.service_manager.addServiceItem(service_item) -# -# def onPreviewClick(self): -# service_item = ServiceItem(self.parent) -# service_item.addIcon(u':/media/media_verse.png') -# self.generateSlideData(service_item) -# self.parent.preview_controller.addServiceItem(service_item) - def generateSlideData(self, service_item): log.debug(u'generating slide data') items = self.BibleListWidget.selectedIndexes() diff --git a/openlp/plugins/custom/lib/mediaitem.py b/openlp/plugins/custom/lib/mediaitem.py index 7120e4dcb..46968167b 100644 --- a/openlp/plugins/custom/lib/mediaitem.py +++ b/openlp/plugins/custom/lib/mediaitem.py @@ -144,7 +144,6 @@ class CustomMediaItem(MediaManagerItem): self.initialise() def onCustomEditClick(self): - item = self.CustomListWidget.currentItem() item = self.CustomListWidget.currentItem() if item is not None: item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] diff --git a/openlp/plugins/images/imageplugin.py b/openlp/plugins/images/imageplugin.py index 29330fbb4..e46cb6a2b 100644 --- a/openlp/plugins/images/imageplugin.py +++ b/openlp/plugins/images/imageplugin.py @@ -47,4 +47,3 @@ class ImagePlugin(Plugin): def initialise(self): log.info(u'Plugin Initialising') - diff --git a/openlp/plugins/images/lib/__init__.py b/openlp/plugins/images/lib/__init__.py index 01919ca34..23e207090 100644 --- a/openlp/plugins/images/lib/__init__.py +++ b/openlp/plugins/images/lib/__init__.py @@ -17,6 +17,4 @@ 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 """ - -from listwithpreviews import ListWithPreviews from mediaitem import ImageMediaItem diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index 453dd730c..14bfaf26b 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -21,9 +21,6 @@ import logging import os from PyQt4 import QtCore, QtGui - -# from openlp.plugins.images.lib import ListWithPreviews -from listwithpreviews import ListWithPreviews from openlp.core.lib import MediaManagerItem, ServiceItem, translate, BaseListWithDnD # We have to explicitly create separate classes for each plugin @@ -57,17 +54,24 @@ class ImageMediaItem(MediaManagerItem): MediaManagerItem.__init__(self, parent, icon, title) def initialise(self): - self.ListData = ListWithPreviews() - self.ListView.setModel(self.ListData) - + self.ListView.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) + self.ListView.setIconSize(QtCore.QSize(88,50)) self.loadList(self.parent.config.load_list(self.ConfigSection)) + def loadList(self, list): + for file in list: + (path, filename) = os.path.split(unicode(file)) + item_name = QtGui.QListWidgetItem(filename) + item_name.setIcon(QtGui.QIcon(file)) + item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(file)) + self.ListView.addItem(item_name) + def generateSlideData(self, service_item): - indexes = self.ListView.selectedIndexes() + items = self.ListView.selectedIndexes() service_item.title = u'Image(s)' - for index in indexes: - filename = self.ListData.getFilename(index) + for item in items: + bitem = self.ListView.item(item.row()) + filename = unicode((bitem.data(QtCore.Qt.UserRole)).toString()) frame = QtGui.QImage(unicode(filename)) (path, name) = os.path.split(filename) service_item.add_from_image(path, name, frame) - diff --git a/openlp/plugins/presentations/lib/mediaitem.py b/openlp/plugins/presentations/lib/mediaitem.py index aeb5f4cdc..ec7391f6f 100644 --- a/openlp/plugins/presentations/lib/mediaitem.py +++ b/openlp/plugins/presentations/lib/mediaitem.py @@ -83,8 +83,18 @@ class PresentationMediaItem(MediaManagerItem): # self.DisplayTypeComboBox.addItem(u'Powerpoint') # self.DisplayTypeComboBox.addItem(u'Keynote') + def loadList(self, list): + for file in list: + (path, filename) = os.path.split(unicode(file)) + item_name = QtGui.QListWidgetItem(filename) + item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(file)) + self.ListView.addItem(item_name) + def getFileList(self): - filelist = [item[0] for item in self.PresentationsListView]; + count = 0 + while count < len(self.ListView): + filelist = [set.ListView.item(count).text()] + count += 1 return filelist def loadPresentationList(self, list): From a4a0b521a45514c754030f5860b7398b49715522 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 27 Jun 2009 20:55:55 +0100 Subject: [PATCH 3/7] More cleanups and bug fixes. --- openlp/core/lib/mediamanageritem.py | 26 ++++++----- openlp/plugins/bibles/lib/mediaitem.py | 36 +++++++-------- openlp/plugins/custom/lib/mediaitem.py | 42 +++++++++--------- openlp/plugins/images/lib/mediaitem.py | 10 ++++- openlp/plugins/presentations/lib/mediaitem.py | 7 --- openlp/plugins/songs/forms/editsongform.py | 5 --- openlp/plugins/songs/lib/mediaitem.py | 44 +++++++++---------- 7 files changed, 84 insertions(+), 86 deletions(-) diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py index 518bf2ca7..fc9f349ff 100644 --- a/openlp/core/lib/mediamanageritem.py +++ b/openlp/core/lib/mediamanageritem.py @@ -227,16 +227,22 @@ class MediaManagerItem(QtGui.QWidget): translate(self.TranslationContext, self.OnNewPrompt), self.parent.config.get_last_dir(), self.OnNewFileMasks) - log.info(u'New files(s)', unicode(files)) + log.info(u'New files(s)%s', unicode(files)) if len(files) > 0: self.loadList(files) dir, filename = os.path.split(unicode(files[0])) self.parent.config.set_last_dir(dir) #self.parent.config.set_list(self.ConfigSection, self.ListData.getFileList()) + def getFileList(self): + count = 0 + while count < len(self.ListView): + filelist = [set.ListView.item(count).text()] + count += 1 + return filelist + def loadList(self, list): - for file in list: - self.ListData.addRow(file) + raise NotImplementedError(u'MediaManagerItem.loadList needs to be defined by the plugin') def onNewClick(self): raise NotImplementedError(u'MediaManagerItem.onNewClick needs to be defined by the plugin') @@ -245,11 +251,7 @@ class MediaManagerItem(QtGui.QWidget): raise NotImplementedError(u'MediaManagerItem.onEditClick needs to be defined by the plugin') def onDeleteClick(self): - indexes = self.ListView.selectedIndexes() - for index in indexes: - current_row = int(index.row()) - self.ListData.removeRow(current_row) - self.parent.config.set_list(self.ConfigSection, self.ListData.getFileList()) + raise NotImplementedError(u'MediaManagerItem.onDeleteClick needs to be defined by the plugin') def generateSlideData(self): raise NotImplementedError(u'MediaManagerItem.generateSlideData needs to be defined by the plugin') @@ -257,15 +259,15 @@ class MediaManagerItem(QtGui.QWidget): def onPreviewClick(self): log.debug(self.PluginTextShort+u'Preview Requested') service_item = ServiceItem(self.parent) - service_item.addIcon(u':/media/media_image.png') + service_item.addIcon(u':/media/media_'+self.PluginTextShort.lower()+u'.png') self.generateSlideData(service_item) self.parent.preview_controller.addServiceItem(service_item) self.ListView.clearSelection() def onLiveClick(self): - log.debug(self.PluginTextShort+u' Live Requested') + log.debug(self.PluginTextShort + u' Live Requested') service_item = ServiceItem(self.parent) - service_item.addIcon(u':/media/media_image.png') + service_item.addIcon(u':/media/media_'+self.PluginTextShort.lower()+u'.png') self.generateSlideData(service_item) self.parent.live_controller.addServiceItem(service_item) self.ListView.clearSelection() @@ -273,7 +275,7 @@ class MediaManagerItem(QtGui.QWidget): def onAddClick(self): log.debug(self.PluginTextShort+u' Add Requested') service_item = ServiceItem(self.parent) - service_item.addIcon(u':/media/media_image.png') + service_item.addIcon(u':/media/media_'+self.PluginTextShort.lower()+u'.png') self.generateSlideData(service_item) self.parent.service_manager.addServiceItem(service_item) self.ListView.clearSelection() diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index 41f2fb799..e6fa2e6f2 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -192,11 +192,11 @@ class BibleMediaItem(MediaManagerItem): self.SearchTabWidget.addTab(self.AdvancedTab, u'Advanced') # Add the search tab widget to the page layout self.PageLayout.addWidget(self.SearchTabWidget) - self.BibleListWidget = BibleList() - self.BibleListWidget.setAlternatingRowColors(True) - self.BibleListWidget.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) - self.BibleListWidget.setDragEnabled(True) - self.PageLayout.addWidget(self.BibleListWidget) + self.ListView = BibleList() + self.ListView.setAlternatingRowColors(True) + self.ListView.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) + self.ListView.setDragEnabled(True) + self.PageLayout.addWidget(self.ListView) # Combo Boxes QtCore.QObject.connect(self.AdvancedVersionComboBox, QtCore.SIGNAL(u'activated(int)'), self.onAdvancedVersionComboBox) @@ -213,18 +213,18 @@ class BibleMediaItem(MediaManagerItem): QtCore.SIGNAL(u'pressed()'), self.onAdvancedSearchButton) QtCore.QObject.connect(self.QuickSearchButton, QtCore.SIGNAL(u'pressed()'), self.onQuickSearchButton) - QtCore.QObject.connect(self.BibleListWidget, + QtCore.QObject.connect(self.ListView, QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onPreviewClick) # Context Menus - self.BibleListWidget.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) - self.BibleListWidget.addAction(self.contextMenuAction( - self.BibleListWidget, u':/system/system_preview.png', + self.ListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) + self.ListView.addAction(self.contextMenuAction( + self.ListView, u':/system/system_preview.png', translate(u'BibleMediaItem',u'&Preview Verse'), self.onPreviewClick)) - self.BibleListWidget.addAction(self.contextMenuAction( - self.BibleListWidget, u':/system/system_live.png', + self.ListView.addAction(self.contextMenuAction( + self.ListView, u':/system/system_live.png', translate(u'BibleMediaItem',u'&Show Live'), self.onLiveClick)) - self.BibleListWidget.addAction(self.contextMenuAction( - self.BibleListWidget, u':/system/system_add.png', + self.ListView.addAction(self.contextMenuAction( + self.ListView, u':/system/system_add.png', translate(u'BibleMediaItem',u'&Add to Service'), self.onAddClick)) def retranslateUi(self): @@ -309,7 +309,7 @@ class BibleMediaItem(MediaManagerItem): self.search_results = self.parent.biblemanager.get_verse_text(bible, book, chapter_from, chapter_to, verse_from, verse_to) if self.ClearAdvancedSearchComboBox.currentIndex() == 0: - self.BibleListWidget.clear() + self.ListView.clear() self.displayResults(bible) def onAdvancedFromChapter(self): @@ -327,7 +327,7 @@ class BibleMediaItem(MediaManagerItem): bible = unicode(self.QuickVersionComboBox.currentText()) text = unicode(self.QuickSearchEdit.displayText()) if self.ClearQuickSearchComboBox.currentIndex() == 0: - self.BibleListWidget.clear() + self.ListView.clear() if self.QuickSearchComboBox.currentIndex() == 1: self.search_results = self.parent.biblemanager.get_verse_from_text(bible, text) else: @@ -337,13 +337,13 @@ class BibleMediaItem(MediaManagerItem): def generateSlideData(self, service_item): log.debug(u'generating slide data') - items = self.BibleListWidget.selectedIndexes() + items = self.ListView.selectedIndexes() old_chapter = u'' raw_slides=[] raw_footer = [] bible_text = u'' for item in items: - bitem = self.BibleListWidget.item(item.row()) + bitem = self.ListView.item(item.row()) text = unicode((bitem.data(QtCore.Qt.UserRole)).toString()) verse = text[:text.find(u'(')] bible = text[text.find(u'(') + 1:text.find(u')')] @@ -422,7 +422,7 @@ class BibleMediaItem(MediaManagerItem): bible_text = unicode(u' %s %d:%d (%s)'%(book , chap,vse, bible)) bible_verse = QtGui.QListWidgetItem(bible_text) bible_verse.setData(QtCore.Qt.UserRole, QtCore.QVariant(bible_text)) - self.BibleListWidget.addItem(bible_verse) + self.ListView.addItem(bible_verse) def searchByReference(self, bible, search): log.debug(u'searchByReference %s ,%s', bible, search) diff --git a/openlp/plugins/custom/lib/mediaitem.py b/openlp/plugins/custom/lib/mediaitem.py index 46968167b..b583d12e1 100644 --- a/openlp/plugins/custom/lib/mediaitem.py +++ b/openlp/plugins/custom/lib/mediaitem.py @@ -105,38 +105,38 @@ class CustomMediaItem(MediaManagerItem): self.CustomWidget.setObjectName(u'CustomWidget') # Add the Custom widget to the page layout self.PageLayout.addWidget(self.CustomWidget) - self.CustomListWidget = CustomList() - self.CustomListWidget.setAlternatingRowColors(True) - self.CustomListWidget.setDragEnabled(True) - self.PageLayout.addWidget(self.CustomListWidget) + self.ListView = CustomList() + self.ListView.setAlternatingRowColors(True) + self.ListView.setDragEnabled(True) + self.PageLayout.addWidget(self.ListView) # Signals - QtCore.QObject.connect(self.CustomListWidget, + QtCore.QObject.connect(self.ListView, QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onCustomPreviewClick) #define and add the context menu - self.CustomListWidget.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) - self.CustomListWidget.addAction(self.contextMenuAction(self.CustomListWidget, + self.ListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) + self.ListView.addAction(self.contextMenuAction(self.ListView, ':/custom/custom_edit.png', translate(u'CustomMediaItem', u'&Edit Custom'), self.onCustomEditClick)) - self.CustomListWidget.addAction(self.contextMenuSeparator(self.CustomListWidget)) - self.CustomListWidget.addAction(self.contextMenuAction( - self.CustomListWidget, ':/system/system_preview.png', + self.ListView.addAction(self.contextMenuSeparator(self.ListView)) + self.ListView.addAction(self.contextMenuAction( + self.ListView, ':/system/system_preview.png', translate(u'CustomMediaItem',u'&Preview Custom'), self.onCustomPreviewClick)) - self.CustomListWidget.addAction(self.contextMenuAction( - self.CustomListWidget, ':/system/system_live.png', + self.ListView.addAction(self.contextMenuAction( + self.ListView, ':/system/system_live.png', translate(u'CustomMediaItem',u'&Show Live'), self.onCustomLiveClick)) - self.CustomListWidget.addAction(self.contextMenuAction( - self.CustomListWidget, ':/system/system_add.png', + self.ListView.addAction(self.contextMenuAction( + self.ListView, ':/system/system_add.png', translate(u'CustomMediaItem',u'&Add to Service'), self.onCustomAddClick)) def initialise(self): self.loadCustomList(self.parent.custommanager.get_all_slides()) def loadCustomList(self, list): - self.CustomListWidget.clear() + self.ListView.clear() for CustomSlide in list: custom_name = QtGui.QListWidgetItem(CustomSlide.title) custom_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(CustomSlide.id)) - self.CustomListWidget.addItem(custom_name) + self.ListView.addItem(custom_name) def onCustomNewClick(self): self.parent.edit_custom_form.loadCustom(0) @@ -144,7 +144,7 @@ class CustomMediaItem(MediaManagerItem): self.initialise() def onCustomEditClick(self): - item = self.CustomListWidget.currentItem() + item = self.ListView.currentItem() if item is not None: item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] self.parent.edit_custom_form.loadCustom(item_id) @@ -152,12 +152,12 @@ class CustomMediaItem(MediaManagerItem): self.initialise() def onCustomDeleteClick(self): - item = self.CustomListWidget.currentItem() + item = self.ListView.currentItem() if item is not None: item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] self.parent.custommanager.delete_custom(item_id) - row = self.CustomListWidget.row(item) - self.CustomListWidget.takeItem(row) + row = self.ListView.row(item) + self.ListView.takeItem(row) def onCustomPreviewClick(self): log.debug(u'Custom Preview Requested') @@ -185,7 +185,7 @@ class CustomMediaItem(MediaManagerItem): raw_footer = [] slide = None theme = None - item = self.CustomListWidget.currentItem() + item = self.ListView.currentItem() item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] customSlide = self.parent.custommanager.get_custom(item_id) title = customSlide.title diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index 14bfaf26b..f67364374 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -55,9 +55,17 @@ class ImageMediaItem(MediaManagerItem): def initialise(self): self.ListView.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) - self.ListView.setIconSize(QtCore.QSize(88,50)) + self.ListView.setIconSize(QtCore.QSize(50,88)) self.loadList(self.parent.config.load_list(self.ConfigSection)) + def onDeleteClick(self): + item = self.ListView.currentItem() + if item is not None: + item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] + row = self.ListView.row(item) + self.ListView.takeItem(row) + self.parent.config.set_list(self.ConfigSection, self.ListData.getFileList()) + def loadList(self, list): for file in list: (path, filename) = os.path.split(unicode(file)) diff --git a/openlp/plugins/presentations/lib/mediaitem.py b/openlp/plugins/presentations/lib/mediaitem.py index ec7391f6f..67afbd7cc 100644 --- a/openlp/plugins/presentations/lib/mediaitem.py +++ b/openlp/plugins/presentations/lib/mediaitem.py @@ -90,13 +90,6 @@ class PresentationMediaItem(MediaManagerItem): item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(file)) self.ListView.addItem(item_name) - def getFileList(self): - count = 0 - while count < len(self.ListView): - filelist = [set.ListView.item(count).text()] - count += 1 - return filelist - def loadPresentationList(self, list): pass # for files in list: diff --git a/openlp/plugins/songs/forms/editsongform.py b/openlp/plugins/songs/forms/editsongform.py index 9eecbde2e..751c58b99 100644 --- a/openlp/plugins/songs/forms/editsongform.py +++ b/openlp/plugins/songs/forms/editsongform.py @@ -317,11 +317,6 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): self.TitleEditItem.setStyleSheet(u'background-color: red; color: white') else: self.TitleEditItem.setStyleSheet(u'') - if len(self.CopyrightEditItem.displayText()) == 0: - valid = False - self.CopyrightEditItem.setStyleSheet(u'background-color: red; color: white') - else: - self.CopyrightEditItem.setStyleSheet(u'') if self.VerseListWidget.count() == 0: valid = False self.VerseListWidget.setStyleSheet(u'background-color: red; color: white') diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index 87c050fed..7b4e1af3d 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -121,12 +121,12 @@ class SongMediaItem(MediaManagerItem): self.SearchLayout.addWidget(self.SearchTextButton, 3, 2, 1, 1) # Add the song widget to the page layout self.PageLayout.addWidget(self.SongWidget) - self.SongListWidget = SongList() - self.SongListWidget.setAlternatingRowColors(True) - self.SongListWidget.setDragEnabled(True) - self.SongListWidget.setObjectName(u'SongListWidget') - self.PageLayout.addWidget(self.SongListWidget) - self.SongListWidget.setDragEnabled(True) + self.ListView = SongList() + self.ListView.setAlternatingRowColors(True) + self.ListView.setDragEnabled(True) + self.ListView.setObjectName(u'ListView') + self.PageLayout.addWidget(self.ListView) + self.ListView.setDragEnabled(True) # Signals and slots QtCore.QObject.connect(self.SearchTextButton, QtCore.SIGNAL(u'pressed()'), self.onSearchTextButtonClick) @@ -134,21 +134,21 @@ class SongMediaItem(MediaManagerItem): QtCore.SIGNAL(u'pressed()'), self.onClearTextButtonClick) QtCore.QObject.connect(self.SearchTextEdit, QtCore.SIGNAL(u'textChanged(const QString&)'), self.onSearchTextEditChanged) - QtCore.QObject.connect(self.SongListWidget, + QtCore.QObject.connect(self.ListView, QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onSongPreviewClick) #define and add the context menu - self.SongListWidget.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) - self.SongListWidget.addAction(self.contextMenuAction(self.SongListWidget, + self.ListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) + self.ListView.addAction(self.contextMenuAction(self.ListView, ':/songs/song_new.png', translate(u'SongMediaItem', u'&Edit Song'), self.onSongEditClick)) - self.SongListWidget.addAction(self.contextMenuSeparator(self.SongListWidget)) - self.SongListWidget.addAction(self.contextMenuAction(self.SongListWidget, + self.ListView.addAction(self.contextMenuSeparator(self.ListView)) + self.ListView.addAction(self.contextMenuAction(self.ListView, ':/system/system_preview.png', translate(u'SongMediaItem', u'&Preview Song'), self.onSongPreviewClick)) - self.SongListWidget.addAction(self.contextMenuAction(self.SongListWidget, + self.ListView.addAction(self.contextMenuAction(self.ListView, ':/system/system_live.png', translate(u'SongMediaItem', u'&Show Live'), self.onSongLiveClick)) - self.SongListWidget.addAction(self.contextMenuAction(self.SongListWidget, + self.ListView.addAction(self.contextMenuAction(self.ListView, ':/system/system_add.png', translate(u'SongMediaItem', u'&Add to Service'), self.onSongAddClick)) @@ -182,7 +182,7 @@ class SongMediaItem(MediaManagerItem): def displayResultsSong(self, searchresults): log.debug(u'display results Song') - self.SongListWidget.clear() + self.ListView.clear() #log.debug(u'Records returned from search %s", len(searchresults)) for song in searchresults: author_list = u'' @@ -193,17 +193,17 @@ class SongMediaItem(MediaManagerItem): song_detail = unicode(u'%s (%s)' % (unicode(song.title), unicode(author_list))) song_name = QtGui.QListWidgetItem(song_detail) song_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(song.id)) - self.SongListWidget.addItem(song_name) + self.ListView.addItem(song_name) def displayResultsAuthor(self, searchresults): log.debug(u'display results Author') - self.SongListWidget.clear() + self.ListView.clear() for author in searchresults: for song in author.songs: song_detail = unicode(u'%s (%s)' % (unicode(author.display_name), unicode(song.title))) song_name = QtGui.QListWidgetItem(song_detail) song_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(song.id)) - self.SongListWidget.addItem(song_name) + self.ListView.addItem(song_name) def onClearTextButtonClick(self): """ @@ -223,19 +223,19 @@ class SongMediaItem(MediaManagerItem): self.edit_song_form.exec_() def onSongEditClick(self): - item = self.SongListWidget.currentItem() + item = self.ListView.currentItem() if item is not None: item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] self.edit_song_form.loadSong(item_id) self.edit_song_form.exec_() def onSongDeleteClick(self): - item = self.SongListWidget.currentItem() + item = self.ListView.currentItem() if item is not None: item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] self.parent.songmanager.delete_song(item_id) - row = self.SongListWidget.row(item) - self.SongListWidget.takeItem(row) + row = self.ListView.row(item) + self.ListView.takeItem(row) def onSongPreviewClick(self): service_item = ServiceItem(self.parent) @@ -248,7 +248,7 @@ class SongMediaItem(MediaManagerItem): raw_footer = [] author_list = u'' ccl = u'' - item = self.SongListWidget.currentItem() + item = self.ListView.currentItem() item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] song = self.parent.songmanager.get_song(item_id) service_item.theme = song.theme_name From 79270808387fc33fb764f8b65ac7a4946d3c6126 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 28 Jun 2009 07:54:12 +0100 Subject: [PATCH 4/7] More changes to get plugable slideControllers to work --- openlp/core/lib/plugin.py | 3 +- openlp/core/ui/mainwindow.py | 11 +-- openlp/core/ui/slidecontroller.py | 73 ++++++++++--------- openlp/core/ui/slidecontrollermanager.py | 52 +++++++++++++ openlp/plugins/images/lib/__init__.py | 1 + .../images/lib/imageslidecontroller.py | 71 ++++++++++++++++++ openlp/plugins/images/lib/mediaitem.py | 7 ++ 7 files changed, 177 insertions(+), 41 deletions(-) create mode 100644 openlp/core/ui/slidecontrollermanager.py create mode 100644 openlp/plugins/images/lib/imageslidecontroller.py diff --git a/openlp/core/lib/plugin.py b/openlp/core/lib/plugin.py index e9b9a7ffd..4db4480cc 100644 --- a/openlp/core/lib/plugin.py +++ b/openlp/core/lib/plugin.py @@ -101,7 +101,8 @@ class Plugin(object): self.event_manager = plugin_helpers[u'event'] self.render_manager = plugin_helpers[u'render'] self.service_manager = plugin_helpers[u'service'] - self.settings= plugin_helpers[u'settings'] + self.settings = plugin_helpers[u'settings'] + self.slideManager = plugin_helpers[u'slideManager'] self.dnd_id=None def check_pre_conditions(self): diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index c5d26bc46..f15d10c74 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -50,7 +50,7 @@ class MainWindow(object): self.alertForm = AlertForm(self) self.aboutForm = AboutForm() self.settingsForm = SettingsForm(self.screenList, self) - self.slideControllerManager = SlideControllerManager() + self.slideControllerManager = SlideControllerManager(self) # Set up the path with plugins pluginpath = os.path.split(os.path.abspath(__file__))[0] pluginpath = os.path.abspath( @@ -73,6 +73,7 @@ class MainWindow(object): self.plugin_helpers[u'render'] = self.RenderManager self.plugin_helpers[u'service'] = self.ServiceManagerContents self.plugin_helpers[u'settings'] = self.settingsForm + self.plugin_helpers[u'slideManager'] = self.slideControllerManager self.plugin_manager.find_plugins(pluginpath, self.plugin_helpers, self.EventManager) # hook methods have to happen after find_plugins. Find plugins needs the @@ -168,11 +169,11 @@ class MainWindow(object): self.ControlSplitter.setObjectName(u'ControlSplitter') self.MainContentLayout.addWidget(self.ControlSplitter) # Create slide controllers - PreviewController = SlideController(self.ControlSplitter, self) - LiveController = SlideController(self.ControlSplitter, self, True) + PreviewController = SlideController(self) + LiveController = SlideController(self, True) self.slideControllerManager.add_controllers(u'base', PreviewController, LiveController) - self.PreviewController = self.slideControllerManager.getPreviewController(u'base') - self.LiveController = self.slideControllerManager.getLiveController(u'base') + self.PreviewController = PreviewController + self.LiveController = LiveController # Create menu self.MenuBar = QtGui.QMenuBar(self.mainWindow) self.MenuBar.setGeometry(QtCore.QRect(0, 0, 1087, 27)) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index ae49ab2e6..b309ed791 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -122,20 +122,20 @@ class SlideList(QtGui.QListView): class SlideController(QtGui.QWidget): """ - SlideController is THE slide controller widget. This widget is what the user + SlideController is the slide controller widget. This widget is what the user uses to control the displaying of verses/slides/etc on the screen. """ global log log = logging.getLogger(u'SlideController') - def __init__(self, controlSplitter, parent, isLive=False): + def __init__(self, parent, isLive=False): """ Set up the Slide Controller. """ QtGui.QWidget.__init__(self, parent.mainWindow) self.isLive = isLive self.parent = parent - self.Panel = QtGui.QWidget(controlSplitter) + self.Panel = QtGui.QWidget(parent.ControlSplitter) self.Splitter = QtGui.QSplitter(self.Panel) self.Splitter.setOrientation(QtCore.Qt.Vertical) # Layout for holding panel @@ -166,6 +166,41 @@ class SlideController(QtGui.QWidget): self.PreviewListView.setSpacing(0) self.PreviewListView.setObjectName(u'PreviewListView') self.ControllerLayout.addWidget(self.PreviewListView) + self.defineToolbar() + # Screen preview area + self.PreviewFrame = QtGui.QFrame(self.Splitter) + self.PreviewFrame.setGeometry(QtCore.QRect(0, 0, 250, 190)) + self.PreviewFrame.setSizePolicy(QtGui.QSizePolicy( + QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum)) + 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(8) + self.grid.setObjectName(u'grid') + # Actual preview screen + self.SlidePreview = QtGui.QLabel(self.PreviewFrame) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, + QtGui.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth( + self.SlidePreview.sizePolicy().hasHeightForWidth()) + self.SlidePreview.setSizePolicy(sizePolicy) + self.SlidePreview.setMinimumSize(QtCore.QSize(280, 210)) + self.SlidePreview.setFrameShape(QtGui.QFrame.Box) + self.SlidePreview.setFrameShadow(QtGui.QFrame.Plain) + self.SlidePreview.setLineWidth(1) + self.SlidePreview.setScaledContents(True) + self.SlidePreview.setObjectName(u'SlidePreview') + self.grid.addWidget(self.SlidePreview, 0, 0, 1, 1) + # Some events + QtCore.QObject.connect(self.PreviewListView, + QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected) + QtCore.QObject.connect(self.PreviewListView, + QtCore.SIGNAL(u'activated(QModelIndex)'), self.onSlideSelected) + + def defineToolbar(self): # Controller toolbar self.Toolbar = OpenLPToolbar(self.Controller) sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, @@ -199,38 +234,6 @@ class SlideController(QtGui.QWidget): self.onBlankScreen) self.Toolbar.setSizePolicy(sizeToolbarPolicy) self.ControllerLayout.addWidget(self.Toolbar) - # Screen preview area - self.PreviewFrame = QtGui.QFrame(self.Splitter) - self.PreviewFrame.setGeometry(QtCore.QRect(0, 0, 250, 190)) - self.PreviewFrame.setSizePolicy(QtGui.QSizePolicy( - QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum)) - 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(8) - self.grid.setObjectName(u'grid') - # Actual preview screen - self.SlidePreview = QtGui.QLabel(self.PreviewFrame) - sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, - QtGui.QSizePolicy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth( - self.SlidePreview.sizePolicy().hasHeightForWidth()) - self.SlidePreview.setSizePolicy(sizePolicy) - self.SlidePreview.setMinimumSize(QtCore.QSize(280, 210)) - self.SlidePreview.setFrameShape(QtGui.QFrame.Box) - self.SlidePreview.setFrameShadow(QtGui.QFrame.Plain) - self.SlidePreview.setLineWidth(1) - self.SlidePreview.setScaledContents(True) - self.SlidePreview.setObjectName(u'SlidePreview') - self.grid.addWidget(self.SlidePreview, 0, 0, 1, 1) - # Some events - QtCore.QObject.connect(self.PreviewListView, - QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected) - QtCore.QObject.connect(self.PreviewListView, - QtCore.SIGNAL(u'activated(QModelIndex)'), self.onSlideSelected) def onSlideSelectedFirst(self): """ diff --git a/openlp/core/ui/slidecontrollermanager.py b/openlp/core/ui/slidecontrollermanager.py new file mode 100644 index 000000000..10312ece5 --- /dev/null +++ b/openlp/core/ui/slidecontrollermanager.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 +""" +OpenLP - Open Source Lyrics Projection +Copyright (c) 2008 Raoul Snyman +Portions copyright (c) 2008-2009 Martin Thompson, Tim Bentley, + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; version 2 of the License. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU General Public License for more details. + +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 +""" +import logging +import os + +class SlideControllerManager(): + """ + This class controls which SlideController is availabe to the + main window + """ + global log + log = logging.getLogger(u'SlideControllerManager') + + def __init__(self, parent): + """ + Set up the Slide Controller. Manager + """ + self.parent = parent + self.live = {} + self.preview = {} + + def add_controllers(self, handle, preview, live): + self.live[handle] = live + self.preview[handle] = preview + print self.live + + def getPreviewController(self, handle): + return self.preview[handle] + + def getLiveController(self, handle): + print "---" + print self.live + print handle + print self.live[handle] + return self.live[handle] diff --git a/openlp/plugins/images/lib/__init__.py b/openlp/plugins/images/lib/__init__.py index 23e207090..b22b77f58 100644 --- a/openlp/plugins/images/lib/__init__.py +++ b/openlp/plugins/images/lib/__init__.py @@ -18,3 +18,4 @@ this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA """ from mediaitem import ImageMediaItem +from imageslidecontroller import ImageSlideController diff --git a/openlp/plugins/images/lib/imageslidecontroller.py b/openlp/plugins/images/lib/imageslidecontroller.py new file mode 100644 index 000000000..afdf5bcce --- /dev/null +++ b/openlp/plugins/images/lib/imageslidecontroller.py @@ -0,0 +1,71 @@ +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 +""" +OpenLP - Open Source Lyrics Projection +Copyright (c) 2008 Raoul Snyman +Portions copyright (c) 2008-2009 Martin Thompson, Tim Bentley, + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; version 2 of the License. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU General Public License for more details. + +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 +""" +import logging +import os + +from PyQt4 import QtCore, QtGui +from openlp.core.lib import OpenLPToolbar, translate +from openlp.core.ui import SlideController + +class ImageSlideController(SlideController): + + def defineToolbar(self): + # Controller toolbar + self.Toolbar = OpenLPToolbar(self.Controller) + sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, + QtGui.QSizePolicy.Fixed) + sizeToolbarPolicy.setHorizontalStretch(0) + sizeToolbarPolicy.setVerticalStretch(0) + sizeToolbarPolicy.setHeightForWidth( + self.Toolbar.sizePolicy().hasHeightForWidth()) + if self.isLive: + self.Toolbar.addToolbarButton(u'First Slide', + u':/slides/slide_first.png', + translate(u'SlideController', u'Move to first'), + self.onSlideSelectedFirst) + self.Toolbar.addToolbarButton(u'Last Slide', + u':/slides/slide_previous.png', + translate(u'SlideController', u'Move to previous'), + self.onSlideSelectedPrevious) + self.Toolbar.addToolbarButton(u'First Slide', + u':/slides/slide_next.png', + translate(u'SlideController', u'Move to next'), + self.onSlideSelectedNext) + if self.isLive: + self.Toolbar.addToolbarButton(u'Last Slide', + u':/slides/slide_last.png', + translate(u'SlideController', u'Move to last'), + self.onSlideSelectedLast) + self.Toolbar.addSeparator() + self.Toolbar.addToolbarButton(u'Close Screen', + u':/slides/slide_close.png', + translate(u'SlideController', u'Close Screen'), + self.onBlankScreen) + self.Toolbar.addSeparator() + self.Toolbar.addToolbarButton(u'Start Loop', + u':/slides/slide_last.png', + translate(u'SlideController', u'Start continuous loop'), + self.onSlideSelectedLast) + self.Toolbar.addToolbarButton(u'Stop Loop', + u':/slides/slide_last.png', + translate(u'SlideController', u'Start continuous loop'), + self.onSlideSelectedLast) + self.Toolbar.setSizePolicy(sizeToolbarPolicy) + self.ControllerLayout.addWidget(self.Toolbar) diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index f67364374..091096924 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -22,6 +22,7 @@ import os from PyQt4 import QtCore, QtGui from openlp.core.lib import MediaManagerItem, ServiceItem, translate, BaseListWithDnD +from openlp.plugins.images.lib.imageslidecontroller import ImageSlideController # We have to explicitly create separate classes for each plugin # in order for DnD to the Service manager to work correctly. @@ -48,10 +49,16 @@ class ImageMediaItem(MediaManagerItem): self.hasEditIcon = False self.OnNewPrompt = u'Select Image(s)' self.OnNewFileMasks = u'Images (*.jpg *jpeg *.gif *.png *.bmp)' + self.slidecontroller = u'image' # this next is a class, not an instance of a class - it will # be instanced by the base MediaManagerItem self.ListViewWithDnD_class = ImageListView MediaManagerItem.__init__(self, parent, icon, title) + #create and install our own slide controllers + #a=c + live_controller = ImageSlideController(self.parent.slideManager.parent, True) + preview_controller = ImageSlideController(self.parent.slideManager.parent) + self.parent.slideManager.add_controllers(u'image', preview_controller, live_controller) def initialise(self): self.ListView.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) From 560584d8f694810d5453f79ec317962a1836061e Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Mon, 29 Jun 2009 06:07:32 +0100 Subject: [PATCH 5/7] Added ImageToolBar to show what I am thinking Cleanup mainwindow from mark 1 attempt. Fix bug in Thememanager so themes are not deleted --- openlp/core/lib/mediamanageritem.py | 2 +- openlp/core/lib/toolbar.py | 2 +- openlp/core/ui/__init__.py | 3 +- openlp/core/ui/mainwindow.py | 7 +-- openlp/core/ui/slidecontroller.py | 49 ++++++++++++++++--- openlp/core/ui/thememanager.py | 45 +++++++++-------- openlp/plugins/bibles/lib/mediaitem.py | 2 - openlp/plugins/images/lib/__init__.py | 2 +- .../images/lib/imageslidecontroller.py | 42 ++++++++++++++-- openlp/plugins/images/lib/mediaitem.py | 8 +-- 10 files changed, 113 insertions(+), 49 deletions(-) diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py index fc9f349ff..1f86dfe93 100644 --- a/openlp/core/lib/mediamanageritem.py +++ b/openlp/core/lib/mediamanageritem.py @@ -253,7 +253,7 @@ class MediaManagerItem(QtGui.QWidget): def onDeleteClick(self): raise NotImplementedError(u'MediaManagerItem.onDeleteClick needs to be defined by the plugin') - def generateSlideData(self): + def generateSlideData(self, item): raise NotImplementedError(u'MediaManagerItem.generateSlideData needs to be defined by the plugin') def onPreviewClick(self): diff --git a/openlp/core/lib/toolbar.py b/openlp/core/lib/toolbar.py index fa2f2f12b..9bd124aa2 100644 --- a/openlp/core/lib/toolbar.py +++ b/openlp/core/lib/toolbar.py @@ -28,7 +28,7 @@ class OpenLPToolbar(QtGui.QToolBar): Lots of toolbars around the place, so it makes sense to have a common way to manage them """ def __init__(self, parent): - QtGui.QToolBar.__init__(self, parent) + QtGui.QToolBar.__init__(self, None) # useful to be able to reuse button icons... self.icons = {} self.log = logging.getLogger(u'OpenLPToolbar') diff --git a/openlp/core/ui/__init__.py b/openlp/core/ui/__init__.py index d6ee48872..48d1af59a 100644 --- a/openlp/core/ui/__init__.py +++ b/openlp/core/ui/__init__.py @@ -17,6 +17,7 @@ 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 """ +from slidecontroller import BaseToolbar from slidecontrollermanager import SlideControllerManager from maindisplay import MainDisplay from amendthemeform import AmendThemeForm @@ -32,5 +33,5 @@ from servicemanager import ServiceManager from thememanager import ThemeManager from mainwindow import MainWindow -__all__ = ['SplashScreen', 'AboutForm', 'SettingsForm', +__all__ = ['SplashScreen', 'AboutForm', 'SettingsForm', 'BaseToolbar' 'MainWindow', 'MainDisplay', 'SlideController', 'ServiceManager', 'ThemeManager', 'AmendThemeForm'] diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index f15d10c74..e942ec3ea 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -169,11 +169,8 @@ class MainWindow(object): self.ControlSplitter.setObjectName(u'ControlSplitter') self.MainContentLayout.addWidget(self.ControlSplitter) # Create slide controllers - PreviewController = SlideController(self) - LiveController = SlideController(self, True) - self.slideControllerManager.add_controllers(u'base', PreviewController, LiveController) - self.PreviewController = PreviewController - self.LiveController = LiveController + self.PreviewController = SlideController(self) + self.LiveController = SlideController(self, True) # Create menu self.MenuBar = QtGui.QMenuBar(self.mainWindow) self.MenuBar.setGeometry(QtCore.QRect(0, 0, 1087, 27)) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index b309ed791..641715052 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -166,7 +166,17 @@ class SlideController(QtGui.QWidget): self.PreviewListView.setSpacing(0) self.PreviewListView.setObjectName(u'PreviewListView') self.ControllerLayout.addWidget(self.PreviewListView) - self.defineToolbar() + # Plugin the Base Toolbar class + self.BaseToolbar = BaseToolbar(self.isLive) + self.Toolbar = self.BaseToolbar.getToolbar() + self.ControllerLayout.addWidget(self.Toolbar) + sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, + QtGui.QSizePolicy.Fixed) + sizeToolbarPolicy.setHorizontalStretch(0) + sizeToolbarPolicy.setVerticalStretch(0) + sizeToolbarPolicy.setHeightForWidth( + self.Toolbar.sizePolicy().hasHeightForWidth()) + self.Toolbar.setSizePolicy(sizeToolbarPolicy) # Screen preview area self.PreviewFrame = QtGui.QFrame(self.Splitter) self.PreviewFrame.setGeometry(QtCore.QRect(0, 0, 250, 190)) @@ -194,21 +204,46 @@ class SlideController(QtGui.QWidget): self.SlidePreview.setScaledContents(True) self.SlidePreview.setObjectName(u'SlidePreview') self.grid.addWidget(self.SlidePreview, 0, 0, 1, 1) - # Some events QtCore.QObject.connect(self.PreviewListView, - QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected) + QtCore.SIGNAL(u'clicked(QModelIndex)'), self.BaseToolbar.onSlideSelected) QtCore.QObject.connect(self.PreviewListView, - QtCore.SIGNAL(u'activated(QModelIndex)'), self.onSlideSelected) + QtCore.SIGNAL(u'activated(QModelIndex)'), self.BaseToolbar.onSlideSelected) + # Add Late Arrivals + self.BaseToolbar.PreviewListView = self.PreviewListView + self.BaseToolbar.PreviewListData = self.PreviewListData + self.BaseToolbar.SlidePreview = self.SlidePreview + self.BaseToolbar.mainDisplay = self.parent.mainDisplay + + def addServiceItem(self, item): + self.BaseToolbar.addServiceItem(item) + + def addServiceManagerItem(self, item, slideno): + self.BaseToolbar.addServiceManagerItem(item, slideno) + +class BaseToolbar(object): + + def __init__(self, isLive): + self.Toolbar = None + self.PreviewListView = QtGui.QListWidget() + self.PreviewListData = None + self.isLive = isLive + self.defineToolbar() + + def getToolbar(self): + return self.Toolbar def defineToolbar(self): # Controller toolbar - self.Toolbar = OpenLPToolbar(self.Controller) + #self.Toolbar = OpenLPToolbar(self.Controller) + self.Toolbar = OpenLPToolbar(self) sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) sizeToolbarPolicy.setHorizontalStretch(0) sizeToolbarPolicy.setVerticalStretch(0) sizeToolbarPolicy.setHeightForWidth( self.Toolbar.sizePolicy().hasHeightForWidth()) + self.Toolbar.setSizePolicy(sizeToolbarPolicy) + if self.isLive: self.Toolbar.addToolbarButton(u'First Slide', u':/slides/slide_first.png', @@ -232,8 +267,6 @@ class SlideController(QtGui.QWidget): u':/slides/slide_close.png', translate(u'SlideController', u'Close Screen'), self.onBlankScreen) - self.Toolbar.setSizePolicy(sizeToolbarPolicy) - self.ControllerLayout.addWidget(self.Toolbar) def onSlideSelectedFirst(self): """ @@ -311,7 +344,7 @@ class SlideController(QtGui.QWidget): if self.isLive: no = frame[1] LiveFrame = self.serviceitem.frames[no][u'image'] - self.parent.mainDisplay.frameView(LiveFrame) + self.mainDisplay.frameView(LiveFrame) def addServiceItem(self, serviceitem): """ diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index 49400f97f..177075eaa 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -175,30 +175,33 @@ class ThemeManager(QtGui.QWidget): def onEditTheme(self): items = self.ThemeListView.selectedIndexes() - for item in items: - data = self.themeData.getValue(item) - self.amendThemeForm.loadTheme(data[3]) - self.amendThemeForm.exec_() + if len(items) > 0: + for item in items: + print item + data = self.themeData.getValue(item) + self.amendThemeForm.loadTheme(data[3]) + self.amendThemeForm.exec_() def onDeleteTheme(self): items = self.ThemeListView.selectedIndexes() - theme = u'' - for item in items: - data = self.themeData.getValue(item) - theme = data[3] - th = theme + u'.png' - try: - os.remove(os.path.join(self.path, th)) - except: - #if not present do not worry - pass - try: - shutil.rmtree(os.path.join(self.path, theme)) - except: - #if not present do not worry - pass - self.themeData.clearItems() - self.loadThemes() + if len(items) > 0: + theme = u'' + for item in items: + data = self.themeData.getValue(item) + theme = data[3] + th = theme + u'.png' + try: + os.remove(os.path.join(self.path, th)) + except: + #if not present do not worry + pass + try: + shutil.rmtree(os.path.join(self.path, theme)) + except: + #if not present do not worry + pass + self.themeData.clearItems() + self.loadThemes() def onExportTheme(self): pass diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index e6fa2e6f2..1186fd42b 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -57,8 +57,6 @@ class BibleMediaItem(MediaManagerItem): self.TranslationContext = u'BiblePlugin' self.PluginTextShort = u'Bible' self.ConfigSection = u'bibles' -# self.OnNewPrompt = u'Select Image(s)' -# self.OnNewFileMasks = u'Images (*.jpg *jpeg *.gif *.png *.bmp)' MediaManagerItem.__init__(self, parent, icon, title) self.search_results = {} # place to store the search results QtCore.QObject.connect(Receiver().get_receiver(), diff --git a/openlp/plugins/images/lib/__init__.py b/openlp/plugins/images/lib/__init__.py index b22b77f58..ac20c9f45 100644 --- a/openlp/plugins/images/lib/__init__.py +++ b/openlp/plugins/images/lib/__init__.py @@ -18,4 +18,4 @@ this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA """ from mediaitem import ImageMediaItem -from imageslidecontroller import ImageSlideController +from imageslidecontroller import ImageToolbar diff --git a/openlp/plugins/images/lib/imageslidecontroller.py b/openlp/plugins/images/lib/imageslidecontroller.py index afdf5bcce..3c2f8b510 100644 --- a/openlp/plugins/images/lib/imageslidecontroller.py +++ b/openlp/plugins/images/lib/imageslidecontroller.py @@ -22,13 +22,23 @@ import os from PyQt4 import QtCore, QtGui from openlp.core.lib import OpenLPToolbar, translate -from openlp.core.ui import SlideController +from openlp.core.ui.slidecontroller import BaseToolbar -class ImageSlideController(SlideController): +class ImageToolbar(BaseToolbar): + + def __init__(self, isLive): + self.Toolbar = None + self.PreviewListView = QtGui.QListWidget() + self.PreviewListData = None + self.isLive = isLive + self.defineToolbar() + + def getToolbar(self): + return self.Toolbar def defineToolbar(self): # Controller toolbar - self.Toolbar = OpenLPToolbar(self.Controller) + #self.Toolbar = OpenLPToolbar(self.Controller) sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) sizeToolbarPolicy.setHorizontalStretch(0) @@ -62,10 +72,32 @@ class ImageSlideController(SlideController): self.Toolbar.addToolbarButton(u'Start Loop', u':/slides/slide_last.png', translate(u'SlideController', u'Start continuous loop'), - self.onSlideSelectedLast) + self.onStartLoop) self.Toolbar.addToolbarButton(u'Stop Loop', u':/slides/slide_last.png', translate(u'SlideController', u'Start continuous loop'), - self.onSlideSelectedLast) + self.onStopLoop) self.Toolbar.setSizePolicy(sizeToolbarPolicy) self.ControllerLayout.addWidget(self.Toolbar) + + def onStartLoop(self): + """ + Go to the last slide. + """ + row = self.PreviewListData.createIndex( + self.PreviewListData.rowCount() - 1, 0) + if row.isValid(): + self.PreviewListView.selectionModel().setCurrentIndex(row, + QtGui.QItemSelectionModel.SelectCurrent) + self.onSlideSelected(row) + + def onStopLoop(self): + """ + Go to the last slide. + """ + row = self.PreviewListData.createIndex( + self.PreviewListData.rowCount() - 1, 0) + if row.isValid(): + self.PreviewListView.selectionModel().setCurrentIndex(row, + QtGui.QItemSelectionModel.SelectCurrent) + self.onSlideSelected(row) diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index 091096924..87062044f 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -22,7 +22,7 @@ import os from PyQt4 import QtCore, QtGui from openlp.core.lib import MediaManagerItem, ServiceItem, translate, BaseListWithDnD -from openlp.plugins.images.lib.imageslidecontroller import ImageSlideController +from openlp.plugins.images.lib.imageslidecontroller import ImageToolbar # We have to explicitly create separate classes for each plugin # in order for DnD to the Service manager to work correctly. @@ -56,9 +56,9 @@ class ImageMediaItem(MediaManagerItem): MediaManagerItem.__init__(self, parent, icon, title) #create and install our own slide controllers #a=c - live_controller = ImageSlideController(self.parent.slideManager.parent, True) - preview_controller = ImageSlideController(self.parent.slideManager.parent) - self.parent.slideManager.add_controllers(u'image', preview_controller, live_controller) +# live_controller = ImageSlideController(self.parent.slideManager.parent, True) +# preview_controller = ImageSlideController(self.parent.slideManager.parent) +# self.parent.slideManager.add_controllers(u'image', preview_controller, live_controller) def initialise(self): self.ListView.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) From 409383add2908335c7fef193d982afd049526fd2 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Mon, 29 Jun 2009 06:13:06 +0100 Subject: [PATCH 6/7] Sort out Image Plugin icons --- openlp/core/lib/__init__.py | 4 ++-- openlp/plugins/images/lib/mediaitem.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/openlp/core/lib/__init__.py b/openlp/core/lib/__init__.py index 0cbd3219b..d442e3c2b 100644 --- a/openlp/core/lib/__init__.py +++ b/openlp/core/lib/__init__.py @@ -39,7 +39,7 @@ def buildIcon(icon): ButtonIcon.addPixmap(QtGui.QPixmap(icon), QtGui.QIcon.Normal, QtGui.QIcon.Off) else: - ButtonIcon.addPixmap(QtGui.QPixmap.fromImage(QImage(icon)), + ButtonIcon.addPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(icon)), QtGui.QIcon.Normal, QtGui.QIcon.Off) return ButtonIcon @@ -75,7 +75,7 @@ from themexmlhandler import ThemeXML from renderer import Renderer from rendermanager import RenderManager from mediamanageritem import MediaManagerItem -from baselistwithdnd import BaseListWithDnD +from baselistwithdnd import BaseListWithDnD from listwithpreviews import ListWithPreviews __all__ = [ 'translate', 'file_to_xml', 'str_to_bool', diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index 87062044f..286670756 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -21,7 +21,7 @@ import logging import os from PyQt4 import QtCore, QtGui -from openlp.core.lib import MediaManagerItem, ServiceItem, translate, BaseListWithDnD +from openlp.core.lib import MediaManagerItem, ServiceItem, translate, BaseListWithDnD, buildIcon from openlp.plugins.images.lib.imageslidecontroller import ImageToolbar # We have to explicitly create separate classes for each plugin @@ -62,7 +62,7 @@ class ImageMediaItem(MediaManagerItem): def initialise(self): self.ListView.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) - self.ListView.setIconSize(QtCore.QSize(50,88)) + self.ListView.setIconSize(QtCore.QSize(88,50)) self.loadList(self.parent.config.load_list(self.ConfigSection)) def onDeleteClick(self): @@ -77,7 +77,7 @@ class ImageMediaItem(MediaManagerItem): for file in list: (path, filename) = os.path.split(unicode(file)) item_name = QtGui.QListWidgetItem(filename) - item_name.setIcon(QtGui.QIcon(file)) + item_name.setIcon(buildIcon(file)) item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(file)) self.ListView.addItem(item_name) From 9318cc3ec08302bdff2d59a44835969a3f23fb57 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Mon, 29 Jun 2009 18:37:46 +0100 Subject: [PATCH 7/7] Add Enter on ServiceManager --- openlp/core/ui/servicemanager.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index b39c45b46..4c486fe70 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -29,6 +29,22 @@ from openlp.core.lib import PluginConfig, OpenLPToolbar, ServiceItem, Event, \ contextMenuAction, contextMenuSeparator from openlp.core.utils import ConfigHelper +class ServiceManagerList(QtGui.QTreeWidget): + + def __init__(self,parent=None,name=None): + QtGui.QListView.__init__(self,parent) + self.parent = parent + + def keyPressEvent(self, event): + if type(event) == QtGui.QKeyEvent: + #here accept the event and do something + if event.key() == QtCore.Qt.Key_Enter: + self.parent.makeLive() + event.accept() + event.ignore() + else: + event.ignore() + class ServiceManager(QtGui.QWidget): """ Manages the orders of service. Currently this involves taking @@ -66,7 +82,7 @@ class ServiceManager(QtGui.QWidget): self.Toolbar.addAction(self.ThemeWidget) self.Layout.addWidget(self.Toolbar) # Create the service manager list - self.ServiceManagerList = QtGui.QTreeWidget(self) + self.ServiceManagerList = ServiceManagerList(self) self.ServiceManagerList.setEditTriggers(QtGui.QAbstractItemView.CurrentChanged|QtGui.QAbstractItemView.DoubleClicked|QtGui.QAbstractItemView.EditKeyPressed) self.ServiceManagerList.setDragDropMode(QtGui.QAbstractItemView.DragDrop) self.ServiceManagerList.setAlternatingRowColors(True)