[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    koffice/filters/kspread/excel
From:       Marijn Kruisselbrink <m.kruisselbrink () student ! tue ! nl>
Date:       2010-09-10 12:57:53
Message-ID: 20100910125753.354A5AC884 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1173775 by mkruisselbrink:

add support for auto-filters to the new xls filter

 M  +22 -0     import/ExcelImport.cpp  
 M  +9 -0      sidewinder/workbook.cpp  
 M  +1 -0      sidewinder/workbook.h  


--- trunk/koffice/filters/kspread/excel/import/ExcelImport.cpp #1173774:1173775
@@ -144,6 +144,7 @@
     void processMetaData();
     void processSheet(Sheet* isheet, KSpread::Sheet* osheet);
     void processSheetForHeaderFooter(Sheet* isheet, KSpread::Sheet* osheet);
+    void processSheetForFilters(Sheet* isheet, KSpread::Sheet* osheet);
     void processColumn(Sheet* isheet, unsigned column, KSpread::Sheet* osheet);
     void processRow(Sheet* isheet, unsigned row, KSpread::Sheet* osheet);
     void processCell(Cell* icell, KSpread::Cell ocell);
@@ -273,6 +274,9 @@
         d->shapesXml->endElement();
     }
 
+    //TODO: settings
+    //TODO: named expressions
+
     QBuffer manifestBuffer;
     KoXmlWriter manifestWriter(&manifestBuffer);
     manifestWriter.startDocument("manifest:manifest");
@@ -506,6 +510,8 @@
 
         shapesXml->endElement();
     }
+
+    processSheetForFilters(is, os);
 }
 
 void ExcelImport::Private::processSheetForHeaderFooter(Sheet* is, KSpread::Sheet* \
os) @@ -516,6 +522,22 @@
             convertHeaderFooter(is->centerFooter()), \
convertHeaderFooter(is->rightFooter()));  }
 
+void ExcelImport::Private::processSheetForFilters(Sheet* is, KSpread::Sheet* os)
+{
+    static int rangeId = 0; // not very nice to do this this way, but I only care \
about sort of unique names +    QList<QRect> filters = workbook->filterRanges(is);
+    foreach (const QRect& filter, filters) {
+        KSpread::Database db;
+        db.setName(QString("excel-database-%1").arg(++rangeId));
+        db.setDisplayFilterButtons(true);
+        QRect r = filter.adjusted(1, 1, 1, 1);
+        r.setBottom(is->maxRow()+1);
+        KSpread::Region range(r, os);
+        db.setRange(range);
+        os->cellStorage()->setDatabase(range, db);
+    }
+}
+
 QString ExcelImport::Private::convertHeaderFooter(const QString& text)
 {
     QString result;
--- trunk/koffice/filters/kspread/excel/sidewinder/workbook.cpp #1173774:1173775
@@ -147,6 +147,15 @@
     return d->filterRanges[sheet];
 }
 
+QList<QRect> Workbook::filterRanges(const Sheet* sheet) const
+{
+    for (unsigned i = 0; i < d->sheets.size(); i++) {
+        if(d->sheets[i] == sheet) return filterRanges(i);
+    }
+    return QList<QRect>();
+}
+
+
 void Workbook::addFilterRange(unsigned sheet, const QRect& range)
 {
     d->filterRanges[sheet].push_back(range);
--- trunk/koffice/filters/kspread/excel/sidewinder/workbook.h #1173774:1173775
@@ -113,6 +113,7 @@
     void setNamedArea(unsigned sheet, QString name, QString formula);
 
     QList<QRect> filterRanges(unsigned sheet) const;
+    QList<QRect> filterRanges(const Sheet* sheet) const;
     void addFilterRange(unsigned sheet, const QRect& range);
 
     int activeTab() const;


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic