~ubuntu-branches/debian/sid/openlp/sid

« back to all changes in this revision

Viewing changes to openlp/core/ui/advancedtab.py

  • Committer: Package Import Robot
  • Author(s): Raoul Snyman
  • Date: 2012-05-09 18:40:30 UTC
  • Revision ID: package-import@ubuntu.com-20120509184030-pqz3jwr61635nld9
Tags: upstream-1.9.9
ImportĀ upstreamĀ versionĀ 1.9.9

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# -*- coding: utf-8 -*-
 
2
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
 
3
 
 
4
###############################################################################
 
5
# OpenLP - Open Source Lyrics Projection                                      #
 
6
# --------------------------------------------------------------------------- #
 
7
# Copyright (c) 2008-2012 Raoul Snyman                                        #
 
8
# Portions copyright (c) 2008-2012 Tim Bentley, Gerald Britton, Jonathan      #
 
9
# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan,      #
 
10
# Armin Kƶhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias     #
 
11
# PƵldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith,    #
 
12
# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund             #
 
13
# --------------------------------------------------------------------------- #
 
14
# This program is free software; you can redistribute it and/or modify it     #
 
15
# under the terms of the GNU General Public License as published by the Free  #
 
16
# Software Foundation; version 2 of the License.                              #
 
17
#                                                                             #
 
18
# This program is distributed in the hope that it will be useful, but WITHOUT #
 
19
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or       #
 
20
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for    #
 
21
# more details.                                                               #
 
22
#                                                                             #
 
23
# You should have received a copy of the GNU General Public License along     #
 
24
# with this program; if not, write to the Free Software Foundation, Inc., 59  #
 
25
# Temple Place, Suite 330, Boston, MA 02111-1307 USA                          #
 
26
###############################################################################
 
27
"""
 
28
The :mod:`advancedtab` provides an advanced settings facility.
 
29
"""
 
30
from datetime import datetime, timedelta
 
31
 
 
32
from PyQt4 import QtCore, QtGui
 
33
 
 
34
from openlp.core.lib import SettingsTab, translate, build_icon,  Receiver
 
35
from openlp.core.lib.ui import UiStrings
 
36
from openlp.core.lib import SlideLimits
 
37
from openlp.core.utils import get_images_filter
 
38
 
 
39
class AdvancedTab(SettingsTab):
 
40
    """
 
41
    The :class:`AdvancedTab` manages the advanced settings tab including the UI
 
42
    and the loading and saving of the displayed settings.
 
43
    """
 
44
    def __init__(self, parent):
 
45
        """
 
46
        Initialise the settings tab
 
47
        """
 
48
        self.displayChanged = False
 
49
        # 7 stands for now, 0 to 6 is Monday to Sunday.
 
50
        self.defaultServiceDay = 7
 
51
        # 11 o'clock is the most popular time for morning service.
 
52
        self.defaultServiceHour = 11
 
53
        self.defaultServiceMinute = 0
 
54
        self.defaultServiceName = unicode(translate('OpenLP.AdvancedTab',
 
55
            'Service %Y-%m-%d %H-%M',
 
56
            'This may not contain any of the following characters: '
 
57
            '/\\?*|<>\[\]":+\n'
 
58
            'See http://docs.python.org/library/datetime.html'
 
59
            '#strftime-strptime-behavior for more information.'))
 
60
        self.defaultImage = u':/graphics/openlp-splash-screen.png'
 
61
        self.defaultColor = u'#ffffff'
 
62
        self.icon_path = u':/system/system_settings.png'
 
63
        advanced_translated = translate('OpenLP.AdvancedTab', 'Advanced')
 
64
        SettingsTab.__init__(self, parent, u'Advanced', advanced_translated)
 
65
 
 
66
    def setupUi(self):
 
67
        """
 
68
        Configure the UI elements for the tab.
 
69
        """
 
70
        self.setObjectName(u'AdvancedTab')
 
71
        SettingsTab.setupUi(self)
 
72
        self.uiGroupBox = QtGui.QGroupBox(self.leftColumn)
 
73
        self.uiGroupBox.setObjectName(u'uiGroupBox')
 
74
        self.uiLayout = QtGui.QFormLayout(self.uiGroupBox)
 
75
        self.uiLayout.setObjectName(u'uiLayout')
 
76
        self.recentLabel = QtGui.QLabel(self.uiGroupBox)
 
77
        self.recentLabel.setObjectName(u'recentLabel')
 
