[Libreoffice-commits] core.git: Branch 'distro/suse/suse-4.0' - 2 commits - sc/source

Noel Power noel.power at suse.com
Thu May 30 06:11:43 PDT 2013


 sc/source/ui/vba/vbarange.cxx  |   22 ++++++++++
 sc/source/ui/vba/vbawindow.cxx |   83 +++++++++++++++++++++++++++--------------
 sc/source/ui/vba/vbawindow.hxx |    2 
 3 files changed, 78 insertions(+), 29 deletions(-)

New commits:
commit 21431fa2231de5493235b276b5a1d007708f8099
Author: Noel Power <noel.power at suse.com>
Date:   Tue May 28 17:33:33 2013 +0100

    some Worksheet.Change support
    
    Change-Id: I91203e74d54adba17a20ef7b7d835d9ac49855be
    (cherry picked from commit 20d792d6379600df8b56a2735f9dd1cb63967e4d)

diff --git a/sc/source/ui/vba/vbarange.cxx b/sc/source/ui/vba/vbarange.cxx
index ef1adde..c9eb427 100644
--- a/sc/source/ui/vba/vbarange.cxx
+++ b/sc/source/ui/vba/vbarange.cxx
@@ -1832,6 +1832,7 @@ ScVbaRange::fillSeries( sheet::FillDirection nFillDirection, sheet::FillMode nFi
 
     uno::Reference< sheet::XCellSeries > xCellSeries(mxRange, uno::UNO_QUERY_THROW );
     xCellSeries->fillSeries( nFillDirection, nFillMode, nFillDateMode, fStep, fEndValue );
+    fireChangeEvent();
 }
 
 void
@@ -3094,7 +3095,28 @@ ScVbaRange::Replace( const ::rtl::OUString& What, const ::rtl::OUString& Replace
         // OOo.org afaik
 
         uno::Reference< util::XSearchDescriptor > xSearch( xDescriptor, uno::UNO_QUERY );
+        uno::Reference< container::XIndexAccess > xIndexAccess = xReplace->findAll( xSearch );
         xReplace->replaceAll( xSearch );
+        if ( xIndexAccess.is() && xIndexAccess->getCount() > 0 )
+        {
+            for ( sal_Int32 i = 0; i < xIndexAccess->getCount(); ++i )
+            {
+                uno::Reference< table::XCellRange > xCellRange( xIndexAccess->getByIndex( i ), uno::UNO_QUERY );
+                if ( xCellRange.is() )
+                {
+                    uno::Reference< excel::XRange > xRange( new ScVbaRange( mxParent, mxContext, xCellRange ) );
+                    uno::Reference< container::XEnumerationAccess > xEnumAccess( xRange, uno::UNO_QUERY_THROW );
+                    uno::Reference< container::XEnumeration > xEnum = xEnumAccess->createEnumeration();
+                    while ( xEnum->hasMoreElements() )
+                    {
+                        uno::Reference< excel::XRange > xNextRange( xEnum->nextElement(), uno::UNO_QUERY_THROW );
+                        ScVbaRange* pRange = dynamic_cast< ScVbaRange * > ( xNextRange.get() );
+                        if ( pRange )
+                            pRange->fireChangeEvent();
+                    }
+                }
+            }
+        }
     }
     return sal_True; // always
 }
commit 0ec9b950b1dd0f21891de322597659d794ec2b38
Author: Pedro Giffuni <pfg at apache.org>
Date:   Mon Aug 13 17:05:00 2012 +0000

    i106278 - Window.ActiveSheet,Window.FreezePanes,Window.Split, Window.View
    
    not working correctly.
    
    Patch by:	lihuiibm
    Reviewed by:	Chen Peng
    (cherry picked from commit b1edc65b2ad18720fefb5ba769f2c6f8c46623d6)

diff --git a/sc/source/ui/vba/vbawindow.cxx b/sc/source/ui/vba/vbawindow.cxx
index 925394c..775d4e2 100644
--- a/sc/source/ui/vba/vbawindow.cxx
+++ b/sc/source/ui/vba/vbawindow.cxx
@@ -597,25 +597,33 @@ ScVbaWindow::getFreezePanes() throw (uno::RuntimeException)
 }
 
 void SAL_CALL
