forked from openlp/openlp
Various adjustments, main window starts now, still no canvas.
This commit is contained in:
parent
31826f6962
commit
3094b053ff
@ -22,3 +22,5 @@
|
|||||||
"""
|
"""
|
||||||
The Display module.
|
The Display module.
|
||||||
"""
|
"""
|
||||||
|
from .canvas import MainCanvas, Canvas, DisplayControllerType
|
||||||
|
from .renderer import Renderer
|
@ -30,6 +30,7 @@ Some of the code for this form is based on the examples at:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import html
|
import html
|
||||||
|
import json
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
|
||||||
@ -113,6 +114,8 @@ class Canvas(QtWidgets.QGraphicsView):
|
|||||||
self.webview = WebEngineView(self)
|
self.webview = WebEngineView(self)
|
||||||
self.webview.setGeometry(0, 0, self.screen['size'].width(), self.screen['size'].height())
|
self.webview.setGeometry(0, 0, self.screen['size'].width(), self.screen['size'].height())
|
||||||
self.webview.settings().setAttribute(QtWebEngineWidgets.QWebEngineSettings.PluginsEnabled, True)
|
self.webview.settings().setAttribute(QtWebEngineWidgets.QWebEngineSettings.PluginsEnabled, True)
|
||||||
|
self.layout = QtWidgets.QVBoxLayout(self)
|
||||||
|
self.layout.setContentsMargins(0, 0, 0, 0)
|
||||||
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('file://' + os.getcwd() + '/display.html'))
|
self.set_url(QtCore.QUrl('file://' + os.getcwd() + '/display.html'))
|
||||||
@ -124,12 +127,6 @@ class Canvas(QtWidgets.QGraphicsView):
|
|||||||
self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
|
self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
|
||||||
self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
|
self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
|
||||||
|
|
||||||
def after_loaded(self):
|
|
||||||
"""
|
|
||||||
Add stuff after page initialisation
|
|
||||||
"""
|
|
||||||
self.run_javascript('Display.init();')
|
|
||||||
|
|
||||||
def resizeEvent(self, event):
|
def resizeEvent(self, event):
|
||||||
"""
|
"""
|
||||||
React to resizing of this display
|
React to resizing of this display
|
||||||
@ -159,7 +156,7 @@ class Canvas(QtWidgets.QGraphicsView):
|
|||||||
"""
|
"""
|
||||||
self.webview.setHtml(html)
|
self.webview.setHtml(html)
|
||||||
|
|
||||||
def after_loaded(self):
|
def after_loaded(self, state):
|
||||||
"""
|
"""
|
||||||
Add stuff after page initialisation
|
Add stuff after page initialisation
|
||||||
"""
|
"""
|
||||||
@ -359,7 +356,7 @@ class MainCanvas(OpenLPMixin, Canvas, RegistryProperties):
|
|||||||
splash_image)
|
splash_image)
|
||||||
service_item = ServiceItem()
|
service_item = ServiceItem()
|
||||||
service_item.bg_image_bytes = image_to_byte(self.initial_fame)
|
service_item.bg_image_bytes = image_to_byte(self.initial_fame)
|
||||||
self.web_view.setHtml(build_html(service_item, self.screen, self.is_live, None,
|
self.webview.setHtml(build_html(service_item, self.screen, self.is_live, None,
|
||||||
plugins=self.plugin_manager.plugins))
|
plugins=self.plugin_manager.plugins))
|
||||||
self._hide_mouse()
|
self._hide_mouse()
|
||||||
|
|
||||||
@ -374,17 +371,20 @@ class MainCanvas(OpenLPMixin, Canvas, RegistryProperties):
|
|||||||
while not self.web_loaded:
|
while not self.web_loaded:
|
||||||
self.application.process_events()
|
self.application.process_events()
|
||||||
self.setGeometry(self.screen['size'])
|
self.setGeometry(self.screen['size'])
|
||||||
if animate:
|
json_verses = json.dumps(slide)
|
||||||
# NOTE: Verify this works with ''.format()
|
print(json_verses)
|
||||||
_text = slide.replace('\\', '\\\\').replace('\"', '\\\"')
|
self.run_javascript('Display.setTextSlides({verses});'.format(verses=json_verses))
|
||||||
self.frame.evaluateJavaScript('show_text("{text}")'.format(text=_text))
|
#if animate:
|
||||||
else:
|
# # NOTE: Verify this works with ''.format()
|
||||||
# This exists for https://bugs.launchpad.net/openlp/+bug/1016843
|
# _text = slide.replace('\\', '\\\\').replace('\"', '\\\"')
|
||||||
# For unknown reasons if evaluateJavaScript is called
|
# self.frame.evaluateJavaScript('show_text("{text}")'.format(text=_text))
|
||||||
# from the themewizard, then it causes a crash on
|
#else:
|
||||||
# Windows if there are many items in the service to re-render.
|
# # This exists for https://bugs.launchpad.net/openlp/+bug/1016843
|
||||||
# Setting the div elements direct seems to solve the issue
|
# # For unknown reasons if evaluateJavaScript is called
|
||||||
self.frame.findFirstElement("#lyricsmain").setInnerXml(slide)
|
# # from the themewizard, then it causes a crash on
|
||||||
|
# # Windows if there are many items in the service to re-render.
|
||||||
|
# # Setting the div elements direct seems to solve the issue
|
||||||
|
# self.frame.findFirstElement("#lyricsmain").setInnerXml(slide)
|
||||||
|
|
||||||
def alert(self, text, location):
|
def alert(self, text, location):
|
||||||
"""
|
"""
|
||||||
@ -402,7 +402,7 @@ class MainCanvas(OpenLPMixin, Canvas, RegistryProperties):
|
|||||||
else:
|
else:
|
||||||
shrink = False
|
shrink = False
|
||||||
js = 'show_alert("{text}", "")'.format(text=text_prepared)
|
js = 'show_alert("{text}", "")'.format(text=text_prepared)
|
||||||
height = self.frame.evaluateJavaScript(js)
|
height = self.run_javascript(js)
|
||||||
if shrink:
|
if shrink:
|
||||||
if text:
|
if text:
|
||||||
alert_height = int(height)
|
alert_height = int(height)
|
||||||
@ -453,11 +453,17 @@ class MainCanvas(OpenLPMixin, Canvas, RegistryProperties):
|
|||||||
:param image: The image to be displayed
|
:param image: The image to be displayed
|
||||||
"""
|
"""
|
||||||
self.setGeometry(self.screen['size'])
|
self.setGeometry(self.screen['size'])
|
||||||
if image:
|
#if image:
|
||||||
js = 'show_image("data:image/png;base64,{image}");'.format(image=image)
|
# self.set_im
|
||||||
else:
|
# js = 'show_image("data:image/png;base64,{image}");'.format(image=image)
|
||||||
js = 'show_image("");'
|
#else:
|
||||||
self.frame.evaluateJavaScript(js)
|
# js = 'show_image("");'
|
||||||
|
#self.frame.evaluateJavaScript(js)
|
||||||
|
if not image['file'].startswith('file://'):
|
||||||
|
image['file'] = 'file://' + image['file']
|
||||||
|
json_images = json.dumps(images)
|
||||||
|
self.run_javascript('Display.setImageSlides({images});'.format(images=json_images))
|
||||||
|
|
||||||
|
|
||||||
def reset_image(self):
|
def reset_image(self):
|
||||||
"""
|
"""
|
||||||
@ -484,7 +490,7 @@ class MainCanvas(OpenLPMixin, Canvas, RegistryProperties):
|
|||||||
# Wait for the fade to finish before geting the preview.
|
# Wait for the fade to finish before geting the preview.
|
||||||
# Important otherwise preview will have incorrect text if at all!
|
# 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 self.service_item.theme_data and self.service_item.theme_data.display_slide_transition:
|
||||||
while not self.frame.evaluateJavaScript('show_text_completed()'):
|
while not self.run_javascript('show_text_completed()'):
|
||||||
self.application.process_events()
|
self.application.process_events()
|
||||||
# Wait for the webview to update before getting the preview.
|
# Wait for the webview to update before getting the preview.
|
||||||
# Important otherwise first preview will miss the background !
|
# Important otherwise first preview will miss the background !
|
||||||
@ -540,7 +546,7 @@ class MainCanvas(OpenLPMixin, Canvas, RegistryProperties):
|
|||||||
image_bytes = self.image_manager.get_image_bytes(image_path, ImageSource.ImagePlugin)
|
image_bytes = self.image_manager.get_image_bytes(image_path, ImageSource.ImagePlugin)
|
||||||
created_html = build_html(self.service_item, self.screen, self.is_live, background, image_bytes,
|
created_html = build_html(self.service_item, self.screen, self.is_live, background, image_bytes,
|
||||||
plugins=self.plugin_manager.plugins)
|
plugins=self.plugin_manager.plugins)
|
||||||
self.web_view.setHtml(created_html)
|
self.webview.setHtml(created_html)
|
||||||
if service_item.foot_text:
|
if service_item.foot_text:
|
||||||
self.footer(service_item.foot_text)
|
self.footer(service_item.foot_text)
|
||||||
# if was hidden keep it hidden
|
# if was hidden keep it hidden
|
||||||
@ -569,7 +575,7 @@ class MainCanvas(OpenLPMixin, Canvas, RegistryProperties):
|
|||||||
:param text: footer text to be displayed
|
:param text: footer text to be displayed
|
||||||
"""
|
"""
|
||||||
js = 'show_footer(\'' + text.replace('\\', '\\\\').replace('\'', '\\\'') + '\')'
|
js = 'show_footer(\'' + text.replace('\\', '\\\\').replace('\'', '\\\'') + '\')'
|
||||||
self.frame.evaluateJavaScript(js)
|
self.run_javascript(js)
|
||||||
|
|
||||||
def hide_display(self, mode=HideMode.Screen):
|
def hide_display(self, mode=HideMode.Screen):
|
||||||
"""
|
"""
|
||||||
@ -583,16 +589,16 @@ class MainCanvas(OpenLPMixin, Canvas, RegistryProperties):
|
|||||||
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.frame.evaluateJavaScript('show_blank("desktop");')
|
self.run_javascript('show_blank("desktop");')
|
||||||
self.setVisible(False)
|
self.setVisible(False)
|
||||||
elif mode == HideMode.Blank or self.initial_fame:
|
elif mode == HideMode.Blank or self.initial_fame:
|
||||||
self.frame.evaluateJavaScript('show_blank("black");')
|
self.run_javascript('show_blank("black");')
|
||||||
else:
|
else:
|
||||||
self.frame.evaluateJavaScript('show_blank("theme");')
|
self.run_javascript('show_blank("theme");')
|
||||||
if mode != HideMode.Screen:
|
if mode != HideMode.Screen:
|
||||||
if self.isHidden():
|
if self.isHidden():
|
||||||
self.setVisible(True)
|
self.setVisible(True)
|
||||||
self.web_view.setVisible(True)
|
self.webview.setVisible(True)
|
||||||
self.hide_mode = mode
|
self.hide_mode = mode
|
||||||
|
|
||||||
def show_display(self):
|
def show_display(self):
|
||||||
@ -604,7 +610,7 @@ class MainCanvas(OpenLPMixin, Canvas, RegistryProperties):
|
|||||||
# 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.frame.evaluateJavaScript('show_blank("show");')
|
self.run_javascript('show_blank("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)
|
||||||
if self.isHidden() and not Settings().value('core/logo hide on startup'):
|
if self.isHidden() and not Settings().value('core/logo hide on startup'):
|
||||||
@ -620,10 +626,10 @@ class MainCanvas(OpenLPMixin, Canvas, RegistryProperties):
|
|||||||
"""
|
"""
|
||||||
if Settings().value('advanced/hide mouse'):
|
if Settings().value('advanced/hide mouse'):
|
||||||
self.setCursor(QtCore.Qt.BlankCursor)
|
self.setCursor(QtCore.Qt.BlankCursor)
|
||||||
self.frame.evaluateJavaScript('document.body.style.cursor = "none"')
|
self.run_javascript('document.body.style.cursor = "none"')
|
||||||
else:
|
else:
|
||||||
self.setCursor(QtCore.Qt.ArrowCursor)
|
self.setCursor(QtCore.Qt.ArrowCursor)
|
||||||
self.frame.evaluateJavaScript('document.body.style.cursor = "auto"')
|
self.run_javascript('document.body.style.cursor = "auto"')
|
||||||
|
|
||||||
def change_window_level(self, window):
|
def change_window_level(self, window):
|
||||||
"""
|
"""
|
||||||
|
@ -644,7 +644,6 @@ from .settingstab import SettingsTab
|
|||||||
from .serviceitem import ServiceItem, ServiceItemType, ItemCapabilities
|
from .serviceitem import ServiceItem, ServiceItemType, ItemCapabilities
|
||||||
from .htmlbuilder import build_html, build_lyrics_format_css, build_lyrics_outline_css, build_chords_css
|
from .htmlbuilder import build_html, build_lyrics_format_css, build_lyrics_outline_css, build_chords_css
|
||||||
from .imagemanager import ImageManager
|
from .imagemanager import ImageManager
|
||||||
from .renderer import Renderer
|
|
||||||
from .mediamanageritem import MediaManagerItem
|
from .mediamanageritem import MediaManagerItem
|
||||||
from .projector.db import ProjectorDB, Projector
|
from .projector.db import ProjectorDB, Projector
|
||||||
from .projector.pjlink import PJLink
|
from .projector.pjlink import PJLink
|
||||||
|
@ -99,7 +99,6 @@ from .themelayoutform import ThemeLayoutForm
|
|||||||
from .themeform import ThemeForm
|
from .themeform import ThemeForm
|
||||||
from .filerenameform import FileRenameForm
|
from .filerenameform import FileRenameForm
|
||||||
from .starttimeform import StartTimeForm
|
from .starttimeform import StartTimeForm
|
||||||
from .maindisplay import MainDisplay, Display, AudioPlayer
|
|
||||||
from .servicenoteform import ServiceNoteForm
|
from .servicenoteform import ServiceNoteForm
|
||||||
from .serviceitemeditform import ServiceItemEditForm
|
from .serviceitemeditform import ServiceItemEditForm
|
||||||
from .slidecontroller import SlideController, DisplayController, PreviewController, LiveController
|
from .slidecontroller import SlideController, DisplayController, PreviewController, LiveController
|
||||||
|
@ -41,7 +41,7 @@ from openlp.core.common import Registry, RegistryProperties, AppLocation, Langua
|
|||||||
from openlp.core.common.actions import ActionList, CategoryOrder
|
from openlp.core.common.actions import ActionList, CategoryOrder
|
||||||
from openlp.core.common.path import Path, path_to_str, str_to_path
|
from openlp.core.common.path import Path, path_to_str, str_to_path
|
||||||
from openlp.core.common.versionchecker import get_application_version
|
from openlp.core.common.versionchecker import get_application_version
|
||||||
from openlp.core.lib import Renderer, PluginManager, ImageManager, PluginStatus, ScreenList, build_icon
|
from openlp.core.lib import PluginManager, ImageManager, PluginStatus, ScreenList, build_icon
|
||||||
from openlp.core.lib.ui import create_action
|
from openlp.core.lib.ui import create_action
|
||||||
from openlp.core.ui import AboutForm, SettingsForm, ServiceManager, ThemeManager, LiveController, PluginForm, \
|
from openlp.core.ui import AboutForm, SettingsForm, ServiceManager, ThemeManager, LiveController, PluginForm, \
|
||||||
ShortcutListForm, FormattingTagForm, PreviewController
|
ShortcutListForm, FormattingTagForm, PreviewController
|
||||||
@ -52,7 +52,7 @@ from openlp.core.ui.projector.manager import ProjectorManager
|
|||||||
from openlp.core.ui.lib.dockwidget import OpenLPDockWidget
|
from openlp.core.ui.lib.dockwidget import OpenLPDockWidget
|
||||||
from openlp.core.ui.lib.filedialog import FileDialog
|
from openlp.core.ui.lib.filedialog import FileDialog
|
||||||
from openlp.core.ui.lib.mediadockmanager import MediaDockManager
|
from openlp.core.ui.lib.mediadockmanager import MediaDockManager
|
||||||
|
from openlp.core.display import Renderer
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -38,7 +38,8 @@ from openlp.core.lib import ItemCapabilities, ServiceItem, ImageSource, ServiceI
|
|||||||
from openlp.core.lib.ui import create_action
|
from openlp.core.lib.ui import create_action
|
||||||
from openlp.core.ui.lib.toolbar import OpenLPToolbar
|
from openlp.core.ui.lib.toolbar import OpenLPToolbar
|
||||||
from openlp.core.ui.lib.listpreviewwidget import ListPreviewWidget
|
from openlp.core.ui.lib.listpreviewwidget import ListPreviewWidget
|
||||||
from openlp.core.ui import HideMode, MainDisplay, Display, DisplayControllerType
|
from openlp.core.ui import HideMode, DisplayControllerType
|
||||||
|
from openlp.core.display import MainCanvas, Canvas
|
||||||
|
|
||||||
|
|
||||||
# Threshold which has to be trespassed to toggle.
|
# Threshold which has to be trespassed to toggle.
|
||||||
@ -370,7 +371,7 @@ class SlideController(DisplayController, RegistryProperties):
|
|||||||
self.slide_layout.setSpacing(0)
|
self.slide_layout.setSpacing(0)
|
||||||
self.slide_layout.setContentsMargins(0, 0, 0, 0)
|
self.slide_layout.setContentsMargins(0, 0, 0, 0)
|
||||||
self.slide_layout.setObjectName('SlideLayout')
|
self.slide_layout.setObjectName('SlideLayout')
|
||||||
self.preview_display = Display(self)
|
self.preview_display = Canvas(self)
|
||||||
self.slide_layout.insertWidget(0, self.preview_display)
|
self.slide_layout.insertWidget(0, self.preview_display)
|
||||||
self.preview_display.hide()
|
self.preview_display.hide()
|
||||||
# Actual preview screen
|
# Actual preview screen
|
||||||
@ -580,7 +581,7 @@ class SlideController(DisplayController, RegistryProperties):
|
|||||||
# rebuild display as screen size changed
|
# rebuild display as screen size changed
|
||||||
if self.display:
|
if self.display:
|
||||||
self.display.close()
|
self.display.close()
|
||||||
self.display = MainDisplay(self)
|
self.display = MainCanvas(self)
|
||||||
self.display.setup()
|
self.display.setup()
|
||||||
if self.is_live:
|
if self.is_live:
|
||||||
self.__add_actions_to_widget(self.display)
|
self.__add_actions_to_widget(self.display)
|
||||||
@ -596,7 +597,7 @@ class SlideController(DisplayController, RegistryProperties):
|
|||||||
self.preview_widget.screen_size_changed(self.ratio)
|
self.preview_widget.screen_size_changed(self.ratio)
|
||||||
self.preview_display.setup()
|
self.preview_display.setup()
|
||||||
service_item = ServiceItem()
|
service_item = ServiceItem()
|
||||||
self.preview_display.web_view.setHtml(build_html(service_item, self.preview_display.screen, None, self.is_live,
|
self.preview_display.webview.setHtml(build_html(service_item, self.preview_display.screen, None, self.is_live,
|
||||||
plugins=self.plugin_manager.plugins))
|
plugins=self.plugin_manager.plugins))
|
||||||
self.media_controller.setup_display(self.preview_display, True)
|
self.media_controller.setup_display(self.preview_display, True)
|
||||||
if self.service_item:
|
if self.service_item:
|
||||||
|
Loading…
Reference in New Issue
Block a user