Merge lp:~raoul-snyman/openlp/bug-845692 into lp:openlp

Proposed by Raoul Snyman
Status: Merged
Merged at revision: 1891
Proposed branch: lp:~raoul-snyman/openlp/bug-845692
Merge into: lp:openlp
Diff against target: 769 lines (+294/-138)
9 files modified
openlp/core/lib/ui.py (+1/-0)
openlp/core/resources.py (+100/-60)
openlp/core/ui/generaltab.py (+10/-1)
openlp/core/ui/maindisplay.py (+38/-3)
openlp/core/ui/slidecontroller.py (+84/-14)
openlp/plugins/songs/lib/songstab.py (+48/-48)
resources/images/openlp-2.qrc (+1/-0)
scripts/resources.patch (+6/-6)
scripts/translation_utils.py (+6/-6)
To merge this branch: bzr merge lp:~raoul-snyman/openlp/bug-845692
Reviewer Review Type Date Requested Status
Meinert Jordan (community) Needs Fixing
Jonathan Corwin (community) Approve
Tim Bentley Pending
Review via email: mp+95794@code.launchpad.net

This proposal supersedes a proposal from 2012-02-25.

Commit message

Fixed bug #845692 by adding the missing features, including the ability to repeat the list of tracks, and the ability to move to a particular track via a convenient menu option.

Description of the change

Added in the missing features in the background audio for songs.

- option to start the song paused
- option to repeat list
- button to go to the next track
- time remaining counter
- list of tracks for easy access

To post a comment you must log in.
Revision history for this message
Tim Bentley (trb143) wrote : Posted in a previous version of this proposal

Wrong copyright in resources
424 is a comment ?

review: Needs Fixing
Revision history for this message
Tim Bentley (trb143) : Posted in a previous version of this proposal
review: Approve
Revision history for this message
Tim Bentley (trb143) : Posted in a previous version of this proposal
review: Approve
Revision history for this message
Jonathan Corwin (j-corwin) wrote : Posted in a previous version of this proposal

With the repeat track list turned off, I clicked next track when the last track was playing, and the music stopped playing. Fine.
However I then selected a different track via the menu, but it didn't play. I had to press the pause button twice before I heard anything.

review: Needs Fixing
Revision history for this message
Jonathan Corwin (j-corwin) :
review: Approve
Revision history for this message
Meinert Jordan (m2j) wrote :

511 - if slideHeight != 0:
512 + if not slideHeight:

I changed this in my cleanups tree as well, so I saw the conflict. When I changed this, It took me some while to figure out, what is right.

P.S.: I'm just about merging this tree into mine to resolve the conflicts.

Revision history for this message
Meinert Jordan (m2j) :
review: Needs Fixing

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'openlp/core/lib/ui.py'
2--- openlp/core/lib/ui.py 2011-12-27 10:33:55 +0000
3+++ openlp/core/lib/ui.py 2012-03-04 18:13:20 +0000
4@@ -93,6 +93,7 @@
5 self.New = translate('OpenLP.Ui', 'New')
6 self.NewService = translate('OpenLP.Ui', 'New Service')
7 self.NewTheme = translate('OpenLP.Ui', 'New Theme')
8+ self.NextTrack = translate('OpenLP.Ui', 'Next Track')
9 self.NFSs = translate('OpenLP.Ui', 'No File Selected', 'Singular')
10 self.NFSp = translate('OpenLP.Ui', 'No Files Selected', 'Plural')
11 self.NISs = translate('OpenLP.Ui', 'No Item Selected', 'Singular')
12
13=== modified file 'openlp/core/resources.py'
14--- openlp/core/resources.py 2012-01-29 21:22:20 +0000
15+++ openlp/core/resources.py 2012-03-04 18:13:20 +0000
16@@ -73947,6 +73947,40 @@
17 \x23\xab\xe7\xf3\xa3\xf9\x51\x3d\x6f\x64\xcd\x9a\x10\x42\xfc\x07\
18 \x7b\x2d\x6e\x9f\x2f\x2d\x37\x8c\x00\x00\x00\x00\x49\x45\x4e\x44\
19 \xae\x42\x60\x82\
20+\x00\x00\x01\xfa\
21+\x89\
22+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
23+\x00\x00\x10\x00\x00\x00\x10\x08\x04\x00\x00\x00\xb5\xfa\x37\xea\
24+\x00\x00\x00\x02\x73\x42\x49\x54\x08\x08\x55\xec\x46\x04\x00\x00\
25+\x00\x09\x70\x48\x59\x73\x00\x00\x01\xbb\x00\x00\x01\xbb\x01\x3a\
26+\xec\xe3\xe2\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\
27+\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\
28+\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x01\x79\x49\x44\x41\x54\
29+\x18\x19\x05\xc1\x41\x4b\x53\x01\x1c\x00\xf0\xff\x3b\xf5\x11\x0a\
30+\x3c\x75\x68\x1f\xc1\x4b\x5f\x20\x82\x52\xd7\x36\x19\xc3\x52\x48\
31+\x13\x95\xe4\x6d\x62\x4d\x93\xf9\x10\xbb\x55\x74\x0a\x22\xfa\x16\
32+\x1b\x65\xd0\x17\x08\x62\x50\x1e\x42\xbc\x78\x79\x19\xd5\x7a\x09\
33+\x3b\xac\x8d\x5f\xbf\x5f\x08\x21\xc4\x61\xe9\x20\xcb\xba\x9d\xbc\
34+\x93\x67\xdd\x83\xec\xb0\x24\x84\x10\x21\x44\x27\xd9\x4b\xdb\xc3\
35+\xa6\x2d\x1d\x1d\x5b\x9a\xda\xc3\xbd\xb4\x93\x08\x11\x62\x27\x69\
36+\xf7\x36\x3d\x72\xa4\xef\x9b\x13\x5f\x1d\xd9\xb6\xa9\xdd\xdb\x49\
37+\x44\x88\x56\xba\xee\xb9\x2f\xbe\x1b\xf8\xeb\x42\xe1\x87\x53\xcf\
38+\xac\x6b\xa5\x22\xd2\xd2\xc6\xb0\xe5\xd8\x7b\xbf\xfc\x33\x31\x31\
39+\x36\x52\x38\xb3\x65\x63\x98\x96\x62\x2d\x5b\xf2\xd1\x4f\x6f\xbd\
40+\x72\x0c\xd8\x54\x57\xe8\x5b\xb2\xb6\x1f\xcb\xdd\x15\x9f\x15\x5e\
41+\xda\xf5\xd0\x1b\x17\x58\x31\x6d\xe4\xdc\xaa\xe5\x6e\x2c\xe6\x2d\
42+\x7d\x03\x75\x15\xb7\xd5\x35\xf5\xcd\x9b\x32\x36\xb0\x6b\x31\x8f\
43+\x85\xbc\xe9\x58\x61\xda\x65\x97\x5c\x73\xc7\x27\xb7\x84\x89\xc2\
44+\x13\x0b\x79\x34\xba\x8b\xfa\x06\xae\xbb\xea\x8a\xa6\x3f\x28\x9b\
45+\x32\x36\x70\x5f\xa3\x1b\x8d\xac\xe2\x9d\x73\x37\xdd\xf0\x01\x70\
46+\xd7\xb4\x91\x13\x15\x8d\xfd\xa8\x97\xaa\xc3\x07\x4e\xbd\xf0\x1b\
47+\x00\x63\x85\x96\xea\xb0\x5e\x0a\x51\x4b\x67\x3d\x75\xa6\x30\x32\
48+\x36\x31\x36\x52\x78\x6d\x56\x2d\x15\x21\xe6\x93\x5a\x6f\xc6\xaa\
49+\xbe\x73\x03\x85\x81\x13\x4d\x33\x6a\xbd\xf9\x44\x84\x10\xb5\xa4\
50+\x92\x96\x87\x33\x16\x6c\x7b\xec\x9e\x19\xe5\x61\x25\xad\x25\x42\
51+\x84\x10\x42\x54\x4b\x95\xac\xdc\x9d\xcb\xe7\xf2\x72\xb7\x92\x55\
52+\x4b\x42\x08\xf1\x1f\x89\xdc\x66\xb7\x16\x84\x77\xf6\x00\x00\x00\
53+\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
54 \x00\x00\x02\x0f\
55 \x89\
56 \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
57@@ -82318,6 +82352,11 @@
58 \x00\x6d\
59 \x00\x65\x00\x64\x00\x69\x00\x61\x00\x5f\x00\x70\x00\x6c\x00\x61\x00\x79\x00\x62\x00\x61\x00\x63\x00\x6b\x00\x5f\x00\x73\x00\x74\
60 \x00\x61\x00\x72\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\
61+\x00\x17\
62+\x02\x02\x37\x87\
63+\x00\x6d\
64+\x00\x65\x00\x64\x00\x69\x00\x61\x00\x5f\x00\x70\x00\x6c\x00\x61\x00\x79\x00\x62\x00\x61\x00\x63\x00\x6b\x00\x5f\x00\x6e\x00\x65\
65+\x00\x78\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\
66 \x00\x0e\
67 \x09\x02\x2d\x47\
68 \x00\x73\
69@@ -82559,15 +82598,15 @@
70
71 qt_resource_struct = "\
72 \x00\x00\x00\x00\x00\x02\x00\x00\x00\x12\x00\x00\x00\x01\
73-\x00\x00\x00\xe6\x00\x02\x00\x00\x00\x06\x00\x00\x00\x82\
74-\x00\x00\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x7e\
75-\x00\x00\x00\xb4\x00\x02\x00\x00\x00\x03\x00\x00\x00\x7b\
76-\x00\x00\x00\xd6\x00\x02\x00\x00\x00\x14\x00\x00\x00\x67\
77-\x00\x00\x00\x2c\x00\x02\x00\x00\x00\x02\x00\x00\x00\x65\
78-\x00\x00\x00\x14\x00\x02\x00\x00\x00\x02\x00\x00\x00\x63\
79-\x00\x00\x00\xf4\x00\x02\x00\x00\x00\x05\x00\x00\x00\x5e\
80-\x00\x00\x01\x2e\x00\x02\x00\x00\x00\x09\x00\x00\x00\x55\
81-\x00\x00\x00\x8c\x00\x02\x00\x00\x00\x09\x00\x00\x00\x4c\
82+\x00\x00\x00\xe6\x00\x02\x00\x00\x00\x06\x00\x00\x00\x83\
83+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x7f\
84+\x00\x00\x00\xb4\x00\x02\x00\x00\x00\x03\x00\x00\x00\x7c\
85+\x00\x00\x00\xd6\x00\x02\x00\x00\x00\x14\x00\x00\x00\x68\
86+\x00\x00\x00\x2c\x00\x02\x00\x00\x00\x02\x00\x00\x00\x66\
87+\x00\x00\x00\x14\x00\x02\x00\x00\x00\x02\x00\x00\x00\x64\
88+\x00\x00\x00\xf4\x00\x02\x00\x00\x00\x05\x00\x00\x00\x5f\
89+\x00\x00\x01\x2e\x00\x02\x00\x00\x00\x09\x00\x00\x00\x56\
90+\x00\x00\x00\x8c\x00\x02\x00\x00\x00\x0a\x00\x00\x00\x4c\
91 \x00\x00\x00\xc4\x00\x02\x00\x00\x00\x03\x00\x00\x00\x49\
92 \x00\x00\x00\x3c\x00\x02\x00\x00\x00\x10\x00\x00\x00\x39\
93 \x00\x00\x00\x62\x00\x02\x00\x00\x00\x03\x00\x00\x00\x36\
94@@ -82582,23 +82621,23 @@
95 \x00\x00\x03\xec\x00\x00\x00\x00\x00\x01\x00\x05\x65\x6d\
96 \x00\x00\x04\x1a\x00\x00\x00\x00\x00\x01\x00\x08\x06\x4f\
97 \x00\x00\x03\xbc\x00\x00\x00\x00\x00\x01\x00\x02\xc4\x8b\
98-\x00\x00\x0e\xf8\x00\x00\x00\x00\x00\x01\x00\x13\x7d\x14\
99-\x00\x00\x0f\x68\x00\x00\x00\x00\x00\x01\x00\x13\x84\x5f\
100-\x00\x00\x0e\xa8\x00\x00\x00\x00\x00\x01\x00\x13\x77\xb8\
101-\x00\x00\x10\x46\x00\x00\x00\x00\x00\x01\x00\x13\x96\xdd\
102-\x00\x00\x0f\xc8\x00\x00\x00\x00\x00\x01\x00\x13\x8c\x75\
103-\x00\x00\x0e\x50\x00\x00\x00\x00\x00\x01\x00\x13\x70\x81\
104-\x00\x00\x10\x98\x00\x00\x00\x00\x00\x01\x00\x13\x9c\xe4\
105-\x00\x00\x0f\x90\x00\x00\x00\x00\x00\x01\x00\x13\x87\xd3\
106-\x00\x00\x10\xe6\x00\x00\x00\x00\x00\x01\x00\x13\xa2\x10\
107-\x00\x00\x0e\x7a\x00\x00\x00\x00\x00\x01\x00\x13\x73\x1f\
108-\x00\x00\x10\x72\x00\x00\x00\x00\x00\x01\x00\x13\x9a\x10\
109-\x00\x00\x10\x1c\x00\x00\x00\x00\x00\x01\x00\x13\x94\x65\
110-\x00\x00\x0e\xce\x00\x00\x00\x00\x00\x01\x00\x13\x7a\x92\
111-\x00\x00\x10\xc2\x00\x00\x00\x00\x00\x01\x00\x13\x9f\xc9\
112-\x00\x00\x0f\xf0\x00\x00\x00\x00\x00\x01\x00\x13\x8f\xba\
113-\x00\x00\x0f\x44\x00\x00\x00\x00\x00\x01\x00\x13\x81\x62\
114-\x00\x00\x0f\x1e\x00\x00\x00\x00\x00\x01\x00\x13\x7f\x4b\
115+\x00\x00\x0f\x2c\x00\x00\x00\x00\x00\x01\x00\x13\x7f\x12\
116+\x00\x00\x0f\x9c\x00\x00\x00\x00\x00\x01\x00\x13\x86\x5d\
117+\x00\x00\x0e\xdc\x00\x00\x00\x00\x00\x01\x00\x13\x79\xb6\
118+\x00\x00\x10\x7a\x00\x00\x00\x00\x00\x01\x00\x13\x98\xdb\
119+\x00\x00\x0f\xfc\x00\x00\x00\x00\x00\x01\x00\x13\x8e\x73\
120+\x00\x00\x0e\x84\x00\x00\x00\x00\x00\x01\x00\x13\x72\x7f\
121+\x00\x00\x10\xcc\x00\x00\x00\x00\x00\x01\x00\x13\x9e\xe2\
122+\x00\x00\x0f\xc4\x00\x00\x00\x00\x00\x01\x00\x13\x89\xd1\
123+\x00\x00\x11\x1a\x00\x00\x00\x00\x00\x01\x00\x13\xa4\x0e\
124+\x00\x00\x0e\xae\x00\x00\x00\x00\x00\x01\x00\x13\x75\x1d\
125+\x00\x00\x10\xa6\x00\x00\x00\x00\x00\x01\x00\x13\x9c\x0e\
126+\x00\x00\x10\x50\x00\x00\x00\x00\x00\x01\x00\x13\x96\x63\
127+\x00\x00\x0f\x02\x00\x00\x00\x00\x00\x01\x00\x13\x7c\x90\
128+\x00\x00\x10\xf6\x00\x00\x00\x00\x00\x01\x00\x13\xa1\xc7\
129+\x00\x00\x10\x24\x00\x00\x00\x00\x00\x01\x00\x13\x91\xb8\
130+\x00\x00\x0f\x78\x00\x00\x00\x00\x00\x01\x00\x13\x83\x60\
131+\x00\x00\x0f\x52\x00\x00\x00\x00\x00\x01\x00\x13\x81\x49\
132 \x00\x00\x03\x66\x00\x00\x00\x00\x00\x01\x00\x00\x21\x92\
133 \x00\x00\x0b\x44\x00\x00\x00\x00\x00\x01\x00\x11\xef\x19\
134 \x00\x00\x0b\xc4\x00\x00\x00\x00\x00\x01\x00\x11\xf5\xdf\
135@@ -82611,37 +82650,38 @@
136 \x00\x00\x01\x5c\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
137 \x00\x00\x01\xc2\x00\x00\x00\x00\x00\x01\x00\x00\x05\xe6\
138 \x00\x00\x01\x8e\x00\x00\x00\x00\x00\x01\x00\x00\x02\xfe\
139-\x00\x00\x0d\xa0\x00\x00\x00\x00\x00\x01\x00\x12\x11\xfa\
140-\x00\x00\x0d\xca\x00\x00\x00\x00\x00\x01\x00\x12\x1b\x86\
141-\x00\x00\x0d\xfa\x00\x00\x00\x00\x00\x01\x00\x12\x8a\xcb\
142-\x00\x00\x0e\x1a\x00\x00\x00\x00\x00\x01\x00\x12\x91\x7c\
143-\x00\x00\x11\x68\x00\x00\x00\x00\x00\x01\x00\x13\xa9\x24\
144-\x00\x00\x11\x0e\x00\x00\x00\x00\x00\x01\x00\x13\xa4\x23\
145-\x00\x00\x13\x86\x00\x00\x00\x00\x00\x01\x00\x13\xce\x33\
146-\x00\x00\x11\xda\x00\x00\x00\x00\x00\x01\x00\x13\xaf\xb1\
147-\x00\x00\x11\x34\x00\x00\x00\x00\x00\x01\x00\x13\xa7\x54\
148-\x00\x00\x12\xd8\x00\x00\x00\x00\x00\x01\x00\x13\xbf\x0e\
149-\x00\x00\x12\x76\x00\x00\x00\x00\x00\x01\x00\x13\xb6\xde\
150-\x00\x00\x13\xac\x00\x00\x00\x00\x00\x01\x00\x13\xd1\x15\
151-\x00\x00\x13\x52\x00\x00\x00\x00\x00\x01\x00\x13\xca\x56\
152-\x00\x00\x12\xa2\x00\x00\x00\x00\x00\x01\x00\x13\xbb\xea\
153-\x00\x00\x13\xde\x00\x00\x00\x00\x00\x01\x00\x13\xd4\xd2\
154-\x00\x00\x11\xaa\x00\x00\x00\x00\x00\x01\x00\x13\xac\x77\
155-\x00\x00\x12\xfa\x00\x00\x00\x00\x00\x01\x00\x13\xc3\x7d\
156-\x00\x00\x12\x3e\x00\x00\x00\x00\x00\x01\x00\x13\xb4\x68\
157-\x00\x00\x13\x28\x00\x00\x00\x00\x00\x01\x00\x13\xc7\xce\
158-\x00\x00\x12\x08\x00\x00\x00\x00\x00\x01\x00\x13\xb1\xb8\
159+\x00\x00\x0d\xd4\x00\x00\x00\x00\x00\x01\x00\x12\x13\xf8\
160+\x00\x00\x0d\xfe\x00\x00\x00\x00\x00\x01\x00\x12\x1d\x84\
161+\x00\x00\x0e\x2e\x00\x00\x00\x00\x00\x01\x00\x12\x8c\xc9\
162+\x00\x00\x0e\x4e\x00\x00\x00\x00\x00\x01\x00\x12\x93\x7a\
163+\x00\x00\x11\x9c\x00\x00\x00\x00\x00\x01\x00\x13\xab\x22\
164+\x00\x00\x11\x42\x00\x00\x00\x00\x00\x01\x00\x13\xa6\x21\
165+\x00\x00\x13\xba\x00\x00\x00\x00\x00\x01\x00\x13\xd0\x31\
166+\x00\x00\x12\x0e\x00\x00\x00\x00\x00\x01\x00\x13\xb1\xaf\
167+\x00\x00\x11\x68\x00\x00\x00\x00\x00\x01\x00\x13\xa9\x52\
168+\x00\x00\x13\x0c\x00\x00\x00\x00\x00\x01\x00\x13\xc1\x0c\
169+\x00\x00\x12\xaa\x00\x00\x00\x00\x00\x01\x00\x13\xb8\xdc\
170+\x00\x00\x13\xe0\x00\x00\x00\x00\x00\x01\x00\x13\xd3\x13\
171+\x00\x00\x13\x86\x00\x00\x00\x00\x00\x01\x00\x13\xcc\x54\
172+\x00\x00\x12\xd6\x00\x00\x00\x00\x00\x01\x00\x13\xbd\xe8\
173+\x00\x00\x14\x12\x00\x00\x00\x00\x00\x01\x00\x13\xd6\xd0\
174+\x00\x00\x11\xde\x00\x00\x00\x00\x00\x01\x00\x13\xae\x75\
175+\x00\x00\x13\x2e\x00\x00\x00\x00\x00\x01\x00\x13\xc5\x7b\
176+\x00\x00\x12\x72\x00\x00\x00\x00\x00\x01\x00\x13\xb6\x66\
177+\x00\x00\x13\x5c\x00\x00\x00\x00\x00\x01\x00\x13\xc9\xcc\
178+\x00\x00\x12\x3c\x00\x00\x00\x00\x00\x01\x00\x13\xb3\xb6\
179 \x00\x00\x0a\x10\x00\x00\x00\x00\x00\x01\x00\x0e\xec\xf7\
180 \x00\x00\x0a\x30\x00\x00\x00\x00\x00\x01\x00\x0e\xf0\xd4\
181 \x00\x00\x09\xea\x00\x00\x00\x00\x00\x01\x00\x0e\xea\x59\
182-\x00\x00\x0d\x1c\x00\x00\x00\x00\x00\x01\x00\x12\x0b\x3d\
183-\x00\x00\x0d\x76\x00\x00\x00\x00\x00\x01\x00\x12\x0f\xf6\
184+\x00\x00\x0c\xb2\x00\x00\x00\x00\x00\x01\x00\x12\x02\xc6\
185+\x00\x00\x0d\x50\x00\x00\x00\x00\x00\x01\x00\x12\x0d\x3b\
186+\x00\x00\x0d\xaa\x00\x00\x00\x00\x00\x01\x00\x12\x11\xf4\
187 \x00\x00\x0c\x48\x00\x00\x00\x00\x00\x01\x00\x11\xfe\xd6\
188-\x00\x00\x0c\xf8\x00\x00\x00\x00\x00\x01\x00\x12\x08\x0a\
189+\x00\x00\x0d\x2c\x00\x00\x00\x00\x00\x01\x00\x12\x0a\x08\
190 \x00\x00\x0c\x7c\x00\x00\x00\x00\x00\x01\x00\x12\x00\xcd\
191-\x00\x00\x0c\xb2\x00\x00\x00\x00\x00\x01\x00\x12\x02\xc6\
192-\x00\x00\x0c\xd4\x00\x00\x00\x00\x00\x01\x00\x12\x04\xd9\
193-\x00\x00\x0d\x52\x00\x00\x00\x00\x00\x01\x00\x12\x0d\x25\
194+\x00\x00\x0c\xe6\x00\x00\x00\x00\x00\x01\x00\x12\x04\xc4\
195+\x00\x00\x0d\x08\x00\x00\x00\x00\x00\x01\x00\x12\x06\xd7\
196+\x00\x00\x0d\x86\x00\x00\x00\x00\x00\x01\x00\x12\x0f\x23\
197 \x00\x00\x0c\x20\x00\x00\x00\x00\x00\x01\x00\x11\xfc\x1a\
198 \x00\x00\x02\xee\x00\x00\x00\x00\x00\x01\x00\x00\x1b\x20\
199 \x00\x00\x02\x72\x00\x00\x00\x00\x00\x01\x00\x00\x11\xc5\
200@@ -82657,10 +82697,10 @@
201 \x00\x00\x04\xb8\x00\x00\x00\x00\x00\x01\x00\x0d\x50\x06\
202 \x00\x00\x05\x52\x00\x00\x00\x00\x00\x01\x00\x0d\x56\x1f\
203 \x00\x00\x05\x20\x00\x00\x00\x00\x00\x01\x00\x0d\x54\x57\
204-\x00\x00\x14\x46\x00\x00\x00\x00\x00\x01\x00\x13\xde\x06\
205-\x00\x00\x14\x7a\x00\x00\x00\x00\x00\x01\x00\x13\xe0\xd6\
206-\x00\x00\x14\x02\x00\x00\x00\x00\x00\x01\x00\x13\xd8\x85\
207-\x00\x00\x14\x26\x00\x00\x00\x00\x00\x01\x00\x13\xdb\x83\
208+\x00\x00\x14\x7a\x00\x00\x00\x00\x00\x01\x00\x13\xe0\x04\
209+\x00\x00\x14\xae\x00\x00\x00\x00\x00\x01\x00\x13\xe2\xd4\
210+\x00\x00\x14\x36\x00\x00\x00\x00\x00\x01\x00\x13\xda\x83\
211+\x00\x00\x14\x5a\x00\x00\x00\x00\x00\x01\x00\x13\xdd\x81\
212 \x00\x00\x06\xde\x00\x00\x00\x00\x00\x01\x00\x0e\xaa\x8e\
213 \x00\x00\x07\xc4\x00\x00\x00\x00\x00\x01\x00\x0e\xbb\x82\
214 \x00\x00\x09\xca\x00\x00\x00\x00\x00\x01\x00\x0e\xe6\x66\
215@@ -82684,10 +82724,10 @@
216 \x00\x00\x0a\x74\x00\x00\x00\x00\x00\x01\x00\x0e\xf7\xe1\
217 \x00\x00\x0a\x52\x00\x00\x00\x00\x00\x01\x00\x0e\xf4\x0e\
218 \x00\x00\x0a\xa6\x00\x00\x00\x00\x00\x01\x00\x11\xe5\x3f\
219-\x00\x00\x14\xaa\x00\x00\x00\x00\x00\x01\x00\x13\xe3\xcf\
220-\x00\x00\x15\x0c\x00\x00\x00\x00\x00\x01\x00\x13\xea\x45\
221-\x00\x00\x14\xde\x00\x00\x00\x00\x00\x01\x00\x13\xe7\x31\
222-\x00\x00\x15\x34\x00\x00\x00\x00\x00\x01\x00\x13\xec\xe3\
223+\x00\x00\x14\xde\x00\x00\x00\x00\x00\x01\x00\x13\xe5\xcd\
224+\x00\x00\x15\x40\x00\x00\x00\x00\x00\x01\x00\x13\xec\x43\
225+\x00\x00\x15\x12\x00\x00\x00\x00\x00\x01\x00\x13\xe9\x2f\
226+\x00\x00\x15\x68\x00\x00\x00\x00\x00\x01\x00\x13\xee\xe1\
227 \x00\x00\x06\x18\x00\x00\x00\x00\x00\x01\x00\x0d\x91\xaf\
228 \x00\x00\x05\xb8\x00\x00\x00\x00\x00\x01\x00\x0d\x62\x6f\
229 \x00\x00\x05\x88\x00\x00\x00\x00\x00\x01\x00\x0d\x57\xdb\
230
231=== modified file 'openlp/core/ui/generaltab.py'
232--- openlp/core/ui/generaltab.py 2012-02-06 13:28:16 +0000
233+++ openlp/core/ui/generaltab.py 2012-03-04 18:13:20 +0000
234@@ -175,6 +175,9 @@
235 self.startPausedCheckBox = QtGui.QCheckBox(self.audioGroupBox)
236 self.startPausedCheckBox.setObjectName(u'startPausedCheckBox')
237 self.audioLayout.addWidget(self.startPausedCheckBox)
238+ self.repeatListCheckBox = QtGui.QCheckBox(self.audioGroupBox)
239+ self.repeatListCheckBox.setObjectName(u'repeatListCheckBox')
240+ self.audioLayout.addWidget(self.repeatListCheckBox)
241 self.rightLayout.addWidget(self.audioGroupBox)
242 self.rightLayout.addStretch()
243 # Signals and slots
244@@ -251,6 +254,8 @@
245 translate('OpenLP.GeneralTab', 'Background Audio'))
246 self.startPausedCheckBox.setText(
247 translate('OpenLP.GeneralTab', 'Start background audio paused'))
248+ self.repeatListCheckBox.setText(
249+ translate('OpenLP.GeneralTab', 'Repeat track list'))
250
251 def load(self):
252 """
253@@ -298,6 +303,8 @@
254 QtCore.QVariant(self.screens.current[u'size'].width())).toInt()[0])
255 self.startPausedCheckBox.setChecked(settings.value(
256 u'audio start paused', QtCore.QVariant(True)).toBool())
257+ self.repeatListCheckBox.setChecked(settings.value(
258+ u'audio repeat list', QtCore.QVariant(False)).toBool())
259 settings.endGroup()
260 self.customXValueEdit.setEnabled(self.overrideCheckBox.isChecked())
261 self.customYValueEdit.setEnabled(self.overrideCheckBox.isChecked())
262@@ -350,7 +357,9 @@
263 QtCore.QVariant(self.overrideCheckBox.isChecked()))
264 settings.setValue(u'audio start paused',
265 QtCore.QVariant(self.startPausedCheckBox.isChecked()))
266- settings.endGroup()
267+ settings.setValue(u'audio repeat list',
268+ QtCore.QVariant(self.repeatListCheckBox.isChecked()))
269+ settings.endGroup()
270 # On save update the screens as well
271 self.postSetUp(True)
272
273
274=== modified file 'openlp/core/ui/maindisplay.py'
275--- openlp/core/ui/maindisplay.py 2012-01-19 19:13:19 +0000
276+++ openlp/core/ui/maindisplay.py 2012-03-04 18:13:20 +0000
277@@ -30,7 +30,6 @@
278 """
279 import cgi
280 import logging
281-import os
282 import sys
283
284 from PyQt4 import QtCore, QtGui, QtWebKit, QtOpenGL
285@@ -136,12 +135,12 @@
286 QtCore.Qt.WindowStaysOnTopHint
287 if QtCore.QSettings().value(u'advanced/x11 bypass wm',
288 QtCore.QVariant(True)).toBool():
289- windowFlags = windowFlags | QtCore.Qt.X11BypassWindowManagerHint
290+ windowFlags |= QtCore.Qt.X11BypassWindowManagerHint
291 # FIXME: QtCore.Qt.SplashScreen is workaround to make display screen
292 # stay always on top on Mac OS X. For details see bug 906926.
293 # It needs more investigation to fix it properly.
294 if sys.platform == 'darwin':
295- windowFlags = windowFlags | QtCore.Qt.SplashScreen
296+ windowFlags |= QtCore.Qt.SplashScreen
297 self.setWindowFlags(windowFlags)
298 self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
299 self.setTransparency(True)
300@@ -493,11 +492,15 @@
301 QtCore.QObject.__init__(self, parent)
302 self.currentIndex = -1
303 self.playlist = []
304+ self.repeat = False
305 self.mediaObject = Phonon.MediaObject()
306+ self.mediaObject.setTickInterval(100)
307 self.audioObject = Phonon.AudioOutput(Phonon.VideoCategory)
308 Phonon.createPath(self.mediaObject, self.audioObject)
309 QtCore.QObject.connect(self.mediaObject,
310 QtCore.SIGNAL(u'aboutToFinish()'), self.onAboutToFinish)
311+ QtCore.QObject.connect(self.mediaObject,
312+ QtCore.SIGNAL(u'finished()'), self.onFinished)
313
314 def __del__(self):
315 """
316@@ -516,6 +519,14 @@
317 if len(self.playlist) > self.currentIndex:
318 self.mediaObject.enqueue(self.playlist[self.currentIndex])
319
320+ def onFinished(self):
321+ if self.repeat:
322+ log.debug(u'Repeat is enabled... here we go again!')
323+ self.mediaObject.clearQueue()
324+ self.mediaObject.clear()
325+ self.currentIndex = -1
326+ self.play()
327+
328 def connectVolumeSlider(self, slider):
329 slider.setAudioOutput(self.audioObject)
330
331@@ -563,3 +574,27 @@
332 for filename in filenames:
333 self.playlist.append(Phonon.MediaSource(filename))
334
335+ def next(self):
336+ if not self.repeat and self.currentIndex + 1 == len(self.playlist):
337+ return
338+ isPlaying = self.mediaObject.state() == Phonon.PlayingState
339+ self.currentIndex += 1
340+ if self.repeat and self.currentIndex == len(self.playlist):
341+ self.currentIndex = 0
342+ self.mediaObject.clearQueue()
343+ self.mediaObject.clear()
344+ self.mediaObject.enqueue(self.playlist[self.currentIndex])
345+ if isPlaying:
346+ self.mediaObject.play()
347+
348+ def goTo(self, index):
349+ isPlaying = self.mediaObject.state() == Phonon.PlayingState
350+ self.mediaObject.clearQueue()
351+ self.mediaObject.clear()
352+ self.currentIndex = index
353+ self.mediaObject.enqueue(self.playlist[self.currentIndex])
354+ if isPlaying:
355+ self.mediaObject.play()
356+
357+ def connectSlot(self, signal, slot):
358+ QtCore.QObject.connect(self.mediaObject, signal, slot)
359
360=== modified file 'openlp/core/ui/slidecontroller.py'
361--- openlp/core/ui/slidecontroller.py 2012-02-15 10:37:42 +0000
362+++ openlp/core/ui/slidecontroller.py 2012-03-04 18:13:20 +0000
363@@ -33,7 +33,7 @@
364 from PyQt4 import QtCore, QtGui
365
366 from openlp.core.lib import OpenLPToolbar, Receiver, ItemCapabilities, \
367- translate, build_icon, ServiceItem, build_html, PluginManager, ServiceItem
368+ translate, build_icon, build_html, PluginManager, ServiceItem
369 from openlp.core.lib.ui import UiStrings, shortcut_action
370 from openlp.core.lib import SlideLimits, ServiceItemAction
371 from openlp.core.ui import HideMode, MainDisplay, Display, ScreenList
372@@ -46,9 +46,10 @@
373 Customised version of QTableWidget which can respond to keyboard
374 events.
375 """
376- def __init__(self, parent=None, name=None):
377+ def __init__(self, parent=None):
378 QtGui.QTableWidget.__init__(self, parent.controller)
379
380+
381 class Controller(QtGui.QWidget):
382 """
383 Controller is a general controller widget.
384@@ -277,13 +278,48 @@
385 self.toolbar.addToolbarWidget(u'Song Menu', self.songMenu)
386 self.songMenu.setMenu(QtGui.QMenu(
387 translate('OpenLP.SlideController', 'Go To'), self.toolbar))
388- self.toolbar.makeWidgetsInvisible([u'Song Menu'])
389 # Stuff for items with background audio.
390- self.audioPauseItem = self.toolbar.addToolbarButton(
391- u'Pause Audio', u':/slides/media_playback_pause.png',
392- translate('OpenLP.SlideController', 'Pause audio.'),
393- self.onAudioPauseClicked, True)
394+ self.audioPauseItem = QtGui.QToolButton(self.toolbar)
395+ self.audioPauseItem.setIcon(
396+ QtGui.QIcon(u':/slides/media_playback_pause.png'))
397+ self.audioPauseItem.setText(translate('OpenLP.SlideController',
398+ 'Pause audio.'))
399+ self.audioPauseItem.setCheckable(True)
400+ self.toolbar.addToolbarWidget(u'Pause Audio', self.audioPauseItem)
401+ QtCore.QObject.connect(self.audioPauseItem,
402+ QtCore.SIGNAL(u'clicked(bool)'), self.onAudioPauseClicked)
403 self.audioPauseItem.setVisible(False)
404+ self.audioMenu = QtGui.QMenu(
405+ translate('OpenLP.SlideController', 'Background Audio'),
406+ self.toolbar)
407+ self.nextTrackItem = shortcut_action(self.audioMenu,
408+ u'nextTrackItem', [], self.onNextTrackClicked,
409+ u':/slides/media_playback_next.png',
410+ category=unicode(UiStrings().LiveToolbar))
411+ self.nextTrackItem.setText(
412+ translate('OpenLP.SlideController', 'Next Track'))
413+ self.audioMenu.addAction(self.nextTrackItem)
414+ self.trackMenu = self.audioMenu.addMenu(
415+ translate('OpenLP.SlideController', 'Tracks'))
416+ self.audioPauseItem.setPopupMode(QtGui.QToolButton.MenuButtonPopup)
417+ self.audioPauseItem.setMenu(self.audioMenu)
418+ self.audioTimeLabel = QtGui.QLabel(u' 00:00 ', self.toolbar)
419+ self.audioTimeLabel.setAlignment(
420+ QtCore.Qt.AlignCenter|QtCore.Qt.AlignHCenter)
421+ self.audioTimeLabel.setStyleSheet(
422+ u'background-color: palette(background); '
423+ u'border-top-color: palette(shadow); '
424+ u'border-left-color: palette(shadow); '
425+ u'border-bottom-color: palette(light); '
426+ u'border-right-color: palette(light); '
427+ u'border-radius: 3px; border-style: inset; '
428+ u'border-width: 1; font-family: monospace; margin: 2px;'
429+ )
430+ self.audioTimeLabel.setObjectName(u'audioTimeLabel')
431+ self.toolbar.addToolbarWidget(
432+ u'Time Remaining', self.audioTimeLabel)
433+ self.toolbar.makeWidgetsInvisible([u'Song Menu', u'Pause Audio',
434+ u'Time Remaining'])
435 # Screen preview area
436 self.previewFrame = QtGui.QFrame(self.splitter)
437 self.previewFrame.setGeometry(QtCore.QRect(0, 0, 300, 300 * self.ratio))
438@@ -544,7 +580,7 @@
439 # Reset the shortcut.
440 self.current_shortcut = u''
441
442- def setPreviewHotkeys(self, parent=None):
443+ def setPreviewHotkeys(self):
444 self.previousItem.setObjectName(u'previousItemPreview')
445 self.nextItem.setObjectName(u'nextItemPreview')
446 action_list = ActionList.get_instance()
447@@ -621,7 +657,7 @@
448 self.keypress_loop = True
449 keypressCommand = self.keypress_queue.popleft()
450 if keypressCommand == ServiceItemAction.Previous:
451- Receiver.send_message('servicemanager_previous_item', None)
452+ Receiver.send_message('servicemanager_previous_item')
453 elif keypressCommand == ServiceItemAction.PreviousLastSlide:
454 # Go to the last slide of the previous item
455 Receiver.send_message('servicemanager_previous_item', u'last slide')
456@@ -642,6 +678,8 @@
457 self.display.setup()
458 if self.isLive:
459 self.__addActionsToWidget(self.display)
460+ self.display.audioPlayer.connectSlot(
461+ QtCore.SIGNAL(u'tick(qint64)'), self.onAudioTimeRemaining)
462 # The SlidePreview's ratio.
463 try:
464 self.ratio = float(self.screens.current[u'size'].width()) / \
465@@ -653,7 +691,7 @@
466 self.previewDisplay.setup()
467 serviceItem = ServiceItem()
468 self.previewDisplay.webView.setHtml(build_html(serviceItem,
469- self.previewDisplay.screen, None, self.isLive, None,
470+ self.previewDisplay.screen, None, self.isLive,
471 plugins=PluginManager.get_instance().plugins))
472 self.mediaController.setup_display(self.previewDisplay)
473 if self.serviceItem:
474@@ -715,7 +753,7 @@
475 Adjusts the value of the ``delaySpinBox`` to the given one.
476 """
477 self.delaySpinBox.setValue(int(value))
478-
479+
480 def updateSlideLimits(self):
481 """
482 Updates the Slide Limits variable from the settings.
483@@ -860,10 +898,23 @@
484 self.display.audioPlayer.reset()
485 self.setAudioItemsVisibility(False)
486 self.audioPauseItem.setChecked(False)
487+ # If the current item has background audio
488 if self.serviceItem.is_capable(ItemCapabilities.HasBackgroundAudio):
489 log.debug(u'Starting to play...')
490 self.display.audioPlayer.addToPlaylist(
491 self.serviceItem.background_audio)
492+ self.trackMenu.clear()
493+ for counter in range(len(self.serviceItem.background_audio)):
494+ action = self.trackMenu.addAction(os.path.basename(
495+ self.serviceItem.background_audio[counter]))
496+ action.setData(counter)
497+ QtCore.QObject.connect(action,
498+ QtCore.SIGNAL(u'triggered(bool)'),
499+ self.onTrackTriggered)
500+ self.display.audioPlayer.repeat = QtCore.QSettings().value(
501+ self.parent().generalSettingsSection + \
502+ u'/audio repeat list',
503+ QtCore.QVariant(False)).toBool()
504 if QtCore.QSettings().value(
505 self.parent().generalSettingsSection + \
506 u'/audio start paused',
507@@ -915,7 +966,7 @@
508 self.slideList[unicode(row)] = row - 1
509 text.append(unicode(row))
510 self.previewListWidget.setItem(framenumber, 0, item)
511- if slideHeight != 0:
512+ if not slideHeight:
513 self.previewListWidget.setRowHeight(framenumber, slideHeight)
514 self.previewListWidget.setVerticalHeaderLabels(text)
515 if self.serviceItem.is_text():
516@@ -1117,7 +1168,7 @@
517 else:
518 Receiver.send_message(u'live_display_show')
519
520- def onSlideSelected(self, start=False):
521+ def onSlideSelected(self):
522 """
523 Slide selected in controller
524 """
525@@ -1313,7 +1364,12 @@
526 self.onToggleLoop()
527
528 def setAudioItemsVisibility(self, visible):
529- self.audioPauseItem.setVisible(visible)
530+ if visible:
531+ self.toolbar.makeWidgetsVisible(
532+ [u'Song Menu', u'Pause Audio', u'Time Remaining'])
533+ else:
534+ self.toolbar.makeWidgetsInvisible(
535+ [u'Song Menu', u'Pause Audio', u'Time Remaining'])
536
537 def onAudioPauseClicked(self, checked):
538 if not self.audioPauseItem.isVisible():
539@@ -1424,3 +1480,17 @@
540 return HideMode.Screen
541 else:
542 return None
543+
544+ def onNextTrackClicked(self):
545+ self.display.audioPlayer.next()
546+
547+ def onAudioTimeRemaining(self, time):
548+ seconds = self.display.audioPlayer.mediaObject.remainingTime() // 1000
549+ minutes = seconds // 60
550+ seconds %= 60
551+ self.audioTimeLabel.setText(u' %02d:%02d ' % (minutes, seconds))
552+
553+ def onTrackTriggered(self):
554+ action = self.sender()
555+ index = action.data().toInt()[0]
556+ self.display.audioPlayer.goTo(index)
557
558=== modified file 'openlp/plugins/songs/lib/songstab.py'
559--- openlp/plugins/songs/lib/songstab.py 2011-12-27 10:33:55 +0000
560+++ openlp/plugins/songs/lib/songstab.py 2012-03-04 18:13:20 +0000
561@@ -33,56 +33,56 @@
562 """
563 SongsTab is the Songs settings tab in the settings dialog.
564 """
565- def __init__(self, parent, title, visible_title, icon_path):
566- SettingsTab.__init__(self, parent, title, visible_title, icon_path)
567-
568 def setupUi(self):
569+ """
570+ Set up the configuration tab UI.
571+ """
572 self.setObjectName(u'SongsTab')
573 SettingsTab.setupUi(self)
574- self.SongsModeGroupBox = QtGui.QGroupBox(self.leftColumn)
575- self.SongsModeGroupBox.setObjectName(u'SongsModeGroupBox')
576- self.SongsModeLayout = QtGui.QVBoxLayout(self.SongsModeGroupBox)
577- self.SongsModeLayout.setObjectName(u'SongsModeLayout')
578- self.SearchAsTypeCheckBox = QtGui.QCheckBox(self.SongsModeGroupBox)
579- self.SearchAsTypeCheckBox.setObjectName(u'SearchAsTypeCheckBox')
580- self.SongsModeLayout.addWidget(self.SearchAsTypeCheckBox)
581- self.SongBarActiveCheckBox = QtGui.QCheckBox(self.SongsModeGroupBox)
582- self.SongBarActiveCheckBox.setObjectName(u'SongBarActiveCheckBox')
583- self.SongsModeLayout.addWidget(self.SongBarActiveCheckBox)
584- self.SongUpdateOnEditCheckBox = QtGui.QCheckBox(self.SongsModeGroupBox)
585- self.SongUpdateOnEditCheckBox.setObjectName(u'SongUpdateOnEditCheckBox')
586- self.SongsModeLayout.addWidget(self.SongUpdateOnEditCheckBox)
587- self.SongAddFromServiceCheckBox = QtGui.QCheckBox(
588- self.SongsModeGroupBox)
589- self.SongAddFromServiceCheckBox.setObjectName(
590- u'SongAddFromServiceCheckBox')
591- self.SongsModeLayout.addWidget(self.SongAddFromServiceCheckBox)
592- self.leftLayout.addWidget(self.SongsModeGroupBox)
593+ self.modeGroupBox = QtGui.QGroupBox(self.leftColumn)
594+ self.modeGroupBox.setObjectName(u'modeGroupBox')
595+ self.modeLayout = QtGui.QVBoxLayout(self.modeGroupBox)
596+ self.modeLayout.setObjectName(u'modeLayout')
597+ self.searchAsTypeCheckBox = QtGui.QCheckBox(self.modeGroupBox)
598+ self.searchAsTypeCheckBox.setObjectName(u'SearchAsTypeCheckBox')
599+ self.modeLayout.addWidget(self.searchAsTypeCheckBox)
600+ self.toolBarActiveCheckBox = QtGui.QCheckBox(self.modeGroupBox)
601+ self.toolBarActiveCheckBox.setObjectName(u'toolBarActiveCheckBox')
602+ self.modeLayout.addWidget(self.toolBarActiveCheckBox)
603+ self.updateOnEditCheckBox = QtGui.QCheckBox(self.modeGroupBox)
604+ self.updateOnEditCheckBox.setObjectName(u'updateOnEditCheckBox')
605+ self.modeLayout.addWidget(self.updateOnEditCheckBox)
606+ self.addFromServiceCheckBox = QtGui.QCheckBox(
607+ self.modeGroupBox)
608+ self.addFromServiceCheckBox.setObjectName(
609+ u'addFromServiceCheckBox')
610+ self.modeLayout.addWidget(self.addFromServiceCheckBox)
611+ self.leftLayout.addWidget(self.modeGroupBox)
612 self.leftLayout.addStretch()
613 self.rightLayout.addStretch()
614- QtCore.QObject.connect(self.SearchAsTypeCheckBox,
615+ QtCore.QObject.connect(self.searchAsTypeCheckBox,
616 QtCore.SIGNAL(u'stateChanged(int)'),
617 self.onSearchAsTypeCheckBoxChanged)
618- QtCore.QObject.connect(self.SongBarActiveCheckBox,
619- QtCore.SIGNAL(u'stateChanged(int)'),
620- self.onSongBarActiveCheckBoxChanged)
621- QtCore.QObject.connect(self.SongUpdateOnEditCheckBox,
622- QtCore.SIGNAL(u'stateChanged(int)'),
623- self.onSongUpdateOnEditCheckBoxChanged)
624- QtCore.QObject.connect(self.SongAddFromServiceCheckBox,
625- QtCore.SIGNAL(u'stateChanged(int)'),
626- self.onSongAddFromServiceCheckBoxChanged)
627+ QtCore.QObject.connect(self.toolBarActiveCheckBox,
628+ QtCore.SIGNAL(u'stateChanged(int)'),
629+ self.onToolBarActiveCheckBoxChanged)
630+ QtCore.QObject.connect(self.updateOnEditCheckBox,
631+ QtCore.SIGNAL(u'stateChanged(int)'),
632+ self.onUpdateOnEditCheckBoxChanged)
633+ QtCore.QObject.connect(self.addFromServiceCheckBox,
634+ QtCore.SIGNAL(u'stateChanged(int)'),
635+ self.onAddFromServiceCheckBoxChanged)
636
637 def retranslateUi(self):
638- self.SongsModeGroupBox.setTitle(
639+ self.modeGroupBox.setTitle(
640 translate('SongsPlugin.SongsTab', 'Songs Mode'))
641- self.SearchAsTypeCheckBox.setText(
642+ self.searchAsTypeCheckBox.setText(
643 translate('SongsPlugin.SongsTab', 'Enable search as you type'))
644- self.SongBarActiveCheckBox.setText(translate('SongsPlugin.SongsTab',
645+ self.toolBarActiveCheckBox.setText(translate('SongsPlugin.SongsTab',
646 'Display verses on live tool bar'))
647- self.SongUpdateOnEditCheckBox.setText(
648+ self.updateOnEditCheckBox.setText(
649 translate('SongsPlugin.SongsTab', 'Update service from song edit'))
650- self.SongAddFromServiceCheckBox.setText(
651+ self.addFromServiceCheckBox.setText(
652 translate('SongsPlugin.SongsTab',
653 'Add missing songs when opening service'))
654
655@@ -92,19 +92,19 @@
656 if check_state == QtCore.Qt.Checked:
657 self.song_search = True
658
659- def onSongBarActiveCheckBoxChanged(self, check_state):
660- self.song_bar = False
661+ def onToolBarActiveCheckBoxChanged(self, check_state):
662+ self.tool_bar = False
663 # we have a set value convert to True/False
664 if check_state == QtCore.Qt.Checked:
665- self.song_bar = True
666+ self.tool_bar = True
667
668- def onSongUpdateOnEditCheckBoxChanged(self, check_state):
669+ def onUpdateOnEditCheckBoxChanged(self, check_state):
670 self.update_edit = False
671 # we have a set value convert to True/False
672 if check_state == QtCore.Qt.Checked:
673 self.update_edit = True
674
675- def onSongAddFromServiceCheckBoxChanged(self, check_state):
676+ def onAddFromServiceCheckBoxChanged(self, check_state):
677 self.update_load = False
678 # we have a set value convert to True/False
679 if check_state == QtCore.Qt.Checked:
680@@ -115,23 +115,23 @@
681 settings.beginGroup(self.settingsSection)
682 self.song_search = settings.value(
683 u'search as type', QtCore.QVariant(False)).toBool()
684- self.song_bar = settings.value(
685+ self.tool_bar = settings.value(
686 u'display songbar', QtCore.QVariant(True)).toBool()
687 self.update_edit = settings.value(
688 u'update service on edit', QtCore.QVariant(False)).toBool()
689 self.update_load = settings.value(
690 u'add song from service', QtCore.QVariant(True)).toBool()
691- self.SearchAsTypeCheckBox.setChecked(self.song_search)
692- self.SongBarActiveCheckBox.setChecked(self.song_bar)
693- self.SongUpdateOnEditCheckBox.setChecked(self.update_edit)
694- self.SongAddFromServiceCheckBox.setChecked(self.update_load)
695+ self.searchAsTypeCheckBox.setChecked(self.song_search)
696+ self.toolBarActiveCheckBox.setChecked(self.tool_bar)
697+ self.updateOnEditCheckBox.setChecked(self.update_edit)
698+ self.addFromServiceCheckBox.setChecked(self.update_load)
699 settings.endGroup()
700
701 def save(self):
702 settings = QtCore.QSettings()
703 settings.beginGroup(self.settingsSection)
704 settings.setValue(u'search as type', QtCore.QVariant(self.song_search))
705- settings.setValue(u'display songbar', QtCore.QVariant(self.song_bar))
706+ settings.setValue(u'display songbar', QtCore.QVariant(self.tool_bar))
707 settings.setValue(u'update service on edit',
708 QtCore.QVariant(self.update_edit))
709 settings.setValue(u'add song from service',
710
711=== added file 'resources/images/media_playback_next.png'
712Binary files resources/images/media_playback_next.png 1970-01-01 00:00:00 +0000 and resources/images/media_playback_next.png 2012-03-04 18:13:20 +0000 differ
713=== modified file 'resources/images/openlp-2.qrc'
714--- resources/images/openlp-2.qrc 2012-01-29 21:22:20 +0000
715+++ resources/images/openlp-2.qrc 2012-03-04 18:13:20 +0000
716@@ -68,6 +68,7 @@
717 <file>media_playback_start.png</file>
718 <file>media_playback_stop.png</file>
719 <file>media_playback_pause.png</file>
720+ <file>media_playback_next.png</file>
721 </qresource>
722 <qresource prefix="icon">
723 <file>openlp-logo-16x16.png</file>
724
725=== modified file 'scripts/resources.patch'
726--- scripts/resources.patch 2011-05-24 20:47:05 +0000
727+++ scripts/resources.patch 2012-03-04 18:13:20 +0000
728@@ -12,12 +12,12 @@
729 +###############################################################################
730 +# OpenLP - Open Source Lyrics Projection #
731 +# --------------------------------------------------------------------------- #
732-+# Copyright (c) 2008-2011 Raoul Snyman #
733-+# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael #
734-+# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, #
735-+# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, #
736-+# Jeffrey Smith, Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode #
737-+# Woldsund #
738++# Copyright (c) 2008-2012 Raoul Snyman #
739++# Portions copyright (c) 2008-2012 Tim Bentley, Gerald Britton, Jonathan #
740++# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, #
741++# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias #
742++# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, #
743++# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund #
744 +# --------------------------------------------------------------------------- #
745 +# This program is free software; you can redistribute it and/or modify it #
746 +# under the terms of the GNU General Public License as published by the Free #
747
748=== modified file 'scripts/translation_utils.py'
749--- scripts/translation_utils.py 2012-02-11 18:02:33 +0000
750+++ scripts/translation_utils.py 2012-03-04 18:13:20 +0000
751@@ -5,12 +5,12 @@
752 ###############################################################################
753 # OpenLP - Open Source Lyrics Projection #
754 # --------------------------------------------------------------------------- #
755-# Copyright (c) 2008-2011 Raoul Snyman #
756-# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael #
757-# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, #
758-# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, #
759-# Jeffrey Smith, Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode #
760-# Woldsund #
761+# Copyright (c) 2008-2012 Raoul Snyman #
762+# Portions copyright (c) 2008-2012 Tim Bentley, Gerald Britton, Jonathan #
763+# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, #
764+# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias #
765+# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, #
766+# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund #
767 # --------------------------------------------------------------------------- #
768 # This program is free software; you can redistribute it and/or modify it #
769 # under the terms of the GNU General Public License as published by the Free #