fixups to mediamanager

Bug fixes 
Plugable Toolbar 

bzr-revno: 481
This commit is contained in:
Tim Bentley 2009-06-29 20:54:09 +01:00
commit 4e6557eab6
20 changed files with 475 additions and 284 deletions

View File

@ -39,7 +39,7 @@ def buildIcon(icon):
ButtonIcon.addPixmap(QtGui.QPixmap(icon), QtGui.QIcon.Normal, ButtonIcon.addPixmap(QtGui.QPixmap(icon), QtGui.QIcon.Normal,
QtGui.QIcon.Off) QtGui.QIcon.Off)
else: else:
ButtonIcon.addPixmap(QtGui.QPixmap.fromImage(QImage(icon)), ButtonIcon.addPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(icon)),
QtGui.QIcon.Normal, QtGui.QIcon.Off) QtGui.QIcon.Normal, QtGui.QIcon.Off)
return ButtonIcon return ButtonIcon

View File

@ -24,13 +24,13 @@ from PyQt4 import QtCore, QtGui
from openlp.core.lib.toolbar import * from openlp.core.lib.toolbar import *
from openlp.core.lib import translate 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. Please put a short description of what this class does in here.
""" """
def __init__(self,parent = None): 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 # this must be set by the class which is inheriting
assert(self.PluginName) assert(self.PluginName)

View File

@ -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 Place, Suite 330, Boston, MA 02111-1307 USA
""" """
import types import types
import os
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
@ -50,7 +51,6 @@ class MediaManagerItem(QtGui.QWidget):
if title is not None: if title is not None:
self.title = title self.title = title
self.Toolbar = None self.Toolbar = None
#self.ConfigSection = None
self.PageLayout = QtGui.QVBoxLayout(self) self.PageLayout = QtGui.QVBoxLayout(self)
self.PageLayout.setSpacing(0) self.PageLayout.setSpacing(0)
self.PageLayout.setMargin(0) self.PageLayout.setMargin(0)
@ -118,6 +118,10 @@ class MediaManagerItem(QtGui.QWidget):
# self.PluginTextShort # eg "Image" for the image plugin # self.PluginTextShort # eg "Image" for the image plugin
# self.ConfigSection - where the items in the media manager are stored # self.ConfigSection - where the items in the media manager are stored
# this could potentially be self.PluginTextShort.lower() # 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.OnNewPrompt=u'Select Image(s)'
# self.OnNewFileMasks=u'Images (*.jpg *jpeg *.gif *.png *.bmp)' # self.OnNewFileMasks=u'Images (*.jpg *jpeg *.gif *.png *.bmp)'
@ -139,16 +143,29 @@ class MediaManagerItem(QtGui.QWidget):
# Add a toolbar # Add a toolbar
self.addToolbar() self.addToolbar()
# Create buttons for the toolbar # Create buttons for the toolbar
## New Song Button ## ## File Button ##
if self.hasFileIcon:
self.addToolbarButton( self.addToolbarButton(
translate(self.TranslationContext, u'Load '+self.PluginTextShort), translate(self.TranslationContext, u'Load '+self.PluginTextShort),
translate(self.TranslationContext, u'Load item into openlp.org'), translate(self.TranslationContext, u'Load a new '+self.PluginTextShort),
u':/images/image_load.png', self.onNewClick, u'ImageNewItem') u':'+self.IconPath+ u'_load.png', self.onFileClick, self.PluginTextShort+u'FileItem')
## Delete Song Button ## ## 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( self.addToolbarButton(
translate(self.TranslationContext, u'Delete '+self.PluginTextShort), translate(self.TranslationContext, u'Delete '+self.PluginTextShort),
translate(self.TranslationContext, u'Delete the selected item'), 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 ## ## Separator Line ##
self.addToolbarSeparator() self.addToolbarSeparator()
## Preview Button ## ## 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 '+self.PluginTextShort+u' To Service'),
translate(self.TranslationContext, u'Add the selected item(s) to the service'), translate(self.TranslationContext, u'Add the selected item(s) to the service'),
u':/system/system_add.png', self.onAddClick, self.PluginTextShort+u'AddItem') 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 #Add the List widget
self.ListView = self.ListViewWithDnD_class() self.ListView = self.ListViewWithDnD_class()
self.ListView.uniformItemSizes = True self.ListView.uniformItemSizes = True
self.ListData = ListWithPreviews()
self.ListView.setModel(self.ListData)
self.ListView.setGeometry(QtCore.QRect(10, 100, 256, 591)) self.ListView.setGeometry(QtCore.QRect(10, 100, 256, 591))
self.ListView.setSpacing(1) self.ListView.setSpacing(1)
self.ListView.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) self.ListView.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
self.ListView.setAlternatingRowColors(True) self.ListView.setAlternatingRowColors(True)
self.ListView.setDragEnabled(True) self.ListView.setDragEnabled(True)
self.ListView.setObjectName(self.PluginTextShort+u'ListView') self.ListView.setObjectName(self.PluginTextShort+u'ListView')
#Add tp PageLayout
self.PageLayout.addWidget(self.ListView) self.PageLayout.addWidget(self.ListView)
#define and add the context menu #define and add the context menu
self.ListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) 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.addAction(self.contextMenuAction(
self.ListView, ':/system/system_preview.png', self.ListView, ':/system/system_preview.png',
translate(self.TranslationContext, u'&Preview '+self.PluginTextShort), translate(self.TranslationContext, u'&Preview '+self.PluginTextShort),
@ -195,52 +219,63 @@ class MediaManagerItem(QtGui.QWidget):
QtCore.QObject.connect(self.ListView, QtCore.QObject.connect(self.ListView,
QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onPreviewClick) QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onPreviewClick)
def initialise(self): def addHeaderBar(self):
self.loadList(self.parent.config.load_list(self.ConfigSection)) pass
def onNewClick(self): def onFileClick(self):
files = QtGui.QFileDialog.getOpenFileNames(None, files = QtGui.QFileDialog.getOpenFileNames(None,
translate(self.TranslationContext, self.OnNewPrompt), translate(self.TranslationContext, self.OnNewPrompt),
self.parent.config.get_last_dir(), self.parent.config.get_last_dir(),
self.OnNewFileMasks) self.OnNewFileMasks)
log.info(u'New files(s)', unicode(files)) log.info(u'New files(s)%s', unicode(files))
if len(files) > 0: if len(files) > 0:
self.loadList(files) self.loadList(files)
dir, filename = os.path.split(unicode(files[0])) dir, filename = os.path.split(unicode(files[0]))
self.parent.config.set_last_dir(dir) 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): def loadList(self, list):
for file in list: raise NotImplementedError(u'MediaManagerItem.loadList needs to be defined by the plugin')
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): def onDeleteClick(self):
indexes = self.ListView.selectedIndexes() raise NotImplementedError(u'MediaManagerItem.onDeleteClick needs to be defined by the plugin')
for index in indexes:
current_row = int(index.row())
self.ListData.removeRow(current_row)
self.parent.config.set_list(self.ConfigSection, self.ListData.getFileList())
def generateSlideData(self): def generateSlideData(self, item):
raise NotImplementedError(u'MediaManagerItem.generateSlideData needs to be defined by the plugin') raise NotImplementedError(u'MediaManagerItem.generateSlideData needs to be defined by the plugin')
def onPreviewClick(self): def onPreviewClick(self):
log.debug(self.PluginTextShort+u'Preview Requested') log.debug(self.PluginTextShort+u'Preview Requested')
service_item = ServiceItem(self.parent) 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.generateSlideData(service_item)
self.parent.preview_controller.addServiceItem(service_item) self.parent.preview_controller.addServiceItem(service_item)
self.ListView.clearSelection()
def onLiveClick(self): def onLiveClick(self):
log.debug(self.PluginTextShort+u' Live Requested') log.debug(self.PluginTextShort + u' Live Requested')
service_item = ServiceItem(self.parent) 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.generateSlideData(service_item)
self.parent.live_controller.addServiceItem(service_item) self.parent.live_controller.addServiceItem(service_item)
self.ListView.clearSelection()
def onAddClick(self): def onAddClick(self):
log.debug(self.PluginTextShort+u' Add Requested') log.debug(self.PluginTextShort+u' Add Requested')
service_item = ServiceItem(self.parent) 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.generateSlideData(service_item)
self.parent.service_manager.addServiceItem(service_item) self.parent.service_manager.addServiceItem(service_item)
self.ListView.clearSelection()

