2009-01-21 11:00:00 +0100 npower r266639 : replace ScAddress::CONV_XL_R1C1 with formula::FormulaGrammar::CONV_XL_R1C1 2009-01-21 10:58:33 +0100 npower r266638 : fixup access for changes to compiler.[ch]xx 2009-01-21 10:57:46 +0100 npower r266637 : replace the static with non-static member ( to align with the latest m39 ) changes 2009-01-20 11:53:52 +0100 npower r266562 : CWS-TOOLING: rebase CWS npower11 to trunk@266428 (milestone: DEV300:m39) 2009-01-09 23:31:00 +0100 cloph r266122 : fix typo (missing "="), initialize variables to avoid WaE breakage 2009-01-09 11:57:20 +0100 npower r266071 : wae Mac OSX gcc-4.0.1 (PPC) 2009-01-08 11:09:49 +0100 npower r265986 : wae - Mac OSX gcc-4.0.1 (PPC) 2009-01-07 10:33:20 +0100 npower r265952 : wae Mac OSX gcc-4.0.1 2008-12-18 19:14:10 +0100 npower r265712 : wae for wntmsci12 target 2008-12-17 16:14:54 +0100 npower r265640 : add Outline property for Font, also remove growing list of friend classes for ScCellRangeObj and replace by a single class. 2008-12-17 16:11:02 +0100 npower r265639 : fix path variable for 3.1, also tweak the unix logs 2008-12-11 02:39:58 +0100 hanbo r265233 : fix the vba/vba namespace of constants 2008-11-25 17:05:39 +0100 npower r264317 : namespace changes 2008-11-25 14:12:37 +0100 npower r264308 : revert changes made by mistake when migrating cws 2008-11-25 13:30:59 +0100 npower r264296 : i#93944# namespace changes 2008-11-25 13:29:25 +0100 npower r264293 : i#93944# namespace changes 2008-11-25 13:27:08 +0100 npower r264289 : i#93944# namespace changes 2008-11-24 18:24:17 +0100 npower r264263 : svn migration 2008-11-24 18:22:47 +0100 npower r264262 : not needed anymore 2008-11-24 18:21:23 +0100 npower r264261 : svn migration 2008-11-24 18:18:31 +0100 npower r264260 : svn migration
337 lines
13 KiB
C++
337 lines
13 KiB
C++
/*************************************************************************
|
|
*
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
*
|
|
* Copyright 2008 by Sun Microsystems, Inc.
|
|
*
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
|
*
|
|
* $RCSfile: vbavalidation.cxx,v $
|
|
* $Revision: 1.4 $
|
|
*
|
|
* This file is part of OpenOffice.org.
|
|
*
|
|
* 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.
|
|
*
|
|
* 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).
|
|
*
|
|
* 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.
|
|
*
|
|
************************************************************************/
|
|
#include "vbavalidation.hxx"
|
|
#include <com/sun/star/sheet/XSheetCondition.hpp>
|
|
#include <com/sun/star/sheet/ValidationType.hpp>
|
|
#include <com/sun/star/sheet/ValidationAlertStyle.hpp>
|
|
#include <com/sun/star/beans/XPropertySet.hpp>
|
|
#include <ooo/vba/excel/XlDVType.hpp>
|
|
#include <ooo/vba/excel/XlFormatConditionOperator.hpp>
|
|
#include <ooo/vba/excel/XlDVAlertStyle.hpp>
|
|
|
|
#include "unonames.hxx"
|
|
|
|
using namespace ::ooo::vba;
|
|
using namespace ::com::sun::star;
|
|
|
|
const static rtl::OUString VALIDATION( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_VALIDAT ) );
|
|
const static rtl::OUString IGNOREBLANK( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_IGNOREBL ) );
|
|
const static rtl::OUString SHOWINPUT( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_SHOWINP ) );
|
|
const static rtl::OUString SHOWERROR( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_SHOWERR ) );
|
|
const static rtl::OUString ERRORTITLE( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_ERRTITLE ) );
|
|
const static rtl::OUString INPUTTITLE( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_INPTITLE ) );
|
|
const static rtl::OUString INPUTMESS( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_INPMESS ) );
|
|
const static rtl::OUString ERRORMESS( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_ERRMESS ) );
|
|
const static rtl::OUString STYPE( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_TYPE ) );
|
|
const static rtl::OUString SHOWLIST( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_SHOWLIST ) );
|
|
const static rtl::OUString ALERTSTYLE( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_ERRALSTY ) );
|
|
|
|
void
|
|
lcl_setValidationProps( const uno::Reference< table::XCellRange >& xRange, const uno::Reference< beans::XPropertySet >& xProps )
|
|
{
|
|
uno::Reference< beans::XPropertySet > xRangeProps( xRange, uno::UNO_QUERY_THROW );
|
|
xRangeProps->setPropertyValue( VALIDATION , uno::makeAny( xProps ) );
|
|
}
|
|
|
|
uno::Reference< beans::XPropertySet >
|
|
lcl_getValidationProps( const uno::Reference< table::XCellRange >& xRange )
|
|
{
|
|
uno::Reference< beans::XPropertySet > xProps( xRange, uno::UNO_QUERY_THROW );
|
|
uno::Reference< beans::XPropertySet > xValProps;
|
|
xValProps.set( xProps->getPropertyValue( VALIDATION ), uno::UNO_QUERY_THROW );
|
|
return xValProps;
|
|
}
|
|
|
|
::sal_Bool SAL_CALL
|
|
ScVbaValidation::getIgnoreBlank() throw (uno::RuntimeException)
|
|
{
|
|
uno::Reference< beans::XPropertySet > xProps( lcl_getValidationProps( m_xRange ) );
|
|
sal_Bool bBlank = sal_False;
|
|
xProps->getPropertyValue( IGNOREBLANK ) >>= bBlank;
|
|
return bBlank;
|
|
}
|
|
|
|
void SAL_CALL
|
|
ScVbaValidation::setIgnoreBlank( ::sal_Bool _ignoreblank ) throw (uno::RuntimeException)
|
|
{
|
|
uno::Reference< beans::XPropertySet > xProps( lcl_getValidationProps( m_xRange ) );
|
|
xProps->setPropertyValue( IGNOREBLANK, uno::makeAny( _ignoreblank ) );
|
|
lcl_setValidationProps( m_xRange, xProps );
|
|
}
|
|
|
|
::sal_Bool SAL_CALL
|
|
ScVbaValidation::getInCellDropdown() throw (uno::RuntimeException)
|
|
{
|
|
uno::Reference< beans::XPropertySet > xProps = lcl_getValidationProps( m_xRange );
|
|
sal_Int32 nShowList = 0;
|
|
xProps->getPropertyValue( SHOWLIST ) >>= nShowList;
|
|
return ( nShowList ? sal_True : sal_False );
|
|
}
|
|
|
|
void SAL_CALL
|
|
ScVbaValidation::setInCellDropdown( ::sal_Bool _incelldropdown ) throw (uno::RuntimeException)
|
|
{
|
|
sal_Int32 nDropDown = sal_False;
|
|
if ( _incelldropdown )
|
|
nDropDown = 1;
|
|
uno::Reference< beans::XPropertySet > xProps( lcl_getValidationProps(m_xRange) );
|
|
xProps->setPropertyValue( SHOWLIST, uno::makeAny( nDropDown ) );
|
|
lcl_setValidationProps( m_xRange, xProps );
|
|
}
|
|
|
|
::sal_Bool SAL_CALL
|
|
ScVbaValidation::getShowInput() throw (uno::RuntimeException)
|
|
{
|
|
uno::Reference< beans::XPropertySet > xProps = lcl_getValidationProps( m_xRange );
|
|
sal_Bool bShowInput = sal_False;
|
|
xProps->getPropertyValue( SHOWINPUT ) >>= bShowInput;
|
|
return bShowInput;
|
|
}
|
|
|
|
void SAL_CALL
|
|
ScVbaValidation:: setShowInput( ::sal_Bool _showinput ) throw (uno::RuntimeException)
|
|
{
|
|
uno::Reference< beans::XPropertySet > xProps( lcl_getValidationProps(m_xRange) );
|
|
xProps->setPropertyValue( IGNOREBLANK, uno::makeAny( _showinput ) );
|
|
lcl_setValidationProps( m_xRange, xProps );
|
|
}
|
|
|
|
::sal_Bool SAL_CALL
|
|
ScVbaValidation::getShowError() throw (uno::RuntimeException)
|
|
{
|
|
uno::Reference< beans::XPropertySet > xProps = lcl_getValidationProps( m_xRange );
|
|
sal_Bool bShowError = sal_False;
|
|
xProps->getPropertyValue( SHOWERROR ) >>= bShowError;
|
|
return bShowError;
|
|
}
|
|
|
|
void SAL_CALL
|
|
ScVbaValidation::setShowError( ::sal_Bool _showerror ) throw (uno::RuntimeException)
|
|
{
|
|
uno::Reference< beans::XPropertySet > xProps( lcl_getValidationProps( m_xRange ) );
|
|
xProps->setPropertyValue( SHOWERROR, uno::makeAny( _showerror ) );
|
|
lcl_setValidationProps( m_xRange, xProps );
|
|
}
|
|
|
|
::rtl::OUString SAL_CALL
|
|
ScVbaValidation::getErrorTitle() throw (uno::RuntimeException)
|
|
{
|
|
uno::Reference< beans::XPropertySet > xProps = lcl_getValidationProps( m_xRange );
|
|
rtl::OUString sErrorTitle;
|
|
xProps->getPropertyValue( ERRORTITLE ) >>= sErrorTitle;
|
|
return sErrorTitle;
|
|
}
|
|
|
|
void
|
|
ScVbaValidation::setErrorTitle( const rtl::OUString& _errormessage ) throw (uno::RuntimeException)
|
|
{
|
|
uno::Reference< beans::XPropertySet > xProps( lcl_getValidationProps( m_xRange ) );
|
|
xProps->setPropertyValue( ERRORTITLE, uno::makeAny( _errormessage ) );
|
|
lcl_setValidationProps( m_xRange, xProps );
|
|
}
|
|
|
|
::rtl::OUString SAL_CALL
|
|
ScVbaValidation::getInputMessage() throw (uno::RuntimeException)
|
|
{
|
|
uno::Reference< beans::XPropertySet > xProps = lcl_getValidationProps( m_xRange );
|
|
rtl::OUString sMsg;
|
|
xProps->getPropertyValue( INPUTMESS ) >>= sMsg;
|
|
return sMsg;
|
|
}
|
|
|
|
void SAL_CALL
|
|
ScVbaValidation::setInputMessage( const ::rtl::OUString& _inputmessage ) throw (uno::RuntimeException)
|
|
{
|
|
uno::Reference< beans::XPropertySet > xProps( lcl_getValidationProps( m_xRange ) );
|
|
xProps->setPropertyValue( INPUTMESS, uno::makeAny( _inputmessage ) );
|
|
lcl_setValidationProps( m_xRange, xProps );
|
|
}
|
|
|
|
::rtl::OUString SAL_CALL
|
|
ScVbaValidation::getInputTitle() throw (uno::RuntimeException)
|
|
{
|
|
uno::Reference< beans::XPropertySet > xProps = lcl_getValidationProps( m_xRange );
|
|
rtl::OUString sString;
|
|
xProps->getPropertyValue( INPUTTITLE ) >>= sString;
|
|
return sString;
|
|
}
|
|
|
|
void SAL_CALL
|
|
ScVbaValidation::setInputTitle( const ::rtl::OUString& _inputtitle ) throw (uno::RuntimeException)
|
|
{
|
|
uno::Reference< beans::XPropertySet > xProps( lcl_getValidationProps( m_xRange ) );
|
|
xProps->setPropertyValue( INPUTTITLE, uno::makeAny( _inputtitle ) );
|
|
lcl_setValidationProps( m_xRange, xProps );
|
|
}
|
|
|
|
::rtl::OUString SAL_CALL
|
|
ScVbaValidation::getErrorMessage() throw (uno::RuntimeException)
|
|
{
|
|
uno::Reference< beans::XPropertySet > xProps = lcl_getValidationProps( m_xRange );
|
|
rtl::OUString sString;
|
|
xProps->getPropertyValue( ERRORMESS ) >>= sString;
|
|
return sString;
|
|
}
|
|
|
|
void SAL_CALL
|
|
ScVbaValidation::setErrorMessage( const ::rtl::OUString& _errormessage ) throw (uno::RuntimeException)
|
|
{
|
|
uno::Reference< beans::XPropertySet > xProps( lcl_getValidationProps( m_xRange ) );
|
|
xProps->setPropertyValue( ERRORMESS, uno::makeAny( _errormessage ) );
|
|
lcl_setValidationProps( m_xRange, xProps );
|
|
}
|
|
|
|
|
|
void SAL_CALL
|
|
ScVbaValidation::Delete( ) throw (uno::RuntimeException)
|
|
{
|
|
rtl::OUString sBlank;
|
|
uno::Reference< beans::XPropertySet > xProps( lcl_getValidationProps( m_xRange ) );
|
|
uno::Reference< sheet::XSheetCondition > xCond( xProps, uno::UNO_QUERY_THROW );
|
|
xProps->setPropertyValue( IGNOREBLANK, uno::makeAny( sal_True ) );
|
|
xProps->setPropertyValue( SHOWINPUT, uno::makeAny( sal_True ) );
|
|
xProps->setPropertyValue( SHOWERROR, uno::makeAny( sal_True ) );
|
|
xProps->setPropertyValue( ERRORTITLE, uno::makeAny( sBlank ) );
|
|
xProps->setPropertyValue( INPUTMESS, uno::makeAny( sBlank) );
|
|
xProps->setPropertyValue( ALERTSTYLE, uno::makeAny( sheet::ValidationAlertStyle_STOP) );
|
|
xProps->setPropertyValue( STYPE, uno::makeAny( sheet::ValidationType_ANY ) );
|
|
xCond->setFormula1( sBlank );
|
|
xCond->setFormula2( sBlank );
|
|
xCond->setOperator( sheet::ConditionOperator_NONE );
|
|
|
|
lcl_setValidationProps( m_xRange, xProps );
|
|
}
|
|
void SAL_CALL
|
|
ScVbaValidation::Add( const uno::Any& Type, const uno::Any& AlertStyle, const uno::Any& /*Operator*/, const uno::Any& Formula1, const uno::Any& Formula2 ) throw (uno::RuntimeException)
|
|
{
|
|
uno::Reference< beans::XPropertySet > xProps( lcl_getValidationProps( m_xRange ) );
|
|
uno::Reference< sheet::XSheetCondition > xCond( xProps, uno::UNO_QUERY_THROW );
|
|
|
|
sheet::ValidationType nValType = sheet::ValidationType_ANY;
|
|
xProps->getPropertyValue( STYPE ) >>= nValType;
|
|
if ( nValType != sheet::ValidationType_ANY )
|
|
throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "validation object already exists" ) ), uno::Reference< uno::XInterface >() );
|
|
sal_Int32 nType = -1;
|
|
if ( !Type.hasValue() || !( Type >>= nType ) )
|
|
throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "missing required param" ) ), uno::Reference< uno::XInterface >() );
|
|
|
|
Delete(); // set up defaults
|
|
rtl::OUString sFormula1;
|
|
Formula1 >>= sFormula1;
|
|
rtl::OUString sFormula2;
|
|
Formula2 >>= sFormula2;
|
|
switch ( nType )
|
|
{
|
|
case excel::XlDVType::xlValidateList:
|
|
{
|
|
// for validate list
|
|
// at least formula1 is required
|
|
if ( !Formula1.hasValue() )
|
|
throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "missing param" ) ), uno::Reference< uno::XInterface >() );
|
|
nValType = sheet::ValidationType_LIST;
|
|
xProps->setPropertyValue( STYPE, uno::makeAny(nValType ));
|
|
// #TODO validate required params
|
|
// #TODO need to correct the ';' delimited formula on get/set
|
|
break;
|
|
}
|
|
case excel::XlDVType::xlValidateWholeNumber:
|
|
nValType = sheet::ValidationType_WHOLE;
|
|
xProps->setPropertyValue( STYPE, uno::makeAny(nValType ));
|
|
break;
|
|
default:
|
|
throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "unsupported operation..." ) ), uno::Reference< uno::XInterface >() );
|
|
}
|
|
|
|
sheet::ValidationAlertStyle eStyle = sheet::ValidationAlertStyle_STOP;
|
|
sal_Int32 nVbaAlertStyle = excel::XlDVAlertStyle::xlValidAlertStop;
|
|
if ( AlertStyle.hasValue() && ( AlertStyle >>= nVbaAlertStyle ) )
|
|
{
|
|
switch( nVbaAlertStyle )
|
|
{
|
|
case excel::XlDVAlertStyle::xlValidAlertStop:
|
|
// yes I know it's already defaulted but safer to assume
|
|
// someone propbably could change the code above
|
|
eStyle = sheet::ValidationAlertStyle_STOP;
|
|
break;
|
|
case excel::XlDVAlertStyle::xlValidAlertWarning:
|
|
eStyle = sheet::ValidationAlertStyle_WARNING;
|
|
break;
|
|
case excel::XlDVAlertStyle::xlValidAlertInformation:
|
|
eStyle = sheet::ValidationAlertStyle_INFO;
|
|
break;
|
|
default:
|
|
throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "bad param..." ) ), uno::Reference< uno::XInterface >() );
|
|
|
|
}
|
|
}
|
|
|
|
xProps->setPropertyValue( ALERTSTYLE, uno::makeAny( eStyle ) );
|
|
|
|
if ( sFormula1.getLength() )
|
|
xCond->setFormula1( sFormula1 );
|
|
if ( sFormula2.getLength() )
|
|
xCond->setFormula2( sFormula2 );
|
|
|
|
lcl_setValidationProps( m_xRange, xProps );
|
|
}
|
|
|
|
::rtl::OUString SAL_CALL
|
|
ScVbaValidation::getFormula1() throw (uno::RuntimeException)
|
|
{
|
|
uno::Reference< sheet::XSheetCondition > xCond( lcl_getValidationProps( m_xRange ), uno::UNO_QUERY_THROW );
|
|
return xCond->getFormula1();
|
|
}
|
|
|
|
::rtl::OUString SAL_CALL
|
|
ScVbaValidation::getFormula2() throw (uno::RuntimeException)
|
|
{
|
|
uno::Reference< sheet::XSheetCondition > xCond( lcl_getValidationProps( m_xRange ), uno::UNO_QUERY_THROW );
|
|
return xCond->getFormula2();
|
|
}
|
|
|
|
rtl::OUString&
|
|
ScVbaValidation::getServiceImplName()
|
|
{
|
|
static rtl::OUString sImplName( RTL_CONSTASCII_USTRINGPARAM("ScVbaValidation") );
|
|
return sImplName;
|
|
}
|
|
|
|
uno::Sequence< rtl::OUString >
|
|
ScVbaValidation::getServiceNames()
|
|
{
|
|
static uno::Sequence< rtl::OUString > aServiceNames;
|
|
if ( aServiceNames.getLength() == 0 )
|
|
{
|
|
aServiceNames.realloc( 1 );
|
|
aServiceNames[ 0 ] = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("ooo.vba.excel.Validation" ) );
|
|
}
|
|
return aServiceNames;
|
|
}
|