2010-10-12 15:53:47 +02:00
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2003-10-21 07:39:21 +00:00
/*************************************************************************
*
2008-04-10 21:04:17 +00:00
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER .
2003-10-21 07:39:21 +00:00
*
2010-02-12 15:01:35 +01:00
* Copyright 2000 , 2010 Oracle and / or its affiliates .
2003-10-21 07:39:21 +00:00
*
2008-04-10 21:04:17 +00:00
* OpenOffice . org - a multi - platform office productivity suite
2003-10-21 07:39:21 +00:00
*
2008-04-10 21:04:17 +00:00
* This file is part of OpenOffice . org .
2003-10-21 07:39:21 +00:00
*
2008-04-10 21:04:17 +00:00
* OpenOffice . org is free software : you can redistribute it and / or modify
* it under the terms of the GNU Lesser General Public License version 3
* only , as published by the Free Software Foundation .
2003-10-21 07:39:21 +00:00
*
2008-04-10 21:04:17 +00:00
* OpenOffice . org is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU Lesser General Public License version 3 for more details
* ( a copy is included in the LICENSE file that accompanied this code ) .
2003-10-21 07:39:21 +00:00
*
2008-04-10 21:04:17 +00:00
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice . org . If not , see
* < http : //www.openoffice.org/license.html>
* for a copy of the LGPLv3 License .
2003-10-21 07:39:21 +00:00
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# include "formcellbinding.hxx"
2004-04-02 09:30:57 +00:00
# include <com/sun/star/form/binding/XBindableValue.hpp>
# include <com/sun/star/form/binding/XListEntrySink.hpp>
2003-10-21 07:39:21 +00:00
# include <com/sun/star/form/XGridColumnFactory.hpp>
# include <com/sun/star/frame/XModel.hpp>
# include <com/sun/star/container/XChild.hpp>
# include <com/sun/star/container/XNamed.hpp>
# include <com/sun/star/drawing/XDrawPageSupplier.hpp>
# include <com/sun/star/table/XCellRange.hpp>
# include <com/sun/star/form/XFormsSupplier.hpp>
# include <com/sun/star/form/XForm.hpp>
# include <com/sun/star/lang/XServiceInfo.hpp>
# include <com/sun/star/lang/XMultiServiceFactory.hpp>
# include <com/sun/star/beans/NamedValue.hpp>
# include "strings.hxx"
# include <osl/diagnose.h>
2009-04-23 10:42:05 +00:00
# include <rtl/logfile.hxx>
2003-10-21 07:39:21 +00:00
# include <functional>
# include <algorithm>
//............................................................................
namespace xmloff
{
//............................................................................
using namespace : : com : : sun : : star : : uno ;
using namespace : : com : : sun : : star : : beans ;
using namespace : : com : : sun : : star : : frame ;
using namespace : : com : : sun : : star : : sheet ;
using namespace : : com : : sun : : star : : container ;
using namespace : : com : : sun : : star : : drawing ;
using namespace : : com : : sun : : star : : table ;
using namespace : : com : : sun : : star : : form ;
using namespace : : com : : sun : : star : : lang ;
2004-04-02 09:30:57 +00:00
using namespace : : com : : sun : : star : : form : : binding ;
2003-10-21 07:39:21 +00:00
2009-04-23 10:42:05 +00:00
namespace
{
using : : com : : sun : : star : : uno : : Reference ;
using : : com : : sun : : star : : uno : : XInterface ;
using : : com : : sun : : star : : container : : XChild ;
using : : com : : sun : : star : : frame : : XModel ;
using : : com : : sun : : star : : uno : : UNO_QUERY ;
//....................................................................
template < class TYPE >
Reference < TYPE > getTypedModelNode ( const Reference < XInterface > & _rxModelNode )
2003-10-21 07:39:21 +00:00
{
2009-04-23 10:42:05 +00:00
Reference < TYPE > xTypedNode ( _rxModelNode , UNO_QUERY ) ;
if ( xTypedNode . is ( ) )
return xTypedNode ;
else
2003-10-21 07:39:21 +00:00
{
2009-04-23 10:42:05 +00:00
Reference < XChild > xChild ( _rxModelNode , UNO_QUERY ) ;
if ( xChild . is ( ) )
return getTypedModelNode < TYPE > ( xChild - > getParent ( ) ) ;
2003-10-21 07:39:21 +00:00
else
2009-04-23 10:42:05 +00:00
return NULL ;
2003-10-21 07:39:21 +00:00
}
}
2009-04-23 10:42:05 +00:00
//....................................................................
Reference < XModel > getDocument ( const Reference < XInterface > & _rxModelNode )
2003-10-21 07:39:21 +00:00
{
2009-04-23 10:42:05 +00:00
return getTypedModelNode < XModel > ( _rxModelNode ) ;
2003-10-21 07:39:21 +00:00
}
2009-04-23 10:42:05 +00:00
//....................................................................
struct StringCompare : public : : std : : unary_function < : : rtl : : OUString , bool >
2003-10-21 07:39:21 +00:00
{
2009-04-23 10:42:05 +00:00
private :
const : : rtl : : OUString m_sReference ;
2003-10-21 07:39:21 +00:00
2009-04-23 10:42:05 +00:00
public :
StringCompare ( const : : rtl : : OUString & _rReference ) : m_sReference ( _rReference ) { }
2003-10-21 07:39:21 +00:00
2009-04-23 10:42:05 +00:00
inline bool operator ( ) ( const : : rtl : : OUString & _rCompare )
{
return ( _rCompare = = m_sReference ) ;
}
} ;
}
//========================================================================
//= FormCellBindingHelper
//========================================================================
//------------------------------------------------------------------------
FormCellBindingHelper : : FormCellBindingHelper ( const Reference < XPropertySet > & _rxControlModel , const Reference < XModel > & _rxDocument )
: m_xControlModel ( _rxControlModel )
, m_xDocument ( _rxDocument , UNO_QUERY )
{
OSL_ENSURE ( m_xControlModel . is ( ) , " FormCellBindingHelper::FormCellBindingHelper: invalid control model! " ) ;
2003-10-21 07:39:21 +00:00
2009-04-23 10:42:05 +00:00
if ( ! m_xDocument . is ( ) )
m_xDocument = m_xDocument . query ( getDocument ( m_xControlModel ) ) ;
OSL_ENSURE ( m_xDocument . is ( ) , " FormCellBindingHelper::FormCellBindingHelper: Did not find the spreadsheet document! " ) ;
}
//------------------------------------------------------------------------
sal_Bool FormCellBindingHelper : : livesInSpreadsheetDocument ( const Reference < XPropertySet > & _rxControlModel )
{
Reference < XSpreadsheetDocument > xDocument ( getDocument ( _rxControlModel ) , UNO_QUERY ) ;
return xDocument . is ( ) ;
}
//------------------------------------------------------------------------
bool FormCellBindingHelper : : convertStringAddress ( const : : rtl : : OUString & _rAddressDescription , CellAddress & /* [out] */ _rAddress , sal_Int16 /*_nAssumeSheet*/ ) const
{
Any aAddress ;
return doConvertAddressRepresentations (
PROPERTY_FILE_REPRESENTATION ,
makeAny ( _rAddressDescription ) ,
PROPERTY_ADDRESS ,
aAddress ,
false
)
& & ( aAddress > > = _rAddress ) ;
}
//------------------------------------------------------------------------
bool FormCellBindingHelper : : convertStringAddress ( const : : rtl : : OUString & _rAddressDescription ,
CellRangeAddress & /* [out] */ _rAddress ) const
{
Any aAddress ;
return doConvertAddressRepresentations (
PROPERTY_FILE_REPRESENTATION ,
makeAny ( _rAddressDescription ) ,
PROPERTY_ADDRESS ,
aAddress ,
true
)
& & ( aAddress > > = _rAddress ) ;
}
//------------------------------------------------------------------------
Reference < XValueBinding > FormCellBindingHelper : : createCellBindingFromStringAddress ( const : : rtl : : OUString & _rAddress , bool _bUseIntegerBinding ) const
{
Reference < XValueBinding > xBinding ;
if ( ! m_xDocument . is ( ) )
// very bad ...
return xBinding ;
2003-10-21 07:39:21 +00:00
2009-04-23 10:42:05 +00:00
// get the UNO representation of the address
CellAddress aAddress ;
if ( ! _rAddress . getLength ( ) | | ! convertStringAddress ( _rAddress , aAddress ) )
2003-10-21 07:39:21 +00:00
return xBinding ;
2009-04-23 10:42:05 +00:00
xBinding = xBinding . query ( createDocumentDependentInstance (
_bUseIntegerBinding ? SERVICE_LISTINDEXCELLBINDING : SERVICE_CELLVALUEBINDING ,
PROPERTY_BOUND_CELL ,
makeAny ( aAddress )
) ) ;
2003-10-21 07:39:21 +00:00
2009-04-23 10:42:05 +00:00
return xBinding ;
}
2003-10-21 07:39:21 +00:00
2009-04-23 10:42:05 +00:00
//------------------------------------------------------------------------
Reference < XListEntrySource > FormCellBindingHelper : : createCellListSourceFromStringAddress ( const : : rtl : : OUString & _rAddress ) const
{
Reference < XListEntrySource > xSource ;
2003-10-21 07:39:21 +00:00
2009-04-23 10:42:05 +00:00
CellRangeAddress aRangeAddress ;
if ( ! convertStringAddress ( _rAddress , aRangeAddress ) )
2003-10-21 07:39:21 +00:00
return xSource ;
2009-04-23 10:42:05 +00:00
// create a range object for this address
xSource = xSource . query ( createDocumentDependentInstance (
SERVICE_CELLRANGELISTSOURCE ,
PROPERTY_LIST_CELL_RANGE ,
makeAny ( aRangeAddress )
) ) ;
2003-10-21 07:39:21 +00:00
2009-04-23 10:42:05 +00:00
return xSource ;
}
2003-10-21 07:39:21 +00:00
2009-04-23 10:42:05 +00:00
//------------------------------------------------------------------------
: : rtl : : OUString FormCellBindingHelper : : getStringAddressFromCellBinding ( const Reference < XValueBinding > & _rxBinding ) const
{
OSL_PRECOND ( ! _rxBinding . is ( ) | | isCellBinding ( _rxBinding ) , " FormCellBindingHelper::getStringAddressFromCellBinding: this is no cell binding! " ) ;
2003-10-21 07:39:21 +00:00
2009-04-23 10:42:05 +00:00
: : rtl : : OUString sAddress ;
try
{
Reference < XPropertySet > xBindingProps ( _rxBinding , UNO_QUERY ) ;
OSL_ENSURE ( xBindingProps . is ( ) | | ! _rxBinding . is ( ) , " FormCellBindingHelper::getStringAddressFromCellBinding: no property set for the binding! " ) ;
if ( xBindingProps . is ( ) )
2003-10-21 07:39:21 +00:00
{
2009-04-23 10:42:05 +00:00
CellAddress aAddress ;
xBindingProps - > getPropertyValue ( PROPERTY_BOUND_CELL ) > > = aAddress ;
2003-10-21 07:39:21 +00:00
2009-04-23 10:42:05 +00:00
Any aStringAddress ;
doConvertAddressRepresentations ( PROPERTY_ADDRESS , makeAny ( aAddress ) ,
PROPERTY_FILE_REPRESENTATION , aStringAddress , false ) ;
2003-10-21 07:39:21 +00:00
2009-04-23 10:42:05 +00:00
aStringAddress > > = sAddress ;
}
}
catch ( const Exception & )
2003-10-21 07:39:21 +00:00
{
2011-03-19 14:09:49 +01:00
OSL_FAIL ( " FormCellBindingHelper::getStringAddressFromCellBinding: caught an exception! " ) ;
2009-04-23 10:42:05 +00:00
}
2003-10-21 07:39:21 +00:00
2009-04-23 10:42:05 +00:00
return sAddress ;
}
2003-10-21 07:39:21 +00:00
2009-04-23 10:42:05 +00:00
//------------------------------------------------------------------------
: : rtl : : OUString FormCellBindingHelper : : getStringAddressFromCellListSource ( const Reference < XListEntrySource > & _rxSource ) const
{
OSL_PRECOND ( ! _rxSource . is ( ) | | isCellRangeListSource ( _rxSource ) , " FormCellBindingHelper::getStringAddressFromCellListSource: this is no cell list source! " ) ;
2003-10-21 07:39:21 +00:00
2009-04-23 10:42:05 +00:00
: : rtl : : OUString sAddress ;
try
2003-10-21 07:39:21 +00:00
{
2009-04-23 10:42:05 +00:00
Reference < XPropertySet > xSourceProps ( _rxSource , UNO_QUERY ) ;
OSL_ENSURE ( xSourceProps . is ( ) | | ! _rxSource . is ( ) , " FormCellBindingHelper::getStringAddressFromCellListSource: no property set for the list source! " ) ;
if ( xSourceProps . is ( ) )
2003-10-21 07:39:21 +00:00
{
2009-04-23 10:42:05 +00:00
CellRangeAddress aRangeAddress ;
xSourceProps - > getPropertyValue ( PROPERTY_LIST_CELL_RANGE ) > > = aRangeAddress ;
2003-10-21 07:39:21 +00:00
2009-04-23 10:42:05 +00:00
Any aStringAddress ;
doConvertAddressRepresentations ( PROPERTY_ADDRESS , makeAny ( aRangeAddress ) ,
PROPERTY_FILE_REPRESENTATION , aStringAddress , true ) ;
aStringAddress > > = sAddress ;
}
2003-10-21 07:39:21 +00:00
}
2009-04-23 10:42:05 +00:00
catch ( const Exception & )
2003-10-21 07:39:21 +00:00
{
2011-03-19 14:09:49 +01:00
OSL_FAIL ( " FormCellBindingHelper::getStringAddressFromCellListSource: caught an exception! " ) ;
2003-10-21 07:39:21 +00:00
}
2009-04-23 10:42:05 +00:00
return sAddress ;
}
2003-10-21 07:39:21 +00:00
2009-04-23 10:42:05 +00:00
//------------------------------------------------------------------------
bool FormCellBindingHelper : : isSpreadsheetDocumentWhichSupplies ( const Reference < XSpreadsheetDocument > & _rxDocument , const : : rtl : : OUString & _rService ) SAL_THROW ( ( ) )
{
bool bYesItIs = false ;
2003-10-21 07:39:21 +00:00
2009-04-23 10:42:05 +00:00
try
{
Reference < XServiceInfo > xSI ( _rxDocument , UNO_QUERY ) ;
if ( xSI . is ( ) & & xSI - > supportsService ( SERVICE_SPREADSHEET_DOCUMENT ) )
2003-10-21 07:39:21 +00:00
{
2009-04-23 10:42:05 +00:00
Reference < XMultiServiceFactory > xDocumentFactory ( _rxDocument , UNO_QUERY ) ;
OSL_ENSURE ( xDocumentFactory . is ( ) , " FormCellBindingHelper::isSpreadsheetDocumentWhichSupplies: spreadsheet document, but no factory? " ) ;
Sequence < : : rtl : : OUString > aAvailableServices ;
if ( xDocumentFactory . is ( ) )
aAvailableServices = xDocumentFactory - > getAvailableServiceNames ( ) ;
const : : rtl : : OUString * pFound = : : std : : find_if (
aAvailableServices . getConstArray ( ) ,
aAvailableServices . getConstArray ( ) + aAvailableServices . getLength ( ) ,
StringCompare ( _rService )
) ;
if ( pFound - aAvailableServices . getConstArray ( ) < aAvailableServices . getLength ( ) )
{
bYesItIs = true ;
}
2003-10-21 07:39:21 +00:00
}
}
2009-04-23 10:42:05 +00:00
catch ( const Exception & )
2003-10-21 07:39:21 +00:00
{
2011-03-19 14:09:49 +01:00
OSL_FAIL ( " FormCellBindingHelper::isSpreadsheetDocumentWhichSupplies: caught an exception! " ) ;
2009-04-23 10:42:05 +00:00
}
2003-10-21 07:39:21 +00:00
2009-04-23 10:42:05 +00:00
return bYesItIs ;
}
2003-10-21 07:39:21 +00:00
2009-04-23 10:42:05 +00:00
//------------------------------------------------------------------------
bool FormCellBindingHelper : : isSpreadsheetDocumentWhichSupplies ( const : : rtl : : OUString & _rService ) const SAL_THROW ( ( ) )
{
return isSpreadsheetDocumentWhichSupplies ( m_xDocument , _rService ) ;
}
2003-10-21 07:39:21 +00:00
2009-04-23 10:42:05 +00:00
//------------------------------------------------------------------------
bool FormCellBindingHelper : : isListCellRangeAllowed ( const Reference < XModel > & _rxDocument )
{
return isSpreadsheetDocumentWhichSupplies (
Reference < XSpreadsheetDocument > ( _rxDocument , UNO_QUERY ) ,
SERVICE_CELLRANGELISTSOURCE
) ;
}
//------------------------------------------------------------------------
bool FormCellBindingHelper : : isListCellRangeAllowed ( ) const
{
bool bAllow ( false ) ;
2003-10-21 07:39:21 +00:00
2009-04-23 10:42:05 +00:00
Reference < XListEntrySink > xSink ( m_xControlModel , UNO_QUERY ) ;
if ( xSink . is ( ) )
2003-10-21 07:39:21 +00:00
{
2009-04-23 10:42:05 +00:00
bAllow = isSpreadsheetDocumentWhichSupplies ( SERVICE_CELLRANGELISTSOURCE ) ;
2003-10-21 07:39:21 +00:00
}
2009-04-23 10:42:05 +00:00
return bAllow ;
}
2003-10-21 07:39:21 +00:00
2009-04-23 10:42:05 +00:00
//------------------------------------------------------------------------
bool FormCellBindingHelper : : isCellBindingAllowed ( ) const
{
bool bAllow ( false ) ;
2003-10-21 07:39:21 +00:00
2009-04-23 10:42:05 +00:00
Reference < XBindableValue > xBindable ( m_xControlModel , UNO_QUERY ) ;
if ( xBindable . is ( ) )
2003-10-21 07:39:21 +00:00
{
2009-04-23 10:42:05 +00:00
// the control can potentially be bound to an external value
// Does it live within a Calc document, and is able to supply CellBindings?
bAllow = isSpreadsheetDocumentWhichSupplies ( SERVICE_CELLVALUEBINDING ) ;
2003-10-21 07:39:21 +00:00
}
2009-04-23 10:42:05 +00:00
return bAllow ;
}
2003-10-21 07:39:21 +00:00
2009-04-23 10:42:05 +00:00
//------------------------------------------------------------------------
bool FormCellBindingHelper : : isCellBindingAllowed ( const Reference < XModel > & _rxDocument )
{
return isSpreadsheetDocumentWhichSupplies (
Reference < XSpreadsheetDocument > ( _rxDocument , UNO_QUERY ) ,
SERVICE_CELLVALUEBINDING
) ;
}
//------------------------------------------------------------------------
bool FormCellBindingHelper : : isCellBinding ( const Reference < XValueBinding > & _rxBinding ) const
{
return doesComponentSupport ( _rxBinding . get ( ) , SERVICE_CELLVALUEBINDING ) ;
}
2003-10-21 07:39:21 +00:00
2009-04-23 10:42:05 +00:00
//------------------------------------------------------------------------
bool FormCellBindingHelper : : isCellIntegerBinding ( const Reference < XValueBinding > & _rxBinding ) const
{
return doesComponentSupport ( _rxBinding . get ( ) , SERVICE_LISTINDEXCELLBINDING ) ;
}
2003-10-21 07:39:21 +00:00
2009-04-23 10:42:05 +00:00
//------------------------------------------------------------------------
bool FormCellBindingHelper : : isCellRangeListSource ( const Reference < XListEntrySource > & _rxSource ) const
{
return doesComponentSupport ( _rxSource . get ( ) , SERVICE_CELLRANGELISTSOURCE ) ;
}
2003-10-21 07:39:21 +00:00
2009-04-23 10:42:05 +00:00
//------------------------------------------------------------------------
bool FormCellBindingHelper : : doesComponentSupport ( const Reference < XInterface > & _rxComponent , const : : rtl : : OUString & _rService ) const
{
bool bDoes = false ;
Reference < XServiceInfo > xSI ( _rxComponent , UNO_QUERY ) ;
bDoes = xSI . is ( ) & & xSI - > supportsService ( _rService ) ;
return bDoes ;
}
//------------------------------------------------------------------------
Reference < XValueBinding > FormCellBindingHelper : : getCurrentBinding ( ) const
{
Reference < XValueBinding > xBinding ;
Reference < XBindableValue > xBindable ( m_xControlModel , UNO_QUERY ) ;
if ( xBindable . is ( ) )
xBinding = xBindable - > getValueBinding ( ) ;
return xBinding ;
}
//------------------------------------------------------------------------
Reference < XListEntrySource > FormCellBindingHelper : : getCurrentListSource ( ) const
{
Reference < XListEntrySource > xSource ;
Reference < XListEntrySink > xSink ( m_xControlModel , UNO_QUERY ) ;
if ( xSink . is ( ) )
xSource = xSink - > getListEntrySource ( ) ;
return xSource ;
}
//------------------------------------------------------------------------
void FormCellBindingHelper : : setBinding ( const Reference < XValueBinding > & _rxBinding )
{
Reference < XBindableValue > xBindable ( m_xControlModel , UNO_QUERY ) ;
OSL_PRECOND ( xBindable . is ( ) , " FormCellBindingHelper::setBinding: the object is not bindable! " ) ;
if ( xBindable . is ( ) )
xBindable - > setValueBinding ( _rxBinding ) ;
}
//------------------------------------------------------------------------
void FormCellBindingHelper : : setListSource ( const Reference < XListEntrySource > & _rxSource )
{
Reference < XListEntrySink > xSink ( m_xControlModel , UNO_QUERY ) ;
OSL_PRECOND ( xSink . is ( ) , " FormCellBindingHelper::setListSource: the object is no list entry sink! " ) ;
if ( xSink . is ( ) )
xSink - > setListEntrySource ( _rxSource ) ;
}
//------------------------------------------------------------------------
Reference < XInterface > FormCellBindingHelper : : createDocumentDependentInstance ( const : : rtl : : OUString & _rService , const : : rtl : : OUString & _rArgumentName ,
const Any & _rArgumentValue ) const
{
Reference < XInterface > xReturn ;
2003-10-21 07:39:21 +00:00
2009-04-23 10:42:05 +00:00
Reference < XMultiServiceFactory > xDocumentFactory ( m_xDocument , UNO_QUERY ) ;
OSL_ENSURE ( xDocumentFactory . is ( ) , " FormCellBindingHelper::createDocumentDependentInstance: no document service factory! " ) ;
if ( xDocumentFactory . is ( ) )
{
try
2003-10-21 07:39:21 +00:00
{
2009-04-23 10:42:05 +00:00
if ( _rArgumentName . getLength ( ) )
2003-10-21 07:39:21 +00:00
{
2009-04-23 10:42:05 +00:00
NamedValue aArg ;
aArg . Name = _rArgumentName ;
aArg . Value = _rArgumentValue ;
Sequence < Any > aArgs ( 1 ) ;
aArgs [ 0 ] < < = aArg ;
xReturn = xDocumentFactory - > createInstanceWithArguments ( _rService , aArgs ) ;
2003-10-21 07:39:21 +00:00
}
2009-04-23 10:42:05 +00:00
else
2003-10-21 07:39:21 +00:00
{
2009-04-23 10:42:05 +00:00
xReturn = xDocumentFactory - > createInstance ( _rService ) ;
2003-10-21 07:39:21 +00:00
}
}
2009-04-23 10:42:05 +00:00
catch ( const Exception & )
{
2011-03-19 14:09:49 +01:00
OSL_FAIL ( " FormCellBindingHelper::createDocumentDependentInstance: could not create the binding at the document! " ) ;
2009-04-23 10:42:05 +00:00
}
2003-10-21 07:39:21 +00:00
}
2009-04-23 10:42:05 +00:00
return xReturn ;
}
2003-10-21 07:39:21 +00:00
2009-04-23 10:42:05 +00:00
//------------------------------------------------------------------------
bool FormCellBindingHelper : : doConvertAddressRepresentations ( const : : rtl : : OUString & _rInputProperty , const Any & _rInputValue ,
const : : rtl : : OUString & _rOutputProperty , Any & _rOutputValue , bool _bIsRange ) const SAL_THROW ( ( ) )
{
bool bSuccess = false ;
Reference < XPropertySet > xConverter (
createDocumentDependentInstance (
_bIsRange ? SERVICE_RANGEADDRESS_CONVERSION : SERVICE_ADDRESS_CONVERSION ,
: : rtl : : OUString ( ) ,
Any ( )
) ,
UNO_QUERY
) ;
OSL_ENSURE ( xConverter . is ( ) , " FormCellBindingHelper::doConvertAddressRepresentations: could not get a converter service! " ) ;
if ( xConverter . is ( ) )
2003-10-21 07:39:21 +00:00
{
2009-04-23 10:42:05 +00:00
try
2003-10-21 07:39:21 +00:00
{
2009-04-23 10:42:05 +00:00
xConverter - > setPropertyValue ( _rInputProperty , _rInputValue ) ;
_rOutputValue = xConverter - > getPropertyValue ( _rOutputProperty ) ;
bSuccess = true ;
}
catch ( const Exception & )
{
2011-03-19 14:09:49 +01:00
OSL_FAIL ( " FormCellBindingHelper::doConvertAddressRepresentations: caught an exception! " ) ;
2003-10-21 07:39:21 +00:00
}
}
2009-04-23 10:42:05 +00:00
return bSuccess ;
}
2003-10-21 07:39:21 +00:00
//............................................................................
} // namespace xmloff
//............................................................................
2010-10-12 15:53:47 +02:00
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */