← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~martin-woodhart/openlp/show-hide-song-footer into lp:openlp

 

Marty Woodhart has proposed merging lp:~martin-woodhart/openlp/show-hide-song-footer into lp:openlp.

Commit message:
Show or hide song footer 

Requested reviews:
  OpenLP Core (openlp-core)

For more details, see:
https://code.launchpad.net/~martin-woodhart/openlp/show-hide-song-footer/+merge/238050

Add ability to specify when the footer text in a song is to be shown. Eg. Show Footer only on First slide and hide it on every other.

New settings added under Songs tab --> Show Footer
-- 
https://code.launchpad.net/~martin-woodhart/openlp/show-hide-song-footer/+merge/238050
Your team OpenLP Core is requested to review the proposed merge of lp:~martin-woodhart/openlp/show-hide-song-footer into lp:openlp.
=== modified file 'openlp/core/common/__init__.py'
--- openlp/core/common/__init__.py	2014-08-27 23:18:06 +0000
+++ openlp/core/common/__init__.py	2014-10-11 11:33:59 +0000
@@ -120,6 +120,16 @@
     Next = 3
 
 
+class SlideFooter(object):
+    """
+    Provides an enumeration for when to show the footer text during the songs
+    """
+    All = 1
+    First = 2
+    Last = 3
+    FirstAndLast = 4
+
+
 def de_hump(name):
     """
     Change any Camel Case string to python string

=== modified file 'openlp/core/ui/maindisplay.py'
--- openlp/core/ui/maindisplay.py	2014-08-27 23:18:06 +0000
+++ openlp/core/ui/maindisplay.py	2014-10-11 11:33:59 +0000
@@ -326,7 +326,7 @@
         # clear the cache
         self.override = {}
 
-    def preview(self):
+    def preview(self, hide_slide):
         """
         Generates a preview of the image displayed.
         """
@@ -337,6 +337,12 @@
             # Wait for the fade to finish before geting the preview.
             # Important otherwise preview will have incorrect text if at all!
             if self.service_item.theme_data and self.service_item.theme_data.display_slide_transition:
+                if hide_slide:
+                    if self.service_item.foot_text:
+                        self.footer("")
+                else:
+                    if self.service_item.foot_text:
+                        self.footer(self.service_item.foot_text)
                 while not self.frame.evaluateJavaScript('show_text_completed()'):
                     self.application.process_events()
         # Wait for the webview to update before getting the preview.

=== modified file 'openlp/core/ui/slidecontroller.py'
--- openlp/core/ui/slidecontroller.py	2014-07-15 18:52:59 +0000
+++ openlp/core/ui/slidecontroller.py	2014-10-11 11:33:59 +0000
@@ -36,7 +36,7 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.common import Registry, RegistryProperties, Settings, SlideLimits, UiStrings, translate, \
+from openlp.core.common import Registry, RegistryProperties, Settings, SlideLimits, UiStrings, translate, SlideFooter, \
     RegistryMixin, OpenLPMixin
 from openlp.core.lib import OpenLPToolbar, ItemCapabilities, ServiceItem, ImageSource, ServiceItemAction, \
     ScreenList, build_icon, build_html
@@ -1069,10 +1069,37 @@
             QtCore.QTimer.singleShot(0.5, self.grab_maindisplay)
             QtCore.QTimer.singleShot(2.5, self.grab_maindisplay)
         else:
-            self.slide_image = self.display.preview()
+            hide_footer = self.check_to_hide_footer((self.preview_widget.current_slide_number() + 1), self.preview_widget.slide_count())
+            self.slide_image = self.display.preview(hide_footer)
             self.slide_preview.setPixmap(self.slide_image)
         self.slide_count += 1
 
+    def check_to_hide_footer(self, current_slide, slide_count):
+        """
+        Determines if the current slide should hide the text in the footer
+        """
+        hide_footer = False
+        slide_footer = Settings().value(self.main_window.songs_settings_section + '/show footer')
+        if current_slide == 1:
+            # If it's on the first slide only hide the footer when the 'Show footer on
+            # last slide' setting is on
+            if slide_footer == SlideFooter.Last:
+                hide_footer = True
+        elif current_slide == slide_count:
+            # If it's on the last slide only hide the footer when the 'Show footer on
+            # first slide' setting is on
+            if slide_footer == SlideFooter.First:
+                hide_footer = True
+        else:
+            # If it's on any of the middle slides only hide the footer if the 'Show footer on all
+            # slides' setting is not on (ie. when setting is either First, Last or First + Last)
+            if (slide_footer != SlideFooter.All) & \
+                    ((slide_footer == SlideFooter.First) |
+                    (slide_footer == SlideFooter.Last) |
+                    (slide_footer == SlideFooter.FirstAndLast)):
+                hide_footer = True
+        return hide_footer
+
     def grab_maindisplay(self):
         """
         Creates an image of the current screen and updates the preview frame.

