forked from openlp/openlp
Fix the problem where the slides were being incorrectly indexed
This commit is contained in:
parent
4506e78a1c
commit
4c103e4305
@ -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))
|
||||||
|
@ -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):
|
||||||
|
@ -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)
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user