78
        self.recentSpinBox = QtGui.QSpinBox(self.uiGroupBox)
 
79
        self.recentSpinBox.setObjectName(u'recentSpinBox')
 
80
        self.recentSpinBox.setMinimum(0)
 
81
        self.uiLayout.addRow(self.recentLabel, self.recentSpinBox)
 
82
        self.mediaPluginCheckBox = QtGui.QCheckBox(self.uiGroupBox)
 
83
        self.mediaPluginCheckBox.setObjectName(u'mediaPluginCheckBox')
 
84
        self.uiLayout.addRow(self.mediaPluginCheckBox)
 
85
        self.doubleClickLiveCheckBox = QtGui.QCheckBox(self.uiGroupBox)
 
86
        self.doubleClickLiveCheckBox.setObjectName(u'doubleClickLiveCheckBox')
 
87
        self.uiLayout.addRow(self.doubleClickLiveCheckBox)
 
88
        self.singleClickPreviewCheckBox = QtGui.QCheckBox(self.uiGroupBox)
 
89
        self.singleClickPreviewCheckBox.setObjectName(
 
90
            u'singleClickPreviewCheckBox')
 
91
        self.uiLayout.addRow(self.singleClickPreviewCheckBox)
 
92
        self.expandServiceItemCheckBox = QtGui.QCheckBox(self.uiGroupBox)
 
93
        self.expandServiceItemCheckBox.setObjectName(
 
94
            u'expandServiceItemCheckBox')
 
95
        self.uiLayout.addRow(self.expandServiceItemCheckBox)
 
96
        self.enableAutoCloseCheckBox = QtGui.QCheckBox(self.uiGroupBox)
 
97
        self.enableAutoCloseCheckBox.setObjectName(
 
98
            u'enableAutoCloseCheckBox')
 
99
        self.uiLayout.addRow(self.enableAutoCloseCheckBox)
 
100
        self.leftLayout.addWidget(self.uiGroupBox)
 
101
        # Default service name
 
102
        self.serviceNameGroupBox = QtGui.QGroupBox(self.leftColumn)
 
103
        self.serviceNameGroupBox.setObjectName(u'serviceNameGroupBox')
 
104
        self.serviceNameLayout = QtGui.QFormLayout(
 
105
            self.serviceNameGroupBox)
 
106
        self.serviceNameCheckBox = QtGui.QCheckBox(
 
107
            self.serviceNameGroupBox)
 
108
        self.serviceNameCheckBox.setObjectName(u'serviceNameCheckBox')
 
109
        self.serviceNameLayout.setObjectName(u'serviceNameLayout')
 
110
        self.serviceNameLayout.addRow(self.serviceNameCheckBox)
 
111
        self.serviceNameTimeLabel = QtGui.QLabel(self.serviceNameGroupBox)
 
112
        self.serviceNameTimeLabel.setObjectName(u'serviceNameTimeLabel')
 
113
        self.serviceNameDay = QtGui.QComboBox(
 
114
            self.serviceNameGroupBox)
 
115
        self.serviceNameDay.addItems(
 
116
            [u'', u'', u'', u'', u'', u'', u'', u''])
 
117
        self.serviceNameDay.setObjectName(
 
118
            u'serviceNameDay')
 
119
        self.serviceNameTime = QtGui.QTimeEdit(self.serviceNameGroupBox)
 
120
        self.serviceNameTime.setObjectName(u'serviceNameTime')
 
121
        self.serviceNameTimeHBox = QtGui.QHBoxLayout()
 
122
        self.serviceNameTimeHBox.setObjectName(u'serviceNameTimeHBox')
 
123
        self.serviceNameTimeHBox.addWidget(self.serviceNameDay)
 
124
        self.serviceNameTimeHBox.addWidget(self.serviceNameTime)
 
125
        self.serviceNameLayout.addRow(self.serviceNameTimeLabel,
 
126
            self.serviceNameTimeHBox)
 
127
        self.serviceNameLabel = QtGui.QLabel(self.serviceNameGroupBox)
 
128
        self.serviceNameLabel.setObjectName(u'serviceNameLabel')
 
129
        self.serviceNameEdit = QtGui.QLineEdit(self.serviceNameGroupBox)
 
130
        self.serviceNameEdit.setObjectName(u'serviceNameEdit')
 
131
        self.serviceNameEdit.setValidator(QtGui.QRegExpValidator(
 
132
            QtCore.QRegExp(r'[^/\\?*|<>\[\]":+]+'), self))
 