View File

@ -101,7 +101,8 @@ class Plugin(object):
self.event_manager = plugin_helpers[u'event'] self.event_manager = plugin_helpers[u'event']
self.render_manager = plugin_helpers[u'render'] self.render_manager = plugin_helpers[u'render']
self.service_manager = plugin_helpers[u'service'] 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 self.dnd_id=None
def check_pre_conditions(self): def check_pre_conditions(self):

View File

@ -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 Lots of toolbars around the place, so it makes sense to have a common way to manage them
""" """
def __init__(self, parent): def __init__(self, parent):
QtGui.QToolBar.__init__(self, parent) QtGui.QToolBar.__init__(self, None)
# useful to be able to reuse button icons... # useful to be able to reuse button icons...
self.icons = {} self.icons = {}
self.log = logging.getLogger(u'OpenLPToolbar') self.log = logging.getLogger(u'OpenLPToolbar')

View File

@ -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 this program; if not, write to the Free Software Foundation, Inc., 59 Temple
Place, Suite 330, Boston, MA 02111-1307 USA Place, Suite 330, Boston, MA 02111-1307 USA
""" """
from slidecontroller import BaseToolbar
from slidecontrollermanager import SlideControllerManager from slidecontrollermanager import SlideControllerManager
from maindisplay import MainDisplay from maindisplay import MainDisplay
from amendthemeform import AmendThemeForm from amendthemeform import AmendThemeForm
@ -32,5 +33,5 @@ from servicemanager import ServiceManager
from thememanager import ThemeManager from thememanager import ThemeManager
from mainwindow import MainWindow from mainwindow import MainWindow
__all__ = ['SplashScreen', 'AboutForm', 'SettingsForm', __all__ = ['SplashScreen', 'AboutForm', 'SettingsForm', 'BaseToolbar'
'MainWindow', 'MainDisplay', 'SlideController', 'ServiceManager', 'ThemeManager', 'AmendThemeForm'] 'MainWindow', 'MainDisplay', 'SlideController', 'ServiceManager', 'ThemeManager', 'AmendThemeForm']

View File

