Coverage Report

Created: 2026-02-14 09:37

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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: */