xref: /aoo4110/main/sc/source/ui/vba/vbavalidation.cxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski #include "vbavalidation.hxx"
24*b1cdbd2cSJim Jagielski #include "vbaformatcondition.hxx" //#i108860
25*b1cdbd2cSJim Jagielski #include <com/sun/star/sheet/XSheetCondition.hpp>
26*b1cdbd2cSJim Jagielski #include <com/sun/star/sheet/ValidationType.hpp>
27*b1cdbd2cSJim Jagielski #include <com/sun/star/sheet/ValidationAlertStyle.hpp>
28*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertySet.hpp>
29*b1cdbd2cSJim Jagielski #include <ooo/vba/excel/XlDVType.hpp>
30*b1cdbd2cSJim Jagielski #include <ooo/vba/excel/XlFormatConditionOperator.hpp>
31*b1cdbd2cSJim Jagielski #include <ooo/vba/excel/XlDVAlertStyle.hpp>
32*b1cdbd2cSJim Jagielski 
33*b1cdbd2cSJim Jagielski #include "unonames.hxx"
34*b1cdbd2cSJim Jagielski 
35*b1cdbd2cSJim Jagielski using namespace ::ooo::vba;
36*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
37*b1cdbd2cSJim Jagielski 
38*b1cdbd2cSJim Jagielski const static rtl::OUString VALIDATION( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_VALIDAT ) );
39*b1cdbd2cSJim Jagielski const static rtl::OUString IGNOREBLANK( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_IGNOREBL ) );
40*b1cdbd2cSJim Jagielski const static rtl::OUString SHOWINPUT( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_SHOWINP  ) );
41*b1cdbd2cSJim Jagielski const static rtl::OUString SHOWERROR( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_SHOWERR  ) );
42*b1cdbd2cSJim Jagielski const static rtl::OUString ERRORTITLE( RTL_CONSTASCII_USTRINGPARAM(  SC_UNONAME_ERRTITLE  ) );
43*b1cdbd2cSJim Jagielski const static rtl::OUString INPUTTITLE( RTL_CONSTASCII_USTRINGPARAM(  SC_UNONAME_INPTITLE  ) );
44*b1cdbd2cSJim Jagielski const static rtl::OUString INPUTMESS( RTL_CONSTASCII_USTRINGPARAM(  SC_UNONAME_INPMESS  ) );
45*b1cdbd2cSJim Jagielski const static rtl::OUString ERRORMESS( RTL_CONSTASCII_USTRINGPARAM(  SC_UNONAME_ERRMESS  ) );
46*b1cdbd2cSJim Jagielski const static rtl::OUString STYPE( RTL_CONSTASCII_USTRINGPARAM(  SC_UNONAME_TYPE  ) );
47*b1cdbd2cSJim Jagielski const static rtl::OUString SHOWLIST( RTL_CONSTASCII_USTRINGPARAM(  SC_UNONAME_SHOWLIST  ) );
48*b1cdbd2cSJim Jagielski const static rtl::OUString ALERTSTYLE( RTL_CONSTASCII_USTRINGPARAM(  SC_UNONAME_ERRALSTY  ) );
49*b1cdbd2cSJim Jagielski 
50*b1cdbd2cSJim Jagielski void
lcl_setValidationProps(const uno::Reference<table::XCellRange> & xRange,const uno::Reference<beans::XPropertySet> & xProps)51*b1cdbd2cSJim Jagielski lcl_setValidationProps( const uno::Reference< table::XCellRange >& xRange, const uno::Reference< beans::XPropertySet >& xProps )
52*b1cdbd2cSJim Jagielski {
53*b1cdbd2cSJim Jagielski 	uno::Reference< beans::XPropertySet > xRangeProps( xRange, uno::UNO_QUERY_THROW );
54*b1cdbd2cSJim Jagielski 	xRangeProps->setPropertyValue( VALIDATION , uno::makeAny( xProps ) );
55*b1cdbd2cSJim Jagielski }
56*b1cdbd2cSJim Jagielski 
57*b1cdbd2cSJim Jagielski uno::Reference< beans::XPropertySet >
lcl_getValidationProps(const uno::Reference<table::XCellRange> & xRange)58*b1cdbd2cSJim Jagielski lcl_getValidationProps( const uno::Reference< table::XCellRange >& xRange )
59*b1cdbd2cSJim Jagielski {
60*b1cdbd2cSJim Jagielski 	uno::Reference< beans::XPropertySet > xProps( xRange, uno::UNO_QUERY_THROW );
61*b1cdbd2cSJim Jagielski 	uno::Reference< beans::XPropertySet > xValProps;
62*b1cdbd2cSJim Jagielski 	xValProps.set( xProps->getPropertyValue( VALIDATION ), uno::UNO_QUERY_THROW );
63*b1cdbd2cSJim Jagielski 	return xValProps;
64*b1cdbd2cSJim Jagielski }
65*b1cdbd2cSJim Jagielski 
66*b1cdbd2cSJim Jagielski ::sal_Bool SAL_CALL
getIgnoreBlank()67*b1cdbd2cSJim Jagielski ScVbaValidation::getIgnoreBlank() throw (uno::RuntimeException)
68*b1cdbd2cSJim Jagielski {
69*b1cdbd2cSJim Jagielski 	uno::Reference< beans::XPropertySet > xProps( lcl_getValidationProps( m_xRange ) );
70*b1cdbd2cSJim Jagielski 	sal_Bool bBlank = sal_False;
71*b1cdbd2cSJim Jagielski 	xProps->getPropertyValue( IGNOREBLANK )  >>= bBlank;
72*b1cdbd2cSJim Jagielski 	return bBlank;
73*b1cdbd2cSJim Jagielski }
74*b1cdbd2cSJim Jagielski 
75*b1cdbd2cSJim Jagielski void SAL_CALL
setIgnoreBlank(::sal_Bool _ignoreblank)76*b1cdbd2cSJim Jagielski ScVbaValidation::setIgnoreBlank( ::sal_Bool _ignoreblank ) throw (uno::RuntimeException)
77*b1cdbd2cSJim Jagielski {
78*b1cdbd2cSJim Jagielski 	uno::Reference< beans::XPropertySet > xProps( lcl_getValidationProps( m_xRange ) );
79*b1cdbd2cSJim Jagielski 	xProps->setPropertyValue( IGNOREBLANK, uno::makeAny( _ignoreblank ) );
80*b1cdbd2cSJim Jagielski 	lcl_setValidationProps( m_xRange, xProps );
81*b1cdbd2cSJim Jagielski }
82*b1cdbd2cSJim Jagielski 
83*b1cdbd2cSJim Jagielski ::sal_Bool SAL_CALL
getInCellDropdown()84*b1cdbd2cSJim Jagielski ScVbaValidation::getInCellDropdown() throw (uno::RuntimeException)
85*b1cdbd2cSJim Jagielski {
86*b1cdbd2cSJim Jagielski 	uno::Reference< beans::XPropertySet > xProps = lcl_getValidationProps( m_xRange );
87*b1cdbd2cSJim Jagielski 	sal_Int32 nShowList = 0;
88*b1cdbd2cSJim Jagielski 	xProps->getPropertyValue( SHOWLIST )  >>= nShowList;
89*b1cdbd2cSJim Jagielski 	return ( nShowList ? sal_True : sal_False );
90*b1cdbd2cSJim Jagielski }
91*b1cdbd2cSJim Jagielski 
92*b1cdbd2cSJim Jagielski void SAL_CALL
setInCellDropdown(::sal_Bool _incelldropdown)93*b1cdbd2cSJim Jagielski ScVbaValidation::setInCellDropdown( ::sal_Bool  _incelldropdown  ) throw (uno::RuntimeException)
94*b1cdbd2cSJim Jagielski {
95*b1cdbd2cSJim Jagielski 	sal_Int32 nDropDown = sal_False;
96*b1cdbd2cSJim Jagielski 	if ( _incelldropdown )
97*b1cdbd2cSJim Jagielski 		nDropDown = 1;
98*b1cdbd2cSJim Jagielski 	uno::Reference< beans::XPropertySet > xProps( lcl_getValidationProps(m_xRange) );
99*b1cdbd2cSJim Jagielski 	xProps->setPropertyValue( SHOWLIST, uno::makeAny( nDropDown ) );
100*b1cdbd2cSJim Jagielski 	lcl_setValidationProps( m_xRange, xProps );
101*b1cdbd2cSJim Jagielski }
102*b1cdbd2cSJim Jagielski 
103*b1cdbd2cSJim Jagielski ::sal_Bool SAL_CALL
getShowInput()104*b1cdbd2cSJim Jagielski ScVbaValidation::getShowInput() throw (uno::RuntimeException)
105*b1cdbd2cSJim Jagielski {
106*b1cdbd2cSJim Jagielski 	uno::Reference< beans::XPropertySet > xProps = lcl_getValidationProps( m_xRange );
107*b1cdbd2cSJim Jagielski 	sal_Bool bShowInput = sal_False;
108*b1cdbd2cSJim Jagielski 	xProps->getPropertyValue( SHOWINPUT )  >>= bShowInput;
109*b1cdbd2cSJim Jagielski 	return bShowInput;
110*b1cdbd2cSJim Jagielski }
111*b1cdbd2cSJim Jagielski 
112*b1cdbd2cSJim Jagielski void SAL_CALL
setShowInput(::sal_Bool _showinput)113*b1cdbd2cSJim Jagielski ScVbaValidation:: setShowInput( ::sal_Bool _showinput ) throw (uno::RuntimeException)
114*b1cdbd2cSJim Jagielski {
115*b1cdbd2cSJim Jagielski 	uno::Reference< beans::XPropertySet > xProps( lcl_getValidationProps(m_xRange) );
116*b1cdbd2cSJim Jagielski 	xProps->setPropertyValue( IGNOREBLANK, uno::makeAny( _showinput ) );
117*b1cdbd2cSJim Jagielski 	lcl_setValidationProps( m_xRange, xProps );
118*b1cdbd2cSJim Jagielski }
119*b1cdbd2cSJim Jagielski 
120*b1cdbd2cSJim Jagielski ::sal_Bool SAL_CALL
getShowError()121*b1cdbd2cSJim Jagielski ScVbaValidation::getShowError() throw (uno::RuntimeException)
122*b1cdbd2cSJim Jagielski {
123*b1cdbd2cSJim Jagielski 	uno::Reference< beans::XPropertySet > xProps = lcl_getValidationProps( m_xRange );
124*b1cdbd2cSJim Jagielski 	sal_Bool bShowError = sal_False;
125*b1cdbd2cSJim Jagielski 	xProps->getPropertyValue( SHOWERROR )  >>= bShowError;
126*b1cdbd2cSJim Jagielski 	return bShowError;
127*b1cdbd2cSJim Jagielski }
128*b1cdbd2cSJim Jagielski 
129*b1cdbd2cSJim Jagielski void SAL_CALL
setShowError(::sal_Bool _showerror)130*b1cdbd2cSJim Jagielski ScVbaValidation::setShowError( ::sal_Bool _showerror ) throw (uno::RuntimeException)
131*b1cdbd2cSJim Jagielski {
132*b1cdbd2cSJim Jagielski 	uno::Reference< beans::XPropertySet > xProps( lcl_getValidationProps( m_xRange ) );
133*b1cdbd2cSJim Jagielski 	xProps->setPropertyValue( SHOWERROR, uno::makeAny( _showerror ) );
134*b1cdbd2cSJim Jagielski 	lcl_setValidationProps( m_xRange, xProps );
135*b1cdbd2cSJim Jagielski }
136*b1cdbd2cSJim Jagielski 
137*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL
getErrorTitle()138*b1cdbd2cSJim Jagielski ScVbaValidation::getErrorTitle() throw (uno::RuntimeException)
139*b1cdbd2cSJim Jagielski {
140*b1cdbd2cSJim Jagielski 	uno::Reference< beans::XPropertySet > xProps = lcl_getValidationProps( m_xRange );
141*b1cdbd2cSJim Jagielski 	rtl::OUString sErrorTitle;
142*b1cdbd2cSJim Jagielski 	xProps->getPropertyValue( ERRORTITLE )  >>= sErrorTitle;
143*b1cdbd2cSJim Jagielski 	return sErrorTitle;
144*b1cdbd2cSJim Jagielski }
145*b1cdbd2cSJim Jagielski 
146*b1cdbd2cSJim Jagielski void
setErrorTitle(const rtl::OUString & _errormessage)147*b1cdbd2cSJim Jagielski ScVbaValidation::setErrorTitle( const rtl::OUString& _errormessage ) throw (uno::RuntimeException)
148*b1cdbd2cSJim Jagielski {
149*b1cdbd2cSJim Jagielski 	uno::Reference< beans::XPropertySet > xProps( lcl_getValidationProps( m_xRange ) );
150*b1cdbd2cSJim Jagielski 	xProps->setPropertyValue( ERRORTITLE, uno::makeAny( _errormessage ) );
151*b1cdbd2cSJim Jagielski 	lcl_setValidationProps( m_xRange, xProps );
152*b1cdbd2cSJim Jagielski }
153*b1cdbd2cSJim Jagielski 
154*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL
getInputMessage()155*b1cdbd2cSJim Jagielski ScVbaValidation::getInputMessage() throw (uno::RuntimeException)
156*b1cdbd2cSJim Jagielski {
157*b1cdbd2cSJim Jagielski 	uno::Reference< beans::XPropertySet > xProps = lcl_getValidationProps( m_xRange );
158*b1cdbd2cSJim Jagielski 	rtl::OUString sMsg;
159*b1cdbd2cSJim Jagielski 	xProps->getPropertyValue( INPUTMESS )  >>= sMsg;
160*b1cdbd2cSJim Jagielski 	return sMsg;
161*b1cdbd2cSJim Jagielski }
162*b1cdbd2cSJim Jagielski 
163*b1cdbd2cSJim Jagielski void SAL_CALL
setInputMessage(const::rtl::OUString & _inputmessage)164*b1cdbd2cSJim Jagielski ScVbaValidation::setInputMessage( const ::rtl::OUString& _inputmessage ) throw (uno::RuntimeException)
165*b1cdbd2cSJim Jagielski {
166*b1cdbd2cSJim Jagielski 	uno::Reference< beans::XPropertySet > xProps( lcl_getValidationProps( m_xRange ) );
167*b1cdbd2cSJim Jagielski 	xProps->setPropertyValue( INPUTMESS, uno::makeAny( _inputmessage ) );
168*b1cdbd2cSJim Jagielski 	lcl_setValidationProps( m_xRange, xProps );
169*b1cdbd2cSJim Jagielski }
170*b1cdbd2cSJim Jagielski 
171*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL
getInputTitle()172*b1cdbd2cSJim Jagielski ScVbaValidation::getInputTitle() throw (uno::RuntimeException)
173*b1cdbd2cSJim Jagielski {
174*b1cdbd2cSJim Jagielski 	uno::Reference< beans::XPropertySet > xProps = lcl_getValidationProps( m_xRange );
175*b1cdbd2cSJim Jagielski 	rtl::OUString sString;
176*b1cdbd2cSJim Jagielski 	xProps->getPropertyValue( INPUTTITLE )  >>= sString;
177*b1cdbd2cSJim Jagielski 	return sString;
178*b1cdbd2cSJim Jagielski }
179*b1cdbd2cSJim Jagielski 
180*b1cdbd2cSJim Jagielski void SAL_CALL
setInputTitle(const::rtl::OUString & _inputtitle)181*b1cdbd2cSJim Jagielski ScVbaValidation::setInputTitle( const ::rtl::OUString& _inputtitle ) throw (uno::RuntimeException)
182*b1cdbd2cSJim Jagielski {
183*b1cdbd2cSJim Jagielski 	uno::Reference< beans::XPropertySet > xProps( lcl_getValidationProps( m_xRange ) );
184*b1cdbd2cSJim Jagielski 	xProps->setPropertyValue( INPUTTITLE, uno::makeAny( _inputtitle ) );
185*b1cdbd2cSJim Jagielski 	lcl_setValidationProps( m_xRange, xProps );
186*b1cdbd2cSJim Jagielski }
187*b1cdbd2cSJim Jagielski 
188*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL
getErrorMessage()189*b1cdbd2cSJim Jagielski ScVbaValidation::getErrorMessage() throw (uno::RuntimeException)
190*b1cdbd2cSJim Jagielski {
191*b1cdbd2cSJim Jagielski 	uno::Reference< beans::XPropertySet > xProps = lcl_getValidationProps( m_xRange );
192*b1cdbd2cSJim Jagielski 	rtl::OUString sString;
193*b1cdbd2cSJim Jagielski 	xProps->getPropertyValue( ERRORMESS )  >>= sString;
194*b1cdbd2cSJim Jagielski 	return sString;
195*b1cdbd2cSJim Jagielski }
196*b1cdbd2cSJim Jagielski 
197*b1cdbd2cSJim Jagielski void SAL_CALL
setErrorMessage(const::rtl::OUString & _errormessage)198*b1cdbd2cSJim Jagielski ScVbaValidation::setErrorMessage( const ::rtl::OUString& _errormessage ) throw (uno::RuntimeException)
199*b1cdbd2cSJim Jagielski {
200*b1cdbd2cSJim Jagielski 	uno::Reference< beans::XPropertySet > xProps( lcl_getValidationProps( m_xRange ) );
201*b1cdbd2cSJim Jagielski 	xProps->setPropertyValue( ERRORMESS, uno::makeAny( _errormessage ) );
202*b1cdbd2cSJim Jagielski 	lcl_setValidationProps( m_xRange, xProps );
203*b1cdbd2cSJim Jagielski }
204*b1cdbd2cSJim Jagielski 
205*b1cdbd2cSJim Jagielski 
206*b1cdbd2cSJim Jagielski void SAL_CALL
Delete()207*b1cdbd2cSJim Jagielski ScVbaValidation::Delete(  ) throw (uno::RuntimeException)
208*b1cdbd2cSJim Jagielski {
209*b1cdbd2cSJim Jagielski 	rtl::OUString sBlank;
210*b1cdbd2cSJim Jagielski 	uno::Reference< beans::XPropertySet > xProps( lcl_getValidationProps( m_xRange ) );
211*b1cdbd2cSJim Jagielski 	uno::Reference< sheet::XSheetCondition > xCond( xProps, uno::UNO_QUERY_THROW );
212*b1cdbd2cSJim Jagielski 	xProps->setPropertyValue( IGNOREBLANK, uno::makeAny( sal_True ) );
213*b1cdbd2cSJim Jagielski 	xProps->setPropertyValue( SHOWINPUT, uno::makeAny( sal_True ) );
214*b1cdbd2cSJim Jagielski 	xProps->setPropertyValue( SHOWERROR, uno::makeAny( sal_True ) );
215*b1cdbd2cSJim Jagielski 	xProps->setPropertyValue( ERRORTITLE, uno::makeAny( sBlank ) );
216*b1cdbd2cSJim Jagielski 	xProps->setPropertyValue( INPUTMESS, uno::makeAny( sBlank) );
217*b1cdbd2cSJim Jagielski 	xProps->setPropertyValue( ALERTSTYLE, uno::makeAny( sheet::ValidationAlertStyle_STOP) );
218*b1cdbd2cSJim Jagielski 	xProps->setPropertyValue( STYPE, uno::makeAny( sheet::ValidationType_ANY ) );
219*b1cdbd2cSJim Jagielski 	xCond->setFormula1( sBlank );
220*b1cdbd2cSJim Jagielski 	xCond->setFormula2( sBlank );
221*b1cdbd2cSJim Jagielski 	xCond->setOperator( sheet::ConditionOperator_NONE );
222*b1cdbd2cSJim Jagielski 
223*b1cdbd2cSJim Jagielski 	lcl_setValidationProps( m_xRange, xProps );
224*b1cdbd2cSJim Jagielski }
225*b1cdbd2cSJim Jagielski void SAL_CALL
Add(const uno::Any & Type,const uno::Any & AlertStyle,const uno::Any & Operator,const uno::Any & Formula1,const uno::Any & Formula2)226*b1cdbd2cSJim Jagielski 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)
227*b1cdbd2cSJim Jagielski {
228*b1cdbd2cSJim Jagielski 	uno::Reference< beans::XPropertySet > xProps( lcl_getValidationProps( m_xRange ) );
229*b1cdbd2cSJim Jagielski 	uno::Reference< sheet::XSheetCondition > xCond( xProps, uno::UNO_QUERY_THROW );
230*b1cdbd2cSJim Jagielski 
231*b1cdbd2cSJim Jagielski 	sheet::ValidationType nValType = sheet::ValidationType_ANY;
232*b1cdbd2cSJim Jagielski 	xProps->getPropertyValue( STYPE )  >>= nValType;
233*b1cdbd2cSJim Jagielski 	if ( nValType  != sheet::ValidationType_ANY  )
234*b1cdbd2cSJim Jagielski 		throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "validation object already exists" ) ), uno::Reference< uno::XInterface >() );
235*b1cdbd2cSJim Jagielski 	sal_Int32 nType = -1;
236*b1cdbd2cSJim Jagielski 	if ( !Type.hasValue()  || !( Type >>= nType ) )
237*b1cdbd2cSJim Jagielski 		throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "missing required param" ) ), uno::Reference< uno::XInterface >() );
238*b1cdbd2cSJim Jagielski 
239*b1cdbd2cSJim Jagielski 	Delete(); // set up defaults
240*b1cdbd2cSJim Jagielski 	rtl::OUString sFormula1;
241*b1cdbd2cSJim Jagielski 	Formula1 >>= sFormula1;
242*b1cdbd2cSJim Jagielski 	rtl::OUString sFormula2;
243*b1cdbd2cSJim Jagielski 	Formula2 >>= sFormula2;
244*b1cdbd2cSJim Jagielski 	switch ( nType )
245*b1cdbd2cSJim Jagielski 	{
246*b1cdbd2cSJim Jagielski 		case excel::XlDVType::xlValidateList:
247*b1cdbd2cSJim Jagielski 			{
248*b1cdbd2cSJim Jagielski 				// for validate list
249*b1cdbd2cSJim Jagielski 				// at least formula1 is required
250*b1cdbd2cSJim Jagielski 				if ( !Formula1.hasValue() )
251*b1cdbd2cSJim Jagielski 					throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "missing param" ) ), uno::Reference< uno::XInterface >() );
252*b1cdbd2cSJim Jagielski 				nValType = sheet::ValidationType_LIST;
253*b1cdbd2cSJim Jagielski 				xProps->setPropertyValue( STYPE, uno::makeAny(nValType ));
254*b1cdbd2cSJim Jagielski 				// #TODO validate required params
255*b1cdbd2cSJim Jagielski 				// #TODO need to correct the ';' delimited formula on get/set
256*b1cdbd2cSJim Jagielski 				break;
257*b1cdbd2cSJim Jagielski 			}
258*b1cdbd2cSJim Jagielski 		case excel::XlDVType::xlValidateWholeNumber:
259*b1cdbd2cSJim Jagielski 			nValType = sheet::ValidationType_WHOLE;
260*b1cdbd2cSJim Jagielski 			xProps->setPropertyValue( STYPE, uno::makeAny(nValType ));
261*b1cdbd2cSJim Jagielski 			break;
262*b1cdbd2cSJim Jagielski 		default:
263*b1cdbd2cSJim Jagielski 			throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "unsupported operation..." ) ), uno::Reference< uno::XInterface >() );
264*b1cdbd2cSJim Jagielski 	}
265*b1cdbd2cSJim Jagielski 
266*b1cdbd2cSJim Jagielski 	sheet::ValidationAlertStyle eStyle = sheet::ValidationAlertStyle_STOP;
267*b1cdbd2cSJim Jagielski 	sal_Int32 nVbaAlertStyle = excel::XlDVAlertStyle::xlValidAlertStop;
268*b1cdbd2cSJim Jagielski 	if ( AlertStyle.hasValue() && ( AlertStyle >>= nVbaAlertStyle ) )
269*b1cdbd2cSJim Jagielski 	{
270*b1cdbd2cSJim Jagielski 		switch( nVbaAlertStyle )
271*b1cdbd2cSJim Jagielski 		{
272*b1cdbd2cSJim Jagielski 			case excel::XlDVAlertStyle::xlValidAlertStop:
273*b1cdbd2cSJim Jagielski 				// yes I know it's already defaulted but safer to assume
274*b1cdbd2cSJim Jagielski 				// someone propbably could change the code above
275*b1cdbd2cSJim Jagielski 				eStyle = sheet::ValidationAlertStyle_STOP;
276*b1cdbd2cSJim Jagielski 				break;
277*b1cdbd2cSJim Jagielski 			case excel::XlDVAlertStyle::xlValidAlertWarning:
278*b1cdbd2cSJim Jagielski 				eStyle = sheet::ValidationAlertStyle_WARNING;
279*b1cdbd2cSJim Jagielski 				break;
280*b1cdbd2cSJim Jagielski 			case excel::XlDVAlertStyle::xlValidAlertInformation:
281*b1cdbd2cSJim Jagielski 				eStyle = sheet::ValidationAlertStyle_INFO;
282*b1cdbd2cSJim Jagielski 				break;
283*b1cdbd2cSJim Jagielski 			default:
284*b1cdbd2cSJim Jagielski 			throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "bad param..." ) ), uno::Reference< uno::XInterface >() );
285*b1cdbd2cSJim Jagielski 
286*b1cdbd2cSJim Jagielski 		}
287*b1cdbd2cSJim Jagielski 	}
288*b1cdbd2cSJim Jagielski 
289*b1cdbd2cSJim Jagielski 	xProps->setPropertyValue( ALERTSTYLE, uno::makeAny( eStyle ) );
290*b1cdbd2cSJim Jagielski 
291*b1cdbd2cSJim Jagielski 	//#i108860: fix the defect that validation cannot work when the input should be limited between a lower bound and an upper bound
292*b1cdbd2cSJim Jagielski 	if ( Operator.hasValue() )
293*b1cdbd2cSJim Jagielski 	{
294*b1cdbd2cSJim Jagielski 		css::sheet::ConditionOperator conOperator = ScVbaFormatCondition::retrieveAPIOperator( Operator );
295*b1cdbd2cSJim Jagielski 		xCond->setOperator( conOperator );
296*b1cdbd2cSJim Jagielski 	}	//#ii108860
297*b1cdbd2cSJim Jagielski 
298*b1cdbd2cSJim Jagielski 	if ( sFormula1.getLength() )
299*b1cdbd2cSJim Jagielski 		xCond->setFormula1( sFormula1 );
300*b1cdbd2cSJim Jagielski 	if ( sFormula2.getLength() )
301*b1cdbd2cSJim Jagielski 		xCond->setFormula2( sFormula2 );
302*b1cdbd2cSJim Jagielski 
303*b1cdbd2cSJim Jagielski 	lcl_setValidationProps( m_xRange, xProps );
304*b1cdbd2cSJim Jagielski }
305*b1cdbd2cSJim Jagielski 
306*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL
getFormula1()307*b1cdbd2cSJim Jagielski ScVbaValidation::getFormula1() throw (uno::RuntimeException)
308*b1cdbd2cSJim Jagielski {
309*b1cdbd2cSJim Jagielski 	uno::Reference< sheet::XSheetCondition > xCond( lcl_getValidationProps( m_xRange ), uno::UNO_QUERY_THROW );
310*b1cdbd2cSJim Jagielski 	return xCond->getFormula1();
311*b1cdbd2cSJim Jagielski }
312*b1cdbd2cSJim Jagielski 
313*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL
getFormula2()314*b1cdbd2cSJim Jagielski ScVbaValidation::getFormula2() throw (uno::RuntimeException)
315*b1cdbd2cSJim Jagielski {
316*b1cdbd2cSJim Jagielski 		uno::Reference< sheet::XSheetCondition > xCond( lcl_getValidationProps( m_xRange ), uno::UNO_QUERY_THROW );
317*b1cdbd2cSJim Jagielski 	return xCond->getFormula2();
318*b1cdbd2cSJim Jagielski }
319*b1cdbd2cSJim Jagielski 
320*b1cdbd2cSJim Jagielski rtl::OUString&
getServiceImplName()321*b1cdbd2cSJim Jagielski ScVbaValidation::getServiceImplName()
322*b1cdbd2cSJim Jagielski {
323*b1cdbd2cSJim Jagielski 	static rtl::OUString sImplName( RTL_CONSTASCII_USTRINGPARAM("ScVbaValidation") );
324*b1cdbd2cSJim Jagielski 	return sImplName;
325*b1cdbd2cSJim Jagielski }
326*b1cdbd2cSJim Jagielski 
327*b1cdbd2cSJim Jagielski uno::Sequence< rtl::OUString >
getServiceNames()328*b1cdbd2cSJim Jagielski ScVbaValidation::getServiceNames()
329*b1cdbd2cSJim Jagielski {
330*b1cdbd2cSJim Jagielski 	static uno::Sequence< rtl::OUString > aServiceNames;
331*b1cdbd2cSJim Jagielski 	if ( aServiceNames.getLength() == 0 )
332*b1cdbd2cSJim Jagielski 	{
333*b1cdbd2cSJim Jagielski 		aServiceNames.realloc( 1 );
334*b1cdbd2cSJim Jagielski 		aServiceNames[ 0 ] = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("ooo.vba.excel.Validation" ) );
335*b1cdbd2cSJim Jagielski 	}
336*b1cdbd2cSJim Jagielski 	return aServiceNames;
337*b1cdbd2cSJim Jagielski }
338