forked from openlp/openlp
Make it possible for presentations to wrap or go to next item, like native openlp-items. Fixes bug 1165855.
Fixes: https://launchpad.net/bugs/1165855
This commit is contained in:
parent
c3e27b44f0
commit
cb3ef2f7c8
@ -135,7 +135,7 @@ class Registry(object):
|
||||
for function in self.functions_list[event]:
|
||||
try:
|
||||
result = function(*args, **kwargs)
|
||||
if result:
|
||||
if result is not None:
|
||||
results.append(result)
|
||||
except TypeError:
|
||||
# Who has called me can help in debugging
|
||||
|
@ -1170,8 +1170,17 @@ class SlideController(DisplayController, RegistryProperties):
|
||||
if not self.service_item:
|
||||
return
|
||||
if self.service_item.is_command():
|
||||
Registry().execute('%s_next' % self.service_item.name.lower(), [self.service_item, self.is_live])
|
||||
if self.is_live:
|
||||
past_end = Registry().execute('%s_next' % self.service_item.name.lower(), [self.service_item, self.is_live])
|
||||
# Check if we have gone past the end of the last slide
|
||||
if self.is_live and past_end and past_end[0]:
|
||||
if wrap is None:
|
||||
if self.slide_limits == SlideLimits.Wrap:
|
||||
self.on_slide_selected_index([0])
|
||||
elif self.is_live and self.slide_limits == SlideLimits.Next:
|
||||
self.service_next()
|
||||
elif wrap:
|
||||
self.on_slide_selected_index([0])
|
||||
else:
|
||||
self.update_preview()
|
||||
else:
|
||||
row = self.preview_widget.current_slide_number() + 1
|
||||
|
@ -416,11 +416,14 @@ class ImpressDocument(PresentationDocument):
|
||||
"""
|
||||
Triggers the next effect of slide on the running presentation.
|
||||
"""
|
||||
past_end = False
|
||||
is_paused = self.control.isPaused()
|
||||
self.control.gotoNextEffect()
|
||||
time.sleep(0.1)
|
||||
if not is_paused and self.control.isPaused():
|
||||
self.control.gotoPreviousEffect()
|
||||
past_end = True
|
||||
return past_end
|
||||
|
||||
def previous_step(self):
|
||||
"""
|
||||
|
@ -168,24 +168,25 @@ class Controller(object):
|
||||
"""
|
||||
log.debug('Live = %s, next' % self.is_live)
|
||||
if not self.doc:
|
||||
return
|
||||
return False
|
||||
if not self.is_live:
|
||||
return
|
||||
return False
|
||||
if self.hide_mode:
|
||||
if not self.doc.is_active():
|
||||
return
|
||||
return False
|
||||
if self.doc.slidenumber < self.doc.get_slide_count():
|
||||
self.doc.slidenumber += 1
|
||||
self.poll()
|
||||
return
|
||||
return False
|
||||
if not self.activate():
|
||||
return
|
||||
return False
|
||||
# The "End of slideshow" screen is after the last slide. Note, we can't just stop on the last slide, since it
|
||||
# may contain animations that need to be stepped through.
|
||||
if self.doc.slidenumber > self.doc.get_slide_count():
|
||||
return
|
||||
self.doc.next_step()
|
||||
return True
|
||||
ret = self.doc.next_step()
|
||||
self.poll()
|
||||
return ret
|
||||
|
||||
def previous(self):
|
||||
"""
|
||||
@ -418,9 +419,9 @@ class MessageListener(object):
|
||||
"""
|
||||
is_live = message[1]
|
||||
if is_live:
|
||||
self.live_handler.next()
|
||||
return self.live_handler.next()
|
||||
else:
|
||||
self.preview_handler.next()
|
||||
return self.preview_handler.next()
|
||||
|
||||
def previous(self, message):
|
||||
"""
|
||||
|
@ -433,6 +433,7 @@ class PowerpointDocument(PresentationDocument):
|
||||
Triggers the next effect of slide on the running presentation.
|
||||
"""
|
||||
log.debug('next_step')
|
||||
past_end = False
|
||||
try:
|
||||
self.presentation.SlideShowWindow.Activate()
|
||||
self.presentation.SlideShowWindow.View.Next()
|
||||
@ -441,16 +442,18 @@ class PowerpointDocument(PresentationDocument):
|
||||
log.exception(e)
|
||||
trace_error_handler(log)
|
||||
self.show_error_msg()
|
||||
return
|
||||
return past_end
|
||||
if self.get_slide_number() > self.get_slide_count():
|
||||
log.debug('past end, stepping back to previous')
|
||||
self.previous_step()
|
||||
past_end = True
|
||||
# Stop powerpoint from flashing in the taskbar
|
||||
if self.presentation_hwnd:
|
||||
win32gui.FlashWindowEx(self.presentation_hwnd, win32con.FLASHW_STOP, 0, 0)
|
||||
# Make sure powerpoint doesn't steal focus, unless we're on a single screen setup
|
||||
if len(ScreenList().screen_list) > 1:
|
||||
Registry().get('main_window').activateWindow()
|
||||
return past_end
|
||||
|
||||
def previous_step(self):
|
||||
"""
|
||||
|
@ -302,7 +302,10 @@ class PptviewDocument(PresentationDocument):
|
||||
"""
|
||||
Triggers the next effect of slide on the running presentation.
|
||||
"""
|
||||
self.controller.process.NextStep(self.ppt_id)
|
||||
if self.controller.process.NextStep(self.ppt_id) == 0:
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
def previous_step(self):
|
||||
"""
|
||||
|
@ -518,16 +518,18 @@ DllExport int GetCurrentSlide(int id)
|
||||
}
|
||||
|
||||
// Take a step forwards through the show
|
||||
DllExport void NextStep(int id)
|
||||
DllExport int NextStep(int id)
|
||||
{
|
||||
DEBUG(L"NextStep:%d (%d)\n", id, pptView[id].currentSlide);
|
||||
if (pptView[id].currentSlide > pptView[id].slideCount) return;
|
||||
// Return 1 to signal that the slideshow has gone past the end
|
||||
if (pptView[id].currentSlide > pptView[id].slideCount) return 1;
|
||||
if (pptView[id].currentSlide < pptView[id].slideCount)
|
||||
{
|
||||
pptView[id].guess = pptView[id].currentSlide + 1;
|
||||
}
|
||||
PostMessage(pptView[id].hWnd2, WM_MOUSEWHEEL, MAKEWPARAM(0, -WHEEL_DELTA),
|
||||
0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Take a step backwards through the show
|
||||
|
@ -30,7 +30,7 @@ DllExport BOOL CheckInstalled();
|
||||
DllExport void ClosePPT(int id);
|
||||
DllExport int GetCurrentSlide(int id);
|
||||
DllExport int GetSlideCount(int id);
|
||||
DllExport void NextStep(int id);
|
||||
DllExport int NextStep(int id);
|
||||
DllExport void PrevStep(int id);
|
||||
DllExport void GotoSlide(int id, int slide_no);
|
||||
DllExport void RestartShow(int id);
|
||||
|
@ -232,7 +232,7 @@ class PresentationDocument(object):
|
||||
Triggers the next effect of slide on the running presentation. This might be the next animation on the current
|
||||
slide, or the next slide
|
||||
"""
|
||||
pass
|
||||
return False
|
||||
|
||||
def previous_step(self):
|
||||
"""
|
||||
|
Loading…
Reference in New Issue
Block a user