Fix the problem where the slides were being incorrectly indexed

This commit is contained in:
Raoul Snyman 2018-11-02 22:48:43 -07:00
parent 4506e78a1c
commit 4c103e4305
4 changed files with 39 additions and 35 deletions

View File

@ -114,15 +114,15 @@ class DisplayWindow(QtWidgets.QWidget):
from openlp.core.display.webengine import WebEngineView from openlp.core.display.webengine import WebEngineView
self._is_initialised = False self._is_initialised = False
self._fbo = None self._fbo = None
self.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.Tool) #| QtCore.Qt.WindowStaysOnTopHint self.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.Tool) # | QtCore.Qt.WindowStaysOnTopHint
self.setAttribute(QtCore.Qt.WA_TranslucentBackground); self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
self.setAutoFillBackground(True); self.setAutoFillBackground(True)
self.setAttribute(QtCore.Qt.WA_DeleteOnClose) self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
self.layout = QtWidgets.QVBoxLayout(self) self.layout = QtWidgets.QVBoxLayout(self)
self.layout.setContentsMargins(0, 0, 0, 0) self.layout.setContentsMargins(0, 0, 0, 0)
self.webview = WebEngineView(self) self.webview = WebEngineView(self)
self.webview.setAttribute(QtCore.Qt.WA_TranslucentBackground); self.webview.setAttribute(QtCore.Qt.WA_TranslucentBackground)
self.webview.page().setBackgroundColor(QtCore.Qt.transparent); self.webview.page().setBackgroundColor(QtCore.Qt.transparent)
self.layout.addWidget(self.webview) self.layout.addWidget(self.webview)
self.webview.loadFinished.connect(self.after_loaded) self.webview.loadFinished.connect(self.after_loaded)
self.set_url(QtCore.QUrl.fromLocalFile(path_to_str(DISPLAY_PATH))) 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.update_from_screen(screen)
self.is_display = True self.is_display = True
# Only make visible if setting enabled. # Only make visible if setting enabled.
#if Settings().value('core/display on monitor'): # if Settings().value('core/display on monitor'):
self.show() self.show()
def update_from_screen(self, screen): def update_from_screen(self, screen):
@ -152,17 +152,20 @@ class DisplayWindow(QtWidgets.QWidget):
self.screen_number = screen.number self.screen_number = screen.number
def set_single_image(self, bg_color, image): 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): 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): def set_startup_screen(self):
bg_color = Settings().value('core/logo background color') bg_color = Settings().value('core/logo background color')
image = Settings().value('core/logo file') image = Settings().value('core/logo file')
if path_to_str(image).startswith(':'): if path_to_str(image).startswith(':'):
image = OPENLP_SPLASH_SCREEN_PATH 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): def set_url(self, url):
""" """
@ -335,10 +338,10 @@ class DisplayWindow(QtWidgets.QWidget):
""" """
Show the display Show the display
""" """
#if self.is_display: # if self.is_display:
# # Only make visible if setting enabled. # # Only make visible if setting enabled.
# if not Settings().value('core/display on monitor'): # if not Settings().value('core/display on monitor'):
# return # return
self.run_javascript('Display.show();') self.run_javascript('Display.show();')
# Check if setting for hiding logo on startup is enabled. # Check if setting for hiding logo on startup is enabled.
# If it is, display should remain hidden, otherwise logo is shown. (from def setup) # 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 :param mode: How the screen is to be hidden
""" """
log.debug('hide_display mode = {mode:d}'.format(mode=mode)) log.debug('hide_display mode = {mode:d}'.format(mode=mode))
#if self.is_display: # if self.is_display:
# # Only make visible if setting enabled. # # Only make visible if setting enabled.
# if not Settings().value('core/display on monitor'): # if not Settings().value('core/display on monitor'):
# return # return
if mode == HideMode.Screen: if mode == HideMode.Screen:
self.setVisible(False) self.setVisible(False)
elif mode == HideMode.Blank: elif mode == HideMode.Blank:
@ -383,4 +386,4 @@ class DisplayWindow(QtWidgets.QWidget):
Set the HTML scale Set the HTML scale
""" """
self.scale = scale self.scale = scale
self.run_javascript('Display.setScale({scale});'.format(scale=scale*100)) self.run_javascript('Display.setScale({scale});'.format(scale=scale * 100))

View File

