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

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

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

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/135176
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 15:04:40 +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 15:04:40 +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 15:04:40 +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):

_______________________________________________
Mailing list: https://launchpad.net/~openlp-core
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~openlp-core
More help   : https://help.launchpad.net/ListHelp

Reply via email to