@ -50,7 +50,7 @@ class MainWindow(object):
self.alertForm = AlertForm(self) self.alertForm = AlertForm(self)
self.aboutForm = AboutForm() self.aboutForm = AboutForm()
self.settingsForm = SettingsForm(self.screenList, self) self.settingsForm = SettingsForm(self.screenList, self)
self.slideControllerManager = SlideControllerManager() self.slideControllerManager = SlideControllerManager(self)
# Set up the path with plugins # Set up the path with plugins
pluginpath = os.path.split(os.path.abspath(__file__))[0] pluginpath = os.path.split(os.path.abspath(__file__))[0]
pluginpath = os.path.abspath( pluginpath = os.path.abspath(
@ -73,6 +73,7 @@ class MainWindow(object):
self.plugin_helpers[u'render'] = self.RenderManager self.plugin_helpers[u'render'] = self.RenderManager
self.plugin_helpers[u'service'] = self.ServiceManagerContents self.plugin_helpers[u'service'] = self.ServiceManagerContents
self.plugin_helpers[u'settings'] = self.settingsForm self.plugin_helpers[u'settings'] = self.settingsForm
self.plugin_helpers[u'slideManager'] = self.slideControllerManager
self.plugin_manager.find_plugins(pluginpath, self.plugin_helpers, self.plugin_manager.find_plugins(pluginpath, self.plugin_helpers,
self.EventManager) self.EventManager)
# hook methods have to happen after find_plugins. Find plugins needs the # 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.ControlSplitter.setObjectName(u'ControlSplitter')
self.MainContentLayout.addWidget(self.ControlSplitter) self.MainContentLayout.addWidget(self.ControlSplitter)
# Create slide controllers # Create slide controllers
PreviewController = SlideController(self.ControlSplitter, self) self.PreviewController = SlideController(self)
LiveController = SlideController(self.ControlSplitter, self, True) 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')
# Create menu # Create menu
self.MenuBar = QtGui.QMenuBar(self.mainWindow) self.MenuBar = QtGui.QMenuBar(self.mainWindow)
self.MenuBar.setGeometry(QtCore.QRect(0, 0, 1087, 27)) self.MenuBar.setGeometry(QtCore.QRect(0, 0, 1087, 27))

View File

@ -29,6 +29,22 @@ from openlp.core.lib import PluginConfig, OpenLPToolbar, ServiceItem, Event, \
contextMenuAction, contextMenuSeparator contextMenuAction, contextMenuSeparator
from openlp.core.utils import ConfigHelper 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): class ServiceManager(QtGui.QWidget):
""" """
Manages the orders of service. Currently this involves taking Manages the orders of service. Currently this involves taking
@ -66,7 +82,7 @@ class ServiceManager(QtGui.QWidget):
self.Toolbar.addAction(self.ThemeWidget) self.Toolbar.addAction(self.ThemeWidget)
self.Layout.addWidget(self.Toolbar) self.Layout.addWidget(self.Toolbar)
# Create the service manager list # 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.setEditTriggers(QtGui.QAbstractItemView.CurrentChanged|QtGui.QAbstractItemView.DoubleClicked|QtGui.QAbstractItemView.EditKeyPressed)
self.ServiceManagerList.setDragDropMode(QtGui.QAbstractItemView.DragDrop) self.ServiceManagerList.setDragDropMode(QtGui.QAbstractItemView.DragDrop)
self.ServiceManagerList.setAlternatingRowColors(True) self.ServiceManagerList.setAlternatingRowColors(True)

View File

@ -122,20 +122,20 @@ class SlideList(QtGui.QListView):
class SlideController(QtGui.QWidget): 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. uses to control the displaying of verses/slides/etc on the screen.
""" """
global log global log
log = logging.getLogger(u'SlideController') log = logging.getLogger(u'SlideController')
def __init__(self, controlSplitter, parent, isLive=False): def __init__(self, parent, isLive=False):
""" """
Set up the Slide Controller. Set up the Slide Controller.
""" """
QtGui.QWidget.__init__(self, parent.mainWindow) QtGui.QWidget.__init__(self, parent.mainWindow)
self.isLive = isLive self.isLive = isLive
self.parent = parent self.parent = parent
self.Panel = QtGui.QWidget(controlSplitter) self.Panel = QtGui.QWidget(parent.ControlSplitter)
self.Splitter = QtGui.QSplitter(self.Panel) self.Splitter = QtGui.QSplitter(self.Panel)
self.Splitter.setOrientation(QtCore.Qt.Vertical) self.Splitter.setOrientation(QtCore.Qt.Vertical)
# Layout for holding panel # Layout for holding panel
@ -166,39 +166,17 @@ class SlideController(QtGui.QWidget):
self.PreviewListView.setSpacing(0) self.PreviewListView.setSpacing(0)
self.PreviewListView.setObjectName(u'PreviewListView') self.PreviewListView.setObjectName(u'PreviewListView')
self.ControllerLayout.addWidget(self.PreviewListView) self.ControllerLayout.addWidget(self.PreviewListView)
# Controller toolbar # Plugin the Base Toolbar class
self.Toolbar = OpenLPToolbar(self.Controller) self.BaseToolbar = BaseToolbar(self.isLive)
self.Toolbar = self.BaseToolbar.getToolbar()
self.ControllerLayout.addWidget(self.Toolbar)
sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,
QtGui.QSizePolicy.Fixed) QtGui.QSizePolicy.Fixed)
sizeToolbarPolicy.setHorizontalStretch(0) sizeToolbarPolicy.setHorizontalStretch(0)
sizeToolbarPolicy.setVerticalStretch(0) sizeToolbarPolicy.setVerticalStretch(0)
sizeToolbarPolicy.setHeightForWidth( sizeToolbarPolicy.setHeightForWidth(
self.Toolbar.sizePolicy().hasHeightForWidth()) 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.Toolbar.setSizePolicy(sizeToolbarPolicy)
self.ControllerLayout.addWidget(self.Toolbar)
# Screen preview area # Screen preview area
self.PreviewFrame = QtGui.QFrame(self.Splitter) self.PreviewFrame = QtGui.QFrame(self.Splitter)
self.PreviewFrame.setGeometry(QtCore.QRect(0, 0, 250, 190)) self.PreviewFrame.setGeometry(QtCore.QRect(0, 0, 250, 190))
@ -226,11 +204,69 @@ class SlideController(QtGui.QWidget):
self.SlidePreview.setScaledContents(True) self.SlidePreview.setScaledContents(True)
self.SlidePreview.setObjectName(u'SlidePreview') self.SlidePreview.setObjectName(u'SlidePreview')
self.grid.addWidget(self.SlidePreview, 0, 0, 1, 1) self.grid.addWidget(self.SlidePreview, 0, 0, 1, 1)
# Some events
QtCore.QObject.connect(self.PreviewListView, 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.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): def onSlideSelectedFirst(self):
""" """
@ -308,7 +344,7 @@ class SlideController(QtGui.QWidget):
if self.isLive: if self.isLive:
no = frame[1] no = frame[1]
LiveFrame = self.serviceitem.frames[no][u'image'] LiveFrame = self.serviceitem.frames[no][u'image']
self.parent.mainDisplay.frameView(LiveFrame) self.mainDisplay.frameView(LiveFrame)
def addServiceItem(self, serviceitem): def addServiceItem(self, serviceitem):
""" """

View File

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

View File

@ -175,13 +175,16 @@ class ThemeManager(QtGui.QWidget):
def onEditTheme(self): def onEditTheme(self):
items = self.ThemeListView.selectedIndexes() items = self.ThemeListView.selectedIndexes()
if len(items) > 0:
for item in items: for item in items:
print item
data = self.themeData.getValue(item) data = self.themeData.getValue(item)
self.amendThemeForm.loadTheme(data[3]) self.amendThemeForm.loadTheme(data[3])
self.amendThemeForm.exec_() self.amendThemeForm.exec_()
def onDeleteTheme(self): def onDeleteTheme(self):
items = self.ThemeListView.selectedIndexes() items = self.ThemeListView.selectedIndexes()
if len(items) > 0:
theme = u'' theme = u''
for item in items: for item in items:
data = self.themeData.getValue(item) data = self.themeData.getValue(item)

View File

@ -57,8 +57,6 @@ class BibleMediaItem(MediaManagerItem):
self.TranslationContext = u'BiblePlugin' self.TranslationContext = u'BiblePlugin'
self.PluginTextShort = u'Bible' self.PluginTextShort = u'Bible'
self.ConfigSection = u'bibles' 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) MediaManagerItem.__init__(self, parent, icon, title)
self.search_results = {} # place to store the search results self.search_results = {} # place to store the search results
QtCore.QObject.connect(Receiver().get_receiver(), QtCore.QObject.connect(Receiver().get_receiver(),
@ -192,11 +190,11 @@ class BibleMediaItem(MediaManagerItem):
self.SearchTabWidget.addTab(self.AdvancedTab, u'Advanced') self.SearchTabWidget.addTab(self.AdvancedTab, u'Advanced')
# Add the search tab widget to the page layout # Add the search tab widget to the page layout
self.PageLayout.addWidget(self.SearchTabWidget) self.PageLayout.addWidget(self.SearchTabWidget)
self.BibleListWidget = BibleList() self.ListView = BibleList()
self.BibleListWidget.setAlternatingRowColors(True) self.ListView.setAlternatingRowColors(True)
self.BibleListWidget.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) self.ListView.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
self.BibleListWidget.setDragEnabled(True) self.ListView.setDragEnabled(True)
self.PageLayout.addWidget(self.BibleListWidget) self.PageLayout.addWidget(self.ListView)
# Combo Boxes # Combo Boxes
QtCore.QObject.connect(self.AdvancedVersionComboBox, QtCore.QObject.connect(self.AdvancedVersionComboBox,
QtCore.SIGNAL(u'activated(int)'), self.onAdvancedVersionComboBox) QtCore.SIGNAL(u'activated(int)'), self.onAdvancedVersionComboBox)
@ -213,18 +211,18 @@ class BibleMediaItem(MediaManagerItem):
QtCore.SIGNAL(u'pressed()'), self.onAdvancedSearchButton) QtCore.SIGNAL(u'pressed()'), self.onAdvancedSearchButton)
QtCore.QObject.connect(self.QuickSearchButton, QtCore.QObject.connect(self.QuickSearchButton,
QtCore.SIGNAL(u'pressed()'), self.onQuickSearchButton) QtCore.SIGNAL(u'pressed()'), self.onQuickSearchButton)
QtCore.QObject.connect(self.BibleListWidget, QtCore.QObject.connect(self.ListView,
QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onPreviewClick) QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onPreviewClick)
# Context Menus # Context Menus
self.BibleListWidget.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) self.ListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
self.BibleListWidget.addAction(self.contextMenuAction( self.ListView.addAction(self.contextMenuAction(
self.BibleListWidget, u':/system/system_preview.png', self.ListView, u':/system/system_preview.png',
translate(u'BibleMediaItem',u'&Preview Verse'), self.onPreviewClick)) translate(u'BibleMediaItem',u'&Preview Verse'), self.onPreviewClick))
self.BibleListWidget.addAction(self.contextMenuAction( self.ListView.addAction(self.contextMenuAction(
self.BibleListWidget, u':/system/system_live.png', self.ListView, u':/system/system_live.png',
translate(u'BibleMediaItem',u'&Show Live'), self.onLiveClick)) translate(u'BibleMediaItem',u'&Show Live'), self.onLiveClick))
self.BibleListWidget.addAction(self.contextMenuAction( self.ListView.addAction(self.contextMenuAction(
self.BibleListWidget, u':/system/system_add.png', self.ListView, u':/system/system_add.png',
translate(u'BibleMediaItem',u'&Add to Service'), self.onAddClick)) translate(u'BibleMediaItem',u'&Add to Service'), self.onAddClick))
def retranslateUi(self): def retranslateUi(self):
@ -309,7 +307,7 @@ class BibleMediaItem(MediaManagerItem):
self.search_results = self.parent.biblemanager.get_verse_text(bible, book, self.search_results = self.parent.biblemanager.get_verse_text(bible, book,
chapter_from, chapter_to, verse_from, verse_to) chapter_from, chapter_to, verse_from, verse_to)
if self.ClearAdvancedSearchComboBox.currentIndex() == 0: if self.ClearAdvancedSearchComboBox.currentIndex() == 0:
self.BibleListWidget.clear() self.ListView.clear()
self.displayResults(bible) self.displayResults(bible)
def onAdvancedFromChapter(self): def onAdvancedFromChapter(self):
@ -327,7 +325,7 @@ class BibleMediaItem(MediaManagerItem):
bible = unicode(self.QuickVersionComboBox.currentText()) bible = unicode(self.QuickVersionComboBox.currentText())
text = unicode(self.QuickSearchEdit.displayText()) text = unicode(self.QuickSearchEdit.displayText())
if self.ClearQuickSearchComboBox.currentIndex() == 0: if self.ClearQuickSearchComboBox.currentIndex() == 0:
self.BibleListWidget.clear() self.ListView.clear()
if self.QuickSearchComboBox.currentIndex() == 1: if self.QuickSearchComboBox.currentIndex() == 1:
self.search_results = self.parent.biblemanager.get_verse_from_text(bible, text) self.search_results = self.parent.biblemanager.get_verse_from_text(bible, text)
else: else:
@ -335,33 +333,15 @@ class BibleMediaItem(MediaManagerItem):
if self.search_results is not None: if self.search_results is not None:
self.displayResults(bible) 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): def generateSlideData(self, service_item):
log.debug(u'generating slide data') log.debug(u'generating slide data')
items = self.BibleListWidget.selectedIndexes() items = self.ListView.selectedIndexes()
old_chapter = u'' old_chapter = u''
raw_slides=[] raw_slides=[]
raw_footer = [] raw_footer = []
bible_text = u'' bible_text = u''
for item in items: for item in items:
bitem = self.BibleListWidget.item(item.row()) bitem = self.ListView.item(item.row())
text = unicode((bitem.data(QtCore.Qt.UserRole)).toString()) text = unicode((bitem.data(QtCore.Qt.UserRole)).toString())
verse = text[:text.find(u'(')] verse = text[:text.find(u'(')]
bible = text[text.find(u'(') + 1: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_text = unicode(u' %s %d:%d (%s)'%(book , chap,vse, bible))
bible_verse = QtGui.QListWidgetItem(bible_text) bible_verse = QtGui.QListWidgetItem(bible_text)
bible_verse.setData(QtCore.Qt.UserRole, QtCore.QVariant(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): def searchByReference(self, bible, search):
log.debug(u'searchByReference %s ,%s', bible, search) log.debug(u'searchByReference %s ,%s', bible, search)

View File

@ -105,38 +105,38 @@ class CustomMediaItem(MediaManagerItem):
self.CustomWidget.setObjectName(u'CustomWidget') self.CustomWidget.setObjectName(u'CustomWidget')
# Add the Custom widget to the page layout # Add the Custom widget to the page layout
self.PageLayout.addWidget(self.CustomWidget) self.PageLayout.addWidget(self.CustomWidget)
self.CustomListWidget = CustomList() self.ListView = CustomList()
self.CustomListWidget.setAlternatingRowColors(True) self.ListView.setAlternatingRowColors(True)
self.CustomListWidget.setDragEnabled(True) self.ListView.setDragEnabled(True)
self.PageLayout.addWidget(self.CustomListWidget) self.PageLayout.addWidget(self.ListView)
# Signals # Signals
QtCore.QObject.connect(self.CustomListWidget, QtCore.QObject.connect(self.ListView,
QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onCustomPreviewClick) QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onCustomPreviewClick)
#define and add the context menu #define and add the context menu
self.CustomListWidget.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) self.ListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
self.CustomListWidget.addAction(self.contextMenuAction(self.CustomListWidget, self.ListView.addAction(self.contextMenuAction(self.ListView,
':/custom/custom_edit.png', translate(u'CustomMediaItem', u'&Edit Custom'), ':/custom/custom_edit.png', translate(u'CustomMediaItem', u'&Edit Custom'),
self.onCustomEditClick)) self.onCustomEditClick))
self.CustomListWidget.addAction(self.contextMenuSeparator(self.CustomListWidget)) self.ListView.addAction(self.contextMenuSeparator(self.ListView))
self.CustomListWidget.addAction(self.contextMenuAction( self.ListView.addAction(self.contextMenuAction(
self.CustomListWidget, ':/system/system_preview.png', self.ListView, ':/system/system_preview.png',
translate(u'CustomMediaItem',u'&Preview Custom'), self.onCustomPreviewClick)) translate(u'CustomMediaItem',u'&Preview Custom'), self.onCustomPreviewClick))
self.CustomListWidget.addAction(self.contextMenuAction( self.ListView.addAction(self.contextMenuAction(
self.CustomListWidget, ':/system/system_live.png', self.ListView, ':/system/system_live.png',
translate(u'CustomMediaItem',u'&Show Live'), self.onCustomLiveClick)) translate(u'CustomMediaItem',u'&Show Live'), self.onCustomLiveClick))
self.CustomListWidget.addAction(self.contextMenuAction( self.ListView.addAction(self.contextMenuAction(
self.CustomListWidget, ':/system/system_add.png', self.ListView, ':/system/system_add.png',
translate(u'CustomMediaItem',u'&Add to Service'), self.onCustomAddClick)) translate(u'CustomMediaItem',u'&Add to Service'), self.onCustomAddClick))
def initialise(self): def initialise(self):
self.loadCustomList(self.parent.custommanager.get_all_slides()) self.loadCustomList(self.parent.custommanager.get_all_slides())
def loadCustomList(self, list): def loadCustomList(self, list):
self.CustomListWidget.clear() self.ListView.clear()
for CustomSlide in list: for CustomSlide in list:
custom_name = QtGui.QListWidgetItem(CustomSlide.title) custom_name = QtGui.QListWidgetItem(CustomSlide.title)
custom_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(CustomSlide.id)) custom_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(CustomSlide.id))
self.CustomListWidget.addItem(custom_name) self.ListView.addItem(custom_name)
def onCustomNewClick(self): def onCustomNewClick(self):
self.parent.edit_custom_form.loadCustom(0) self.parent.edit_custom_form.loadCustom(0)
@ -144,8 +144,7 @@ class CustomMediaItem(MediaManagerItem):
self.initialise() self.initialise()
def onCustomEditClick(self): def onCustomEditClick(self):
item = self.CustomListWidget.currentItem() item = self.ListView.currentItem()
item = self.CustomListWidget.currentItem()
if item is not None: if item is not None:
item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
self.parent.edit_custom_form.loadCustom(item_id) self.parent.edit_custom_form.loadCustom(item_id)
@ -153,12 +152,12 @@ class CustomMediaItem(MediaManagerItem):
self.initialise() self.initialise()
def onCustomDeleteClick(self): def onCustomDeleteClick(self):
item = self.CustomListWidget.currentItem() item = self.ListView.currentItem()
if item is not None: if item is not None:
item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
self.parent.custommanager.delete_custom(item_id) self.parent.custommanager.delete_custom(item_id)
row = self.CustomListWidget.row(item) row = self.ListView.row(item)
self.CustomListWidget.takeItem(row) self.ListView.takeItem(row)
def onCustomPreviewClick(self): def onCustomPreviewClick(self):
log.debug(u'Custom Preview Requested') log.debug(u'Custom Preview Requested')
@ -186,7 +185,7 @@ class CustomMediaItem(MediaManagerItem):
raw_footer = [] raw_footer = []
slide = None slide = None
theme = None theme = None
item = self.CustomListWidget.currentItem() item = self.ListView.currentItem()
item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
customSlide = self.parent.custommanager.get_custom(item_id) customSlide = self.parent.custommanager.get_custom(item_id)
title = customSlide.title title = customSlide.title

