/src/libreoffice/include/svx/fmtools.hxx
Line | Count | Source |
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_SVX_FMTOOLS_HXX |
20 | | #define INCLUDED_SVX_FMTOOLS_HXX |
21 | | |
22 | | #include <config_options.h> |
23 | | #include <svx/svxdllapi.h> |
24 | | |
25 | | #include <com/sun/star/sdbcx/XColumnsSupplier.hpp> |
26 | | #include <com/sun/star/sdbc/XResultSet.hpp> |
27 | | #include <com/sun/star/sdbcx/XRowLocate.hpp> |
28 | | #include <com/sun/star/lang/EventObject.hpp> |
29 | | #include <com/sun/star/lang/XEventListener.hpp> |
30 | | |
31 | | #include <rtl/ref.hxx> |
32 | | #include <cppuhelper/implbase.hxx> |
33 | | #include <o3tl/sorted_vector.hxx> |
34 | | #include <mutex> |
35 | | |
36 | | namespace com::sun::star::awt { class XWindow; } |
37 | | namespace com::sun::star::beans { class XPropertySet; } |
38 | | namespace com::sun::star::container { class XIndexAccess; } |
39 | | namespace com::sun::star::container { class XNameAccess; } |
40 | | namespace com::sun::star::lang { class XComponent; } |
41 | | namespace com::sun::star::lang { class XServiceInfo; } |
42 | | namespace com::sun::star::sdbc { class SQLException; } |
43 | | namespace com::sun::star::sdbc { class XRowSet; } |
44 | | namespace com::sun::star::sdb { class SQLContext; } |
45 | | namespace com::sun::star::sdb { struct SQLErrorEvent; } |
46 | | enum class SdrObjKind : sal_uInt16; |
47 | | |
48 | | // common types |
49 | | |
50 | | // displaying a database exception for the user |
51 | | // display info about a simple css::sdbc::SQLException |
52 | | void displayException(const css::sdbc::SQLException&, const css::uno::Reference<css::awt::XWindow>& rParent); |
53 | | SVXCORE_DLLPUBLIC void displayException(const css::sdb::SQLContext&, const css::uno::Reference<css::awt::XWindow>& rParent); |
54 | | void displayException(const css::sdb::SQLErrorEvent&, const css::uno::Reference<css::awt::XWindow>& rParent); |
55 | | void displayException(const css::uno::Any&, const css::uno::Reference<css::awt::XWindow>& rParent); |
56 | | |
57 | | sal_Int32 getElementPos(const css::uno::Reference< css::container::XIndexAccess>& xCont, const css::uno::Reference< css::uno::XInterface>& xElement); |
58 | | |
59 | | SVXCORE_DLLPUBLIC OUString getLabelName(const css::uno::Reference< css::beans::XPropertySet>& xControlModel); |
60 | | |
61 | | |
62 | | // = class CursorWrapper - a helper class which works in common with a css::uno::Reference<XDatabaseUpdateCursor>, |
63 | | // XDatabaseBookmarkCursor and XDatabaseDirectCursor each |
64 | | |
65 | | |
66 | | class SAL_WARN_UNUSED CursorWrapper |
67 | | { |
68 | | private: |
69 | | css::uno::Reference< css::uno::XInterface> m_xGeneric; |
70 | | css::uno::Reference< css::sdbc::XResultSet> m_xMoveOperations; |
71 | | css::uno::Reference< css::sdbcx::XRowLocate> m_xBookmarkOperations; |
72 | | css::uno::Reference< css::sdbcx::XColumnsSupplier> m_xColumnsSupplier; |
73 | | css::uno::Reference< css::beans::XPropertySet> m_xPropertyAccess; |
74 | | |
75 | | public: |
76 | | // Construction/Destruction |
77 | | CursorWrapper(const css::uno::Reference< css::sdbc::XRowSet>& _rxCursor, bool bUseCloned = false); |
78 | | UNLESS_MERGELIBS(SVXCORE_DLLPUBLIC) CursorWrapper(const css::uno::Reference< css::sdbc::XResultSet>& _rxCursor, bool bUseCloned = false); |
79 | | // if bUseCloned == sal_True, the cursor is first doubled over the XCloneable interface (which it must implement) |
80 | | // and then used |
81 | | |
82 | | friend bool operator==(const CursorWrapper& lhs, const CursorWrapper& rhs) |
83 | 0 | { |
84 | 0 | return lhs.m_xGeneric.get() == rhs.m_xGeneric.get(); |
85 | 0 | } |
86 | | |
87 | 0 | bool is() const { return m_xMoveOperations.is(); } |
88 | 0 | bool Is() const { return m_xMoveOperations.is(); } |
89 | | |
90 | 0 | operator const css::uno::Reference< css::uno::XInterface>& () const{ return m_xGeneric; } |
91 | | |
92 | | // 'Conversions' |
93 | | CursorWrapper& operator=(const css::uno::Reference< css::sdbc::XRowSet>& xCursor); |
94 | 0 | operator const css::uno::Reference< css::sdbc::XResultSet>& () const { return m_xMoveOperations; } |
95 | | |
96 | 0 | const css::uno::Reference< css::beans::XPropertySet >& getPropertySet() const { return m_xPropertyAccess; } |
97 | | |
98 | | // css::uno::Reference< css::sdbcx::XRowLocate> |
99 | | /// @throws css::sdbc::SQLException |
100 | | /// @throws css::uno::RuntimeException |
101 | | css::uno::Any getBookmark() |
102 | 0 | { return m_xBookmarkOperations->getBookmark(); } |
103 | | /// @throws css::sdbc::SQLException |
104 | | /// @throws css::uno::RuntimeException |
105 | 0 | bool moveToBookmark(const css::uno::Any& bookmark) { return m_xBookmarkOperations->moveToBookmark(bookmark); } |
106 | | |
107 | | // css::sdbc::XResultSet |
108 | 0 | bool isBeforeFirst() const { return m_xMoveOperations->isBeforeFirst(); } |
109 | 0 | bool isAfterLast() const { return m_xMoveOperations->isAfterLast(); } |
110 | 0 | bool isFirst() const { return m_xMoveOperations->isFirst(); } |
111 | 0 | bool isLast() const { return m_xMoveOperations->isLast(); } |
112 | 0 | void beforeFirst() { m_xMoveOperations->beforeFirst(); } |
113 | 0 | bool first() { return m_xMoveOperations->first(); } |
114 | 0 | bool last() { return m_xMoveOperations->last(); } |
115 | 0 | sal_Int32 getRow() const { return m_xMoveOperations->getRow(); } |
116 | 0 | bool absolute(sal_Int32 nPosition) { return m_xMoveOperations->absolute(nPosition); } |
117 | 0 | bool relative(sal_Int32 nCount) { return m_xMoveOperations->relative(nCount); } |
118 | 0 | bool previous() { return m_xMoveOperations->previous(); } |
119 | 0 | bool next() { return m_xMoveOperations->next(); } |
120 | 0 | void refreshRow() { m_xMoveOperations->refreshRow(); } |
121 | 0 | bool rowDeleted() { return m_xMoveOperations->rowDeleted(); } |
122 | | // css::sdbcx::XColumnsSupplier |
123 | | /// @throws css::uno::RuntimeException |
124 | 0 | css::uno::Reference< css::container::XNameAccess> getColumns() const { return m_xColumnsSupplier->getColumns(); } |
125 | | private: |
126 | | void ImplConstruct(const css::uno::Reference< css::sdbc::XResultSet>& _rxCursor, bool bUseCloned); |
127 | | }; |
128 | | |
129 | | |
130 | | class FmXDisposeMultiplexer; |
131 | | class SAL_WARN_UNUSED FmXDisposeListener |
132 | | { |
133 | | friend class FmXDisposeMultiplexer; |
134 | | |
135 | | rtl::Reference<FmXDisposeMultiplexer> m_pAdapter; |
136 | | std::mutex m_aMutex; |
137 | | |
138 | | public: |
139 | | virtual ~FmXDisposeListener(); |
140 | | |
141 | | /// @throws css::uno::RuntimeException |
142 | | virtual void disposing(sal_Int16 _nId) = 0; |
143 | | |
144 | | protected: |
145 | | void setAdapter(FmXDisposeMultiplexer* pAdapter); |
146 | | }; |
147 | | |
148 | | class SAL_WARN_UNUSED FmXDisposeMultiplexer final : public cppu::WeakImplHelper< css::lang::XEventListener > |
149 | | { |
150 | | css::uno::Reference< css::lang::XComponent> m_xObject; |
151 | | FmXDisposeListener* m_pListener; |
152 | | |
153 | | virtual ~FmXDisposeMultiplexer() override; |
154 | | public: |
155 | | FmXDisposeMultiplexer(FmXDisposeListener* _pListener, const css::uno::Reference< css::lang::XComponent>& _rxObject); |
156 | | |
157 | | // css::lang::XEventListener |
158 | | virtual void SAL_CALL disposing( const css::lang::EventObject& Source ) override; |
159 | | |
160 | | void dispose(); |
161 | | }; |
162 | | |
163 | | SdrObjKind getControlTypeByObject(const css::uno::Reference< css::lang::XServiceInfo>& _rxObject); |
164 | | // get the object type (OBJ_FM_...) from the services the object supports |
165 | | |
166 | | |
167 | | bool isRowSetAlive(const css::uno::Reference< css::uno::XInterface>& _rxRowSet); |
168 | | // checks if the css::sdbcx::XColumnsSupplier provided by _rxRowSet supplies any columns |
169 | | |
170 | | |
171 | | typedef ::o3tl::sorted_vector< css::uno::Reference< css::uno::XInterface > > InterfaceBag; |
172 | | |
173 | | #endif // INCLUDED_SVX_FMTOOLS_HXX |
174 | | |
175 | | /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |