From 940b4d1848e8c70ab7642901a68594e8016caffc Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 27 Apr 2024 18:51:28 +0200 Subject: Adding upstream version 1:7.0.4. Signed-off-by: Daniel Baumann --- sdext/source/presenter/PresenterScreen.hxx | 225 +++++++++++++++++++++++++++++ 1 file changed, 225 insertions(+) create mode 100644 sdext/source/presenter/PresenterScreen.hxx (limited to 'sdext/source/presenter/PresenterScreen.hxx') diff --git a/sdext/source/presenter/PresenterScreen.hxx b/sdext/source/presenter/PresenterScreen.hxx new file mode 100644 index 000000000..85c091621 --- /dev/null +++ b/sdext/source/presenter/PresenterScreen.hxx @@ -0,0 +1,225 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SDEXT_SOURCE_PRESENTER_PRESENTERSCREEN_HXX +#define INCLUDED_SDEXT_SOURCE_PRESENTER_PRESENTERSCREEN_HXX + +#include "PresenterConfigurationAccess.hxx" +#include "PresenterPaneContainer.hxx" +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +namespace sdext::presenter { + +class PresenterController; + +typedef ::cppu::WeakComponentImplHelper < + css::task::XJob + > PresenterScreenJobInterfaceBase; +typedef ::cppu::WeakComponentImplHelper < + css::lang::XEventListener + > PresenterScreenInterfaceBase; + +/** The PresenterScreenJob service is instantiated every time a document is + created or loaded. In its execute() method it then filters out all + non-Impress documents and creates and registers a new PresenterScreen + object. +*/ +class PresenterScreenJob + : private ::cppu::BaseMutex, + public PresenterScreenJobInterfaceBase +{ +public: + PresenterScreenJob(const PresenterScreenJob&) = delete; + PresenterScreenJob& operator=(const PresenterScreenJob&) = delete; + static OUString getImplementationName_static(); + static css::uno::Sequence< OUString > getSupportedServiceNames_static(); + static css::uno::Reference Create( + const css::uno::Reference& rxContext); + + virtual void SAL_CALL disposing() override; + + // XJob + + virtual css::uno::Any SAL_CALL execute( + const css::uno::Sequence& Arguments) override; + +private: + explicit PresenterScreenJob (const css::uno::Reference& rxContext); + virtual ~PresenterScreenJob() override; + + css::uno::Reference mxComponentContext; +}; + +/** This is the bootstrap class of the presenter screen. It is registered + as drawing framework startup service. That means that every drawing + framework instance creates an instance of this class. + +

A PresenterScreen object registers itself as listener for drawing + framework configuration changes. It waits for the full screen marker (a + top level resource) to appear in the current configuration. When that + happens the actual presenter screen is initialized. A new + PresenterController is created and takes over the task of controlling + the presenter screen.

+*/ +class PresenterScreen + : private ::cppu::BaseMutex, + public PresenterScreenInterfaceBase +{ +public: + PresenterScreen ( + const css::uno::Reference& rxContext, + const css::uno::Reference& rxModel); + virtual ~PresenterScreen() override; + PresenterScreen(const PresenterScreen&) = delete; + PresenterScreen& operator=(const PresenterScreen&) = delete; + + virtual void SAL_CALL disposing() override; + + static bool isPresenterScreenEnabled( + const css::uno::Reference& rxContext); + /** Make the presenter screen visible. + */ + void InitializePresenterScreen(); + + /** Do not call ShutdownPresenterScreen() directly. Call + RequestShutdownPresenterScreen() instead. It will issue an + asynchronous call to ShutdownPresenterScreen() when that is safe. + */ + void RequestShutdownPresenterScreen(); + + /** Switch / converse monitors between presenter view and slide output + */ + void SwitchMonitors(); + + // XEventListener + + virtual void SAL_CALL disposing ( const css::lang::EventObject& rEvent) override; + +private: + css::uno::Reference mxModel; + css::uno::Reference mxController; + css::uno::WeakReference + mxConfigurationControllerWeak; + css::uno::WeakReference mxContextWeak; + ::rtl::Reference mpPresenterController; + css::uno::Reference mxSavedConfiguration; + ::rtl::Reference mpPaneContainer; + css::uno::Reference mxPaneFactory; + css::uno::Reference mxViewFactory; + + class ViewDescriptor + { + public: + OUString msTitle; + OUString msAccessibleTitle; + bool mbIsOpaque; + ViewDescriptor() + : mbIsOpaque(false) + { + } + }; + typedef ::std::map ViewDescriptorContainer; + ViewDescriptorContainer maViewDescriptors; + + void ShutdownPresenterScreen(); + + /** Create and initialize the factory for presenter view specific panes. + */ + void SetupPaneFactory ( + const css::uno::Reference& rxContext); + + /** Create and initialize the factory for presenter view specific views. + */ + void SetupViewFactory ( + const css::uno::Reference& rxContext); + + /** Read the current layout from the configuration and call + ProcessLayout to bring it on to the screen. + */ + void SetupConfiguration ( + const css::uno::Reference& rxContext, + const css::uno::Reference& rxAnchorId); + + /** Read one layout from the configuration and make resource activation + requests to bring it on to the screen. When one layout references a + parent layout then this method calls itself recursively. + */ + void ProcessLayout ( + PresenterConfigurationAccess& rConfiguration, + const OUString& rsLayoutName, + const css::uno::Reference& rxContext, + const css::uno::Reference& rxAnchorId); + + /** Called by ProcessLayout for a single entry of a Layouts + configuration list. + */ + void ProcessComponent ( + const ::std::vector& rValues, + const css::uno::Reference& rxContext, + const css::uno::Reference& rxAnchorId); + + /** Read the view descriptions from the configuration. + */ + void ProcessViewDescriptions ( + PresenterConfigurationAccess& rConfiguration); + + /** Called by ProcessViewDescriptions for a single entry. + */ + void ProcessViewDescription ( + const ::std::vector& rValues); + + void SetupView ( + const css::uno::Reference& rxContext, + const css::uno::Reference& rxAnchorId, + const OUString& rsPaneURL, + const OUString& rsViewURL, + const PresenterPaneContainer::ViewInitializationFunction& rViewInitialization); + + /** Return the built-in screen number on the presentation will normally + display the presenter console. + @return + Returns -1 when the presenter screen can or shall not be + displayed. + */ + sal_Int32 GetPresenterScreenNumber ( + const css::uno::Reference& rxPresentation) const; + + static sal_Int32 GetPresenterScreenFromScreen( sal_Int32 nPresentationScreen ); + + /** Create a resource id for the full screen background pane so that it + is displayed on another screen than the full screen presentation. + */ + css::uno::Reference GetMainPaneId ( + const css::uno::Reference& rxPresentation) const; +}; + +} + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -- cgit v1.2.3