-ScVbaWindow::setFreezePanes( ::sal_Bool /*_bFreezePanes*/ ) throw (uno::RuntimeException)
+ScVbaWindow::setFreezePanes( ::sal_Bool _bFreezePanes ) throw (uno::RuntimeException)
 {
     uno::Reference< sheet::XViewPane > xViewPane( getController(), uno::UNO_QUERY_THROW );
     uno::Reference< sheet::XViewSplitable > xViewSplitable( xViewPane, uno::UNO_QUERY_THROW );
     uno::Reference< sheet::XViewFreezable > xViewFreezable( xViewPane, uno::UNO_QUERY_THROW );
-    if( xViewSplitable->getIsWindowSplit() )
+    if( _bFreezePanes )
     {
-        // if there is a split we freeze at the split
-        sal_Int32 nColumn = getSplitColumn();
-        sal_Int32 nRow = getSplitRow();
-        xViewFreezable->freezeAtPosition( nColumn, nRow );
+        if( xViewSplitable->getIsWindowSplit() )
+        {
+            // if there is a split we freeze at the split
+            sal_Int32 nColumn = getSplitColumn();
+            sal_Int32 nRow = getSplitRow();
+            xViewFreezable->freezeAtPosition( nColumn, nRow );
+        }
+        else
+        {
+            // otherwise we freeze in the center of the visible sheet
+            table::CellRangeAddress aCellRangeAddress = xViewPane->getVisibleRange();
+            sal_Int32 nColumn = aCellRangeAddress.StartColumn + (( aCellRangeAddress.EndColumn - aCellRangeAddress.StartColumn )/2 );
+            sal_Int32 nRow = aCellRangeAddress.StartRow + (( aCellRangeAddress.EndRow - aCellRangeAddress.StartRow )/2 );
+            xViewFreezable->freezeAtPosition( nColumn, nRow );
+        }
     }
     else
     {
-        // otherwise we freeze in the center of the visible sheet
-        table::CellRangeAddress aCellRangeAddress = xViewPane->getVisibleRange();
-        sal_Int32 nColumn = aCellRangeAddress.StartColumn + (( aCellRangeAddress.EndColumn - aCellRangeAddress.StartColumn )/2 );
-        sal_Int32 nRow = aCellRangeAddress.StartRow + (( aCellRangeAddress.EndRow - aCellRangeAddress.StartRow )/2 );
-        xViewFreezable->freezeAtPosition( nColumn, nRow );
+        //remove the freeze panes
+        xViewSplitable->splitAtPosition(0,0);
     }
 }
 
@@ -640,8 +648,7 @@ ScVbaWindow::setSplit( ::sal_Bool _bSplit ) throw (uno::RuntimeException)
         uno::Reference< excel::XRange > xRange = ActiveCell();
         sal_Int32 nRow = xRange->getRow();
         sal_Int32 nColumn = xRange->getColumn();
-        xViewFreezable->freezeAtPosition( nColumn-1, nRow-1 );
-        SplitAtDefinedPosition( sal_True );
+        SplitAtDefinedPosition( nColumn-1, nRow-1 );
     }
 }
 
@@ -658,10 +665,8 @@ ScVbaWindow::setSplitColumn( sal_Int32 _splitcolumn ) throw (uno::RuntimeExcepti
     if( getSplitColumn() != _splitcolumn )
     {
         uno::Reference< sheet::XViewFreezable > xViewFreezable( getController(), uno::UNO_QUERY_THROW );
-        sal_Bool bFrozen = getFreezePanes();
         sal_Int32 nRow = getSplitRow();
-        xViewFreezable->freezeAtPosition( _splitcolumn, nRow );
-        SplitAtDefinedPosition( !bFrozen );
+        SplitAtDefinedPosition( _splitcolumn, nRow );
     }
 }
 
@@ -684,8 +689,7 @@ sal_Int32 SAL_CALL
 ScVbaWindow::getSplitRow() throw (uno::RuntimeException)
 {
     uno::Reference< sheet::XViewSplitable > xViewSplitable( getController(), uno::UNO_QUERY_THROW );
-    sal_Int32 nValue = xViewSplitable->getSplitRow();
-    return nValue ? nValue - 1 : nValue;
+    return xViewSplitable->getSplitRow();
 }
 
 void SAL_CALL
