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

List:       kde-commits
Subject:    koffice/kword
From:       Thomas Zander <zander () kde ! org>
Date:       2009-01-03 19:42:06
Message-ID: 1231011726.212224.1425.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 905149 by zander:

Support loading of footnotes and endnotes from the old kword format.

 M  +126 -64   part/KWDLoader.cpp  
 M  +8 -0      part/KWDLoader.h  
 M  +0 -1      part/KWord.h  
 M  +0 -4      plugins/scripting/Module.h  


--- trunk/koffice/kword/part/KWDLoader.cpp #905148:905149
@@ -26,6 +26,7 @@
 
 // koffice
 #include <KoShapeRegistry.h>
+#include <KoInlineNote.h>
 #include <KoShapeFactory.h>
 #include <KoShapeContainer.h>
 #include <KoStyleManager.h>
@@ -348,6 +349,7 @@
     emit sigProgress(85);
 
     insertAnchors();
+    insertNotes();
 
 #if 0
 
@@ -421,72 +423,59 @@
              */
             return; // TODO support backwards compatible tables
         } else {
-            if (framesetElem.attribute("frameInfo").toInt() == 7) { // of type \
                FOOTNOTE
-                return; // TODO support old footnote frameset
-                /*
-                                if ( !loadFootnote )
-                                    return 0;
-                                // Footnote -> create a KWFootNoteFrameSet
-                                KWFootNoteFrameSet *fs = new KWFootNoteFrameSet( \
                this, fsname );
-                                fs->load( framesetElem, loadFrames );
-                                addFrameSet(fs, false);
-                                return fs; */
+            KWord::TextFrameSetType type;
+            KWPageStyle styleForFS;
+            switch (framesetElem.attribute("frameInfo").toInt()) {
+            case 0: // body
+                type = m_foundMainFS ? KWord::OtherTextFrameSet : \
KWord::MainTextFrameSet; +                m_foundMainFS = true;
+                break;
+            case 1: // first header
+                if (! m_firstPageStyle.isValid())
+                    return; // we don't need this FS.
+                styleForFS = m_firstPageStyle;
+                type = KWord::OddPagesHeaderTextFrameSet; break;
+            case 2: // even header
+                styleForFS = m_pageStyle;
+                type = KWord::EvenPagesHeaderTextFrameSet; break;
+            case 3: // odd header
+                styleForFS = m_pageStyle;
+                type = KWord::OddPagesHeaderTextFrameSet; break;
+            case 4: // first footer
+                if (! m_firstPageStyle.isValid())
+                    return; // we don't need this FS.
+                styleForFS = m_firstPageStyle;
+                type = KWord::OddPagesFooterTextFrameSet; break;
+            case 5: // even footer
+                styleForFS = m_pageStyle;
+                type = KWord::EvenPagesFooterTextFrameSet; break;
+            case 6: // odd footer
+                styleForFS = m_pageStyle;
+                type = KWord::OddPagesFooterTextFrameSet; break;
+            case 7: // footnote
+                 // FS will be deleted soon...
+            default:
+                type = KWord::OtherTextFrameSet; break;
+            }
+            KWTextFrameSet *fs = new KWTextFrameSet(m_document, type);
+            fs->setAllowLayout(false);
+            fs->setName(fsname);
+            fs->setPageStyle(styleForFS);
+            fill(fs, framesetElem);
+            m_document->addFrameSet(fs);
 
-            } else { // Normal text frame
-                KWord::TextFrameSetType type;
-                KWPageStyle styleForFS;
-                switch (framesetElem.attribute("frameInfo").toInt()) {
-                case 0: // body
-                    type = m_foundMainFS ? KWord::OtherTextFrameSet : \
                KWord::MainTextFrameSet;
-                    m_foundMainFS = true;
-                    break;
-                case 1: // first header
-                    if (! m_firstPageStyle.isValid())
-                        return; // we don't need this FS.
-                    styleForFS = m_firstPageStyle;
-                    type = KWord::OddPagesHeaderTextFrameSet; break;
-                case 2: // even header
-                    styleForFS = m_pageStyle;
-                    type = KWord::EvenPagesHeaderTextFrameSet; break;
-                case 3: // odd header
-                    styleForFS = m_pageStyle;
-                    type = KWord::OddPagesHeaderTextFrameSet; break;
-                case 4: // first footer
-                    if (! m_firstPageStyle.isValid())
-                        return; // we don't need this FS.
-                    styleForFS = m_firstPageStyle;
-                    type = KWord::OddPagesFooterTextFrameSet; break;
-                case 5: // even footer
-                    styleForFS = m_pageStyle;
-                    type = KWord::EvenPagesFooterTextFrameSet; break;
-                case 6: // odd footer
-                    styleForFS = m_pageStyle;
-                    type = KWord::OddPagesFooterTextFrameSet; break;
-                case 7: // footnote
-                    type = KWord::FootNoteTextFrameSet; break;
-                default:
-                    type = KWord::OtherTextFrameSet; break;
+            // Old file format had autoCreateNewFrame as a frameset attribute
+            if (framesetElem.hasAttribute("autoCreateNewFrame")) {
+                KWord::FrameBehavior behav;
+                switch (framesetElem.attribute("autoCreateNewFrame").toInt()) {
+                case 1: behav = KWord::AutoCreateNewFrameBehavior; break;
+                case 2: behav = KWord::IgnoreContentFrameBehavior; break;
+                default: behav = KWord::AutoExtendFrameBehavior; break;
                 }
-                KWTextFrameSet *fs = new KWTextFrameSet(m_document, type);
-                fs->setAllowLayout(false);
-                fs->setName(fsname);
-                fs->setPageStyle(styleForFS);
-                fill(fs, framesetElem);
-                m_document->addFrameSet(fs);
-
-                // Old file format had autoCreateNewFrame as a frameset attribute
-                if (framesetElem.hasAttribute("autoCreateNewFrame")) {
-                    KWord::FrameBehavior behav;
-                    switch (framesetElem.attribute("autoCreateNewFrame").toInt()) {
-                    case 1: behav = KWord::AutoCreateNewFrameBehavior; break;
-                    case 2: behav = KWord::IgnoreContentFrameBehavior; break;
-                    default: behav = KWord::AutoExtendFrameBehavior; break;
-                    }
-                    foreach (KWFrame *frame, fs->frames())
-                        frame->setFrameBehavior(behav);
-                }
-                return;
+                foreach (KWFrame *frame, fs->frames())
+                    frame->setFrameBehavior(behav);
             }
+            return;
         }
     }
     case 5: { // FT_CLIPART
@@ -695,7 +684,62 @@
                     } else if (id == "2") {
                         kWarning("File to old, image can not be recovered\n");
                     } else if (id == "4") {
-                        // load variable // TODO
+                        KoXmlElement variable = \
format.namedItem("VARIABLE").toElement(); +                        if \
(variable.isNull()) { +                            kWarning() << "Missing VARIABLE \
tag\n"; +                            continue;
+                        }
+                        KoXmlElement type = variable.namedItem("TYPE").toElement();
+                        int typeId = type.attribute("type", "1").toInt();
+                        switch(typeId) {
+                        case 11: { // footnote
+                            KoXmlElement footnote = \
variable.namedItem("FOOTNOTE").toElement(); +                            KoInlineNote \
*note = new KoInlineNote(KoInlineNote::Footnote); +                            \
note->setLabel(footnote.attribute("value")); +                            \
note->setAutoNumbering( footnote.attribute("numberingtype", "auto") == "auto" ); +    \
note->setText("Unable to locate footnote text"); +                            \
KoTextDocumentLayout *layout = dynamic_cast<KoTextDocumentLayout*>( +                 \
fs->document()->documentLayout()); +                            Q_ASSERT(layout);
+                            Q_ASSERT(layout->inlineObjectTextManager());
+                            \
layout->inlineObjectTextManager()->insertInlineObject(formatCursor, note); +          \
NotesData notesData; +                            notesData.note = note;
+                            notesData.frameSetName = footnote.attribute("frameset");
+                            m_notes.append(notesData);
+                            break;
+                        }
+                        case 10: { // note
+                            KoXmlElement footEndNote = \
variable.namedItem("NOTE").toElement(); +
+                            KoInlineNote::Type type = \
footEndNote.attribute("notetype") == "footnote" +                                     \
? KoInlineNote::Footnote : KoInlineNote::Endnote; +                            \
KoInlineNote *note = new KoInlineNote(type); +                            \
note->setLabel(footEndNote.attribute("value")); +                            \
note->setAutoNumbering( footEndNote.attribute("numberingtype", "auto") == "auto" ); + \
note->setText("Unable to locate note-text"); +                            \
KoTextDocumentLayout *layout = dynamic_cast<KoTextDocumentLayout*>( +                 \
fs->document()->documentLayout()); +                            Q_ASSERT(layout);
+                            Q_ASSERT(layout->inlineObjectTextManager());
+                            \
layout->inlineObjectTextManager()->insertInlineObject(formatCursor, note); +          \
NotesData notesData; +                            notesData.note = note;
+                            notesData.frameSetName = \
footEndNote.attribute("frameset"); +                            \
m_notes.append(notesData); +                            break;
+                        }
+                        case 0: // date TODO
+                        case 2: // fixed time TODO
+                        case 4: // page number TODO
+                        case 8: // field TODO
+                        case 9: // link TODO
+                        case 12: // statistic TODO
+                        default: {
+                            QString replacementText = type.attribute("text");
+                            formatCursor.insertText(replacementText);
+                        }
+                        }
                     } else if (id == "5") {
                         kWarning("File to old, footnote can not be recovered\n");
                     } else if (id == "6") { // anchor for floating frame.
@@ -1158,3 +1202,21 @@
     m_anchors.clear();
 }
 
+void KWDLoader::insertNotes()
+{
+    foreach (const NotesData &note, m_notes) {
+        KWFrameSet *fs = m_document->frameSetByName(note.frameSetName);
+        if (fs == 0) {
+            kWarning() << "Frameset data for note not found: '" << \
note.frameSetName; +            continue;
+        }
+        KWTextFrameSet *tfs = dynamic_cast<KWTextFrameSet*> (fs);
+        if (tfs && tfs->document()) {
+            note.note->setText(tfs->document()->toPlainText());
+kDebug() << "setting the text to" << note.note->text();
+        }
+        m_document->removeFrameSet(fs);
+        delete fs; // we don't want to keep it around.
+    }
+    m_notes.clear();
+}
--- trunk/koffice/kword/part/KWDLoader.h #905148:905149
@@ -36,6 +36,7 @@
 class QColor;
 class KoShape;
 class KoStore;
+class KoInlineNote;
 
 /// KWDocument delegates to this class the loading of (old style) KWD documents
 class KWDLoader : public QObject
@@ -86,6 +87,7 @@
     void fill(ImageKey *key, const KoXmlElement &keyElement);
 
     void insertAnchors();
+    void insertNotes();
 
     // load the document wide styles
     void loadStyleTemplates(const KoXmlElement &styles);
@@ -110,6 +112,12 @@
     };
     QList<AnchorData> m_anchors;
 
