Merge lp:~j-corwin/openlp/present into lp:openlp

Proposed by Jonathan Corwin
Status: Merged
Merged at revision: not available
Proposed branch: lp:~j-corwin/openlp/present
Merge into: lp:openlp
Diff against target: 315 lines
5 files modified
openlp/plugins/presentations/lib/impresscontroller.py (+10/-6)
openlp/plugins/presentations/lib/messagelistener.py (+30/-30)
openlp/plugins/presentations/lib/powerpointcontroller.py (+47/-15)
openlp/plugins/presentations/lib/pptviewcontroller.py (+6/-2)
openlp/plugins/presentations/lib/presentationcontroller.py (+1/-0)
To merge this branch: bzr merge lp:~j-corwin/openlp/present
Reviewer Review Type Date Requested Status
Raoul Snyman Approve
Tim Bentley Approve
Review via email: mp+13190@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Jonathan Corwin (j-corwin) wrote :

Attempt to handle silly user errors, like shutting down powerpoint or the viewer halfway through a presentation.
(Impress still to do.)

Revision history for this message
Tim Bentley (trb143) wrote :

Looks Good

review: Approve
Revision history for this message
Raoul Snyman (raoul-snyman) :
review: Approve
lp:~j-corwin/openlp/present updated
596. By Jonathan Corwin

More Presentation fixes

597. By Tim Bentley