View File

@ -47,4 +47,3 @@ class ImagePlugin(Plugin):
def initialise(self): def initialise(self):
log.info(u'Plugin Initialising') log.info(u'Plugin Initialising')

View File

@ -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 this program; if not, write to the Free Software Foundation, Inc., 59 Temple
Place, Suite 330, Boston, MA 02111-1307 USA Place, Suite 330, Boston, MA 02111-1307 USA
""" """
from listwithpreviews import ListWithPreviews
from mediaitem import ImageMediaItem from mediaitem import ImageMediaItem
from imageslidecontroller import ImageToolbar

View File

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

View File

@ -21,10 +21,8 @@ import logging
import os import os
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from openlp.core.lib import MediaManagerItem, ServiceItem, translate, BaseListWithDnD, buildIcon
# from openlp.plugins.images.lib import ListWithPreviews from openlp.plugins.images.lib.imageslidecontroller import ImageToolbar
from listwithpreviews import ListWithPreviews
from openlp.core.lib import MediaManagerItem, ServiceItem, translate, BaseListWithDnD
# We have to explicitly create separate classes for each plugin # We have to explicitly create separate classes for each plugin
# in order for DnD to the Service manager to work correctly. # in order for DnD to the Service manager to work correctly.
@ -45,19 +43,50 @@ class ImageMediaItem(MediaManagerItem):
self.TranslationContext = u'ImagePlugin' self.TranslationContext = u'ImagePlugin'
self.PluginTextShort = u'Image' self.PluginTextShort = u'Image'
self.ConfigSection = u'images' 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.OnNewPrompt = u'Select Image(s)'
self.OnNewFileMasks = u'Images (*.jpg *jpeg *.gif *.png *.bmp)' 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 # this next is a class, not an instance of a class - it will
# be instanced by the base MediaManagerItem # be instanced by the base MediaManagerItem
self.ListViewWithDnD_class = ImageListView self.ListViewWithDnD_class = ImageListView
MediaManagerItem.__init__(self, parent, icon, title) 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): def generateSlideData(self, service_item):
indexes = self.ListView.selectedIndexes() items = self.ListView.selectedIndexes()
service_item.title = u'Image(s)' service_item.title = u'Image(s)'
for index in indexes: for item in items:
filename = self.ListData.getFilename(index) bitem = self.ListView.item(item.row())
filename = unicode((bitem.data(QtCore.Qt.UserRole)).toString())
frame = QtGui.QImage(unicode(filename)) frame = QtGui.QImage(unicode(filename))
(path, name) = os.path.split(filename) (path, name) = os.path.split(filename)
service_item.add_from_image(path, name, frame) service_item.add_from_image(path, name, frame)

