Merge lp:~trb143/openlp/servicing into lp:openlp

Proposed by Tim Bentley
Status: Merged
Merged at revision: not available
Proposed branch: lp:~trb143/openlp/servicing
Merge into: lp:openlp
Diff against target: None lines
To merge this branch: bzr merge lp:~trb143/openlp/servicing
Reviewer Review Type Date Requested Status
Michael Gorven (community) Approve
Tim Bentley Approve
Raoul Snyman Approve
Review via email: mp+6161@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Tim Bentley (trb143) wrote :

Added buttons, paging and screen closure
Added more logging to tray and see why the 4 page screen was slow.
Cleanups and fixes.

Revision history for this message
Raoul Snyman (raoul-snyman) wrote :

 880 + self.PreviewController = SlideController(self.ControlSplitter, False)
 881 + self.LiveController = SlideController(self.ControlSplitter, True)

Just a note: I started naming things on forms before we had decided on a standard, so they're a little out of sync with the proper naming convention. I am cleaning them up in a cleanup branch, but just for reference, those two should probably be called "self.previewController"

 982 + self.Toolbar.addToolbarButton("Move to top", ":/services/service_top.png",
 983 + translate(u'ServiceManager', u'Move to start'), self.onServiceTop)

Not sure what the difference is between the first and second "move to top" strings is, but the first isn't u''

 966 - self.Layout = QtGui.QVBoxLayout(self)
 967 + self.Layout = QVBoxLayout(self)

