Start of plugable SlideControllers

This commit is contained in:
Tim Bentley 2009-06-26 17:39:16 +01:00
parent 8040f10204
commit 2879a52416
7 changed files with 127 additions and 103 deletions

View File

@ -48,6 +48,7 @@ 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)
@ -126,12 +127,12 @@ class MediaManagerItem(QtGui.QWidget):
# "text with an icon" then all this will help
# even for plugins of another sort, the setup of the right-click menu, common toolbar
# will help to keep things consistent and ease the creation of new plugins
# also a set of completely consistent action anesm then exist
# (onPreviewClick() is always called that, rather than having the
# name of the plugin added in as well... I regard that as a
# feature, I guess others might differ!)
def setupUi(self):
# Add a toolbar
self.addToolbar()
@ -219,7 +220,8 @@ class MediaManagerItem(QtGui.QWidget):
self.parent.config.set_list(self.ConfigSection, self.ListData.getFileList())
def generateSlideData(self):
assert (0, 'This fn needs to be defined by the plugin');
#assert (0, 'This fn needs to be defined by the plugin');
pass
def onPreviewClick(self):
log.debug(self.PluginTextShort+u'Preview Requested')

View File

@ -17,7 +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 slidecontrollermanager import SlideControllerManager
from maindisplay import MainDisplay
from amendthemeform import AmendThemeForm
from slidecontroller import SlideController

View File

@ -23,7 +23,7 @@ import logging
from PyQt4 import QtCore, QtGui
from openlp.core.ui import AboutForm, SettingsForm, AlertForm, ServiceManager, \
ThemeManager, MainDisplay, SlideController
ThemeManager, MainDisplay, SlideController, SlideControllerManager
from openlp.core.lib import translate, Plugin, MediaManagerItem, SettingsTab, \
EventManager, RenderManager, PluginConfig
from openlp.core import PluginManager
@ -50,6 +50,7 @@ class MainWindow(object):
self.alertForm = AlertForm(self)
self.aboutForm = AboutForm()
self.settingsForm = SettingsForm(self.screenList, self)
self.slideControllerManager = SlideControllerManager()
# Set up the path with plugins
pluginpath = os.path.split(os.path.abspath(__file__))[0]
pluginpath = os.path.abspath(
@ -167,8 +168,11 @@ class MainWindow(object):
self.ControlSplitter.setObjectName(u'ControlSplitter')
self.MainContentLayout.addWidget(self.ControlSplitter)
# Create slide controllers
self.PreviewController = SlideController(self.ControlSplitter, self)
self.LiveController = SlideController(self.ControlSplitter, self, True)
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')
# Create menu
self.MenuBar = QtGui.QMenuBar(self.mainWindow)
self.MenuBar.setGeometry(QtCore.QRect(0, 0, 1087, 27))

View File

@ -280,6 +280,9 @@ class ServiceManager(QtGui.QWidget):
self.service_theme = self.ThemeComboBox.currentText()
self.parent.RenderManager.set_service_theme(self.service_theme)
self.config.set_config(u'theme service theme', self.service_theme)
self.regenerateServiceItems()
def regenerateServiceItems(self):
if len(self.serviceItems) > 0:
tempServiceItems = self.serviceItems
self.onNewService()
@ -368,3 +371,4 @@ class ServiceManager(QtGui.QWidget):
self.service_theme = u''
self.ThemeComboBox.setCurrentIndex(id)
self.parent.RenderManager.set_service_theme(self.service_theme)
self.regenerateServiceItems()

View File

@ -32,7 +32,7 @@ class ImageListView(BaseListWithDnD):
def __init__(self, parent=None):
self.PluginName = u'Image'
BaseListWithDnD.__init__(self, parent)
class ImageMediaItem(MediaManagerItem):
"""
This is the custom media manager item for images.
@ -49,10 +49,9 @@ class ImageMediaItem(MediaManagerItem):
self.OnNewFileMasks = u'Images (*.jpg *jpeg *.gif *.png *.bmp)'
# this next is a class, not an instance of a class - it will
# be instanced by the base MediaManagerItem
self.ListViewWithDnD_class = ImageListView
self.ListViewWithDnD_class = ImageListView
MediaManagerItem.__init__(self, parent, icon, title)
def generateSlideData(self, service_item):
indexes = self.ListView.selectedIndexes()
service_item.title = u'Image(s)'

View File

@ -62,12 +62,20 @@ class Openoffice(object):
self.oopid = retval.pid
def checkOoPid(self):
procfile = open("/proc/%d/stat" %(self.oopid))
file = procfile.readline().split()[1]
print file
if file == u'(soffice)' or file == u'(openoffice.org)':
if os.name == u'nt':
import win32api
handle = win32api.OpenProcess(PROCESS_TERMINATE, False, self.oopid)
#todo need some code here
return True
return False
elif os.name == u'mac':
pass
else:
procfile = open("/proc/%d/stat" %(self.oopid))
file = procfile.readline().split()[1]
print file
if file == u'(soffice)' or file == u'(openoffice.org)':
return True
return False
def createApp(self):
try:

View File

@ -21,8 +21,15 @@ import logging
import os
from PyQt4 import QtCore, QtGui
from openlp.core.lib import MediaManagerItem, translate
from openlp.plugins.presentations.lib import FileListData
from openlp.core.lib import MediaManagerItem, ServiceItem, translate, BaseListWithDnD
# We have to explicitly create separate classes for each plugin
# in order for DnD to the Service manager to work correctly.
class PresentationListView(BaseListWithDnD):
def __init__(self, parent=None):
self.PluginName = u'Presentation'
BaseListWithDnD.__init__(self, parent)
class PresentationMediaItem(MediaManagerItem):
"""
@ -33,88 +40,96 @@ class PresentationMediaItem(MediaManagerItem):
log.info(u'Presentations Media Item loaded')
def __init__(self, parent, icon, title):
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)'
# 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 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 initialise(self):
list = self.parent.config.load_list(u'presentations')
self.loadPresentationList(list)
self.DisplayTypeComboBox.addItem(u'Impress')
self.DisplayTypeComboBox.addItem(u'Powerpoint')
self.DisplayTypeComboBox.addItem(u'Keynote')
# self.DisplayTypeComboBox.addItem(u'Impress')
# self.DisplayTypeComboBox.addItem(u'Powerpoint')
# self.DisplayTypeComboBox.addItem(u'Keynote')
def onPresentationNewClick(self):
files = QtGui.QFileDialog.getOpenFileNames(None,
@ -131,8 +146,9 @@ class PresentationMediaItem(MediaManagerItem):
return filelist
def loadPresentationList(self, list):
for files in list:
self.PresentationsListData.addRow(files)
pass
# for files in list:
# self.PresentationsListData.addRow(files)
def onPresentationDeleteClick(self):
indexes = self.PresentationsListView.selectedIndexes()
@ -140,12 +156,3 @@ class PresentationMediaItem(MediaManagerItem):
current_row = int(index.row())
self.PresentationsListData.removeRow(current_row)
self.parent.config.set_list(u'Presentations', self.PresentationsListData.getFileList())
def onPresentationPreviewClick(self):
pass
def onPresentationLiveClick(self):
pass
def onPresentationAddClick(self):
pass