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

List:       kde-commits
Subject:    branches/work/koffice-ko/filters/kspread/xlsx
From:       Sebastian Sauer <mail () dipe ! org>
Date:       2010-03-30 15:09:36
Message-ID: 20100330150937.05234AC887 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1109101 by sebsauer:

Show chart titles.


 M  +48 -0     XlsxXmlChartReader.cpp  
 M  +2 -0      XlsxXmlChartReader.h  


--- branches/work/koffice-ko/filters/kspread/xlsx/XlsxXmlChartReader.cpp #1109100:1109101
@@ -85,6 +85,7 @@
     : MSOOXML::MsooXmlCommonReader(writers)
     , m_context(0)
     , m_currentSeries(0)
+    , m_autoTitleDeleted(false)
 {
 }
 
@@ -121,6 +122,12 @@
         if (isStartElement()) {
             TRY_READ_IF(plotArea)
             ELSE_TRY_READ_IF(legend)
+
+            if (qualifiedName() == QLatin1String(QUALIFIED_NAME(autoTitleDeleted))) {
+                const QXmlStreamAttributes attrs(attributes());
+                TRY_READ_ATTR_WITHOUT_NS(val)
+                m_autoTitleDeleted = val.toInt();
+            }
         }
     }
 
@@ -205,6 +212,8 @@
         if (isStartElement()) {
             TRY_READ_IF(val)
             ELSE_TRY_READ_IF(cat)
+            if  (!m_autoTitleDeleted)
+                TRY_READ_IF(tx)
             if (qualifiedName() == QLatin1String(QUALIFIED_NAME(explosion))) {
                 const QXmlStreamAttributes attrs(attributes());
                 TRY_READ_ATTR_WITHOUT_NS(val)
@@ -261,6 +270,45 @@
 }
 
 #undef CURRENT_EL
+#define CURRENT_EL tx
+/*! This element specifies text to use on a chart, including rich text formatting. */
+KoFilter::ConversionStatus XlsxXmlChartReader::read_tx()
+{
+    enum State { Start, InStrRef, InRichText } state;
+    state = Start;
+
+    READ_PROLOGUE
+    while (!atEnd()) {
+        readNext();
+        switch(state) {
+            case Start:
+                if (qualifiedName() == QLatin1String(QUALIFIED_NAME(strRef)))
+                    state = isStartElement() ? InStrRef : Start;
+                else if (qualifiedName() == QLatin1String(QUALIFIED_NAME(rich)))
+                    state = isStartElement() ? InRichText : Start;
+                break;
+            case InStrRef:
+                if (isStartElement()) {
+                    if (qualifiedName() == QLatin1String(QUALIFIED_NAME(f))) {
+                        //TODO handle formula that references to the text cell (does ODF support that?)
+                    } else if (qualifiedName() == QLatin1String(QUALIFIED_NAME(v))) {
+                        //TODO handle other text's then the title text too
+                        Charting::Text* t = new Charting::Text;
+                        t->m_text = readElementText();
+                        m_context->m_chart->m_texts << t;
+                    }
+                }
+                break;
+            case InRichText:
+                //TODO
+                break;
+        }
+        BREAK_IF_END_OF(CURRENT_EL);
+    }
+    READ_EPILOGUE
+}
+
+#undef CURRENT_EL
 #define CURRENT_EL numCache
 KoFilter::ConversionStatus XlsxXmlChartReader::read_numCache()
 {
--- branches/work/koffice-ko/filters/kspread/xlsx/XlsxXmlChartReader.h #1109100:1109101
@@ -75,6 +75,7 @@
     KoFilter::ConversionStatus read_pie3DChart();
     KoFilter::ConversionStatus read_val();
     KoFilter::ConversionStatus read_cat();
+    KoFilter::ConversionStatus read_tx();
     KoFilter::ConversionStatus read_numCache();
     KoFilter::ConversionStatus read_firstSliceAng();
     
@@ -82,6 +83,7 @@
     XlsxXmlChartReaderContext *m_context;
     Charting::Series *m_currentSeries;
     QString m_cellRangeAddress;
+    bool m_autoTitleDeleted;
 };
 
 #endif
[prev in list] [next in list] [prev in thread] [next in thread] 

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