diff --git a/openlp/core/ui/advancedtab.py b/openlp/core/ui/advancedtab.py index 630cbc18c..58b637bc2 100644 --- a/openlp/core/ui/advancedtab.py +++ b/openlp/core/ui/advancedtab.py @@ -80,20 +80,6 @@ class AdvancedTab(SettingsTab): self.hideMouseCheckBox.setObjectName(u'hideMouseCheckBox') self.hideMouseLayout.addWidget(self.hideMouseCheckBox) self.leftLayout.addWidget(self.hideMouseGroupBox) - self.serviceOrderGroupBox = QtGui.QGroupBox(self.leftColumn) - self.serviceOrderGroupBox.setObjectName(u'serviceOrderGroupBox') - self.serviceOrderLayout = QtGui.QVBoxLayout(self.serviceOrderGroupBox) - self.serviceOrderLayout.setObjectName(u'serviceOrderLayout') - self.printSlideTextCheckBox = QtGui.QCheckBox(self.serviceOrderGroupBox) - self.printSlideTextCheckBox.setObjectName(u'printSlideTextCheckBox') - self.serviceOrderLayout.addWidget(self.printSlideTextCheckBox) - self.printMetaDataCheckBox = QtGui.QCheckBox(self.serviceOrderGroupBox) - self.printMetaDataCheckBox.setObjectName(u'printMetaDataCheckBox') - self.serviceOrderLayout.addWidget(self.printMetaDataCheckBox) - self.printNotesCheckBox = QtGui.QCheckBox(self.serviceOrderGroupBox) - self.printNotesCheckBox.setObjectName(u'printNotesCheckBox') - self.serviceOrderLayout.addWidget(self.printNotesCheckBox) - self.leftLayout.addWidget(self.serviceOrderGroupBox) # self.sharedDirGroupBox = QtGui.QGroupBox(self.leftColumn) # self.sharedDirGroupBox.setObjectName(u'sharedDirGroupBox') # self.sharedDirLayout = QtGui.QFormLayout(self.sharedDirGroupBox) @@ -143,14 +129,6 @@ class AdvancedTab(SettingsTab): 'Mouse Cursor')) self.hideMouseCheckBox.setText(translate('OpenLP.AdvancedTab', 'Hide the mouse cursor when moved over the display window')) - self.serviceOrderGroupBox.setTitle(translate('OpenLP.AdvancedTab', - 'Service Order Print')) - self.printSlideTextCheckBox.setText( - translate('OpenLP.AdvancedTab', 'Include text slides if available')) - self.printMetaDataCheckBox.setText(translate( - 'OpenLP.AdvancedTab', 'Include playing time of media files')) - self.printNotesCheckBox.setText( - translate('OpenLP.AdvancedTab', 'Include service item notes')) # self.sharedDirGroupBox.setTitle( # translate('AdvancedTab', 'Central Data Store')) # self.sharedCheckBox.setText( @@ -186,12 +164,6 @@ class AdvancedTab(SettingsTab): QtCore.QVariant(True)).toBool()) self.hideMouseCheckBox.setChecked( settings.value(u'hide mouse', QtCore.QVariant(False)).toBool()) - self.printSlideTextCheckBox.setChecked(settings.value( - u'print slide text', QtCore.QVariant(False)).toBool()) - self.printMetaDataCheckBox.setChecked(settings.value( - u'print file meta data', QtCore.QVariant(False)).toBool()) - self.printNotesCheckBox.setChecked(settings.value( - u'print notes', QtCore.QVariant(False)).toBool()) settings.endGroup() def save(self): @@ -212,12 +184,6 @@ class AdvancedTab(SettingsTab): QtCore.QVariant(self.enableAutoCloseCheckBox.isChecked())) settings.setValue(u'hide mouse', QtCore.QVariant(self.hideMouseCheckBox.isChecked())) - settings.setValue(u'print slide text', - QtCore.QVariant(self.printSlideTextCheckBox.isChecked())) - settings.setValue(u'print file meta data', - QtCore.QVariant(self.printMetaDataCheckBox.isChecked())) - settings.setValue(u'print notes', - QtCore.QVariant(self.printNotesCheckBox.isChecked())) settings.endGroup() # def onSharedCheckBoxChanged(self, checked): diff --git a/openlp/core/ui/printserviceorderdialog.py b/openlp/core/ui/printserviceorderdialog.py new file mode 100644 index 000000000..5706034a7 --- /dev/null +++ b/openlp/core/ui/printserviceorderdialog.py @@ -0,0 +1,136 @@ +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 + +############################################################################### +# OpenLP - Open Source Lyrics Projection # +# --------------------------------------------------------------------------- # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # +# Gorven, Scott Guerrieri, Meinert Jordan, Andreas Preikschat, Christian # +# Richter, Philip Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, # +# Carsten Tinggaard, Frode Woldsund # +# --------------------------------------------------------------------------- # +# 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 # +############################################################################### + +from PyQt4 import QtCore, QtGui + +from openlp.core.lib import translate +from openlp.core.lib.ui import save_cancel_button_box + + +class Ui_PrintServiceOrderDialog(object): + def setupUi(self, printServiceOrderDialog): + printServiceOrderDialog.setObjectName(u'printServiceOrderDialog') + self.dialogLayout = QtGui.QGridLayout(printServiceOrderDialog) + self.dialogLayout.setObjectName(u'dialogLayout') + self.perviewLayout = QtGui.QVBoxLayout() + self.perviewLayout.setObjectName(u'perviewLayout') + self.previewLabel = QtGui.QLabel(printServiceOrderDialog) + self.previewLabel.setSizePolicy( + QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred) + self.previewLabel.setObjectName(u'previewLabel') + self.perviewLayout.addWidget(self.previewLabel) + self.previewWidget = QtGui.QPrintPreviewWidget( + self.printer, self, QtCore.Qt.Widget) + self.previewWidget.setEnabled(True) + self.previewWidget.setSizePolicy( + QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Expanding) + self.previewWidget.setObjectName(u'previewWidget') + # Give the previewWidget a fixed size, to prevent resizing when clicking + # the zoom buttons. + self.previewWidget.setFixedWidth(350) + self.perviewLayout.addWidget(self.previewWidget) + self.dialogLayout.addLayout(self.perviewLayout, 0, 0, 1, 1) + self.settingsLayout = QtGui.QVBoxLayout() + self.settingsLayout.setObjectName(u'settingsLayout') + self.serviceTitleLayout = QtGui.QGridLayout() + self.serviceTitleLayout.setObjectName(u'serviceTitleLayout') + self.serviceTitleLineEdit = QtGui.QLineEdit(printServiceOrderDialog) + self.serviceTitleLineEdit.setSizePolicy( + QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred) + self.serviceTitleLineEdit.setObjectName(u'serviceTitleLineEdit') + self.serviceTitleLayout.addWidget(self.serviceTitleLineEdit, 1, 1, 1, 1) + self.serviceTitleLabel = QtGui.QLabel(printServiceOrderDialog) + self.serviceTitleLabel.setSizePolicy( + QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred) + self.serviceTitleLabel.setObjectName(u'serviceTitleLabel') + self.serviceTitleLayout.addWidget(self.serviceTitleLabel, 1, 0, 1, 1) + self.settingsLayout.addLayout(self.serviceTitleLayout) + self.printSlideTextCheckBox = QtGui.QCheckBox(printServiceOrderDialog) + self.printSlideTextCheckBox.setObjectName(u'printSlideTextCheckBox') + self.settingsLayout.addWidget(self.printSlideTextCheckBox) + self.printNotesCheckBox = QtGui.QCheckBox(printServiceOrderDialog) + self.printNotesCheckBox.setObjectName(u'printNotesCheckBox') + self.settingsLayout.addWidget(self.printNotesCheckBox) + self.printMetaDataCheckBox = QtGui.QCheckBox(printServiceOrderDialog) + self.printMetaDataCheckBox.setObjectName(u'printMetaDataCheckBox') + self.settingsLayout.addWidget(self.printMetaDataCheckBox) + spacerItem = QtGui.QSpacerItem(20, 40, + QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) + self.settingsLayout.addItem(spacerItem) + self.dialogLayout.addLayout(self.settingsLayout, 0, 3, 1, 1) + self.buttonLayout = QtGui.QHBoxLayout() + self.buttonLayout.setObjectName(u'buttonLayout') + spacerItem = QtGui.QSpacerItem(40, 20, + QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.buttonLayout.addItem(spacerItem) + self.cancelButton = QtGui.QPushButton(printServiceOrderDialog) + self.cancelButton.setObjectName(u'cancelButton') + self.buttonLayout.addWidget(self.cancelButton) + self.printButton = QtGui.QPushButton(printServiceOrderDialog) + self.printButton.setObjectName(u'printButton') + self.buttonLayout.addWidget(self.printButton) + self.dialogLayout.addLayout(self.buttonLayout, 1, 3, 1, 1) + self.zoomButtonLayout = QtGui.QHBoxLayout() + self.zoomButtonLayout.setObjectName(u'zoomButtonLayout') + spacerItem = QtGui.QSpacerItem(40, 20, + QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.zoomButtonLayout.addItem(spacerItem) + self.zoomOutButton = QtGui.QToolButton(printServiceOrderDialog) + icon = QtGui.QIcon() + icon.addPixmap(QtGui.QPixmap(u':/general/general_zoom_out.png'), + QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.zoomOutButton.setIcon(icon) + self.zoomOutButton.setObjectName(u'zoomOutButton') + self.zoomButtonLayout.addWidget(self.zoomOutButton) + self.zoomInButton = QtGui.QToolButton(printServiceOrderDialog) + icon = QtGui.QIcon() + icon.addPixmap(QtGui.QPixmap(u':/general/general_zoom_in.png'), + QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.zoomInButton.setIcon(icon) + self.zoomInButton.setObjectName(u'zoomInButton') + self.zoomButtonLayout.addWidget(self.zoomInButton) + self.dialogLayout.addLayout(self.zoomButtonLayout, 1, 0, 1, 1) + self.retranslateUi(printServiceOrderDialog) + QtCore.QMetaObject.connectSlotsByName(printServiceOrderDialog) + + def retranslateUi(self, printServiceOrderDialog): + printServiceOrderDialog.setWindowTitle( + translate('OpenLP.PrintServiceOrderForm', 'Print Service Order')) + self.previewLabel.setText( + translate('OpenLP.ServiceManager', 'Preview:')) + self.printSlideTextCheckBox.setText(translate( + 'OpenLP.PrintServiceOrderForm', 'Include slide text if avaialbe')) + self.printNotesCheckBox.setText(translate( + 'OpenLP.PrintServiceOrderForm', 'Include service item notes')) + self.printMetaDataCheckBox.setText( + translate('OpenLP.PrintServiceOrderForm', + 'Include play lenght of media items')) + self.serviceTitleLabel.setText(translate( + 'OpenLP.PrintServiceOrderForm', 'Title:')) + self.serviceTitleLineEdit.setText(translate('OpenLP.ServiceManager', + 'Service Order Sheet')) + self.printButton.setText(translate('OpenLP.ServiceManager', 'Print')) + self.cancelButton.setText(translate('OpenLP.ServiceManager', 'Cancel')) diff --git a/openlp/core/ui/printserviceorderform.py b/openlp/core/ui/printserviceorderform.py new file mode 100644 index 000000000..6eb2630d0 --- /dev/null +++ b/openlp/core/ui/printserviceorderform.py @@ -0,0 +1,176 @@ +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 + +############################################################################### +# OpenLP - Open Source Lyrics Projection # +# --------------------------------------------------------------------------- # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # +# Gorven, Scott Guerrieri, Meinert Jordan, Andreas Preikschat, Christian # +# Richter, Philip Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, # +# Carsten Tinggaard, Frode Woldsund # +# --------------------------------------------------------------------------- # +# 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 datetime +import mutagen +import os + +from PyQt4 import QtCore, QtGui + +from openlp.core.lib import translate +from openlp.core.lib.ui import save_cancel_button_box +from openlp.core.ui.printserviceorderdialog import Ui_PrintServiceOrderDialog + +class PrintServiceOrderForm(QtGui.QDialog, Ui_PrintServiceOrderDialog): + def __init__(self, parent, serviceManager): + """ + Constructor + """ + QtGui.QDialog.__init__(self, parent) + self.serviceManager = serviceManager + self.printer = QtGui.QPrinter() + self.printDialog = QtGui.QPrintDialog(self.printer, self) + self.document = QtGui.QTextDocument() + self.setupUi(self) + # Load the settings for the dialog. + settings = QtCore.QSettings() + settings.beginGroup(u'advanced') + self.printSlideTextCheckBox.setChecked(settings.value( + u'print slide text', QtCore.QVariant(False)).toBool()) + self.printMetaDataCheckBox.setChecked(settings.value( + u'print file meta data', QtCore.QVariant(False)).toBool()) + self.printNotesCheckBox.setChecked(settings.value( + u'print notes', QtCore.QVariant(False)).toBool()) + settings.endGroup() + # Signals + QtCore.QObject.connect(self.printButton, + QtCore.SIGNAL('clicked()'), self.printServiceOrder) + QtCore.QObject.connect(self.zoomOutButton, + QtCore.SIGNAL('clicked()'), self.zoomOut) + QtCore.QObject.connect(self.zoomInButton, + QtCore.SIGNAL('clicked()'), self.zoomIn) + QtCore.QObject.connect(self.previewWidget, + QtCore.SIGNAL('paintRequested(QPrinter *)'), self.paintRequested) + QtCore.QObject.connect(self.serviceTitleLineEdit, + QtCore.SIGNAL('textChanged(const QString)'), self.updatePreviewText) + QtCore.QObject.connect(self.printSlideTextCheckBox, + QtCore.SIGNAL('stateChanged(int)'), self.updatePreviewText) + QtCore.QObject.connect(self.printNotesCheckBox, + QtCore.SIGNAL('stateChanged(int)'), self.updatePreviewText) + QtCore.QObject.connect(self.printMetaDataCheckBox, + QtCore.SIGNAL('stateChanged(int)'), self.updatePreviewText) + QtCore.QObject.connect(self.cancelButton, + QtCore.SIGNAL(u'clicked()'), self.reject) + self.updatePreviewText() + + def updatePreviewText(self): + """ + Creates the html text and updates the html of *self.document*. + """ + text = u'' + if self.serviceTitleLineEdit.text(): + text += u'
' + slide[u'text'] + u'
' + elif item.is_image(): + # Add the image names of the service item. + text += u'%s
%s
' % item.foot_text + # Add service items' notes. + if self.printNotesCheckBox.isChecked(): + if item.notes: + text += u'%s
%s %s
' % (translate( + 'OpenLP.ServiceManager', u'Playing time:'), + unicode(datetime.timedelta(seconds=length))) + self.document.setHtml(text) + self.previewWidget.updatePreview() + + def paintRequested(self, printer): + """ + Paint the preview of the *self.document*. + """ + self.document.print_(printer) + + def printServiceOrder(self): + """ + Called, when the *printButton* is clicked. Opens the *printDialog*. + """ + if not self.printDialog.exec_(): + return + # Print the document. + self.document.print_(self.printer) + self.accept() + + def zoomIn(self): + """ + Called when *zoomInButton* is clicked. + """ + self.previewWidget.zoomIn() + + def zoomOut(self): + """ + Called when *zoomOutButton* is clicked. + """ + self.previewWidget.zoomOut() + + def accept(self): + """ + Save the settings and close the dialog. + """ + # Save the settings for this dialog. + settings = QtCore.QSettings() + settings.beginGroup(u'advanced') + settings.setValue(u'print slide text', + QtCore.QVariant(self.printSlideTextCheckBox.isChecked())) + settings.setValue(u'print file meta data', + QtCore.QVariant(self.printMetaDataCheckBox.isChecked())) + settings.setValue(u'print notes', + QtCore.QVariant(self.printNotesCheckBox.isChecked())) + settings.endGroup() + # Close the dialog. + return QtGui.QDialog.accept(self) + + def reject(self): + """ + Close the dialog, without printing the service or saving the settings. + """ + return QtGui.QDialog.reject(self) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index ec1025d45..1e8724e90 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -23,11 +23,8 @@ # with this program; if not, write to the Free Software Foundation, Inc., 59 # # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### - import cPickle -import datetime import logging -import mutagen import os import zipfile @@ -40,6 +37,7 @@ from openlp.core.lib import OpenLPToolbar, ServiceItem, context_menu_action, \ ThemeLevel from openlp.core.lib.ui import critical_error_message_box from openlp.core.ui import ServiceNoteForm, ServiceItemEditForm +from openlp.core.ui.printserviceorderform import PrintServiceOrderForm from openlp.core.utils import AppLocation, delete_file, file_is_unicode, \ split_filename @@ -69,8 +67,8 @@ class ServiceManagerList(QtGui.QTreeWidget): class ServiceManager(QtGui.QWidget): """ - Manages the services. This involves taking text strings from plugins and - adding them to the service. This service can then be zipped up with all + Manages the services. This involves taking text strings from plugins and + adding them to the service. This service can then be zipped up with all the resources used into one OSZ file for use on any OpenLP v2 installation. Also handles the UI tasks of moving things up and down etc. """ @@ -393,7 +391,7 @@ class ServiceManager(QtGui.QWidget): return QtGui.QMessageBox.question(self.mainwindow, translate('OpenLP.ServiceManager', 'Modified Service'), translate('OpenLP.ServiceManager', 'The current service has ' - 'been modified. Would you like to save this service?'), + 'been modified. Would you like to save this service?'), QtGui.QMessageBox.Save | QtGui.QMessageBox.Discard | QtGui.QMessageBox.Cancel, QtGui.QMessageBox.Save) @@ -1188,54 +1186,7 @@ class ServiceManager(QtGui.QWidget): def printServiceOrder(self): """ - Print a Service Order Sheet. + Open a Print a Service Order Sheet. """ - printDialog = QtGui.QPrintDialog() - if not printDialog.exec_(): - return - text = u'' + slide[u'text'] + u'
' - elif item.is_image(): - # Add the image names of the service item. - text += u'%s
%s
' % item.foot_text - # Add service items' notes. - if QtCore.QSettings().value(u'advanced' + - u'/print notes', QtCore.QVariant(False)).toBool(): - if item.notes: - text += u'%s %s
' % (translate( - 'OpenLP.ServiceManager', 'Notes:'), item.notes) - # Add play length of media files. - if item.is_media() and QtCore.QSettings().value(u'advanced' + - u'/print file meta data', QtCore.QVariant(False)).toBool(): - path = os.path.join(item.get_frames()[0][u'path'], - item.get_frames()[0][u'title']) - if not os.path.isfile(path): - continue - file = mutagen.File(path) - if file is not None: - length = int(file.info.length) - text += u'%s %s
' % (translate( - 'OpenLP.ServiceManager', u'Playing time:'), - unicode(datetime.timedelta(seconds=length))) - serviceDocument = QtGui.QTextDocument() - serviceDocument.setHtml(text) - serviceDocument.print_(printDialog.printer()) + settingDialog = PrintServiceOrderForm(self.mainwindow, self) + settingDialog.exec_() diff --git a/resources/forms/printserviceorderdialog.ui b/resources/forms/printserviceorderdialog.ui new file mode 100644 index 000000000..66f44384f --- /dev/null +++ b/resources/forms/printserviceorderdialog.ui @@ -0,0 +1,196 @@ + +