Please rather use "from PyQt4 import QtCore, QtGui" as it pollutes the local namespace less. (I'm also cleaning this up in my local cleanup branch).

 970 self.Toolbar = OpenLPToolbar(self)
1002 + self.ThemeComboBox = QComboBox(self.Toolbar)
1004 + self.ThemeWidget = QWidgetAction(self.Toolbar)

As noted before, my bad, these should be camelCase not PascalCase - also busy cleaning up in my branch.

Apart from those few minor things, everything looks fine. I'll still have to see these things in action to get a real understanding of what's going on though...

review approve

review: Approve
Revision history for this message
Tim Bentley (trb143) :
review: Approve
Revision history for this message
Michael Gorven (mgorven) wrote :

Eric4 files are gone! Awesome branch! :-P

+ log.debug(u'build_text_rectangle ')
+ log.debug(u'generate preview ')

May I be extremely pedantic and ask why there are trailing spaces?

+ if self.displayBlank == False:

I prefer code like "if not self.displayBlank" (unless displayBlank could
legitimately be None and needs to be treated differently).

 review approve

review: Approve
Revision history for this message
Martin Thompson (mjthompson) wrote :

On Mon, May 04, 2009 at 06:35:06PM -0000 or thereabouts, Raoul Snyman wrote:
>
> 966 - self.Layout = QtGui.QVBoxLayout(self)
> 967 + self.Layout = QVBoxLayout(self)
>
> Please rather use "from PyQt4 import QtCore, QtGui" as it pollutes
> the local namespace less. (I'm also cleaning this up in my local
> cleanup branch).

If I can throw in my 2p worth here... it appears to me to be more
Qt-like to *not* prefix everything with the, and it certainly reduces
the amount of typing, and faffing around remembering whether something
is Core, or Gui.

In addition, I found that the endless prefixes got in the way of my
understanding of the code, which is why I stopped using them in my
later code (after I'd seen somewhere suggesting it - can't recall
where though). This might be (yet another) case of Tim getting the
blame for my coding - sorry!

From the point of view of namespace pollution, all the Qt calls have a
Q on the front to avoid collisions, and I think that's likely to be
pretty successful...

Anyway, that was my thinking when I started doing it, but I'll go with
the consensus in future!

--
<email address hidden>
  A man leaves his darkness when he follows the Son
      - The Great American Novel (Larry Norman)
%

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== added file '.bzrignore'
--- .bzrignore 1970-01-01 00:00:00 +0000
+++ .bzrignore 2009-05-04 08:56:46 +0000
@@ -0,0 +1,10 @@
1*.pyc
2*.*~
3*.log
4\#*\#
5*.eric4project
6*.ropeproject
7*.e4*
8.eric4project
9list
10openlp.org 2.0.e4*
011
=== removed file '.eric4project/openlp.org 2.0.e4q'
--- .eric4project/openlp.org 2.0.e4q 2009-05-03 15:35:34 +0000
+++ .eric4project/openlp.org 2.0.e4q 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE UserProject SYSTEM "UserProject-4.0.dtd">
3<!-- eric4 user project file for project openlp.org 2.0 -->
4<!-- Saved: 2009-05-03, 17:33:30 -->
5<!-- Copyright (C) 2009 Raoul Snyman, raoulsnyman@openlp.org -->
6<UserProject version="4.0">
7</UserProject>
8\ No newline at end of file0\ No newline at end of file
91
=== removed file '.eric4project/openlp.org 2.0.e4s'
--- .eric4project/openlp.org 2.0.e4s 2008-11-21 18:58:03 +0000
+++ .eric4project/openlp.org 2.0.e4s 1970-01-01 00:00:00 +0000
@@ -1,32 +0,0 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE Session SYSTEM "Session-4.0.dtd">
3<!-- eric4 session file for project openlp.org 2.0 -->
4<!-- This file was generated automatically, do not edit. -->
5<!-- Saved: 2008-11-03, 22:49:15 -->
6<Session version="4.0">
7 <Filenames>
8 <Filename cline="24" cindex="13">/home/raoul/Projects/openlp-2/openlp.pyw</Filename>
9 <Filename cline="30" cindex="0">/home/raoul/Projects/openlp-2/openlp/ui/forms/splashscreen.py</Filename>
10 <Filename cline="31" cindex="30">/home/raoul/Projects/openlp-2/openlp/ui/forms/mainwindow.py</Filename>
11 <Filename cline="22" cindex="53">/home/raoul/Projects/openlp-2/openlp/ui/forms/__init__.py</Filename>
12 </Filenames>
13 <ActiveWindow cline="24" cindex="13">/home/raoul/Projects/openlp-2/openlp.pyw</ActiveWindow>
14 <Breakpoints>
15 </Breakpoints>
16 <Watchpoints>
17 </Watchpoints>
18 <DebugInfo>
19 <CommandLine></CommandLine>
20 <WorkingDirectory></WorkingDirectory>
21 <Environment></Environment>
22 <ReportExceptions value="True" />
23 <Exceptions>
24 </Exceptions>
25 <AutoClearShell value="True" />
26 <TracePython value="False" />
27 <AutoContinue value="True" />
28 <CovexcPattern></CovexcPattern>
29 </DebugInfo>
30 <Bookmarks>
31 </Bookmarks>
32</Session>
33\ No newline at end of file0\ No newline at end of file
341
=== removed file '.eric4project/openlp.org 2.0.e4t'
--- .eric4project/openlp.org 2.0.e4t 2009-05-03 15:35:34 +0000
+++ .eric4project/openlp.org 2.0.e4t 1970-01-01 00:00:00 +0000
@@ -1,132 +0,0 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE Tasks SYSTEM "Tasks-4.2.dtd">
3<!-- eric4 tasks file for project openlp.org 2.0 -->
4<!-- Saved: 2009-05-03, 17:33:30 -->
5<Tasks version="4.2">
6 <Task priority="1" completed="False" bugfix="False">
7 <Summary>TODO: what is the tags for bridge, pre-chorus?</Summary>
8 <Description></Description>
9 <Created>2008-11-26, 21:10:45</Created>
10 <Resource>
11 <Filename>openlp/song/song.py</Filename>
12 <Linenumber>138</Linenumber>
13 </Resource>
14 </Task>
15 <Task priority="1" completed="False" bugfix="False">
16 <Summary>TODO: check font formatting</Summary>
17 <Description></Description>
18 <Created>2008-11-26, 21:10:45</Created>
19 <Resource>
20 <Filename>openlp/song/song.py</Filename>
21 <Linenumber>523</Linenumber>
22 </Resource>
23 </Task>
24 <Task priority="1" completed="False" bugfix="False">
25 <Summary>TODO: Song: Logging - not all, but enough</Summary>
26 <Description></Description>
27 <Created>2008-12-07, 10:06:59</Created>
28 <Resource>
29 <Filename>openlp/plugins/songs/songxml.py</Filename>
30 <Linenumber>39</Linenumber>
31 </Resource>
32 </Task>
33 <Task priority="1" completed="False" bugfix="False">
34 <Summary>TODO: Song: Handle OpenLP2 format</Summary>
35 <Description></Description>
36 <Created>2008-12-07, 10:06:59</Created>
37 <Resource>
38 <Filename>openlp/plugins/songs/songxml.py</Filename>
39 <Linenumber>40</Linenumber>
40 </Resource>
41 </Task>
42 <Task priority="1" completed="False" bugfix="False">
43 <Summary>TODO: Song: Import OpenLP1</Summary>
44 <Description></Description>
45 <Created>2008-12-07, 10:06:59</Created>
46 <Resource>
47 <Filename>openlp/plugins/songs/songxml.py</Filename>
48 <Linenumber>41</Linenumber>
49 </Resource>
50 </Task>
51 <Task priority="1" completed="False" bugfix="False">
52 <Summary>TODO: Song: Export OpenLP1</Summary>
53 <Description></Description>
54 <Created>2008-12-07, 10:07:00</Created>
55 <Resource>
56 <Filename>openlp/plugins/songs/songxml.py</Filename>
57 <Linenumber>42</Linenumber>
58 </Resource>
59 </Task>
60 <Task priority="1" completed="False" bugfix="False">
61 <Summary>TODO: Song: Export Song to CCLI</Summary>
62 <Description></Description>
63 <Created>2008-12-07, 10:07:00</Created>
64 <Resource>
65 <Filename>openlp/plugins/songs/songxml.py</Filename>
66 <Linenumber>43</Linenumber>
67 </Resource>
68 </Task>
69 <Task priority="1" completed="False" bugfix="False">
70 <Summary>TODO: Song: Export Song to OpenSong</Summary>
71 <Description></Description>
72 <Created>2008-12-07, 10:07:00</Created>
73 <Resource>
74 <Filename>openlp/plugins/songs/songxml.py</Filename>
75 <Linenumber>44</Linenumber>
76 </Resource>
77 </Task>
78 <Task priority="1" completed="False" bugfix="False">
79 <Summary>TODO: Song: Import ChangingSong</Summary>
80 <Description></Description>
81 <Created>2008-12-07, 10:07:00</Created>
82 <Resource>
83 <Filename>openlp/plugins/songs/songxml.py</Filename>
84 <Linenumber>45</Linenumber>
85 </Resource>
86 </Task>
87 <Task priority="1" completed="False" bugfix="False">
88 <Summary>TODO: Song: Export ChangingSong</Summary>
89 <Description></Description>
90 <Created>2008-12-07, 10:07:00</Created>
91 <Resource>
92 <Filename>openlp/plugins/songs/songxml.py</Filename>
93 <Linenumber>46</Linenumber>
94 </Resource>
95 </Task>
96 <Task priority="1" completed="False" bugfix="False">
97 <Summary>TODO: what is the tags for bridge, pre-chorus?</Summary>
98 <Description></Description>
99 <Created>2008-12-07, 10:07:00</Created>
100 <Resource>
101 <Filename>openlp/plugins/songs/songxml.py</Filename>
102 <Linenumber>149</Linenumber>
103 </Resource>
104 </Task>
105 <Task priority="1" completed="False" bugfix="False">
106 <Summary>TODO: check font formatting</Summary>
107 <Description></Description>
108 <Created>2008-12-07, 10:07:00</Created>
109 <Resource>
110 <Filename>openlp/plugins/songs/songxml.py</Filename>
111 <Linenumber>534</Linenumber>
112 </Resource>
113 </Task>
114 <Task priority="1" completed="False" bugfix="False">
115 <Summary>TODO: need to get rid of this once all plugins are up to date</Summary>
116 <Description></Description>
117 <Created>2009-03-01, 01:10:29</Created>
118 <Resource>
119 <Filename>openlp/core/pluginmanager.py</Filename>
120 <Linenumber>86</Linenumber>
121 </Resource>
122 </Task>
123 <Task priority="1" completed="False" bugfix="False">
124 <Summary>TODO: These shouldn't be called here...</Summary>
125 <Description></Description>
126 <Created>2009-03-01, 01:10:29</Created>
127 <Resource>
128 <Filename>openlp/core/pluginmanager.py</Filename>
129 <Linenumber>108</Linenumber>
130 </Resource>
131 </Task>
132</Tasks>
133\ No newline at end of file0\ No newline at end of file
1341
=== removed file '.gitignore'
--- .gitignore 2009-02-14 08:33:32 +0000
+++ .gitignore 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
1*.pyc
2*.*~
3*.log
4\#*\#
5*.eric4project
6*.ropeproject
7*.e4*
80
=== removed file 'openlp.org 2.0.e4p'
--- openlp.org 2.0.e4p 2009-05-01 22:26:43 +0000
+++ openlp.org 2.0.e4p 1970-01-01 00:00:00 +0000
@@ -1,330 +0,0 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE Project SYSTEM "Project-4.6.dtd">
3<!-- eric4 project file for project openlp.org 2.0 -->
4<!-- Saved: 2009-05-02, 00:15:57 -->
5<!-- Copyright (C) 2009 Raoul Snyman, raoulsnyman@openlp.org -->
6<Project version="4.6">
7 <Language>en</Language>
8 <ProgLanguage mixed="0">Python</ProgLanguage>
9 <ProjectType>Qt4</ProjectType>
10 <Description></Description>
11 <Version>1.9.0</Version>
12 <Author>Raoul Snyman</Author>
13 <Email>raoulsnyman@openlp.org</Email>
14 <Sources>
15 <Source>openlp.pyw</Source>
16 <Source>openlp/controls/__init__.py</Source>
17 <Source>openlp/core/test/test_render_theme.py</Source>
18 <Source>openlp/core/test/test_render.py</Source>
19 <Source>openlp/core/__init__.py</Source>
20 <Source>openlp/__init__.py</Source>
21 <Source>demo.py</Source>
22 <Source>openlp/core/settingsmanager.py</Source>
23 <Source>openlp/plugins/__init__.py</Source>
24 <Source>openlp/core/ui/__init__.py</Source>
25 <Source>openlp/core/ui/mainwindow.py</Source>
26 <Source>openlp/core/ui/splashscreen.py</Source>
27 <Source>openlp/core/ui/alertform.py</Source>
28 <Source>openlp/core/ui/about.py</Source>
29 <Source>openlp/plugins/songs/songsplugin.py</Source>
30 <Source>openlp/plugins/songs/__init__.py</Source>
31 <Source>openlp/plugins/songs/forms/__init__.py</Source>
32 <Source>openlp/plugins/songs/forms/openlpimportform.py</Source>
33 <Source>openlp/plugins/songs/forms/editsongform.py</Source>
34 <Source>openlp/plugins/songs/forms/opensongexportform.py</Source>
35 <Source>openlp/plugins/songs/forms/openlpexportform.py</Source>
36 <Source>openlp/plugins/songs/forms/opensongimportform.py</Source>
37 <Source>openlp/core/utils/__init__.py</Source>
38 <Source>openlp/core/theme/__init__.py</Source>
39 <Source>openlp/core/theme/theme.py</Source>
40 <Source>openlp/plugins/songs/test/test_song_opensong.py</Source>
41 <Source>openlp/plugins/songs/test/test_song_basic.py</Source>
42 <Source>openlp/plugins/songs/test/test_song_verse.py</Source>
43 <Source>openlp/plugins/songs/test/test_song_text.py</Source>
44 <Source>openlp/core/theme/test/test_theme.py</Source>
45 <Source>openlp/core/resources.py</Source>
46 <Source>openlp/core/lib/__init__.py</Source>
47 <Source>openlp/core/lib/xmlrootclass.py</Source>
48 <Source>openlp/core/lib/plugin.py</Source>
49 <Source>openlp/core/lib/mediamanageritem.py</Source>
50 <Source>openlp/core/lib/event.py</Source>
51 <Source>openlp/core/utils/confighelper.py</Source>
52 <Source>openlp/core/utils/winregistry.py</Source>
53 <Source>openlp/core/utils/registry.py</Source>
54 <Source>openlp/core/utils/linregistry.py</Source>
55 <Source>setup.py</Source>
56 <Source>openlp/core/lib/pluginconfig.py</Source>
57 <Source>openlp/core/test/test_plugin_manager.py</Source>
58 <Source>openlp/core/test/test_mediamanageritem.py</Source>
59 <Source>openlp/core/test/testplugins/testplugin1.py</Source>
60 <Source>openlp/core/test/testplugins/testplugin2/__init__.py</Source>
61 <Source>openlp/core/test/testplugins/testplugin2/testplugin2.py</Source>
62 <Source>openlp/plugins/bibles/bibleplugin.py</Source>
63 <Source>openlp/plugins/bibles/forms/bibleimportdialog.py</Source>
64 <Source>openlp/plugins/bibles/forms/bibleimportform.py</Source>
65 <Source>openlp/plugins/bibles/lib/bibleDBimpl.py</Source>
66 <Source>openlp/plugins/bibles/lib/bibleOSISimpl.py</Source>
67 <Source>openlp/plugins/bibles/lib/bibleHTTPimpl.py</Source>
68 <Source>openlp/plugins/bibles/lib/bibleCSVimpl.py</Source>
69 <Source>openlp/plugins/bibles/__init__.py</Source>
70 <Source>openlp/plugins/bibles/lib/__init__.py</Source>
71 <Source>openlp/plugins/bibles/forms/__init__.py</Source>
72 <Source>openlp/plugins/songs/lib/__init__.py</Source>
73 <Source>openlp/plugins/songs/lib/songxml.py</Source>
74 <Source>openlp/plugins/songs/lib/models.py</Source>
75 <Source>openlp/plugins/bibles/test/__init__.py</Source>
76 <Source>openlp/plugins/bibles/test/test_bibleManagerAPI.py</Source>
77 <Source>openlp/plugins/bibles/test/test_bibleManager.py</Source>
78 <Source>openlp/plugins/bibles/test/test_bibleManagerOSIS.py</Source>
79 <Source>openlp/plugins/bibles/test/test_bibleManagerCSV.py</Source>
80 <Source>openlp/plugins/presentations/lib/pptview.py</Source>
81 <Source>openlp/plugins/presentations/lib/impresscom.py</Source>
82 <Source>openlp/plugins/presentations/lib/powerpoint.py</Source>
83 <Source>openlp/plugins/presentations/lib/pptviewlib/ppttest.py</Source>
84 <Source>openlp/plugins/presentations/__init__.py</Source>
85 <Source>openlp/plugins/presentations/presentationplugin.py</Source>
86 <Source>openlp/plugins/videos/__init__.py</Source>
87 <Source>openlp/plugins/videos/videoplugin.py</Source>
88 <Source>openlp/plugins/images/__init__.py</Source>
89 <Source>openlp/plugins/images/imageplugin.py</Source>
90 <Source>openlp/plugins/songs/forms/editsongdialog.py</Source>
91 <Source>openlpcnv.pyw</Source>
92 <Source>openlp/plugins/songs/forms/songbookdialog.py</Source>
93 <Source>openlp/plugins/songs/forms/topicsdialog.py</Source>
94 <Source>openlp/plugins/songs/forms/authorsdialog.py</Source>
95 <Source>openlp/plugins/songs/forms/topicsform.py</Source>
96 <Source>openlp/plugins/songs/forms/authorsform.py</Source>
97 <Source>openlp/plugins/songs/forms/songbookform.py</Source>
98 <Source>openlp/migration/__init__.py</Source>
99 <Source>openlp/migration/migratefiles.py</Source>
100 <Source>openlp/migration/migratesongs.py</Source>
101 <Source>openlp/migration/display.py</Source>
102 <Source>openlp/migration/migratebibles.py</Source>
103 <Source>openlp/plugins/songs/lib/tables.py</Source>
104 <Source>openlp/plugins/songs/lib/classes.py</Source>
105 <Source>openlp/plugins/songs/lib/manager.py</Source>
106 <Source>openlp/plugins/bibles/lib/classes.py</Source>
107 <Source>openlp/plugins/bibles/lib/tables.py</Source>
108 <Source>openlp/plugins/bibles/lib/manager.py</Source>
109 <Source>openlp/plugins/bibles/lib/common.py</Source>
110 <Source>openlp/plugins/songs/lib/meta.py</Source>
111 <Source>openlp/core/test/testplugins/deeper/__init__.py</Source>
112 <Source>openlp/core/test/testplugins/deeper/toodeep/__init__.py</Source>
113 <Source>openlp/core/test/testplugins/deeper/toodeep/plugin3toodeep.py</Source>
114 <Source>openlp/core/lib/serviceitem.py</Source>
115 <Source>openlp/core/ui/slidecontroller.py</Source>
116 <Source>openlp/core/lib/eventreceiver.py</Source>
117 <Source>openlp/core/ui/servicemanager.py</Source>
118 <Source>openlp/core/lib/toolbar.py</Source>
119 <Source>openlp/core/ui/settingsform.py</Source>
120 <Source>openlp/core/ui/generaltab.py</Source>
121 <Source>openlp/core/ui/themestab.py</Source>
122 <Source>openlp/core/ui/alertstab.py</Source>
123 <Source>openlp/core/ui/settingsdialog.py</Source>
124 <Source>openlp/core/lib/settingstab.py</Source>
125 <Source>openlp/plugins/bibles/lib/biblestab.py</Source>
126 <Source>openlp/plugins/songs/lib/songstab.py</Source>
127 <Source>openlp/plugins/videos/lib/__init__.py</Source>
128 <Source>openlp/plugins/videos/lib/videotab.py</Source>
129 <Source>openlp/core/ui/test/test_service_manager.py</Source>
130 <Source>openlp/plugins/images/lib/__init__.py</Source>
131 <Source>openlp/plugins/images/lib/imageserviceitem.py</Source>
132 <Source>openlp/plugins/images/lib/listwithpreviews.py</Source>
133 <Source>openlp/plugins/songs/forms/editverseform.py</Source>
134 <Source>openlp/plugins/songs/forms/editversedialog.py</Source>
135 <Source>openlp/plugins/custom/__init__.py</Source>
136 <Source>openlp/plugins/custom/customplugin.py</Source>
137 <Source>openlp/plugins/custom/forms/__init__.py</Source>
138 <Source>openlp/plugins/custom/forms/editcustomform.py</Source>
139 <Source>openlp/plugins/custom/forms/editcustomdialog.py</Source>
140 <Source>openlp/plugins/custom/lib/__init__.py</Source>
141 <Source>openlp/plugins/custom/lib/customtab.py</Source>
142 <Source>openlp/plugins/custom/lib/classes.py</Source>
143 <Source>openlp/plugins/custom/lib/tables.py</Source>
144 <Source>openlp/plugins/custom/lib/meta.py</Source>
145 <Source>openlp/plugins/custom/lib/models.py</Source>
146 <Source>openlp/plugins/custom/lib/manager.py</Source>
147 <Source>openlp/plugins/images/lib/mediaitem.py</Source>
148 <Source>openlp/plugins/songs/lib/mediaitem.py</Source>
149 <Source>openlp/core/ui/maindisplay.py</Source>
150 <Source>openlp/core/ui/amendthemedialog.py</Source>
151 <Source>openlp/core/ui/thememanager.py</Source>
152 <Source>openlp/core/ui/amendthemeform.py</Source>
153 <Source>openlp/core/lib/eventmanager.py</Source>
154 <Source>openlp/core/lib/rendermanager.py</Source>
155 <Source>openlp/core/lib/renderer.py</Source>
156 <Source>openlp/core/lib/songxmlhandler.py</Source>
157 <Source>openlp/core/lib/pluginmanager.py</Source>
158 <Source>openlp/core/lib/themexmlhandler.py</Source>
159 <Source>openlp/plugins/bibles/lib/mediaitem.py</Source>
160 <Source>openlp/plugins/bibles/lib/textlistdata.py</Source>
161 <Source>openlp/plugins/presentations/lib/__init__.py</Source>
162 <Source>openlp/plugins/presentations/lib/mediaitem.py</Source>
163 <Source>openlp/plugins/presentations/lib/filelistdata.py</Source>
164 <Source>openlp/plugins/videos/lib/mediaitem.py</Source>
165 <Source>openlp/plugins/videos/lib/filelistdata.py</Source>
166 <Source>openlp/plugins/custom/lib/mediaitem.py</Source>
167 <Source>openlp/plugins/custom/lib/textlistdata.py</Source>
168 <Source>openlp/plugins/custom/lib/customserviceitem.py</Source>
169 <Source>resources/images/openlp-2_rc.py</Source>
170 </Sources>
171 <Forms>
172 <Form>resources/forms/openlpexportform.ui</Form>
173 <Form>resources/forms/opensongexportform.ui</Form>
174 <Form>resources/forms/about.ui</Form>
175 <Form>resources/forms/settings.ui</Form>
176 <Form>resources/forms/themewizard.ui</Form>
177 <Form>resources/forms/opensongimportform.ui</Form>
178 <Form>resources/forms/alertform.ui</Form>
179 <Form>resources/forms/mainwindow.ui</Form>
180 <Form>resources/forms/songexport.ui</Form>
181 <Form>resources/forms/openlpimportform.ui</Form>
182 <Form>resources/forms/splashscreen.ui</Form>
183 <Form>resources/forms/authorsdialog.ui</Form>
184 <Form>resources/forms/bibleimportdialog.ui</Form>
185 <Form>resources/forms/songbookdialog.ui</Form>
186 <Form>resources/forms/topicsdialog.ui</Form>
187 <Form>resources/forms/editsongdialog.ui</Form>
188 <Form>resources/forms/editversedialog.ui</Form>
189 <Form>resources/forms/editcustomdialog.ui</Form>
190 <Form>resources/forms/amendthemedialog.ui</Form>
191 </Forms>
192 <Translations>
193 </Translations>
194 <Resources>
195 <Resource>resources/images/openlp-2.qrc</Resource>
196 </Resources>
197 <Interfaces>
198 </Interfaces>
199 <Others>
200 <Other>copyright.txt</Other>
201 <Other>documentation/SongFormat.txt</Other>
202 <Other>documentation/pyqt-sql-py2exe.txt</Other>
203 <Other>documentation/PluginDevelopersGuide.txt</Other>
204 </Others>
205 <MainScript>openlp.pyw</MainScript>
206 <Vcs>
207 <VcsType>None</VcsType>
208 <VcsOptions>
209 <dict>
210 <key>
211 <string>add</string>
212 </key>
213 <value>
214 <list>
215 <string></string>
216 </list>
217 </value>
218 <key>
219 <string>checkout</string>
220 </key>
221 <value>
222 <list>
223 <string></string>
224 </list>
225 </value>
226 <key>
227 <string>commit</string>
228 </key>
229 <value>
230 <list>
231 <string></string>
232 </list>
233 </value>
234 <key>
235 <string>diff</string>
236 </key>
237 <value>
238 <list>
239 <string></string>
240 </list>
241 </value>
242 <key>
243 <string>export</string>
244 </key>
245 <value>
246 <list>
247 <string></string>
248 </list>
249 </value>
250 <key>
251 <string>global</string>
252 </key>
253 <value>
254 <list>
255 <string></string>
256 </list>
257 </value>
258 <key>
259 <string>history</string>
260 </key>
261 <value>
262 <list>
263 <string></string>
264 </list>
265 </value>
266 <key>
267 <string>log</string>
268 </key>
269 <value>
270 <list>
271 <string></string>
272 </list>
273 </value>
274 <key>
275 <string>remove</string>
276 </key>
277 <value>
278 <list>
279 <string></string>
280 </list>
281 </value>
282 <key>
283 <string>status</string>
284 </key>
285 <value>
286 <list>
287 <string></string>
288 </list>
289 </value>
290 <key>
291 <string>tag</string>
292 </key>
293 <value>
294 <list>
295 <string></string>
296 </list>
297 </value>
298 <key>
299 <string>update</string>
300 </key>
301 <value>
302 <list>
303 <string></string>
304 </list>
305 </value>
306 </dict>
307 </VcsOptions>
308 <VcsOtherData>
309 <dict>
310 <key>
311 <string>standardLayout</string>
312 </key>
313 <value>
314 <bool>True</bool>
315 </value>
316 </dict>
317 </VcsOtherData>
318 </Vcs>
319 <FiletypeAssociations>
320 <FiletypeAssociation pattern="*.ui" type="FORMS" />
321 <FiletypeAssociation pattern="*.idl" type="INTERFACES" />
322 <FiletypeAssociation pattern="*.qm" type="TRANSLATIONS" />
323 <FiletypeAssociation pattern="*.ptl" type="SOURCES" />
324 <FiletypeAssociation pattern="*.pyw" type="SOURCES" />
325 <FiletypeAssociation pattern="*.ui.h" type="FORMS" />
326 <FiletypeAssociation pattern="*.ts" type="TRANSLATIONS" />
327 <FiletypeAssociation pattern="*.py" type="SOURCES" />
328 <FiletypeAssociation pattern="*.qrc" type="RESOURCES" />
329 </FiletypeAssociations>
330</Project>
331\ No newline at end of file0\ No newline at end of file
3321
=== removed file 'openlp.org 2.0.e4x'
--- openlp.org 2.0.e4x 2008-11-03 19:32:54 +0000
+++ openlp.org 2.0.e4x 1970-01-01 00:00:00 +0000
@@ -1,45 +0,0 @@
1SOURCES = openlp/theme/test/test_theme.py \
2 openlp/theme/__init__.py \
3 openlp/theme/theme.py \
4 openlp/controls/__init__.py \
5 openlp/core/test/test_render_theme.py \
6 openlp/core/test/test_render.py \
7 openlp/core/interpolate.py \
8 openlp/core/__init__.py \
9 openlp/core/render.py \
10 openlp/ui/__init__.py \
11 openlp/ui/forms/__init__.py \
12 openlp/__init__.py \
13 openlp/utils/ConfigHelper.py \
14 openlp/utils/__init__.py \
15 demo.py \
16 openlp/core/settingsmanager.py \
17 openlp/resources/openlp_rc.py \
18 openlp/resources/__init__.py \
19 openlp/ui/forms/about.py \
20 openlp/ui/forms/mainwindow.py \
21 openlp/core/plugin.py \
22 openlp/core/xmlrootclass.py \
23 openlp/song/__init__.py \
24 openlp/song/song.py \
25 openlp/song/test/test_song_opensong.py \
26 openlp/song/test/test_song_basic.py \
27 openlp/song/test/test_song_text.py \
28 openlp/plugins/biblemanager/__init__.py \
29 openlp/plugins/biblemanager/BibleDBImpl.py \
30 openlp/plugins/biblemanager/BibleManager.py \
31 openlp/plugins/biblemanager/BibleHTTPImpl.py \
32 openlp/plugins/biblemanager/test/__init__.py \
33 openlp/plugins/biblemanager/test/test_bibleManager.py
34
35FORMS = openlp/resources/forms/mainwindow.ui \
36 openlp/resources/forms/settings.ui \
37 openlp/resources/forms/themewizard.ui \
38 openlp/resources/forms/about.ui \
39 openlp/resources/forms/editsongform.ui \
40 openlp/resources/forms/alertform.ui \
41 openlp/resources/forms/openlpimportform.ui \
42 openlp/resources/forms/openlpexportform.ui
43
44TRANSLATIONS = openlp_en.ts
45
460
=== modified file 'openlp.pyw'
--- openlp.pyw 2009-05-01 11:50:09 +0000
+++ openlp.pyw 2009-05-04 13:48:12 +0000
@@ -27,7 +27,7 @@
2727
28logging.basicConfig(level=logging.DEBUG,28logging.basicConfig(level=logging.DEBUG,
29 format=u'%(asctime)s %(name)-12s %(levelname)-8s %(message)s',29 format=u'%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
30 datefmt=u'%m-%d %H:%M',30 datefmt=u'%m-%d %H:%M:%S',
31 filename=u'openlp.log',31 filename=u'openlp.log',
32 filemode=u'w')32 filemode=u'w')
3333
3434
=== modified file 'openlp/core/lib/renderer.py'
--- openlp/core/lib/renderer.py 2009-05-01 05:02:53 +0000
+++ openlp/core/lib/renderer.py 2009-05-04 13:48:12 +0000
@@ -114,7 +114,6 @@
114114
115 def render_screen(self, screennum):115 def render_screen(self, screennum):
116 log.debug(u'render screen\n %s %s ', screennum, self.words[screennum])116 log.debug(u'render screen\n %s %s ', screennum, self.words[screennum])
117 import time
118 t=0.0117 t=0.0
119 words=self.words[screennum]118 words=self.words[screennum]
120 retval=self._render_lines(words)119 retval=self._render_lines(words)
@@ -173,7 +172,6 @@
173 else:172 else:
174 p.fillRect(self._paint.rect(), QtGui.QColor(u'#000000'))173 p.fillRect(self._paint.rect(), QtGui.QColor(u'#000000'))
175 p.end()174 p.end()
176 log.debug(u'render background done')
177175
178 def split_set_of_lines(self, lines, footer):176 def split_set_of_lines(self, lines, footer):
179177
@@ -252,7 +250,7 @@
252250
253 def render_lines(self, lines, footer_lines=None):251 def render_lines(self, lines, footer_lines=None):
254 """render a set of lines according to the theme, return bounding box"""252 """render a set of lines according to the theme, return bounding box"""
255 #log.debug(u'_render_lines %s', lines)253 log.debug(u'_render_lines %s', lines)
256254
257 bbox=self._render_lines_unaligned(lines, False) # Main font255 bbox=self._render_lines_unaligned(lines, False) # Main font
258 if footer_lines is not None:256 if footer_lines is not None:
@@ -264,11 +262,8 @@
264 bbox=self._render_lines_unaligned(lines, False, (x, y))262 bbox=self._render_lines_unaligned(lines, False, (x, y))
265263
266 if footer_lines is not None:264 if footer_lines is not None:
267 #x, y = self._correctAlignment(self._rect_footer, bbox1)
268 bbox=self._render_lines_unaligned(footer_lines, True, (self._rect_footer.left(), self._rect_footer.top()) )265 bbox=self._render_lines_unaligned(footer_lines, True, (self._rect_footer.left(), self._rect_footer.top()) )
269266
270 log.debug(u'render lines DONE')
271
272 return bbox267 return bbox
273268
274 def _render_lines_unaligned(self, lines, footer, tlcorner=(0,0)):269 def _render_lines_unaligned(self, lines, footer, tlcorner=(0,0)):
@@ -279,7 +274,7 @@
279 than a screenful (eg. by using split_set_of_lines)274 than a screenful (eg. by using split_set_of_lines)
280275
281 Returns the bounding box of the text as QRect"""276 Returns the bounding box of the text as QRect"""
282 log.debug(u'render unaligned %s', lines)277 log.debug(u'render lines unaligned %s', lines)
283 x, y=tlcorner278 x, y=tlcorner
284 brx=x279 brx=x
285 bry=y280 bry=y
@@ -298,7 +293,7 @@
298 p.setPen(QtGui.QPen(QtGui.QColor(0,0,255)))293 p.setPen(QtGui.QPen(QtGui.QColor(0,0,255)))
299 p.drawRect(retval)294 p.drawRect(retval)
300 p.end()295 p.end()
301 log.debug(u'render unaligned DONE')296
302297
303 return retval298 return retval
304299
@@ -410,7 +405,7 @@
410405
411 return width and height of text as a tuple (w,h)"""406 return width and height of text as a tuple (w,h)"""
412 # setup defaults407 # setup defaults
413 #log.debug(u"_get_extent_and_render %s %s %s ", [line], tlcorner, draw)408 log.debug(u'_get_extent_and_render %s %s %s ', [line], tlcorner, draw)
414 p=QtGui.QPainter()409 p=QtGui.QPainter()
415 p.begin(self._paint)410 p.begin(self._paint)
416 # 'twould be more efficient to set this once when theme changes411 # 'twould be more efficient to set this once when theme changes
417412
=== modified file 'openlp/core/lib/rendermanager.py'
--- openlp/core/lib/rendermanager.py 2009-05-02 11:16:08 +0000
+++ openlp/core/lib/rendermanager.py 2009-05-04 13:48:12 +0000
@@ -18,6 +18,7 @@
18Place, Suite 330, Boston, MA 02111-1307 USA18Place, Suite 330, Boston, MA 02111-1307 USA
19"""19"""
20import logging20import logging
21import time
21import os, os.path22import os, os.path
22import sys23import sys
23from PyQt4 import QtGui, QtCore, Qt24from PyQt4 import QtGui, QtCore, Qt
@@ -41,21 +42,20 @@
41 self.current_display = 042 self.current_display = 0
42 self.renderer = Renderer(None)43 self.renderer = Renderer(None)
43 self.calculate_default(self.screen_list[self.current_display]['size'])44 self.calculate_default(self.screen_list[self.current_display]['size'])
44 self.frame = None
4545
46 def set_override_theme(self, theme):46 def set_override_theme(self, theme):
47 log.debug("set override theme to %s", theme)47 log.debug(u'set override theme to %s', theme)
48 if theme is not None:48 if theme is not None:
49 self.theme = theme49 self.theme = theme
50 else:50 else:
51 self.theme = self.default_theme51 self.theme = self.default_theme
52 log.debug("theme is now %s", self.theme)52 log.debug(u'theme is now %s', self.theme)
53 self.themedata = self.theme_manager.getThemeData(self.theme)53 self.themedata = self.theme_manager.getThemeData(self.theme)
54 self.renderer.set_theme(self.themedata)54 self.renderer.set_theme(self.themedata)
55 self.build_text_rectangle(self.themedata)55 self.build_text_rectangle(self.themedata)
5656
57 def build_text_rectangle(self, theme):57 def build_text_rectangle(self, theme):
5858 log.debug(u'build_text_rectangle ')
59 main_rect = None59 main_rect = None
60 footer_rect = None60 footer_rect = None
6161
@@ -74,6 +74,7 @@
74 self.renderer.set_text_rectangle(main_rect,footer_rect)74 self.renderer.set_text_rectangle(main_rect,footer_rect)
7575
76 def generate_preview(self, themedata):76 def generate_preview(self, themedata):
77 log.debug(u'generate preview ')
77 self.calculate_default(QtCore.QSize(800,600))78 self.calculate_default(QtCore.QSize(800,600))
78 self.renderer.set_theme(themedata)79 self.renderer.set_theme(themedata)
79 self.build_text_rectangle(themedata)80 self.build_text_rectangle(themedata)
@@ -94,25 +95,23 @@
94 return frame95 return frame
9596
96 def format_slide(self, words, footer):97 def format_slide(self, words, footer):
97 self.calculate_default(QtCore.QSize(800,600))98 log.debug(u'format slide')
98 frame = QtGui.QPixmap(self.width, self.height)99 self.calculate_default(self.screen_list[self.current_display]['size'])
99 self.renderer.set_paint_dest(frame)100 self.renderer.set_paint_dest(QtGui.QPixmap(self.width, self.height))
100 return self.renderer.format_slide(words, footer)101 return self.renderer.format_slide(words, footer)
101102
102 def generate_slide(self,main_text, footer_text, preview=True):103 def generate_slide(self,main_text, footer_text):
103 if preview == True:104 log.debug(u'generate slide')
104 self.calculate_default(QtCore.QSize(800,600))105 self.calculate_default(self.screen_list[self.current_display]['size'])
105106
106 frame = QtGui.QPixmap(self.width, self.height)107 frame = QtGui.QPixmap(self.width, self.height)
107 self.renderer.set_paint_dest(frame)108 self.renderer.set_paint_dest(frame)
108
109 answer=self.renderer.render_lines(main_text, footer_text)109 answer=self.renderer.render_lines(main_text, footer_text)
110 return frame110 return frame
111111
112 def calculate_default(self, screen):112 def calculate_default(self, screen):
113 log.debug(u'calculate default %s' , screen)
113 self.width = screen.width()114 self.width = screen.width()
114 self.height = screen.height()115 self.height = screen.height()
116 log.debug(u'calculate default %d,%d' , self.width, self.height)
115 self.footer_start = int(self.height*0.95) # 95% is start of footer117 self.footer_start = int(self.height*0.95) # 95% is start of footer
116 #update the rederer frame
117 self.frame = QtGui.QPixmap(self.width, self.height)
118 self.renderer.set_paint_dest(self.frame)
119118
=== modified file 'openlp/core/lib/serviceitem.py'
--- openlp/core/lib/serviceitem.py 2009-05-02 18:56:27 +0000
+++ openlp/core/lib/serviceitem.py 2009-05-04 13:48:12 +0000
@@ -19,7 +19,8 @@
19"""19"""
20import logging20import logging
21import types21import types
22from PyQt4 import QtCore, QtGui22import time
23
23from PyQt4.QtCore import *24from PyQt4.QtCore import *
24from PyQt4.QtGui import *25from PyQt4.QtGui import *
2526
@@ -51,34 +52,34 @@
5152
52 def addIcon(self, icon):53 def addIcon(self, icon):
53 ButtonIcon = None54 ButtonIcon = None
54 if type(icon) is QtGui.QIcon:55 if type(icon) is QIcon:
55 ButtonIcon = icon56 ButtonIcon = icon
56 elif type(icon) is types.StringType or type(icon) is types.UnicodeType:57 elif type(icon) is types.StringType or type(icon) is types.UnicodeType:
57 ButtonIcon = QtGui.QIcon()58 ButtonIcon = QIcon()
58 if icon.startswith(u':/'):59 if icon.startswith(u':/'):
59 ButtonIcon.addPixmap(QtGui.QPixmap(icon), QtGui.QIcon.Normal,60 ButtonIcon.addPixmap(QPixmap(icon), QIcon.Normal,
60 QtGui.QIcon.Off)61 QIcon.Off)
61 else:62 else:
62 ButtonIcon.addPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(icon)),63 ButtonIcon.addPixmap(QPixmap.fromImage(QImage(icon)),
63 QtGui.QIcon.Normal, QtGui.QIcon.Off)64 QIcon.Normal, QIcon.Off)
64 self.iconic_representation = ButtonIcon65 self.iconic_representation = ButtonIcon
6566
66 def render(self):67 def render(self):
67 """68 """
68 The render method is what the plugin uses to render it's meda to the69 The render method is what renders the frames for the screen.
69 screen.
70 """70 """
71 log.debug(u'Render called')71 log.debug(u'Render called')
72 if self.theme == None:72 if self.theme == None:
73 self.render_manager.set_override_theme(None)73 self.render_manager.set_override_theme(None)
74 else:74 else:
75 self.render_manager.set_override_theme(self.theme)75 self.render_manager.set_override_theme(self.theme)
7676 log.debug(u'Formatting slides')
77 for slide in self.raw_slides:77 for slide in self.raw_slides:
78 self.format_slides.append(self.render_manager.format_slide(slide, False))78 self.format_slides.append(self.render_manager.format_slide(slide, False))
79 log.debug(u'Rendering slides')
79 for slide in self.format_slides:80 for slide in self.format_slides:
81 self.frames.append(self.render_manager.generate_slide(slide, self.raw_footer))
8082
81 self.frames.append(self.render_manager.generate_slide(slide, self.raw_footer, False))
8283
83 def get_parent_node(self):84 def get_parent_node(self):
84 """85 """
8586
=== modified file 'openlp/core/ui/maindisplay.py'
--- openlp/core/ui/maindisplay.py 2009-05-03 07:20:15 +0000
+++ openlp/core/ui/maindisplay.py 2009-05-04 13:51:56 +0000
@@ -29,6 +29,9 @@
29 self.setWindowTitle(u'OpenLP Display')29 self.setWindowTitle(u'OpenLP Display')
30 self.screens = screens30 self.screens = screens
31 self.display = QtGui.QLabel(self)31 self.display = QtGui.QLabel(self)
32 self.display.setScaledContents(True)
33 self.displayBlank = False
34 self.blankFrame= None
3235
33 def setup(self, screenNumber):36 def setup(self, screenNumber):
34 """37 """
@@ -51,8 +54,24 @@
51 else:54 else:
52 self.showMinimized()55 self.showMinimized()
5356
57 painter=QtGui.QPainter()
58 self.blankFrame = QtGui.QPixmap(800, 600)
59 painter.begin(self.blankFrame)
60 painter.fillRect(self.blankFrame.rect(), QtGui.QColor(u'#000000'))
61
54 def frameView(self, frame):62 def frameView(self, frame):
55 self.display.setPixmap(frame)63 if self.displayBlank == False:
64 self.display.setPixmap(frame)
65 self.frame = frame
66
67 def blankDisplay(self):
68 if self.displayBlank == False:
69 self.displayBlank = True
70 self.display.setPixmap(self.blankFrame)
71 else:
72 self.displayBlank = False
73 self.frameView(self.frame)
74
5675
57 def kill(self):76 def kill(self):
58 pass77 pass
5978
=== modified file 'openlp/core/ui/mainwindow.py'
--- openlp/core/ui/mainwindow.py 2009-05-03 07:20:15 +0000
+++ openlp/core/ui/mainwindow.py 2009-05-04 08:15:48 +0000
@@ -97,8 +97,6 @@
9797
98 # Initialise SlideControllers98 # Initialise SlideControllers
99 log.info(u'Set Up SlideControllers')99 log.info(u'Set Up SlideControllers')
100 self.PreviewController.isLive = False
101 self.LiveController.isLive = True
102 self.LiveController.mainDisplay = self.main_display100 self.LiveController.mainDisplay = self.main_display
103101
104 def setupUi(self):102 def setupUi(self):
@@ -130,8 +128,8 @@
130 self.ControlSplitter.setOrientation(QtCore.Qt.Horizontal)128 self.ControlSplitter.setOrientation(QtCore.Qt.Horizontal)
131 self.ControlSplitter.setObjectName(u'ControlSplitter')129 self.ControlSplitter.setObjectName(u'ControlSplitter')
132 self.MainContentLayout.addWidget(self.ControlSplitter)130 self.MainContentLayout.addWidget(self.ControlSplitter)
133 self.PreviewController = SlideController(self.ControlSplitter)131 self.PreviewController = SlideController(self.ControlSplitter, False)
134 self.LiveController = SlideController(self.ControlSplitter)132 self.LiveController = SlideController(self.ControlSplitter, True)
135 self.MenuBar = QtGui.QMenuBar(self.main_window)133 self.MenuBar = QtGui.QMenuBar(self.main_window)
136 self.MenuBar.setGeometry(QtCore.QRect(0, 0, 1087, 27))134 self.MenuBar.setGeometry(QtCore.QRect(0, 0, 1087, 27))
137 self.MenuBar.setObjectName(u'MenuBar')135 self.MenuBar.setObjectName(u'MenuBar')
@@ -296,10 +294,10 @@
296 QtGui.QIcon.Normal, QtGui.QIcon.Off)294 QtGui.QIcon.Normal, QtGui.QIcon.Off)
297 self.ToolsAddToolItem.setIcon(AddToolIcon)295 self.ToolsAddToolItem.setIcon(AddToolIcon)
298 self.ToolsAddToolItem.setObjectName(u'ToolsAddToolItem')296 self.ToolsAddToolItem.setObjectName(u'ToolsAddToolItem')
299 self.action_Preview_Pane = QtGui.QAction(self.main_window)297 self.action_Preview_Panel = QtGui.QAction(self.main_window)
300 self.action_Preview_Pane.setCheckable(True)298 self.action_Preview_Panel.setCheckable(True)
301 self.action_Preview_Pane.setChecked(True)299 self.action_Preview_Panel.setChecked(True)
302 self.action_Preview_Pane.setObjectName(u'action_Preview_Pane')300 self.action_Preview_Panel.setObjectName(u'action_Preview_Panel')
303 self.ModeLiveItem = QtGui.QAction(self.main_window)301 self.ModeLiveItem = QtGui.QAction(self.main_window)
304 self.ModeLiveItem.setObjectName(u'ModeLiveItem')302 self.ModeLiveItem.setObjectName(u'ModeLiveItem')
305 self.FileImportMenu.addAction(self.ImportThemeItem)303 self.FileImportMenu.addAction(self.ImportThemeItem)
@@ -322,7 +320,7 @@
322 self.OptionsViewMenu.addAction(self.ViewServiceManagerItem)320 self.OptionsViewMenu.addAction(self.ViewServiceManagerItem)
323 self.OptionsViewMenu.addAction(self.ViewThemeManagerItem)321 self.OptionsViewMenu.addAction(self.ViewThemeManagerItem)
324 self.OptionsViewMenu.addSeparator()322 self.OptionsViewMenu.addSeparator()
325 self.OptionsViewMenu.addAction(self.action_Preview_Pane)323 self.OptionsViewMenu.addAction(self.action_Preview_Panel)
326 self.OptionsLanguageMenu.addAction(self.LanguageEnglishItem)324 self.OptionsLanguageMenu.addAction(self.LanguageEnglishItem)
327 self.OptionsLanguageMenu.addSeparator()325 self.OptionsLanguageMenu.addSeparator()
328 self.OptionsLanguageMenu.addAction(self.LanguageTranslateItem)326 self.OptionsLanguageMenu.addAction(self.LanguageTranslateItem)
@@ -353,8 +351,8 @@
353 QtCore.SIGNAL(u'triggered(bool)'), self.ServiceManagerDock.setVisible)351 QtCore.SIGNAL(u'triggered(bool)'), self.ServiceManagerDock.setVisible)
354 QtCore.QObject.connect(self.ViewThemeManagerItem,352 QtCore.QObject.connect(self.ViewThemeManagerItem,
355 QtCore.SIGNAL(u'triggered(bool)'), self.ThemeManagerDock.setVisible)353 QtCore.SIGNAL(u'triggered(bool)'), self.ThemeManagerDock.setVisible)
356 QtCore.QObject.connect(self.action_Preview_Pane,354 QtCore.QObject.connect(self.action_Preview_Panel,
357 QtCore.SIGNAL(u'toggled(bool)'), self.PreviewController.Pane.setVisible)355 QtCore.SIGNAL(u'toggled(bool)'), self.PreviewController.Panel.setVisible)
358 QtCore.QObject.connect(self.MediaManagerDock,356 QtCore.QObject.connect(self.MediaManagerDock,
359 QtCore.SIGNAL(u'visibilityChanged(bool)'), self.ViewMediaManagerItem.setChecked)357 QtCore.SIGNAL(u'visibilityChanged(bool)'), self.ViewMediaManagerItem.setChecked)
360 QtCore.QObject.connect(self.ServiceManagerDock,358 QtCore.QObject.connect(self.ServiceManagerDock,
@@ -451,7 +449,7 @@
451 self.LanguageEnglishItem.setStatusTip(translate(u'main_window', u'Set the interface language to English'))449 self.LanguageEnglishItem.setStatusTip(translate(u'main_window', u'Set the interface language to English'))
452 self.ToolsAddToolItem.setText(translate(u'main_window', u'&Add Tool...'))450 self.ToolsAddToolItem.setText(translate(u'main_window', u'&Add Tool...'))
453 self.ToolsAddToolItem.setStatusTip(translate(u'main_window', u'Add an application to the list of tools'))451 self.ToolsAddToolItem.setStatusTip(translate(u'main_window', u'Add an application to the list of tools'))
454 self.action_Preview_Pane.setText(translate(u'main_window', u'&Preview Pane'))452 self.action_Preview_Panel.setText(translate(u'main_window', u'&Preview Pane'))
455 self.ModeLiveItem.setText(translate(u'main_window', u'&Live'))453 self.ModeLiveItem.setText(translate(u'main_window', u'&Live'))
456454
457 def show(self):455 def show(self):
458456
=== modified file 'openlp/core/ui/servicemanager.py'
--- openlp/core/ui/servicemanager.py 2009-05-02 18:56:27 +0000
+++ openlp/core/ui/servicemanager.py 2009-05-04 08:15:48 +0000
@@ -21,15 +21,16 @@
2121
22from time import sleep22from time import sleep
23from copy import deepcopy23from copy import deepcopy
24from PyQt4 import *24
25from PyQt4 import QtCore, QtGui
26from PyQt4.QtCore import *25from PyQt4.QtCore import *
27from PyQt4.QtGui import *26from PyQt4.QtGui import *
27
28# from openlp.core.resources import *28# from openlp.core.resources import *
29# from openlp.core.ui import AboutForm, AlertForm, SettingsForm, SlideController29# from openlp.core.ui import AboutForm, AlertForm, SettingsForm, SlideController
30from openlp.core.lib import OpenLPToolbar30from openlp.core.lib import OpenLPToolbar
31from openlp.core.lib import ServiceItem31from openlp.core.lib import ServiceItem
32from openlp.core.lib import RenderManager32from openlp.core.lib import RenderManager
33from openlp.core import translate
3334
34# from openlp.core import PluginManager35# from openlp.core import PluginManager
35import logging36import logging
@@ -47,6 +48,9 @@
47 self.items=[]48 self.items=[]
48 log.info("Starting")49 log.info("Starting")
4950
51 def clearItems(self):
52 self.items = []
53
50 def columnCount(self, parent):54 def columnCount(self, parent):
51 return 1; # always only a single column (for now)55 return 1; # always only a single column (for now)
5256
@@ -122,33 +126,73 @@
122 def __init__(self, parent):126 def __init__(self, parent):
123 QWidget.__init__(self)127 QWidget.__init__(self)
124 self.parent=parent128 self.parent=parent
125 self.Layout = QtGui.QVBoxLayout(self)129 self.Layout = QVBoxLayout(self)
126 self.Layout.setSpacing(0)130 self.Layout.setSpacing(0)
127 self.Layout.setMargin(0)131 self.Layout.setMargin(0)
128 self.Toolbar = OpenLPToolbar(self)132 self.Toolbar = OpenLPToolbar(self)
129 self.Toolbar.addToolbarButton("Move to top", ":/services/service_top.png")133 self.Toolbar.addToolbarButton("Move to top", ":/services/service_top.png",
130 self.Toolbar.addToolbarButton("Move up", ":/services/service_up.png")134 translate(u'ServiceManager', u'Move to start'), self.onServiceTop)
131 self.Toolbar.addToolbarButton("Move down", ":/services/service_down.png")135 self.Toolbar.addToolbarButton("Move up", ":/services/service_up.png",
132 self.Toolbar.addToolbarButton("Move to bottom", ":/services/service_bottom.png")136 translate(u'ServiceManager', u'Move up order'), self.onServiceUp)
133 self.Toolbar.addSeparator()137 self.Toolbar.addToolbarButton("Move down", ":/services/service_down.png",
134 self.Toolbar.addToolbarButton("New Service", ":/services/service_new.png")138 translate(u'ServiceManager', u'Move down order'), self.onServiceDown)
135 self.Toolbar.addToolbarButton("Save Service", ":/services/service_save.png")139 self.Toolbar.addToolbarButton("Move to bottom", ":/services/service_bottom.png",
136 self.Toolbar.addSeparator()140 translate(u'ServiceManager', u'Move to end'), self.onServiceEnd)
137 self.ThemeComboBox = QtGui.QComboBox(self.Toolbar)141 self.Toolbar.addSeparator()
138 self.ThemeComboBox.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToContents)142 self.Toolbar.addToolbarButton("New Service", ":/services/service_new.png",
139 self.ThemeWidget = QtGui.QWidgetAction(self.Toolbar)143 translate(u'ServiceManager', u'Create a new Service'), self.onNewService)
144 self.Toolbar.addToolbarButton("Delete From Service", ":/services/service_delete.png",
145 translate(u'ServiceManager', u'Delete From Service'), self.onDeleteFromService)
146 self.Toolbar.addSeparator()
147 self.Toolbar.addToolbarButton("Save Service", ":/services/service_save.png",
148 translate(u'ServiceManager', u'Save Service'), self.onSaveService)
149 self.Toolbar.addToolbarButton("Load Service", ":/services/service_open.png",
150 translate(u'ServiceManager', u'Load Existing'), self.onLoadService)
151
152 self.Toolbar.addSeparator()
153 self.ThemeComboBox = QComboBox(self.Toolbar)
154 self.ThemeComboBox.setSizeAdjustPolicy(QComboBox.AdjustToContents)
155 self.ThemeWidget = QWidgetAction(self.Toolbar)
140 self.ThemeWidget.setDefaultWidget(self.ThemeComboBox)156 self.ThemeWidget.setDefaultWidget(self.ThemeComboBox)
141 self.Toolbar.addAction(self.ThemeWidget)157 self.Toolbar.addAction(self.ThemeWidget)
142158
143 self.Layout.addWidget(self.Toolbar)159 self.Layout.addWidget(self.Toolbar)
144160
145 self.TreeView = QtGui.QTreeView(self)161 self.TreeView = QTreeView(self)
146 self.service_data=ServiceData()162 self.service_data=ServiceData()
147 self.TreeView.setModel(self.service_data)163 self.TreeView.setModel(self.service_data)
164 self.TreeView.setAlternatingRowColors(True)
148 self.Layout.addWidget(self.TreeView)165 self.Layout.addWidget(self.TreeView)
149166
150 QtCore.QObject.connect(self.ThemeComboBox,167 QObject.connect(self.ThemeComboBox,
151 QtCore.SIGNAL("activated(int)"), self.onThemeComboBoxSelected)168 SIGNAL("activated(int)"), self.onThemeComboBoxSelected)
169
170 def onServiceTop(self):
171 pass
172
173 def onServiceUp(self):
174 pass
175
176 def onServiceDown(self):
177 pass
178
179 def onServiceEnd(self):
180 pass
181
182 def onNewService(self):
183 self.service_data.clearItems()
184
185 def onDeleteFromService(self):
186 pass
187
188 def onSaveService(self):
189 Pass
190
191 def onLoadService(self):
192 Pass
193
194
195
152196
153 def onThemeComboBoxSelected(self, currentIndex):197 def onThemeComboBoxSelected(self, currentIndex):
154 self.renderManager.default_theme = self.ThemeComboBox.currentText()198 self.renderManager.default_theme = self.ThemeComboBox.currentText()
155199
=== modified file 'openlp/core/ui/slidecontroller.py'
--- openlp/core/ui/slidecontroller.py 2009-05-03 07:20:15 +0000
+++ openlp/core/ui/slidecontroller.py 2009-05-04 13:48:12 +0000
@@ -20,10 +20,12 @@
20import logging20import logging
21import os21import os
2222
23from PyQt4 import QtCore, QtGui
24from PyQt4.QtCore import *23from PyQt4.QtCore import *
25from PyQt4.QtGui import *24from PyQt4.QtGui import *
2625
26from openlp.core.lib import OpenLPToolbar
27from openlp.core import translate
28
27class SlideData(QAbstractListModel):29class SlideData(QAbstractListModel):
28 """30 """
29 Tree of items for an order of Theme.31 Tree of items for an order of Theme.
@@ -46,14 +48,14 @@
46 def columnCount(self, parent):48 def columnCount(self, parent):
47 return 149 return 1
4850
49 def rowCount(self, parent):51 def rowCount(self, parent=None):
50 return len(self.items)52 return len(self.items)
5153
52 def insertRow(self, row, frame):54 def insertRow(self, row, frame):
53 self.beginInsertRows(QModelIndex(),row,row)55 self.beginInsertRows(QModelIndex(),row,row)
54 log.info(u'insert row %d' % row)56 log.info(u'insert row %d' % row)
55 # create a preview image57 # create a preview image
56 frame1 = frame.scaled(QtCore.QSize(350,260))58 frame1 = frame.scaled(QSize(350,260))
57 self.items.insert(row,(frame1))59 self.items.insert(row,(frame1))
58 log.info(u'Items: %s' % self.items)60 log.info(u'Items: %s' % self.items)
59 self.endInsertRows()61 self.endInsertRows()
@@ -99,48 +101,112 @@
99 return filelist101 return filelist
100102
101103
102class SlideController(QtGui.QWidget):104class SlideController(QWidget):
103 global log105 global log
104 log=logging.getLogger(u'SlideController')106 log=logging.getLogger(u'SlideController')
105107
106 def __init__(self, control_splitter):108 def __init__(self, control_splitter, isLive):
107 QtGui.QWidget.__init__(self)109 QWidget.__init__(self)
108 self.Pane = QtGui.QWidget(control_splitter)110 self.isLive = isLive
109 self.Splitter = QtGui.QSplitter(self.Pane)111 self.Panel = QWidget(control_splitter)
110 self.Splitter.setOrientation(QtCore.Qt.Vertical)112 self.Splitter = QSplitter(self.Panel)
111113 self.Splitter.setOrientation(Qt.Vertical)
112 self.PaneLayout = QtGui.QVBoxLayout(self.Pane)114
113 self.PaneLayout.addWidget(self.Splitter)115 self.PanelLayout = QVBoxLayout(self.Panel)
114 self.PaneLayout.setSpacing(50)116 self.PanelLayout.addWidget(self.Splitter)
115 self.PaneLayout.setMargin(0)117 self.PanelLayout.setSpacing(50)
116118 self.PanelLayout.setMargin(0)
117 self.Controller = QtGui.QScrollArea(self.Splitter)119
120 self.Controller = QScrollArea(self.Splitter)
118 self.Controller.setWidgetResizable(True)121 self.Controller.setWidgetResizable(True)
119122
120 self.PreviewListView = QtGui.QListView(self.Splitter)123 self.PreviewListView = QListView(self.Splitter)
121 self.PreviewListView.setAlternatingRowColors(True)124 self.PreviewListView.setAlternatingRowColors(True)
122 self.PreviewListData = SlideData()125 self.PreviewListData = SlideData()
123 self.PreviewListView.setModel(self.PreviewListData)126 self.PreviewListView.setModel(self.PreviewListData)
124 self.Controller.setGeometry(QtCore.QRect(0, 0, 828, 536))
125127
128 self.Controller.setGeometry(QRect(0, 0, 828, 536))
126 self.Controller.setWidget(self.PreviewListView)129 self.Controller.setWidget(self.PreviewListView)
127130
128 self.SlidePreview = QtGui.QLabel(self.Splitter)131 self.Toolbar = OpenLPToolbar(self.Splitter)
129 sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)132 sizeToolbarPolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
133 sizeToolbarPolicy.setHorizontalStretch(0)
134 sizeToolbarPolicy.setVerticalStretch(0)
135 sizeToolbarPolicy.setHeightForWidth(self.Toolbar.sizePolicy().hasHeightForWidth())
136
137 if self.isLive:
138 self.Toolbar.addToolbarButton("First Slide", ":/slides/slide_first.png",
139 translate(u'SlideController', u'Move to first'), self.onSlideSelectedFirst)
140 self.Toolbar.addToolbarButton("Last Slide", ":/slides/slide_previous.png",
141 translate(u'SlideController', u'Move to previous'), self.onSlideSelectedPrevious)
142 self.Toolbar.addToolbarButton("First Slide", ":/slides/slide_next.png",
143 translate(u'SlideController', u'Move to next'), self.onSlideSelectedNext)
144 if self.isLive:
145 self.Toolbar.addToolbarButton("Last Slide", ":/slides/slide_last.png",
146 translate(u'SlideController', u'Move to last'), self.onSlideSelectedLast)
147 self.Toolbar.addSeparator()
148 self.Toolbar.addToolbarButton("Close Sscreen", ":/slides/slide_close.png",
149 translate(u'SlideController', u'Close Screen'), self.onBlankScreen)
150
151 self.Toolbar.setSizePolicy(sizeToolbarPolicy)
152
153 self.SlidePreview = QLabel(self.Splitter)
154 sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
130 sizePolicy.setHorizontalStretch(0)155 sizePolicy.setHorizontalStretch(0)
131 sizePolicy.setVerticalStretch(0)156 sizePolicy.setVerticalStretch(0)
132 sizePolicy.setHeightForWidth(self.SlidePreview.sizePolicy().hasHeightForWidth())157 sizePolicy.setHeightForWidth(self.SlidePreview.sizePolicy().hasHeightForWidth())
133 self.SlidePreview.setSizePolicy(sizePolicy)158 self.SlidePreview.setSizePolicy(sizePolicy)
134 self.SlidePreview.setMinimumSize(QtCore.QSize(250, 190))159 self.SlidePreview.setMinimumSize(QSize(250, 190))
135 self.SlidePreview.setFrameShape(QtGui.QFrame.WinPanel)160 self.SlidePreview.setFrameShape(QFrame.WinPanel)
136 self.SlidePreview.setFrameShadow(QtGui.QFrame.Sunken)161 self.SlidePreview.setFrameShadow(QFrame.Sunken)
137 self.SlidePreview.setLineWidth(1)162 self.SlidePreview.setLineWidth(1)
138 self.SlidePreview.setScaledContents(True)163 self.SlidePreview.setScaledContents(True)
139 self.SlidePreview.setObjectName("SlidePreview")164 self.SlidePreview.setObjectName("SlidePreview")
140165
141 QtCore.QObject.connect(self.PreviewListView,166 QObject.connect(self.PreviewListView,
142 QtCore.SIGNAL("clicked(QModelIndex)"), self.onSlideSelected)167 SIGNAL("clicked(QModelIndex)"), self.onSlideSelected)
143168
169 def onSlideSelectedFirst(self):
170 row = self.PreviewListData.createIndex(0, 0)
171 if row.isValid():
172 self.PreviewListView.selectionModel().setCurrentIndex(row, QItemSelectionModel.SelectCurrent)
173 self.onSlideSelected(row)
174
175 def onSlideSelectedNext(self):
176 indexes = self.PreviewListView.selectedIndexes()
177 rowNumber = 0
178 for index in indexes:
179 if index.row() == self.PreviewListData.rowCount() - 1:
180 rowNumber = 0
181 else:
182 rowNumber = index.row() + 1
183 row = self.PreviewListData.createIndex(rowNumber , 0)
184 if row.isValid():
185 self.PreviewListView.selectionModel().setCurrentIndex(row, QItemSelectionModel.SelectCurrent)
186 self.onSlideSelected(row)
187
188
189 def onSlideSelectedPrevious(self):
190 indexes = self.PreviewListView.selectedIndexes()
191 rowNumber = 0
192 for index in indexes:
193 if index.row() == 0:
194 rowNumber = self.PreviewListData.rowCount() - 1
195 else:
196 rowNumber = index.row() - 1
197 row = self.PreviewListData.createIndex(rowNumber , 0)
198 if row.isValid():
199 self.PreviewListView.selectionModel().setCurrentIndex(row, QItemSelectionModel.SelectCurrent)
200 self.onSlideSelected(row)
201
202 def onSlideSelectedLast(self):
203 row = self.PreviewListData.createIndex(self.PreviewListData.rowCount() - 1 , 0)
204 if row.isValid():
205 self.PreviewListView.selectionModel().setCurrentIndex(row, QItemSelectionModel.SelectCurrent)
206 self.onSlideSelected(row)
207
208 def onBlankScreen(self):
209 self.mainDisplay.blankDisplay()
144210
145 def onSlideSelected(self, index):211 def onSlideSelected(self, index):
146 frame = self.PreviewListData.getValue(index)212 frame = self.PreviewListData.getValue(index)
@@ -152,11 +218,17 @@
152 self.mainDisplay.frameView(frame)218 self.mainDisplay.frameView(frame)
153219
154 def addServiceItem(self, serviceitem):220 def addServiceItem(self, serviceitem):
221 log.debug(u'addServiceItem')
155 self.serviceitem = serviceitem222 self.serviceitem = serviceitem
156 self.serviceitem.render()223 self.serviceitem.render()
157 self.PreviewListData.clearItems()224 self.PreviewListData.clearItems()
158 for frame in self.serviceitem.frames:225 for frame in self.serviceitem.frames:
159 self.PreviewListData.addRow(frame)226 self.PreviewListData.addRow(frame)
160227
228 row = self.PreviewListData.createIndex(0, 0)
229 if row.isValid():
230 self.PreviewListView.selectionModel().setCurrentIndex(row, QItemSelectionModel.SelectCurrent)
231 self.onSlideSelected(row)
232
161 def render(self):233 def render(self):
162 pass234 pass
163235
=== modified file 'openlp/core/ui/thememanager.py'
--- openlp/core/ui/thememanager.py 2009-05-02 18:56:27 +0000
+++ openlp/core/ui/thememanager.py 2009-05-04 08:15:48 +0000
@@ -164,12 +164,13 @@
164 translate(u'ThemeManager', u'Export a theme'), self.onExportTheme)164 translate(u'ThemeManager', u'Export a theme'), self.onExportTheme)
165 self.ThemeWidget = QtGui.QWidgetAction(self.Toolbar)165 self.ThemeWidget = QtGui.QWidgetAction(self.Toolbar)
166 self.Layout.addWidget(self.Toolbar)166 self.Layout.addWidget(self.Toolbar)
167
167 self.ThemeListView = QtGui.QListView(self)168 self.ThemeListView = QtGui.QListView(self)
168 self.themeData = ThemeData()169 self.themeData = ThemeData()
169 self.ThemeListView.setModel(self.themeData)170 self.ThemeListView.setModel(self.themeData)
170 self.ThemeListView.setAlternatingRowColors(True)171 self.ThemeListView.setAlternatingRowColors(True)
171 self.Layout.addWidget(self.ThemeListView)172 self.Layout.addWidget(self.ThemeListView)
172 self.ThemeListView.setAlternatingRowColors(True)173
173 self.themelist = []174 self.themelist = []
174 self.path = os.path.join(ConfigHelper.get_data_path(), u'themes')175 self.path = os.path.join(ConfigHelper.get_data_path(), u'themes')
175 self.checkThemesExists(self.path)176 self.checkThemesExists(self.path)
176177
=== modified file 'openlp/plugins/bibles/lib/mediaitem.py'
--- openlp/plugins/bibles/lib/mediaitem.py 2009-05-02 18:56:27 +0000
+++ openlp/plugins/bibles/lib/mediaitem.py 2009-05-04 08:15:48 +0000
@@ -371,10 +371,10 @@
371 if len(raw_footer) <= 1:371 if len(raw_footer) <= 1:
372 raw_footer.append(book)372 raw_footer.append(book)
373373
374 service_item.theme = None374 if len(raw_slides) > 0:
375375 service_item.theme = None
376 service_item.raw_slides = raw_slides376 service_item.raw_slides = raw_slides
377 service_item.raw_footer = raw_footer377 service_item.raw_footer = raw_footer
378378
379 def formatVerse(self, old_chapter, chapter, verse, opening, closing):379 def formatVerse(self, old_chapter, chapter, verse, opening, closing):
380 loc = opening380 loc = opening
381381
=== modified file 'openlp/plugins/custom/lib/mediaitem.py'
--- openlp/plugins/custom/lib/mediaitem.py 2009-05-02 18:56:27 +0000
+++ openlp/plugins/custom/lib/mediaitem.py 2009-05-04 13:48:12 +0000
@@ -187,6 +187,7 @@
187 self.CustomListData.deleteRow(index)187 self.CustomListData.deleteRow(index)
188188
189 def onCustomPreviewClick(self):189 def onCustomPreviewClick(self):
190 log.debug(u'Custom Preview Requested')
190 service_item = ServiceItem(self.parent)191 service_item = ServiceItem(self.parent)
191 service_item.addIcon( ":/media/media_song.png")192 service_item.addIcon( ":/media/media_song.png")
192 service_item.render_manager = self.parent.render_manager193 service_item.render_manager = self.parent.render_manager
@@ -194,6 +195,7 @@
194 self.parent.preview_controller.addServiceItem(service_item)195 self.parent.preview_controller.addServiceItem(service_item)
195196
196 def onCustomLiveClick(self):197 def onCustomLiveClick(self):
198 log.debug(u'Custom Live Requested')
197 service_item = ServiceItem(self.parent)199 service_item = ServiceItem(self.parent)
198 service_item.addIcon( ":/media/media_song.png")200 service_item.addIcon( ":/media/media_song.png")
199 service_item.render_manager = self.parent.render_manager201 service_item.render_manager = self.parent.render_manager
@@ -201,6 +203,7 @@
201 self.parent.live_controller.addServiceItem(service_item)203 self.parent.live_controller.addServiceItem(service_item)
202204
203 def onCustomAddClick(self):205 def onCustomAddClick(self):
206 log.debug(u'Custom Add Requested')
204 service_item = ServiceItem(self.parent)207 service_item = ServiceItem(self.parent)
205 service_item.addIcon( ":/media/media_song.png")208 service_item.addIcon( ":/media/media_song.png")
206 service_item.render_manager = self.parent.render_manager209 service_item.render_manager = self.parent.render_manager
@@ -226,6 +229,7 @@
226 for verse in verseList:229 for verse in verseList:
227 raw_slides.append(verse[1])230 raw_slides.append(verse[1])
228 raw_footer.append(title + u' '+ credit)231 raw_footer.append(title + u' '+ credit)
229 service_item.title = title232 if theme is not None:
230 service_item.raw_slides = raw_slides233 service_item.title = title
231 service_item.raw_footer = raw_footer234 service_item.raw_slides = raw_slides
235 service_item.raw_footer = raw_footer