View File

@ -43,107 +43,52 @@ class PresentationMediaItem(MediaManagerItem):
self.TranslationContext = u'PresentationPlugin' self.TranslationContext = u'PresentationPlugin'
self.PluginTextShort = u'Presentation' self.PluginTextShort = u'Presentation'
self.ConfigSection = u'presentation' self.ConfigSection = u'presentation'
self.OnNewPrompt = u'Select Image(s)' self.hasFileIcon = True
self.OnNewFileMasks = u'Images (*.ppt *.pps *.odp)' 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 # this next is a class, not an instance of a class - it will
# be instanced by the base MediaManagerItem # be instanced by the base MediaManagerItem
self.ListViewWithDnD_class = PresentationListView self.ListViewWithDnD_class = PresentationListView
MediaManagerItem.__init__(self, parent, icon, title) MediaManagerItem.__init__(self, parent, icon, title)
# def setupUi(self): def addHeaderBar(self):
# # Add a toolbar self.PresentationWidget = QtGui.QWidget(self)
# self.addToolbar() sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
# # Create buttons for the toolbar sizePolicy.setHorizontalStretch(0)
# ## New Presentation Button ## sizePolicy.setVerticalStretch(0)
# self.addToolbarButton( sizePolicy.setHeightForWidth(self.PresentationWidget.sizePolicy().hasHeightForWidth())
# translate(u'PresentationsMediaItem',u'New presentations'), self.PresentationWidget.setSizePolicy(sizePolicy)
# translate(u'PresentationsMediaItem',u'Load presentations into openlp.org'), self.PresentationWidget.setObjectName(u'PresentationWidget')
# ':/presentations/presentation_load.png', self.onPresentationNewClick, 'PresentationNewItem') self.DisplayLayout = QtGui.QGridLayout(self.PresentationWidget)
# ## Delete Presentation Button ## self.DisplayLayout.setObjectName(u'DisplayLayout')
# self.addToolbarButton( self.DisplayTypeComboBox = QtGui.QComboBox(self.PresentationWidget)
# translate(u'PresentationsMediaItem',u'Delete Presentation'), self.DisplayTypeComboBox.setObjectName(u'DisplayTypeComboBox')
# translate(u'PresentationsMediaItem',u'Delete the selected presentation'), self.DisplayLayout.addWidget(self.DisplayTypeComboBox, 0, 1, 1, 2)
# ':/presentations/presentation_delete.png', self.onPresentationDeleteClick, 'PresentationDeleteItem') self.DisplayTypeLabel = QtGui.QLabel(self.PresentationWidget)
# ## Separator Line ## self.DisplayTypeLabel.setObjectName(u'SearchTypeLabel')
# self.addToolbarSeparator() self.DisplayLayout.addWidget(self.DisplayTypeLabel, 0, 0, 1, 1)
# ## Preview Presentation Button ##
# self.addToolbarButton( self.DisplayTypeLabel.setText(translate(u'PresentationMediaItem', u'Present using:'))
# translate(u'PresentationsMediaItem',u'Preview Presentation'),
# translate(u'PresentationsMediaItem',u'Preview the selected Presentation'), # Add the Presentation widget to the page layout
# ':/system/system_preview.png', self.onPresentationPreviewClick, 'PresentationPreviewItem') self.PageLayout.addWidget(self.PresentationWidget)
# ## 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 initialise(self): def initialise(self):
list = self.parent.config.load_list(u'presentations') list = self.parent.config.load_list(u'presentations')
self.loadPresentationList(list) self.loadPresentationList(list)
# self.DisplayTypeComboBox.addItem(u'Impress') self.DisplayTypeComboBox.addItem(u'Impress')
# self.DisplayTypeComboBox.addItem(u'Powerpoint') # self.DisplayTypeComboBox.addItem(u'Powerpoint')
# self.DisplayTypeComboBox.addItem(u'Keynote') # self.DisplayTypeComboBox.addItem(u'Keynote')
def onPresentationNewClick(self): def loadList(self, list):
files = QtGui.QFileDialog.getOpenFileNames(None, for file in list:
translate(u'PresentationsMediaItem', u'Select presentations(s)'), (path, filename) = os.path.split(unicode(file))
self.parent.config.get_last_dir(), u'Presentations (*.ppt *.pps *.odp)') item_name = QtGui.QListWidgetItem(filename)
if len(files) > 0: item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(file))
self.loadPresentationList(files) self.ListView.addItem(item_name)
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 loadPresentationList(self, list): def loadPresentationList(self, list):
pass pass