133
        self.serviceNameRevertButton = QtGui.QToolButton(
 
134
            self.serviceNameGroupBox)
 
135
        self.serviceNameRevertButton.setObjectName(
 
136
            u'serviceNameRevertButton')
 
137
        self.serviceNameRevertButton.setIcon(
 
138
            build_icon(u':/general/general_revert.png'))
 
139
        self.serviceNameHBox = QtGui.QHBoxLayout()
 
140
        self.serviceNameHBox.setObjectName(u'serviceNameHBox')
 
141
        self.serviceNameHBox.addWidget(self.serviceNameEdit)
 
142
        self.serviceNameHBox.addWidget(self.serviceNameRevertButton)
 
143
        self.serviceNameLayout.addRow(self.serviceNameLabel,
 
144
            self.serviceNameHBox)
 
145
        self.serviceNameExampleLabel = QtGui.QLabel(
 
146
            self.serviceNameGroupBox)
 
147
        self.serviceNameExampleLabel.setObjectName(
 
148
            u'serviceNameExampleLabel')
 
149
        self.serviceNameExample = QtGui.QLabel(self.serviceNameGroupBox)
 
150
        self.serviceNameExample.setObjectName(u'serviceNameExample')
 
151
        self.serviceNameLayout.addRow(self.serviceNameExampleLabel,
 
152
            self.serviceNameExample)
 
153
        self.leftLayout.addWidget(self.serviceNameGroupBox)
 
154
        self.leftLayout.addStretch()
 
155
        # Default Image
 
156
        self.defaultImageGroupBox = QtGui.QGroupBox(self.rightColumn)
 
157
        self.defaultImageGroupBox.setObjectName(u'defaultImageGroupBox')
 
158
        self.defaultImageLayout = QtGui.QFormLayout(self.defaultImageGroupBox)
 
159
        self.defaultImageLayout.setObjectName(u'defaultImageLayout')
 
160
        self.defaultColorLabel = QtGui.QLabel(self.defaultImageGroupBox)
 
161
        self.defaultColorLabel.setObjectName(u'defaultColorLabel')
 
162
        self.defaultColorButton = QtGui.QPushButton(self.defaultImageGroupBox)
 
163
        self.defaultColorButton.setObjectName(u'defaultColorButton')
 
164
        self.defaultImageLayout.addRow(self.defaultColorLabel,
 
165
            self.defaultColorButton)
 
166
        self.defaultFileLabel = QtGui.QLabel(self.defaultImageGroupBox)
 
167
        self.defaultFileLabel.setObjectName(u'defaultFileLabel')
 
168
        self.defaultFileEdit = QtGui.QLineEdit(self.defaultImageGroupBox)
 
169
        self.defaultFileEdit.setObjectName(u'defaultFileEdit')
 
170
        self.defaultBrowseButton = QtGui.QToolButton(self.defaultImageGroupBox)
 
171
        self.defaultBrowseButton.setObjectName(u'defaultBrowseButton')
 
172
        self.defaultBrowseButton.setIcon(
 
173
            build_icon(u':/general/general_open.png'))
 
174
        self.defaultRevertButton = QtGui.QToolButton(self.defaultImageGroupBox)
 
175
        self.defaultRevertButton.setObjectName(u'defaultRevertButton')
 
176
        self.defaultRevertButton.setIcon(
 
177
            build_icon(u':/general/general_revert.png'))
 
178
        self.defaultFileLayout = QtGui.QHBoxLayout()
 
179
        self.defaultFileLayout.setObjectName(u'defaultFileLayout')
 
180
        self.defaultFileLayout.addWidget(self.defaultFileEdit)
 
181
        self.defaultFileLayout.addWidget(self.defaultBrowseButton)
 
182
        self.defaultFileLayout.addWidget(self.defaultRevertButton)
 
183
        self.defaultImageLayout.addRow(self.defaultFileLabel,
 
184
            self.defaultFileLayout)
 
185
        self.rightLayout.addWidget(self.defaultImageGroupBox)
 
186
        # Hide mouse
 
187
        self.hideMouseGroupBox = QtGui.QGroupBox(self.rightColumn)
 
188
        self.hideMouseGroupBox.setObjectName(u'hideMouseGroupBox')
 
189
        self.hideMouseLayout = QtGui.QVBoxLayout(self.hideMouseGroupBox)
 
190
        self.hideMouseLayout.setObjectName(u'hideMouseLayout')
 
191
        self.hideMouseCheckBox = QtGui.QCheckBox(self.hideMouseGroupBox)
 
