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

List:       kde-commits
Subject:    koffice/filters/kspread/excel/import
From:       Marijn Kruisselbrink <m.kruisselbrink () student ! tue ! nl>
Date:       2010-09-08 9:41:50
Message-ID: 20100908094150.DD311AC857 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1172960 by mkruisselbrink:

add support for page headers/footers

 M  +64 -1     ExcelImport.cpp  


--- trunk/koffice/filters/kspread/excel/import/ExcelImport.cpp #1172959:1172960
@@ -53,11 +53,13 @@
 #include <DocBase.h>
 #include <CalculationSettings.h>
 #include <CellStorage.h>
+#include <HeaderFooter.h>
 #include <Map.h>
+#include <RowColumnFormat.h>
 #include <Sheet.h>
+#include <SheetPrint.h>
 #include <Style.h>
 #include <StyleStorage.h>
-#include <RowColumnFormat.h>
 #include <ValueConverter.h>
 #include <ShapeApplicationData.h>
 #include <Util.h>
@@ -141,6 +143,7 @@
 
     void processMetaData();
     void processSheet(Sheet* isheet, KSpread::Sheet* osheet);
+    void processSheetForHeaderFooter(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);
@@ -148,6 +151,8 @@
     void processEmbeddedObjects(const KoXmlElement& rootElement, KoStore* store);
     void processNumberFormats();
 
+    QString convertHeaderFooter(const QString& xlsHeader);
+
     int convertStyle(const Format* format, const QString& formula = QString());
     QHash<CellFormatKey, int> styleCache;
     QList<KSpread::Style> styleList;
@@ -420,6 +425,7 @@
     os->setAutoCalculationEnabled(is->autoCalc());
 
     // TODO: page layout
+    processSheetForHeaderFooter(is, os);
 
     if(is->password() != 0) {
         //TODO
@@ -453,6 +459,63 @@
     os->cellStorage()->loadConditions(cellConditions);
 }
 
+void ExcelImport::Private::processSheetForHeaderFooter(Sheet* is, KSpread::Sheet* os)
+{
+    os->print()->headerFooter()->setHeadFootLine(
+            convertHeaderFooter(is->leftHeader()), convertHeaderFooter(is->centerHeader()),
+            convertHeaderFooter(is->rightHeader()), convertHeaderFooter(is->leftFooter()),
+            convertHeaderFooter(is->centerFooter()), convertHeaderFooter(is->rightFooter()));
+}
+
+QString ExcelImport::Private::convertHeaderFooter(const QString& text)
+{
+    QString result;
+    bool skipUnsupported = false;
+    int lastPos;
+    int pos = text.indexOf('&');
+    int len = text.length();
+    if ((pos < 0) && (text.length() > 0))   // If ther is no &
+        result += text;
+    else if (pos > 0) // Some text and '&'
+        result += text.mid(0,  pos - 1);
+
+    while (pos >= 0) {
+        switch (text[pos + 1].unicode()) {
+        case 'D':
+            result += "<date>";
+            break;
+        case 'T':
+            result += "<time>";
+            break;
+        case 'P':
+            result += "<page>";
+            break;
+        case 'N':
+            result += "<pages>";
+            break;
+        case 'F':
+            result += "<name>";
+            break;
+        case 'A':
+            result += "<sheet>";
+            break;
+        case '\"':
+        default:
+            skipUnsupported = true;
+            break;
+        }
+        lastPos = pos;
+        pos = text.indexOf('&', lastPos + 1);
+        if (!skipUnsupported && (pos > (lastPos + 1)))
+            result += text.mid(lastPos + 2, (pos - lastPos - 2));
+        else if (!skipUnsupported && (pos < 0))  //Remaining text
+            result += text.mid(lastPos + 2, len - (lastPos + 2));
+        else
+            skipUnsupported = false;
+    }
+    return result;
+}
+
 void ExcelImport::Private::processColumn(Sheet* is, unsigned columnIndex, KSpread::Sheet* os)
 {
     Column* column = is->column(columnIndex, false);
[prev in list] [next in list] [prev in thread] [next in thread] 

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