LibreOffice Module svx (master)  1
fmtools.cxx
Go to the documentation of this file.
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 
21 #include <fmprop.hxx>
22 #include <fmservs.hxx>
23 #include <svx/fmtools.hxx>
24 #include <svx/fmglob.hxx>
25 
26 #include <com/sun/star/awt/LineEndFormat.hpp>
27 #include <com/sun/star/beans/PropertyAttribute.hpp>
28 #include <com/sun/star/beans/XIntrospection.hpp>
29 #include <com/sun/star/container/XChild.hpp>
30 #include <com/sun/star/container/XIndexAccess.hpp>
31 #include <com/sun/star/form/XForm.hpp>
32 #include <com/sun/star/form/XFormComponent.hpp>
33 #include <com/sun/star/form/XGridColumnFactory.hpp>
34 #include <com/sun/star/io/XActiveDataSink.hpp>
35 #include <com/sun/star/io/XActiveDataSource.hpp>
36 #include <com/sun/star/io/XObjectInputStream.hpp>
37 #include <com/sun/star/io/XObjectOutputStream.hpp>
38 #include <com/sun/star/io/XPersistObject.hpp>
39 #include <com/sun/star/lang/Locale.hpp>
40 #include <com/sun/star/lang/XServiceInfo.hpp>
41 #include <com/sun/star/sdb/CommandType.hpp>
42 #include <com/sun/star/sdb/ErrorCondition.hpp>
43 #include <com/sun/star/sdb/ErrorMessageDialog.hpp>
44 #include <com/sun/star/sdb/SQLContext.hpp>
45 #include <com/sun/star/sdb/SQLErrorEvent.hpp>
46 #include <com/sun/star/sdb/XCompletedConnection.hpp>
47 #include <com/sun/star/sdb/XQueriesSupplier.hpp>
48 #include <com/sun/star/sdb/XResultSetAccess.hpp>
49 #include <com/sun/star/sdbc/DataType.hpp>
50 #include <com/sun/star/sdbc/XDataSource.hpp>
51 #include <com/sun/star/sdbcx/Privilege.hpp>
52 #include <com/sun/star/sdbcx/XTablesSupplier.hpp>
53 #include <com/sun/star/task/XInteractionHandler.hpp>
54 #include <com/sun/star/ui/dialogs/XExecutableDialog.hpp>
55 #include <com/sun/star/uno/XNamingService.hpp>
56 #include <com/sun/star/util/Language.hpp>
57 #include <com/sun/star/util/NumberFormat.hpp>
58 #include <com/sun/star/util/XCloneable.hpp>
59 #include <com/sun/star/util/XNumberFormatTypes.hpp>
60 #include <com/sun/star/util/XNumberFormats.hpp>
61 #include <com/sun/star/util/XNumberFormatsSupplier.hpp>
62 #include <com/sun/star/util/XNumberFormatter.hpp>
63 
64 #include <basic/sbxvar.hxx>
65 #include <svl/eitem.hxx>
66 #include <svl/stritem.hxx>
68 #include <comphelper/property.hxx>
69 #include <comphelper/types.hxx>
71 #include <connectivity/dbtools.hxx>
73 #include <osl/diagnose.h>
74 #include <rtl/math.hxx>
75 #include <sfx2/bindings.hxx>
77 #include <tools/debug.hxx>
78 #include <tools/diagnose_ex.h>
79 #include <vcl/stdtext.hxx>
80 #include <vcl/svapp.hxx>
81 
82 #include <algorithm>
83 
84 using namespace ::com::sun::star::uno;
85 using namespace ::com::sun::star::util;
86 using namespace ::com::sun::star::lang;
87 using namespace ::com::sun::star::awt;
88 using namespace ::com::sun::star::beans;
89 using namespace ::com::sun::star::container;
90 using namespace ::com::sun::star::ui::dialogs;
91 using namespace ::com::sun::star::sdbc;
92 using namespace ::com::sun::star::sdbcx;
93 using namespace ::com::sun::star::sdb;
94 using namespace ::com::sun::star::task;
95 using namespace ::com::sun::star::form;
96 using namespace ::svxform;
97 
98 
99 namespace
100 {
101  bool lcl_shouldDisplayError( const Any& _rError )
102  {
103  SQLException aError;
104  if ( !( _rError >>= aError ) )
105  return true;
106 
107  if ( ! aError.Message.startsWith( "[OOoBase]" ) )
108  // it is an exception *not* thrown by an OOo Base core component
109  return true;
110 
111  // the only exception we do not display ATM is a RowSetVetoException, which
112  // has been raised because an XRowSetApprovalListener vetoed a change
113  if ( aError.ErrorCode + ErrorCondition::ROW_SET_OPERATION_VETOED == 0 )
114  return false;
115 
116  // everything else is to be displayed
117  return true;
118  }
119 }
120 
121 
122 void displayException(const Any& _rExcept, vcl::Window* _pParent)
123 {
124  // check whether we need to display it
125  if ( !lcl_shouldDisplayError( _rExcept ) )
126  return;
127 
128  try
129  {
130  // the parent window
131  vcl::Window* pParentWindow = _pParent ? _pParent : Application::GetDefDialogParent();
132  Reference< XWindow > xParentWindow = VCLUnoHelper::GetInterface(pParentWindow);
133 
134  Reference< XExecutableDialog > xErrorDialog = ErrorMessageDialog::create(::comphelper::getProcessComponentContext(), "", xParentWindow, _rExcept);
135  xErrorDialog->execute();
136  }
137  catch(const Exception&)
138  {
139  OSL_FAIL("displayException: could not display the error message!");
140  }
141 }
142 
143 
144 void displayException(const css::sdbc::SQLException& _rExcept, vcl::Window* _pParent)
145 {
146  displayException(makeAny(_rExcept), _pParent);
147 }
148 
149 
150 void displayException(const css::sdb::SQLContext& _rExcept, vcl::Window* _pParent)
151 {
152  displayException(makeAny(_rExcept), _pParent);
153 }
154 
155 
156 void displayException(const css::sdb::SQLErrorEvent& _rEvent, vcl::Window* _pParent)
157 {
158  displayException(_rEvent.Reason, _pParent);
159 }
160 
161 
162 sal_Int32 getElementPos(const Reference< css::container::XIndexAccess>& xCont, const Reference< XInterface >& xElement)
163 {
164  sal_Int32 nIndex = -1;
165  if (!xCont.is())
166  return nIndex;
167 
168 
169  Reference< XInterface > xNormalized( xElement, UNO_QUERY );
170  DBG_ASSERT( xNormalized.is(), "getElementPos: invalid element!" );
171  if ( xNormalized.is() )
172  {
173  // find child position
174  nIndex = xCont->getCount();
175  while (nIndex--)
176  {
177  try
178  {
179  Reference< XInterface > xCurrent(xCont->getByIndex( nIndex ),UNO_QUERY);
180  DBG_ASSERT( xCurrent.get() == Reference< XInterface >( xCurrent, UNO_QUERY ).get(),
181  "getElementPos: container element not normalized!" );
182  if ( xNormalized.get() == xCurrent.get() )
183  break;
184  }
185  catch(Exception&)
186  {
187  TOOLS_WARN_EXCEPTION( "svx", "getElementPos" );
188  }
189 
190  }
191  }
192  return nIndex;
193 }
194 
195 
196 OUString getLabelName(const Reference< css::beans::XPropertySet>& xControlModel)
197 {
198  if (!xControlModel.is())
199  return OUString();
200 
201  if (::comphelper::hasProperty(FM_PROP_CONTROLLABEL, xControlModel))
202  {
203  Reference< css::beans::XPropertySet> xLabelSet;
204  xControlModel->getPropertyValue(FM_PROP_CONTROLLABEL) >>= xLabelSet;
205  if (xLabelSet.is() && ::comphelper::hasProperty(FM_PROP_LABEL, xLabelSet))
206  {
207  Any aLabel( xLabelSet->getPropertyValue(FM_PROP_LABEL) );
208  if ((aLabel.getValueTypeClass() == TypeClass_STRING) && !::comphelper::getString(aLabel).isEmpty())
209  return ::comphelper::getString(aLabel);
210  }
211  }
212 
213  return ::comphelper::getString(xControlModel->getPropertyValue(FM_PROP_CONTROLSOURCE));
214 }
215 
216 
217 // = CursorWrapper
218 
219 CursorWrapper::CursorWrapper(const Reference< css::sdbc::XRowSet>& _rxCursor, bool bUseCloned)
220 {
221  ImplConstruct(Reference< css::sdbc::XResultSet>(_rxCursor, UNO_QUERY), bUseCloned);
222 }
223 
224 
225 CursorWrapper::CursorWrapper(const Reference< css::sdbc::XResultSet>& _rxCursor, bool bUseCloned)
226 {
227  ImplConstruct(_rxCursor, bUseCloned);
228 }
229 
230 
231 void CursorWrapper::ImplConstruct(const Reference< css::sdbc::XResultSet>& _rxCursor, bool bUseCloned)
232 {
233  if (bUseCloned)
234  {
235  Reference< css::sdb::XResultSetAccess> xAccess(_rxCursor, UNO_QUERY);
236  try
237  {
238  m_xMoveOperations = xAccess.is() ? xAccess->createResultSet() : Reference< css::sdbc::XResultSet>();
239  }
240  catch(Exception&)
241  {
242  }
243  }
244  else
245  m_xMoveOperations = _rxCursor;
246 
247  m_xBookmarkOperations.set(m_xMoveOperations, css::uno::UNO_QUERY);
248  m_xColumnsSupplier.set(m_xMoveOperations, css::uno::UNO_QUERY);
249  m_xPropertyAccess.set(m_xMoveOperations, css::uno::UNO_QUERY);
250 
251  if ( !m_xMoveOperations.is() || !m_xBookmarkOperations.is() || !m_xColumnsSupplier.is() || !m_xPropertyAccess.is() )
252  { // all or nothing !!
253  m_xMoveOperations = nullptr;
254  m_xBookmarkOperations = nullptr;
255  m_xColumnsSupplier = nullptr;
256  }
257  else
259 }
260 
261 CursorWrapper& CursorWrapper::operator=(const Reference< css::sdbc::XRowSet>& _rxCursor)
262 {
263  m_xMoveOperations.set(_rxCursor, UNO_QUERY);
264  m_xBookmarkOperations.set(_rxCursor, UNO_QUERY);
265  m_xColumnsSupplier.set(_rxCursor, UNO_QUERY);
266  if (!m_xMoveOperations.is() || !m_xBookmarkOperations.is() || !m_xColumnsSupplier.is())
267  { // all or nothing !!
268  m_xMoveOperations = nullptr;
269  m_xBookmarkOperations = nullptr;
270  m_xColumnsSupplier = nullptr;
271  }
272  return *this;
273 }
274 
276 {
277  setAdapter(nullptr);
278 }
279 
281 {
282  ::osl::MutexGuard aGuard(m_aMutex);
283  m_pAdapter = pAdapter;
284 }
285 
286 FmXDisposeMultiplexer::FmXDisposeMultiplexer(FmXDisposeListener* _pListener, const Reference< css::lang::XComponent>& _rxObject)
287  :m_xObject(_rxObject)
288  ,m_pListener(_pListener)
289 {
290  m_pListener->setAdapter(this);
291 
292  if (m_xObject.is())
293  m_xObject->addEventListener(this);
294 }
295 
297 {
298 }
299 
300 // css::lang::XEventListener
301 
302 void FmXDisposeMultiplexer::disposing(const css::lang::EventObject& /*Source*/)
303 {
304  Reference< css::lang::XEventListener> xPreventDelete(this);
305 
306  if (m_pListener)
307  {
309  m_pListener->setAdapter(nullptr);
310  m_pListener = nullptr;
311  }
312  m_xObject = nullptr;
313 }
314 
315 
317 {
318  if (m_xObject.is())
319  {
320  Reference< css::lang::XEventListener> xPreventDelete(this);
321 
322  m_xObject->removeEventListener(this);
323  m_xObject = nullptr;
324 
325  m_pListener->setAdapter(nullptr);
326  m_pListener = nullptr;
327  }
328 }
329 
330 
331 sal_Int16 getControlTypeByObject(const Reference< css::lang::XServiceInfo>& _rxObject)
332 {
333  // ask for the persistent service name
334  Reference< css::io::XPersistObject> xPersistence(_rxObject, UNO_QUERY);
335  DBG_ASSERT(xPersistence.is(), "::getControlTypeByObject : argument should be a css::io::XPersistObject !");
336  if (!xPersistence.is())
337  return OBJ_FM_CONTROL;
338 
339  OUString sPersistentServiceName = xPersistence->getServiceName();
340  if (sPersistentServiceName == FM_COMPONENT_EDIT) // 5.0-Name
341  {
342  // may be a simple edit field or a formatted field, dependent of the supported services
343  if (_rxObject->supportsService(FM_SUN_COMPONENT_FORMATTEDFIELD))
344  return OBJ_FM_FORMATTEDFIELD;
345  return OBJ_FM_EDIT;
346  }
347  if (sPersistentServiceName == FM_COMPONENT_TEXTFIELD)
348  return OBJ_FM_EDIT;
349  if (sPersistentServiceName == FM_COMPONENT_COMMANDBUTTON)
350  return OBJ_FM_BUTTON;
351  if (sPersistentServiceName == FM_COMPONENT_FIXEDTEXT)
352  return OBJ_FM_FIXEDTEXT;
353  if (sPersistentServiceName == FM_COMPONENT_LISTBOX)
354  return OBJ_FM_LISTBOX;
355  if (sPersistentServiceName == FM_COMPONENT_CHECKBOX)
356  return OBJ_FM_CHECKBOX;
357  if (sPersistentServiceName == FM_COMPONENT_RADIOBUTTON)
358  return OBJ_FM_RADIOBUTTON;
359  if (sPersistentServiceName == FM_COMPONENT_GROUPBOX)
360  return OBJ_FM_GROUPBOX;
361  if (sPersistentServiceName == FM_COMPONENT_COMBOBOX)
362  return OBJ_FM_COMBOBOX;
363  if (sPersistentServiceName == FM_COMPONENT_GRID) // 5.0-Name
364  return OBJ_FM_GRID;
365  if (sPersistentServiceName == FM_COMPONENT_GRIDCONTROL)
366  return OBJ_FM_GRID;
367  if (sPersistentServiceName == FM_COMPONENT_IMAGEBUTTON)
368  return OBJ_FM_IMAGEBUTTON;
369  if (sPersistentServiceName == FM_COMPONENT_FILECONTROL)
370  return OBJ_FM_FILECONTROL;
371  if (sPersistentServiceName == FM_COMPONENT_DATEFIELD)
372  return OBJ_FM_DATEFIELD;
373  if (sPersistentServiceName == FM_COMPONENT_TIMEFIELD)
374  return OBJ_FM_TIMEFIELD;
375  if (sPersistentServiceName == FM_COMPONENT_NUMERICFIELD)
376  return OBJ_FM_NUMERICFIELD;
377  if (sPersistentServiceName == FM_COMPONENT_CURRENCYFIELD)
378  return OBJ_FM_CURRENCYFIELD;
379  if (sPersistentServiceName == FM_COMPONENT_PATTERNFIELD)
380  return OBJ_FM_PATTERNFIELD;
381  if (sPersistentServiceName == FM_COMPONENT_HIDDEN) // 5.0-Name
382  return OBJ_FM_HIDDEN;
383  if (sPersistentServiceName == FM_COMPONENT_HIDDENCONTROL)
384  return OBJ_FM_HIDDEN;
385  if (sPersistentServiceName == FM_COMPONENT_IMAGECONTROL)
386  return OBJ_FM_IMAGECONTROL;
387  if (sPersistentServiceName == FM_COMPONENT_FORMATTEDFIELD)
388  {
389  OSL_FAIL("::getControlTypeByObject : suspicious persistent service name (formatted field) !");
390  // objects with that service name should exist as they aren't compatible with older versions
391  return OBJ_FM_FORMATTEDFIELD;
392  }
393  if ( sPersistentServiceName == FM_SUN_COMPONENT_SCROLLBAR )
394  return OBJ_FM_SCROLLBAR;
395  if ( sPersistentServiceName == FM_SUN_COMPONENT_SPINBUTTON )
396  return OBJ_FM_SPINBUTTON;
397  if ( sPersistentServiceName == FM_SUN_COMPONENT_NAVIGATIONBAR )
398  return OBJ_FM_NAVIGATIONBAR;
399 
400  OSL_FAIL("::getControlTypeByObject : unknown object type !");
401  return OBJ_FM_CONTROL;
402 }
403 
404 
406 {
407  bool bIsAlive = false;
408  Reference< css::sdbcx::XColumnsSupplier> xSupplyCols(_rxRowSet, UNO_QUERY);
409  Reference< css::container::XIndexAccess> xCols;
410  if (xSupplyCols.is())
411  xCols.set(xSupplyCols->getColumns(), UNO_QUERY);
412  if (xCols.is() && (xCols->getCount() > 0))
413  bIsAlive = true;
414 
415  return bIsAlive;
416 }
417 
418 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
virtual void disposing(sal_Int16 _nId)=0
css::uno::Reference< css::sdbc::XResultSet > m_xMoveOperations
Definition: fmtools.hxx:69
sal_Int32 nIndex
virtual ~FmXDisposeListener()
Definition: fmtools.cxx:275
#define FM_COMPONENT_GRIDCONTROL
Definition: fmservs.hxx:41
sal_Int16 getControlTypeByObject(const Reference< css::lang::XServiceInfo > &_rxObject)
Definition: fmtools.cxx:331
#define FM_COMPONENT_COMMANDBUTTON
Definition: fmservs.hxx:38
static vcl::Window * GetDefDialogParent()
#define FM_COMPONENT_FORMATTEDFIELD
Definition: fmservs.hxx:49
#define FM_COMPONENT_RADIOBUTTON
Definition: fmservs.hxx:35
#define FM_PROP_LABEL
Definition: fmprop.hxx:40
css::uno::Reference< css::sdbcx::XRowLocate > m_xBookmarkOperations
Definition: fmtools.hxx:70
const sal_uInt16 OBJ_FM_NAVIGATIONBAR
Definition: fmglob.hxx:48
css::uno::Reference< css::beans::XPropertySet > m_xPropertyAccess
Definition: fmtools.hxx:72
sal_Int32 getElementPos(const Reference< css::container::XIndexAccess > &xCont, const Reference< XInterface > &xElement)
Definition: fmtools.cxx:162
#define FM_COMPONENT_PATTERNFIELD
Definition: fmservs.hxx:48
#define FM_COMPONENT_NUMERICFIELD
Definition: fmservs.hxx:46
const sal_uInt16 OBJ_FM_NUMERICFIELD
Definition: fmglob.hxx:40
void ImplConstruct(const css::uno::Reference< css::sdbc::XResultSet > &_rxCursor, bool bUseCloned)
Definition: fmtools.cxx:231
css::uno::Reference< css::uno::XInterface > m_xGeneric
Definition: fmtools.hxx:68
bool isRowSetAlive(const Reference< XInterface > &_rxRowSet)
Definition: fmtools.cxx:405
#define FM_COMPONENT_TEXTFIELD
Definition: fmservs.hxx:32
#define FM_COMPONENT_GROUPBOX
Definition: fmservs.hxx:36
CursorWrapper(const css::uno::Reference< css::sdbc::XRowSet > &_rxCursor, bool bUseCloned=false)
#define FM_COMPONENT_IMAGEBUTTON
Definition: fmservs.hxx:42
const sal_uInt16 OBJ_FM_IMAGEBUTTON
Definition: fmglob.hxx:36
FmXDisposeMultiplexer(FmXDisposeListener *_pListener, const css::uno::Reference< css::lang::XComponent > &_rxObject)
Definition: fmtools.cxx:286
const sal_uInt16 OBJ_FM_CONTROL
Definition: fmglob.hxx:25
const sal_uInt16 OBJ_FM_PATTERNFIELD
Definition: fmglob.hxx:42
const sal_uInt16 OBJ_FM_EDIT
Definition: fmglob.hxx:27
#define FM_COMPONENT_GRID
Definition: fmservs.hxx:40
rtl::Reference< FmXDisposeMultiplexer > m_pAdapter
Definition: fmtools.hxx:134
css::uno::Reference< css::lang::XComponent > m_xObject
Definition: fmtools.hxx:149
#define FM_COMPONENT_COMBOBOX
Definition: fmservs.hxx:34
#define TOOLS_WARN_EXCEPTION(area, stream)
#define DBG_ASSERT(sCon, aError)
const sal_uInt16 OBJ_FM_GROUPBOX
Definition: fmglob.hxx:34
void displayException(const Any &_rExcept, vcl::Window *_pParent)
Definition: fmtools.cxx:122
#define FM_COMPONENT_LISTBOX
Definition: fmservs.hxx:33
#define FM_COMPONENT_IMAGECONTROL
Definition: fmservs.hxx:52
#define FM_COMPONENT_FILECONTROL
Definition: fmservs.hxx:43
const sal_uInt16 OBJ_FM_FILECONTROL
Definition: fmglob.hxx:37
const sal_uInt16 OBJ_FM_COMBOBOX
Definition: fmglob.hxx:32
void setAdapter(FmXDisposeMultiplexer *pAdapter)
Definition: fmtools.cxx:280
#define FM_COMPONENT_CHECKBOX
Definition: fmservs.hxx:39
const sal_uInt16 OBJ_FM_CHECKBOX
Definition: fmglob.hxx:31
const sal_uInt16 OBJ_FM_SCROLLBAR
Definition: fmglob.hxx:46
virtual void SAL_CALL disposing(const css::lang::EventObject &Source) override
Definition: fmtools.cxx:302
const sal_uInt16 OBJ_FM_FIXEDTEXT
Definition: fmglob.hxx:29
#define FM_SUN_COMPONENT_SPINBUTTON
Definition: fmservs.hxx:77
const sal_uInt16 OBJ_FM_SPINBUTTON
Definition: fmglob.hxx:47
const sal_uInt16 OBJ_FM_GRID
Definition: fmglob.hxx:35
#define FM_COMPONENT_CURRENCYFIELD
Definition: fmservs.hxx:47
#define FM_SUN_COMPONENT_FORMATTEDFIELD
Definition: fmservs.hxx:75
#define FM_COMPONENT_TIMEFIELD
Definition: fmservs.hxx:44
const sal_uInt16 OBJ_FM_RADIOBUTTON
Definition: fmglob.hxx:33
const sal_uInt16 OBJ_FM_FORMATTEDFIELD
Definition: fmglob.hxx:45
#define FM_COMPONENT_DATEFIELD
Definition: fmservs.hxx:45
#define FM_SUN_COMPONENT_NAVIGATIONBAR
Definition: fmservs.hxx:78
FmXDisposeListener * m_pListener
Definition: fmtools.hxx:150
CursorWrapper & operator=(const css::uno::Reference< css::sdbc::XRowSet > &xCursor)
Definition: fmtools.cxx:261
OUString aLabel
Reference< XComponentContext > getProcessComponentContext()
#define FM_COMPONENT_HIDDEN
Definition: fmservs.hxx:50
const sal_uInt16 OBJ_FM_LISTBOX
Definition: fmglob.hxx:30
#define FM_COMPONENT_HIDDENCONTROL
Definition: fmservs.hxx:51
const sal_uInt16 OBJ_FM_IMAGECONTROL
Definition: fmglob.hxx:44
bool hasProperty(const OUString &_rName, const Reference< XPropertySet > &_rxSet)
OUString getLabelName(const Reference< css::beans::XPropertySet > &xControlModel)
Definition: fmtools.cxx:196
#define FM_COMPONENT_EDIT
Definition: fmservs.hxx:31
class FmSearchEngine - Impl class for FmSearchDialog
#define FM_PROP_CONTROLSOURCE
Definition: fmprop.hxx:43
#define FM_SUN_COMPONENT_SCROLLBAR
Definition: fmservs.hxx:76
OUString getString(const Any &_rAny)
static css::uno::Reference< css::awt::XWindow > GetInterface(vcl::Window *pWindow)
#define FM_PROP_CONTROLLABEL
Definition: fmprop.hxx:110
const sal_uInt16 OBJ_FM_HIDDEN
Definition: fmglob.hxx:43
const sal_uInt16 OBJ_FM_BUTTON
Definition: fmglob.hxx:28
#define FM_COMPONENT_FIXEDTEXT
Definition: fmservs.hxx:37
osl::Mutex m_aMutex
Definition: fmtools.hxx:135
const sal_uInt16 OBJ_FM_TIMEFIELD
Definition: fmglob.hxx:39
const sal_uInt16 OBJ_FM_CURRENCYFIELD
Definition: fmglob.hxx:41
const sal_uInt16 OBJ_FM_DATEFIELD
Definition: fmglob.hxx:38
css::uno::Reference< css::sdbcx::XColumnsSupplier > m_xColumnsSupplier
Definition: fmtools.hxx:71
virtual ~FmXDisposeMultiplexer() override
Definition: fmtools.cxx:296
css::uno::Any SAL_CALL makeAny(const SharedUNOComponent< INTERFACE, COMPONENT > &value)