192
        self.hideMouseCheckBox.setObjectName(u'hideMouseCheckBox')
 
193
        self.hideMouseLayout.addWidget(self.hideMouseCheckBox)
 
194
        self.rightLayout.addWidget(self.hideMouseGroupBox)
 
195
        # Service Item Slide Limits
 
196
        self.slideGroupBox = QtGui.QGroupBox(self.rightColumn)
 
197
        self.slideGroupBox.setObjectName(u'slideGroupBox')
 
198
        self.slideLayout = QtGui.QFormLayout(self.slideGroupBox)
 
199
        self.slideLayout.setLabelAlignment(
 
200
            QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop)
 
201
        self.slideLayout.setFormAlignment(
 
202
            QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop)
 
203
        self.slideLayout.setObjectName(u'slideLayout')
 
204
        self.endSlideRadioButton = QtGui.QRadioButton(self.slideGroupBox)
 
205
        self.endSlideRadioButton.setObjectName(u'endSlideRadioButton')
 
206
        self.endSlideLabel = QtGui.QLabel(self.slideGroupBox)
 
207
        self.endSlideLabel.setWordWrap(True)
 
208
        self.endSlideLabel.setObjectName(u'endSlideLabel')
 
209
        self.slideLayout.addRow(self.endSlideRadioButton, self.endSlideLabel)
 
210
        self.wrapSlideRadioButton = QtGui.QRadioButton(self.slideGroupBox)
 
211
        self.wrapSlideRadioButton.setObjectName(u'wrapSlideRadioButton')
 
212
        self.wrapSlideLabel = QtGui.QLabel(self.slideGroupBox)
 
213
        self.wrapSlideLabel.setWordWrap(True)
 
214
        self.wrapSlideLabel.setObjectName(u'wrapSlideLabel')
 
215
        self.slideLayout.addRow(self.wrapSlideRadioButton,
 
216
            self.wrapSlideLabel)
 
217
        self.nextItemRadioButton = QtGui.QRadioButton(self.slideGroupBox)
 
218
        self.nextItemRadioButton.setChecked(True)
 
219
        self.nextItemRadioButton.setObjectName(u'nextItemRadioButton')
 
220
        self.nextItemLabel = QtGui.QLabel(self.slideGroupBox)
 
221
        self.nextItemLabel.setWordWrap(True)
 
222
        self.nextItemLabel.setObjectName(u'nextItemLabel')
 
223
        self.slideLayout.addRow(self.nextItemRadioButton,
 
224
            self.nextItemLabel)
 
225
        self.rightLayout.addWidget(self.slideGroupBox)
 
226
        self.x11GroupBox = QtGui.QGroupBox(self.leftColumn)
 
227
        self.x11GroupBox.setObjectName(u'x11GroupBox')
 
228
        self.x11Layout = QtGui.QVBoxLayout(self.x11GroupBox)
 
229
        self.x11Layout.setObjectName(u'x11Layout')
 
230
        self.x11BypassCheckBox = QtGui.QCheckBox(self.x11GroupBox)
 
231
        self.x11BypassCheckBox.setObjectName(u'x11BypassCheckBox')
 
232
        self.x11Layout.addWidget(self.x11BypassCheckBox)
 
233
        self.rightLayout.addWidget(self.x11GroupBox)
 
234
        self.rightLayout.addStretch()
 
235
 
 
236
        self.shouldUpdateServiceNameExample = False
 
237
        QtCore.QObject.connect(self.serviceNameCheckBox,
 
238
            QtCore.SIGNAL(u'toggled(bool)'), self.serviceNameCheckBoxToggled)
 
239
        QtCore.QObject.connect(self.serviceNameDay,
 
240
            QtCore.SIGNAL(u'currentIndexChanged(int)'),
 
241
            self.onServiceNameDayChanged)
 
242
        QtCore.QObject.connect(self.serviceNameTime,
 
243
            QtCore.SIGNAL(u'timeChanged(QTime)'),
 
244
            self.updateServiceNameExample)
 
245
        QtCore.QObject.connect(self.serviceNameEdit,
 
246
            QtCore.SIGNAL(u'textChanged(QString)'),
 
247
            self.updateServiceNameExample)
 
248
        QtCore.QObject.connect(self.serviceNameRevertButton,
 
249
            QtCore.SIGNAL(u'pressed()'),
 
250
            self.onServiceNameRevertButtonPressed)
 
