[Libreoffice-commits] core.git: Branch 'libreoffice-4-0' - 3 commits - oovbaapi/ooo sc/source svtools/inc svtools/source vbahelper/Library_msforms.mk vbahelper/source

Noel Power noel.power at suse.com
Fri Apr 5 02:04:50 PDT 2013


 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/inc/svtools/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       |   56 ++++++++++++++++++++++--
 17 files changed, 168 insertions(+), 16 deletions(-)

New commits:
commit 264e6370dc5df458a494d2f5082251bf60145a19
Author: Noel Power <noel.power at suse.com>
Date:   Fri Mar 29 16:53:24 2013 +0000

    squash NoSuchElementExceptions when modifying keybindings
    
    Change-Id: I37882845660929e0001a834b6685a4087dfb465f
    Reviewed-on: https://gerrit.libreoffice.org/3208
    Reviewed-by: Miklos Vajna <vmiklos at suse.cz>
    Tested-by: Miklos Vajna <vmiklos at suse.cz>

diff --git a/sc/source/ui/vba/vbaapplication.cxx b/sc/source/ui/vba/vbaapplication.cxx
index f15f0ab..db8bcaf 100644
--- a/sc/source/ui/vba/vbaapplication.cxx
+++ b/sc/source/ui/vba/vbaapplication.cxx
@@ -1297,6 +1297,21 @@ ScVbaApplication::MenuBars( const uno::Any& aIndex ) throw (uno::RuntimeExceptio
     return uno::Any( xMenuBars );
 }
 
+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 072bd0c..7541178 100644
--- a/sc/source/ui/vba/vbaapplication.hxx
+++ b/sc/source/ui/vba/vbaapplication.hxx
@@ -96,7 +96,7 @@ public:
     virtual void SAL_CALL setStatusBar( const css::uno::Any& _statusbar ) throw (css::uno::RuntimeException);
     virtual ::sal_Int32 SAL_CALL getCursor() throw (css::uno::RuntimeException);
     virtual void SAL_CALL setCursor( ::sal_Int32 _cursor ) 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 getEnableEvents() throw (css::uno::RuntimeException);
     virtual void SAL_CALL setEnableEvents( sal_Bool bEnable ) throw (css::uno::RuntimeException);
 
commit c1df69d8380825953d4b3a9ac8dcf361b7a5a4a4
Author: Noel Power <noel.power at suse.com>
Date:   Fri Mar 29 16:46:21 2013 +0000

    Added and fixed various vba API
    
    Added OLEObject.LinkedCell
    Added ComboBox.LinkedCell
    Added Validation.Type
    
    provided a 'real' implemenation for AutoSize member ( applicable to various controls )
    
    Change-Id: Id556d4c95a800951803609433e834105a6f20dbe
    Reviewed-on: https://gerrit.libreoffice.org/3207
    Reviewed-by: Miklos Vajna <vmiklos at suse.cz>
    Tested-by: Miklos Vajna <vmiklos at suse.cz>

diff --git a/oovbaapi/ooo/vba/excel/XOLEObject.idl b/oovbaapi/ooo/vba/excel/XOLEObject.idl
index 9eb3bc2..af1a8d1 100644
--- a/oovbaapi/ooo/vba/excel/XOLEObject.idl
+++ b/oovbaapi/ooo/vba/excel/XOLEObject.idl
@@ -38,6 +38,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 873ca6d..a6549a9 100644
--- a/oovbaapi/ooo/vba/excel/XValidation.idl
+++ b/oovbaapi/ooo/vba/excel/XValidation.idl
@@ -41,6 +41,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 02ee498..ac1b570 100644
--- a/oovbaapi/ooo/vba/msforms/XComboBox.idl
+++ b/oovbaapi/ooo/vba/msforms/XComboBox.idl
@@ -44,6 +44,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 e02d7e0..8824921 100644
--- a/sc/source/ui/vba/vbaoleobject.cxx
+++ b/sc/source/ui/vba/vbaoleobject.cxx
@@ -25,7 +25,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;
 
