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/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 c262d58c9..1f86dfe93 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 @@ -50,7 +51,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 +118,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 +143,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 +183,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,52 +219,63 @@ 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(), 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()) + #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') + + 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: - 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): + def generateSlideData(self, item): raise NotImplementedError(u'MediaManagerItem.generateSlideData needs to be defined by the plugin') 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() 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/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/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 c5d26bc46..e942ec3ea 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,8 @@ 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) - self.slideControllerManager.add_controllers(u'base', PreviewController, LiveController) - self.PreviewController = self.slideControllerManager.getPreviewController(u'base') - self.LiveController = self.slideControllerManager.getLiveController(u'base') + 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/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) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index ae49ab2e6..641715052 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,39 +166,17 @@ class SlideController(QtGui.QWidget): self.PreviewListView.setSpacing(0) self.PreviewListView.setObjectName(u'PreviewListView') self.ControllerLayout.addWidget(self.PreviewListView) - # Controller toolbar - self.Toolbar = OpenLPToolbar(self.Controller) + # 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()) - 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.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)) @@ -226,11 +204,69 @@ 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) + 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', + 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) def onSlideSelectedFirst(self): """ @@ -308,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/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/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 ffce9712b..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(), @@ -192,11 +190,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 +211,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 +307,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 +325,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: @@ -335,33 +333,15 @@ 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() + 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')')] @@ -440,7 +420,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 7120e4dcb..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,8 +144,7 @@ class CustomMediaItem(MediaManagerItem): self.initialise() def onCustomEditClick(self): - item = self.CustomListWidget.currentItem() - 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) @@ -153,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') @@ -186,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/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..ac20c9f45 100644 --- a/openlp/plugins/images/lib/__init__.py +++ b/openlp/plugins/images/lib/__init__.py @@ -17,6 +17,5 @@ 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 +from imageslidecontroller import ImageToolbar diff --git a/openlp/plugins/images/lib/imageslidecontroller.py b/openlp/plugins/images/lib/imageslidecontroller.py new file mode 100644 index 000000000..3c2f8b510 --- /dev/null +++ b/openlp/plugins/images/lib/imageslidecontroller.py @@ -0,0 +1,103 @@ +# -*- 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.slidecontroller import BaseToolbar + +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) + 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.onStartLoop) + self.Toolbar.addToolbarButton(u'Stop Loop', + u':/slides/slide_last.png', + translate(u'SlideController', u'Start continuous loop'), + 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 687e0c53d..286670756 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -21,10 +21,8 @@ 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 +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 # in order for DnD to the Service manager to work correctly. @@ -45,19 +43,50 @@ 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)' + 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) + self.ListView.setIconSize(QtCore.QSize(88,50)) + 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)) + item_name = QtGui.QListWidgetItem(filename) + item_name.setIcon(buildIcon(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 ab341c430..67afbd7cc 100644 --- a/openlp/plugins/presentations/lib/mediaitem.py +++ b/openlp/plugins/presentations/lib/mediaitem.py @@ -43,107 +43,52 @@ 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 + 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 loadPresentationList(self, list): pass 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