diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
commit | 8362bf63dea22bbf6736609b0f49c152f975eb63 (patch) | |
tree | 0eea3928e39e50fae91d4e68b21b1e6cbae25604 /lib/kotext/KoParagCounter.h | |
download | koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.tar.gz koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.zip |
Added old abandoned KDE3 version of koffice
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/koffice@1077364 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'lib/kotext/KoParagCounter.h')
-rw-r--r-- | lib/kotext/KoParagCounter.h | 243 |
1 files changed, 243 insertions, 0 deletions
diff --git a/lib/kotext/KoParagCounter.h b/lib/kotext/KoParagCounter.h new file mode 100644 index 00000000..f58a1b93 --- /dev/null +++ b/lib/kotext/KoParagCounter.h @@ -0,0 +1,243 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Shaheed Haque <srhaque@iee.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. +*/ + +#include <qstring.h> +#include <koffice_export.h> +class QDomElement; +class KoXmlWriter; +class KoGenStyle; +class KoTextParag; +class KoTextFormat; +class KoOasisContext; + +#ifndef koparagcounter_h +#define koparagcounter_h + +/** + * This is the structure associated with a paragraph (KoTextParag), + * to define the bullet or numbering of the paragraph. + */ +class KOTEXT_EXPORT KoParagCounter +{ +public: + KoParagCounter(); + + /** Invalidate the internal cache. Use it whenever the number associated with this + * counter may have changed. */ + void invalidate(); + + /** Return the current value of the counter as a number. + */ + int number( const KoTextParag *paragraph ); + /** Return the current value of the counter as a text. + * This returns only the current level, e.g. "1." + */ + QString levelText( const KoTextParag *paragraph ); + /** Return the current value of the counter as a text. + * This returns the full text, all levels included (if displayLevels>1), + * e.g. "1.2.1." if displayLevels==3. + */ + QString text( const KoTextParag *paragraph ); + + /** + * Work out the width of the text required for this counter. + * Unit : LU pixels + */ + int width( const KoTextParag *paragraph ); + + /** + * X position of the bullet ( i.e. width of prefix ) + * Unit : LU pixels + */ + int bulletX(); + + /// KOffice-1.3 loading code + void load( QDomElement & element ); + /// KOffice-1.3 saving code + void save( QDomElement & element ); + /** Load from OASIS XML + * @param heading true if heading, false if normal list + * @param level 1-based + * @param loadingStyle true if loading a style, false if loading a paragraph + * @param context the context + * @param restartNumbering if -1 then don't restart numbering, use the style value + * @param orderedList if true, make sure the parag will will be initialised as an ordered list + * otherwise it may be initialised as a unordered list. + */ + void loadOasis( KoOasisContext& context, int restartNumbering, bool orderedList, bool heading, int level, bool loadingStyle = false ); + /// Part of loadOasis that is shared with KWVariableSettings::loadOasis for footnotes/endnotes + void loadOasisListStyle( const QDomElement& listStyle, + const QDomElement& listStyleProperties, + const QDomElement& listStyleTextProperties, + int restartNumbering, + bool orderedList, bool heading, int level, bool loadingStyle ); + /// Save as OASIS XML + void saveOasis( KoGenStyle& listStyle, bool savingStyle = false ) const; + /// Part of saveOasis that is shared with KoStyleCollection::saveOasisOutlineStyles + /// and KWVariableSettings::saveOasis for footnotes/endnotes + void saveOasisListLevel( KoXmlWriter& listLevelWriter, bool includeLevelAndProperties, bool savingStyle = false ) const; + + bool operator==( const KoParagCounter & c2 ) const; + bool operator!=( const KoParagCounter & c2 ) const { return !(*this == c2); } + + enum Numbering + { + NUM_NONE = 2, // Unnumbered. Equivalent to there being + // no counter structure associated with a + // paragraph. + NUM_LIST = 0, // Numbered as a list item. + NUM_CHAPTER = 1, // Numbered as a heading. + NUM_FOOTNOTE = 3 // Fixed text counter, set by the code. This is used by e.g. footnotes. + }; + enum Style // always add to the end, the numeric values are part of the DTD + { + STYLE_NONE = 0, + STYLE_NUM = 1, STYLE_ALPHAB_L = 2, STYLE_ALPHAB_U = 3, + STYLE_ROM_NUM_L = 4, STYLE_ROM_NUM_U = 5, STYLE_CUSTOMBULLET = 6, + STYLE_CUSTOM = 7, STYLE_CIRCLEBULLET = 8, STYLE_SQUAREBULLET = 9, + STYLE_DISCBULLET = 10, STYLE_BOXBULLET = 11 + }; + + /** Numbering type and style. + */ + Numbering numbering() const; + void setNumbering( Numbering n ); + + Style style() const; + void setStyle( Style s ); + + /** + * Should this counter start at "startNumber" (instead of + * being the 'last counter of the same type + 1') + */ + bool restartCounter() const; + void setRestartCounter( bool restart ); + + /** Does this counter have a bullet style? + */ + bool isBullet() const; + /** + * Helper function for finding out if a style is a bullet + */ + static bool isBullet( Style style ); + + /** The level of the numbering. + * Depth of 0 means the major numbering. (1, 2, 3...) + * Depth of 1 is 1.1, 1.2, 1.3 etc. */ + unsigned int depth() const; + void setDepth( unsigned int d ); + + /** Number of levels whose numbers are displayed at the current level. + */ + int displayLevels() const; + void setDisplayLevels( int l ); + + /** Starting number. + */ + int startNumber() const; + void setStartNumber( int s ); + + /** Prefix and suffix strings. + */ + QString prefix() const; + void setPrefix( QString p ); + QString suffix() const; + void setSuffix( QString s ); + + /** The character and font for STYLE_CUSTOMBULLET. + */ + QChar customBulletCharacter() const; + void setCustomBulletCharacter( QChar c ); + QString customBulletFont() const; + void setCustomBulletFont( QString f ); + + /** The string STYLE_CUSTOM. + */ + QString custom() const; + void setCustom( QString c ); + + /** Counter alignment + */ + int alignment() const; + void setAlignment( int a ); + + /** + * Return the format to use for the counter. + * This does no caching, it's merely to centralize code. + */ + static KoTextFormat* counterFormat( const KoTextParag *paragraph ); + + static QString makeRomanNumber( int n ); + static QString makeAlphaUpperNumber( int n ); + static QString makeAlphaLowerNumber( int n ); + + static int fromRomanNumber( const QString & ); + static int fromAlphaUpperNumber( const QString & ); + static int fromAlphaLowerNumber( const QString & ); + +#ifndef NDEBUG + void printRTDebug( KoTextParag* parag ); +#endif + +private: + + /** Return our parent paragraph, if there is such a thing. For a paragraph "1.1.", + * the parent is the paragraph numbered "1.". + */ + KoTextParag *parent( const KoTextParag *paragraph ); + + Numbering m_numbering:3; // Numbering (maximum value: 8) + bool m_restartCounter:1; + bool unused:4; + Style m_style:8; // Style + char m_displayLevels; // Number of levels to display (e.g. 3 => 1.2.1) + char m_depth; + + short int m_startNumber; + QChar m_customBulletChar; + + QString m_customBulletFont; + QString m_custom; + QString m_prefix; + QString m_suffix; + int m_align; + + class Private; + Private *d; // define operator= and copy ctor when using this! + + /** The cached, calculated values for this counter: + * + * VALUE VALUE WHEN INVALID + * number of this counter -1 + * text of this counter QString::null + * width of the label -1 + * parent (KoTextParag *)-1 + * the format that was used to calculate the width 0 + */ + struct + { + int number; + QString text; + int width; + KoTextParag *parent; + KoTextFormat * counterFormat; + } m_cache; +}; + +#endif |