mahfiaz has proposed merging lp:~mahfiaz/openlp/bug-904438 into lp:openlp. Requested reviews: Tim Bentley (trb143) Raoul Snyman (raoul-snyman) Related bugs: Bug #904438 in OpenLP: "Prefilled default service name in save dialog" https://bugs.launchpad.net/openlp/+bug/904438
For more details, see: https://code.launchpad.net/~mahfiaz/openlp/bug-904438/+merge/90101 Have a default name for service Save as dialog always filled in. -- https://code.launchpad.net/~mahfiaz/openlp/bug-904438/+merge/90101 Your team OpenLP Core is subscribed to branch lp:openlp.
=== modified file 'openlp/core/ui/advancedtab.py' --- openlp/core/ui/advancedtab.py 2012-01-07 11:22:53 +0000 +++ openlp/core/ui/advancedtab.py 2012-01-25 12:52:22 +0000 @@ -32,6 +32,7 @@ from openlp.core.lib import SettingsTab, translate, build_icon, Receiver from openlp.core.lib.ui import UiStrings from openlp.core.utils import get_images_filter +from datetime import datetime, timedelta class AdvancedTab(SettingsTab): """ @@ -44,6 +45,20 @@ """ self.display_changed = False advancedTranslated = translate('OpenLP.AdvancedTab', 'Advanced') + # 7 stands for now, 0 to 6 is Monday to Sunday. + self.default_service_day = 7 + # 11 o'clock is the most popular time for morning service. + self.default_service_hour = 11 + self.default_service_minute = 0 + self.default_service_name = unicode(translate('OpenLP.AdvancedTab', + 'Service %Y-%m-%d %H-%M', + 'This is the default default service name template, which can be ' + 'found in Advanced tab under Tools, Settings. Please do not ' + 'include any of the following characters: /\\?*|<>\[\]":+\n' + 'You can use any of the directives as shown on page ' + 'http://docs.python.org/library/datetime.html' + '#strftime-strptime-behavior , but if possible, please keep ' + 'the resulting string sortable by name.')) self.default_image = u':/graphics/openlp-splash-screen.png' self.default_color = u'#ffffff' self.icon_path = u':/system/system_settings.png' @@ -84,6 +99,62 @@ u'enableAutoCloseCheckBox') self.uiLayout.addRow(self.enableAutoCloseCheckBox) self.leftLayout.addWidget(self.uiGroupBox) + self.defaultServiceGroupBox = QtGui.QGroupBox(self.leftColumn) + self.defaultServiceGroupBox.setObjectName(u'defaultServiceGroupBox') + self.defaultServiceLayout = QtGui.QFormLayout( + self.defaultServiceGroupBox) + self.defaultServiceCheckBox = QtGui.QCheckBox( + self.defaultServiceGroupBox) + self.defaultServiceCheckBox.setObjectName(u'defaultServiceCheckBox') + self.defaultServiceLayout.setObjectName(u'defaultServiceLayout') + self.defaultServiceLayout.addRow(self.defaultServiceCheckBox) + self.defaultServiceTimeLabel = QtGui.QLabel(self.defaultServiceGroupBox) + self.defaultServiceTimeLabel.setObjectName(u'defaultServiceTimeLabel') + self.defaultServiceDay = QtGui.QComboBox( + self.defaultServiceGroupBox) + self.defaultServiceDay.addItems( + [u'', u'', u'', u'', u'', u'', u'', u'']) + self.defaultServiceDay.setObjectName( + u'defaultServiceDay') + self.defaultServiceTime = QtGui.QTimeEdit(self.defaultServiceGroupBox) + self.defaultServiceTime.setObjectName(u'defaultServiceTime') + self.defaultServiceTimeHBox = QtGui.QHBoxLayout() + self.defaultServiceTimeHBox.setObjectName(u'defaultServiceTimeHBox') + self.defaultServiceTimeHBox.addWidget(self.defaultServiceDay) + self.defaultServiceTimeHBox.addWidget(self.defaultServiceTime) + self.defaultServiceLayout.addRow(self.defaultServiceTimeLabel, + self.defaultServiceTimeHBox) + self.defaultServiceLabel = QtGui.QLabel(self.defaultServiceGroupBox) + self.defaultServiceLabel.setObjectName(u'defaultServiceLabel') + self.defaultServiceName = QtGui.QLineEdit(self.defaultServiceGroupBox) + self.defaultServiceName.setObjectName(u'defaultServiceName') + self.defaultServiceName.setValidator(QtGui.QRegExpValidator( + QtCore.QRegExp(r'[^/\\?*|<>\[\]":+]+'), self)) + self.defaultServiceRevertButton = QtGui.QToolButton( + self.defaultServiceGroupBox) + self.defaultServiceRevertButton.setObjectName( + u'defaultServiceRevertButton') + self.defaultServiceRevertButton.setIcon( + build_icon(u':/general/general_revert.png')) + self.defaultServiceHBox = QtGui.QHBoxLayout() + self.defaultServiceHBox.setObjectName(u'defaultServiceHBox') + self.defaultServiceHBox.addWidget(self.defaultServiceName) + self.defaultServiceHBox.addWidget(self.defaultServiceRevertButton) + self.defaultServiceLayout.addRow(self.defaultServiceLabel, + self.defaultServiceHBox) + self.defaultServiceExampleLabel = QtGui.QLabel( + self.defaultServiceGroupBox) + self.defaultServiceExampleLabel.setObjectName( + u'defaultServiceExampleLabel') + self.defaultServiceExample = QtGui.QLabel(self.defaultServiceGroupBox) + self.defaultServiceExample.setObjectName(u'defaultServiceExample') + self.defaultServiceLayout.addRow(self.defaultServiceExampleLabel, + self.defaultServiceExample) + self.defaultServiceNote = QtGui.QLabel(self.defaultServiceGroupBox) + self.defaultServiceNote.setWordWrap(True) + self.defaultServiceNote.setObjectName(u'defaultServiceNote') + self.defaultServiceLayout.addRow(self.defaultServiceNote) + self.leftLayout.addWidget(self.defaultServiceGroupBox) self.leftLayout.addStretch() self.defaultImageGroupBox = QtGui.QGroupBox(self.rightColumn) self.defaultImageGroupBox.setObjectName(u'defaultImageGroupBox') @@ -133,6 +204,20 @@ self.rightLayout.addWidget(self.x11GroupBox) self.rightLayout.addStretch() + QtCore.QObject.connect(self.defaultServiceCheckBox, + QtCore.SIGNAL(u'toggled(bool)'), self.defaultServiceCheckBoxToggled) + QtCore.QObject.connect(self.defaultServiceDay, + QtCore.SIGNAL(u'currentIndexChanged(int)'), + self.onDefaultServiceDayChanged) + QtCore.QObject.connect(self.defaultServiceTime, + QtCore.SIGNAL(u'timeChanged(QTime)'), + self.onDefaultServiceTimeChanged) + QtCore.QObject.connect(self.defaultServiceName, + QtCore.SIGNAL(u'textChanged(QString)'), + self.onDefaultServiceNameChanged) + QtCore.QObject.connect(self.defaultServiceRevertButton, + QtCore.SIGNAL(u'pressed()'), + self.onDefaultServiceRevertButtonPressed) QtCore.QObject.connect(self.defaultColorButton, QtCore.SIGNAL(u'pressed()'), self.onDefaultColorButtonPressed) QtCore.QObject.connect(self.defaultBrowseButton, @@ -162,6 +247,42 @@ 'Expand new service items on creation')) self.enableAutoCloseCheckBox.setText(translate('OpenLP.AdvancedTab', 'Enable application exit confirmation')) + self.defaultServiceGroupBox.setTitle( + translate('OpenLP.AdvancedTab', 'Default Service Name')) + self.defaultServiceCheckBox.setText( + translate('OpenLP.AdvancedTab', + 'Save As dialog has prefilled service name')) + self.defaultServiceTimeLabel.setText( + translate('OpenLP.AdvancedTab', 'Date and Time:')) + self.defaultServiceDay.setItemText(0, + translate('OpenLP.AdvancedTab', 'Monday')) + self.defaultServiceDay.setItemText(1, + translate('OpenLP.AdvancedTab', 'Tuesday')) + self.defaultServiceDay.setItemText(2, + translate('OpenLP.AdvancedTab', 'Wednesday')) + self.defaultServiceDay.setItemText(3, + translate('OpenLP.AdvancedTab', 'Thurdsday')) + self.defaultServiceDay.setItemText(4, + translate('OpenLP.AdvancedTab', 'Friday')) + self.defaultServiceDay.setItemText(5, + translate('OpenLP.AdvancedTab', 'Saturday')) + self.defaultServiceDay.setItemText(6, + translate('OpenLP.AdvancedTab', 'Sunday')) + self.defaultServiceDay.setItemText(7, + translate('OpenLP.AdvancedTab', 'Now')) + self.defaultServiceTime.setToolTip(translate('OpenLP.AdvancedTab', + 'Time when usual service starts.')) + self.defaultServiceLabel.setText( + translate('OpenLP.AdvancedTab', 'Name:')) + self.defaultServiceRevertButton.setToolTip(unicode( + translate('OpenLP.AdvancedTab', + 'Revert to the default service name "%s".')) % + self.default_service_name) + self.defaultServiceExampleLabel.setText(translate('OpenLP.AdvancedTab', + 'Example:')) + self.defaultServiceNote.setText( + translate('OpenLP.AdvancedTab', 'Note: ' + 'Consult OpenLP manual for special symbols usage.')) self.hideMouseGroupBox.setTitle(translate('OpenLP.AdvancedTab', 'Mouse Cursor')) self.hideMouseCheckBox.setText(translate('OpenLP.AdvancedTab', @@ -213,6 +334,22 @@ QtCore.QVariant(True)).toBool()) self.hideMouseCheckBox.setChecked( settings.value(u'hide mouse', QtCore.QVariant(False)).toBool()) + default_service_enabled = settings.value(u'default service enabled', + QtCore.QVariant(True)).toBool() + self.defaultServiceCheckBox.setChecked(default_service_enabled) + self.service_day, ok = settings.value(u'default service day', + QtCore.QVariant(self.default_service_day)).toInt() + self.service_hour, ok = settings.value(u'default service hour', + self.default_service_hour).toInt() + self.service_minute, ok = settings.value(u'default service minute', + self.default_service_minute).toInt() + self.service_name = unicode(settings.value(u'default service name', + self.default_service_name).toString()) + self.defaultServiceDay.setCurrentIndex(self.service_day) + self.defaultServiceTime.setTime( + QtCore.QTime(self.service_hour, self.service_minute)) + self.defaultServiceName.setText(self.service_name) + self.defaultServiceCheckBoxToggled(default_service_enabled) self.x11BypassCheckBox.setChecked( settings.value(u'x11 bypass wm', QtCore.QVariant(True)).toBool()) self.default_color = settings.value(u'default color', @@ -228,8 +365,24 @@ """ Save settings to disk. """ + preset_is_valid, name_example = self.generate_service_name_example() + if not preset_is_valid: + self.service_name = self.default_service_name + self.defaultServiceName.setText(self.service_name) settings = QtCore.QSettings() settings.beginGroup(self.settingsSection) + settings.setValue(u'default service enabled', + self.defaultServiceCheckBox.isChecked()) + if self.service_name == self.default_service_name: + settings.remove(u'default service name') + else: + settings.setValue(u'default service name', self.service_name) + settings.setValue(u'default service day', + self.defaultServiceDay.currentIndex()) + settings.setValue(u'default service hour', + self.defaultServiceTime.time().hour()) + settings.setValue(u'default service minute', + self.defaultServiceTime.time().minute()) settings.setValue(u'recent file count', QtCore.QVariant(self.recentSpinBox.value())) settings.setValue(u'save current plugin', @@ -253,6 +406,55 @@ Receiver.send_message(u'config_screen_changed') self.display_changed = False + def defaultServiceCheckBoxToggled(self, default_service_enabled): + self.defaultServiceDay.setEnabled(default_service_enabled) + time_enabled = default_service_enabled and self.service_day is not 7 + self.defaultServiceTime.setEnabled(time_enabled) + self.defaultServiceName.setEnabled(default_service_enabled) + self.defaultServiceRevertButton.setEnabled(default_service_enabled) + + def generate_service_name_example(self): + preset_is_valid = True + if self.service_day == 7: + time = datetime.now() + else: + now = datetime.now() + day_delta = self.service_day - now.weekday() + if day_delta < 0: + day_delta += 7 + time = now + timedelta(days=day_delta) + time = time.replace(hour = self.service_hour, + minute = self.service_minute) + try: + service_name_example = time.strftime(unicode(self.service_name)) + except ValueError: + preset_is_valid = False + service_name_example = translate('OpenLP.AdvancedTab', + 'Syntax error.') + return preset_is_valid, service_name_example + + def updateServiceNameExample(self): + preset_is_valid, name_example = self.generate_service_name_example() + self.defaultServiceExample.setText(name_example) + + def onDefaultServiceDayChanged(self, index): + self.service_day = index + self.defaultServiceTime.setEnabled(self.service_day is not 7) + self.updateServiceNameExample() + + def onDefaultServiceTimeChanged(self, time): + self.service_hour = time.hour() + self.service_minute = time.minute() + self.updateServiceNameExample() + + def onDefaultServiceNameChanged(self, name): + self.service_name = name + self.updateServiceNameExample() + + def onDefaultServiceRevertButtonPressed(self): + self.defaultServiceName.setText(self.default_service_name) + self.defaultServiceName.setFocus() + def onDefaultColorButtonPressed(self): new_color = QtGui.QColorDialog.getColor( QtGui.QColor(self.default_color), self) === modified file 'openlp/core/ui/servicemanager.py' --- openlp/core/ui/servicemanager.py 2012-01-01 13:43:43 +0000 +++ openlp/core/ui/servicemanager.py 2012-01-25 12:52:22 +0000 @@ -31,6 +31,7 @@ import shutil import zipfile from tempfile import mkstemp +from datetime import datetime, timedelta log = logging.getLogger(__name__) @@ -612,10 +613,43 @@ Get a file name and then call :func:`ServiceManager.saveFile` to save the file. """ + default_service_enabled = QtCore.QSettings().value( + u'advanced/default service enabled', QtCore.QVariant(True)).toBool() + if default_service_enabled: + service_day, ok = QtCore.QSettings().value( + u'advanced/default service day', 7).toInt() + if service_day == 7: + time = datetime.now() + else: + service_hour, ok = QtCore.QSettings().value( + u'advanced/default service hour', 11).toInt() + service_minute, ok = QtCore.QSettings().value( + u'advanced/default service minute', 0).toInt() + now = datetime.now() + day_delta = service_day - now.weekday() + if day_delta < 0: + day_delta += 7 + time = now + timedelta(days=day_delta) + time = time.replace(hour=service_hour, minute=service_minute) + default_pattern = unicode(QtCore.QSettings().value( + u'advanced/default service name', + translate('OpenLP.AdvancedTab', + 'Service %Y-%m-%d %H-%M', + 'This is the default default service name template, which can ' + 'be found in Advanced tab under Tools, Settings. Please do not ' + 'include any of the following characters: /\\?*|<>\[\]":+\n' + 'You can use any of the directives as shown on page ' + 'http://docs.python.org/library/datetime.html' + '#strftime-strptime-behavior , but if possible, please keep ' + 'the resulting string sortable by name.')).toString()) + default_filename = time.strftime(default_pattern) + else: + default_filename = u'' + directory = unicode(SettingsManager.get_last_dir( + self.mainwindow.servicemanagerSettingsSection)) + path = os.path.join(directory, default_filename) fileName = unicode(QtGui.QFileDialog.getSaveFileName(self.mainwindow, - UiStrings().SaveService, - SettingsManager.get_last_dir( - self.mainwindow.servicemanagerSettingsSection), + UiStrings().SaveService, path, translate('OpenLP.ServiceManager', 'OpenLP Service Files (*.osz)'))) if not fileName: return False
_______________________________________________ Mailing list: https://launchpad.net/~openlp-core Post to : openlp-core@lists.launchpad.net Unsubscribe : https://launchpad.net/~openlp-core More help : https://help.launchpad.net/ListHelp