Merge lp:~trb143/openlp/servicing2 into lp:openlp
- servicing2
- Merge into trunk
Status: | Merged |
---|---|
Merged at revision: | not available |
Proposed branch: | lp:~trb143/openlp/servicing2 |
Merge into: | lp:openlp |
Diff against target: | None lines |
To merge this branch: | bzr merge lp:~trb143/openlp/servicing2 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Martin Thompson (community) | Approve | ||
Review via email: mp+8210@code.launchpad.net |
Commit message
Description of the change
Tim Bentley (trb143) wrote : | # |
Martin Thompson (mjthompson) wrote : | # |
Some nitpicks and queries:
8 + #replace the quotes with quotes
9 + line, replace("''", "'")
Do you need a "u" in front of the strings? Also, I find it easier to see what's going on in strings that are pure quote marks to actually escape the quotes (even though it's unnecessary).
Also, should it be line=line.
808 + self.SlidePrevi
Should the slide preview be of fixed size? Does this cause it to be too big on lo-res screen?
873 +class MasterToolbar(
874 + """
875 + Class from which all tollbars should extend
typo - tollbars -> toolbars.
1096 + #check to see file is in route directory
*root* directory?
The timer for the image lists: should the timeout be configurable as part of the OOS (different per service item), rather than in the plugin? Or is the settings tab just for a default?
Michael Gorven (mgorven) wrote : | # |
On Sunday 05 July 2009 21:36:54 Martin Thompson wrote:
> Do you need a "u" in front of the strings?
YES! It makes it a Unicode string instead of a bytestring. All strings should
be Unicode unless they are entering or leaving the application. (Python 3
makes Unicode strings the default, by the way.)
Martin Thompson (mjthompson) wrote : | # |
On Mon, Jul 06, 2009 at 04:12:09PM -0000 or thereabouts, Michael Gorven wrote:
> On Sunday 05 July 2009 21:36:54 Martin Thompson wrote:
> > Do you need a "u" in front of the strings?
>
> YES! It makes it a Unicode string instead of a bytestring. All strings should
> be Unicode unless they are entering or leaving the application. (Python 3
> makes Unicode strings the default, by the way.)
It was more of the "It think you *do* need a unicode string, but I'm
not sure if something weird is going on as it looks like 'old-stuff'
import code" - hence the query rather than a statement :)
Cheers,
Martin
--
<email address hidden>
int deep_thought(void) {
sleep (7.5e6*
}
Preview Diff
1 | === modified file 'cnvdb.py' | |||
2 | --- cnvdb.py 2009-06-25 19:42:22 +0000 | |||
3 | +++ cnvdb.py 2009-07-02 19:10:14 +0000 | |||
4 | @@ -30,6 +30,8 @@ | |||
5 | 30 | infile = codecs.open(inname, 'r', encoding='iso-8859-1') | 30 | infile = codecs.open(inname, 'r', encoding='iso-8859-1') |
6 | 31 | writefile = codecs.open(outname, 'w', encoding='utf-8') | 31 | writefile = codecs.open(outname, 'w', encoding='utf-8') |
7 | 32 | for line in infile: | 32 | for line in infile: |
8 | 33 | #replace the quotes with quotes | ||
9 | 34 | line, replace("''", "'") | ||
10 | 33 | writefile.write(line) | 35 | writefile.write(line) |
11 | 34 | infile.close() | 36 | infile.close() |
12 | 35 | writefile.close() | 37 | writefile.close() |
13 | 36 | 38 | ||
14 | === modified file 'openlp/core/lib/listwithpreviews.py' | |||
15 | --- openlp/core/lib/listwithpreviews.py 2009-06-23 20:59:38 +0000 | |||
16 | +++ openlp/core/lib/listwithpreviews.py 2009-06-30 20:35:53 +0000 | |||
17 | @@ -35,14 +35,18 @@ | |||
18 | 35 | self.items = [] | 35 | self.items = [] |
19 | 36 | self.rowheight = 50 | 36 | self.rowheight = 50 |
20 | 37 | self.maximagewidth = self.rowheight * 16 / 9.0; | 37 | self.maximagewidth = self.rowheight * 16 / 9.0; |
25 | 38 | if new_preview_function is not None: | 38 | self.preview_function = new_preview_function |
22 | 39 | self.make_preview=new_preview_function | ||
23 | 40 | else: | ||
24 | 41 | self.make_preview=self.preview_function | ||
26 | 42 | 39 | ||
28 | 43 | def preview_function(self, filename): | 40 | def make_preview(self, filename): |
29 | 44 | if os.path.exists(filename): | 41 | if os.path.exists(filename): |
31 | 45 | preview = QtGui.QImage(filename) | 42 | if self.preview_function is not None: |
32 | 43 | preview=self.preview_function(filename) | ||
33 | 44 | else: | ||
34 | 45 | preview = QtGui.QImage(filename) | ||
35 | 46 | else: | ||
36 | 47 | preview = None | ||
37 | 48 | |||
38 | 49 | if preview is not None: | ||
39 | 46 | w = self.maximagewidth; | 50 | w = self.maximagewidth; |
40 | 47 | h = self.rowheight | 51 | h = self.rowheight |
41 | 48 | preview = preview.scaled(w, h, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation) | 52 | preview = preview.scaled(w, h, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation) |
42 | 49 | 53 | ||
43 | === modified file 'openlp/core/lib/mediamanageritem.py' | |||
44 | --- openlp/core/lib/mediamanageritem.py 2009-06-29 05:07:32 +0000 | |||
45 | +++ openlp/core/lib/mediamanageritem.py 2009-07-04 05:52:30 +0000 | |||
46 | @@ -23,14 +23,38 @@ | |||
47 | 23 | from PyQt4 import QtCore, QtGui | 23 | from PyQt4 import QtCore, QtGui |
48 | 24 | 24 | ||
49 | 25 | from openlp.core.lib.toolbar import * | 25 | from openlp.core.lib.toolbar import * |
52 | 26 | from openlp.core.lib import translate | 26 | from openlp.core.lib import translate, contextMenuAction, contextMenuSeparator |
51 | 27 | from listwithpreviews import ListWithPreviews | ||
53 | 28 | from serviceitem import ServiceItem | 27 | from serviceitem import ServiceItem |
54 | 29 | 28 | ||
55 | 30 | class MediaManagerItem(QtGui.QWidget): | 29 | class MediaManagerItem(QtGui.QWidget): |
56 | 31 | """ | 30 | """ |
57 | 32 | MediaManagerItem is a helper widget for plugins. | 31 | MediaManagerItem is a helper widget for plugins. |
58 | 32 | |||
59 | 33 | None of the following *need* to be used, feel free to override | ||
60 | 34 | them cmopletely in your plugin's implementation. Alternatively, call them from your | ||
61 | 35 | plugin before or after you've done etra things that you need to. | ||
62 | 36 | |||
63 | 37 | The plugin will be assigned an icon called u':/media/media_' + 'self.ShortPluginName + u'image.png' | ||
64 | 38 | which needs to be available in the main resources in order for them to work, you need to have setup | ||
65 | 39 | |||
66 | 40 | self.TranslationContext | ||
67 | 41 | self.PluginTextShort # eg 'Image' for the image plugin | ||
68 | 42 | self.ConfigSection - where the items in the media manager are stored | ||
69 | 43 | this could potentially be self.PluginTextShort.lower() | ||
70 | 44 | |||
71 | 45 | self.OnNewPrompt=u'Select Image(s)' | ||
72 | 46 | self.OnNewFileMasks=u'Images (*.jpg *jpeg *.gif *.png *.bmp)' | ||
73 | 47 | assumes that the new action is to load a file. If not, override onnew | ||
74 | 48 | |||
75 | 49 | self.ListViewWithDnD_class - there is a base list class with DnD assigned to it (openlp.core.lib.BaseListWithDnD()) | ||
76 | 50 | each plugin needs to inherit a class from this and pass that *class* (not an instance) to here | ||
77 | 51 | via the ListViewWithDnD_class member | ||
78 | 52 | |||
79 | 53 | self.PreviewFunction - a function which returns a QImage to represent the item (a preview usually) | ||
80 | 54 | - no scaling required - that's done later | ||
81 | 55 | If this fn is not defined, a default will be used (treat the filename as an image) | ||
82 | 33 | """ | 56 | """ |
83 | 57 | |||
84 | 34 | global log | 58 | global log |
85 | 35 | log = logging.getLogger(u'MediaManagerItem') | 59 | log = logging.getLogger(u'MediaManagerItem') |
86 | 36 | log.info(u'Media Item loaded') | 60 | log.info(u'Media Item loaded') |
87 | @@ -84,61 +108,6 @@ | |||
88 | 84 | """ | 108 | """ |
89 | 85 | self.Toolbar.addSeparator() | 109 | self.Toolbar.addSeparator() |
90 | 86 | 110 | ||
91 | 87 | def contextMenuSeparator(self, base): | ||
92 | 88 | action = QtGui.QAction(u'', base) | ||
93 | 89 | action.setSeparator(True) | ||
94 | 90 | return action | ||
95 | 91 | |||
96 | 92 | def contextMenuAction(self, base, icon, text, slot): | ||
97 | 93 | """ | ||
98 | 94 | Utility method to help build context menus for plugins | ||
99 | 95 | """ | ||
100 | 96 | if type(icon) is QtGui.QIcon: | ||
101 | 97 | ButtonIcon = icon | ||
102 | 98 | elif type(icon) is types.StringType or type(icon) is types.UnicodeType: | ||
103 | 99 | ButtonIcon = QtGui.QIcon() | ||
104 | 100 | if icon.startswith(u':/'): | ||
105 | 101 | ButtonIcon.addPixmap(QtGui.QPixmap(icon), QtGui.QIcon.Normal, | ||
106 | 102 | QtGui.QIcon.Off) | ||
107 | 103 | else: | ||
108 | 104 | ButtonIcon.addPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(icon)), | ||
109 | 105 | QtGui.QIcon.Normal, QtGui.QIcon.Off) | ||
110 | 106 | |||
111 | 107 | action = QtGui.QAction(text, base) | ||
112 | 108 | action .setIcon(ButtonIcon) | ||
113 | 109 | QtCore.QObject.connect(action, QtCore.SIGNAL(u'triggered()'), slot) | ||
114 | 110 | return action | ||
115 | 111 | |||
116 | 112 | ########################################################################### | ||
117 | 113 | ### None of the following *need* to be used, feel free to override | ||
118 | 114 | ### them cmopletely in your plugin's implementation. Alternatively, call them from your | ||
119 | 115 | ### plugin before or after you've done etra things that you need to. | ||
120 | 116 | ### in order for them to work, you need to have setup | ||
121 | 117 | # self.TranslationContext | ||
122 | 118 | # self.PluginTextShort # eg "Image" for the image plugin | ||
123 | 119 | # self.ConfigSection - where the items in the media manager are stored | ||
124 | 120 | # this could potentially be self.PluginTextShort.lower() | ||
125 | 121 | # self.IconPath=u'images/images' - allows specific icons to be used | ||
126 | 122 | # self.hasFileIcon - Is the file Icon required | ||
127 | 123 | # self.hasEditIcon - Is the edit Icon required | ||
128 | 124 | # self.hasNewIcon - Is the new Icon required | ||
129 | 125 | # | ||
130 | 126 | # self.OnNewPrompt=u'Select Image(s)' | ||
131 | 127 | # self.OnNewFileMasks=u'Images (*.jpg *jpeg *.gif *.png *.bmp)' | ||
132 | 128 | # assumes that the new action is to load a file. If not, override onnew | ||
133 | 129 | # self.ListViewWithDnD_class - there is a base list class with DnD assigned to it (openlp.core.lib.BaseListWithDnD()) | ||
134 | 130 | # each plugin needs to inherit a class from this and pass that *class* (not an instance) to here | ||
135 | 131 | # via the ListViewWithDnD_class member | ||
136 | 132 | # The assumption is that given that at least two plugins are of the form | ||
137 | 133 | # "text with an icon" then all this will help | ||
138 | 134 | # even for plugins of another sort, the setup of the right-click menu, common toolbar | ||
139 | 135 | # will help to keep things consistent and ease the creation of new plugins | ||
140 | 136 | |||
141 | 137 | # also a set of completely consistent action anesm then exist | ||
142 | 138 | # (onPreviewClick() is always called that, rather than having the | ||
143 | 139 | # name of the plugin added in as well... I regard that as a | ||
144 | 140 | # feature, I guess others might differ!) | ||
145 | 141 | |||
146 | 142 | def setupUi(self): | 111 | def setupUi(self): |
147 | 143 | # Add a toolbar | 112 | # Add a toolbar |
148 | 144 | self.addToolbar() | 113 | self.addToolbar() |
149 | @@ -168,7 +137,7 @@ | |||
150 | 168 | u':'+self.IconPath+ u'_delete.png', self.onDeleteClick, self.PluginTextShort+u'DeleteItem') | 137 | u':'+self.IconPath+ u'_delete.png', self.onDeleteClick, self.PluginTextShort+u'DeleteItem') |
151 | 169 | ## Separator Line ## | 138 | ## Separator Line ## |
152 | 170 | self.addToolbarSeparator() | 139 | self.addToolbarSeparator() |
154 | 171 | ## Preview Button ## | 140 | ## Preview ## |
155 | 172 | self.addToolbarButton( | 141 | self.addToolbarButton( |
156 | 173 | translate(self.TranslationContext, u'Preview '+self.PluginTextShort), | 142 | translate(self.TranslationContext, u'Preview '+self.PluginTextShort), |
157 | 174 | translate(self.TranslationContext, u'Preview the selected item'), | 143 | translate(self.TranslationContext, u'Preview the selected item'), |
158 | @@ -178,7 +147,7 @@ | |||
159 | 178 | translate(self.TranslationContext, u'Go Live'), | 147 | translate(self.TranslationContext, u'Go Live'), |
160 | 179 | translate(self.TranslationContext, u'Send the selected item live'), | 148 | translate(self.TranslationContext, u'Send the selected item live'), |
161 | 180 | u':/system/system_live.png', self.onLiveClick, u'LiveItem') | 149 | u':/system/system_live.png', self.onLiveClick, u'LiveItem') |
163 | 181 | ## Add Button ## | 150 | ## Add to service Button ## |
164 | 182 | self.addToolbarButton( | 151 | self.addToolbarButton( |
165 | 183 | translate(self.TranslationContext, u'Add '+self.PluginTextShort+u' To Service'), | 152 | translate(self.TranslationContext, u'Add '+self.PluginTextShort+u' To Service'), |
166 | 184 | translate(self.TranslationContext, u'Add the selected item(s) to the service'), | 153 | translate(self.TranslationContext, u'Add the selected item(s) to the service'), |
167 | @@ -199,26 +168,29 @@ | |||
168 | 199 | #define and add the context menu | 168 | #define and add the context menu |
169 | 200 | self.ListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) | 169 | self.ListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) |
170 | 201 | if self.hasEditIcon: | 170 | if self.hasEditIcon: |
172 | 202 | self.ListView.addAction(self.contextMenuAction(self.ListView, | 171 | self.ListView.addAction(contextMenuAction(self.ListView, |
173 | 203 | ':' +self.IconPath+u'_new.png', | 172 | ':' +self.IconPath+u'_new.png', |
174 | 204 | translate(self.TranslationContext, u'&Edit '+self.PluginTextShort), | 173 | translate(self.TranslationContext, u'&Edit '+self.PluginTextShort), |
175 | 205 | self.onEditClick)) | 174 | self.onEditClick)) |
176 | 206 | self.ListView.addAction(self.contextMenuSeparator(self.SongListWidget)) | 175 | self.ListView.addAction(self.contextMenuSeparator(self.SongListWidget)) |
178 | 207 | self.ListView.addAction(self.contextMenuAction( | 176 | self.ListView.addAction(contextMenuAction( |
179 | 208 | self.ListView, ':/system/system_preview.png', | 177 | self.ListView, ':/system/system_preview.png', |
180 | 209 | translate(self.TranslationContext, u'&Preview '+self.PluginTextShort), | 178 | translate(self.TranslationContext, u'&Preview '+self.PluginTextShort), |
181 | 210 | self.onPreviewClick)) | 179 | self.onPreviewClick)) |
183 | 211 | self.ListView.addAction(self.contextMenuAction( | 180 | self.ListView.addAction(contextMenuAction( |
184 | 212 | self.ListView, ':/system/system_live.png', | 181 | self.ListView, ':/system/system_live.png', |
185 | 213 | translate(self.TranslationContext, u'&Show Live'), | 182 | translate(self.TranslationContext, u'&Show Live'), |
186 | 214 | self.onLiveClick)) | 183 | self.onLiveClick)) |
188 | 215 | self.ListView.addAction(self.contextMenuAction( | 184 | self.ListView.addAction(contextMenuAction( |
189 | 216 | self.ListView, ':/system/system_add.png', | 185 | self.ListView, ':/system/system_add.png', |
190 | 217 | translate(self.TranslationContext, u'&Add to Service'), | 186 | translate(self.TranslationContext, u'&Add to Service'), |
191 | 218 | self.onAddClick)) | 187 | self.onAddClick)) |
192 | 219 | QtCore.QObject.connect(self.ListView, | 188 | QtCore.QObject.connect(self.ListView, |
193 | 220 | QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onPreviewClick) | 189 | QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onPreviewClick) |
194 | 221 | 190 | ||
195 | 191 | def initialise(self): | ||
196 | 192 | pass | ||
197 | 193 | |||
198 | 222 | def addHeaderBar(self): | 194 | def addHeaderBar(self): |
199 | 223 | pass | 195 | pass |
200 | 224 | 196 | ||
201 | @@ -232,12 +204,15 @@ | |||
202 | 232 | self.loadList(files) | 204 | self.loadList(files) |
203 | 233 | dir, filename = os.path.split(unicode(files[0])) | 205 | dir, filename = os.path.split(unicode(files[0])) |
204 | 234 | self.parent.config.set_last_dir(dir) | 206 | self.parent.config.set_last_dir(dir) |
206 | 235 | #self.parent.config.set_list(self.ConfigSection, self.ListData.getFileList()) | 207 | self.parent.config.set_list(self.ConfigSection, self.getFileList()) |
207 | 236 | 208 | ||
208 | 237 | def getFileList(self): | 209 | def getFileList(self): |
209 | 238 | count = 0 | 210 | count = 0 |
212 | 239 | while count < len(self.ListView): | 211 | filelist = [] |
213 | 240 | filelist = [set.ListView.item(count).text()] | 212 | while count < self.ListView.count(): |
214 | 213 | bitem = self.ListView.item(count) | ||
215 | 214 | filename = unicode((bitem.data(QtCore.Qt.UserRole)).toString()) | ||
216 | 215 | filelist.append(filename) | ||
217 | 241 | count += 1 | 216 | count += 1 |
218 | 242 | return filelist | 217 | return filelist |
219 | 243 | 218 | ||
220 | @@ -257,7 +232,7 @@ | |||
221 | 257 | raise NotImplementedError(u'MediaManagerItem.generateSlideData needs to be defined by the plugin') | 232 | raise NotImplementedError(u'MediaManagerItem.generateSlideData needs to be defined by the plugin') |
222 | 258 | 233 | ||
223 | 259 | def onPreviewClick(self): | 234 | def onPreviewClick(self): |
225 | 260 | log.debug(self.PluginTextShort+u'Preview Requested') | 235 | log.debug(self.PluginTextShort+u' Preview Requested') |
226 | 261 | service_item = ServiceItem(self.parent) | 236 | service_item = ServiceItem(self.parent) |
227 | 262 | service_item.addIcon(u':/media/media_'+self.PluginTextShort.lower()+u'.png') | 237 | service_item.addIcon(u':/media/media_'+self.PluginTextShort.lower()+u'.png') |
228 | 263 | self.generateSlideData(service_item) | 238 | self.generateSlideData(service_item) |
229 | 264 | 239 | ||
230 | === modified file 'openlp/core/lib/rendermanager.py' | |||
231 | --- openlp/core/lib/rendermanager.py 2009-06-20 11:23:34 +0000 | |||
232 | +++ openlp/core/lib/rendermanager.py 2009-07-02 19:04:50 +0000 | |||
233 | @@ -155,8 +155,12 @@ | |||
234 | 155 | 155 | ||
235 | 156 | def calculate_default(self, screen): | 156 | def calculate_default(self, screen): |
236 | 157 | log.debug(u'calculate default %s' , screen) | 157 | log.debug(u'calculate default %s' , screen) |
239 | 158 | self.width = screen.width() | 158 | if self.current_display == 0: |
240 | 159 | self.height = screen.height() | 159 | self.width = 1024 |
241 | 160 | self.height = 768 | ||
242 | 161 | else: | ||
243 | 162 | self.width = screen.width() | ||
244 | 163 | self.height = screen.height() | ||
245 | 160 | log.debug(u'calculate default %d,%d' , self.width, self.height) | 164 | log.debug(u'calculate default %d,%d' , self.width, self.height) |
246 | 161 | # 90% is start of footer | 165 | # 90% is start of footer |
247 | 162 | self.footer_start = int(self.height * 0.90) | 166 | self.footer_start = int(self.height * 0.90) |
248 | 163 | 167 | ||
249 | === modified file 'openlp/core/resources.py' | |||
250 | --- openlp/core/resources.py 2009-05-03 15:35:34 +0000 | |||
251 | +++ openlp/core/resources.py 2009-07-03 19:08:21 +0000 | |||
252 | @@ -2,8 +2,8 @@ | |||
253 | 2 | 2 | ||
254 | 3 | # Resource object code | 3 | # Resource object code |
255 | 4 | # | 4 | # |
258 | 5 | # Created: Sun May 3 17:32:20 2009 | 5 | # Created: Fri Jul 3 19:41:53 2009 |
259 | 6 | # by: The Resource Compiler for PyQt (Qt v4.4.3) | 6 | # by: The Resource Compiler for PyQt (Qt v4.5.0) |
260 | 7 | # | 7 | # |
261 | 8 | # WARNING! All changes made in this file will be lost! | 8 | # WARNING! All changes made in this file will be lost! |
262 | 9 | 9 | ||
263 | @@ -316,6 +316,69 @@ | |||
264 | 316 | \x18\x56\x6a\x9d\x81\x33\x40\x02\x7c\xfb\x53\xca\xd4\x39\x03\xa8\ | 316 | \x18\x56\x6a\x9d\x81\x33\x40\x02\x7c\xfb\x53\xca\xd4\x39\x03\xa8\ |
265 | 317 | \x5f\xd3\x56\x89\xec\x63\x12\x58\x4f\x00\x00\x00\x00\x49\x45\x4e\ | 317 | \x5f\xd3\x56\x89\xec\x63\x12\x58\x4f\x00\x00\x00\x00\x49\x45\x4e\ |
266 | 318 | \x44\xae\x42\x60\x82\ | 318 | \x44\xae\x42\x60\x82\ |
267 | 319 | \x00\x00\x03\xcf\ | ||
268 | 320 | \x89\ | ||
269 | 321 | \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ | ||
270 | 322 | \x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\ | ||
271 | 323 | \x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\ | ||
272 | 324 | \x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x01\xbb\x00\x00\x01\xbb\ | ||
273 | 325 | \x01\x3a\xec\xe3\xe2\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\ | ||
274 | 326 | \x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\ | ||
275 | 327 | \x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x03\x4c\x49\x44\ | ||
276 | 328 | \x41\x54\x78\xda\x75\x53\x4d\x48\x5b\x69\x14\x3d\xdf\xcb\x33\xe6\ | ||
277 | 329 | \x47\x13\x4d\x34\x71\x14\x89\x12\xa5\xa9\x05\xed\xc6\x38\x95\x31\ | ||
278 | 330 | \xa2\x03\xaf\x2a\x43\x70\x53\xb5\x60\x53\x5a\x90\xb6\x48\x97\xa9\ | ||
279 | 331 | \xa5\xed\xa2\x5d\x76\x31\x1d\x98\x42\x5b\xc6\xc5\xd0\x01\x45\xe3\ | ||
280 | 332 | \x60\x19\x28\x48\xa3\xcc\x80\x53\xc4\x2e\x52\xa5\xf5\x17\x34\xd1\ | ||
281 | 333 | \x1a\x11\x6d\xcc\x7f\x62\x34\x3f\xaf\x97\xb7\x90\x76\xd1\x03\x1f\ | ||
282 | 334 | \xef\x2d\xbe\x7b\xee\x3d\xe7\x9e\x8f\x89\xa2\x88\xef\xa1\xb9\xb9\ | ||
283 | 335 | \xd9\x30\x37\x37\x77\x80\xaf\x30\x30\x30\xf0\x50\xad\x56\xff\x18\ | ||
284 | 336 | \x89\x44\xe2\x54\x7b\xfb\x1b\x82\xe9\xe9\x69\xb9\xdb\xed\x9e\x09\ | ||
285 | 337 | \x04\x02\xe7\x73\xb9\x5c\x81\xc1\x60\x60\xf4\xcd\x06\x83\xc1\x50\ | ||
286 | 338 | \x32\x99\x74\x8d\x8f\x8f\x0f\xfe\x31\x3c\x9c\xfc\xa9\xa9\x69\xa1\ | ||
287 | 339 | \x5d\x10\x2e\xda\x6c\xb6\x5f\x4f\x09\xba\xbb\xbb\x7f\x29\x2e\x2e\ | ||
288 | 340 | \x76\x59\xad\x56\xa5\x56\xa3\x11\xb7\xb7\xb7\x73\xd1\x48\x04\x2a\ | ||
289 | 341 | \xb5\x1a\x96\x33\x16\xae\xc5\x66\x63\x4f\x7e\x7b\xf2\xf9\x72\x6f\ | ||
290 | 342 | \x6f\x49\x95\xc9\xc4\x9c\x77\xee\xee\xce\xfc\x3b\xf3\xa7\x44\x30\ | ||
291 | 343 | \x38\x38\x68\xdd\xd9\xd9\x99\x7f\x70\xef\x3e\x7b\xfb\xf6\xff\xac\ | ||
292 | 344 | \x51\xa7\x93\xe5\xab\x54\xd0\x68\x34\x08\x85\x42\x88\x46\xa3\x58\ | ||
293 | 345 | \x5b\x5f\xcf\x5c\xee\xef\xe7\x7d\x5e\x9f\x38\x39\x39\x39\x27\x42\ | ||
294 | 346 | \x1c\x1d\x1b\x1b\x7b\x26\x11\x38\x1c\x8e\xe8\xad\x1b\x37\x0b\xbd\ | ||
295 | 347 | \x9b\x1b\x62\x43\x7d\x3d\x2b\xcc\x64\xa0\x2a\x2f\xc7\x29\x18\xc3\ | ||
296 | 348 | \xc7\xa5\x25\x2c\x2e\x2e\xe6\x7e\x16\x04\x6e\x6f\x6f\x6f\xa5\xa3\ | ||
297 | 349 | \xa3\xe3\x1c\x08\x5c\x5b\x5b\xdb\xa3\x6c\x36\x5b\x18\x09\x05\xd3\ | ||
298 | 350 | \x17\x05\x81\x29\x94\x4a\x28\x0c\x06\xc4\xd6\xd6\xc0\xc9\x64\xd2\ | ||
299 | 351 | \x09\xd2\x14\x0a\x85\x02\x8e\x2b\x57\xb8\xbf\x5e\xbe\x3c\x69\xb2\ | ||
300 | 352 | \x36\xd5\xb5\xb7\xb7\x9f\x07\x41\xd6\xda\xda\x3a\xec\xe8\x77\xe8\ | ||
301 | 353 | \xaa\xaa\x4c\x32\x9e\xe7\x11\x0d\x06\x91\x4f\xba\x63\x2b\x2b\xd0\ | ||
302 | 354 | \x9a\xcd\xd8\x3f\x38\x40\x98\xbc\x38\x4a\xa5\xb0\xfd\xe9\x13\xaa\ | ||
303 | 355 | \xab\xab\xd9\x1b\xb7\x9b\xf5\xf5\xf5\x71\xf4\xff\x9a\x0f\x87\xc3\ | ||
304 | 356 | \xe5\x99\x6c\x46\x34\x1a\x8d\x2c\x1e\x8f\xa3\x98\x74\x2b\xa9\x5b\ | ||
305 | 357 | \xea\xec\x59\x3c\xbf\x7a\x15\x3a\xbb\x1d\x3b\x7e\x3f\xf4\x7a\x3d\ | ||
306 | 358 | \xe4\x72\x39\x68\x43\x5c\x2c\x16\x83\x4a\xa1\xba\x44\x0d\x23\x3c\ | ||
307 | 359 | \x99\x24\x26\x12\x71\x70\x1c\x27\x99\x96\x21\xfd\x7c\x5e\x1e\xd6\ | ||
308 | 360 | \x77\x77\x91\x28\x2b\x43\x1e\x91\xf6\xf4\xf4\xa0\xb4\xb4\x54\x92\ | ||
309 | 361 | \x91\x4e\xa7\xe1\xf1\x78\xf0\xea\x9f\x57\x45\x95\x95\x95\x39\x2e\ | ||
310 | 362 | \x95\x4a\xed\x52\x28\xd8\x21\x8d\xce\x88\x44\x9e\x9f\x2f\x91\x95\ | ||
311 | 363 | \x57\x54\x20\xa5\xd3\xa1\xb3\xb3\x13\x35\x35\x35\x98\x9a\x9a\x42\ | ||
312 | 364 | \x22\x91\x00\x65\x03\xe4\x1b\x2c\x16\x0b\xb3\xdb\xed\x15\xdc\xe1\ | ||
313 | 365 | \xe1\xe1\x7f\x89\x44\x12\xef\x17\x16\x4e\x64\x64\xd8\xf1\xf1\xb1\ | ||
314 | 366 | \x44\xb0\xb5\xb5\x85\x92\x92\x12\xa9\xb3\x92\x8c\xf5\x7a\xbd\x18\ | ||
315 | 367 | \x1a\x1a\xc2\xc8\xc8\x08\x68\x74\x08\x82\x00\x6a\x7e\x81\xdf\xd8\ | ||
316 | 368 | \xd8\xb8\x49\x46\x5e\xa3\x20\xc9\x3f\x07\x02\xe0\x18\x83\xba\xa0\ | ||
317 | 369 | \x00\xd4\x4d\xba\x48\x64\xd2\x99\x9d\x9d\xc5\xf2\xf2\xb2\x94\x89\ | ||
318 | 370 | \x96\x96\x16\xc9\x13\x92\xab\xe7\x40\xf0\xfb\xfd\x8e\x78\x2c\x8e\ | ||
319 | 371 | \xdf\x9f\x3e\x15\x43\xe1\x70\x86\x0a\x60\x24\xfd\xfb\xfb\xfb\x92\ | ||
320 | 372 | \x27\x94\x15\x89\x8c\x02\x87\x89\x89\x09\x98\x4c\x26\xac\xd1\x9a\ | ||
321 | 373 | \xc9\x0f\xcf\x69\x94\xcd\x66\xf3\xe3\xeb\xd7\xae\x3b\xd3\x99\x34\ | ||
322 | 374 | \x4b\x1d\x1d\xe5\x6a\x6b\x6b\xb3\xf3\xef\xde\xf1\x34\x19\xa3\x9d\ | ||
323 | 375 | \xc3\xe7\xf3\xa1\xae\xae\x0e\x20\x50\x6e\xe0\x74\x3a\x41\x81\xba\ | ||
324 | 376 | \xf4\xcd\x63\xa2\xa2\x1f\xa8\xe0\x43\x91\xb6\x48\xaf\x50\x2a\xd8\ | ||
325 | 377 | \xe6\xe6\xa6\x34\x32\x49\x44\x57\x57\x17\xb4\x5a\x2d\x56\x57\x57\ | ||
326 | 378 | \x31\x3a\x3a\x0a\x2a\x7e\x41\x51\xbe\xf5\xdd\xe7\xdc\xd8\xd8\x58\ | ||
327 | 379 | \xd6\xd0\xd0\xd0\x49\x5e\xcc\x53\xc7\x7b\x00\x2e\x30\xc6\xf4\x74\ | ||
328 | 380 | \xdf\x03\xe0\x85\xcb\xe5\xfa\x1b\x84\x2f\x2c\xec\x8e\x1c\x74\xf5\ | ||
329 | 381 | \x29\x98\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ | ||
330 | 319 | \x00\x00\x02\x02\ | 382 | \x00\x00\x02\x02\ |
331 | 320 | \x89\ | 383 | \x89\ |
332 | 321 | \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ | 384 | \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ |
333 | @@ -488,6 +551,54 @@ | |||
334 | 488 | \x8c\xb1\x50\x08\xd9\x60\x8c\x45\xd6\x9a\x08\x00\xfe\x06\x5b\x7b\ | 551 | \x8c\xb1\x50\x08\xd9\x60\x8c\x45\xd6\x9a\x08\x00\xfe\x06\x5b\x7b\ |
335 | 489 | \x9e\x53\x59\xbb\x17\xfa\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\ | 552 | \x9e\x53\x59\xbb\x17\xfa\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\ |
336 | 490 | \x60\x82\ | 553 | \x60\x82\ |
337 | 554 | \x00\x00\x02\xd2\ | ||
338 | 555 | \x89\ | ||
339 | 556 | \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ | ||
340 | 557 | \x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\ | ||
341 | 558 | \x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\ | ||
342 | 559 | \x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x01\xbb\x00\x00\x01\xbb\ | ||
343 | 560 | \x01\x3a\xec\xe3\xe2\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\ | ||
344 | 561 | \x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\ | ||
345 | 562 | \x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x02\x4f\x49\x44\ | ||
346 | 563 | \x41\x54\x78\xda\xa5\x93\xcb\x4f\x13\x51\x14\x87\xbf\x3b\x33\x1d\ | ||
347 | 564 | \x5a\x5b\x0c\x19\xc0\x42\xa0\xe5\x61\x13\x17\x24\xa8\x71\x65\x8c\ | ||
348 | 565 | \x1b\x8d\x89\x3b\x57\xee\x64\xa7\x0b\x1f\x7b\x48\x7c\x9b\xe0\x42\ | ||
349 | 566 | \x4d\x8c\x8f\x3f\x42\x57\x2e\x5d\x68\x74\x61\x0a\xa8\x41\x40\x5d\ | ||
350 | 567 | \xb0\xd0\x50\x1e\xa2\xb5\x0d\x8f\x4e\xa1\x32\x33\x9d\xeb\x1d\x26\ | ||
351 | 568 | \x4e\x0a\x5b\x4f\x72\x72\xef\xe6\xfb\xf2\x3b\x77\xce\x08\x29\x25\ | ||
352 | 569 | \xff\x53\x06\xbb\x6a\x4e\x88\xc1\x55\x78\x66\xe6\x72\xc9\xa6\x5c\ | ||
353 | 570 | \x2e\x16\x4b\xa7\x75\xb7\x58\xac\x3b\xb3\xb3\xf6\x9e\x42\xe1\x6c\ | ||
354 | 571 | \x9f\x94\x9f\x77\x08\x76\xc3\xa5\x6c\x36\xdf\x79\x77\x34\xd5\x64\ | ||
355 | 572 | \x59\x08\xa1\x81\xa6\x21\x3d\x17\xa7\x62\x77\x2e\x0f\x0f\xe7\x11\ | ||
356 | 573 | \xe2\x58\xa3\x24\x18\x21\x82\x17\xbb\xbb\xf2\x3d\x37\x6e\xa6\xcc\ | ||
357 | 574 | \x8d\x2a\xb2\x5e\x07\xcf\xc3\x57\xa7\xef\xba\xd4\x7d\x1f\x69\xb5\ | ||
358 | 575 | \xb2\x74\xff\x5e\x35\xf3\x63\x39\x92\x68\xff\xe0\xb9\x8e\xf4\x58\ | ||
359 | 576 | \xcf\xed\x5b\x29\xbd\x5c\x42\x28\x48\x57\x2d\x2a\x15\x74\xd5\x86\ | ||
360 | 577 | \x82\x0d\x29\x91\xdf\xbf\x91\x1d\x19\x4e\x15\x3a\x3a\xc6\x02\x86\ | ||
361 | 578 | \x48\x60\x18\xcf\x7b\xaf\x5f\x4d\x6a\xf3\x0b\xe8\xbe\x4f\xdb\xb9\ | ||
362 | 579 | \x21\x5a\x87\x86\xd4\x3d\x10\x79\xb4\x9f\xbf\x40\xe7\xc5\x4b\x98\ | ||
363 | 580 | \x02\xdc\xc9\x49\x7a\xaf\x8d\x24\x03\x26\x7a\x83\x9a\xe7\x25\xaa\ | ||
364 | 581 | \x1f\x26\x68\x69\x69\x43\x98\x26\x38\x0e\x46\x26\x83\x75\xf9\x0a\ | ||
365 | 582 | \xc1\x88\x31\x75\x77\x0b\x73\xe8\xab\xab\x18\x2a\xd1\xc6\xfb\x89\ | ||
366 | 583 | \x6d\x26\x4a\xe0\x80\x60\xb3\x8a\x56\x59\x47\x2f\xfe\x62\x65\xf4\ | ||
367 | 584 | \x0e\xee\xc2\x3c\x46\x77\x46\xc1\x59\xdc\xc5\x05\xd6\x9f\x3c\x26\ | ||
368 | 585 | \xae\x44\xcd\x03\x03\x18\xba\xd8\x66\xa2\x04\x1e\x88\x95\xfc\x5b\ | ||
369 | 586 | \x9a\x8c\x66\xea\xc9\x24\x7a\x36\x1b\x3e\x22\x61\x49\xd7\x65\x63\ | ||
370 | 587 | \xfa\x13\xde\xf4\x14\x75\xdb\x66\x2d\x11\x32\x8d\x09\x90\x9b\x36\ | ||
371 | 588 | \xfc\x5c\xc6\x5d\x5f\xa3\xfd\xc1\x43\xcc\xbe\x7e\xfe\x7c\xfd\xb2\ | ||
372 | 589 | \xdd\x66\xff\x7e\xd2\x8f\x9e\xe2\x27\xe2\x88\x00\xd2\x43\x26\x4a\ | ||
373 | 590 | \x20\x61\xab\xa6\xb3\xa3\xb6\x14\xb8\x78\xfa\x24\xbe\xef\xd3\xf3\ | ||
374 | 591 | \xf2\x35\x9a\x69\x22\x01\x01\x54\xf4\x90\x89\xf6\x60\x4a\x88\x83\ | ||
375 | 592 | \xef\x62\x8c\x0f\x36\x93\xe8\xb2\x41\xdb\xd7\x1e\xda\x83\x4f\x0a\ | ||
376 | 593 | \xb8\x96\x05\x7a\x0c\x7e\x17\x59\x4a\xc1\x8c\x4d\xed\xb8\xcb\xd1\ | ||
377 | 594 | \xc3\x52\xce\x44\x8b\x14\x48\xde\x98\x8c\x1f\xd9\x4b\x22\x53\x21\ | ||
378 | 595 | \x8c\x2a\xc2\x53\x02\xbe\x84\xa5\x16\xc1\xc7\x35\x59\x3b\xe1\x84\ | ||
379 | 596 | \x70\xe3\x26\x46\x92\x57\x4a\x72\xc0\x57\x49\x52\x49\x62\xf1\x38\ | ||
380 | 597 | \xba\x61\x50\xf7\x3c\xca\x08\x26\x57\xca\xb5\x53\x0d\xf0\x6e\x41\ | ||
381 | 598 | \x24\x19\x87\x17\xea\x27\x4a\xc4\x2d\x4b\x0b\x66\xf7\x1d\x07\xaf\ | ||
382 | 599 | \x54\xaa\x1d\x2a\x97\xcf\x44\x70\xa3\xe0\x7f\xea\x2f\xb2\x2a\x1f\ | ||
383 | 600 | \x46\x55\x40\xa7\x1e\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\ | ||
384 | 601 | \x82\ | ||
385 | 491 | \x00\x00\x02\xf9\ | 602 | \x00\x00\x02\xf9\ |
386 | 492 | \x89\ | 603 | \x89\ |
387 | 493 | \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ | 604 | \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ |
388 | @@ -53362,13 +53473,17 @@ | |||
389 | 53362 | \x00\x72\x00\x65\x00\x73\x00\x65\x00\x6e\x00\x74\x00\x61\x00\x74\x00\x69\x00\x6f\x00\x6e\x00\x5f\x00\x6c\x00\x6f\x00\x61\x00\x64\ | 53473 | \x00\x72\x00\x65\x00\x73\x00\x65\x00\x6e\x00\x74\x00\x61\x00\x74\x00\x69\x00\x6f\x00\x6e\x00\x5f\x00\x6c\x00\x6f\x00\x61\x00\x64\ |
390 | 53363 | \x00\x2e\x00\x70\x00\x6e\x00\x67\ | 53474 | \x00\x2e\x00\x70\x00\x6e\x00\x67\ |
391 | 53364 | \x00\x0f\ | 53475 | \x00\x0f\ |
393 | 53365 | \x0c\x7b\x40\x27\ | 53476 | \x0c\xcb\x28\x47\ |
394 | 53366 | \x00\x6d\ | 53477 | \x00\x6d\ |
396 | 53367 | \x00\x65\x00\x64\x00\x69\x00\x61\x00\x5f\x00\x76\x00\x65\x00\x72\x00\x73\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\ | 53478 | \x00\x65\x00\x64\x00\x69\x00\x61\x00\x5f\x00\x62\x00\x69\x00\x62\x00\x6c\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\ |
397 | 53368 | \x00\x0f\ | 53479 | \x00\x0f\ |
398 | 53369 | \x02\x3b\x21\xc7\ | 53480 | \x02\x3b\x21\xc7\ |
399 | 53370 | \x00\x6d\ | 53481 | \x00\x6d\ |
400 | 53371 | \x00\x65\x00\x64\x00\x69\x00\x61\x00\x5f\x00\x69\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\ | 53482 | \x00\x65\x00\x64\x00\x69\x00\x61\x00\x5f\x00\x69\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\ |
401 | 53483 | \x00\x0e\ | ||
402 | 53484 | \x0b\x6a\xa6\xe7\ | ||
403 | 53485 | \x00\x6d\ | ||
404 | 53486 | \x00\x65\x00\x64\x00\x69\x00\x61\x00\x5f\x00\x74\x00\x69\x00\x6d\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\ | ||
405 | 53372 | \x00\x10\ | 53487 | \x00\x10\ |
406 | 53373 | \x05\xab\xe0\xa7\ | 53488 | \x05\xab\xe0\xa7\ |
407 | 53374 | \x00\x6d\ | 53489 | \x00\x6d\ |
408 | @@ -53387,6 +53502,10 @@ | |||
409 | 53387 | \x00\x6d\ | 53502 | \x00\x6d\ |
410 | 53388 | \x00\x65\x00\x64\x00\x69\x00\x61\x00\x5f\x00\x76\x00\x69\x00\x64\x00\x65\x00\x6f\x00\x2e\x00\x70\x00\x6e\x00\x67\ | 53503 | \x00\x65\x00\x64\x00\x69\x00\x61\x00\x5f\x00\x76\x00\x69\x00\x64\x00\x65\x00\x6f\x00\x2e\x00\x70\x00\x6e\x00\x67\ |
411 | 53389 | \x00\x0e\ | 53504 | \x00\x0e\ |
412 | 53505 | \x0c\x3d\xa6\xe7\ | ||
413 | 53506 | \x00\x6d\ | ||
414 | 53507 | \x00\x65\x00\x64\x00\x69\x00\x61\x00\x5f\x00\x73\x00\x74\x00\x6f\x00\x70\x00\x2e\x00\x70\x00\x6e\x00\x67\ | ||
415 | 53508 | \x00\x0e\ | ||
416 | 53390 | \x06\xf2\xcf\x27\ | 53509 | \x06\xf2\xcf\x27\ |
417 | 53391 | \x00\x73\ | 53510 | \x00\x73\ |
418 | 53392 | \x00\x79\x00\x73\x00\x74\x00\x65\x00\x6d\x00\x5f\x00\x61\x00\x64\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\ | 53511 | \x00\x79\x00\x73\x00\x74\x00\x65\x00\x6d\x00\x5f\x00\x61\x00\x64\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\ |
419 | @@ -53661,9 +53780,9 @@ | |||
420 | 53661 | 53780 | ||
421 | 53662 | qt_resource_struct = "\ | 53781 | qt_resource_struct = "\ |
422 | 53663 | \x00\x00\x00\x00\x00\x02\x00\x00\x00\x11\x00\x00\x00\x01\ | 53782 | \x00\x00\x00\x00\x00\x02\x00\x00\x00\x11\x00\x00\x00\x01\ |
426 | 53664 | \x00\x00\x00\xa6\x00\x02\x00\x00\x00\x06\x00\x00\x00\x54\ | 53783 | \x00\x00\x00\xa6\x00\x02\x00\x00\x00\x06\x00\x00\x00\x56\ |
427 | 53665 | \x00\x00\x00\x38\x00\x02\x00\x00\x00\x04\x00\x00\x00\x50\ | 53784 | \x00\x00\x00\x38\x00\x02\x00\x00\x00\x04\x00\x00\x00\x52\ |
428 | 53666 | \x00\x00\x01\x02\x00\x02\x00\x00\x00\x06\x00\x00\x00\x4a\ | 53785 | \x00\x00\x01\x02\x00\x02\x00\x00\x00\x08\x00\x00\x00\x4a\ |
429 | 53667 | \x00\x00\x00\x5c\x00\x02\x00\x00\x00\x04\x00\x00\x00\x46\ | 53786 | \x00\x00\x00\x5c\x00\x02\x00\x00\x00\x04\x00\x00\x00\x46\ |
430 | 53668 | \x00\x00\x00\x4c\x00\x02\x00\x00\x00\x02\x00\x00\x00\x44\ | 53787 | \x00\x00\x00\x4c\x00\x02\x00\x00\x00\x02\x00\x00\x00\x44\ |
431 | 53669 | \x00\x00\x01\x12\x00\x02\x00\x00\x00\x02\x00\x00\x00\x42\ | 53788 | \x00\x00\x01\x12\x00\x02\x00\x00\x00\x02\x00\x00\x00\x42\ |
432 | @@ -53678,78 +53797,80 @@ | |||
433 | 53678 | \x00\x00\x00\xda\x00\x02\x00\x00\x00\x08\x00\x00\x00\x17\ | 53797 | \x00\x00\x00\xda\x00\x02\x00\x00\x00\x08\x00\x00\x00\x17\ |
434 | 53679 | \x00\x00\x00\x24\x00\x02\x00\x00\x00\x04\x00\x00\x00\x13\ | 53798 | \x00\x00\x00\x24\x00\x02\x00\x00\x00\x04\x00\x00\x00\x13\ |
435 | 53680 | \x00\x00\x00\xc6\x00\x02\x00\x00\x00\x01\x00\x00\x00\x12\ | 53799 | \x00\x00\x00\xc6\x00\x02\x00\x00\x00\x01\x00\x00\x00\x12\ |
449 | 53681 | \x00\x00\x06\x14\x00\x00\x00\x00\x00\x01\x00\x00\x4e\x96\ | 53800 | \x00\x00\x06\x58\x00\x00\x00\x00\x00\x01\x00\x00\x55\x3f\ |
450 | 53682 | \x00\x00\x0b\x16\x00\x00\x00\x00\x00\x01\x00\x0c\xd7\x8d\ | 53801 | \x00\x00\x0b\x5a\x00\x00\x00\x00\x00\x01\x00\x0c\xde\x36\ |
451 | 53683 | \x00\x00\x0b\x4a\x00\x00\x00\x00\x00\x01\x00\x0c\xda\xef\ | 53802 | \x00\x00\x0b\x8e\x00\x00\x00\x00\x00\x01\x00\x0c\xe1\x98\ |
452 | 53684 | \x00\x00\x0b\x72\x00\x00\x00\x00\x00\x01\x00\x0c\xdd\x8d\ | 53803 | \x00\x00\x0b\xb6\x00\x00\x00\x00\x00\x01\x00\x0c\xe4\x36\ |
453 | 53685 | \x00\x00\x0b\xa0\x00\x00\x00\x00\x00\x01\x00\x0c\xe0\xa1\ | 53804 | \x00\x00\x0b\xe4\x00\x00\x00\x00\x00\x01\x00\x0c\xe7\x4a\ |
454 | 53686 | \x00\x00\x05\x78\x00\x00\x00\x00\x00\x01\x00\x00\x44\x52\ | 53805 | \x00\x00\x05\xbc\x00\x00\x00\x00\x00\x01\x00\x00\x4a\xfb\ |
455 | 53687 | \x00\x00\x05\x9e\x00\x00\x00\x00\x00\x01\x00\x00\x46\x89\ | 53806 | \x00\x00\x05\xe2\x00\x00\x00\x00\x00\x01\x00\x00\x4d\x32\ |
456 | 53688 | \x00\x00\x05\xea\x00\x00\x00\x00\x00\x01\x00\x00\x4b\xcb\ | 53807 | \x00\x00\x06\x2e\x00\x00\x00\x00\x00\x01\x00\x00\x52\x74\ |
457 | 53689 | \x00\x00\x05\x54\x00\x00\x00\x00\x00\x01\x00\x00\x42\x0b\ | 53808 | \x00\x00\x05\x98\x00\x00\x00\x00\x00\x01\x00\x00\x48\xb4\ |
458 | 53690 | \x00\x00\x04\xe4\x00\x00\x00\x00\x00\x01\x00\x00\x3a\xda\ | 53809 | \x00\x00\x05\x28\x00\x00\x00\x00\x00\x01\x00\x00\x41\x83\ |
459 | 53691 | \x00\x00\x05\x08\x00\x00\x00\x00\x00\x01\x00\x00\x3d\x81\ | 53810 | \x00\x00\x05\x4c\x00\x00\x00\x00\x00\x01\x00\x00\x44\x2a\ |
460 | 53692 | \x00\x00\x05\x2e\x00\x00\x00\x00\x00\x01\x00\x00\x3f\xf4\ | 53811 | \x00\x00\x05\x72\x00\x00\x00\x00\x00\x01\x00\x00\x46\x9d\ |
461 | 53693 | \x00\x00\x05\xc8\x00\x00\x00\x00\x00\x01\x00\x00\x49\x27\ | 53812 | \x00\x00\x06\x0c\x00\x00\x00\x00\x00\x01\x00\x00\x4f\xd0\ |
462 | 53694 | \x00\x00\x01\x4c\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ | 53813 | \x00\x00\x01\x4c\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ |
463 | 53695 | \x00\x00\x01\xb2\x00\x00\x00\x00\x00\x01\x00\x00\x05\xe6\ | 53814 | \x00\x00\x01\xb2\x00\x00\x00\x00\x00\x01\x00\x00\x05\xe6\ |
464 | 53696 | \x00\x00\x01\x7e\x00\x00\x00\x00\x00\x01\x00\x00\x02\xfe\ | 53815 | \x00\x00\x01\x7e\x00\x00\x00\x00\x00\x01\x00\x00\x02\xfe\ |
497 | 53697 | \x00\x00\x08\xa0\x00\x00\x00\x00\x00\x01\x00\x04\x89\xa2\ | 53816 | \x00\x00\x08\xe4\x00\x00\x00\x00\x00\x01\x00\x04\x90\x4b\ |
498 | 53698 | \x00\x00\x09\x00\x00\x00\x00\x00\x00\x01\x00\x0a\x79\x20\ | 53817 | \x00\x00\x09\x44\x00\x00\x00\x00\x00\x01\x00\x0a\x7f\xc9\ |
499 | 53699 | \x00\x00\x08\xd0\x00\x00\x00\x00\x00\x01\x00\x04\xfa\xa6\ | 53818 | \x00\x00\x09\x14\x00\x00\x00\x00\x00\x01\x00\x05\x01\x4f\ |
500 | 53700 | \x00\x00\x09\x20\x00\x00\x00\x00\x00\x01\x00\x0b\xa7\x3a\ | 53819 | \x00\x00\x09\x64\x00\x00\x00\x00\x00\x01\x00\x0b\xad\xe3\ |
501 | 53701 | \x00\x00\x08\x6a\x00\x00\x00\x00\x00\x01\x00\x04\x4e\xd1\ | 53820 | \x00\x00\x08\xae\x00\x00\x00\x00\x00\x01\x00\x04\x55\x7a\ |
502 | 53702 | \x00\x00\x08\x22\x00\x00\x00\x00\x00\x01\x00\x04\x4a\x1c\ | 53821 | \x00\x00\x08\x66\x00\x00\x00\x00\x00\x01\x00\x04\x50\xc5\ |
503 | 53703 | \x00\x00\x08\x48\x00\x00\x00\x00\x00\x01\x00\x04\x4c\xba\ | 53822 | \x00\x00\x08\x8c\x00\x00\x00\x00\x00\x01\x00\x04\x53\x63\ |
504 | 53704 | \x00\x00\x04\x9a\x00\x00\x00\x00\x00\x01\x00\x00\x34\x45\ | 53823 | \x00\x00\x04\xde\x00\x00\x00\x00\x00\x01\x00\x00\x3a\xee\ |
505 | 53705 | \x00\x00\x03\x4a\x00\x00\x00\x00\x00\x01\x00\x00\x1f\x4e\ | 53824 | \x00\x00\x03\x8e\x00\x00\x00\x00\x00\x01\x00\x00\x25\xf7\ |
506 | 53706 | \x00\x00\x03\xde\x00\x00\x00\x00\x00\x01\x00\x00\x26\x32\ | 53825 | \x00\x00\x04\x22\x00\x00\x00\x00\x00\x01\x00\x00\x2c\xdb\ |
507 | 53707 | \x00\x00\x04\x3a\x00\x00\x00\x00\x00\x01\x00\x00\x2b\x5c\ | 53826 | \x00\x00\x04\x7e\x00\x00\x00\x00\x00\x01\x00\x00\x32\x05\ |
508 | 53708 | \x00\x00\x03\x28\x00\x00\x00\x00\x00\x01\x00\x00\x1c\x51\ | 53827 | \x00\x00\x03\x6c\x00\x00\x00\x00\x00\x01\x00\x00\x22\xfa\ |
509 | 53709 | \x00\x00\x03\x7e\x00\x00\x00\x00\x00\x01\x00\x00\x21\x1e\ | 53828 | \x00\x00\x03\xc2\x00\x00\x00\x00\x00\x01\x00\x00\x27\xc7\ |
510 | 53710 | \x00\x00\x04\x66\x00\x00\x00\x00\x00\x01\x00\x00\x30\x68\ | 53829 | \x00\x00\x04\xaa\x00\x00\x00\x00\x00\x01\x00\x00\x37\x11\ |
511 | 53711 | \x00\x00\x04\xc0\x00\x00\x00\x00\x00\x01\x00\x00\x37\x27\ | 53830 | \x00\x00\x05\x04\x00\x00\x00\x00\x00\x01\x00\x00\x3d\xd0\ |
512 | 53712 | \x00\x00\x04\x02\x00\x00\x00\x00\x00\x01\x00\x00\x28\xe6\ | 53831 | \x00\x00\x04\x46\x00\x00\x00\x00\x00\x01\x00\x00\x2f\x8f\ |
513 | 53713 | \x00\x00\x03\xa8\x00\x00\x00\x00\x00\x01\x00\x00\x23\x82\ | 53832 | \x00\x00\x03\xec\x00\x00\x00\x00\x00\x01\x00\x00\x2a\x2b\ |
514 | 53714 | \x00\x00\x06\x6c\x00\x00\x00\x00\x00\x01\x00\x02\xf2\x16\ | 53833 | \x00\x00\x06\xb0\x00\x00\x00\x00\x00\x01\x00\x02\xf8\xbf\ |
515 | 53715 | \x00\x00\x06\xd4\x00\x00\x00\x00\x00\x01\x00\x02\xfb\xa5\ | 53834 | \x00\x00\x07\x18\x00\x00\x00\x00\x00\x01\x00\x03\x02\x4e\ |
516 | 53716 | \x00\x00\x06\x8c\x00\x00\x00\x00\x00\x01\x00\x02\xf5\xf3\ | 53835 | \x00\x00\x06\xd0\x00\x00\x00\x00\x00\x01\x00\x02\xfc\x9c\ |
517 | 53717 | \x00\x00\x06\xb2\x00\x00\x00\x00\x00\x01\x00\x02\xf8\x6b\ | 53836 | \x00\x00\x06\xf6\x00\x00\x00\x00\x00\x01\x00\x02\xff\x14\ |
518 | 53718 | \x00\x00\x06\x46\x00\x00\x00\x00\x00\x01\x00\x02\xef\x78\ | 53837 | \x00\x00\x06\x8a\x00\x00\x00\x00\x00\x01\x00\x02\xf6\x21\ |
519 | 53719 | \x00\x00\x0c\x50\x00\x00\x00\x00\x00\x01\x00\x0c\xed\x2b\ | 53838 | \x00\x00\x0c\x94\x00\x00\x00\x00\x00\x01\x00\x0c\xf3\xd4\ |
520 | 53720 | \x00\x00\x0b\xe6\x00\x00\x00\x00\x00\x01\x00\x0c\xe5\x56\ | 53839 | \x00\x00\x0c\x2a\x00\x00\x00\x00\x00\x01\x00\x0c\xeb\xff\ |
521 | 53721 | \x00\x00\x0c\x0a\x00\x00\x00\x00\x00\x01\x00\x0c\xe7\xe7\ | 53840 | \x00\x00\x0c\x4e\x00\x00\x00\x00\x00\x01\x00\x0c\xee\x90\ |
522 | 53722 | \x00\x00\x0c\x2c\x00\x00\x00\x00\x00\x01\x00\x0c\xe9\xfa\ | 53841 | \x00\x00\x0c\x70\x00\x00\x00\x00\x00\x01\x00\x0c\xf0\xa3\ |
523 | 53723 | \x00\x00\x0b\xc4\x00\x00\x00\x00\x00\x01\x00\x0c\xe2\xb8\ | 53842 | \x00\x00\x0c\x08\x00\x00\x00\x00\x00\x01\x00\x0c\xe9\x61\ |
524 | 53724 | \x00\x00\x09\x7c\x00\x00\x00\x00\x00\x01\x00\x0c\xba\xc3\ | 53843 | \x00\x00\x09\xc0\x00\x00\x00\x00\x00\x01\x00\x0c\xc1\x6c\ |
525 | 53725 | \x00\x00\x09\x56\x00\x00\x00\x00\x00\x01\x00\x0c\xb8\x25\ | 53844 | \x00\x00\x09\x9a\x00\x00\x00\x00\x00\x01\x00\x0c\xbe\xce\ |
526 | 53726 | \x00\x00\x0c\x9e\x00\x00\x00\x00\x00\x01\x00\x0c\xf1\xcf\ | 53845 | \x00\x00\x0c\xe2\x00\x00\x00\x00\x00\x01\x00\x0c\xf8\x78\ |
527 | 53727 | \x00\x00\x0c\xc6\x00\x00\x00\x00\x00\x01\x00\x0c\xf4\x6d\ | 53846 | \x00\x00\x0d\x0a\x00\x00\x00\x00\x00\x01\x00\x0c\xfb\x16\ |
528 | 53728 | \x00\x00\x0c\x7a\x00\x00\x00\x00\x00\x01\x00\x0c\xef\x2f\ | 53847 | \x00\x00\x0c\xbe\x00\x00\x00\x00\x00\x01\x00\x0c\xf5\xd8\ |
529 | 53729 | \x00\x00\x01\xde\x00\x00\x00\x00\x00\x01\x00\x00\x09\x05\ | 53848 | \x00\x00\x01\xde\x00\x00\x00\x00\x00\x01\x00\x00\x09\x05\ |
530 | 53730 | \x00\x00\x02\x12\x00\x00\x00\x00\x00\x01\x00\x00\x0b\xa3\ | 53849 | \x00\x00\x02\x12\x00\x00\x00\x00\x00\x01\x00\x00\x0b\xa3\ |
537 | 53731 | \x00\x00\x0a\x24\x00\x00\x00\x00\x00\x01\x00\x0c\xc6\xe1\ | 53850 | \x00\x00\x0a\x68\x00\x00\x00\x00\x00\x01\x00\x0c\xcd\x8a\ |
538 | 53732 | \x00\x00\x0a\x48\x00\x00\x00\x00\x00\x01\x00\x0c\xc9\xdf\ | 53851 | \x00\x00\x0a\x8c\x00\x00\x00\x00\x00\x01\x00\x0c\xd0\x88\ |
539 | 53733 | \x00\x00\x0a\x00\x00\x00\x00\x00\x00\x01\x00\x0c\xc4\x43\ | 53852 | \x00\x00\x0a\x44\x00\x00\x00\x00\x00\x01\x00\x0c\xca\xec\ |
540 | 53734 | \x00\x00\x09\x9e\x00\x00\x00\x00\x00\x01\x00\x0c\xbc\xda\ | 53853 | \x00\x00\x09\xe2\x00\x00\x00\x00\x00\x01\x00\x0c\xc3\x83\ |
541 | 53735 | \x00\x00\x09\xdc\x00\x00\x00\x00\x00\x01\x00\x0c\xc1\xc1\ | 53854 | \x00\x00\x0a\x20\x00\x00\x00\x00\x00\x01\x00\x0c\xc8\x6a\ |
542 | 53736 | \x00\x00\x09\xbc\x00\x00\x00\x00\x00\x01\x00\x0c\xbf\x21\ | 53855 | \x00\x00\x0a\x00\x00\x00\x00\x00\x00\x01\x00\x0c\xc5\xca\ |
543 | 53737 | \x00\x00\x02\x66\x00\x00\x00\x00\x00\x01\x00\x00\x10\x0c\ | 53856 | \x00\x00\x02\x66\x00\x00\x00\x00\x00\x01\x00\x00\x10\x0c\ |
546 | 53738 | \x00\x00\x02\xb0\x00\x00\x00\x00\x00\x01\x00\x00\x14\x2c\ | 53857 | \x00\x00\x02\xd2\x00\x00\x00\x00\x00\x01\x00\x00\x17\xff\ |
547 | 53739 | \x00\x00\x02\xe2\x00\x00\x00\x00\x00\x01\x00\x00\x16\x57\ | 53858 | \x00\x00\x03\x04\x00\x00\x00\x00\x00\x01\x00\x00\x1a\x2a\ |
548 | 53859 | \x00\x00\x02\xac\x00\x00\x00\x00\x00\x01\x00\x00\x15\xf9\ | ||
549 | 53740 | \x00\x00\x02\x8a\x00\x00\x00\x00\x00\x01\x00\x00\x12\x26\ | 53860 | \x00\x00\x02\x8a\x00\x00\x00\x00\x00\x01\x00\x00\x12\x26\ |
550 | 53861 | \x00\x00\x03\x4a\x00\x00\x00\x00\x00\x01\x00\x00\x20\x24\ | ||
551 | 53741 | \x00\x00\x02\x42\x00\x00\x00\x00\x00\x01\x00\x00\x0d\xba\ | 53862 | \x00\x00\x02\x42\x00\x00\x00\x00\x00\x01\x00\x00\x0d\xba\ |
563 | 53742 | \x00\x00\x03\x04\x00\x00\x00\x00\x00\x01\x00\x00\x18\xba\ | 53863 | \x00\x00\x03\x26\x00\x00\x00\x00\x00\x01\x00\x00\x1c\x8d\ |
564 | 53743 | \x00\x00\x0a\x68\x00\x00\x00\x00\x00\x01\x00\x0c\xcc\x62\ | 53864 | \x00\x00\x0a\xac\x00\x00\x00\x00\x00\x01\x00\x0c\xd3\x0b\ |
565 | 53744 | \x00\x00\x0a\xca\x00\x00\x00\x00\x00\x01\x00\x0c\xd2\xd8\ | 53865 | \x00\x00\x0b\x0e\x00\x00\x00\x00\x00\x01\x00\x0c\xd9\x81\ |
566 | 53745 | \x00\x00\x0a\x9c\x00\x00\x00\x00\x00\x01\x00\x0c\xcf\xc4\ | 53866 | \x00\x00\x0a\xe0\x00\x00\x00\x00\x00\x01\x00\x0c\xd6\x6d\ |
567 | 53746 | \x00\x00\x0a\xf2\x00\x00\x00\x00\x00\x01\x00\x0c\xd5\x76\ | 53867 | \x00\x00\x0b\x36\x00\x00\x00\x00\x00\x01\x00\x0c\xdc\x1f\ |
568 | 53747 | \x00\x00\x07\x8a\x00\x00\x00\x00\x00\x01\x00\x03\x37\xfb\ | 53868 | \x00\x00\x07\xce\x00\x00\x00\x00\x00\x01\x00\x03\x3e\xa4\ |
569 | 53748 | \x00\x00\x07\x2a\x00\x00\x00\x00\x00\x01\x00\x03\x08\xbb\ | 53869 | \x00\x00\x07\x6e\x00\x00\x00\x00\x00\x01\x00\x03\x0f\x64\ |
570 | 53749 | \x00\x00\x06\xfa\x00\x00\x00\x00\x00\x01\x00\x02\xfe\x27\ | 53870 | \x00\x00\x07\x3e\x00\x00\x00\x00\x00\x01\x00\x03\x04\xd0\ |
571 | 53750 | \x00\x00\x07\x5a\x00\x00\x00\x00\x00\x01\x00\x03\x1d\xf0\ | 53871 | \x00\x00\x07\x9e\x00\x00\x00\x00\x00\x01\x00\x03\x24\x99\ |
572 | 53751 | \x00\x00\x07\xba\x00\x00\x00\x00\x00\x01\x00\x03\x3c\x18\ | 53872 | \x00\x00\x07\xfe\x00\x00\x00\x00\x00\x01\x00\x03\x42\xc1\ |
573 | 53752 | \x00\x00\x07\xee\x00\x00\x00\x00\x00\x01\x00\x04\x04\xb1\ | 53873 | \x00\x00\x08\x32\x00\x00\x00\x00\x00\x01\x00\x04\x0b\x5a\ |
574 | 53753 | " | 53874 | " |
575 | 53754 | 53875 | ||
576 | 53755 | def qInitResources(): | 53876 | def qInitResources(): |
577 | 53756 | 53877 | ||
578 | === modified file 'openlp/core/ui/__init__.py' | |||
579 | --- openlp/core/ui/__init__.py 2009-06-29 05:07:32 +0000 | |||
580 | +++ openlp/core/ui/__init__.py 2009-07-03 19:08:21 +0000 | |||
581 | @@ -17,7 +17,7 @@ | |||
582 | 17 | this program; if not, write to the Free Software Foundation, Inc., 59 Temple | 17 | this program; if not, write to the Free Software Foundation, Inc., 59 Temple |
583 | 18 | Place, Suite 330, Boston, MA 02111-1307 USA | 18 | Place, Suite 330, Boston, MA 02111-1307 USA |
584 | 19 | """ | 19 | """ |
586 | 20 | from slidecontroller import BaseToolbar | 20 | from slidecontroller import MasterToolbar |
587 | 21 | from slidecontrollermanager import SlideControllerManager | 21 | from slidecontrollermanager import SlideControllerManager |
588 | 22 | from maindisplay import MainDisplay | 22 | from maindisplay import MainDisplay |
589 | 23 | from amendthemeform import AmendThemeForm | 23 | from amendthemeform import AmendThemeForm |
590 | @@ -33,5 +33,5 @@ | |||
591 | 33 | from thememanager import ThemeManager | 33 | from thememanager import ThemeManager |
592 | 34 | from mainwindow import MainWindow | 34 | from mainwindow import MainWindow |
593 | 35 | 35 | ||
595 | 36 | __all__ = ['SplashScreen', 'AboutForm', 'SettingsForm', 'BaseToolbar' | 36 | __all__ = ['SplashScreen', 'AboutForm', 'SettingsForm', 'MasterToolbar' |
596 | 37 | 'MainWindow', 'MainDisplay', 'SlideController', 'ServiceManager', 'ThemeManager', 'AmendThemeForm'] | 37 | 'MainWindow', 'MainDisplay', 'SlideController', 'ServiceManager', 'ThemeManager', 'AmendThemeForm'] |
597 | 38 | 38 | ||
598 | === modified file 'openlp/core/ui/maindisplay.py' | |||
599 | --- openlp/core/ui/maindisplay.py 2009-06-17 05:11:16 +0000 | |||
600 | +++ openlp/core/ui/maindisplay.py 2009-07-03 19:08:21 +0000 | |||
601 | @@ -78,7 +78,7 @@ | |||
602 | 78 | def blankDisplay(self): | 78 | def blankDisplay(self): |
603 | 79 | if not self.displayBlank: | 79 | if not self.displayBlank: |
604 | 80 | self.displayBlank = True | 80 | self.displayBlank = True |
606 | 81 | self.display.setPixmap(self.blankFrame) | 81 | self.display.setPixmap(QtGui.QPixmap.fromImage(self.blankFrame)) |
607 | 82 | else: | 82 | else: |
608 | 83 | self.displayBlank = False | 83 | self.displayBlank = False |
609 | 84 | self.frameView(self.frame) | 84 | self.frameView(self.frame) |
610 | 85 | 85 | ||
611 | === modified file 'openlp/core/ui/mainwindow.py' | |||
612 | --- openlp/core/ui/mainwindow.py 2009-06-29 05:07:32 +0000 | |||
613 | +++ openlp/core/ui/mainwindow.py 2009-07-03 19:08:21 +0000 | |||
614 | @@ -205,7 +205,7 @@ | |||
615 | 205 | self.MediaManagerDock.setWindowIcon(icon) | 205 | self.MediaManagerDock.setWindowIcon(icon) |
616 | 206 | self.MediaManagerDock.setFloating(False) | 206 | self.MediaManagerDock.setFloating(False) |
617 | 207 | self.MediaManagerDock.setObjectName(u'MediaManagerDock') | 207 | self.MediaManagerDock.setObjectName(u'MediaManagerDock') |
619 | 208 | self.MediaManagerDock.setMinimumWidth(250) | 208 | self.MediaManagerDock.setMinimumWidth(300) |
620 | 209 | self.MediaManagerContents = QtGui.QWidget() | 209 | self.MediaManagerContents = QtGui.QWidget() |
621 | 210 | self.MediaManagerContents.setObjectName(u'MediaManagerContents') | 210 | self.MediaManagerContents.setObjectName(u'MediaManagerContents') |
622 | 211 | self.MediaManagerLayout = QtGui.QHBoxLayout(self.MediaManagerContents) | 211 | self.MediaManagerLayout = QtGui.QHBoxLayout(self.MediaManagerContents) |
623 | @@ -227,7 +227,7 @@ | |||
624 | 227 | self.ServiceManagerDock.setFeatures( | 227 | self.ServiceManagerDock.setFeatures( |
625 | 228 | QtGui.QDockWidget.AllDockWidgetFeatures) | 228 | QtGui.QDockWidget.AllDockWidgetFeatures) |
626 | 229 | self.ServiceManagerDock.setObjectName(u'ServiceManagerDock') | 229 | self.ServiceManagerDock.setObjectName(u'ServiceManagerDock') |
628 | 230 | self.ServiceManagerDock.setMinimumWidth(250) | 230 | self.ServiceManagerDock.setMinimumWidth(300) |
629 | 231 | self.ServiceManagerContents = ServiceManager(self) | 231 | self.ServiceManagerContents = ServiceManager(self) |
630 | 232 | self.ServiceManagerDock.setWidget(self.ServiceManagerContents) | 232 | self.ServiceManagerDock.setWidget(self.ServiceManagerContents) |
631 | 233 | self.mainWindow.addDockWidget( | 233 | self.mainWindow.addDockWidget( |
632 | 234 | 234 | ||
633 | === modified file 'openlp/core/ui/slidecontroller.py' | |||
634 | --- openlp/core/ui/slidecontroller.py 2009-06-29 05:07:32 +0000 | |||
635 | +++ openlp/core/ui/slidecontroller.py 2009-07-03 20:32:33 +0000 | |||
636 | @@ -21,100 +21,28 @@ | |||
637 | 21 | import os | 21 | import os |
638 | 22 | 22 | ||
639 | 23 | from PyQt4 import QtCore, QtGui | 23 | from PyQt4 import QtCore, QtGui |
715 | 24 | from openlp.core.lib import OpenLPToolbar, translate | 24 | from openlp.core.lib import OpenLPToolbar, translate, buildIcon |
716 | 25 | 25 | ||
717 | 26 | class SlideData(QtCore.QAbstractListModel): | 26 | class SlideList(QtGui.QTableWidget): |
643 | 27 | """ | ||
644 | 28 | List of frames to be displayed on the list and the main display. | ||
645 | 29 | """ | ||
646 | 30 | global log | ||
647 | 31 | log = logging.getLogger(u'SlideData') | ||
648 | 32 | |||
649 | 33 | def __init__(self): | ||
650 | 34 | QtCore.QAbstractListModel.__init__(self) | ||
651 | 35 | self.items = [] | ||
652 | 36 | self.rowheight = 50 | ||
653 | 37 | self.maximagewidth = self.rowheight * 16 / 9.0; | ||
654 | 38 | log.info(u'Starting') | ||
655 | 39 | |||
656 | 40 | def clear(self): | ||
657 | 41 | self.items = [] | ||
658 | 42 | |||
659 | 43 | def columnCount(self, parent): | ||
660 | 44 | return 1 | ||
661 | 45 | |||
662 | 46 | def rowCount(self, parent=None): | ||
663 | 47 | return len(self.items) | ||
664 | 48 | |||
665 | 49 | def insertRow(self, row, frame, framenumber): | ||
666 | 50 | self.beginInsertRows(QtCore.QModelIndex(), row, row) | ||
667 | 51 | log.info(u'insert row %d' % row) | ||
668 | 52 | # create a preview image | ||
669 | 53 | frame1 = frame.scaled(QtCore.QSize(280, 210), QtCore.Qt.KeepAspectRatio, | ||
670 | 54 | QtCore.Qt.SmoothTransformation) | ||
671 | 55 | self.items.insert(row, (frame1, framenumber)) | ||
672 | 56 | log.info(u'Item loaded') | ||
673 | 57 | self.endInsertRows() | ||
674 | 58 | |||
675 | 59 | def removeRow(self, row): | ||
676 | 60 | self.beginRemoveRows(QtCore.QModelIndex(), row, row) | ||
677 | 61 | self.items.pop(row) | ||
678 | 62 | self.endRemoveRows() | ||
679 | 63 | |||
680 | 64 | def addRow(self, frame, framenumber): | ||
681 | 65 | self.insertRow(len(self.items), frame, framenumber) | ||
682 | 66 | |||
683 | 67 | def data(self, index, role): | ||
684 | 68 | row = index.row() | ||
685 | 69 | if row > len(self.items): | ||
686 | 70 | # if the last row is selected and deleted, we then get called with | ||
687 | 71 | # an empty row! | ||
688 | 72 | return QtCore.QVariant() | ||
689 | 73 | if role == QtCore.Qt.DecorationRole: | ||
690 | 74 | retval = self.items[row][0] | ||
691 | 75 | else: | ||
692 | 76 | retval = QtCore.QVariant() | ||
693 | 77 | if type(retval) is not type(QtCore.QVariant): | ||
694 | 78 | return QtCore.QVariant(retval) | ||
695 | 79 | else: | ||
696 | 80 | return retval | ||
697 | 81 | |||
698 | 82 | def __iter__(self): | ||
699 | 83 | for item in self.items: | ||
700 | 84 | yield item | ||
701 | 85 | |||
702 | 86 | def getValue(self, index): | ||
703 | 87 | row = index.row() | ||
704 | 88 | return self.items[row] | ||
705 | 89 | |||
706 | 90 | def getItem(self, row): | ||
707 | 91 | log.info(u'Get Item:%d -> %s' %(row, unicode(self.items))) | ||
708 | 92 | return self.items[row] | ||
709 | 93 | |||
710 | 94 | def getList(self): | ||
711 | 95 | filelist = [item[3] for item in self.items]; | ||
712 | 96 | return filelist | ||
713 | 97 | |||
714 | 98 | class SlideList(QtGui.QListView): | ||
718 | 99 | 27 | ||
719 | 100 | def __init__(self,parent=None,name=None): | 28 | def __init__(self,parent=None,name=None): |
721 | 101 | QtGui.QListView.__init__(self,parent.Controller) | 29 | QtGui.QTableWidget.__init__(self,parent.Controller) |
722 | 102 | self.parent = parent | 30 | self.parent = parent |
723 | 103 | 31 | ||
724 | 104 | def keyPressEvent(self, event): | 32 | def keyPressEvent(self, event): |
725 | 105 | if type(event) == QtGui.QKeyEvent: | 33 | if type(event) == QtGui.QKeyEvent: |
726 | 106 | #here accept the event and do something | 34 | #here accept the event and do something |
727 | 107 | if event.key() == QtCore.Qt.Key_Up: | 35 | if event.key() == QtCore.Qt.Key_Up: |
729 | 108 | self.parent.onSlideSelectedPrevious() | 36 | self.parent.BaseToolbar.onSlideSelectedPrevious() |
730 | 109 | event.accept() | 37 | event.accept() |
731 | 110 | elif event.key() == QtCore.Qt.Key_Down: | 38 | elif event.key() == QtCore.Qt.Key_Down: |
733 | 111 | self.parent.onSlideSelectedNext() | 39 | self.parent.BaseToolbar.onSlideSelectedNext() |
734 | 112 | event.accept() | 40 | event.accept() |
735 | 113 | elif event.key() == QtCore.Qt.Key_PageUp: | 41 | elif event.key() == QtCore.Qt.Key_PageUp: |
737 | 114 | self.parent.onSlideSelectedFirst() | 42 | self.parent.BaseToolbar.onSlideSelectedFirst() |
738 | 115 | event.accept() | 43 | event.accept() |
739 | 116 | elif event.key() == QtCore.Qt.Key_PageDown: | 44 | elif event.key() == QtCore.Qt.Key_PageDown: |
741 | 117 | self.parent.onSlideSelectedLast() | 45 | self.parent.BaseToolbar.onSlideSelectedLast() |
742 | 118 | event.accept() | 46 | event.accept() |
743 | 119 | event.ignore() | 47 | event.ignore() |
744 | 120 | else: | 48 | else: |
745 | @@ -132,6 +60,7 @@ | |||
746 | 132 | """ | 60 | """ |
747 | 133 | Set up the Slide Controller. | 61 | Set up the Slide Controller. |
748 | 134 | """ | 62 | """ |
749 | 63 | self.toolbarList = {} | ||
750 | 135 | QtGui.QWidget.__init__(self, parent.mainWindow) | 64 | QtGui.QWidget.__init__(self, parent.mainWindow) |
751 | 136 | self.isLive = isLive | 65 | self.isLive = isLive |
752 | 137 | self.parent = parent | 66 | self.parent = parent |
753 | @@ -145,7 +74,7 @@ | |||
754 | 145 | self.PanelLayout.setMargin(0) | 74 | self.PanelLayout.setMargin(0) |
755 | 146 | # Actual controller section | 75 | # Actual controller section |
756 | 147 | self.Controller = QtGui.QWidget(self.Splitter) | 76 | self.Controller = QtGui.QWidget(self.Splitter) |
758 | 148 | self.Controller.setGeometry(QtCore.QRect(0, 0, 800, 536)) | 77 | self.Controller.setGeometry(QtCore.QRect(0, 0, 100, 536)) |
759 | 149 | self.Controller.setSizePolicy( | 78 | self.Controller.setSizePolicy( |
760 | 150 | QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, | 79 | QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, |
761 | 151 | QtGui.QSizePolicy.Maximum)) | 80 | QtGui.QSizePolicy.Maximum)) |
762 | @@ -153,21 +82,17 @@ | |||
763 | 153 | self.ControllerLayout.setSpacing(0) | 82 | self.ControllerLayout.setSpacing(0) |
764 | 154 | self.ControllerLayout.setMargin(0) | 83 | self.ControllerLayout.setMargin(0) |
765 | 155 | # Controller list view | 84 | # Controller list view |
779 | 156 | self.PreviewListView = SlideList(self) | 85 | self.PreviewListWidget = SlideList(self) |
780 | 157 | self.PreviewListView.setUniformItemSizes(True) | 86 | self.PreviewListWidget.setColumnCount(1) |
781 | 158 | self.PreviewListView.setIconSize(QtCore.QSize(250, 190)) | 87 | self.PreviewListWidget.horizontalHeader().setVisible(False) |
782 | 159 | self.PreviewListData = SlideData() | 88 | self.PreviewListWidget.verticalHeader().setVisible(False) |
783 | 160 | self.PreviewListView.isLive = self.isLive | 89 | self.PreviewListWidget.setColumnWidth(1, self.Controller.width()) |
784 | 161 | if QtCore.QT_VERSION_STR > u'4.4.0': | 90 | self.PreviewListWidget.isLive = self.isLive |
785 | 162 | self.PreviewListView.setFlow(1) | 91 | self.PreviewListWidget.setObjectName(u'PreviewListWidget') |
786 | 163 | self.PreviewListView.setViewMode(1) | 92 | self.ControllerLayout.addWidget(self.PreviewListWidget) |
774 | 164 | self.PreviewListView.setWrapping(False) | ||
775 | 165 | self.PreviewListView.setModel(self.PreviewListData) | ||
776 | 166 | self.PreviewListView.setSpacing(0) | ||
777 | 167 | self.PreviewListView.setObjectName(u'PreviewListView') | ||
778 | 168 | self.ControllerLayout.addWidget(self.PreviewListView) | ||
787 | 169 | # Plugin the Base Toolbar class | 93 | # Plugin the Base Toolbar class |
789 | 170 | self.BaseToolbar = BaseToolbar(self.isLive) | 94 | self.BaseToolbar = MasterToolbar(self.isLive) |
790 | 95 | self.registerToolbar(u'master', self.BaseToolbar) | ||
791 | 171 | self.Toolbar = self.BaseToolbar.getToolbar() | 96 | self.Toolbar = self.BaseToolbar.getToolbar() |
792 | 172 | self.ControllerLayout.addWidget(self.Toolbar) | 97 | self.ControllerLayout.addWidget(self.Toolbar) |
793 | 173 | sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, | 98 | sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, |
794 | @@ -179,7 +104,7 @@ | |||
795 | 179 | self.Toolbar.setSizePolicy(sizeToolbarPolicy) | 104 | self.Toolbar.setSizePolicy(sizeToolbarPolicy) |
796 | 180 | # Screen preview area | 105 | # Screen preview area |
797 | 181 | self.PreviewFrame = QtGui.QFrame(self.Splitter) | 106 | self.PreviewFrame = QtGui.QFrame(self.Splitter) |
799 | 182 | self.PreviewFrame.setGeometry(QtCore.QRect(0, 0, 250, 190)) | 107 | self.PreviewFrame.setGeometry(QtCore.QRect(0, 0, 280, 190)) |
800 | 183 | self.PreviewFrame.setSizePolicy(QtGui.QSizePolicy( | 108 | self.PreviewFrame.setSizePolicy(QtGui.QSizePolicy( |
801 | 184 | QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum)) | 109 | QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum)) |
802 | 185 | self.PreviewFrame.setFrameShape(QtGui.QFrame.StyledPanel) | 110 | self.PreviewFrame.setFrameShape(QtGui.QFrame.StyledPanel) |
803 | @@ -197,44 +122,83 @@ | |||
804 | 197 | sizePolicy.setHeightForWidth( | 122 | sizePolicy.setHeightForWidth( |
805 | 198 | self.SlidePreview.sizePolicy().hasHeightForWidth()) | 123 | self.SlidePreview.sizePolicy().hasHeightForWidth()) |
806 | 199 | self.SlidePreview.setSizePolicy(sizePolicy) | 124 | self.SlidePreview.setSizePolicy(sizePolicy) |
808 | 200 | self.SlidePreview.setMinimumSize(QtCore.QSize(280, 210)) | 125 | self.SlidePreview.setFixedSize(QtCore.QSize(250, 210)) |
809 | 201 | self.SlidePreview.setFrameShape(QtGui.QFrame.Box) | 126 | self.SlidePreview.setFrameShape(QtGui.QFrame.Box) |
810 | 202 | self.SlidePreview.setFrameShadow(QtGui.QFrame.Plain) | 127 | self.SlidePreview.setFrameShadow(QtGui.QFrame.Plain) |
811 | 203 | self.SlidePreview.setLineWidth(1) | 128 | self.SlidePreview.setLineWidth(1) |
812 | 204 | self.SlidePreview.setScaledContents(True) | 129 | self.SlidePreview.setScaledContents(True) |
813 | 205 | self.SlidePreview.setObjectName(u'SlidePreview') | 130 | self.SlidePreview.setObjectName(u'SlidePreview') |
814 | 206 | self.grid.addWidget(self.SlidePreview, 0, 0, 1, 1) | 131 | self.grid.addWidget(self.SlidePreview, 0, 0, 1, 1) |
816 | 207 | QtCore.QObject.connect(self.PreviewListView, | 132 | # Signals |
817 | 133 | QtCore.QObject.connect(self.PreviewListWidget, | ||
818 | 208 | QtCore.SIGNAL(u'clicked(QModelIndex)'), self.BaseToolbar.onSlideSelected) | 134 | QtCore.SIGNAL(u'clicked(QModelIndex)'), self.BaseToolbar.onSlideSelected) |
820 | 209 | QtCore.QObject.connect(self.PreviewListView, | 135 | QtCore.QObject.connect(self.PreviewListWidget, |
821 | 210 | QtCore.SIGNAL(u'activated(QModelIndex)'), self.BaseToolbar.onSlideSelected) | 136 | QtCore.SIGNAL(u'activated(QModelIndex)'), self.BaseToolbar.onSlideSelected) |
822 | 211 | # Add Late Arrivals | 137 | # Add Late Arrivals |
825 | 212 | self.BaseToolbar.PreviewListView = self.PreviewListView | 138 | self.BaseToolbar.PreviewListWidget = self.PreviewListWidget |
824 | 213 | self.BaseToolbar.PreviewListData = self.PreviewListData | ||
826 | 214 | self.BaseToolbar.SlidePreview = self.SlidePreview | 139 | self.BaseToolbar.SlidePreview = self.SlidePreview |
827 | 215 | self.BaseToolbar.mainDisplay = self.parent.mainDisplay | 140 | self.BaseToolbar.mainDisplay = self.parent.mainDisplay |
828 | 216 | 141 | ||
829 | 142 | def registerToolbar(self, handle,controller): | ||
830 | 143 | #store the handle name in lower case so no probems later | ||
831 | 144 | self.toolbarList[handle.lower()] = controller | ||
832 | 145 | |||
833 | 146 | def retrieveToolbar(self, handle): | ||
834 | 147 | """ | ||
835 | 148 | Find the toolbar and return master if none present | ||
836 | 149 | Add extra information back into toolbar class | ||
837 | 150 | """ | ||
838 | 151 | try: | ||
839 | 152 | toolbar = self.toolbarList[handle.lower()] | ||
840 | 153 | except: | ||
841 | 154 | toolbar = self.toolbarList[u'master'] | ||
842 | 155 | toolbar.PreviewListWidget = self.PreviewListWidget | ||
843 | 156 | toolbar.SlidePreview = self.SlidePreview | ||
844 | 157 | toolbar.mainDisplay = self.parent.mainDisplay | ||
845 | 158 | return toolbar | ||
846 | 159 | |||
847 | 217 | def addServiceItem(self, item): | 160 | def addServiceItem(self, item): |
848 | 161 | """ | ||
849 | 162 | helper method to pass item to correct toolbar | ||
850 | 163 | """ | ||
851 | 164 | self.BaseToolbar = self.retrieveToolbar(item.shortname) | ||
852 | 165 | self.ControllerLayout.removeWidget(self.Toolbar) | ||
853 | 166 | #remove the old toolbar | ||
854 | 167 | self.Toolbar.clear() | ||
855 | 168 | self.Toolbar = self.BaseToolbar.getToolbar() | ||
856 | 169 | self.ControllerLayout.addWidget(self.Toolbar) | ||
857 | 218 | self.BaseToolbar.addServiceItem(item) | 170 | self.BaseToolbar.addServiceItem(item) |
858 | 219 | 171 | ||
859 | 220 | def addServiceManagerItem(self, item, slideno): | 172 | def addServiceManagerItem(self, item, slideno): |
860 | 173 | """ | ||
861 | 174 | helper method to pass item to correct toolbar | ||
862 | 175 | """ | ||
863 | 176 | self.BaseToolbar = self.retrieveToolbar(item.shortname) | ||
864 | 177 | self.ControllerLayout.removeWidget(self.Toolbar) | ||
865 | 178 | #remove the old toolbar | ||
866 | 179 | self.Toolbar.clear() | ||
867 | 180 | self.Toolbar = self.BaseToolbar.getToolbar() | ||
868 | 181 | self.ControllerLayout.addWidget(self.Toolbar) | ||
869 | 221 | self.BaseToolbar.addServiceManagerItem(item, slideno) | 182 | self.BaseToolbar.addServiceManagerItem(item, slideno) |
870 | 222 | 183 | ||
873 | 223 | class BaseToolbar(object): | 184 | class MasterToolbar(QtCore.QObject): |
874 | 224 | 185 | """ | |
875 | 186 | Class from which all tollbars should extend | ||
876 | 187 | """ | ||
877 | 225 | def __init__(self, isLive): | 188 | def __init__(self, isLive): |
878 | 226 | self.Toolbar = None | 189 | self.Toolbar = None |
881 | 227 | self.PreviewListView = QtGui.QListWidget() | 190 | QtCore.QObject.__init__(self) |
882 | 228 | self.PreviewListData = None | 191 | self.PreviewListWidget = QtGui.QListWidget() |
883 | 229 | self.isLive = isLive | 192 | self.isLive = isLive |
884 | 193 | |||
885 | 194 | def getToolbar(self): | ||
886 | 195 | #define toolbar here as it needs to be redefined each time | ||
887 | 196 | #as the clear destroys it. | ||
888 | 230 | self.defineToolbar() | 197 | self.defineToolbar() |
889 | 231 | |||
890 | 232 | def getToolbar(self): | ||
891 | 233 | return self.Toolbar | 198 | return self.Toolbar |
892 | 234 | 199 | ||
893 | 235 | def defineToolbar(self): | 200 | def defineToolbar(self): |
894 | 236 | # Controller toolbar | 201 | # Controller toolbar |
895 | 237 | #self.Toolbar = OpenLPToolbar(self.Controller) | ||
896 | 238 | self.Toolbar = OpenLPToolbar(self) | 202 | self.Toolbar = OpenLPToolbar(self) |
897 | 239 | sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, | 203 | sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, |
898 | 240 | QtGui.QSizePolicy.Fixed) | 204 | QtGui.QSizePolicy.Fixed) |
899 | @@ -249,11 +213,11 @@ | |||
900 | 249 | u':/slides/slide_first.png', | 213 | u':/slides/slide_first.png', |
901 | 250 | translate(u'SlideController', u'Move to first'), | 214 | translate(u'SlideController', u'Move to first'), |
902 | 251 | self.onSlideSelectedFirst) | 215 | self.onSlideSelectedFirst) |
904 | 252 | self.Toolbar.addToolbarButton(u'Last Slide', | 216 | self.Toolbar.addToolbarButton(u'Previous Slide', |
905 | 253 | u':/slides/slide_previous.png', | 217 | u':/slides/slide_previous.png', |
906 | 254 | translate(u'SlideController', u'Move to previous'), | 218 | translate(u'SlideController', u'Move to previous'), |
907 | 255 | self.onSlideSelectedPrevious) | 219 | self.onSlideSelectedPrevious) |
909 | 256 | self.Toolbar.addToolbarButton(u'First Slide', | 220 | self.Toolbar.addToolbarButton(u'Next Slide', |
910 | 257 | u':/slides/slide_next.png', | 221 | u':/slides/slide_next.png', |
911 | 258 | translate(u'SlideController', u'Move to next'), | 222 | translate(u'SlideController', u'Move to next'), |
912 | 259 | self.onSlideSelectedNext) | 223 | self.onSlideSelectedNext) |
913 | @@ -272,56 +236,35 @@ | |||
914 | 272 | """ | 236 | """ |
915 | 273 | Go to the first slide. | 237 | Go to the first slide. |
916 | 274 | """ | 238 | """ |
922 | 275 | row = self.PreviewListData.createIndex(0, 0) | 239 | self.PreviewListWidget.selectRow(0) |
923 | 276 | if row.isValid(): | 240 | self.onSlideSelected() |
919 | 277 | self.PreviewListView.selectionModel().setCurrentIndex(row, | ||
920 | 278 | QtGui.QItemSelectionModel.SelectCurrent) | ||
921 | 279 | self.onSlideSelected(row) | ||
924 | 280 | 241 | ||
925 | 281 | def onSlideSelectedNext(self): | 242 | def onSlideSelectedNext(self): |
926 | 282 | """ | 243 | """ |
927 | 283 | Go to the next slide. | 244 | Go to the next slide. |
928 | 284 | """ | 245 | """ |
941 | 285 | indexes = self.PreviewListView.selectedIndexes() | 246 | row = self.PreviewListWidget.currentRow() + 1 |
942 | 286 | rowNumber = 0 | 247 | if row == self.PreviewListWidget.rowCount(): |
943 | 287 | for index in indexes: | 248 | row = 0 |
944 | 288 | if index.row() == self.PreviewListData.rowCount() - 1: | 249 | self.PreviewListWidget.selectRow(row) |
945 | 289 | rowNumber = 0 | 250 | self.onSlideSelected() |
934 | 290 | else: | ||
935 | 291 | rowNumber = index.row() + 1 | ||
936 | 292 | row = self.PreviewListData.createIndex(rowNumber, 0) | ||
937 | 293 | if row.isValid(): | ||
938 | 294 | self.PreviewListView.selectionModel().setCurrentIndex(row, | ||
939 | 295 | QtGui.QItemSelectionModel.SelectCurrent) | ||
940 | 296 | self.onSlideSelected(row) | ||
946 | 297 | 251 | ||
947 | 298 | def onSlideSelectedPrevious(self): | 252 | def onSlideSelectedPrevious(self): |
948 | 299 | """ | 253 | """ |
949 | 300 | Go to the previous slide. | 254 | Go to the previous slide. |
950 | 301 | """ | 255 | """ |
963 | 302 | indexes = self.PreviewListView.selectedIndexes() | 256 | row = self.PreviewListWidget.currentRow() - 1 |
964 | 303 | rowNumber = 0 | 257 | if row == -1: |
965 | 304 | for index in indexes: | 258 | row = self.PreviewListWidget.rowCount() - 1 |
966 | 305 | if index.row() == 0: | 259 | self.PreviewListWidget.selectRow(row) |
967 | 306 | rowNumber = self.PreviewListData.rowCount() - 1 | 260 | self.onSlideSelected() |
956 | 307 | else: | ||
957 | 308 | rowNumber = index.row() - 1 | ||
958 | 309 | row = self.PreviewListData.createIndex(rowNumber, 0) | ||
959 | 310 | if row.isValid(): | ||
960 | 311 | self.PreviewListView.selectionModel().setCurrentIndex(row, | ||
961 | 312 | QtGui.QItemSelectionModel.SelectCurrent) | ||
962 | 313 | self.onSlideSelected(row) | ||
968 | 314 | 261 | ||
969 | 315 | def onSlideSelectedLast(self): | 262 | def onSlideSelectedLast(self): |
970 | 316 | """ | 263 | """ |
971 | 317 | Go to the last slide. | 264 | Go to the last slide. |
972 | 318 | """ | 265 | """ |
979 | 319 | row = self.PreviewListData.createIndex( | 266 | self.PreviewListWidget.selectRow(self.PreviewListWidget.rowCount() - 1) |
980 | 320 | self.PreviewListData.rowCount() - 1, 0) | 267 | self.onSlideSelected() |
975 | 321 | if row.isValid(): | ||
976 | 322 | self.PreviewListView.selectionModel().setCurrentIndex(row, | ||
977 | 323 | QtGui.QItemSelectionModel.SelectCurrent) | ||
978 | 324 | self.onSlideSelected(row) | ||
981 | 325 | 268 | ||
982 | 326 | def onBlankScreen(self): | 269 | def onBlankScreen(self): |
983 | 327 | """ | 270 | """ |
984 | @@ -329,54 +272,56 @@ | |||
985 | 329 | """ | 272 | """ |
986 | 330 | self.mainDisplay.blankDisplay() | 273 | self.mainDisplay.blankDisplay() |
987 | 331 | 274 | ||
989 | 332 | def onSlideSelected(self, index): | 275 | def onSlideSelected(self): |
990 | 333 | """ | 276 | """ |
991 | 334 | Generate the preview when you click on a slide. | 277 | Generate the preview when you click on a slide. |
1009 | 335 | """ | 278 | if this is the Live Controller also display on the screen |
1010 | 336 | frame = self.PreviewListData.getValue(index) | 279 | """ |
1011 | 337 | self.previewFrame(frame) | 280 | row = self.PreviewListWidget.currentRow() |
1012 | 338 | 281 | if row > -1 and row < self.PreviewListWidget.rowCount(): | |
1013 | 339 | def previewFrame(self, frame): | 282 | label = self.PreviewListWidget.cellWidget(row, 0) |
1014 | 340 | """ | 283 | smallframe = label.pixmap() |
1015 | 341 | Generates a preview of the current slide. | 284 | frame = self.serviceitem.frames[row][u'image'] |
1016 | 342 | """ | 285 | self.SlidePreview.setPixmap(smallframe) |
1017 | 343 | self.SlidePreview.setPixmap(QtGui.QPixmap.fromImage(frame[0])) | 286 | if self.isLive: |
1018 | 344 | if self.isLive: | 287 | self.mainDisplay.frameView(frame) |
1019 | 345 | no = frame[1] | 288 | |
1020 | 346 | LiveFrame = self.serviceitem.frames[no][u'image'] | 289 | def addServiceItem(self, serviceitem, slideno = 1): |
1021 | 347 | self.mainDisplay.frameView(LiveFrame) | 290 | """ |
1022 | 348 | 291 | Loads a ServiceItem into the system from plugins | |
1023 | 349 | def addServiceItem(self, serviceitem): | 292 | Display the first slide |
1007 | 350 | """ | ||
1008 | 351 | Loads a ServiceItem. | ||
1024 | 352 | """ | 293 | """ |
1025 | 353 | log.debug(u'add Service Item') | 294 | log.debug(u'add Service Item') |
1038 | 354 | self.serviceitem = serviceitem | 295 | serviceitem.render() |
1039 | 355 | self.serviceitem.render() | 296 | self.addServiceManagerItem(serviceitem, 0) |
1028 | 356 | self.PreviewListData.clear() | ||
1029 | 357 | framenumber = 0 | ||
1030 | 358 | for frame in self.serviceitem.frames: | ||
1031 | 359 | self.PreviewListData.addRow(frame[u'image'], framenumber) | ||
1032 | 360 | framenumber += 1 | ||
1033 | 361 | row = self.PreviewListData.createIndex(0, 0) | ||
1034 | 362 | if row.isValid(): | ||
1035 | 363 | self.PreviewListView.selectionModel().setCurrentIndex(row, | ||
1036 | 364 | QtGui.QItemSelectionModel.SelectCurrent) | ||
1037 | 365 | self.onSlideSelected(row) | ||
1040 | 366 | 297 | ||
1041 | 367 | def addServiceManagerItem(self, serviceitem, slideno): | 298 | def addServiceManagerItem(self, serviceitem, slideno): |
1042 | 368 | """ | 299 | """ |
1044 | 369 | Loads a ServiceManagerItem. | 300 | Loads a ServiceItem into the system from ServiceManager |
1045 | 301 | Display the Slide Passed | ||
1046 | 370 | """ | 302 | """ |
1047 | 371 | log.debug(u'add Service Manager Item') | 303 | log.debug(u'add Service Manager Item') |
1049 | 372 | self.PreviewListData.clear() | 304 | self.PreviewListWidget.clear() |
1050 | 305 | self.PreviewListWidget.setRowCount(0) | ||
1051 | 373 | self.serviceitem = serviceitem | 306 | self.serviceitem = serviceitem |
1052 | 374 | framenumber = 0 | 307 | framenumber = 0 |
1053 | 375 | for frame in self.serviceitem.frames: | 308 | for frame in self.serviceitem.frames: |
1055 | 376 | self.PreviewListData.addRow(frame[u'image'], framenumber) | 309 | self.PreviewListWidget.setRowCount(self.PreviewListWidget.rowCount() + 1) |
1056 | 310 | pixmap = QtGui.QPixmap.fromImage(frame[u'image']) | ||
1057 | 311 | item = QtGui.QTableWidgetItem() | ||
1058 | 312 | label = QtGui.QLabel() | ||
1059 | 313 | label.setMargin(15) | ||
1060 | 314 | label.setScaledContents(True) | ||
1061 | 315 | width = 300 | ||
1062 | 316 | height = width * pixmap.height() / pixmap.width() | ||
1063 | 317 | label.setPixmap(pixmap) | ||
1064 | 318 | self.PreviewListWidget.setCellWidget(framenumber, 0,label) | ||
1065 | 319 | self.PreviewListWidget.setItem( framenumber, 0, item) | ||
1066 | 320 | self.PreviewListWidget.setRowHeight(framenumber, height) | ||
1067 | 321 | self.PreviewListWidget.setColumnWidth(0, width) | ||
1068 | 377 | framenumber += 1 | 322 | framenumber += 1 |
1074 | 378 | row = self.PreviewListData.createIndex(slideno, 0) | 323 | if slideno > self.PreviewListWidget.rowCount(): |
1075 | 379 | if row.isValid(): | 324 | self.PreviewListWidget.selectRow(self.PreviewListWidget.rowCount()) |
1076 | 380 | self.PreviewListView.selectionModel().setCurrentIndex(row, | 325 | else: |
1077 | 381 | QtGui.QItemSelectionModel.SelectCurrent) | 326 | self.PreviewListWidget.selectRow(slideno) |
1078 | 382 | self.onSlideSelected(row) | 327 | self.onSlideSelected() |
1079 | 383 | 328 | ||
1080 | === modified file 'openlp/core/ui/thememanager.py' | |||
1081 | --- openlp/core/ui/thememanager.py 2009-06-29 05:07:32 +0000 | |||
1082 | +++ openlp/core/ui/thememanager.py 2009-07-02 19:04:50 +0000 | |||
1083 | @@ -177,7 +177,6 @@ | |||
1084 | 177 | items = self.ThemeListView.selectedIndexes() | 177 | items = self.ThemeListView.selectedIndexes() |
1085 | 178 | if len(items) > 0: | 178 | if len(items) > 0: |
1086 | 179 | for item in items: | 179 | for item in items: |
1087 | 180 | print item | ||
1088 | 181 | data = self.themeData.getValue(item) | 180 | data = self.themeData.getValue(item) |
1089 | 182 | self.amendThemeForm.loadTheme(data[3]) | 181 | self.amendThemeForm.loadTheme(data[3]) |
1090 | 183 | self.amendThemeForm.exec_() | 182 | self.amendThemeForm.exec_() |
1091 | @@ -222,7 +221,10 @@ | |||
1092 | 222 | for root, dirs, files in os.walk(self.path): | 221 | for root, dirs, files in os.walk(self.path): |
1093 | 223 | for name in files: | 222 | for name in files: |
1094 | 224 | if name.endswith(u'.png'): | 223 | if name.endswith(u'.png'): |
1096 | 225 | self.themeData.addRow(os.path.join(self.path, name)) | 224 | #check to see file is in route directory |
1097 | 225 | theme = os.path.join(self.path, name) | ||
1098 | 226 | if os.path.exists(theme): | ||
1099 | 227 | self.themeData.addRow(theme) | ||
1100 | 226 | self.parent.EventManager.post_event(Event(EventType.ThemeListChanged)) | 228 | self.parent.EventManager.post_event(Event(EventType.ThemeListChanged)) |
1101 | 227 | self.parent.ServiceManagerContents.updateThemeList(self.getThemes()) | 229 | self.parent.ServiceManagerContents.updateThemeList(self.getThemes()) |
1102 | 228 | self.parent.settingsForm.ThemesTab.updateThemeList(self.getThemes()) | 230 | self.parent.settingsForm.ThemesTab.updateThemeList(self.getThemes()) |
1103 | 229 | 231 | ||
1104 | === modified file 'openlp/plugins/bibles/bibleplugin.py' | |||
1105 | --- openlp/plugins/bibles/bibleplugin.py 2009-06-26 17:51:43 +0000 | |||
1106 | +++ openlp/plugins/bibles/bibleplugin.py 2009-07-03 20:32:33 +0000 | |||
1107 | @@ -37,7 +37,7 @@ | |||
1108 | 37 | self.weight = -9 | 37 | self.weight = -9 |
1109 | 38 | # Create the plugin icon | 38 | # Create the plugin icon |
1110 | 39 | self.icon = QtGui.QIcon() | 39 | self.icon = QtGui.QIcon() |
1112 | 40 | self.icon.addPixmap(QtGui.QPixmap(u':/media/media_verse.png'), | 40 | self.icon.addPixmap(QtGui.QPixmap(u':/media/media_bible.png'), |
1113 | 41 | QtGui.QIcon.Normal, QtGui.QIcon.Off) | 41 | QtGui.QIcon.Normal, QtGui.QIcon.Off) |
1114 | 42 | #Register the bible Manager | 42 | #Register the bible Manager |
1115 | 43 | self.biblemanager = BibleManager(self.config) | 43 | self.biblemanager = BibleManager(self.config) |
1116 | 44 | 44 | ||
1117 | === modified file 'openlp/plugins/bibles/lib/manager.py' | |||
1118 | --- openlp/plugins/bibles/lib/manager.py 2009-06-20 19:11:17 +0000 | |||
1119 | +++ openlp/plugins/bibles/lib/manager.py 2009-07-03 20:32:33 +0000 | |||
1120 | @@ -245,7 +245,7 @@ | |||
1121 | 245 | log.debug(u'get_verse_text : new book') | 245 | log.debug(u'get_verse_text : new book') |
1122 | 246 | for chapter in range(schapter, echapter+1): | 246 | for chapter in range(schapter, echapter+1): |
1123 | 247 | search_results = self.bible_http_cache [bible].get_bible_chapter(bible, 0, bookname, chapter) | 247 | search_results = self.bible_http_cache [bible].get_bible_chapter(bible, 0, bookname, chapter) |
1125 | 248 | if search_results.has_verse_list() : | 248 | if search_results.has_verselist() : |
1126 | 249 | ## We have found a book of the bible lets check to see if it was there. | 249 | ## We have found a book of the bible lets check to see if it was there. |
1127 | 250 | ## By reusing the returned book name we get a correct book. | 250 | ## By reusing the returned book name we get a correct book. |
1128 | 251 | ## For example it is possible to request ac and get Acts back. | 251 | ## For example it is possible to request ac and get Acts back. |
1129 | 252 | 252 | ||
1130 | === modified file 'openlp/plugins/bibles/lib/mediaitem.py' | |||
1131 | --- openlp/plugins/bibles/lib/mediaitem.py 2009-06-29 05:07:32 +0000 | |||
1132 | +++ openlp/plugins/bibles/lib/mediaitem.py 2009-07-04 05:52:30 +0000 | |||
1133 | @@ -21,7 +21,7 @@ | |||
1134 | 21 | 21 | ||
1135 | 22 | from PyQt4 import QtCore, QtGui | 22 | from PyQt4 import QtCore, QtGui |
1136 | 23 | 23 | ||
1138 | 24 | from openlp.core.lib import ServiceItem, MediaManagerItem, Receiver, translate | 24 | from openlp.core.lib import ServiceItem, MediaManagerItem, Receiver, translate, contextMenuAction, contextMenuSeparator |
1139 | 25 | from openlp.plugins.bibles.forms import BibleImportForm | 25 | from openlp.plugins.bibles.forms import BibleImportForm |
1140 | 26 | 26 | ||
1141 | 27 | class BibleList(QtGui.QListWidget): | 27 | class BibleList(QtGui.QListWidget): |
1142 | @@ -215,13 +215,13 @@ | |||
1143 | 215 | QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onPreviewClick) | 215 | QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onPreviewClick) |
1144 | 216 | # Context Menus | 216 | # Context Menus |
1145 | 217 | self.ListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) | 217 | self.ListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) |
1147 | 218 | self.ListView.addAction(self.contextMenuAction( | 218 | self.ListView.addAction(contextMenuAction( |
1148 | 219 | self.ListView, u':/system/system_preview.png', | 219 | self.ListView, u':/system/system_preview.png', |
1149 | 220 | translate(u'BibleMediaItem',u'&Preview Verse'), self.onPreviewClick)) | 220 | translate(u'BibleMediaItem',u'&Preview Verse'), self.onPreviewClick)) |
1151 | 221 | self.ListView.addAction(self.contextMenuAction( | 221 | self.ListView.addAction(contextMenuAction( |
1152 | 222 | self.ListView, u':/system/system_live.png', | 222 | self.ListView, u':/system/system_live.png', |
1153 | 223 | translate(u'BibleMediaItem',u'&Show Live'), self.onLiveClick)) | 223 | translate(u'BibleMediaItem',u'&Show Live'), self.onLiveClick)) |
1155 | 224 | self.ListView.addAction(self.contextMenuAction( | 224 | self.ListView.addAction(contextMenuAction( |
1156 | 225 | self.ListView, u':/system/system_add.png', | 225 | self.ListView, u':/system/system_add.png', |
1157 | 226 | translate(u'BibleMediaItem',u'&Add to Service'), self.onAddClick)) | 226 | translate(u'BibleMediaItem',u'&Add to Service'), self.onAddClick)) |
1158 | 227 | 227 | ||
1159 | 228 | 228 | ||
1160 | === modified file 'openlp/plugins/custom/lib/mediaitem.py' | |||
1161 | --- openlp/plugins/custom/lib/mediaitem.py 2009-06-27 19:55:55 +0000 | |||
1162 | +++ openlp/plugins/custom/lib/mediaitem.py 2009-07-04 05:52:30 +0000 | |||
1163 | @@ -21,7 +21,7 @@ | |||
1164 | 21 | 21 | ||
1165 | 22 | from PyQt4 import QtCore, QtGui | 22 | from PyQt4 import QtCore, QtGui |
1166 | 23 | 23 | ||
1168 | 24 | from openlp.core.lib import MediaManagerItem, SongXMLParser, ServiceItem, translate | 24 | from openlp.core.lib import MediaManagerItem, SongXMLParser, ServiceItem, translate, contextMenuAction, contextMenuSeparator |
1169 | 25 | 25 | ||
1170 | 26 | class CustomList(QtGui.QListWidget): | 26 | class CustomList(QtGui.QListWidget): |
1171 | 27 | 27 | ||
1172 | @@ -114,17 +114,17 @@ | |||
1173 | 114 | QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onCustomPreviewClick) | 114 | QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onCustomPreviewClick) |
1174 | 115 | #define and add the context menu | 115 | #define and add the context menu |
1175 | 116 | self.ListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) | 116 | self.ListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) |
1177 | 117 | self.ListView.addAction(self.contextMenuAction(self.ListView, | 117 | self.ListView.addAction(contextMenuAction(self.ListView, |
1178 | 118 | ':/custom/custom_edit.png', translate(u'CustomMediaItem', u'&Edit Custom'), | 118 | ':/custom/custom_edit.png', translate(u'CustomMediaItem', u'&Edit Custom'), |
1179 | 119 | self.onCustomEditClick)) | 119 | self.onCustomEditClick)) |
1182 | 120 | self.ListView.addAction(self.contextMenuSeparator(self.ListView)) | 120 | self.ListView.addAction(contextMenuSeparator(self.ListView)) |
1183 | 121 | self.ListView.addAction(self.contextMenuAction( | 121 | self.ListView.addAction(contextMenuAction( |
1184 | 122 | self.ListView, ':/system/system_preview.png', | 122 | self.ListView, ':/system/system_preview.png', |
1185 | 123 | translate(u'CustomMediaItem',u'&Preview Custom'), self.onCustomPreviewClick)) | 123 | translate(u'CustomMediaItem',u'&Preview Custom'), self.onCustomPreviewClick)) |
1187 | 124 | self.ListView.addAction(self.contextMenuAction( | 124 | self.ListView.addAction(contextMenuAction( |
1188 | 125 | self.ListView, ':/system/system_live.png', | 125 | self.ListView, ':/system/system_live.png', |
1189 | 126 | translate(u'CustomMediaItem',u'&Show Live'), self.onCustomLiveClick)) | 126 | translate(u'CustomMediaItem',u'&Show Live'), self.onCustomLiveClick)) |
1191 | 127 | self.ListView.addAction(self.contextMenuAction( | 127 | self.ListView.addAction(contextMenuAction( |
1192 | 128 | self.ListView, ':/system/system_add.png', | 128 | self.ListView, ':/system/system_add.png', |
1193 | 129 | translate(u'CustomMediaItem',u'&Add to Service'), self.onCustomAddClick)) | 129 | translate(u'CustomMediaItem',u'&Add to Service'), self.onCustomAddClick)) |
1194 | 130 | 130 | ||
1195 | 131 | 131 | ||
1196 | === modified file 'openlp/plugins/images/imageplugin.py' | |||
1197 | --- openlp/plugins/images/imageplugin.py 2009-06-27 15:33:03 +0000 | |||
1198 | +++ openlp/plugins/images/imageplugin.py 2009-07-03 20:32:33 +0000 | |||
1199 | @@ -22,7 +22,7 @@ | |||
1200 | 22 | from PyQt4 import QtCore, QtGui | 22 | from PyQt4 import QtCore, QtGui |
1201 | 23 | 23 | ||
1202 | 24 | from openlp.core.lib import Plugin, Event, EventType | 24 | from openlp.core.lib import Plugin, Event, EventType |
1204 | 25 | from openlp.plugins.images.lib import ImageMediaItem | 25 | from openlp.plugins.images.lib import ImageMediaItem, ImageTab |
1205 | 26 | 26 | ||
1206 | 27 | class ImagePlugin(Plugin): | 27 | class ImagePlugin(Plugin): |
1207 | 28 | global log | 28 | global log |
1208 | @@ -40,6 +40,10 @@ | |||
1209 | 40 | # passed with drag and drop messages | 40 | # passed with drag and drop messages |
1210 | 41 | self.dnd_id = u'Image' | 41 | self.dnd_id = u'Image' |
1211 | 42 | 42 | ||
1212 | 43 | def get_settings_tab(self): | ||
1213 | 44 | self.ImageTab = ImageTab() | ||
1214 | 45 | return self.ImageTab | ||
1215 | 46 | |||
1216 | 43 | def get_media_manager_item(self): | 47 | def get_media_manager_item(self): |
1217 | 44 | # Create the MediaManagerItem object | 48 | # Create the MediaManagerItem object |
1218 | 45 | self.media_item = ImageMediaItem(self, self.icon, u'Images') | 49 | self.media_item = ImageMediaItem(self, self.icon, u'Images') |
1219 | 46 | 50 | ||
1220 | === modified file 'openlp/plugins/images/lib/__init__.py' | |||
1221 | --- openlp/plugins/images/lib/__init__.py 2009-06-29 05:07:32 +0000 | |||
1222 | +++ openlp/plugins/images/lib/__init__.py 2009-07-03 20:32:33 +0000 | |||
1223 | @@ -19,3 +19,4 @@ | |||
1224 | 19 | """ | 19 | """ |
1225 | 20 | from mediaitem import ImageMediaItem | 20 | from mediaitem import ImageMediaItem |
1226 | 21 | from imageslidecontroller import ImageToolbar | 21 | from imageslidecontroller import ImageToolbar |
1227 | 22 | from imagetab import ImageTab | ||
1228 | 22 | 23 | ||
1229 | === modified file 'openlp/plugins/images/lib/imageslidecontroller.py' | |||
1230 | --- openlp/plugins/images/lib/imageslidecontroller.py 2009-06-29 05:07:32 +0000 | |||
1231 | +++ openlp/plugins/images/lib/imageslidecontroller.py 2009-07-03 20:32:33 +0000 | |||
1232 | @@ -22,23 +22,20 @@ | |||
1233 | 22 | 22 | ||
1234 | 23 | from PyQt4 import QtCore, QtGui | 23 | from PyQt4 import QtCore, QtGui |
1235 | 24 | from openlp.core.lib import OpenLPToolbar, translate | 24 | from openlp.core.lib import OpenLPToolbar, translate |
1241 | 25 | from openlp.core.ui.slidecontroller import BaseToolbar | 25 | from openlp.core.ui.slidecontroller import MasterToolbar |
1242 | 26 | 26 | ||
1243 | 27 | class ImageToolbar(BaseToolbar): | 27 | class ImageToolbar(MasterToolbar): |
1244 | 28 | 28 | ||
1245 | 29 | def __init__(self, isLive): | 29 | def __init__(self, parent, isLive): |
1246 | 30 | MasterToolbar.__init__(self, isLive) | ||
1247 | 31 | self.parent = parent | ||
1248 | 30 | self.Toolbar = None | 32 | self.Toolbar = None |
1249 | 31 | self.PreviewListView = QtGui.QListWidget() | ||
1250 | 32 | self.PreviewListData = None | ||
1251 | 33 | self.isLive = isLive | 33 | self.isLive = isLive |
1252 | 34 | self.defineToolbar() | 34 | self.defineToolbar() |
1253 | 35 | 35 | ||
1254 | 36 | def getToolbar(self): | ||
1255 | 37 | return self.Toolbar | ||
1256 | 38 | |||
1257 | 39 | def defineToolbar(self): | 36 | def defineToolbar(self): |
1258 | 40 | # Controller toolbar | 37 | # Controller toolbar |
1260 | 41 | #self.Toolbar = OpenLPToolbar(self.Controller) | 38 | self.Toolbar = OpenLPToolbar(self) |
1261 | 42 | sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, | 39 | sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, |
1262 | 43 | QtGui.QSizePolicy.Fixed) | 40 | QtGui.QSizePolicy.Fixed) |
1263 | 44 | sizeToolbarPolicy.setHorizontalStretch(0) | 41 | sizeToolbarPolicy.setHorizontalStretch(0) |
1264 | @@ -50,11 +47,11 @@ | |||
1265 | 50 | u':/slides/slide_first.png', | 47 | u':/slides/slide_first.png', |
1266 | 51 | translate(u'SlideController', u'Move to first'), | 48 | translate(u'SlideController', u'Move to first'), |
1267 | 52 | self.onSlideSelectedFirst) | 49 | self.onSlideSelectedFirst) |
1269 | 53 | self.Toolbar.addToolbarButton(u'Last Slide', | 50 | self.Toolbar.addToolbarButton(u'Previous Slide', |
1270 | 54 | u':/slides/slide_previous.png', | 51 | u':/slides/slide_previous.png', |
1271 | 55 | translate(u'SlideController', u'Move to previous'), | 52 | translate(u'SlideController', u'Move to previous'), |
1272 | 56 | self.onSlideSelectedPrevious) | 53 | self.onSlideSelectedPrevious) |
1274 | 57 | self.Toolbar.addToolbarButton(u'First Slide', | 54 | self.Toolbar.addToolbarButton(u'Next Slide', |
1275 | 58 | u':/slides/slide_next.png', | 55 | u':/slides/slide_next.png', |
1276 | 59 | translate(u'SlideController', u'Move to next'), | 56 | translate(u'SlideController', u'Move to next'), |
1277 | 60 | self.onSlideSelectedNext) | 57 | self.onSlideSelectedNext) |
1278 | @@ -70,34 +67,29 @@ | |||
1279 | 70 | self.onBlankScreen) | 67 | self.onBlankScreen) |
1280 | 71 | self.Toolbar.addSeparator() | 68 | self.Toolbar.addSeparator() |
1281 | 72 | self.Toolbar.addToolbarButton(u'Start Loop', | 69 | self.Toolbar.addToolbarButton(u'Start Loop', |
1283 | 73 | u':/slides/slide_last.png', | 70 | u':/media/media_time.png', |
1284 | 74 | translate(u'SlideController', u'Start continuous loop'), | 71 | translate(u'SlideController', u'Start continuous loop'), |
1285 | 75 | self.onStartLoop) | 72 | self.onStartLoop) |
1286 | 76 | self.Toolbar.addToolbarButton(u'Stop Loop', | 73 | self.Toolbar.addToolbarButton(u'Stop Loop', |
1289 | 77 | u':/slides/slide_last.png', | 74 | u':/media/media_stop.png', |
1290 | 78 | translate(u'SlideController', u'Start continuous loop'), | 75 | translate(u'SlideController', u'Stop continuous loop'), |
1291 | 79 | self.onStopLoop) | 76 | self.onStopLoop) |
1292 | 80 | self.Toolbar.setSizePolicy(sizeToolbarPolicy) | 77 | self.Toolbar.setSizePolicy(sizeToolbarPolicy) |
1293 | 81 | self.ControllerLayout.addWidget(self.Toolbar) | ||
1294 | 82 | 78 | ||
1295 | 83 | def onStartLoop(self): | 79 | def onStartLoop(self): |
1296 | 84 | """ | 80 | """ |
1297 | 85 | Go to the last slide. | 81 | Go to the last slide. |
1298 | 86 | """ | 82 | """ |
1305 | 87 | row = self.PreviewListData.createIndex( | 83 | delay = self.parent.parent.ImageTab.loop_delay |
1306 | 88 | self.PreviewListData.rowCount() - 1, 0) | 84 | self.timer_id = self.startTimer(delay * 1000) |
1301 | 89 | if row.isValid(): | ||
1302 | 90 | self.PreviewListView.selectionModel().setCurrentIndex(row, | ||
1303 | 91 | QtGui.QItemSelectionModel.SelectCurrent) | ||
1304 | 92 | self.onSlideSelected(row) | ||
1307 | 93 | 85 | ||
1308 | 94 | def onStopLoop(self): | 86 | def onStopLoop(self): |
1309 | 95 | """ | 87 | """ |
1310 | 96 | Go to the last slide. | 88 | Go to the last slide. |
1311 | 97 | """ | 89 | """ |
1318 | 98 | row = self.PreviewListData.createIndex( | 90 | self.killTimer(self.timer_id) |
1319 | 99 | self.PreviewListData.rowCount() - 1, 0) | 91 | |
1320 | 100 | if row.isValid(): | 92 | def timerEvent(self, event): |
1321 | 101 | self.PreviewListView.selectionModel().setCurrentIndex(row, | 93 | if event.timerId() == self.timer_id: |
1322 | 102 | QtGui.QItemSelectionModel.SelectCurrent) | 94 | self.onSlideSelectedNext() |
1323 | 103 | self.onSlideSelected(row) | 95 | |
1324 | 104 | 96 | ||
1325 | === added file 'openlp/plugins/images/lib/imagetab.py' | |||
1326 | --- openlp/plugins/images/lib/imagetab.py 1970-01-01 00:00:00 +0000 | |||
1327 | +++ openlp/plugins/images/lib/imagetab.py 2009-07-03 20:33:41 +0000 | |||
1328 | @@ -0,0 +1,69 @@ | |||
1329 | 1 | # -*- coding: utf-8 -*- | ||
1330 | 2 | # vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 | ||
1331 | 3 | """ | ||
1332 | 4 | OpenLP - Open Source Lyrics Projection | ||
1333 | 5 | Copyright (c) 2008 Raoul Snyman | ||
1334 | 6 | Portions copyright (c) 2008-2009 Martin Thompson, Tim Bentley, | ||
1335 | 7 | |||
1336 | 8 | This program is free software; you can redistribute it and/or modify it under | ||
1337 | 9 | the terms of the GNU General Public License as published by the Free Software | ||
1338 | 10 | Foundation; version 2 of the License. | ||
1339 | 11 | |||
1340 | 12 | This program is distributed in the hope that it will be useful, but WITHOUT ANY | ||
1341 | 13 | WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A | ||
1342 | 14 | PARTICULAR PURPOSE. See the GNU General Public License for more details. | ||
1343 | 15 | |||
1344 | 16 | You should have received a copy of the GNU General Public License along with | ||
1345 | 17 | this program; if not, write to the Free Software Foundation, Inc., 59 Temple | ||
1346 | 18 | Place, Suite 330, Boston, MA 02111-1307 USA | ||
1347 | 19 | """ | ||
1348 | 20 | |||
1349 | 21 | from PyQt4 import QtCore, QtGui | ||
1350 | 22 | |||
1351 | 23 | from openlp.core.lib import SettingsTab, str_to_bool, translate | ||
1352 | 24 | |||
1353 | 25 | class ImageTab(SettingsTab): | ||
1354 | 26 | """ | ||
1355 | 27 | ImageTab is the Image settings tab in the settings dialog. | ||
1356 | 28 | """ | ||
1357 | 29 | def __init__(self): | ||
1358 | 30 | SettingsTab.__init__(self, translate(u'ImageTab', u'Image'), u'Image') | ||
1359 | 31 | |||
1360 | 32 | def setupUi(self): | ||
1361 | 33 | self.setObjectName(u'ImageTab') | ||
1362 | 34 | self.ImageLayout = QtGui.QFormLayout(self) | ||
1363 | 35 | self.ImageLayout.setObjectName(u'ImageLayout') | ||
1364 | 36 | self.ImageModeGroupBox = QtGui.QGroupBox(self) | ||
1365 | 37 | self.ImageModeGroupBox.setObjectName(u'ImageModeGroupBox') | ||
1366 | 38 | self.TimeoutLayout = QtGui.QHBoxLayout(self.ImageModeGroupBox) | ||
1367 | 39 | self.TimeoutLayout.setSpacing(8) | ||
1368 | 40 | self.TimeoutLayout.setMargin(0) | ||
1369 | 41 | self.TimeoutLayout.setObjectName(u'TimeoutLayout') | ||
1370 | 42 | self.TimeoutLabel = QtGui.QLabel(self.ImageModeGroupBox) | ||
1371 | 43 | self.TimeoutLabel.setObjectName(u'TimeoutLabel') | ||
1372 | 44 | self.TimeoutLayout.addWidget(self.TimeoutLabel) | ||
1373 | 45 | self.TimeoutSpinBox = QtGui.QSpinBox(self.ImageModeGroupBox) | ||
1374 | 46 | self.TimeoutSpinBox.setMaximum(180) | ||
1375 | 47 | self.TimeoutSpinBox.setObjectName(u'TimeoutSpinBox') | ||
1376 | 48 | self.TimeoutLayout.addWidget(self.TimeoutSpinBox) | ||
1377 | 49 | self.TimeoutSpacer = QtGui.QSpacerItem(147, 20, | ||
1378 | 50 | QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) | ||
1379 | 51 | self.TimeoutLayout.addItem(self.TimeoutSpacer) | ||
1380 | 52 | |||
1381 | 53 | self.ImageLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.ImageModeGroupBox) | ||
1382 | 54 | # Signals and slots | ||
1383 | 55 | QtCore.QObject.connect(self.TimeoutSpinBox, | ||
1384 | 56 | QtCore.SIGNAL(u'valueChanged(int)'), self.onTimeoutSpinBoxChanged) | ||
1385 | 57 | |||
1386 | 58 | def retranslateUi(self): | ||
1387 | 59 | self.TimeoutLabel.setText(translate(u'ImageTab', u'Slide Loop Delay:')) | ||
1388 | 60 | |||
1389 | 61 | def onTimeoutSpinBoxChanged(self): | ||
1390 | 62 | self.loop_delay = self.TimeoutSpinBox.value() | ||
1391 | 63 | |||
1392 | 64 | def load(self): | ||
1393 | 65 | self.loop_delay = int(self.config.get_config(u'loop delay', 5)) | ||
1394 | 66 | self.TimeoutSpinBox.setValue(self.loop_delay) | ||
1395 | 67 | |||
1396 | 68 | def save(self): | ||
1397 | 69 | self.config.set_config(u'loop delay', self.loop_delay) | ||
1398 | 0 | 70 | ||
1399 | === modified file 'openlp/plugins/images/lib/mediaitem.py' | |||
1400 | --- openlp/plugins/images/lib/mediaitem.py 2009-06-29 05:13:06 +0000 | |||
1401 | +++ openlp/plugins/images/lib/mediaitem.py 2009-07-04 05:52:30 +0000 | |||
1402 | @@ -53,12 +53,12 @@ | |||
1403 | 53 | # this next is a class, not an instance of a class - it will | 53 | # this next is a class, not an instance of a class - it will |
1404 | 54 | # be instanced by the base MediaManagerItem | 54 | # be instanced by the base MediaManagerItem |
1405 | 55 | self.ListViewWithDnD_class = ImageListView | 55 | self.ListViewWithDnD_class = ImageListView |
1406 | 56 | self.ServiceItemIconName = u':/media/media_image.png' | ||
1407 | 57 | |||
1408 | 56 | MediaManagerItem.__init__(self, parent, icon, title) | 58 | MediaManagerItem.__init__(self, parent, icon, title) |
1414 | 57 | #create and install our own slide controllers | 59 | #create and install our own slide controller toolbar |
1415 | 58 | #a=c | 60 | imageToolbar = ImageToolbar(self, True) |
1416 | 59 | # live_controller = ImageSlideController(self.parent.slideManager.parent, True) | 61 | parent.live_controller.registerToolbar(self.ConfigSection, imageToolbar) |
1412 | 60 | # preview_controller = ImageSlideController(self.parent.slideManager.parent) | ||
1413 | 61 | # self.parent.slideManager.add_controllers(u'image', preview_controller, live_controller) | ||
1417 | 62 | 62 | ||
1418 | 63 | def initialise(self): | 63 | def initialise(self): |
1419 | 64 | self.ListView.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) | 64 | self.ListView.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) |
1420 | 65 | 65 | ||
1421 | === modified file 'openlp/plugins/media/lib/mediaitem.py' | |||
1422 | --- openlp/plugins/media/lib/mediaitem.py 2009-06-16 18:21:24 +0000 | |||
1423 | +++ openlp/plugins/media/lib/mediaitem.py 2009-07-04 05:52:30 +0000 | |||
1424 | @@ -19,6 +19,12 @@ | |||
1425 | 19 | """ | 19 | """ |
1426 | 20 | import logging | 20 | import logging |
1427 | 21 | import os | 21 | import os |
1428 | 22 | import tempfile | ||
1429 | 23 | try: | ||
1430 | 24 | import gst | ||
1431 | 25 | except: | ||
1432 | 26 | log = logging.getLogger(u'MediaMediaItemSetup') | ||
1433 | 27 | log.warning(u'Can\'t generate Videos previews - import gst failed'); | ||
1434 | 22 | 28 | ||
1435 | 23 | from PyQt4 import QtCore, QtGui | 29 | from PyQt4 import QtCore, QtGui |
1436 | 24 | 30 | ||
1437 | @@ -26,6 +32,13 @@ | |||
1438 | 26 | 32 | ||
1439 | 27 | from openlp.plugins.media.lib import MediaTab | 33 | from openlp.plugins.media.lib import MediaTab |
1440 | 28 | from openlp.plugins.media.lib import FileListData | 34 | from openlp.plugins.media.lib import FileListData |
1441 | 35 | # from listwithpreviews import ListWithPreviews | ||
1442 | 36 | from openlp.core.lib import MediaManagerItem, ServiceItem, translate, BaseListWithDnD, buildIcon | ||
1443 | 37 | |||
1444 | 38 | class MediaListView(BaseListWithDnD): | ||
1445 | 39 | def __init__(self, parent=None): | ||
1446 | 40 | self.PluginName = u'Media' | ||
1447 | 41 | BaseListWithDnD.__init__(self, parent) | ||
1448 | 29 | 42 | ||
1449 | 30 | class MediaMediaItem(MediaManagerItem): | 43 | class MediaMediaItem(MediaManagerItem): |
1450 | 31 | """ | 44 | """ |
1451 | @@ -36,100 +49,98 @@ | |||
1452 | 36 | log.info(u'Media Media Item loaded') | 49 | log.info(u'Media Media Item loaded') |
1453 | 37 | 50 | ||
1454 | 38 | def __init__(self, parent, icon, title): | 51 | def __init__(self, parent, icon, title): |
1455 | 52 | self.TranslationContext = u'MediaPlugin' | ||
1456 | 53 | self.hasFileIcon = True | ||
1457 | 54 | self.hasNewIcon = False | ||
1458 | 55 | self.hasEditIcon = False | ||
1459 | 56 | self.IconPath = u'images/image' | ||
1460 | 57 | self.PluginTextShort = u'Media' | ||
1461 | 58 | self.ConfigSection = u'images' | ||
1462 | 59 | self.OnNewPrompt = u'Select Media(s)' | ||
1463 | 60 | self.OnNewFileMasks = u'Videos (*.avi *.mpeg *.mpg *.mp4);;Audio (*.ogg *.mp3 *.wma);;All files (*)' | ||
1464 | 61 | # this next is a class, not an instance of a class - it will | ||
1465 | 62 | # be instanced by the base MediaManagerItem | ||
1466 | 63 | self.ListViewWithDnD_class = MediaListView | ||
1467 | 64 | #self.ServiceItemIconName = u':/media/media_image.png' | ||
1468 | 65 | self.PreviewFunction = self.video_get_preview | ||
1469 | 39 | MediaManagerItem.__init__(self, parent, icon, title) | 66 | MediaManagerItem.__init__(self, parent, icon, title) |
1470 | 40 | 67 | ||
1549 | 41 | def setupUi(self): | 68 | def video_get_preview(self, filename): |
1550 | 42 | # Add a toolbar | 69 | """Gets a preview of the first frame of a video file using |
1551 | 43 | self.addToolbar() | 70 | GSTREAMER (non-portable??? - Can't figure out how to do with |
1552 | 44 | # Create buttons for the toolbar | 71 | Phonon - returns a QImage""" |
1553 | 45 | ## New Media Button ## | 72 | try: |
1554 | 46 | self.addToolbarButton( | 73 | # Define your pipeline, just as you would at the command prompt. |
1555 | 47 | translate(u'MediaMediaItem',u'New Media'), | 74 | # This is much easier than trying to create and link each gstreamer element in Python. |
1556 | 48 | translate(u'MediaMediaItem',u'Load Media into openlp.org'), | 75 | # This is great for pipelines that end with a filesink (i.e. there is no audible or visual output) |
1557 | 49 | ':/videos/video_load.png', self.onMediaNewClick, 'MediaNewItem') | 76 | log.info ("Video preview %s"%( filename)) |
1558 | 50 | ## Delete Media Button ## | 77 | outfile=tempfile.NamedTemporaryFile(suffix='.png') |
1559 | 51 | self.addToolbarButton( | 78 | cmd=u'filesrc location="%s" ! decodebin ! ffmpegcolorspace ! pngenc ! filesink location="%s"'% (filename, outfile.name) |
1560 | 52 | translate(u'MediaMediaItem',u'Delete Media'), | 79 | pipe = gst.parse_launch(cmd) |
1561 | 53 | translate(u'MediaMediaItem',u'Delete the selected Media item'), | 80 | # Get a reference to the pipeline's bus |
1562 | 54 | ':/videos/video_delete.png', self.onMediaDeleteClick, 'MediaDeleteItem') | 81 | bus = pipe.get_bus() |
1563 | 55 | ## Separator Line ## | 82 | |
1564 | 56 | self.addToolbarSeparator() | 83 | # Set the pipeline's state to PLAYING |
1565 | 57 | ## Preview Media Button ## | 84 | pipe.set_state(gst.STATE_PLAYING) |
1566 | 58 | self.addToolbarButton( | 85 | |
1567 | 59 | translate(u'MediaMediaItem',u'Preview Media'), | 86 | # Listen to the pipeline's bus indefinitely until we receive a EOS (end of stream) message. |
1568 | 60 | translate(u'MediaMediaItem',u'Preview the selected Media item'), | 87 | # This is a super important step, or the pipeline might not work as expected. For example, |
1569 | 61 | ':/system/system_preview.png', self.onMediaPreviewClick, 'MediaPreviewItem') | 88 | # in my example pipeline above, the pngenc will not export an actual image unless you have |
1570 | 62 | ## Live Media Button ## | 89 | # this line of code. It just exports a 0 byte png file. So... don't forget this step. |
1571 | 63 | self.addToolbarButton( | 90 | bus.poll(gst.MESSAGE_EOS, -1) |
1572 | 64 | translate(u'MediaMediaItem',u'Go Live'), | 91 | img = QtGui.QImage(outfile.name) |
1573 | 65 | translate(u'MediaMediaItem',u'Send the selected Media item live'), | 92 | outfile.close() |
1574 | 66 | ':/system/system_live.png', self.onMediaLiveClick, 'MediaLiveItem') | 93 | # os.unlink(outfile.name) |
1575 | 67 | ## Add Media Button ## | 94 | pipe.set_state(gst.STATE_NULL) |
1576 | 68 | self.addToolbarButton( | 95 | return img |
1577 | 69 | translate(u'MediaMediaItem',u'Add Media To Service'), | 96 | except: |
1578 | 70 | translate(u'MediaMediaItem',u'Add the selected Media items(s) to the service'), | 97 | log.info("Can't generate video preview for some reason"); |
1579 | 71 | ':/system/system_add.png',self.onMediaAddClick, 'MediaAddItem') | 98 | import sys |
1580 | 72 | ## Add the Medialist widget ## | 99 | print sys.exc_info() |
1581 | 73 | 100 | return None | |
1582 | 74 | self.MediaListView = QtGui.QListView() | 101 | |
1583 | 75 | self.MediaListView.setAlternatingRowColors(True) | 102 | def generateSlideData(self, service_item): |
1584 | 76 | self.MediaListData = FileListData() | 103 | indexes = self.ListView.selectedIndexes() |
1585 | 77 | self.MediaListView.setModel(self.MediaListData) | 104 | service_item.title = u'Media' |
1508 | 78 | |||
1509 | 79 | self.PageLayout.addWidget(self.MediaListView) | ||
1510 | 80 | |||
1511 | 81 | #define and add the context menu | ||
1512 | 82 | self.MediaListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) | ||
1513 | 83 | |||
1514 | 84 | self.MediaListView.addAction(self.contextMenuAction( | ||
1515 | 85 | self.MediaListView, ':/system/system_preview.png', | ||
1516 | 86 | translate(u'MediaMediaItem',u'&Preview Media'), self.onMediaPreviewClick)) | ||
1517 | 87 | self.MediaListView.addAction(self.contextMenuAction( | ||
1518 | 88 | self.MediaListView, ':/system/system_live.png', | ||
1519 | 89 | translate(u'MediaMediaItem',u'&Show Live'), self.onMediaLiveClick)) | ||
1520 | 90 | self.MediaListView.addAction(self.contextMenuAction( | ||
1521 | 91 | self.MediaListView, ':/system/system_add.png', | ||
1522 | 92 | translate(u'MediaMediaItem',u'&Add to Service'), self.onMediaAddClick)) | ||
1523 | 93 | |||
1524 | 94 | def initialise(self): | ||
1525 | 95 | list = self.parent.config.load_list(u'Media') | ||
1526 | 96 | self.loadMediaList(list) | ||
1527 | 97 | |||
1528 | 98 | def onMediaNewClick(self): | ||
1529 | 99 | files = QtGui.QFileDialog.getOpenFileNames(None, | ||
1530 | 100 | translate(u'MediaMediaItem', u'Select Media(s) items'), | ||
1531 | 101 | self.parent.config.get_last_dir(), | ||
1532 | 102 | u'Videos (*.avi *.mpeg);;Audio (*.mp3 *.ogg *.wma);;All files (*)') | ||
1533 | 103 | if len(files) > 0: | ||
1534 | 104 | self.loadMediaList(files) | ||
1535 | 105 | dir, filename = os.path.split(unicode(files[0])) | ||
1536 | 106 | self.parent.config.set_last_dir(dir) | ||
1537 | 107 | self.parent.config.set_list(u'media', self.MediaListData.getFileList()) | ||
1538 | 108 | |||
1539 | 109 | def getFileList(self): | ||
1540 | 110 | filelist = [item[0] for item in self.MediaListView]; | ||
1541 | 111 | return filelist | ||
1542 | 112 | |||
1543 | 113 | def loadMediaList(self, list): | ||
1544 | 114 | for files in list: | ||
1545 | 115 | self.MediaListData.addRow(files) | ||
1546 | 116 | |||
1547 | 117 | def onMediaDeleteClick(self): | ||
1548 | 118 | indexes = self.MediaListView.selectedIndexes() | ||
1586 | 119 | for index in indexes: | 105 | for index in indexes: |
1590 | 120 | current_row = int(index.row()) | 106 | filename = self.ListData.getFilename(index) |
1591 | 121 | self.MediaListData.removeRow(current_row) | 107 | frame = QtGui.QImage(unicode(filename)) |
1592 | 122 | self.parent.config.set_list(u'media', self.MediaListData.getFileList()) | 108 | (path, name) = os.path.split(filename) |
1593 | 109 | service_item.add_from_image(path, name, frame) | ||
1594 | 123 | 110 | ||
1596 | 124 | def onMediaPreviewClick(self): | 111 | def onPreviewClick(self): |
1597 | 125 | log.debug(u'Media Preview Button pressed') | 112 | log.debug(u'Media Preview Button pressed') |
1599 | 126 | items = self.MediaListView.selectedIndexes() | 113 | items = self.ListView.selectedIndexes() |
1600 | 127 | for item in items: | 114 | for item in items: |
1602 | 128 | text = self.MediaListData.getValue(item) | 115 | text = self.ListData.getValue(item) |
1603 | 129 | print text | 116 | print text |
1604 | 130 | 117 | ||
1605 | 131 | def onMediaLiveClick(self): | 118 | def onMediaLiveClick(self): |
1606 | 119 | log.debug(u'Media Live Button pressed') | ||
1607 | 132 | pass | 120 | pass |
1608 | 133 | 121 | ||
1609 | 134 | def onMediaAddClick(self): | ||
1610 | 135 | pass | ||
1611 | 136 | \ No newline at end of file | 122 | \ No newline at end of file |
1612 | 123 | def initialise(self): | ||
1613 | 124 | self.ListView.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) | ||
1614 | 125 | self.ListView.setIconSize(QtCore.QSize(88,50)) | ||
1615 | 126 | self.loadList(self.parent.config.load_list(self.ConfigSection)) | ||
1616 | 127 | |||
1617 | 128 | def onDeleteClick(self): | ||
1618 | 129 | item = self.ListView.currentItem() | ||
1619 | 130 | if item is not None: | ||
1620 | 131 | item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] | ||
1621 | 132 | row = self.ListView.row(item) | ||
1622 | 133 | self.ListView.takeItem(row) | ||
1623 | 134 | self.parent.config.set_list(self.ConfigSection, self.ListData.getFileList()) | ||
1624 | 135 | |||
1625 | 136 | def loadList(self, list): | ||
1626 | 137 | for file in list: | ||
1627 | 138 | (path, filename) = os.path.split(unicode(file)) | ||
1628 | 139 | item_name = QtGui.QListWidgetItem(filename) | ||
1629 | 140 | img = self.video_get_preview(file) | ||
1630 | 141 | #item_name.setIcon(buildIcon(file)) | ||
1631 | 142 | item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(file)) | ||
1632 | 143 | self.ListView.addItem(item_name) | ||
1633 | 144 | |||
1634 | 145 | # def onMediaAddClick(self): | ||
1635 | 146 | # log.debug(u'Media Add Button pressed') | ||
1636 | 147 | # pass | ||
1637 | 137 | 148 | ||
1638 | === modified file 'openlp/plugins/media/mediaplugin.py' | |||
1639 | --- openlp/plugins/media/mediaplugin.py 2009-06-26 17:51:43 +0000 | |||
1640 | +++ openlp/plugins/media/mediaplugin.py 2009-07-04 05:52:30 +0000 | |||
1641 | @@ -22,7 +22,6 @@ | |||
1642 | 22 | 22 | ||
1643 | 23 | from openlp.core.lib import Plugin, MediaManagerItem, SettingsTab | 23 | from openlp.core.lib import Plugin, MediaManagerItem, SettingsTab |
1644 | 24 | from openlp.plugins.media.lib import MediaTab,MediaMediaItem | 24 | from openlp.plugins.media.lib import MediaTab,MediaMediaItem |
1645 | 25 | |||
1646 | 26 | class MediaPlugin(Plugin): | 25 | class MediaPlugin(Plugin): |
1647 | 27 | 26 | ||
1648 | 28 | def __init__(self, plugin_helpers): | 27 | def __init__(self, plugin_helpers): |
1649 | 29 | 28 | ||
1650 | === removed file 'openlp/plugins/media/video_render.py' | |||
1651 | --- openlp/plugins/media/video_render.py 2009-06-22 20:44:35 +0000 | |||
1652 | +++ openlp/plugins/media/video_render.py 1970-01-01 00:00:00 +0000 | |||
1653 | @@ -1,70 +0,0 @@ | |||
1654 | 1 | # -*- coding: utf-8 -*- | ||
1655 | 2 | # vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 | ||
1656 | 3 | """ | ||
1657 | 4 | OpenLP - Open Source Lyrics Projection | ||
1658 | 5 | Copyright (c) 2008 Raoul Snyman | ||
1659 | 6 | Portions copyright (c) 2008 Martin Thompson, Tim Bentley, | ||
1660 | 7 | |||
1661 | 8 | This program is free software; you can redistribute it and/or modify it under | ||
1662 | 9 | the terms of the GNU General Public License as published by the Free Software | ||
1663 | 10 | Foundation; version 2 of the License. | ||
1664 | 11 | |||
1665 | 12 | This program is distributed in the hope that it will be useful, but WITHOUT ANY | ||
1666 | 13 | WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A | ||
1667 | 14 | PARTICULAR PURPOSE. See the GNU General Public License for more details. | ||
1668 | 15 | |||
1669 | 16 | You should have received a copy of the GNU General Public License along with | ||
1670 | 17 | this program; if not, write to the Free Software Foundation, Inc., 59 Temple | ||
1671 | 18 | Place, Suite 330, Boston, MA 02111-1307 USA | ||
1672 | 19 | """ | ||
1673 | 20 | import os | ||
1674 | 21 | from PyQt4 import QtCore, QtGui | ||
1675 | 22 | |||
1676 | 23 | # xxx this needs a try, except once we've decided what to do if it fails | ||
1677 | 24 | from PyQt4.phonon import Phonon | ||
1678 | 25 | |||
1679 | 26 | # from openlp.core.lib import Plugin, MediaManagerItem, SettingsTab | ||
1680 | 27 | # from openlp.plugins.media.lib import MediaTab,MediaMediaItem | ||
1681 | 28 | |||
1682 | 29 | """Renders a video to some surface or other """ | ||
1683 | 30 | |||
1684 | 31 | class w(QtGui.QMainWindow): | ||
1685 | 32 | def __init__(self, parent=None): | ||
1686 | 33 | super(QtGui.QMainWindow, self).__init__(parent) | ||
1687 | 34 | self.resize(640,480) | ||
1688 | 35 | self.setWindowTitle(u'simple media player') | ||
1689 | 36 | self.show() | ||
1690 | 37 | |||
1691 | 38 | if __name__==u'__main__': | ||
1692 | 39 | app = QtGui.QApplication([]) | ||
1693 | 40 | # widget = QtGui.QWidget() | ||
1694 | 41 | # widget.resize(320, 240) | ||
1695 | 42 | # widget.setWindowTitle(u'simple') | ||
1696 | 43 | # widget.show() | ||
1697 | 44 | # QCore.QCoreApplication.setApplicationName(u'OpenLP') | ||
1698 | 45 | mainwindow=w() | ||
1699 | 46 | widget=QtGui.QWidget(mainwindow) | ||
1700 | 47 | mainwindow.setCentralWidget(widget) | ||
1701 | 48 | widget.setLayout(QtGui.QVBoxLayout(widget)) | ||
1702 | 49 | # videofile=u'r-128.rm' | ||
1703 | 50 | videofile=u'/extra_space/Download/coa360download56Kbps240x160.mpg' | ||
1704 | 51 | source=Phonon.MediaSource(videofile) | ||
1705 | 52 | |||
1706 | 53 | media=Phonon.MediaObject(widget) | ||
1707 | 54 | media.setCurrentSource(source) | ||
1708 | 55 | |||
1709 | 56 | video=Phonon.VideoWidget(widget) | ||
1710 | 57 | audio=Phonon.AudioOutput(Phonon.MusicCategory) | ||
1711 | 58 | # controller=Phonon.MediaController(media) | ||
1712 | 59 | Phonon.createPath(media, video); | ||
1713 | 60 | Phonon.createPath(media, audio); | ||
1714 | 61 | # player=Phonon.VideoPlayer(Phonon.VideoCategory, widget) | ||
1715 | 62 | slider=Phonon.SeekSlider(media, mainwindow) | ||
1716 | 63 | widget.layout().addWidget(slider) | ||
1717 | 64 | widget.layout().addWidget(video) | ||
1718 | 65 | slider.show() | ||
1719 | 66 | |||
1720 | 67 | video.show() | ||
1721 | 68 | media.play() | ||
1722 | 69 | app.exec_() | ||
1723 | 70 | |||
1724 | 71 | 0 | ||
1725 | === modified file 'openlp/plugins/presentations/lib/impresscom.py' | |||
1726 | --- openlp/plugins/presentations/lib/impresscom.py 2009-06-26 19:06:28 +0000 | |||
1727 | +++ openlp/plugins/presentations/lib/impresscom.py 2009-07-02 19:04:50 +0000 | |||
1728 | @@ -57,7 +57,7 @@ | |||
1729 | 57 | self.createApp() | 57 | self.createApp() |
1730 | 58 | 58 | ||
1731 | 59 | def startOpenoffice(self): | 59 | def startOpenoffice(self): |
1733 | 60 | cmd = u'openoffice.org -nologo -norestore -minimized -impress' + u'"' + u'-accept=socket,host=localhost,port=2002;urp;'+ u'"' | 60 | cmd = u'openoffice.org -nologo -norestore -invisible -minimized -impress' + u'"' + u'-accept=socket,host=localhost,port=2002;urp;'+ u'"' |
1734 | 61 | retval = subprocess.Popen(cmd, shell=True) | 61 | retval = subprocess.Popen(cmd, shell=True) |
1735 | 62 | self.oopid = retval.pid | 62 | self.oopid = retval.pid |
1736 | 63 | 63 | ||
1737 | 64 | 64 | ||
1738 | === modified file 'openlp/plugins/songs/lib/mediaitem.py' | |||
1739 | --- openlp/plugins/songs/lib/mediaitem.py 2009-06-27 19:55:55 +0000 | |||
1740 | +++ openlp/plugins/songs/lib/mediaitem.py 2009-07-04 05:52:30 +0000 | |||
1741 | @@ -20,7 +20,7 @@ | |||
1742 | 20 | import logging | 20 | import logging |
1743 | 21 | 21 | ||
1744 | 22 | from PyQt4 import QtCore, QtGui | 22 | from PyQt4 import QtCore, QtGui |
1746 | 23 | from openlp.core.lib import MediaManagerItem, translate, ServiceItem, SongXMLParser | 23 | from openlp.core.lib import MediaManagerItem, translate, ServiceItem, SongXMLParser , contextMenuAction, contextMenuSeparator |
1747 | 24 | 24 | ||
1748 | 25 | from openlp.plugins.songs.forms import EditSongForm | 25 | from openlp.plugins.songs.forms import EditSongForm |
1749 | 26 | 26 | ||
1750 | @@ -138,17 +138,17 @@ | |||
1751 | 138 | QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onSongPreviewClick) | 138 | QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onSongPreviewClick) |
1752 | 139 | #define and add the context menu | 139 | #define and add the context menu |
1753 | 140 | self.ListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) | 140 | self.ListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) |
1755 | 141 | self.ListView.addAction(self.contextMenuAction(self.ListView, | 141 | self.ListView.addAction(contextMenuAction(self.ListView, |
1756 | 142 | ':/songs/song_new.png', translate(u'SongMediaItem', u'&Edit Song'), | 142 | ':/songs/song_new.png', translate(u'SongMediaItem', u'&Edit Song'), |
1757 | 143 | self.onSongEditClick)) | 143 | self.onSongEditClick)) |
1760 | 144 | self.ListView.addAction(self.contextMenuSeparator(self.ListView)) | 144 | self.ListView.addAction(contextMenuSeparator(self.ListView)) |
1761 | 145 | self.ListView.addAction(self.contextMenuAction(self.ListView, | 145 | self.ListView.addAction(contextMenuAction(self.ListView, |
1762 | 146 | ':/system/system_preview.png', translate(u'SongMediaItem', u'&Preview Song'), | 146 | ':/system/system_preview.png', translate(u'SongMediaItem', u'&Preview Song'), |
1763 | 147 | self.onSongPreviewClick)) | 147 | self.onSongPreviewClick)) |
1765 | 148 | self.ListView.addAction(self.contextMenuAction(self.ListView, | 148 | self.ListView.addAction(contextMenuAction(self.ListView, |
1766 | 149 | ':/system/system_live.png', translate(u'SongMediaItem', u'&Show Live'), | 149 | ':/system/system_live.png', translate(u'SongMediaItem', u'&Show Live'), |
1767 | 150 | self.onSongLiveClick)) | 150 | self.onSongLiveClick)) |
1769 | 151 | self.ListView.addAction(self.contextMenuAction(self.ListView, | 151 | self.ListView.addAction(contextMenuAction(self.ListView, |
1770 | 152 | ':/system/system_add.png', translate(u'SongMediaItem', u'&Add to Service'), | 152 | ':/system/system_add.png', translate(u'SongMediaItem', u'&Add to Service'), |
1771 | 153 | self.onSongAddClick)) | 153 | self.onSongAddClick)) |
1772 | 154 | 154 | ||
1773 | 155 | 155 | ||
1774 | === renamed file 'resources/images/media_verse.png' => 'resources/images/media_bible.png' | |||
1775 | === added file 'resources/images/media_stop.png' | |||
1776 | 156 | Binary files resources/images/media_stop.png 1970-01-01 00:00:00 +0000 and resources/images/media_stop.png 2009-07-03 19:08:21 +0000 differ | 156 | Binary files resources/images/media_stop.png 1970-01-01 00:00:00 +0000 and resources/images/media_stop.png 2009-07-03 19:08:21 +0000 differ |
1777 | === added file 'resources/images/media_time.png' | |||
1778 | 157 | Binary files resources/images/media_time.png 1970-01-01 00:00:00 +0000 and resources/images/media_time.png 2009-07-03 19:08:21 +0000 differ | 157 | Binary files resources/images/media_time.png 1970-01-01 00:00:00 +0000 and resources/images/media_time.png 2009-07-03 19:08:21 +0000 differ |
1779 | === modified file 'resources/images/openlp-2.qrc' | |||
1780 | --- resources/images/openlp-2.qrc 2009-05-03 15:35:34 +0000 | |||
1781 | +++ resources/images/openlp-2.qrc 2009-07-03 19:08:21 +0000 | |||
1782 | @@ -86,8 +86,10 @@ | |||
1783 | 86 | <file>media_presentation.png</file> | 86 | <file>media_presentation.png</file> |
1784 | 87 | <file>media_image.png</file> | 87 | <file>media_image.png</file> |
1785 | 88 | <file>media_song.png</file> | 88 | <file>media_song.png</file> |
1787 | 89 | <file>media_verse.png</file> | 89 | <file>media_bible.png</file> |
1788 | 90 | <file>media_video.png</file> | 90 | <file>media_video.png</file> |
1789 | 91 | <file>media_time.png</file> | ||
1790 | 92 | <file>media_stop.png</file> | ||
1791 | 91 | </qresource> | 93 | </qresource> |
1792 | 92 | <qresource prefix="messagebox" > | 94 | <qresource prefix="messagebox" > |
1793 | 93 | <file>messagebox_critical.png</file> | 95 | <file>messagebox_critical.png</file> |
It's big. eview.
Includes Martins changes - followed by changes to get things working
Highlights of this merge.
- New SlideController with plugable toolbars
- New Live toolbar for Images with working timer loop.
- Martin's changes to MediamanagerItem
- Removal of the need to use listitemswithpr
- Removal of duplicate methods.
Various other bug fixes.
Test run all plugins and add display situations.
Tested no gsm installed! Hummmm.