Various changes and fixes

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'openlp/plugins/presentations/lib/impresscontroller.py'
2--- openlp/plugins/presentations/lib/impresscontroller.py 2009-10-08 23:24:26 +0000
3+++ openlp/plugins/presentations/lib/impresscontroller.py 2009-10-11 21:40:24 +0000
4@@ -79,7 +79,11 @@
5 when required.
6 """
7 log.debug(u'start Openoffice')
8- if os.name != u'nt':
9+ if os.name == u'nt':
10+ self.manager = self.get_com_servicemanager()
11+ self.manager._FlagAsMethod(u'Bridge_GetStruct')
12+ self.manager._FlagAsMethod(u'Bridge_GetValueObject')
13+ else:
14 # -headless
15 cmd = u'openoffice.org -nologo -norestore -minimized -invisible ' + u'"' + u'-accept=socket,host=localhost,port=2002;urp;'+ u'"'
16 self.process = QtCore.QProcess()
17@@ -108,6 +112,9 @@
18 self.store_filename(presentation)
19 if os.name == u'nt':
20 desktop = self.get_com_desktop()
21+ if desktop is None:
22+ self.start_process()
23+ desktop = self.get_com_desktop()
24 url = u'file:///' + presentation.replace(u'\\', u'/').replace(u':', u'|').replace(u' ', u'%20')
25 else:
26 desktop = self.get_uno_desktop()
27@@ -169,7 +176,7 @@
28 try:
29 ctx = resolver.resolve(u'uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext')
30 except:
31- self.startOpenoffice()
32+ self.start_process()
33 loop += 1
34 try:
35 self.manager = ctx.ServiceManager
36@@ -183,14 +190,11 @@
37 def get_com_desktop(self):
38 log.debug(u'getCOMDesktop')
39 try:
40- self.manager = self.get_com_servicemanager()
41- self.manager._FlagAsMethod(u'Bridge_GetStruct')
42- self.manager._FlagAsMethod(u'Bridge_GetValueObject')
43 desktop = self.manager.createInstance(u'com.sun.star.frame.Desktop')
44 return desktop
45 except:
46 log.exception(u'Failed to get COM desktop')
47- return None
48+ return None
49
50 def get_com_servicemanager(self):
51 log.debug(u'get_com_servicemanager')
52
53=== modified file 'openlp/plugins/presentations/lib/messagelistener.py'
54--- openlp/plugins/presentations/lib/messagelistener.py 2009-10-03 19:18:59 +0000
55+++ openlp/plugins/presentations/lib/messagelistener.py 2009-10-11 21:40:24 +0000
56@@ -64,74 +64,74 @@
57 self.handler, file = self.decodeMessage(message)
58 self.controller = self.controllers[self.handler]
59 if self.controller.is_loaded():
60- self.shutdown()
61+ self.shutdown(None)
62 self.controller.load_presentation(file)
63+ self.controller.slidenumber = 0
64
65+ def activate(self):
66+ if self.controller.is_active():
67+ return
68+ if not self.controller.is_loaded():
69+ self.controller.load_presentation(self.controller.filepath)
70+ else:
71+ self.controller.start_presentation()
72+ if self.controller.slidenumber > 1:
73+ self.controller.goto_slide(self.controller.slidenumber)
74+
75 def slide(self, message):
76- #if not self.controller.is_loaded():
77- # return
78- #if not self.controller.is_active():
79- # self.controller.start_presentation()
80- self.controller.goto_slide(message[0])
81+ self.activate()
82+ if message is not None:
83+ self.controller.goto_slide(message[0])
84+ self.controller.slidenumber = self.controller.get_slide_number()
85
86 def first(self, message):
87 """
88 Based on the handler passed at startup triggers the first slide
89 """
90- #if not self.controller.is_loaded():
91- # return
92+ self.activate()
93 self.controller.start_presentation()
94+ self.controller.slidenumber = self.controller.get_slide_number()
95
96 def last(self, message):
97 """
98 Based on the handler passed at startup triggers the first slide
99 """
100- #if not self.controller.is_loaded():
101- # return
102- #if not self.controller.is_active():
103- # self.controller.start_presentation()
104+ self.activate()
105 self.controller.goto_slide(self.controller.get_slide_count())
106+ self.controller.slidenumber = self.controller.get_slide_number()
107
108 def next(self, message):
109 """
110 Based on the handler passed at startup triggers the next slide event
111 """
112- #if not self.controller.is_loaded():
113- # return
114- #if not self.controller.is_active():
115- # self.controller.start_presentation()
116- # self.controller.goto_slide(self.controller.current_slide)
117+ self.activate()
118 self.controller.next_step()
119+ self.controller.slidenumber = self.controller.get_slide_number()
120
121 def previous(self, message):
122 """
123 Based on the handler passed at startup triggers the previous slide event
124 """
125- #if not self.controller.is_loaded():
126- # return
127- #if not self.controller.is_active():
128- # self.controller.start_presentation()
129- # self.controller.goto_slide(self.controller.current_slide)
130+ self.activate()
131 self.controller.previous_step()
132+ self.controller.slidenumber = self.controller.get_slide_number()
133
134 def shutdown(self, message):
135 """
136 Based on the handler passed at startup triggers slide show to shut down
137 """
138 self.controller.close_presentation()
139+ self.controller.slidenumber = 0
140
141 def blank(self):
142- #if not self.controller.is_loaded():
143- # return
144- #if not self.controller.is_active():
145- # self.controller.start_presentation()
146+ if not self.controller.is_loaded():
147+ return
148+ if not self.controller.is_active():
149+ return
150 self.controller.blank_screen()
151
152 def unblank(self):
153- #if not self.controller.is_loaded():
154- # return
155- #if not self.controller.is_active():
156- # self.controller.start_presentation()
157+ self.activate()
158 self.controller.unblank_screen()
159
160 def decodeMessage(self, message):
161
162=== modified file 'openlp/plugins/presentations/lib/powerpointcontroller.py'
163--- openlp/plugins/presentations/lib/powerpointcontroller.py 2009-10-08 23:24:26 +0000
164+++ openlp/plugins/presentations/lib/powerpointcontroller.py 2009-10-11 21:40:24 +0000
165@@ -80,16 +80,27 @@
166 """
167 Returns true if a presentation is loaded
168 """
169- if self.process is None:
170- return False
171- if self.process.Windows.Count == 0:
172- return False
173+ try:
174+ if not self.process.Visible:
175+ return False
176+ if self.process.Windows.Count == 0:
177+ return False
178+ if self.process.Presentations.Count == 0:
179+ return False
180+ except:
181+ return False
182+ return True
183
184 def kill(self):
185 """
186 Called at system exit to clean up any running presentations
187- """
188- self.process.Quit()
189+ """
190+ if self.process is None:
191+ return
192+ try:
193+ self.process.Quit()
194+ except:
195+ pass
196 self.process = None
197
198 def load_presentation(self, presentation):
199@@ -105,7 +116,15 @@
200 """
201 log.debug(u'LoadPresentation')
202 self.store_filename(presentation)
203- self.process.Presentations.Open(presentation, False, False, True)
204+ try:
205+ if not self.process.Visible:
206+ self.start_process()
207+ except:
208+ self.start_process()
209+ try:
210+ self.process.Presentations.Open(presentation, False, False, True)
211+ except:
212+ return
213 self.presentation = self.process.Presentations(self.process.Presentations.Count)
214 self.create_thumbnails()
215 self.start_presentation()
216@@ -124,15 +143,18 @@
217 self.presentation.Export(os.path.join(self.thumbnailpath, '')
218 , 'png', 600, 480)
219
220-
221-
222 def close_presentation(self):
223 """
224 Close presentation and clean up objects
225 Triggerent by new object being added to SlideController orOpenLP
226 being shut down
227 """
228- self.presentation.Close()
229+ if self.presentation == None:
230+ return
231+ try:
232+ self.presentation.Close()
233+ except:
234+ pass
235 self.presentation = None
236
237 def is_active(self):
238@@ -141,9 +163,12 @@
239 """
240 if not self.is_loaded():
241 return False
242- if self.presentation.SlideShowWindow == None:
243- return False
244- if self.presentation.SlideShowWindow.View == None:
245+ try:
246+ if self.presentation.SlideShowWindow == None:
247+ return False
248+ if self.presentation.SlideShowWindow.View == None:
249+ return False
250+ except:
251 return False
252 return True
253
254@@ -171,12 +196,18 @@
255 """
256 Starts a presentation from the beginning
257 """
258+ #SlideShowWindow measures its size/position by points, not pixels
259+ try:
260+ dpi = win32ui.GetActiveWindow().GetDC().GetDeviceCaps(88)
261+ except:
262+ try:
263+ dpi = win32ui.GetForegroundWindow().GetDC().GetDeviceCaps(88)
264+ except:
265+ dpi = 96
266 self.presentation.SlideShowSettings.Run()
267 self.presentation.SlideShowWindow.View.GotoSlide(1)
268 rendermanager = self.plugin.render_manager
269 rect = rendermanager.screen_list[rendermanager.current_display][u'size']
270- #SlideShowWindow measures its size/position by points, not pixels
271- dpi = win32ui.GetActiveWindow().GetDC().GetDeviceCaps(88)
272 self.presentation.SlideShowWindow.Top = rect.y() * 72 / dpi
273 self.presentation.SlideShowWindow.Height = rect.height() * 72 / dpi
274 self.presentation.SlideShowWindow.Left = rect.x() * 72 / dpi
275@@ -221,3 +252,4 @@
276 """
277 return os.path.join(self.thumbnailpath,
278 self.thumbnailprefix + unicode(slide_no) + u'.png')
279+\
280
281=== modified file 'openlp/plugins/presentations/lib/pptviewcontroller.py'
282--- openlp/plugins/presentations/lib/pptviewcontroller.py 2009-10-08 23:24:26 +0000
283+++ openlp/plugins/presentations/lib/pptviewcontroller.py 2009-10-11 21:40:24 +0000
284@@ -128,13 +128,17 @@
285 """
286 Returns true if a presentation is loaded
287 """
288- return self.pptid >= 0
289+ if self.pptid < 0:
290+ return False
291+ if self.get_slide_count() < 0:
292+ return False
293+ return True
294
295 def is_active(self):
296 """
297 Returns true if a presentation is currently active
298 """
299- return self.pptid >= 0
300+ return self.is_loaded()
301
302 def blank_screen(self):
303 """
304
305=== modified file 'openlp/plugins/presentations/lib/presentationcontroller.py'
306--- openlp/plugins/presentations/lib/presentationcontroller.py 2009-10-08 23:24:26 +0000
307+++ openlp/plugins/presentations/lib/presentationcontroller.py 2009-10-11 21:40:24 +0000
308@@ -132,6 +132,7 @@
309 self.plugin = plugin
310 self.name = name
311 self.available = self.check_available()
312+ self.slidenumber = 0
313 if self.available:
314 self.enabled = int(plugin.config.get_config(
315 name, QtCore.Qt.Unchecked)) == QtCore.Qt.Checked