=== modified file 'openlp/plugins/songs/lib/songstab.py'
--- openlp/plugins/songs/lib/songstab.py	2014-07-09 12:33:26 +0000
+++ openlp/plugins/songs/lib/songstab.py	2014-10-11 11:33:59 +0000
@@ -29,7 +29,7 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.common import Settings, translate
+from openlp.core.common import Settings, translate, SlideFooter
 from openlp.core.lib import SettingsTab
 from openlp.plugins.songs.lib.ui import SongStrings
 
@@ -67,6 +67,24 @@
         self.display_copyright_check_box.setObjectName('copyright_check_box')
         self.mode_layout.addWidget(self.display_copyright_check_box)
         self.left_layout.addWidget(self.mode_group_box)
+        # Footer/copyright
+        self.footer_group_box = QtGui.QGroupBox(self.left_column)
+        self.footer_group_box.setObjectName('footer_group_box')
+        self.footer_layout = QtGui.QVBoxLayout(self.footer_group_box)
+        self.footer_layout.setObjectName('slide_layout')
+        self.all_slides_radio_button = QtGui.QRadioButton(self.footer_group_box)
+        self.all_slides_radio_button.setObjectName('all_slides_radio_button')
+        self.footer_layout.addWidget(self.all_slides_radio_button)
+        self.first_slide_radio_button = QtGui.QRadioButton(self.footer_group_box)
+        self.first_slide_radio_button.setObjectName('first_slide_radio_button')
+        self.footer_layout.addWidget(self.first_slide_radio_button)
+        self.last_slide_radio_button = QtGui.QRadioButton(self.footer_group_box)
+        self.last_slide_radio_button.setObjectName('last_slide_radio_button')
+        self.footer_layout.addWidget(self.last_slide_radio_button)
+        self.first_last_slide_radio_button = QtGui.QRadioButton(self.footer_group_box)
+        self.first_last_slide_radio_button.setObjectName('first_last_slide_radio_button')
+        self.footer_layout.addWidget(self.first_last_slide_radio_button)
+        self.left_layout.addWidget(self.footer_group_box)
         self.left_layout.addStretch()
         self.right_layout.addStretch()
         self.search_as_type_check_box.stateChanged.connect(self.on_search_as_type_check_box_changed)
@@ -75,6 +93,10 @@
         self.add_from_service_check_box.stateChanged.connect(self.on_add_from_service_check_box_changed)
         self.display_songbook_check_box.stateChanged.connect(self.on_songbook_check_box_changed)
         self.display_copyright_check_box.stateChanged.connect(self.on_copyright_check_box_changed)
+        self.all_slides_radio_button.clicked.connect(self.on_all_slides_button_clicked)
+        self.first_slide_radio_button.clicked.connect(self.on_first_slide_button_clicked)
+        self.last_slide_radio_button.clicked.connect(self.on_last_slide_button_clicked)
+        self.first_last_slide_radio_button.clicked.connect(self.on_first_and_last_slides_button_clicked)
 
     def retranslateUi(self):
         self.mode_group_box.setTitle(translate('SongsPlugin.SongsTab', 'Songs Mode'))
@@ -88,6 +110,17 @@
         self.display_copyright_check_box.setText(translate('SongsPlugin.SongsTab',
                                                            'Display "%s" symbol before copyright info' %
                                                            SongStrings.CopyrightSymbol))
+        # Footer
+        self.footer_group_box.setTitle(translate('SongsPlugin.SongsTab',
+                                                 'Show Footer'))
+        self.all_slides_radio_button.setText(translate('SongsPlugin.SongsTab',
+                                                       'All slides'))
+        self.first_slide_radio_button.setText(translate('SongsPlugin.SongsTab',
+                                                        'First slide only'))
+        self.last_slide_radio_button.setText(translate('SongsPlugin.SongsTab',
+                                                       'Last slide only'))
+        self.first_last_slide_radio_button.setText(translate('SongsPlugin.SongsTab',
+                                                             'First and last slide only'))
 
     def on_search_as_type_check_box_changed(self, check_state):
         self.song_search = (check_state == QtCore.Qt.Checked)
@@ -107,6 +140,30 @@
     def on_copyright_check_box_changed(self, check_state):
         self.display_copyright_symbol = (check_state == QtCore.Qt.Checked)
 
+    def on_all_slides_button_clicked(self):
+        """
+        Show footer on all song slides
+        """
+        self.slide_footer = SlideFooter.All
+
+    def on_first_slide_button_clicked(self):
+        """
+        Show footer on first song slide only
+        """
+        self.slide_footer = SlideFooter.First
+
+    def on_last_slide_button_clicked(self):
+        """
+        Show footer on last song slide only
+        """
+        self.slide_footer = SlideFooter.Last
+
+    def on_first_and_last_slides_button_clicked(self):
+        """
+        Show footer on last song slide only
+        """
+        self.slide_footer = SlideFooter.FirstAndLast
+
     def load(self):
         settings = Settings()
         settings.beginGroup(self.settings_section)
@@ -116,12 +173,21 @@
         self.update_load = settings.value('add song from service')
         self.display_songbook = settings.value('display songbook')
         self.display_copyright_symbol = settings.value('display copyright symbol')
+        self.show_footer = settings.value('show footer')
         self.search_as_type_check_box.setChecked(self.song_search)
         self.tool_bar_active_check_box.setChecked(self.tool_bar)
         self.update_on_edit_check_box.setChecked(self.update_edit)
         self.add_from_service_check_box.setChecked(self.update_load)
         self.display_songbook_check_box.setChecked(self.display_songbook)
         self.display_copyright_check_box.setChecked(self.display_copyright_symbol)
+        if self.show_footer == SlideFooter.FirstAndLast:
+            self.first_last_slide_radio_button.setChecked(True)
+        elif self.show_footer == SlideFooter.First:
+            self.first_slide_radio_button.setChecked(True)
+        elif self.show_footer == SlideFooter.Last:
+            self.last_slide_radio_button.setChecked(True)
+        else:
+            self.all_slides_radio_button.setChecked(True)
         settings.endGroup()
 
     def save(self):
@@ -133,6 +199,7 @@
         settings.setValue('add song from service', self.update_load)
         settings.setValue('display songbook', self.display_songbook)
         settings.setValue('display copyright symbol', self.display_copyright_symbol)
+        settings.setValue('show footer', self.slide_footer)
         settings.endGroup()
         if self.tab_visited:
             self.settings_form.register_post_process('songs_config_updated')

=== modified file 'openlp/plugins/songs/songsplugin.py'
--- openlp/plugins/songs/songsplugin.py	2014-07-09 12:33:26 +0000
+++ openlp/plugins/songs/songsplugin.py	2014-10-11 11:33:59 +0000
@@ -38,7 +38,7 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.common import UiStrings, Registry, translate
+from openlp.core.common import UiStrings, Registry, translate, SlideFooter
 from openlp.core.lib import Plugin, StringContent, build_icon
 from openlp.core.lib.db import Manager
 from openlp.core.lib.ui import create_action
@@ -69,7 +69,8 @@
     'songs/last directory export': '',
     'songs/songselect username': '',
     'songs/songselect password': '',
-    'songs/songselect searches': ''
+    'songs/songselect searches': '',
+    'songs/show footer': SlideFooter.All
 }
 
 


Follow ups