def generate_slide_data(self, service_item, *, item=None, remote=False, context=ServiceItemContext.Service, **kwargs): """ Generate the slide data. Needs to be implemented by the plugin. :param service_item: The service item to be built on :param item: The Song item to be used :param remote: Triggered from remote :param context: Why is it being generated :param kwargs: Consume other unused args specified by the base implementation, but not use by this one. """ log.debug('generating slide data') if item: items = item else: items = self.list_view.selectedItems() if not items: return False bible_text = '' old_chapter = -1 raw_slides = [] verses = VerseReferenceList() for bitem in items: data = bitem.data(QtCore.Qt.UserRole) verses.add( data['book'], data['chapter'], data['verse'], data['version'], data['copyright'], data['permissions']) verse_text = self.format_verse(old_chapter, data['chapter'], data['verse']) # We only support 'Verse Per Slide' when using a scond bible if data['second_bible']: second_text = self.format_verse(old_chapter, data['chapter'], data['verse']) bible_text = '{first_version}{data[text]}\n\n{second_version}{data[second_text]}'\ .format(first_version=verse_text, second_version=second_text, data=data) raw_slides.append(bible_text.rstrip()) bible_text = '' # If we are 'Verse Per Slide' then create a new slide. elif self.settings_tab.layout_style == LayoutStyle.VersePerSlide: bible_text = '{first_version}{data[text]}'.format(first_version=verse_text, data=data) raw_slides.append(bible_text.rstrip()) bible_text = '' # If we are 'Verse Per Line' then force a new line. elif self.settings_tab.layout_style == LayoutStyle.VersePerLine: bible_text = '{bible} {verse}{data[text]}\n'.format(bible=bible_text, verse=verse_text, data=data) # We have to be 'Continuous'. else: bible_text = '{bible} {verse}{data[text]}'.format(bible=bible_text, verse=verse_text, data=data) bible_text = bible_text.strip(' ') old_chapter = data['chapter'] # Add footer service_item.raw_footer.append(verses.format_verses()) if data['second_bible']: verses.add_version(data['second_version'], data['second_copyright'], data['second_permissions']) service_item.raw_footer.append(verses.format_versions()) # If there are no more items we check whether we have to add bible_text. if bible_text: raw_slides.append(bible_text.lstrip()) # Service Item: Capabilities if self.settings_tab.layout_style == LayoutStyle.Continuous and not data['second_bible']: # Split the line but do not replace line breaks in renderer. service_item.add_capability(ItemCapabilities.NoLineBreaks) service_item.add_capability(ItemCapabilities.CanPreview) service_item.add_capability(ItemCapabilities.CanLoop) service_item.add_capability(ItemCapabilities.CanWordSplit) service_item.add_capability(ItemCapabilities.CanEditTitle) # Service Item: Title service_item.title = '{verse} {version}'.format(verse=verses.format_verses(), version=verses.format_versions()) # Service Item: Theme if self.settings_tab.bible_theme: service_item.theme = self.settings_tab.bible_theme for slide in raw_slides: service_item.add_from_text(slide) return True