oovbaapi/ooo/vba/excel/XOLEObject.idl | 1 oovbaapi/ooo/vba/excel/XValidation.idl | 1 oovbaapi/ooo/vba/msforms/XComboBox.idl | 1 sc/source/ui/vba/vbaapplication.cxx | 15 ++++ sc/source/ui/vba/vbaapplication.hxx | 2 sc/source/ui/vba/vbaoleobject.cxx | 17 ++++ sc/source/ui/vba/vbaoleobject.hxx | 4 - sc/source/ui/vba/vbarange.cxx | 4 - sc/source/ui/vba/vbarange.hxx | 1 sc/source/ui/vba/vbavalidation.cxx | 59 ++++++++++++++++ sc/source/ui/vba/vbavalidation.hxx | 1 svtools/Library_svt.mk | 1 svtools/Package_inc.mk | 1 svtools/inc/bindablecontrolhelper.hxx | 2 svtools/source/misc/bindablecontrolhelper.cxx | 7 + vbahelper/Library_msforms.mk | 1 vbahelper/source/msforms/vbacombobox.cxx | 10 ++ vbahelper/source/msforms/vbacombobox.hxx | 2 vbahelper/source/msforms/vbacontrol.cxx | 93 ++++++++++++++++++-------- vbahelper/source/vbahelper/vbacommandbars.cxx | 4 + 20 files changed, 190 insertions(+), 37 deletions(-)
New commits: commit 6076f94074959cdc1f1c74dc71b1fd4182a7f7e8 Author: Noel Power <noel.po...@suse.com> Date: Fri Mar 29 12:47:04 2013 +0000 fix 'Visible' property for XControlShape(s) Foreach support for CommandBars Seems now we need to additionally set 'Visible' property for XControlShapes to ensure correct visibility Also we need allow 'For Each' syntax to with with CommandBar collection. Note: the implementation of the CommandBar enumeration seems wrong, I would have thought that it should match ( and share ) implementation details with normal index access ( it doesn't ) diff --git a/vbahelper/source/msforms/vbacontrol.cxx b/vbahelper/source/msforms/vbacontrol.cxx index a5cf70e..975fb99 100644 --- a/vbahelper/source/msforms/vbacontrol.cxx +++ b/vbahelper/source/msforms/vbacontrol.cxx @@ -204,8 +204,17 @@ void SAL_CALL ScVbaControl::setEnabled( sal_Bool bVisible ) throw (uno::RuntimeE sal_Bool SAL_CALL ScVbaControl::getVisible() throw (uno::RuntimeException) { sal_Bool bVisible( sal_True ); + uno::Reference< drawing::XControlShape > xControlShape( m_xControl, uno::UNO_QUERY ); m_xProps->getPropertyValue (rtl::OUString( "EnableVisible" )) >>= bVisible; + if ( xControlShape.is() ) + { + bool bEnableVisible = bVisible; + uno::Reference< beans::XPropertySet > xProps( m_xControl, uno::UNO_QUERY_THROW ); + xProps->getPropertyValue + (rtl::OUString( "Visible" )) >>= bVisible; + bVisible = bVisible && bEnableVisible; + } return bVisible; } @@ -214,6 +223,13 @@ void SAL_CALL ScVbaControl::setVisible( sal_Bool bVisible ) throw (uno::RuntimeE uno::Any aValue( bVisible ); m_xProps->setPropertyValue (rtl::OUString( "EnableVisible" ), aValue); + uno::Reference< drawing::XControlShape > xControlShape( m_xControl, uno::UNO_QUERY ); + if ( xControlShape.is() ) + { + uno::Reference< beans::XPropertySet > xProps( m_xControl, uno::UNO_QUERY_THROW ); + xProps->setPropertyValue + (rtl::OUString( "Visible" ), aValue); + } } double SAL_CALL ScVbaControl::getHeight() throw (uno::RuntimeException) { diff --git a/vbahelper/source/vbahelper/vbacommandbars.cxx b/vbahelper/source/vbahelper/vbacommandbars.cxx index d07f2e3..dbd1fc7 100644 --- a/vbahelper/source/vbahelper/vbacommandbars.cxx +++ b/vbahelper/source/vbahelper/vbacommandbars.cxx @@ -72,6 +72,10 @@ public: { uno::Reference< container::XIndexAccess > xCBarSetting = m_pCBarHelper->getSettings( sResourceUrl ); uno::Reference< XCommandBar > xCommandBar( new ScVbaCommandBar( m_xParent, m_xContext, m_pCBarHelper, xCBarSetting, sResourceUrl, sal_False, sal_False ) ); + // Strange, shouldn't the Enumeration support match/share the + // iteration code? ( e.g. ScVbaCommandBars::Item(...) ) + // and we at least should return here ( something ) it seems + return uno::makeAny( xCommandBar ); } else return nextElement(); commit 811a311ae7ea83f02bb07639dcbe4ac2763dd74e Author: Noel Power <noel.po...@suse.com> Date: Fri Mar 29 11:27:50 2013 +0000 squash NoSuchElementExceptions when modifying keybindings Change-Id: If83183ae652e7a92b0795774b0f0a8a0b6c1ec82 diff --git a/sc/source/ui/vba/vbaapplication.cxx b/sc/source/ui/vba/vbaapplication.cxx index d962395..5b713e0 100644 --- a/sc/source/ui/vba/vbaapplication.cxx +++ b/sc/source/ui/vba/vbaapplication.cxx @@ -1870,6 +1870,21 @@ double SAL_CALL ScVbaApplication::InchesToPoints( double Inches ) throw (uno::Ru return MetricField::ConvertDoubleValue( Inches, 0, 0, FUNIT_INCH, FUNIT_POINT ); } +void SAL_CALL ScVbaApplication::OnKey( const ::rtl::OUString& Key, const uno::Any& Procedure ) throw (uno::RuntimeException) +{ + try + { + // Perhaps we can catch some excel specific + // related behaviour here + VbaApplicationBase::OnKey( Key, Procedure ); + } + catch( container::NoSuchElementException& ) + { + // #TODO special handling for unhandled + // bindings + } +} + rtl::OUString ScVbaApplication::getServiceImplName() { diff --git a/sc/source/ui/vba/vbaapplication.hxx b/sc/source/ui/vba/vbaapplication.hxx index 0f72d7b..95f1f73 100644 --- a/sc/source/ui/vba/vbaapplication.hxx +++ b/sc/source/ui/vba/vbaapplication.hxx @@ -110,7 +110,7 @@ public: virtual sal_Bool SAL_CALL getVisible() throw (css::uno::RuntimeException); virtual void SAL_CALL setVisible( sal_Bool bVisible ) throw (css::uno::RuntimeException); - + virtual void SAL_CALL OnKey( const ::rtl::OUString& Key, const css::uno::Any& Procedure ) throw (css::uno::RuntimeException); virtual sal_Bool SAL_CALL getIteration() throw (css::uno::RuntimeException); // add the support of Iteration virtual void SAL_CALL setIteration( sal_Bool bIteration ) throw (css::uno::RuntimeException); // add the support of Iteration virtual sal_Int32 SAL_CALL getEnableCancelKey() throw (css::uno::RuntimeException); // add the support of EnableCancelKey commit 24eb6cfc53561a73369800068aef8d62b677d6a2 Author: Noel Power <noel.po...@suse.com> Date: Thu Mar 28 17:45:10 2013 +0000 Added and fixed various vba API Added OLEObject.LinkedCell Added ComboBox.LinkedCell Added Validation.Type re-enabled build ( and associated header delivery ) of bindablecontrolhelper provided a 'real' implemenation for AutoSize member ( applicable to various controls ) Change-Id: Iee985ef1615b1b0950e578c0ed0ca10ff3db55fb diff --git a/oovbaapi/ooo/vba/excel/XOLEObject.idl b/oovbaapi/ooo/vba/excel/XOLEObject.idl index 922de37..6eae89a 100644 --- a/oovbaapi/ooo/vba/excel/XOLEObject.idl +++ b/oovbaapi/ooo/vba/excel/XOLEObject.idl @@ -47,6 +47,7 @@ interface XOLEObject [attribute] double Top; [attribute] double Height; [attribute] double Width; + [attribute] string LinkedCell; }; //============================================================================= diff --git a/oovbaapi/ooo/vba/excel/XValidation.idl b/oovbaapi/ooo/vba/excel/XValidation.idl index 3d30482..85c920f 100644 --- a/oovbaapi/ooo/vba/excel/XValidation.idl +++ b/oovbaapi/ooo/vba/excel/XValidation.idl @@ -50,6 +50,7 @@ interface XValidation [attribute] string ErrorMessage; [attribute, readonly] string Formula1; [attribute, readonly] string Formula2; + [attribute, readonly] long Type; void Delete(); void Add( [in] any Type, [in] any AlertStyle, [in] any Operator, [in] any Formula1, [in] any Formula2); }; diff --git a/oovbaapi/ooo/vba/msforms/XComboBox.idl b/oovbaapi/ooo/vba/msforms/XComboBox.idl index 7eacf25..d91ebfd 100644 --- a/oovbaapi/ooo/vba/msforms/XComboBox.idl +++ b/oovbaapi/ooo/vba/msforms/XComboBox.idl @@ -54,6 +54,7 @@ interface XComboBox [attribute] boolean Locked; [attribute, readonly] long TextLength; [attribute, readonly] XNewFont Font; + [attribute] string LinkedCell; void AddItem( [in] any pvargItem, [in] any pvargIndex ); void removeItem( [in] any index ); diff --git a/sc/source/ui/vba/vbaoleobject.cxx b/sc/source/ui/vba/vbaoleobject.cxx index 1f26ccf..a65b04b 100644 --- a/sc/source/ui/vba/vbaoleobject.cxx +++ b/sc/source/ui/vba/vbaoleobject.cxx @@ -34,7 +34,10 @@ #include <ooo/vba/XControlProvider.hpp> #include "vbaoleobject.hxx" - +#include <svx/svdobj.hxx> +#include "drwlayer.hxx" +#include "excelvbahelper.hxx" +#include <svtools/bindablecontrolhelper.hxx> using namespace com::sun::star; using namespace ooo::vba; @@ -47,7 +50,7 @@ ScVbaOLEObject::ScVbaOLEObject( const uno::Reference< XHelperInterface >& xParen uno::Reference< container::XChild > xChild( xControlModel, uno::UNO_QUERY_THROW ); xChild.set( xChild->getParent(), uno::UNO_QUERY_THROW ); xChild.set( xChild->getParent(), uno::UNO_QUERY_THROW ); - css::uno::Reference< css::frame::XModel > xModel( xChild->getParent(), uno::UNO_QUERY_THROW ); + uno::Reference<frame::XModel> xModel( xChild->getParent(), uno::UNO_QUERY_THROW ); uno::Reference<lang::XMultiComponentFactory > xServiceManager( mxContext->getServiceManager(), uno::UNO_QUERY_THROW ); uno::Reference< XControlProvider > xControlProvider( xServiceManager->createInstanceWithContext( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ooo.vba.ControlProvider" ) ), mxContext ), uno::UNO_QUERY_THROW ); m_xControl.set( xControlProvider->createControl( xControlShape, xModel ) ); @@ -134,6 +137,16 @@ ScVbaOLEObject::setWidth( double _width ) throw (uno::RuntimeException) m_xControl->setWidth( _width ); } +rtl::OUString SAL_CALL ScVbaOLEObject::getLinkedCell() throw (uno::RuntimeException) +{ + return m_xControl->getControlSource(); +} + +void SAL_CALL ScVbaOLEObject::setLinkedCell( const ::rtl::OUString& _linkedcell ) throw (uno::RuntimeException) +{ + m_xControl->setControlSource( _linkedcell ); +} + rtl::OUString ScVbaOLEObject::getServiceImplName() { diff --git a/sc/source/ui/vba/vbaoleobject.hxx b/sc/source/ui/vba/vbaoleobject.hxx index 136f536..4f9a4ba 100644 --- a/sc/source/ui/vba/vbaoleobject.hxx +++ b/sc/source/ui/vba/vbaoleobject.hxx @@ -54,6 +54,7 @@ public: virtual void SAL_CALL setEnabled( ::sal_Bool _enabled ) throw (css::uno::RuntimeException); virtual sal_Bool SAL_CALL getVisible() throw (css::uno::RuntimeException); virtual void SAL_CALL setVisible( ::sal_Bool _visible ) throw (css::uno::RuntimeException); + virtual double SAL_CALL getLeft() throw (css::uno::RuntimeException); virtual void SAL_CALL setLeft( double _left ) throw (css::uno::RuntimeException); virtual double SAL_CALL getTop() throw (css::uno::RuntimeException); @@ -62,7 +63,8 @@ public: virtual void SAL_CALL setHeight( double _height ) throw (css::uno::RuntimeException); virtual double SAL_CALL getWidth() throw (css::uno::RuntimeException); virtual void SAL_CALL setWidth( double _width ) throw (css::uno::RuntimeException); - + virtual ::rtl::OUString SAL_CALL getLinkedCell() throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setLinkedCell( const ::rtl::OUString& _linkedcell ) throw (::com::sun::star::uno::RuntimeException); }; #endif //SC_VBA_OLEOBJECT_HXX diff --git a/sc/source/ui/vba/vbavalidation.cxx b/sc/source/ui/vba/vbavalidation.cxx index 358d373..43859a5 100644 --- a/sc/source/ui/vba/vbavalidation.cxx +++ b/sc/source/ui/vba/vbavalidation.cxx @@ -341,6 +341,46 @@ ScVbaValidation::getFormula2() throw (uno::RuntimeException) return xCond->getFormula2(); } +sal_Int32 SAL_CALL +ScVbaValidation::getType() throw (uno::RuntimeException) +{ + uno::Reference< beans::XPropertySet > xProps( lcl_getValidationProps( m_xRange ) ); + sheet::ValidationType nValType = sheet::ValidationType_ANY; + xProps->getPropertyValue( STYPE ) >>= nValType; + sal_Int32 nExcelType = excel::XlDVType::xlValidateList; // pick a default + if ( xProps.is() ) + { + switch ( nValType ) + { + case sheet::ValidationType_LIST: + nExcelType = excel::XlDVType::xlValidateList; + break; + case sheet::ValidationType_ANY: // not ANY not really a great match for anything I fear:-( + nExcelType = excel::XlDVType::xlValidateInputOnly; + break; + case sheet::ValidationType_CUSTOM: + nExcelType = excel::XlDVType::xlValidateCustom; + break; + case sheet::ValidationType_WHOLE: + nExcelType = excel::XlDVType::xlValidateWholeNumber; + break; + case sheet::ValidationType_DECIMAL: + nExcelType = excel::XlDVType::xlValidateDecimal; + break; + case sheet::ValidationType_DATE: + nExcelType = excel::XlDVType::xlValidateDate; + break; + case sheet::ValidationType_TIME: + nExcelType = excel::XlDVType::xlValidateTime; + break; + case sheet::ValidationType_TEXT_LEN: + nExcelType = excel::XlDVType::xlValidateTextLength; + break; + }; + } + return nExcelType; +} + rtl::OUString ScVbaValidation::getServiceImplName() { diff --git a/sc/source/ui/vba/vbavalidation.hxx b/sc/source/ui/vba/vbavalidation.hxx index 526ee43..fe07a00 100644 --- a/sc/source/ui/vba/vbavalidation.hxx +++ b/sc/source/ui/vba/vbavalidation.hxx @@ -60,6 +60,7 @@ public: virtual void SAL_CALL setErrorMessage( const ::rtl::OUString& _errormessage ) throw (css::uno::RuntimeException); virtual ::rtl::OUString SAL_CALL getFormula1() throw (css::uno::RuntimeException) ; virtual ::rtl::OUString SAL_CALL getFormula2() throw (css::uno::RuntimeException); + virtual sal_Int32 SAL_CALL getType() throw (css::uno::RuntimeException); // Methods virtual void SAL_CALL Delete( ) throw (css::uno::RuntimeException); virtual void SAL_CALL Add( const css::uno::Any& Type, const css::uno::Any& AlertStyle, const css::uno::Any& Operator, const css::uno::Any& Formula1, const css::uno::Any& Formula2 ) throw (css::uno::RuntimeException); diff --git a/svtools/inc/bindablecontrolhelper.hxx b/svtools/inc/bindablecontrolhelper.hxx index e53af10..f2ccf5b 100644 --- a/svtools/inc/bindablecontrolhelper.hxx +++ b/svtools/inc/bindablecontrolhelper.hxx @@ -49,7 +49,7 @@ namespace svt BindableControlHelper(); // never implemented public: - SVT_DLLPUBLIC static void ApplyListSourceAndBindableData( const com::sun::star::uno::Reference< com::sun::star::frame::XModel >& xModel, const com::sun::star::uno::Reference< com::sun::star::uno::XInterface >& rObj, const rtl::OUString& rsCtrlSource, const rtl::OUString& rsRowSource ); + SVT_DLLPUBLIC static void ApplyListSourceAndBindableData( const com::sun::star::uno::Reference< com::sun::star::frame::XModel >& xModel, const com::sun::star::uno::Reference< com::sun::star::uno::XInterface >& rObj, const rtl::OUString& rsCtrlSource, const rtl::OUString& rsRowSource, sal_uInt16 nRefTab = 0 ); }; //........................................................................ diff --git a/svtools/source/misc/bindablecontrolhelper.cxx b/svtools/source/misc/bindablecontrolhelper.cxx index 411a37f..fce9c43 100644 --- a/svtools/source/misc/bindablecontrolhelper.cxx +++ b/svtools/source/misc/bindablecontrolhelper.cxx @@ -80,7 +80,7 @@ bool lcl_isNamedRange( const rtl::OUString& sAddress, const uno::Reference< fram void -BindableControlHelper::ApplyListSourceAndBindableData( const com::sun::star::uno::Reference< com::sun::star::frame::XModel >& xModel, const com::sun::star::uno::Reference< com::sun::star::uno::XInterface >& rObj, const rtl::OUString& rsCtrlSource, const rtl::OUString& rsRowSource ) +BindableControlHelper::ApplyListSourceAndBindableData( const com::sun::star::uno::Reference< com::sun::star::frame::XModel >& xModel, const com::sun::star::uno::Reference< com::sun::star::uno::XInterface >& rObj, const rtl::OUString& rsCtrlSource, const rtl::OUString& rsRowSource, sal_uInt16 nRefTab ) { // XBindable etc. uno::Reference< lang::XMultiServiceFactory > xFac; @@ -100,7 +100,8 @@ BindableControlHelper::ApplyListSourceAndBindableData( const com::sun::star::uno { // we need this service to properly convert XL notation also // Should be easy to extend - xConvertor->setPropertyValue( C2U( "XL_A1_Representation" ), uno::makeAny( rsCtrlSource ) ); + xConvertor->setPropertyValue( C2U( "ReferenceSheet" ), uno::makeAny( nRefTab ) ); + xConvertor->setPropertyValue( C2U( "XLA1Representation" ), uno::makeAny( rsCtrlSource ) ); xConvertor->getPropertyValue( C2U( "Address" ) ) >>= aAddress; } @@ -132,7 +133,7 @@ BindableControlHelper::ApplyListSourceAndBindableData( const com::sun::star::uno { // we need this service to properly convert XL notation also // Should be easy to extend - xConvertor->setPropertyValue( C2U( "XL_A1_Representation" ), uno::makeAny( rsRowSource ) ); + xConvertor->setPropertyValue( C2U( "XLA1Representation" ), uno::makeAny( rsRowSource ) ); xConvertor->getPropertyValue( C2U( "Address" ) ) >>= aAddress; } } diff --git a/vbahelper/Library_msforms.mk b/vbahelper/Library_msforms.mk index 1b0e565..3b6d088 100644 --- a/vbahelper/Library_msforms.mk +++ b/vbahelper/Library_msforms.mk @@ -58,6 +58,7 @@ $(eval $(call gb_Library_use_libraries,msforms,\ svl \ svt \ svx \ + svxcore \ tk \ tl \ vbahelper \ diff --git a/vbahelper/source/msforms/vbacombobox.cxx b/vbahelper/source/msforms/vbacombobox.cxx index cd4b5d4..e7627fc 100644 --- a/vbahelper/source/msforms/vbacombobox.cxx +++ b/vbahelper/source/msforms/vbacombobox.cxx @@ -307,6 +307,16 @@ void SAL_CALL ScVbaComboBox::setLocked( sal_Bool bLocked ) throw (uno::RuntimeEx ScVbaControl::setLocked( bLocked ); } +rtl::OUString SAL_CALL ScVbaComboBox::getLinkedCell() throw (uno::RuntimeException) +{ + return ScVbaControl::getControlSource(); +} + +void SAL_CALL ScVbaComboBox::setLinkedCell( const ::rtl::OUString& _linkedcell ) throw (uno::RuntimeException) +{ + ScVbaControl::setControlSource( _linkedcell ); +} + uno::Sequence< rtl::OUString > ScVbaComboBox::getServiceNames() { diff --git a/vbahelper/source/msforms/vbacombobox.hxx b/vbahelper/source/msforms/vbacombobox.hxx index d8e65f2..7ca1ca5 100644 --- a/vbahelper/source/msforms/vbacombobox.hxx +++ b/vbahelper/source/msforms/vbacombobox.hxx @@ -79,6 +79,8 @@ public: virtual void SAL_CALL setAutoSize( sal_Bool bAutoSize ) throw (css::uno::RuntimeException); virtual sal_Bool SAL_CALL getLocked() throw (css::uno::RuntimeException); virtual void SAL_CALL setLocked( sal_Bool bAutoSize ) throw (css::uno::RuntimeException); + virtual ::rtl::OUString SAL_CALL getLinkedCell() throw (css::uno::RuntimeException); + virtual void SAL_CALL setLinkedCell( const ::rtl::OUString& _linkedcell ) throw (css::uno::RuntimeException); // Methods virtual void SAL_CALL AddItem( const css::uno::Any& pvargItem, const css::uno::Any& pvargIndex ) throw (css::uno::RuntimeException); diff --git a/vbahelper/source/msforms/vbacontrol.cxx b/vbahelper/source/msforms/vbacontrol.cxx index 79de551..a5cf70e 100644 --- a/vbahelper/source/msforms/vbacontrol.cxx +++ b/vbahelper/source/msforms/vbacontrol.cxx @@ -65,6 +65,10 @@ #include <vbahelper/helperdecl.hxx> #include <toolkit/helper/vclunohelper.hxx> #include <vcl/window.hxx> +#include <com/sun/star/drawing/XDrawPagesSupplier.hpp> +#include <com/sun/star/form/XFormsSupplier.hpp> +#include <svx/svdobj.hxx> + using namespace com::sun::star; using namespace ooo::vba; @@ -297,7 +301,7 @@ ScVbaControl::getControlSource() throw (uno::RuntimeException) table::CellAddress aAddress; xProps->getPropertyValue( rtl::OUString( "BoundCell" ) ) >>= aAddress; xConvertor->setPropertyValue( rtl::OUString( "Address" ), uno::makeAny( aAddress ) ); - xConvertor->getPropertyValue( rtl::OUString( "XL_A1_Representation" ) ) >>= sControlSource; + xConvertor->getPropertyValue( rtl::OUString( "XLA1Representation" ) ) >>= sControlSource; } catch(const uno::Exception&) { @@ -310,7 +314,40 @@ void SAL_CALL ScVbaControl::setControlSource( const rtl::OUString& _controlsource ) throw (uno::RuntimeException) { rtl::OUString sEmpty; - svt::BindableControlHelper::ApplyListSourceAndBindableData( m_xModel, m_xProps, _controlsource, sEmpty ); + // afaik this is only relevant for Excel documents ( and we need to set up a + // reference tab in case no Sheet is specified in "_controlsource" + // Can't use the active sheet either, code may of course access + uno::Reference< drawing::XDrawPagesSupplier > xSupplier( m_xModel, uno::UNO_QUERY_THROW ); + uno::Reference< container::XIndexAccess > xIndex( xSupplier->getDrawPages(), uno::UNO_QUERY_THROW ); + sal_Int32 nLen = xIndex->getCount(); + bool bMatched = false; + sal_Int16 nRefTab = 0; + for ( sal_Int32 index = 0; index < nLen; ++index ) + { + try + { + uno::Reference< form::XFormsSupplier > xFormSupplier( xIndex->getByIndex( index ), uno::UNO_QUERY_THROW ); + uno::Reference< container::XIndexAccess > xFormIndex( xFormSupplier->getForms(), uno::UNO_QUERY_THROW ); + // get the www-standard container + uno::Reference< container::XIndexAccess > xFormControls( xFormIndex->getByIndex(0), uno::UNO_QUERY_THROW ); + sal_Int32 nCntrls = xFormControls->getCount(); + for( sal_Int32 cIndex = 0; cIndex < nCntrls; ++cIndex ) + { + uno::Reference< uno::XInterface > xControl( xFormControls->getByIndex( cIndex ), uno::UNO_QUERY_THROW ); + bMatched = ( m_xProps == xControl ); + if ( bMatched ) + { + nRefTab = index; + break; + } + } + } + catch( uno::Exception& ) {} + if ( bMatched ) + break; + } + + svt::BindableControlHelper::ApplyListSourceAndBindableData( m_xModel, m_xProps, _controlsource, sEmpty, sal_uInt16( nRefTab ) ); } rtl::OUString SAL_CALL @@ -329,7 +366,7 @@ ScVbaControl::getRowSource() throw (uno::RuntimeException) table::CellRangeAddress aAddress; xProps->getPropertyValue( rtl::OUString( "CellRange" ) ) >>= aAddress; xConvertor->setPropertyValue( rtl::OUString( "Address"), uno::makeAny( aAddress ) ); - xConvertor->getPropertyValue( rtl::OUString( "XL_A1_Representation" ) ) >>= sRowSource; + xConvertor->getPropertyValue( rtl::OUString( "XLA1Representation" ) ) >>= sRowSource; } catch(const uno::Exception&) { @@ -343,8 +380,6 @@ ScVbaControl::setRowSource( const rtl::OUString& _rowsource ) throw (uno::Runtim { rtl::OUString sEmpty; svt::BindableControlHelper::ApplyListSourceAndBindableData( m_xModel, m_xProps, sEmpty, _rowsource ); -#else - throw uno::RuntimeException( rtl::OUString( "setRowSource not supported " ).concat( _rowsource ), uno::Reference< uno::XInterface >()); // not supported } rtl::OUString SAL_CALL @@ -700,12 +735,21 @@ void ScVbaControl::setBackColor( sal_Int32 nBackColor ) throw (uno::RuntimeExcep sal_Bool ScVbaControl::getAutoSize() throw (uno::RuntimeException) { - return sal_False; + bool bIsResizeEnabled = false; + uno::Reference< uno::XInterface > xIf( m_xControl, uno::UNO_QUERY_THROW ); + SdrObject* pObj = SdrObject::getSdrObjectFromXShape( xIf ); + if ( pObj ) + bIsResizeEnabled = !pObj->IsResizeProtect(); + return bIsResizeEnabled; } // currently no implementation for this -void ScVbaControl::setAutoSize( sal_Bool /*bAutoSize*/ ) throw (uno::RuntimeException) +void ScVbaControl::setAutoSize( sal_Bool bAutoSize ) throw (uno::RuntimeException) { + uno::Reference< uno::XInterface > xIf( m_xControl, uno::UNO_QUERY_THROW ); + SdrObject* pObj = SdrObject::getSdrObjectFromXShape( xIf ); + if ( pObj ) + pObj->SetResizeProtect( !bAutoSize ); } sal_Bool ScVbaControl::getLocked() throw (uno::RuntimeException) commit 4a117a4f8a25e37673ddc7760caee1a790e58cac Author: Noel Power <noel.po...@suse.com> Date: Wed Mar 27 16:18:33 2013 +0000 ensure bindablecontrolhelper is built ( and header delivered ) Change-Id: Iae00d7b4b61b8b363f79a6a20192e856c5cab8e5 diff --git a/svtools/Library_svt.mk b/svtools/Library_svt.mk index 2dae9c9..0fca305 100644 --- a/svtools/Library_svt.mk +++ b/svtools/Library_svt.mk @@ -170,6 +170,7 @@ $(eval $(call gb_Library_add_exception_objects,svt,\ svtools/source/java/javacontext \ svtools/source/java/javainteractionhandler \ svtools/source/misc/acceleratorexecute \ + svtools/source/misc/bindablecontrolhelper \ svtools/source/misc/chartprettypainter \ svtools/source/misc/cliplistener \ svtools/source/misc/dialogclosedlistener \ commit c8d44a30050db28394cd8ac2f0f23bde717549f4 Author: Noel Power <noel.po...@suse.com> Date: Wed Mar 27 16:14:01 2013 +0000 deliver bindablecontrolhelper.hxx Change-Id: Ia969cbecabbc931478862771557b9fa2bfad5792 diff --git a/svtools/Package_inc.mk b/svtools/Package_inc.mk index d120891..95f1980 100644 --- a/svtools/Package_inc.mk +++ b/svtools/Package_inc.mk @@ -38,6 +38,7 @@ $(eval $(call gb_Package_add_file,svtools_inc,inc/svtools/accessibletableprovide $(eval $(call gb_Package_add_file,svtools_inc,inc/svtools/addresstemplate.hxx,svtools/addresstemplate.hxx)) $(eval $(call gb_Package_add_file,svtools_inc,inc/svtools/apearcfg.hxx,svtools/apearcfg.hxx)) $(eval $(call gb_Package_add_file,svtools_inc,inc/svtools/asynclink.hxx,svtools/asynclink.hxx)) +$(eval $(call gb_Package_add_file,svtools_inc,inc/svtools/bindablecontrolhelper.hxx,bindablecontrolhelper.hxx)) $(eval $(call gb_Package_add_file,svtools_inc,inc/svtools/borderhelper.hxx,svtools/borderhelper.hxx)) $(eval $(call gb_Package_add_file,svtools_inc,inc/svtools/brwbox.hxx,svtools/brwbox.hxx)) $(eval $(call gb_Package_add_file,svtools_inc,inc/svtools/brwhead.hxx,svtools/brwhead.hxx)) commit c422543bb35af61e05ce3dffc33dd08cbf0dbcc5 Author: Noel Power <noel.po...@suse.com> Date: Wed Mar 27 16:05:33 2013 +0000 Remove VBA_OOBUILD_HACK ( it's preventing functionality getting compiled ) Change-Id: I53d1a7c11b0a97e4e021e37e83109e5716bfa173 diff --git a/vbahelper/source/msforms/vbacontrol.cxx b/vbahelper/source/msforms/vbacontrol.cxx index 1978899..79de551 100644 --- a/vbahelper/source/msforms/vbacontrol.cxx +++ b/vbahelper/source/msforms/vbacontrol.cxx @@ -45,9 +45,7 @@ #include <com/sun/star/form/XChangeListener.hpp> #include <ooo/vba/XControlProvider.hpp> #include <ooo/vba/msforms/fmMousePointer.hpp> -#ifdef VBA_OOBUILD_HACK #include <svtools/bindablecontrolhelper.hxx> -#endif #include "vbacontrol.hxx" #include "vbacombobox.hxx" #include "vbabutton.hxx" @@ -287,10 +285,6 @@ void SAL_CALL ScVbaControl::Move( double Left, double Top, const uno::Any& Width rtl::OUString SAL_CALL ScVbaControl::getControlSource() throw (uno::RuntimeException) { -// #FIXME I *hate* having these upstream differences -// but this is necessary until I manage to upstream other -// dependant parts -#ifdef VBA_OOBUILD_HACK rtl::OUString sControlSource; uno::Reference< form::binding::XBindableValue > xBindable( m_xProps, uno::UNO_QUERY ); if ( xBindable.is() ) @@ -310,26 +304,18 @@ ScVbaControl::getControlSource() throw (uno::RuntimeException) } } return sControlSource; -#else - throw uno::RuntimeException( rtl::OUString( "getControlSource not supported" ), uno::Reference< uno::XInterface >()); // not supported -#endif } void SAL_CALL ScVbaControl::setControlSource( const rtl::OUString& _controlsource ) throw (uno::RuntimeException) { -#ifdef VBA_OOBUILD_HACK rtl::OUString sEmpty; svt::BindableControlHelper::ApplyListSourceAndBindableData( m_xModel, m_xProps, _controlsource, sEmpty ); -#else - throw uno::RuntimeException( rtl::OUString( "setControlSource not supported " ).concat( _controlsource ), uno::Reference< uno::XInterface >()); // not supported -#endif } rtl::OUString SAL_CALL ScVbaControl::getRowSource() throw (uno::RuntimeException) { -#ifdef VBA_OOBUILD_HACK rtl::OUString sRowSource; uno::Reference< form::binding::XListEntrySink > xListSink( m_xProps, uno::UNO_QUERY ); if ( xListSink.is() ) @@ -350,20 +336,15 @@ ScVbaControl::getRowSource() throw (uno::RuntimeException) } } return sRowSource; -#else - throw uno::RuntimeException( rtl::OUString( "getRowSource not supported" ), uno::Reference< uno::XInterface >()); // not supported -#endif } void SAL_CALL ScVbaControl::setRowSource( const rtl::OUString& _rowsource ) throw (uno::RuntimeException) { -#ifdef VBA_OOBUILD_HACK rtl::OUString sEmpty; svt::BindableControlHelper::ApplyListSourceAndBindableData( m_xModel, m_xProps, sEmpty, _rowsource ); #else throw uno::RuntimeException( rtl::OUString( "setRowSource not supported " ).concat( _rowsource ), uno::Reference< uno::XInterface >()); // not supported -#endif } rtl::OUString SAL_CALL commit a48e4b6415af147177f27774843af6b64198ef68 Author: Noel Power <noel.po...@suse.com> Date: Wed Mar 27 12:59:34 2013 +0000 prepend Validation.Formula1 results with '=' for anything not a address Change-Id: If8e0b720bca4198123b1717967fc9e0beff6f874 diff --git a/sc/source/ui/vba/vbarange.cxx b/sc/source/ui/vba/vbarange.cxx index 958888e..fc46ffb 100644 --- a/sc/source/ui/vba/vbarange.cxx +++ b/sc/source/ui/vba/vbarange.cxx @@ -1130,7 +1130,7 @@ public: }; bool -getCellRangesForAddress( sal_uInt16& rResFlags, const rtl::OUString& sAddress, ScDocShell* pDocSh, ScRangeList& rCellRanges, formula::FormulaGrammar::AddressConvention& eConv, char cDelimiter = 0 ) +ScVbaRange::getCellRangesForAddress( sal_uInt16& rResFlags, const rtl::OUString& sAddress, ScDocShell* pDocSh, ScRangeList& rCellRanges, formula::FormulaGrammar::AddressConvention& eConv, char cDelimiter ) { ScDocument* pDoc = NULL; @@ -1205,7 +1205,7 @@ bool getScRangeListForAddress( const rtl::OUString& sName, ScDocShell* pDocSh, S } sal_uInt16 nFlags = 0; - if ( !getCellRangesForAddress( nFlags, sAddress, pDocSh, aCellRanges, eConv, aChar ) ) + if ( !ScVbaRange::getCellRangesForAddress( nFlags, sAddress, pDocSh, aCellRanges, eConv, aChar ) ) return false; bool bTabFromReferrer = !( nFlags & SCA_TAB_3D ); diff --git a/sc/source/ui/vba/vbarange.hxx b/sc/source/ui/vba/vbarange.hxx index 23290c1..413b84d 100644 --- a/sc/source/ui/vba/vbarange.hxx +++ b/sc/source/ui/vba/vbarange.hxx @@ -312,6 +312,7 @@ public: // * object should be a lightweight as possible // * we shouldn't need hacks like this below static css::uno::Reference< ov::excel::XRange > ApplicationRange( const css::uno::Reference< css::uno::XComponentContext >& xContext, const css::uno::Any &Cell1, const css::uno::Any &Cell2 ) throw (css::uno::RuntimeException); + static bool getCellRangesForAddress( sal_uInt16& rResFlags, const rtl::OUString& sAddress, ScDocShell* pDocSh, ScRangeList& rCellRanges, formula::FormulaGrammar::AddressConvention& eConv, char cDelimiter = 0 ); virtual sal_Bool SAL_CALL GoalSeek( const css::uno::Any& Goal, const css::uno::Reference< ov::excel::XRange >& ChangingCell ) throw (css::uno::RuntimeException); virtual css::uno::Reference< ov::excel::XRange > SAL_CALL SpecialCells( const css::uno::Any& _oType, const css::uno::Any& _oValue) throw ( css::script::BasicErrorException ); // XErrorQuery diff --git a/sc/source/ui/vba/vbavalidation.cxx b/sc/source/ui/vba/vbavalidation.cxx index 03ce70a..358d373 100644 --- a/sc/source/ui/vba/vbavalidation.cxx +++ b/sc/source/ui/vba/vbavalidation.cxx @@ -36,6 +36,9 @@ #include <ooo/vba/excel/XlDVAlertStyle.hpp> #include "unonames.hxx" +#include "rangelst.hxx" +#include "excelvbahelper.hxx" +#include "vbarange.hxx" using namespace ::ooo::vba; using namespace ::com::sun::star; @@ -314,7 +317,21 @@ ScVbaValidation::Add( const uno::Any& Type, const uno::Any& AlertStyle, const un ScVbaValidation::getFormula1() throw (uno::RuntimeException) { uno::Reference< sheet::XSheetCondition > xCond( lcl_getValidationProps( m_xRange ), uno::UNO_QUERY_THROW ); - return xCond->getFormula1(); + rtl::OUString sString = xCond->getFormula1(); + + sal_uInt16 nFlags = 0; + ScRangeList aCellRanges; + formula::FormulaGrammar::AddressConvention eConv = formula::FormulaGrammar::CONV_XL_A1; + + ScDocShell* pDocSh = excel::GetDocShellFromRange( m_xRange ); + // in calc validation formula is either a range or formula + // that results in range. + // In VBA both formula and address can have a leading '=' + // in result of getFormula1, however it *seems* that a named range or + // real formula has to (or is expected to) have the '=' + if ( pDocSh && !ScVbaRange::getCellRangesForAddress( nFlags, sString, pDocSh, aCellRanges, eConv ) ) + sString = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("=") ).concat( sString ); + return sString; } ::rtl::OUString SAL_CALL _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits