You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
244 lines
8.2 KiB
244 lines
8.2 KiB
/* 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 <tqstring.h>
|
|
#include <koffice_export.h>
|
|
class TQDomElement;
|
|
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."
|
|
*/
|
|
TQString 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.
|
|
*/
|
|
TQString 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( TQDomElement & element );
|
|
/// KOffice-1.3 saving code
|
|
void save( TQDomElement & 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 TQDomElement& listStyle,
|
|
const TQDomElement& listStyleProperties,
|
|
const TQDomElement& 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.
|
|
*/
|
|
TQString prefix() const;
|
|
void setPrefix( TQString p );
|
|
TQString suffix() const;
|
|
void setSuffix( TQString s );
|
|
|
|
/** The character and font for STYLE_CUSTOMBULLET.
|
|
*/
|
|
TQChar customBulletCharacter() const;
|
|
void setCustomBulletCharacter( TQChar c );
|
|
TQString customBulletFont() const;
|
|
void setCustomBulletFont( TQString f );
|
|
|
|
/** The string STYLE_CUSTOM.
|
|
*/
|
|
TQString custom() const;
|
|
void setCustom( TQString 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 TQString makeRomanNumber( int n );
|
|
static TQString makeAlphaUpperNumber( int n );
|
|
static TQString makeAlphaLowerNumber( int n );
|
|
|
|
static int fromRomanNumber( const TQString & );
|
|
static int fromAlphaUpperNumber( const TQString & );
|
|
static int fromAlphaLowerNumber( const TQString & );
|
|
|
|
#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;
|
|
TQChar m_customBulletChar;
|
|
|
|
TQString m_customBulletFont;
|
|
TQString m_custom;
|
|
TQString m_prefix;
|
|
TQString 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 TQString()
|
|
* width of the label -1
|
|
* parent (KoTextParag *)-1
|
|
* the format that was used to calculate the width 0
|
|
*/
|
|
struct
|
|
{
|
|
int number;
|
|
TQString text;
|
|
int width;
|
|
KoTextParag *parent;
|
|
KoTextFormat * counterFormat;
|
|
} m_cache;
|
|
};
|
|
|
|
#endif
|