diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py index d63b7f0f6..af1335220 100644 --- a/openlp/core/lib/mediamanageritem.py +++ b/openlp/core/lib/mediamanageritem.py @@ -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') diff --git a/openlp/core/ui/__init__.py b/openlp/core/ui/__init__.py index cbc6cde0d..d6ee48872 100644 --- a/openlp/core/ui/__init__.py +++ b/openlp/core/ui/__init__.py @@ -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 diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 6da2e9875..c5d26bc46 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -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)) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 90323e25f..b39c45b46 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -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() diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index a8898526b..687e0c53d 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -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)' diff --git a/openlp/plugins/presentations/lib/impresscom.py b/openlp/plugins/presentations/lib/impresscom.py index cee6c2ae8..3838e0b44 100644 --- a/openlp/plugins/presentations/lib/impresscom.py +++ b/openlp/plugins/presentations/lib/impresscom.py @@ -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: diff --git a/openlp/plugins/presentations/lib/mediaitem.py b/openlp/plugins/presentations/lib/mediaitem.py index 589196738..ab341c430 100644 --- a/openlp/plugins/presentations/lib/mediaitem.py +++ b/openlp/plugins/presentations/lib/mediaitem.py @@ -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 \ No newline at end of file