@ -39,7 +39,7 @@ from openlp.core.common.mixins import RegistryProperties
from openlp.core.common.path import Path from openlp.core.common.path import Path
from openlp.core.common.settings import Settings from openlp.core.common.settings import Settings
from openlp.core.display.render import remove_tags, render_tags 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 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 # 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. # the dict instead of rendering them again.
previous_pages = {} previous_pages = {}
for raw_slide in self.slides: for index, raw_slide in enumerate(self.slides):
verse_tag = raw_slide['verse'] verse_tag = raw_slide['verse']
if verse_tag in previous_pages and previous_pages[verse_tag][0] == raw_slide: if verse_tag in previous_pages and previous_pages[verse_tag][0] == raw_slide:
pages = previous_pages[verse_tag][1] pages = previous_pages[verse_tag][1]
@ -174,7 +174,7 @@ class ServiceItem(RegistryProperties):
rendered_slide = { rendered_slide = {
'title': raw_slide['title'], 'title': raw_slide['title'],
'text': render_tags(page), 'text': render_tags(page),
'verse': verse_tag, 'verse': index,
} }
self._rendered_slides.append(rendered_slide) self._rendered_slides.append(rendered_slide)
display_slide = { display_slide = {
@ -259,11 +259,10 @@ class ServiceItem(RegistryProperties):
file_location_hash = md5_hash(file_location.encode('utf-8')) file_location_hash = md5_hash(file_location.encode('utf-8'))
image = os.path.join(str(AppLocation.get_section_data_path(self.name)), 'thumbnails', image = os.path.join(str(AppLocation.get_section_data_path(self.name)), 'thumbnails',
file_location_hash, ntpath.basename(image)) file_location_hash, ntpath.basename(image))
self.slides.append({'title': file_name, 'image': image, 'path': path, self.slides.append({'title': file_name, 'image': image, 'path': path, 'display_title': display_title,
'display_title': display_title, 'notes': notes, 'notes': notes, 'thumbnail': image})
'thumbnail' : image}) # if self.is_capable(ItemCapabilities.HasThumbnails):
#if self.is_capable(ItemCapabilities.HasThumbnails): # self.image_manager.add_image(image, ImageSource.CommandPlugins, '#000000')
# self.image_manager.add_image(image, ImageSource.CommandPlugins, '#000000')
self._new_item() self._new_item()
def get_service_repr(self, lite_save): def get_service_repr(self, lite_save):

View File

@ -36,7 +36,7 @@ from openlp.core.common.registry import Registry, RegistryBase
from openlp.core.common.settings import Settings from openlp.core.common.settings import Settings
from openlp.core.display.screens import ScreenList from openlp.core.display.screens import ScreenList
from openlp.core.display.window import DisplayWindow 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.serviceitem import ItemCapabilities
from openlp.core.lib.ui import create_action from openlp.core.lib.ui import create_action
from openlp.core.ui import DisplayControllerType, HideMode from openlp.core.ui import DisplayControllerType, HideMode
@ -1138,6 +1138,7 @@ class SlideController(QtWidgets.QWidget, LogMixin, RegistryProperties):
else: else:
# to_display = self.service_item.get_rendered_frame(row) # to_display = self.service_item.get_rendered_frame(row)
if self.service_item.is_text(): if self.service_item.is_text():
print('Row: {}'.format(row))
for display in self.displays: for display in self.displays:
display.go_to_slide(row) display.go_to_slide(row)
# self.display.text(to_display, row != old_selected_row) # self.display.text(to_display, row != old_selected_row)
@ -1183,13 +1184,13 @@ class SlideController(QtWidgets.QWidget, LogMixin, RegistryProperties):
else: else:
# If not live, use the slide's thumbnail/icon instead # If not live, use the slide's thumbnail/icon instead
image_path = self.service_item.get_rendered_frame(self.selected_row) image_path = self.service_item.get_rendered_frame(self.selected_row)
#if self.service_item.is_capable(ItemCapabilities.HasThumbnails): # if self.service_item.is_capable(ItemCapabilities.HasThumbnails):
# image = self.image_manager.get_image(image_path, ImageSource.CommandPlugins) # image = self.image_manager.get_image(image_path, ImageSource.CommandPlugins)
# self.slide_image = QtGui.QPixmap.fromImage(image) # self.slide_image = QtGui.QPixmap.fromImage(image)
#else: # else:
#self.slide_image = QtGui.QPixmap(image_path) # self.slide_image = QtGui.QPixmap(image_path)
#self.slide_image.setDevicePixelRatio(self.main_window.devicePixelRatio()) # self.slide_image.setDevicePixelRatio(self.main_window.devicePixelRatio())
#self.slide_preview.setPixmap(self.slide_image) # self.slide_preview.setPixmap(self.slide_image)
self.preview_display.set_single_image('#000', image_path) self.preview_display.set_single_image('#000', image_path)
else: else:
self.preview_display.go_to_slide(self.selected_row) self.preview_display.go_to_slide(self.selected_row)
@ -1204,7 +1205,7 @@ class SlideController(QtWidgets.QWidget, LogMixin, RegistryProperties):
rect = ScreenList().current.display_geometry rect = ScreenList().current.display_geometry
win_image = screen.grabWindow(win_id, rect.x(), rect.y(), rect.width(), rect.height()) win_image = screen.grabWindow(win_id, rect.x(), rect.y(), rect.width(), rect.height())
win_image.setDevicePixelRatio(self.preview_display.devicePixelRatio()) win_image.setDevicePixelRatio(self.preview_display.devicePixelRatio())
#self.slide_preview.setPixmap(win_image) # self.slide_preview.setPixmap(win_image)
self.slide_image = win_image self.slide_image = win_image
base64_image = image_to_byte(win_image, True) base64_image = image_to_byte(win_image, True)
self.preview_display.set_single_image_data('#000', base64_image) self.preview_display.set_single_image_data('#000', base64_image)

View File

@ -32,6 +32,7 @@ from openlp.core.common import CONTROL_CHARS
from openlp.core.common.applocation import AppLocation from openlp.core.common.applocation import AppLocation
from openlp.core.common.i18n import translate from openlp.core.common.i18n import translate
from openlp.core.common.settings import Settings 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.db import Author, MediaFile, Song
from openlp.plugins.songs.lib.ui import SongStrings from openlp.plugins.songs.lib.ui import SongStrings