@@ -694,10 +698,8 @@ ScVbaWindow::setSplitRow( sal_Int32 _splitrow ) throw (uno::RuntimeException)
     if( getSplitRow() != _splitrow )
     {
         uno::Reference< sheet::XViewFreezable > xViewFreezable( getController(), uno::UNO_QUERY_THROW );
-        sal_Bool bFrozen = getFreezePanes();
         sal_Int32 nColumn = getSplitColumn();
-        xViewFreezable->freezeAtPosition( nColumn , _splitrow );
-        SplitAtDefinedPosition( !bFrozen );
+        SplitAtDefinedPosition( nColumn, _splitrow );
     }
 }
 
@@ -716,15 +718,30 @@ ScVbaWindow::setSplitVertical(double _splitvertical ) throw (uno::RuntimeExcepti
     xViewSplitable->splitAtPosition( 0, static_cast<sal_Int32>( fVertiPixels ) );
 }
 
-void ScVbaWindow::SplitAtDefinedPosition(sal_Bool _bUnFreezePane)
+void ScVbaWindow::SplitAtDefinedPosition( sal_Int32 nColumns, sal_Int32 nRows )
 {
     uno::Reference< sheet::XViewSplitable > xViewSplitable( getController(), uno::UNO_QUERY_THROW );
     uno::Reference< sheet::XViewFreezable > xViewFreezable( xViewSplitable, uno::UNO_QUERY_THROW );
-    sal_Int32 nVertSplit = xViewSplitable->getSplitVertical();
-    sal_Int32 nHoriSplit = xViewSplitable->getSplitHorizontal();
-    if( _bUnFreezePane )
-        xViewFreezable->freezeAtPosition(0,0);
-    xViewSplitable->splitAtPosition(nHoriSplit, nVertSplit);
+    // nColumns and nRows means split columns/rows
+    if( nColumns == 0 && nRows == 0 )
+        return;
+
+    sal_Int32 cellColumn = nColumns + 1;
+    sal_Int32 cellRow = nRows + 1;
+
+    ScTabViewShell* pViewShell = excel::getBestViewShell( m_xModel );
+    if ( pViewShell )
+    {
+        //firstly remove the old splitter
+        xViewSplitable->splitAtPosition(0,0);
+
+        uno::Reference< excel::XApplication > xApplication( Application(), uno::UNO_QUERY_THROW );
+        uno::Reference< excel::XWorksheet > xSheet( xApplication->getActiveSheet(), uno::UNO_QUERY_THROW );
+        xSheet->Cells(uno::makeAny(cellRow), uno::makeAny(cellColumn))->Select();
+
+        //pViewShell->FreezeSplitters( FALSE );
+        dispatchExecute( pViewShell, SID_WINDOW_SPLIT );
+    }
 }
 
 uno::Any SAL_CALL
@@ -773,8 +790,18 @@ ScVbaWindow::ActiveSheet(  ) throw (script::BasicErrorException, uno::RuntimeExc
 uno::Any SAL_CALL
 ScVbaWindow::getView() throw (uno::RuntimeException)
 {
-    // not supported now
+    sal_Bool bPageBreak = sal_False;
     sal_Int32 nWindowView = excel::XlWindowView::xlNormalView;
+
+    ScTabViewShell* pViewShell = excel::getBestViewShell( m_xModel );
+    if (pViewShell)
+        bPageBreak = pViewShell->GetViewData()->IsPagebreakMode();
+
+    if( bPageBreak )
+        nWindowView = excel::XlWindowView::xlPageBreakPreview;
+    else
+        nWindowView = excel::XlWindowView::xlNormalView;
+
     return uno::makeAny( nWindowView );
 }
 
diff --git a/sc/source/ui/vba/vbawindow.hxx b/sc/source/ui/vba/vbawindow.hxx
index fe57253..51993b2 100644
--- a/sc/source/ui/vba/vbawindow.hxx
+++ b/sc/source/ui/vba/vbawindow.hxx
@@ -45,7 +45,7 @@ private:
     css::uno::Reference< css::awt::XDevice > getDevice() throw (css::uno::RuntimeException);
 
 protected:
-    void SplitAtDefinedPosition(sal_Bool _bUnFreezePane);
+    void SplitAtDefinedPosition( sal_Int32 nColumns, sal_Int32 nRows );
 
 public:
     void Scroll( const css::uno::Any& Down, const css::uno::Any& Up, const css::uno::Any& ToRight, const css::uno::Any& ToLeft, bool bLargeScroll = false ) throw (css::uno::RuntimeException);


More information about the Libreoffice-commits mailing list