View File

@ -317,11 +317,6 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
self.TitleEditItem.setStyleSheet(u'background-color: red; color: white') self.TitleEditItem.setStyleSheet(u'background-color: red; color: white')
else: else:
self.TitleEditItem.setStyleSheet(u'') 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: if self.VerseListWidget.count() == 0:
valid = False valid = False
self.VerseListWidget.setStyleSheet(u'background-color: red; color: white') self.VerseListWidget.setStyleSheet(u'background-color: red; color: white')

View File

@ -121,12 +121,12 @@ class SongMediaItem(MediaManagerItem):
self.SearchLayout.addWidget(self.SearchTextButton, 3, 2, 1, 1) self.SearchLayout.addWidget(self.SearchTextButton, 3, 2, 1, 1)
# Add the song widget to the page layout # Add the song widget to the page layout
self.PageLayout.addWidget(self.SongWidget) self.PageLayout.addWidget(self.SongWidget)
self.SongListWidget = SongList() self.ListView = SongList()
self.SongListWidget.setAlternatingRowColors(True) self.ListView.setAlternatingRowColors(True)
self.SongListWidget.setDragEnabled(True) self.ListView.setDragEnabled(True)
self.SongListWidget.setObjectName(u'SongListWidget') self.ListView.setObjectName(u'ListView')
self.PageLayout.addWidget(self.SongListWidget) self.PageLayout.addWidget(self.ListView)
self.SongListWidget.setDragEnabled(True) self.ListView.setDragEnabled(True)
# Signals and slots # Signals and slots
QtCore.QObject.connect(self.SearchTextButton, QtCore.QObject.connect(self.SearchTextButton,
QtCore.SIGNAL(u'pressed()'), self.onSearchTextButtonClick) QtCore.SIGNAL(u'pressed()'), self.onSearchTextButtonClick)
@ -134,21 +134,21 @@ class SongMediaItem(MediaManagerItem):
QtCore.SIGNAL(u'pressed()'), self.onClearTextButtonClick) QtCore.SIGNAL(u'pressed()'), self.onClearTextButtonClick)
QtCore.QObject.connect(self.SearchTextEdit, QtCore.QObject.connect(self.SearchTextEdit,
QtCore.SIGNAL(u'textChanged(const QString&)'), self.onSearchTextEditChanged) 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) QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onSongPreviewClick)
#define and add the context menu #define and add the context menu
self.SongListWidget.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) self.ListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
self.SongListWidget.addAction(self.contextMenuAction(self.SongListWidget, self.ListView.addAction(self.contextMenuAction(self.ListView,
':/songs/song_new.png', translate(u'SongMediaItem', u'&Edit Song'), ':/songs/song_new.png', translate(u'SongMediaItem', u'&Edit Song'),
self.onSongEditClick)) self.onSongEditClick))
self.SongListWidget.addAction(self.contextMenuSeparator(self.SongListWidget)) self.ListView.addAction(self.contextMenuSeparator(self.ListView))
self.SongListWidget.addAction(self.contextMenuAction(self.SongListWidget, self.ListView.addAction(self.contextMenuAction(self.ListView,
':/system/system_preview.png', translate(u'SongMediaItem', u'&Preview Song'), ':/system/system_preview.png', translate(u'SongMediaItem', u'&Preview Song'),
self.onSongPreviewClick)) 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'), ':/system/system_live.png', translate(u'SongMediaItem', u'&Show Live'),
self.onSongLiveClick)) 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'), ':/system/system_add.png', translate(u'SongMediaItem', u'&Add to Service'),
self.onSongAddClick)) self.onSongAddClick))
@ -182,7 +182,7 @@ class SongMediaItem(MediaManagerItem):
def displayResultsSong(self, searchresults): def displayResultsSong(self, searchresults):
log.debug(u'display results Song') log.debug(u'display results Song')
self.SongListWidget.clear() self.ListView.clear()
#log.debug(u'Records returned from search %s", len(searchresults)) #log.debug(u'Records returned from search %s", len(searchresults))
for song in searchresults: for song in searchresults:
author_list = u'' author_list = u''
@ -193,17 +193,17 @@ class SongMediaItem(MediaManagerItem):
song_detail = unicode(u'%s (%s)' % (unicode(song.title), unicode(author_list))) song_detail = unicode(u'%s (%s)' % (unicode(song.title), unicode(author_list)))
song_name = QtGui.QListWidgetItem(song_detail) song_name = QtGui.QListWidgetItem(song_detail)
song_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(song.id)) song_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(song.id))
self.SongListWidget.addItem(song_name) self.ListView.addItem(song_name)
def displayResultsAuthor(self, searchresults): def displayResultsAuthor(self, searchresults):
log.debug(u'display results Author') log.debug(u'display results Author')
self.SongListWidget.clear() self.ListView.clear()
for author in searchresults: for author in searchresults:
for song in author.songs: for song in author.songs:
song_detail = unicode(u'%s (%s)' % (unicode(author.display_name), unicode(song.title))) song_detail = unicode(u'%s (%s)' % (unicode(author.display_name), unicode(song.title)))
song_name = QtGui.QListWidgetItem(song_detail) song_name = QtGui.QListWidgetItem(song_detail)
song_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(song.id)) song_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(song.id))
self.SongListWidget.addItem(song_name) self.ListView.addItem(song_name)
def onClearTextButtonClick(self): def onClearTextButtonClick(self):
""" """
@ -223,19 +223,19 @@ class SongMediaItem(MediaManagerItem):
self.edit_song_form.exec_() self.edit_song_form.exec_()
def onSongEditClick(self): def onSongEditClick(self):
item = self.SongListWidget.currentItem() item = self.ListView.currentItem()
if item is not None: if item is not None:
item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
self.edit_song_form.loadSong(item_id) self.edit_song_form.loadSong(item_id)
self.edit_song_form.exec_() self.edit_song_form.exec_()
def onSongDeleteClick(self): def onSongDeleteClick(self):
item = self.SongListWidget.currentItem() item = self.ListView.currentItem()
if item is not None: if item is not None:
item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
self.parent.songmanager.delete_song(item_id) self.parent.songmanager.delete_song(item_id)
row = self.SongListWidget.row(item) row = self.ListView.row(item)
self.SongListWidget.takeItem(row) self.ListView.takeItem(row)
def onSongPreviewClick(self): def onSongPreviewClick(self):
service_item = ServiceItem(self.parent) service_item = ServiceItem(self.parent)
@ -248,7 +248,7 @@ class SongMediaItem(MediaManagerItem):
raw_footer = [] raw_footer = []
author_list = u'' author_list = u''
ccl = u'' ccl = u''
item = self.SongListWidget.currentItem() item = self.ListView.currentItem()
item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
song = self.parent.songmanager.get_song(item_id) song = self.parent.songmanager.get_song(item_id)
service_item.theme = song.theme_name service_item.theme = song.theme_name