[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 ¬e, 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