xref: /core/sw/inc/unobaseclass.hxx (revision 47c830d2)
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 #ifndef INCLUDED_SW_INC_UNOBASECLASS_HXX
20 #define INCLUDED_SW_INC_UNOBASECLASS_HXX
21 
22 #include <memory>
23 #include <com/sun/star/lang/XUnoTunnel.hpp>
24 #include <com/sun/star/lang/XServiceInfo.hpp>
25 #include <com/sun/star/container/XEnumeration.hpp>
26 
27 #include <cppuhelper/implbase.hxx>
28 #include <vcl/svapp.hxx>
29 
30 class SfxPoolItem;
31 class SwClient;
32 class SwDoc;
33 class SwUnoTableCursor;
34 
35 typedef ::cppu::WeakImplHelper
36 <   css::lang::XServiceInfo
37 ,   css::container::XEnumeration
38 >
39 SwSimpleEnumeration_Base;
40 
41 enum class CursorType
42 {
43     Body,
44     Frame,
45     TableText,
46     Footnote,
47     Header,
48     Footer,
49     Redline,
50     All,         // for Search&Replace
51     Selection,   // create a paragraph enumeration from
52                         // a text range or cursor
53     SelectionInTable,
54     Meta,         // meta/meta-field
55 };
56 
57 /*
58     Start/EndAction or Start/EndAllAction
59 */
60 class UnoActionContext
61 {
62 private:
63         SwDoc * m_pDoc;
64 
65 public:
66         UnoActionContext(SwDoc *const pDoc);
67         ~UnoActionContext() COVERITY_NOEXCEPT_FALSE;
68 };
69 
70 /*
71     interrupt Actions for a little while
72     FIXME: this is a vile abomination that may cause recursive layout actions!
73     C'thulhu fhtagn.
74 */
75 class UnoActionRemoveContext
76 {
77 private:
78     SwDoc *const m_pDoc;
79 
80 public:
81     UnoActionRemoveContext(SwDoc *const pDoc);
82     UnoActionRemoveContext(SwUnoTableCursor const& rCursor);
83     ~UnoActionRemoveContext() COVERITY_NOEXCEPT_FALSE;
84 };
85 
86 /// helper function for implementing SwClient::Modify
87 void ClientModify(SwClient* pClient, const SfxPoolItem *pOld, const SfxPoolItem *pNew);
88 
89 namespace sw {
90     template<typename T>
91     struct UnoImplPtrDeleter
92     {
93         void operator()(T* pUnoImpl)
94         {
95             SolarMutexGuard g; // #i105557#: call dtor with locked solar mutex
96             delete pUnoImpl;
97         }
98     };
99     /// Smart pointer class ensuring that the pointed object is deleted with a locked SolarMutex.
100     template<typename T>
101     using UnoImplPtr = std::unique_ptr<T, UnoImplPtrDeleter<T> >;
102 
103     template< class C > C *
104     UnoTunnelGetImplementation( css::uno::Reference< css::lang::XUnoTunnel > const & xUnoTunnel)
105     {
106         if (!xUnoTunnel.is()) { return 0; }
107         C *const pC( reinterpret_cast< C* >(
108                         ::sal::static_int_cast< sal_IntPtr >(
109                             xUnoTunnel->getSomething(C::getUnoTunnelId()))));
110         return pC;
111     }
112 
113     template< class C > sal_Int64
114     UnoTunnelImpl(const css::uno::Sequence< sal_Int8 > & rId,
115                   C *const pThis)
116     {
117         if ((rId.getLength() == 16) &&
118             (0 == memcmp(C::getUnoTunnelId().getConstArray(),
119                                     rId.getConstArray(), 16)))
120         {
121             return ::sal::static_int_cast< sal_Int64 >(
122                     reinterpret_cast< sal_IntPtr >(pThis) );
123         }
124         return 0;
125     }
126 
127     css::uno::Sequence< OUString >
128     GetSupportedServiceNamesImpl(
129             size_t const nServices, char const*const pServices[]);
130 
131 } // namespace sw
132 
133 #endif // INCLUDED_SW_INC_UNOBASECLASS_HXX
134 
135 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
136