From 4c103e43055cfbd5f3452ab79d6d1e9d6009ce40 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Fri, 2 Nov 2018 22:48:43 -0700 Subject: [PATCH] Fix the problem where the slides were being incorrectly indexed --- openlp/core/display/window.py | 39 +++++++++++++++------------- openlp/core/lib/serviceitem.py | 15 +++++------ openlp/core/ui/slidecontroller.py | 19 +++++++------- openlp/plugins/songs/lib/__init__.py | 1 + 4 files changed, 39 insertions(+), 35 deletions(-) diff --git a/openlp/core/display/window.py b/openlp/core/display/window.py index b8a7e302e..fa0eb6b2b 100644 --- a/openlp/core/display/window.py +++ b/openlp/core/display/window.py @@ -114,15 +114,15 @@ class DisplayWindow(QtWidgets.QWidget): from openlp.core.display.webengine import WebEngineView self._is_initialised = False self._fbo = None - self.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.Tool) #| QtCore.Qt.WindowStaysOnTopHint - self.setAttribute(QtCore.Qt.WA_TranslucentBackground); - self.setAutoFillBackground(True); + self.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.Tool) # | QtCore.Qt.WindowStaysOnTopHint + self.setAttribute(QtCore.Qt.WA_TranslucentBackground) + self.setAutoFillBackground(True) self.setAttribute(QtCore.Qt.WA_DeleteOnClose) self.layout = QtWidgets.QVBoxLayout(self) self.layout.setContentsMargins(0, 0, 0, 0) self.webview = WebEngineView(self) - self.webview.setAttribute(QtCore.Qt.WA_TranslucentBackground); - self.webview.page().setBackgroundColor(QtCore.Qt.transparent); + self.webview.setAttribute(QtCore.Qt.WA_TranslucentBackground) + self.webview.page().setBackgroundColor(QtCore.Qt.transparent) self.layout.addWidget(self.webview) self.webview.loadFinished.connect(self.after_loaded) self.set_url(QtCore.QUrl.fromLocalFile(path_to_str(DISPLAY_PATH))) @@ -139,7 +139,7 @@ class DisplayWindow(QtWidgets.QWidget): self.update_from_screen(screen) self.is_display = True # Only make visible if setting enabled. - #if Settings().value('core/display on monitor'): + # if Settings().value('core/display on monitor'): self.show() def update_from_screen(self, screen): @@ -152,17 +152,20 @@ class DisplayWindow(QtWidgets.QWidget): self.screen_number = screen.number def set_single_image(self, bg_color, image): - self.run_javascript('Display.setFullscreenImage("{bg_color}", "{image}");'.format(bg_color=bg_color, image=image)) + self.run_javascript('Display.setFullscreenImage("{bg_color}", "{image}");'.format(bg_color=bg_color, + image=image)) def set_single_image_data(self, bg_color, image_data): - self.run_javascript('Display.setFullscreenImageFromData("{bg_color}", "{image_data}");'.format(bg_color=bg_color, image_data=image_data)) + self.run_javascript('Display.setFullscreenImageFromData("{bg_color}", ' + '"{image_data}");'.format(bg_color=bg_color, image_data=image_data)) def set_startup_screen(self): bg_color = Settings().value('core/logo background color') image = Settings().value('core/logo file') if path_to_str(image).startswith(':'): image = OPENLP_SPLASH_SCREEN_PATH - self.run_javascript('Display.setStartupSplashScreen("{bg_color}", "{image}");'.format(bg_color=bg_color, image=image)) + self.run_javascript('Display.setStartupSplashScreen("{bg_color}", "{image}");'.format(bg_color=bg_color, + image=image)) def set_url(self, url): """ @@ -335,10 +338,10 @@ class DisplayWindow(QtWidgets.QWidget): """ Show the display """ - #if self.is_display: - # # Only make visible if setting enabled. - # if not Settings().value('core/display on monitor'): - # return + # if self.is_display: + # # Only make visible if setting enabled. + # if not Settings().value('core/display on monitor'): + # return self.run_javascript('Display.show();') # Check if setting for hiding logo on startup is enabled. # If it is, display should remain hidden, otherwise logo is shown. (from def setup) @@ -362,10 +365,10 @@ class DisplayWindow(QtWidgets.QWidget): :param mode: How the screen is to be hidden """ log.debug('hide_display mode = {mode:d}'.format(mode=mode)) - #if self.is_display: - # # Only make visible if setting enabled. - # if not Settings().value('core/display on monitor'): - # return + # if self.is_display: + # # Only make visible if setting enabled. + # if not Settings().value('core/display on monitor'): + # return if mode == HideMode.Screen: self.setVisible(False) elif mode == HideMode.Blank: @@ -383,4 +386,4 @@ class DisplayWindow(QtWidgets.QWidget): Set the HTML scale """ self.scale = scale - self.run_javascript('Display.setScale({scale});'.format(scale=scale*100)) + self.run_javascript('Display.setScale({scale});'.format(scale=scale * 100)) diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index a035b786e..bdbfb7912 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -39,7 +39,7 @@ from openlp.core.common.mixins import RegistryProperties from openlp.core.common.path import Path from openlp.core.common.settings import Settings from openlp.core.display.render import remove_tags, render_tags -from openlp.core.lib import ImageSource, ItemCapabilities, build_icon +from openlp.core.lib import ItemCapabilities from openlp.core.ui.icons import UiIcons @@ -163,7 +163,7 @@ class ServiceItem(RegistryProperties): # Save rendered pages to this dict. In the case that a slide is used twice we can use the pages saved to # the dict instead of rendering them again. previous_pages = {} - for raw_slide in self.slides: + for index, raw_slide in enumerate(self.slides): verse_tag = raw_slide['verse'] if verse_tag in previous_pages and previous_pages[verse_tag][0] == raw_slide: pages = previous_pages[verse_tag][1] @@ -174,7 +174,7 @@ class ServiceItem(RegistryProperties): rendered_slide = { 'title': raw_slide['title'], 'text': render_tags(page), - 'verse': verse_tag, + 'verse': index, } self._rendered_slides.append(rendered_slide) display_slide = { @@ -259,11 +259,10 @@ class ServiceItem(RegistryProperties): file_location_hash = md5_hash(file_location.encode('utf-8')) image = os.path.join(str(AppLocation.get_section_data_path(self.name)), 'thumbnails', file_location_hash, ntpath.basename(image)) - self.slides.append({'title': file_name, 'image': image, 'path': path, - 'display_title': display_title, 'notes': notes, - 'thumbnail' : image}) - #if self.is_capable(ItemCapabilities.HasThumbnails): - # self.image_manager.add_image(image, ImageSource.CommandPlugins, '#000000') + self.slides.append({'title': file_name, 'image': image, 'path': path, 'display_title': display_title, + 'notes': notes, 'thumbnail': image}) + # if self.is_capable(ItemCapabilities.HasThumbnails): + # self.image_manager.add_image(image, ImageSource.CommandPlugins, '#000000') self._new_item() def get_service_repr(self, lite_save): diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index e3bd24c05..4ab5d5d8a 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -36,7 +36,7 @@ from openlp.core.common.registry import Registry, RegistryBase from openlp.core.common.settings import Settings from openlp.core.display.screens import ScreenList from openlp.core.display.window import DisplayWindow -from openlp.core.lib import ImageSource, ServiceItemAction, image_to_byte +from openlp.core.lib import ServiceItemAction, image_to_byte from openlp.core.lib.serviceitem import ItemCapabilities from openlp.core.lib.ui import create_action from openlp.core.ui import DisplayControllerType, HideMode @@ -1138,6 +1138,7 @@ class SlideController(QtWidgets.QWidget, LogMixin, RegistryProperties): else: # to_display = self.service_item.get_rendered_frame(row) if self.service_item.is_text(): + print('Row: {}'.format(row)) for display in self.displays: display.go_to_slide(row) # self.display.text(to_display, row != old_selected_row) @@ -1183,13 +1184,13 @@ class SlideController(QtWidgets.QWidget, LogMixin, RegistryProperties): else: # If not live, use the slide's thumbnail/icon instead image_path = self.service_item.get_rendered_frame(self.selected_row) - #if self.service_item.is_capable(ItemCapabilities.HasThumbnails): - # image = self.image_manager.get_image(image_path, ImageSource.CommandPlugins) - # self.slide_image = QtGui.QPixmap.fromImage(image) - #else: - #self.slide_image = QtGui.QPixmap(image_path) - #self.slide_image.setDevicePixelRatio(self.main_window.devicePixelRatio()) - #self.slide_preview.setPixmap(self.slide_image) + # if self.service_item.is_capable(ItemCapabilities.HasThumbnails): + # image = self.image_manager.get_image(image_path, ImageSource.CommandPlugins) + # self.slide_image = QtGui.QPixmap.fromImage(image) + # else: + # self.slide_image = QtGui.QPixmap(image_path) + # self.slide_image.setDevicePixelRatio(self.main_window.devicePixelRatio()) + # self.slide_preview.setPixmap(self.slide_image) self.preview_display.set_single_image('#000', image_path) else: self.preview_display.go_to_slide(self.selected_row) @@ -1204,7 +1205,7 @@ class SlideController(QtWidgets.QWidget, LogMixin, RegistryProperties): rect = ScreenList().current.display_geometry win_image = screen.grabWindow(win_id, rect.x(), rect.y(), rect.width(), rect.height()) win_image.setDevicePixelRatio(self.preview_display.devicePixelRatio()) - #self.slide_preview.setPixmap(win_image) + # self.slide_preview.setPixmap(win_image) self.slide_image = win_image base64_image = image_to_byte(win_image, True) self.preview_display.set_single_image_data('#000', base64_image) diff --git a/openlp/plugins/songs/lib/__init__.py b/openlp/plugins/songs/lib/__init__.py index dc3227f66..cf12f168b 100644 --- a/openlp/plugins/songs/lib/__init__.py +++ b/openlp/plugins/songs/lib/__init__.py @@ -32,6 +32,7 @@ from openlp.core.common import CONTROL_CHARS from openlp.core.common.applocation import AppLocation from openlp.core.common.i18n import translate from openlp.core.common.settings import Settings +from openlp.core.display.render import remove_tags from openlp.plugins.songs.lib.db import Author, MediaFile, Song from openlp.plugins.songs.lib.ui import SongStrings