/* This file is part of the KDE project Copyright (C) 2004-2006 David Faure <faure@kde.org> This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ #ifndef KOOASISCONTEXT_H #define KOOASISCONTEXT_H #include <KoOasisLoadingContext.h> class KoVariableSettings; class KoTextParag; class KoParagStyle; class KoGenStyles; class KoVariableCollection; #include "KoListStyleStack.h" #include "KoTextBookmark.h" // ####### TODO rename to KoTextOasisLoadingContext (wow that's long). // ####### maybe KoTextLoadingContext? /** * Used during loading of Oasis format (and discarded at the end of the loading). * In addition to what KoOasisLoadingContext stores, this class has 'state' information: * a stack with the currently used styles (with its ancestors in the stack), * another one with the list styles currently applicable (one item in the stack per list level). * * @author David Faure <faure@kde.org> */ class KOTEXT_EXPORT KoOasisContext : public KoOasisLoadingContext { public: /** * Stores reference to the KoOasisStyles parsed by KoDocument. * Make sure that the KoOasisStyles instance outlives this KoOasisContext instance. * (This is the case during loaiding, when using the KoOasisStyles given by KoDocument) * @param doc KoDocument, needed by some field variables * @param varColl reference to the collection that creates and stores variables (fields) * @param styles reference to the KoOasisStyles parsed by KoDocument * @param store pointer to store, if available, for e.g. loading images. */ KoOasisContext( KoDocument* doc, KoVariableCollection& varColl, KoOasisStyles& styles, KoStore* store ); ~KoOasisContext(); KoVariableCollection& variableCollection() { return m_varColl; } ///// List handling KoListStyleStack& listStyleStack() { return m_listStyleStack; } TQString currentListStyleName() const { return m_currentListStyleName; } void setCurrentListStyleName( const TQString& s ) { m_currentListStyleName = s; } /// Used for lists (numbered paragraphs) /// @return true on success (a list style was found and pushed) bool pushListLevelStyle( const TQString& listStyleName, int level ); /// Used for outline levels bool pushOutlineListLevelStyle( int level ); /// Set cursor position (set by KoTextParag upon finding the processing instruction) void setCursorPosition( KoTextParag* cursorTextParagraph, int cursorTextIndex ); KoTextParag* cursorTextParagraph() const { return m_cursorTextParagraph; } int cursorTextIndex() const { return m_cursorTextIndex; } private: /// @return true on success (a list style was found and pushed) bool pushListLevelStyle( const TQString& listStyleName, const TQDomElement& fullListStyle, int level ); private: KoListStyleStack m_listStyleStack; TQString m_currentListStyleName; KoVariableCollection& m_varColl; KoTextParag* m_cursorTextParagraph; int m_cursorTextIndex; class Private; Private *d; }; // TODO extract non-text base class for kofficecore, see KoOasisLoadingContext // ####### TODO rename to KoTextOasisSavingContext (wow that's long). // ####### maybe KoTextSavingContext? /** * Used during saving to Oasis format (and discarded at the end of the saving). * * Among other things, this class acts as a repository of fonts used by a * document during saving, in order to create the office:font-face-decls element. * * @author David Faure <faure@kde.org> */ class KOTEXT_EXPORT KoSavingContext { public: enum SavingMode { Store, Flat }; /// Constructor /// @param mainStyles /// @param settings optional, used for saving the page-number in the first paragraph /// @param hasColumns optional, used by KoParagLayout for the type of page breaks /// @param savingMode either Store (a KoStore will be used) or Flat (all data must be inline in the XML) KoSavingContext( KoGenStyles& mainStyles, KoVariableSettings* settings = 0, bool hasColumns = false, SavingMode savingMode = Store ); ~KoSavingContext(); KoGenStyles& mainStyles() { return m_mainStyles; } /// @return the saving mode: Store (a KoStore will be used) or Flat (all data must be inline in the XML) SavingMode savingMode() const { return m_savingMode; } /// Set cursor position (so that KoTextParag can insert a processing instruction) void setCursorPosition( KoTextParag* cursorTextParagraph, int cursorTextIndex ); KoTextParag* cursorTextParagraph() const { return m_cursorTextParagraph; } int cursorTextIndex() const { return m_cursorTextIndex; } /// Store bookmarks [for the current text paragraph beind saved] /// so that KoTextParag can save them at the right place inside the text struct BookmarkPosition { BookmarkPosition() : name(), pos( -1 ), startEqualsEnd( false ) {} // for TQValueList BookmarkPosition( const TQString& nm, int p, bool simple ) : name( nm ), pos( p ), startEqualsEnd( simple ) {} TQString name; int pos; bool startEqualsEnd; bool operator<( BookmarkPosition& rhs ) const { return pos < rhs.pos; } }; typedef TQValueList<BookmarkPosition> BookmarkPositions; void setBookmarkPositions( const BookmarkPositions& bkStarts, const BookmarkPositions& bkEnds ) { m_bookmarkStarts = bkStarts; m_bookmarkEnds = bkEnds; } const BookmarkPositions& bookmarkStarts() const { return m_bookmarkStarts; } const BookmarkPositions& bookmarkEnds() const { return m_bookmarkEnds; } void addFontFace( const TQString& fontName ); typedef TQMap<TQString, bool> FontFaces; void writeFontFaces( KoXmlWriter& writer ); // See KoParagLayout::saveOasis bool hasColumns() const { return m_hasColumns; } // See KoTextParag::saveOasis KoVariableSettings* variableSettings() const { return m_variableSettings; } private: KoGenStyles& m_mainStyles; SavingMode m_savingMode; BookmarkPositions m_bookmarkStarts, m_bookmarkEnds; KoTextParag* m_cursorTextParagraph; int m_cursorTextIndex; FontFaces m_fontFaces; KoVariableSettings* m_variableSettings; bool m_hasColumns; class Private; Private *d; }; #endif /* KOOASISCONTEXT_H */