251
        QtCore.QObject.connect(self.defaultColorButton,
 
252
            QtCore.SIGNAL(u'pressed()'), self.onDefaultColorButtonPressed)
 
253
        QtCore.QObject.connect(self.defaultBrowseButton,
 
254
            QtCore.SIGNAL(u'pressed()'), self.onDefaultBrowseButtonPressed)
 
255
        QtCore.QObject.connect(self.defaultRevertButton,
 
256
            QtCore.SIGNAL(u'pressed()'), self.onDefaultRevertButtonPressed)
 
257
        QtCore.QObject.connect(self.x11BypassCheckBox,
 
258
            QtCore.SIGNAL(u'toggled(bool)'), self.onX11BypassCheckBoxToggled)
 
259
        QtCore.QObject.connect(self.endSlideRadioButton,
 
260
            QtCore.SIGNAL(u'pressed()'), self.onEndSlideButtonPressed)
 
261
        QtCore.QObject.connect(self.wrapSlideRadioButton,
 
262
            QtCore.SIGNAL(u'pressed()'), self.onWrapSlideButtonPressed)
 
263
        QtCore.QObject.connect(self.nextItemRadioButton,
 
264
            QtCore.SIGNAL(u'pressed()'), self.onnextItemButtonPressed)
 
265
 
 
266
    def retranslateUi(self):
 
267
        """
 
268
        Setup the interface translation strings.
 
269
        """
 
270
        self.tabTitleVisible = UiStrings().Advanced
 
271
        self.uiGroupBox.setTitle(
 
272
            translate('OpenLP.AdvancedTab', 'UI Settings'))
 
273
        self.recentLabel.setText(
 
274
            translate('OpenLP.AdvancedTab',
 
275
                'Number of recent files to display:'))
 
276
        self.mediaPluginCheckBox.setText(translate('OpenLP.AdvancedTab',
 
277
            'Remember active media manager tab on startup'))
 
278
        self.doubleClickLiveCheckBox.setText(translate('OpenLP.AdvancedTab',
 
279
            'Double-click to send items straight to live'))
 
280
        self.singleClickPreviewCheckBox.setText(translate('OpenLP.AdvancedTab',
 
281
            'Preview items when clicked in Media Manager'))
 
282
        self.expandServiceItemCheckBox.setText(translate('OpenLP.AdvancedTab',
 
283
            'Expand new service items on creation'))
 
284
        self.enableAutoCloseCheckBox.setText(translate('OpenLP.AdvancedTab',
 
285
            'Enable application exit confirmation'))
 
286
        self.serviceNameGroupBox.setTitle(
 
287
            translate('OpenLP.AdvancedTab', 'Default Service Name'))
 
288
        self.serviceNameCheckBox.setText(
 
289
            translate('OpenLP.AdvancedTab', 'Enable default service name'))
 
290
        self.serviceNameTimeLabel.setText(
 
291
            translate('OpenLP.AdvancedTab', 'Date and Time:'))
 
292
        self.serviceNameDay.setItemText(0,
 
293
            translate('OpenLP.AdvancedTab', 'Monday'))
 
294
        self.serviceNameDay.setItemText(1,
 
295
            translate('OpenLP.AdvancedTab', 'Tuesday'))
 
296
        self.serviceNameDay.setItemText(2,
 
297
            translate('OpenLP.AdvancedTab', 'Wednesday'))
 
298
        self.serviceNameDay.setItemText(3,
 
299
            translate('OpenLP.AdvancedTab', 'Thurdsday'))
 
300
        self.serviceNameDay.setItemText(4,
 
301
            translate('OpenLP.AdvancedTab', 'Friday'))
 
302
        self.serviceNameDay.setItemText(5,
 
303
            translate('OpenLP.AdvancedTab', 'Saturday'))
 
304
        self.serviceNameDay.setItemText(6,
 
305
            translate('OpenLP.AdvancedTab', 'Sunday'))
 
306
        self.serviceNameDay.setItemText(7,
 
307
            translate('OpenLP.AdvancedTab', 'Now'))
 
308
        self.serviceNameTime.setToolTip(translate('OpenLP.AdvancedTab',
 
309
            'Time when usual service starts.'))
 
310
        self.serviceNameLabel.setText(
 
311
            translate('OpenLP.AdvancedTab', 'Name:'))
 
312
        self.serviceNameEdit.setToolTip(translate('OpenLP.AdvancedTab',
 
313
            'Consult the OpenLP manual for usage.'))
 
