← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~marmyshev/openlp/autoplay into lp:openlp

 

Dmitriy Marmyshev has proposed merging lp:~marmyshev/openlp/autoplay into lp:openlp.

Requested reviews:
  Phill (phill-ridout)
  Dmitriy Marmyshev (marmyshev)
  Tim Bentley (trb143)
  Raoul Snyman (raoul-snyman)

For more details, see:
https://code.launchpad.net/~marmyshev/openlp/autoplay/+merge/135169

Added future to save autoplay time interval in service.
Fixed wrong behavior of autoplay bottons when go live with autoplay.
Added visual selection of Next Item in service manager list.

-- 
https://code.launchpad.net/~marmyshev/openlp/autoplay/+merge/135169
Your team OpenLP Core is subscribed to branch lp:openlp.
=== modified file 'openlp/core/lib/serviceitem.py'
--- openlp/core/lib/serviceitem.py	2012-11-11 21:16:14 +0000
+++ openlp/core/lib/serviceitem.py	2012-11-20 14:44:23 +0000
@@ -123,6 +123,9 @@
         self.background_audio = []
         self.theme_overwritten = False
         self.temporary_edit = False
+        self.auto_play_slides_once = False
+        self.auto_play_slides_loop = False
+        self.timed_slide_interval = 0
         self._new_item()
 
     def _new_item(self):
@@ -276,6 +279,9 @@
             u'search': self.search_string,
             u'data': self.data_string,
             u'xml_version': self.xml_version,
+            u'auto_play_slides_once': self.auto_play_slides_once,
+            u'auto_play_slides_loop': self.auto_play_slides_loop,
+            u'timed_slide_interval': self.timed_slide_interval,
             u'start_time': self.start_time,
             u'end_time': self.end_time,
             u'media_length': self.media_length,
@@ -342,6 +348,9 @@
                 filename = os.path.join(path, text_image[u'title'])
                 self.add_from_command(
                     path, text_image[u'title'], text_image[u'image'])
+        self.auto_play_slides_once = header.get(u'auto_play_slides_once', False)
+        self.auto_play_slides_loop = header.get(u'auto_play_slides_loop', False)
+        self.timed_slide_interval = header.get(u'timed_slide_interval', 0)
         self._new_item()
 
     def get_display_title(self):

=== modified file 'openlp/core/ui/servicemanager.py'
--- openlp/core/ui/servicemanager.py	2012-11-11 21:16:14 +0000
+++ openlp/core/ui/servicemanager.py	2012-11-20 14:44:23 +0000
@@ -310,6 +310,25 @@
         # Add already existing delete action to the menu.
         self.menu.addAction(self.serviceManagerList.delete)
         self.menu.addSeparator()
+        # Add AutoPlay menu actions
+        self.auto_play_slides_group = QtGui.QMenu(
+            translate('OpenLP.ServiceManager', '&Auto play slides'))
+        self.menu.addMenu(self.auto_play_slides_group)
+        self.auto_play_slides_loop = create_widget_action(self.auto_play_slides_group,
+            text=translate('OpenLP.ServiceManager', 'Auto play slides &Loop'),
+            checked=False,
+            triggers=self.toggle_auto_play_slides_loop)
+        self.auto_play_slides_once = create_widget_action(self.auto_play_slides_group,
+            text=translate('OpenLP.ServiceManager', 'Auto play slides &Once'),
+            checked=False,
+            triggers=self.toggle_auto_play_slides_once)
+        self.auto_play_slides_group.addSeparator()
+        self.timed_slide_interval = create_widget_action(self.auto_play_slides_group,
+            text=translate('OpenLP.ServiceManager', '&Delay between slides'),
+            checked=False,
+            triggers=self.on_timed_slide_interval)
+
+        self.menu.addSeparator()
         self.previewAction = create_widget_action(self.menu,
             text=translate('OpenLP.ServiceManager', 'Show &Preview'),
             icon=u':/general/general_preview.png', triggers=self.makePreview)
@@ -768,6 +787,29 @@
             self.maintainAction.setVisible(True)
         if item.parent() is None:
             self.notesAction.setVisible(True)
+        if serviceItem[u'service_item'].is_capable(ItemCapabilities.CanLoop) and \
+            len(serviceItem[u'service_item'].get_frames()) > 1:
+            self.auto_play_slides_group.menuAction().setVisible(True)
+            self.auto_play_slides_once\
+                .setChecked(serviceItem[u'service_item'].auto_play_slides_once)
+            self.auto_play_slides_loop\
+                .setChecked(serviceItem[u'service_item'].auto_play_slides_loop)
+            self.timed_slide_interval\
+                .setChecked(serviceItem[u'service_item'].timed_slide_interval > 0)
+            if serviceItem[u'service_item'].timed_slide_interval > 0:
+                delay_suffix = u' '
+                delay_suffix += unicode(serviceItem[u'service_item'].timed_slide_interval)
+                delay_suffix += u' s'
+            else:
+                delay_suffix = u' ...'
+            self.timed_slide_interval.setText(translate('OpenLP.ServiceManager',
+                '&Delay between slides') + delay_suffix)
+            #self.auto_play_slides_group.setChecked(
+            #    serviceItem[u'service_item'].timed_slide_interval > 0 and
+            #    (serviceItem[u'service_item'].auto_play_slides_once or
+            #    serviceItem[u'service_item'].auto_play_slides_loop))
+        else:
+            self.auto_play_slides_group.menuAction().setVisible(False)
         if serviceItem[u'service_item']\
             .is_capable(ItemCapabilities.HasVariableStartTime):
             self.timeAction.setVisible(True)
@@ -805,6 +847,64 @@
         if self.startTimeForm.exec_():
             self.repaintServiceList(item, -1)
 
