diff --git a/openlp/core/lib/__init__.py b/openlp/core/lib/__init__.py index c083605f6..43bfe18ff 100644 --- a/openlp/core/lib/__init__.py +++ b/openlp/core/lib/__init__.py @@ -27,6 +27,7 @@ from xmlrootclass import XmlRootClass from serviceitem import ServiceItem from eventreceiver import Receiver from imageserviceitem import ImageServiceItem +from toolbar import OpenLPToolbar __all__ = ['PluginConfig', 'Plugin', 'PluginUtils', 'SettingsTab', 'MediaManagerItem', 'Event', - 'XmlRootClass', 'ServiceItem', 'Receiver', 'ImageServiceItem'] + 'XmlRootClass', 'ServiceItem', 'Receiver', 'ImageServiceItem', 'OpenLPToolbar'] diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py index a9785cb77..ad45d8eb8 100644 --- a/openlp/core/lib/mediamanageritem.py +++ b/openlp/core/lib/mediamanageritem.py @@ -2,8 +2,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 Martin Thompson, Tim Bentley +Copyright (c) 2008-2009 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 @@ -21,6 +21,7 @@ import types from PyQt4 import QtCore, QtGui from openlp.core.resources import * +from openlp.core.lib.toolbar import * class MediaManagerItem(QtGui.QWidget): """ @@ -41,7 +42,9 @@ class MediaManagerItem(QtGui.QWidget): if title is not None: self.title = title self.Toolbar = None - #self.ToolbarButtons = [] + self.PageLayout = QtGui.QVBoxLayout(self) + self.PageLayout.setSpacing(0) + self.PageLayout.setMargin(0) def addToolbar(self): """ @@ -49,33 +52,16 @@ class MediaManagerItem(QtGui.QWidget): item. """ if self.Toolbar is None: - self.PageLayout = QtGui.QVBoxLayout(self) - self.PageLayout.setSpacing(0) - self.PageLayout.setMargin(0) - self.PageLayout.setObjectName('PageLayout') - self.Toolbar = QtGui.QToolBar(self) - self.Toolbar.setObjectName('Toolbar') + self.Toolbar=OpenLPToolbar(self) self.PageLayout.addWidget(self.Toolbar) def addToolbarButton(self, title, tooltip, icon, slot=None, objectname=None): """ A method to help developers easily add a button to the toolbar. """ - if type(icon) is QtGui.QIcon: - ButtonIcon = icon - elif type(icon) is types.StringType: - ButtonIcon = QtGui.QIcon() - if icon.startswith(':/'): - ButtonIcon.addPixmap(QtGui.QPixmap(icon), QtGui.QIcon.Normal, - QtGui.QIcon.Off) - else: - ButtonIcon.addPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(icon)), - QtGui.QIcon.Normal, QtGui.QIcon.Off) - ToolbarButton = self.Toolbar.addAction(ButtonIcon, title) - if tooltip is not None: - ToolbarButton.setToolTip(tooltip) - if slot is not None: - QtCore.QObject.connect(ToolbarButton, QtCore.SIGNAL('triggered()'), slot) + # NB different order (when I broke this out, I wanted to not break compatability) + # but it makes sense for the icon to come before the tooltip (as you have to have an icon, but not neccesarily a tooltip) + self.Toolbar.addToolbarButton(title, icon, tooltip, slot, objectname) def addToolbarSeparator(self): """ diff --git a/openlp/core/lib/toolbar.py b/openlp/core/lib/toolbar.py new file mode 100644 index 000000000..78d469e73 --- /dev/null +++ b/openlp/core/lib/toolbar.py @@ -0,0 +1,60 @@ + +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 +""" +OpenLP - Open Source Lyrics Projection +Copyright (c) 2009 Raoul Snyman +Portions copyright (c) 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 types + +from PyQt4 import QtCore, QtGui +import logging + +class OpenLPToolbar(QtGui.QToolBar): + """ + Lots of toolbars around the place, so it makes sense to have a common way to manage them + """ + def __init__(self, parent): + QtGui.QToolBar.__init__(self, parent) + self.icons={} # useful to be able to reuse button icons... + self.log=logging.getLogger("OpenLPToolbar"+str(parent)) + self.log.info("Init done") + def addToolbarButton(self, title, icon, tooltip=None, slot=None, objectname=None): + """ + A method to help developers easily add a button to the toolbar. + """ + if type(icon) is QtGui.QIcon: + ButtonIcon = icon + elif type(icon) is types.StringType: + ButtonIcon = QtGui.QIcon() + if icon.startswith(':/'): + ButtonIcon.addPixmap(QtGui.QPixmap(icon), QtGui.QIcon.Normal, + QtGui.QIcon.Off) + else: + ButtonIcon.addPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(icon)), + QtGui.QIcon.Normal, QtGui.QIcon.Off) + ToolbarButton = self.addAction(ButtonIcon, title) + if tooltip is not None: + ToolbarButton.setToolTip(tooltip) + if slot is not None: + QtCore.QObject.connect(ToolbarButton, QtCore.SIGNAL('triggered()'), slot) + self.icons[title]=ButtonIcon + def getIconFromTitle(self, title): + if self.icons.has_key(title): + return self.icons[title] + else: + self.log.error("getIconFromTitle - no icon for %s" %title) + return QtGui.QIcon() diff --git a/openlp/core/ui/__init__.py b/openlp/core/ui/__init__.py index 54e147f10..3e2c3d31d 100644 --- a/openlp/core/ui/__init__.py +++ b/openlp/core/ui/__init__.py @@ -23,6 +23,8 @@ from splashscreen import SplashScreen from about import AboutForm from alertform import AlertForm from settings import SettingsDialog +from servicemanager import ServiceManager from mainwindow import MainWindow -__all__ = ['SplashScreen', 'AboutForm', 'AlertForm', 'SettingsDialog', 'MainWindow', 'SlideController'] +__all__ = ['SplashScreen', 'AboutForm', 'AlertForm', 'SettingsDialog', + 'MainWindow', 'SlideController', 'ServiceManager'] diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 01e00fede..8e9a2c205 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -24,7 +24,8 @@ from PyQt4 import * from PyQt4 import QtCore, QtGui from openlp.core.resources import * -from openlp.core.ui import AboutForm, AlertForm, SettingsDialog, SlideController +from openlp.core.ui import AboutForm, AlertForm, SettingsDialog +from openlp.core.ui import SlideController, ServiceManager from openlp.core.lib import Plugin, MediaManagerItem, SettingsTab, Receiver from openlp.core import PluginManager @@ -153,57 +154,7 @@ class MainWindow(object): self.ServiceManagerDock.setWindowIcon(ServiceManagerIcon) self.ServiceManagerDock.setFeatures(QtGui.QDockWidget.AllDockWidgetFeatures) self.ServiceManagerDock.setObjectName("ServiceManagerDock") - self.ServiceManagerContents = QtGui.QWidget() - self.ServiceManagerContents.setObjectName("ServiceManagerContents") - self.ServiceManagerLayout = QtGui.QVBoxLayout(self.ServiceManagerContents) - self.ServiceManagerLayout.setSpacing(0) - self.ServiceManagerLayout.setMargin(0) - self.ServiceManagerLayout.setObjectName("ServiceManagerLayout") - self.ServiceToolbar = QtGui.QToolBar(self.ServiceManagerContents) - self.ServiceToolbar.setObjectName("ServiceToolbar") - MoveTopIcon = QtGui.QIcon() - MoveTopIcon.addPixmap(QtGui.QPixmap(":/services/service_top.png"), - QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.MoveTopButton = self.ServiceToolbar.addAction(MoveTopIcon, 'Move to top') - MoveUpIcon = QtGui.QIcon() - MoveUpIcon.addPixmap(QtGui.QPixmap(":/services/service_up.png"), - QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.MoveUpButton = self.ServiceToolbar.addAction(MoveUpIcon, 'Move up') - MoveDownIcon = QtGui.QIcon() - MoveDownIcon.addPixmap(QtGui.QPixmap(":/services/service_down.png"), - QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.MoveDownButton = self.ServiceToolbar.addAction(MoveDownIcon, 'Move down') - MoveBottomIcon = QtGui.QIcon() - MoveBottomIcon.addPixmap(QtGui.QPixmap(":/services/service_bottom.png"), - QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.MoveBottomButton = self.ServiceToolbar.addAction(MoveBottomIcon, 'Move to bottom') - self.ServiceToolbar.addSeparator() - NewServiceIcon = QtGui.QIcon() - NewServiceIcon.addPixmap(QtGui.QPixmap(":/services/service_new.png"), - QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.ServiceNewItem = self.ServiceToolbar.addAction(NewServiceIcon, 'New service') - OpenServiceIcon = QtGui.QIcon() - OpenServiceIcon.addPixmap(QtGui.QPixmap(":/services/service_open.png"), - QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.ServiceOpenItem = self.ServiceToolbar.addAction(OpenServiceIcon, 'Open service') - SaveServiceIcon = QtGui.QIcon() - SaveServiceIcon.addPixmap(QtGui.QPixmap(":/services/service_save.png"), - QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.ServiceSaveItem = self.ServiceToolbar.addAction(SaveServiceIcon, 'Save service') - self.ServiceToolbar.addSeparator() - self.ServiceThemeComboBox = QtGui.QComboBox(self.ServiceToolbar) - self.ServiceThemeComboBox.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToContents) - self.ServiceThemeComboBox.setObjectName("ServiceThemeComboBox") - self.ServiceThemeComboBox.addItem(QtCore.QString()) - self.ServiceThemeComboBox.addItem(QtCore.QString()) - self.ServiceThemeComboBox.addItem(QtCore.QString()) - self.ServiceThemeWidget = QtGui.QWidgetAction(self.ServiceToolbar) - self.ServiceThemeWidget.setDefaultWidget(self.ServiceThemeComboBox) - self.ServiceToolbar.addAction(self.ServiceThemeWidget) - self.ServiceManagerLayout.addWidget(self.ServiceToolbar) - self.ServiceListView = QtGui.QListView(self.ServiceManagerContents) - self.ServiceListView.setObjectName("ServiceListView") - self.ServiceManagerLayout.addWidget(self.ServiceListView) + self.ServiceManagerContents = ServiceManager(self) self.ServiceManagerDock.setWidget(self.ServiceManagerContents) self.main_window.addDockWidget(QtCore.Qt.DockWidgetArea(2), self.ServiceManagerDock) self.ThemeManagerDock = QtGui.QDockWidget(self.main_window) @@ -249,13 +200,13 @@ class MainWindow(object): self.ThemeManagerDock.setWidget(self.ThemeManagerContents) self.main_window.addDockWidget(QtCore.Qt.DockWidgetArea(2), self.ThemeManagerDock) self.FileNewItem = QtGui.QAction(self.main_window) - self.FileNewItem.setIcon(NewServiceIcon) + self.FileNewItem.setIcon(self.ServiceManagerContents.Toolbar.getIconFromTitle("New Service")) self.FileNewItem.setObjectName("FileNewItem") self.FileOpenItem = QtGui.QAction(self.main_window) - self.FileOpenItem.setIcon(OpenServiceIcon) + self.FileOpenItem.setIcon(self.ServiceManagerContents.Toolbar.getIconFromTitle("Open Service")) self.FileOpenItem.setObjectName("FileOpenItem") self.FileSaveItem = QtGui.QAction(self.main_window) - self.FileSaveItem.setIcon(SaveServiceIcon) + self.FileSaveItem.setIcon(self.ServiceManagerContents.Toolbar.getIconFromTitle("Save Service")) self.FileSaveItem.setObjectName("FileSaveItem") self.FileSaveAsItem = QtGui.QAction(self.main_window) self.FileSaveAsItem.setObjectName("FileSaveAsItem") @@ -392,16 +343,16 @@ class MainWindow(object): self.HelpMenu.setTitle(QtGui.QApplication.translate("main_window", "&Help", None, QtGui.QApplication.UnicodeUTF8)) self.MediaManagerDock.setWindowTitle(QtGui.QApplication.translate("main_window", "Media Manager", None, QtGui.QApplication.UnicodeUTF8)) self.ServiceManagerDock.setWindowTitle(QtGui.QApplication.translate("main_window", "Service Manager", None, QtGui.QApplication.UnicodeUTF8)) - self.MoveTopButton.setText(QtGui.QApplication.translate("main_window", "Move To Top", None, QtGui.QApplication.UnicodeUTF8)) - self.MoveUpButton.setText(QtGui.QApplication.translate("main_window", "Move Up", None, QtGui.QApplication.UnicodeUTF8)) - self.MoveDownButton.setText(QtGui.QApplication.translate("main_window", "Move Down", None, QtGui.QApplication.UnicodeUTF8)) - self.MoveBottomButton.setText(QtGui.QApplication.translate("main_window", "Move To Bottom", None, QtGui.QApplication.UnicodeUTF8)) - self.ServiceNewItem.setText(QtGui.QApplication.translate("main_window", "New Service", None, QtGui.QApplication.UnicodeUTF8)) - self.ServiceOpenItem.setText(QtGui.QApplication.translate("main_window", "Open Service", None, QtGui.QApplication.UnicodeUTF8)) - self.ServiceSaveItem.setText(QtGui.QApplication.translate("main_window", "Save Service", None, QtGui.QApplication.UnicodeUTF8)) - self.ServiceThemeComboBox.setItemText(0, QtGui.QApplication.translate("main_window", "African Sunset", None, QtGui.QApplication.UnicodeUTF8)) - self.ServiceThemeComboBox.setItemText(1, QtGui.QApplication.translate("main_window", "Snowy Mountains", None, QtGui.QApplication.UnicodeUTF8)) - self.ServiceThemeComboBox.setItemText(2, QtGui.QApplication.translate("main_window", "Wilderness", None, QtGui.QApplication.UnicodeUTF8)) +# self.ServiceManagerContents.MoveTopButton.setText(QtGui.QApplication.translate("main_window", "Move To Top", None, QtGui.QApplication.UnicodeUTF8)) +# self.ServiceManagerContents.MoveUpButton.setText(QtGui.QApplication.translate("main_window", "Move Up", None, QtGui.QApplication.UnicodeUTF8)) +# self.ServiceManagerContents.MoveDownButton.setText(QtGui.QApplication.translate("main_window", "Move Down", None, QtGui.QApplication.UnicodeUTF8)) +# self.ServiceManagerContents.MoveBottomButton.setText(QtGui.QApplication.translate("main_window", "Move To Bottom", None, QtGui.QApplication.UnicodeUTF8)) +# self.ServiceManagerContents.NewItem.setText(QtGui.QApplication.translate("main_window", "New Service", None, QtGui.QApplication.UnicodeUTF8)) +# self.ServiceManagerContents.OpenItem.setText(QtGui.QApplication.translate("main_window", "Open Service", None, QtGui.QApplication.UnicodeUTF8)) +# self.ServiceManagerContents.SaveItem.setText(QtGui.QApplication.translate("main_window", "Save Service", None, QtGui.QApplication.UnicodeUTF8)) +# self.ServiceManagerContents.ThemeComboBox.setItemText(0, QtGui.QApplication.translate("main_window", "African Sunset", None, QtGui.QApplication.UnicodeUTF8)) +# self.ServiceManagerContents.ThemeComboBox.setItemText(1, QtGui.QApplication.translate("main_window", "Snowy Mountains", None, QtGui.QApplication.UnicodeUTF8)) +# self.ServiceManagerContents.ThemeComboBox.setItemText(2, QtGui.QApplication.translate("main_window", "Wilderness", None, QtGui.QApplication.UnicodeUTF8)) self.ThemeManagerDock.setWindowTitle(QtGui.QApplication.translate("main_window", "Theme Manager", None, QtGui.QApplication.UnicodeUTF8)) self.ThemeNewItem.setText(QtGui.QApplication.translate("main_window", "New Theme", None, QtGui.QApplication.UnicodeUTF8)) self.ThemeEditItem.setText(QtGui.QApplication.translate("main_window", "Edit Theme", None, QtGui.QApplication.UnicodeUTF8)) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py new file mode 100644 index 000000000..691fa9f65 --- /dev/null +++ b/openlp/core/ui/servicemanager.py @@ -0,0 +1,65 @@ +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 +""" +OpenLP - Open Source Lyrics Projection +Copyright (c) 2009 Raoul Snyman +Portions copyright (c) 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 os + +from time import sleep +from PyQt4 import * +from PyQt4 import QtCore, QtGui +from PyQt4.QtGui import * +# from openlp.core.resources import * +# from openlp.core.ui import AboutForm, AlertForm, SettingsDialog, SlideController +from openlp.core.lib import OpenLPToolbar + +# from openlp.core import PluginManager +import logging + +class ServiceManager(QWidget): + + """Manages the orders of service. Currently this involves taking + text strings from plugins and adding them to an OOS file. In + future, it will also handle zipping up all the resources used into + one lump""" + + def __init__(self, parent): + QWidget.__init__(self) + self.parent=parent + self.Layout = QtGui.QVBoxLayout(self) + self.Layout.setSpacing(0) + self.Layout.setMargin(0) + self.Toolbar = OpenLPToolbar(self) + self.Toolbar.addToolbarButton("Move to top", ":/services/service_top.png") + self.Toolbar.addToolbarButton("Move up", ":/services/service_up.png") + self.Toolbar.addToolbarButton("Move down", ":/services/service_down.png") + self.Toolbar.addToolbarButton("Move to bottom", ":/services/service_bottom.png") + self.Toolbar.addSeparator() + self.Toolbar.addToolbarButton("New Service", ":/services/service_new.png") + self.Toolbar.addToolbarButton("Save Service", ":/services/service_save.png") + self.Toolbar.addSeparator() + self.ThemeComboBox = QtGui.QComboBox(self.Toolbar) + self.ThemeComboBox.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToContents) + self.ThemeComboBox.addItem(QtCore.QString()) + self.ThemeComboBox.addItem(QtCore.QString()) + self.ThemeComboBox.addItem(QtCore.QString()) + self.ThemeWidget = QtGui.QWidgetAction(self.Toolbar) + self.ThemeWidget.setDefaultWidget(self.ThemeComboBox) + self.Toolbar.addAction(self.ThemeWidget) + self.Layout.addWidget(self.Toolbar) + self.ListView = QtGui.QListView(self) + self.Layout.addWidget(self.ListView)