314
        self.serviceNameRevertButton.setToolTip(unicode(
 
315
            translate('OpenLP.AdvancedTab',
 
316
            'Revert to the default service name "%s".')) %
 
317
            self.defaultServiceName)
 
318
        self.serviceNameExampleLabel.setText(translate('OpenLP.AdvancedTab',
 
319
            'Example:'))
 
320
        self.hideMouseGroupBox.setTitle(translate('OpenLP.AdvancedTab',
 
321
            'Mouse Cursor'))
 
322
        self.hideMouseCheckBox.setText(translate('OpenLP.AdvancedTab',
 
323
            'Hide mouse cursor when over display window'))
 
324
        self.defaultImageGroupBox.setTitle(translate('OpenLP.AdvancedTab',
 
325
            'Default Image'))
 
326
        self.defaultColorLabel.setText(translate('OpenLP.AdvancedTab',
 
327
            'Background color:'))
 
328
        self.defaultColorButton.setToolTip(translate('OpenLP.AdvancedTab',
 
329
            'Click to select a color.'))
 
330
        self.defaultFileLabel.setText(translate('OpenLP.AdvancedTab',
 
331
            'Image file:'))
 
332
        self.defaultBrowseButton.setToolTip(translate('OpenLP.AdvancedTab',
 
333
            'Browse for an image file to display.'))
 
334
        self.defaultRevertButton.setToolTip(translate('OpenLP.AdvancedTab',
 
335
            'Revert to the default OpenLP logo.'))
 
336
        self.x11GroupBox.setTitle(translate('OpenLP.AdvancedTab',
 
337
            'X11'))
 
338
        self.x11BypassCheckBox.setText(translate('OpenLP.AdvancedTab',
 
339
            'Bypass X11 Window Manager'))
 
340
        # Slide Limits
 
341
        self.slideGroupBox.setTitle(
 
342
            translate('OpenLP.GeneralTab', 'Service Item Slide Limits'))
 
343
        self.endSlideRadioButton.setText(
 
344
            translate('OpenLP.GeneralTab', '&End Slide'))
 
345
        self.endSlideLabel.setText(
 
346
            translate('OpenLP.GeneralTab', 'Up and down arrow keys '
 
347
            'stop at the top and bottom slides of each Service Item.'))
 
348
        self.wrapSlideRadioButton.setText(
 
349
            translate('OpenLP.GeneralTab', '&Wrap Slide'))
 
350
        self.wrapSlideLabel.setText(
 
351
            translate('OpenLP.GeneralTab', 'Up and down arrow keys '
 
352
            'wrap around at the top and bottom slides of each Service Item.'))
 
353
        self.nextItemRadioButton.setText(
 
354
            translate('OpenLP.GeneralTab', '&Next Item'))
 
355
        self.nextItemLabel.setText(
 
356
            translate('OpenLP.GeneralTab', 'Up and down arrow keys '
 
357
            'advance to the next or previous Service Item from the '
 
358
            'top and bottom slides of each Service Item.'))
 
359
 
 
360
    def load(self):
 
361
        """
 
362
        Load settings from disk.
 
363
        """
 
364
        settings = QtCore.QSettings()
 
365
        settings.beginGroup(self.settingsSection)
 
366
        # The max recent files value does not have an interface and so never
 
367
        # gets actually stored in the settings therefore the default value of
 
368
        # 20 will always be used.
 
369
        self.recentSpinBox.setMaximum(QtCore.QSettings().value(
 
370
            u'max recent files', QtCore.QVariant(20)).toInt()[0])
 
371
        self.recentSpinBox.setValue(settings.value(u'recent file count',
 
372
            QtCore.QVariant(4)).toInt()[0])
 
373
        self.mediaPluginCheckBox.setChecked(
 
374
            settings.value(u'save current plugin',
 
375
            QtCore.QVariant(False)).toBool())
 
376
        self.doubleClickLiveCheckBox.setChecked(
 
377
            settings.value(u'double click live',
 
378
            QtCore.QVariant(False)).toBool())
 
379
        self.singleClickPreviewCheckBox.setChecked(
 
380
            settings.value(u'single click preview',
 
381
            QtCore.QVariant(False)).toBool())
 
382
        self.expandServiceItemCheckBox.setChecked(
 
383
            settings.value(u'expand service item',
 
384
            QtCore.QVariant(False)).toBool())
 
385
        self.enableAutoCloseCheckBox.setChecked(
 
386
            settings.value(u'enable exit confirmation',
 
387
            QtCore.QVariant(True)).toBool())
 