+    def toggle_auto_play_slides_once(self):
+        """
+        Toggle Auto play slide once.
+        Inverts auto play once option for the item
+        """
+        item = self.findServiceItem()[0]
+        service_item = self.serviceItems[item][u'service_item']
+        service_item.auto_play_slides_once = not service_item.auto_play_slides_once
+        if service_item.auto_play_slides_once:
+            service_item.auto_play_slides_loop = False
+            self.auto_play_slides_loop.setChecked(False)
+        if service_item.auto_play_slides_once and service_item.timed_slide_interval == 0:
+            service_item.timed_slide_interval = Settings().value(u'loop delay',
+                QtCore.QVariant(5)).toInt()[0]
+        self.setModified()
+
+    def toggle_auto_play_slides_loop(self):
+        """
+        Toggle Auto play slide loop.
+        """
+        item = self.findServiceItem()[0]
+        service_item = self.serviceItems[item][u'service_item']
+        service_item.auto_play_slides_loop = not service_item.auto_play_slides_loop
+        if service_item.auto_play_slides_loop:
+            service_item.auto_play_slides_once = False
+            self.auto_play_slides_once.setChecked(False)
+        if service_item.auto_play_slides_loop and service_item.timed_slide_interval == 0:
+            service_item.timed_slide_interval = Settings().value(u'loop delay',
+                QtCore.QVariant(5)).toInt()[0]
+        self.setModified()
+
+    def on_timed_slide_interval(self):
+        """
+        on set times slide interval.
+        Shows input dialog for enter interval in seconds for delay 
+        """
+        item = self.findServiceItem()[0]
+        service_item = self.serviceItems[item][u'service_item']
+        if service_item.timed_slide_interval == 0:
+            timed_slide_interval = Settings().value(u'loop delay',
+           QtCore.QVariant(5)).toInt()[0]
+        else:
+            timed_slide_interval = service_item.timed_slide_interval
+        timed_slide_interval, ok = QtGui.QInputDialog.getInteger(self,
+            translate('OpenLP.ServiceManager', 'Input delay'),
+            translate('OpenLP.ServiceManager',
+            'Delay between slides in seconds.'), timed_slide_interval, 0, 180, 1)
+        if ok:
+            service_item.timed_slide_interval = timed_slide_interval
+        if service_item.timed_slide_interval <> 0\
+            and not service_item.auto_play_slides_loop\
+            and not service_item.auto_play_slides_once:
+            service_item.auto_play_slides_loop = True
+        elif service_item.timed_slide_interval == 0:
+            service_item.auto_play_slides_loop = False
+            service_item.auto_play_slides_once = False
+        self.setModified()
+
     def onServiceItemEditForm(self):
         """
         Opens a dialog to edit the service item and update the service
@@ -1308,6 +1408,8 @@
                     ItemCapabilities.CanPreview):
                     self.mainwindow.previewController.addServiceManagerItem(
                         self.serviceItems[item][u'service_item'], 0)
+                    next_item = self.serviceManagerList.topLevelItem(item)
+                    self.serviceManagerList.setCurrentItem(next_item)
                     self.mainwindow.liveController.previewListWidget.setFocus()
         else:
             critical_error_message_box(

=== modified file 'openlp/core/ui/slidecontroller.py'
--- openlp/core/ui/slidecontroller.py	2012-11-11 21:16:14 +0000
+++ openlp/core/ui/slidecontroller.py	2012-11-20 14:44:23 +0000
@@ -778,6 +778,16 @@
             self.slideSelected()
         else:
             self._processItem(item, slidenum)
+            if self.isLive and item.auto_play_slides_loop\
+                and item.timed_slide_interval > 0:
+                self.playSlidesLoop.setChecked(item.auto_play_slides_loop)
+                self.delaySpinBox.setValue(int(item.timed_slide_interval))
+                self.onPlaySlidesLoop()
+            elif self.isLive and  item.auto_play_slides_once\
+                and item.timed_slide_interval > 0:
+                self.playSlidesOnce.setChecked(item.auto_play_slides_once)
+                self.delaySpinBox.setValue(int(item.timed_slide_interval))
+                self.onPlaySlidesOnce()
 
     def _processItem(self, serviceItem, slideno):
         """
@@ -1255,11 +1265,11 @@
             self.playSlidesLoop.setText(UiStrings().StopPlaySlidesInLoop)
             self.playSlidesOnce.setIcon(build_icon(u':/media/media_time.png'))
             self.playSlidesOnce.setText(UiStrings().PlaySlidesToEnd)
+            self.playSlidesMenu.setDefaultAction(self.playSlidesLoop)
+            self.playSlidesOnce.setChecked(False)
         else:
             self.playSlidesLoop.setIcon(build_icon(u':/media/media_time.png'))
             self.playSlidesLoop.setText(UiStrings().PlaySlidesInLoop)
-        self.playSlidesMenu.setDefaultAction(self.playSlidesLoop)
-        self.playSlidesOnce.setChecked(False)
         self.onToggleLoop()
 
     def onPlaySlidesOnce(self, checked=None):
@@ -1276,11 +1286,11 @@
             self.playSlidesOnce.setText(UiStrings().StopPlaySlidesToEnd)
             self.playSlidesLoop.setIcon(build_icon(u':/media/media_time.png'))
             self.playSlidesLoop.setText(UiStrings().PlaySlidesInLoop)
+            self.playSlidesMenu.setDefaultAction(self.playSlidesOnce)
+            self.playSlidesLoop.setChecked(False)
         else:
             self.playSlidesOnce.setIcon(build_icon(u':/media/media_time'))
             self.playSlidesOnce.setText(UiStrings().PlaySlidesToEnd)
-        self.playSlidesMenu.setDefaultAction(self.playSlidesOnce)
-        self.playSlidesLoop.setChecked(False)
         self.onToggleLoop()
 
     def setAudioItemsVisibility(self, visible):