[Libreoffice-commits] core.git: Branch 'libreoffice-4-1' - sc/source

Noel Power noel.power at suse.com
Mon Aug 19 07:55:24 PDT 2013


 sc/source/filter/inc/tablebuffer.hxx     |    4 +++-
 sc/source/filter/oox/tablebuffer.cxx     |   28 +++++++++++++++++++++++++---
 sc/source/filter/oox/worksheethelper.cxx |    5 +++++
 3 files changed, 33 insertions(+), 4 deletions(-)

New commits:
commit 464719988fc97c0bba6c3557ba1aed35188be8c3
Author: Noel Power <noel.power at suse.com>
Date:   Thu Aug 15 16:23:46 2013 +0100

    fix for bnc#834705 missing drop downs for autofilter
    
    After commit fc861c7088e9b639a1c2c80f8ba4535c798aeb34 there is now an order
    dependency, between any ScPatternAttr flags indirectly set and
    SheetDataBuffer::finalizeImport which sets the attributes directly for a column
    So the ATTR_MERGE_FLAG that has ScMergeFlagAttr ( and associated
     SC_MF_AUTO flag ) is scrubbed when by the direct writting of the attribute
    from SheetDataBuffer::finalizeImport -> Document::SetAttrEntries
    I've reordered that Table import here and split the finalize ( which happens
    before heetDataBuffer::finalizeImport ) so that the databaseranges which were
    created before sheet import still happens, the autofilter part of the import
    is now deferred ( until after SheetDataBuffer::finalizeImport )
    
    Change-Id: I11bb45ee7b330760fd93ecca30b23399414ac3a7
    (cherry picked from commit edd51b813005c2159426d8f2917eede5b14a4577)
    Reviewed-on: https://gerrit.libreoffice.org/5447
    Reviewed-by: Petr Mladek <pmladek at suse.cz>
    Tested-by: Petr Mladek <pmladek at suse.cz>

diff --git a/sc/source/filter/inc/tablebuffer.hxx b/sc/source/filter/inc/tablebuffer.hxx
index 9d4a2c7..2de2d30 100644
--- a/sc/source/filter/inc/tablebuffer.hxx
+++ b/sc/source/filter/inc/tablebuffer.hxx
@@ -59,6 +59,7 @@ public:
 
     /** Creates a database range from this tables. */
     void                finalizeImport();
+    void                applyAutoFilters();
 
     /** Returns the unique table identifier. */
     inline sal_Int32    getTableId() const { return maModel.mnId; }
@@ -103,7 +104,8 @@ public:
 
     /** Creates database ranges from all imported tables. */
     void                finalizeImport();
-
+    /** Applies autofilters from created database range ( requires finalizeImport to have run before being called */
+    void                applyAutoFilters();
     /** Returns a table by its identifier. */
     TableRef            getTable( sal_Int32 nTableId ) const;
     /** Returns a table by its display name. */
diff --git a/sc/source/filter/oox/tablebuffer.cxx b/sc/source/filter/oox/tablebuffer.cxx
index 672e11c..4dc61a0 100644
--- a/sc/source/filter/oox/tablebuffer.cxx
+++ b/sc/source/filter/oox/tablebuffer.cxx
@@ -20,6 +20,7 @@
 #include "tablebuffer.hxx"
 
 #include <com/sun/star/sheet/XDatabaseRange.hpp>
+#include <com/sun/star/sheet/XDatabaseRanges.hpp>
 #include "oox/helper/attributelist.hxx"
 #include "oox/helper/binaryinputstream.hxx"
 #include "oox/helper/propertyset.hxx"
@@ -96,9 +97,6 @@ void Table::finalizeImport()
         PropertySet aPropSet( xDatabaseRange );
         if( !aPropSet.getProperty( mnTokenIndex, PROP_TokenIndex ) )
             mnTokenIndex = -1;
-
-        // filter settings
-        maAutoFilters.finalizeImport( xDatabaseRange );
     }
     catch( Exception& )
     {
@@ -106,6 +104,25 @@ void Table::finalizeImport()
     }
 }
 
+void Table::applyAutoFilters()
+{
+    if( !maDBRangeName.isEmpty() )
+    {
+        try
+        {
+            // get the range ( maybe we should cache the xDatabaseRange from finalizeImport )
+            PropertySet aDocProps( getDocument() );
+            Reference< XDatabaseRanges > xDatabaseRanges( aDocProps.getAnyProperty( PROP_DatabaseRanges ), UNO_QUERY_THROW );
+            Reference< XDatabaseRange > xDatabaseRange( xDatabaseRanges->getByName( maDBRangeName ), UNO_QUERY );
+            maAutoFilters.finalizeImport( xDatabaseRange );
+        }
+        catch( Exception& )
+        {
+            OSL_FAIL( "Table::applyAutofilters - cannot create filter" );
+        }
+    }
+}
+
 // ============================================================================
 
 TableBuffer::TableBuffer( const WorkbookHelper& rHelper ) :
@@ -129,6 +146,11 @@ void TableBuffer::finalizeImport()
     maIdTables.forEachMem( &Table::finalizeImport );
 }
 
+void TableBuffer::applyAutoFilters()
+{
+    maIdTables.forEachMem( &Table::applyAutoFilters );
+}
+
 TableRef TableBuffer::getTable( sal_Int32 nTableId ) const
 {
     return maIdTables.get( nTableId );
diff --git a/sc/source/filter/oox/worksheethelper.cxx b/sc/source/filter/oox/worksheethelper.cxx
index bd8b9ba..c4db747 100644
--- a/sc/source/filter/oox/worksheethelper.cxx
+++ b/sc/source/filter/oox/worksheethelper.cxx
@@ -68,6 +68,7 @@
 #include "scitems.hxx"
 #include "editutil.hxx"
 #include "tokenarray.hxx"
+#include "tablebuffer.hxx"
 
 #include <svl/stritem.hxx>
 #include <editeng/editobj.hxx>
@@ -946,6 +947,10 @@ void WorksheetGlobals::finalizeWorksheetImport()
 {
     lclUpdateProgressBar( mxRowProgress, 1.0 );
     maSheetData.finalizeImport();
+    // assumes getTables().finalizeImport ( which creates the DatabaseRanges )
+    // has been called already
+    getTables().applyAutoFilters();
+
     getCondFormats().finalizeImport();
     lclUpdateProgressBar( mxFinalProgress, 0.25 );
     finalizeHyperlinkRanges();


More information about the Libreoffice-commits mailing list