388
        self.hideMouseCheckBox.setChecked(
 
389
            settings.value(u'hide mouse', QtCore.QVariant(False)).toBool())
 
390
        self.serviceNameDay.setCurrentIndex(
 
391
            settings.value(u'default service day',
 
392
            QtCore.QVariant(self.defaultServiceDay)).toInt()[0])
 
393
        self.serviceNameTime.setTime(QtCore.QTime(
 
394
            settings.value(u'default service hour',
 
395
            self.defaultServiceHour).toInt()[0],
 
396
            settings.value(u'default service minute',
 
397
            self.defaultServiceMinute).toInt()[0]))
 
398
        self.shouldUpdateServiceNameExample = True
 
399
        self.serviceNameEdit.setText(settings.value(u'default service name',
 
400
            self.defaultServiceName).toString())
 
401
        default_service_enabled = settings.value(u'default service enabled',
 
402
            QtCore.QVariant(True)).toBool()
 
403
        self.serviceNameCheckBox.setChecked(default_service_enabled)
 
404
        self.serviceNameCheckBoxToggled(default_service_enabled)
 
405
        self.x11BypassCheckBox.setChecked(
 
406
            settings.value(u'x11 bypass wm', QtCore.QVariant(True)).toBool())
 
407
        self.defaultColor = settings.value(u'default color',
 
408
            QtCore.QVariant(u'#ffffff')).toString()
 
409
        self.defaultFileEdit.setText(settings.value(u'default image',
 
410
            QtCore.QVariant(u':/graphics/openlp-splash-screen.png'))\
 
411
            .toString())
 
412
        self.slide_limits = settings.value(
 
413
            u'slide limits', QtCore.QVariant(SlideLimits.End)).toInt()[0]
 
414
        if self.slide_limits == SlideLimits.End:
 
415
            self.endSlideRadioButton.setChecked(True)
 
416
        elif self.slide_limits == SlideLimits.Wrap:
 
417
            self.wrapSlideRadioButton.setChecked(True)
 
418
        else:
 
419
            self.nextItemRadioButton.setChecked(True)
 
420
        settings.endGroup()
 
421
        self.defaultColorButton.setStyleSheet(
 
422
            u'background-color: %s' % self.defaultColor)
 
423
 
 
424
    def save(self):
 
425
        """
 
426
        Save settings to disk.
 
427
        """
 
428
        settings = QtCore.QSettings()
 
429
        settings.beginGroup(self.settingsSection)
 
430
        settings.setValue(u'default service enabled',
 
431
            self.serviceNameCheckBox.isChecked())
 
432
        service_name = unicode(self.serviceNameEdit.text())
 
433
        preset_is_valid = self.generateServiceNameExample()[0]
 
434
        if service_name == self.defaultServiceName or not preset_is_valid:
 
435
            settings.remove(u'default service name')
 
436
            self.serviceNameEdit.setText(service_name)
 
437
        else:
 
438
            settings.setValue(u'default service name', service_name)
 
439
        settings.setValue(u'default service day',
 
440
            self.serviceNameDay.currentIndex())
 
441
        settings.setValue(u'default service hour',
 
442
            self.serviceNameTime.time().hour())
 
443
        settings.setValue(u'default service minute',
 
444
            self.serviceNameTime.time().minute())
 
445
        settings.setValue(u'recent file count',
 
446
            QtCore.QVariant(self.recentSpinBox.value()))
 
447
        settings.setValue(u'save current plugin',
 
448
            QtCore.QVariant(self.mediaPluginCheckBox.isChecked()))
 
449
        settings.setValue(u'double click live',
 
450
            QtCore.QVariant(self.doubleClickLiveCheckBox.isChecked()))
 
451
        settings.setValue(u'single click preview',
 
452
            QtCore.QVariant(self.singleClickPreviewCheckBox.isChecked()))
 
453
        settings.setValue(u'expand service item',
 
454
            QtCore.QVariant(self.expandServiceItemCheckBox.isChecked()))
 
455
        settings.setValue(u'enable exit confirmation',
 
456
            QtCore.QVariant(self.enableAutoCloseCheckBox.isChecked()))
 
457
        settings.setValue(u'hide mouse',
 
458
            QtCore.QVariant(self.hideMouseCheckBox.isChecked()))
 
459
        settings.setValue(u'x11 bypass wm',
 
460
            QtCore.QVariant(self.x11BypassCheckBox.isChecked()))
 
461
        settings.setValue(u'default color', self.defaultColor)
 