@@ -38,7 +41,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 ) );
@@ -125,6 +128,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 48bcaf3..4059638 100644
--- a/sc/source/ui/vba/vbaoleobject.hxx
+++ b/sc/source/ui/vba/vbaoleobject.hxx
@@ -45,6 +45,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);
@@ -53,7 +54,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 e7ab396..7431370 100644
--- a/sc/source/ui/vba/vbavalidation.cxx
+++ b/sc/source/ui/vba/vbavalidation.cxx
@@ -334,6 +334,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 0acd975..ea236a3 100644
--- a/sc/source/ui/vba/vbavalidation.hxx
+++ b/sc/source/ui/vba/vbavalidation.hxx
@@ -51,6 +51,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/svtools/bindablecontrolhelper.hxx b/svtools/inc/svtools/bindablecontrolhelper.hxx
index 15d0d0d..d9e4e7d 100644
--- a/svtools/inc/svtools/bindablecontrolhelper.hxx
+++ b/svtools/inc/svtools/bindablecontrolhelper.hxx
@@ -40,7 +40,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 9c57747..e5cd428 100644
--- a/svtools/source/misc/bindablecontrolhelper.cxx
+++ b/svtools/source/misc/bindablecontrolhelper.cxx
@@ -71,7 +71,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;
@@ -91,7 +91,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;
          }
 
@@ -123,7 +124,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 63d0f67..ac9c7bd 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 b78dea3..dbdabc2 100644
--- a/vbahelper/source/msforms/vbacombobox.cxx
+++ b/vbahelper/source/msforms/vbacombobox.cxx
@@ -277,6 +277,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< OUString >
 ScVbaComboBox::getServiceNames()
 {
diff --git a/vbahelper/source/msforms/vbacombobox.hxx b/vbahelper/source/msforms/vbacombobox.hxx
index f71f9c1..06adc9d 100644
--- a/vbahelper/source/msforms/vbacombobox.hxx
+++ b/vbahelper/source/msforms/vbacombobox.hxx
@@ -69,6 +69,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 f97ee77..288cefa 100644
--- a/vbahelper/source/msforms/vbacontrol.cxx
+++ b/vbahelper/source/msforms/vbacontrol.cxx
@@ -56,6 +56,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;
 
@@ -286,7 +290,7 @@ ScVbaControl::getControlSource() throw (uno::RuntimeException)
             table::CellAddress aAddress;
             xProps->getPropertyValue( "BoundCell" ) >>= aAddress;
             xConvertor->setPropertyValue( "Address" , uno::makeAny( aAddress ) );
-                    xConvertor->getPropertyValue( "XL_A1_Representation" ) >>= sControlSource;
+                    xConvertor->getPropertyValue( "XLA1Representation" ) >>= sControlSource;
         }
         catch(const uno::Exception&)
         {
@@ -299,7 +303,40 @@ void SAL_CALL
 ScVbaControl::setControlSource( const OUString& _controlsource ) throw (uno::RuntimeException)
 {
     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 ) );
 }
 
 OUString SAL_CALL
@@ -318,7 +355,7 @@ ScVbaControl::getRowSource() throw (uno::RuntimeException)
             table::CellRangeAddress aAddress;
             xProps->getPropertyValue( "CellRange" ) >>= aAddress;
             xConvertor->setPropertyValue( "Address" , uno::makeAny( aAddress ) );
-            xConvertor->getPropertyValue( "XL_A1_Representation" ) >>= sRowSource;
+            xConvertor->getPropertyValue( "XLA1Representation" ) >>= sRowSource;
         }
         catch(const uno::Exception&)
         {
@@ -683,12 +720,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 bed93effc620626e8a7e0704cda6aafdd6ad8088
Author: Noel Power <noel.power at suse.com>
Date:   Fri Mar 29 15:54:08 2013 +0000

    prepend Validation.Formula1 results with '=' for anything not a address
    
    Change-Id: I6061378788b7299f8a8431d1e8d00a4e6ea3e8fb
    Reviewed-on: https://gerrit.libreoffice.org/3206
    Reviewed-by: Miklos Vajna <vmiklos at suse.cz>
    Tested-by: Miklos Vajna <vmiklos at suse.cz>

diff --git a/sc/source/ui/vba/vbarange.cxx b/sc/source/ui/vba/vbarange.cxx
index 8b77f27..abbe31e 100644
--- a/sc/source/ui/vba/vbarange.cxx
+++ b/sc/source/ui/vba/vbarange.cxx
@@ -1146,7 +1146,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;
@@ -1221,7 +1221,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 ff4c618..7c3a3d9 100644
--- a/sc/source/ui/vba/vbarange.hxx
+++ b/sc/source/ui/vba/vbarange.hxx
@@ -285,6 +285,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 1ba1724..e7ab396 100644
--- a/sc/source/ui/vba/vbavalidation.cxx
+++ b/sc/source/ui/vba/vbavalidation.cxx
@@ -28,6 +28,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;
@@ -307,7 +310,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 = "=" + sString;
+    return sString;
 }
 
 ::rtl::OUString SAL_CALL


More information about the Libreoffice-commits mailing list