1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 2 /* 3 * This file is part of the LibreOffice project. 4 * 5 * This Source Code Form is subject to the terms of the Mozilla Public 6 * License, v. 2.0. If a copy of the MPL was not distributed with this 7 * file, You can obtain one at http://mozilla.org/MPL/2.0/. 8 * 9 * This file incorporates work covered by the following license notice: 10 * 11 * Licensed to the Apache Software Foundation (ASF) under one or more 12 * contributor license agreements. See the NOTICE file distributed 13 * with this work for additional information regarding copyright 14 * ownership. The ASF licenses this file to you under the Apache 15 * License, Version 2.0 (the "License"); you may not use this file 16 * except in compliance with the License. You may obtain a copy of 17 * the License at http://www.apache.org/licenses/LICENSE-2.0 . 18 */ 19 20 #ifndef INCLUDED_SDEXT_SOURCE_PRESENTER_PRESENTERPANECONTAINER_HXX 21 #define INCLUDED_SDEXT_SOURCE_PRESENTER_PRESENTERPANECONTAINER_HXX 22 23 #include "PresenterPaneBase.hxx" 24 #include <com/sun/star/awt/XWindow.hpp> 25 #include <com/sun/star/drawing/XPresenterHelper.hpp> 26 #include <com/sun/star/drawing/framework/XResourceId.hpp> 27 #include <com/sun/star/drawing/framework/XView.hpp> 28 #include <com/sun/star/uno/XComponentContext.hpp> 29 #include <cppuhelper/basemutex.hxx> 30 #include <cppuhelper/compbase.hxx> 31 #include <rtl/ref.hxx> 32 33 #include <functional> 34 #include <memory> 35 #include <vector> 36 37 namespace sdext::presenter { 38 39 class PresenterPaneBase; 40 class PresenterSprite; 41 42 typedef ::cppu::WeakComponentImplHelper < 43 css::lang::XEventListener 44 > PresenterPaneContainerInterfaceBase; 45 46 /** This class could also be called PresenterPaneAndViewContainer because it 47 stores not only references to all panes that belong to the presenter 48 screen but stores the views displayed in these panes as well. 49 */ 50 class PresenterPaneContainer 51 : private ::cppu::BaseMutex, 52 public PresenterPaneContainerInterfaceBase 53 { 54 public: 55 explicit PresenterPaneContainer ( 56 const css::uno::Reference<css::uno::XComponentContext>& rxContext); 57 virtual ~PresenterPaneContainer() override; 58 PresenterPaneContainer(const PresenterPaneContainer&) = delete; 59 PresenterPaneContainer& operator=(const PresenterPaneContainer&) = delete; 60 61 virtual void SAL_CALL disposing() override; 62 63 typedef ::std::function<void (const css::uno::Reference<css::drawing::framework::XView>&)> 64 ViewInitializationFunction; 65 66 /** Each pane descriptor holds references to one pane and the view 67 displayed in this pane as well as the other information that is used 68 to manage the pane window like an XWindow reference, the title, and 69 the coordinates. 70 71 A initialization function for the view is stored as well. This 72 function is executed as soon as a view is created. 73 */ 74 class PaneDescriptor 75 { 76 public: 77 css::uno::Reference<css::drawing::framework::XResourceId> mxPaneId; 78 OUString msViewURL; 79 ::rtl::Reference<PresenterPaneBase> mxPane; 80 css::uno::Reference<css::drawing::framework::XView> mxView; 81 css::uno::Reference<css::awt::XWindow> mxContentWindow; 82 css::uno::Reference<css::awt::XWindow> mxBorderWindow; 83 OUString msTitleTemplate; 84 OUString msAccessibleTitleTemplate; 85 OUString msTitle; 86 ViewInitializationFunction maViewInitialization; 87 bool mbIsActive; 88 bool mbIsOpaque; 89 bool mbIsSprite; 90 91 void SetActivationState (const bool bIsActive); 92 }; 93 typedef std::shared_ptr<PaneDescriptor> SharedPaneDescriptor; 94 typedef ::std::vector<SharedPaneDescriptor> PaneList; 95 PaneList maPanes; 96 97 void PreparePane ( 98 const css::uno::Reference<css::drawing::framework::XResourceId>& rxPaneId, 99 const OUString& rsViewURL, 100 const OUString& rsTitle, 101 const OUString& rsAccessibleTitle, 102 const bool bIsOpaque, 103 const ViewInitializationFunction& rViewInitialization); 104 105 SharedPaneDescriptor StorePane ( 106 const rtl::Reference<PresenterPaneBase>& rxPane); 107 108 SharedPaneDescriptor StoreBorderWindow( 109 const css::uno::Reference<css::drawing::framework::XResourceId>& rxPaneId, 110 const css::uno::Reference<css::awt::XWindow>& rxBorderWindow); 111 112 SharedPaneDescriptor StoreView ( 113 const css::uno::Reference<css::drawing::framework::XView>& rxView); 114 115 SharedPaneDescriptor RemovePane ( 116 const css::uno::Reference<css::drawing::framework::XResourceId>& rxPaneId); 117 118 SharedPaneDescriptor RemoveView ( 119 const css::uno::Reference<css::drawing::framework::XView>& rxView); 120 121 /** Find the pane whose border window is identical to the given border 122 window. 123 */ 124 SharedPaneDescriptor FindBorderWindow ( 125 const css::uno::Reference<css::awt::XWindow>& rxBorderWindow); 126 127 /** Find the pane whose border window is identical to the given content 128 window. 129 */ 130 SharedPaneDescriptor FindContentWindow ( 131 const css::uno::Reference<css::awt::XWindow>& rxBorderWindow); 132 133 /** Find the pane whose pane URL is identical to the given URL string. 134 */ 135 SharedPaneDescriptor FindPaneURL (const OUString& rsPaneURL); 136 137 /** Find the pane whose resource id is identical to the given one. 138 */ 139 SharedPaneDescriptor FindPaneId (const css::uno::Reference< 140 css::drawing::framework::XResourceId>& rxPaneId); 141 142 SharedPaneDescriptor FindViewURL (const OUString& rsViewURL); 143 144 OUString GetPaneURLForViewURL (const OUString& rsViewURL); 145 146 void ToTop (const SharedPaneDescriptor& rpDescriptor); 147 148 // XEventListener 149 150 virtual void SAL_CALL disposing ( 151 const css::lang::EventObject& rEvent) override; 152 153 private: 154 css::uno::Reference<css::drawing::XPresenterHelper> mxPresenterHelper; 155 }; 156 157 } // end of namespace ::sdext::presenter 158 159 #endif 160 161 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 162