summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorNoel Power <noel.power@suse.com>2013-08-15 16:23:46 +0100
committerPetr Mladek <pmladek@suse.cz>2013-08-19 14:55:01 +0000
commit464719988fc97c0bba6c3557ba1aed35188be8c3 (patch)
tree1d88c139766f1e5e39ad4c39d47d8f3dfdba200a /sc
parent90826f5ee457449d78608e00bf05be412a86faf4 (diff)
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@suse.cz> Tested-by: Petr Mladek <pmladek@suse.cz>
Diffstat (limited to 'sc')
-rw-r--r--sc/source/filter/inc/tablebuffer.hxx4
-rw-r--r--sc/source/filter/oox/tablebuffer.cxx28
-rw-r--r--sc/source/filter/oox/worksheethelper.cxx5
3 files changed, 33 insertions, 4 deletions
diff --git a/sc/source/filter/inc/tablebuffer.hxx b/sc/source/filter/inc/tablebuffer.hxx
index 9d4a2c7cd7ed..2de2d30719a2 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 672e11cb358b..4dc61a06c137 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 bd8b9ba322d8..c4db747b2494 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();