+    struct NotesData {
+        KoInlineNote *note;
+        QString frameSetName;
+    };
+    QList<NotesData> m_notes;
+
     QList<ImageKey> m_images;
 };
 
--- trunk/koffice/kword/part/KWord.h #905148:905149
@@ -78,7 +78,6 @@
         OddPagesFooterTextFrameSet,  ///< The frameSet that holds the footers for \
                the odd pages
         EvenPagesFooterTextFrameSet, ///< The frameSet that holds the footers for \
                the even pages
         MainTextFrameSet,   ///< The frameset that holds all the frames for the main \
                text area
-        FootNoteTextFrameSet,   ///< A frameset that holds a footnote
         OtherTextFrameSet   ///< Any other text frameset not managed by the \
auto-frame layout  };
 
--- trunk/koffice/kword/plugins/scripting/Module.h #905148:905149
@@ -142,10 +142,6 @@
         return findFrameSet(KWord::MainTextFrameSet);
     }
 
-    /** Return a \a FrameSet that holds a footnote */
-    QObject* footNoteFrameSet() {
-        return findFrameSet(KWord::FootNoteTextFrameSet);
-    }
     /** Return any other \a FrameSet not managed by the auto-frame layout */
     QObject* otherFrameSet() {
         return findFrameSet(KWord::OtherTextFrameSet);


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

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