sc/source/filter/inc/tablebuffer.hxx | 4 +++- sc/source/filter/oox/tablebuffer.cxx | 28 +++++++++++++++++++++++++--- sc/source/filter/oox/worksheethelper.cxx | 4 ++++ 3 files changed, 32 insertions(+), 4 deletions(-)
New commits: commit 0e059b62e4b222b2bb501d0c7798deeb1339d05d Author: Noel Power <noel.po...@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 Reviewed-on: https://gerrit.libreoffice.org/5448 Reviewed-by: Petr Mladek <pmla...@suse.cz> Tested-by: Petr Mladek <pmla...@suse.cz> diff --git a/sc/source/filter/inc/tablebuffer.hxx b/sc/source/filter/inc/tablebuffer.hxx index 5ed673b..d162391 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 0748e3c..87e1200 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" @@ -97,9 +98,6 @@ void Table::finalizeImport() PropertySet aPropSet( xDatabaseRange ); if( !aPropSet.getProperty( mnTokenIndex, PROP_TokenIndex ) ) mnTokenIndex = -1; - - // filter settings - maAutoFilters.finalizeImport( xDatabaseRange ); } catch( Exception& ) { @@ -107,6 +105,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 ) : @@ -130,6 +147,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 f736393..03bde26 100644 --- a/sc/source/filter/oox/worksheethelper.cxx +++ b/sc/source/filter/oox/worksheethelper.cxx @@ -66,6 +66,7 @@ #include "worksheetbuffer.hxx" #include "worksheetsettings.hxx" #include "formulabuffer.hxx" +#include "tablebuffer.hxx" namespace oox { namespace xls { @@ -943,6 +944,9 @@ void WorksheetGlobals::finalizeWorksheetImport() { lclUpdateProgressBar( mxRowProgress, 1.0 ); maSheetData.finalizeImport(); + // assumes getTables().finalizeImport ( which creates the DatabaseRanges ) + // has been called already + getTables().applyAutoFilters(); lclUpdateProgressBar( mxFinalProgress, 0.25 ); finalizeHyperlinkRanges(); finalizeValidationRanges(); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits