1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
|
/* -*- 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 .
*/
#pragma once
#include <com/sun/star/lang/XMultiComponentFactory.hpp>
#include <com/sun/star/beans/XPropertyChangeListener.hpp>
#include <com/sun/star/frame/XController.hpp>
#include <com/sun/star/uno/XComponentContext.hpp>
#include <connectivity/dbtools.hxx>
#include <tools/link.hxx>
#include <cppuhelper/implbase.hxx>
#include <rtl/ref.hxx>
#include <salhelper/simplereferenceobject.hxx>
namespace pcr
{
class ISQLCommandAdapter;
//= SQLCommandDesigner
typedef ::cppu::WeakImplHelper < css::beans::XPropertyChangeListener
> SQLCommandDesigner_Base;
/** encapsulates the code for calling and managing a query design frame, used
for interactively designing the Command property of a ->RowSet
*/
class SQLCommandDesigner final : public SQLCommandDesigner_Base
{
private:
css::uno::Reference< css::uno::XComponentContext > m_xContext;
css::uno::Reference< css::lang::XMultiComponentFactory > m_xORB;
::dbtools::SharedConnection m_xConnection;
css::uno::Reference< css::frame::XController > m_xDesigner;
::rtl::Reference< ISQLCommandAdapter > m_xObjectAdapter;
Link<SQLCommandDesigner&,void> m_aCloseLink;
public:
/** creates the instance, and immediately opens the SQL command design frame
@param _rxContext
our component context. Must not be <NULL/>, and must provide a non-<NULL/> XMultiComponentFactory
@param _rxPropertyAdapter
an adapter to the object's SQL command related properties
@param _rConnection
the current connection of ->_rxRowSet. Must not be <NULL/>.
@param _rCloseLink
link to call when the component has been closed
@throws css::lang::NullPointerException
if any of the arguments (except ->_rCloseLink) is <NULL/>, or if the component context
does not provide a valid component factory.
*/
SQLCommandDesigner(
const css::uno::Reference< css::uno::XComponentContext >& _rxContext,
const ::rtl::Reference< ISQLCommandAdapter >& _rxPropertyAdapter,
::dbtools::SharedConnection _aConnection,
const Link<SQLCommandDesigner&,void>& _rCloseLink
);
/** determines whether the SQL Command designer is currently active, i.e.
if there currently exists a frame which allows the user entering the SQL command
*/
bool isActive() const { return m_xDesigner.is(); }
/** returns the property adapter used by the instance
*/
const ::rtl::Reference< ISQLCommandAdapter >& getPropertyAdapter() const { return m_xObjectAdapter; }
/** raises the designer window to top
@precond
the designer is active (->isActive)
@precond
the instance is not disposed
*/
void raise() const;
/** suspends the designer
@precond
the designer is active (->isActive)
@precond
the instance is not disposed
*/
bool suspend() const;
/** disposes the instance so that it becomes non-functional
*/
void dispose();
private:
// XPropertyChangeListener
virtual void SAL_CALL propertyChange( const css::beans::PropertyChangeEvent& evt ) override;
// XEventListener
virtual void SAL_CALL disposing( const css::lang::EventObject& Source ) override;
virtual ~SQLCommandDesigner() override;
/** opens a new frame for interactively designing an SQL command
@precond
the designer is not currently active (see ->isActive)
@precond
->m_xConnection is not <NULL/>
*/
void impl_doOpenDesignerFrame_nothrow();
/** impl-version of ->raise
*/
void impl_raise_nothrow() const;
/** determines whether we are already disposed
*/
bool impl_isDisposed() const
{
return !m_xContext.is();
}
/** checks whether we are already disposed
@throws css::lang::DisposedException
if we in fact are disposed
*/
void impl_checkDisposed_throw() const;
/** create an empty top-level frame, which does not belong to the desktop's frame list
@precond
->m_xORB is not <NULL/>
*/
css::uno::Reference< css::frame::XFrame >
impl_createEmptyParentlessTask_nothrow() const;
/** closes the component denoted by m_xDesigner
@precond
our designer component is actually active (->isActive)
@precond
we're not disposed already
*/
void impl_closeDesigner_nothrow();
/** suspends our designer component
@precond
the designer component is actually active (->isActive)
@return
<TRUE/> if the suspension was successful, <FALSE/> if it was vetoed
*/
bool impl_trySuspendDesigner_nothrow() const;
SQLCommandDesigner( const SQLCommandDesigner& ) = delete;
SQLCommandDesigner& operator=( const SQLCommandDesigner& ) = delete;
};
//= ISQLCommandAdapter
/** an adapter to forward changed SQL command property values to a component
*/
class ISQLCommandAdapter : public salhelper::SimpleReferenceObject
{
public:
/// retrieves the current SQL command of the component
virtual OUString getSQLCommand() const = 0;
/// retrieves the current value of the EscapeProcessing property of the component
virtual bool getEscapeProcessing() const = 0;
/// sets a new SQL command
virtual void setSQLCommand( const OUString& _rCommand ) const = 0;
/// sets a new EscapeProcessing property value
virtual void setEscapeProcessing( const bool _bEscapeProcessing ) const = 0;
virtual ~ISQLCommandAdapter() override;
};
} // namespace pcr
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|