462
        settings.setValue(u'default image', self.defaultFileEdit.text())
 
463
        settings.setValue(u'slide limits', QtCore.QVariant(self.slide_limits))
 
464
        settings.endGroup()
 
465
        if self.displayChanged:
 
466
            Receiver.send_message(u'config_screen_changed')
 
467
            self.displayChanged = False
 
468
        Receiver.send_message(u'slidecontroller_update_slide_limits')
 
469
 
 
470
    def serviceNameCheckBoxToggled(self, default_service_enabled):
 
471
        self.serviceNameDay.setEnabled(default_service_enabled)
 
472
        time_enabled = default_service_enabled and \
 
473
            self.serviceNameDay.currentIndex() is not 7
 
474
        self.serviceNameTime.setEnabled(time_enabled)
 
475
        self.serviceNameEdit.setEnabled(default_service_enabled)
 
476
        self.serviceNameRevertButton.setEnabled(default_service_enabled)
 
477
 
 
478
    def generateServiceNameExample(self):
 
479
        preset_is_valid = True
 
480
        if self.serviceNameDay.currentIndex() == 7:
 
481
            time = datetime.now()
 
482
        else:
 
483
            now = datetime.now()
 
484
            day_delta = self.serviceNameDay.currentIndex() - now.weekday()
 
485
            if day_delta < 0:
 
486
                day_delta += 7
 
487
            time = now + timedelta(days=day_delta)
 
488
            time = time.replace(hour = self.serviceNameTime.time().hour(),
 
489
                minute = self.serviceNameTime.time().minute())
 
490
        try:
 
491
            service_name_example = time.strftime(unicode(
 
492
                self.serviceNameEdit.text()))
 
493
        except ValueError:
 
494
            preset_is_valid = False
 
495
            service_name_example = translate('OpenLP.AdvancedTab',
 
496
                'Syntax error.')
 
497
        return preset_is_valid, service_name_example
 
498
 
 
499
    def updateServiceNameExample(self, returned_value):
 
500
        if not self.shouldUpdateServiceNameExample:
 
501
            return
 
502
        name_example = self.generateServiceNameExample()[1]
 
503
        self.serviceNameExample.setText(name_example)
 
504
 
 
505
    def onServiceNameDayChanged(self, service_day):
 
506
        self.serviceNameTime.setEnabled(service_day is not 7)
 
507
        self.updateServiceNameExample(None)
 
508
 
 
509
    def onServiceNameRevertButtonPressed(self):
 
510
        self.serviceNameEdit.setText(self.defaultServiceName)
 
511
        self.serviceNameEdit.setFocus()
 
512
 
 
513
    def onDefaultColorButtonPressed(self):
 
514
        new_color = QtGui.QColorDialog.getColor(
 
515
            QtGui.QColor(self.defaultColor), self)
 
516
        if new_color.isValid():
 
517
            self.defaultColor = new_color.name()
 
518
            self.defaultColorButton.setStyleSheet(
 
519
                u'background-color: %s' % self.defaultColor)
 
520
 
 
521
    def onDefaultBrowseButtonPressed(self):
 
522
        file_filters = u'%s;;%s (*.*) (*)' % (get_images_filter(),
 
523
            UiStrings().AllFiles)
 
524
        filename = QtGui.QFileDialog.getOpenFileName(self,
 
525
            translate('OpenLP.AdvancedTab', 'Open File'), '',
 
526
            file_filters)
 
527
        if filename:
 
528
            self.defaultFileEdit.setText(filename)
 
529
        self.defaultFileEdit.setFocus()
 
530
 
 
531
    def onDefaultRevertButtonPressed(self):
 
532
        self.defaultFileEdit.setText(u':/graphics/openlp-splash-screen.png')
 
533
        self.defaultFileEdit.setFocus()
 
534
 
 
535
    def onX11BypassCheckBoxToggled(self, checked):
 
536
        """
 
537
        Toggle X11 bypass flag on maindisplay depending on check box state.
 
538
 
 
539
        ``checked``
 
540
            The state of the check box (boolean).
 
541
        """
 
542
        self.displayChanged = True
 
543
 
 
544
    def onEndSlideButtonPressed(self):
 
545
        self.slide_limits = SlideLimits.End
 
546
 
 
547
    def onWrapSlideButtonPressed(self):
 
548
        self.slide_limits = SlideLimits.Wrap
 
549
 
 
550
    def onnextItemButtonPressed(self):
 
551
        self.slide_limits = SlideLimits.Next