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/kformula/kformuladefs.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/kformula/kformuladefs.h')
-rw-r--r-- | lib/kformula/kformuladefs.h | 430 |
1 files changed, 430 insertions, 0 deletions
diff --git a/lib/kformula/kformuladefs.h b/lib/kformula/kformuladefs.h new file mode 100644 index 00000000..d42d0b16 --- /dev/null +++ b/lib/kformula/kformuladefs.h @@ -0,0 +1,430 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Andrea Rizzi <rizzi@kde.org> + Ulrich Kuettler <ulrich.kuettler@mailbox.tu-dresden.de> + + 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 FORMULADEFS_H +#define FORMULADEFS_H + +#include <memory> + +#include <qpoint.h> +#include <qrect.h> +#include <qstring.h> + +#include <KoPoint.h> +#include <KoRect.h> + + +#define KFORMULA_NAMESPACE_BEGIN namespace KFormula { +#define KFORMULA_NAMESPACE_END } + +KFORMULA_NAMESPACE_BEGIN + +const int DEBUGID = 40000; + +// to make kdDebug a litte more interessting... +//#define TERM_RESET "[0m" +//#define TERM_ERROR "[40;31;m" + +/** + * The type to be used for points. + */ +typedef double pt; +typedef KoPoint PtPoint; +typedef KoRect PtRect; +//typedef KoSize PtSize; + +/** + * Pixels. At any zoom level. + */ +typedef int pixel; +typedef QPoint PixelPoint; +typedef QRect PixelRect; +//typedef QSize PixelSize; + +/** + * Layout Unit. That's the values we store to get + * wysiwyg right. + */ +typedef int luPt; +typedef QPoint LuPtPoint; +typedef QRect LuPtRect; +typedef QSize LuPtSize; + +typedef int luPixel; +typedef QPoint LuPixelPoint; +typedef QRect LuPixelRect; +typedef QSize LuPixelSize; + + +/** + * The symbols that are supported by our artwork. + */ +enum SymbolType { + LeftSquareBracket = '[', + RightSquareBracket = ']', + LeftCurlyBracket = '{', + RightCurlyBracket = '}', + LeftCornerBracket = '<', + RightCornerBracket = '>', + LeftRoundBracket = '(', + RightRoundBracket = ')', + SlashBracket = '/', + BackSlashBracket = '\\', + LeftLineBracket = 256, + RightLineBracket, + EmptyBracket = 1000, + Integral, + Sum, + Product +}; + + +/** + * Flag for cursor movement functions. + * Select means move selecting the text (usually Shift key) + * Word means move by whole words (usually Control key) + */ +enum MoveFlag { NormalMovement = 0, SelectMovement = 1, WordMovement = 2 }; + +inline MoveFlag movementFlag( int state ) +{ + int flag = NormalMovement; + if ( state & Qt::ControlButton ) + flag |= WordMovement; + if ( state & Qt::ShiftButton ) + flag |= SelectMovement; + return static_cast<MoveFlag>( flag ); +} + + + +/** + * TeX like char classes + */ +enum CharClass { + ORDINARY = 0, + BINOP = 1, + RELATION = 2, + PUNCTUATION = 3, + + NUMBER, NAME, ELEMENT, INNER, BRACKET, SEQUENCE, SEPARATOR, END +}; + +typedef CharClass TokenType; + + +// there are four bits needed to store this +enum CharStyle { + normalChar, + boldChar, + italicChar, + boldItalicChar, // is required to be (boldChar | italicChar)! + //slantChar, + anyChar +}; + + +enum CharFamily { + normalFamily, + scriptFamily, + frakturFamily, + doubleStruckFamily, + sansSerifFamily, // TODO: Currently unsupported + monospaceFamily, // TODO: Currently unsupported + anyFamily +}; + +enum TokenElementType { + identifierElement, + operatorElement, + numberElement, + textElement, + anyElement +}; + +/** + * The struct used to store static font data. + */ +struct InternFontTable { + short unicode; + QChar pos; + CharClass cl; + CharStyle style; +}; + + +/** + * Wether we want to insert to the left of the cursor + * or right of it. + * The same for deletion. + */ +enum Direction { beforeCursor, afterCursor }; + +/** + * The types of space we know. + */ +enum SpaceWidth { THIN, MEDIUM, THICK, QUAD, NEGTHIN }; + +/** + * The types of MathML horizontal or vertical sizes we know + */ +enum SizeType { + NoSize, + AutoSize, + FitSize, + InfinitySize, + RelativeSize, + AbsoluteSize, + PixelSize, + NegativeVeryVeryThinMathSpace, + NegativeVeryThinMathSpace, + NegativeThinMathSpace, + NegativeMediumMathSpace, + NegativeThickMathSpace, + NegativeVeryThickMathSpace, + NegativeVeryVeryThickMathSpace, + VeryVeryThinMathSpace, + VeryThinMathSpace, + ThinMathSpace, + MediumMathSpace, + ThickMathSpace, + VeryThickMathSpace, + VeryVeryThickMathSpace +}; + +/** + * The types of horizontal align + */ +enum HorizontalAlign { + NoHorizontalAlign, + LeftHorizontalAlign, + CenterHorizontalAlign, + RightHorizontalAlign +}; + +/** + * Type of forms in operators + */ +enum FormType { NoForm, PrefixForm, InfixForm, PostfixForm }; + +/** + * each index has its own number. + */ +enum IndexPosition { + upperLeftPos, + lowerLeftPos, + upperMiddlePos, + contentPos, + lowerMiddlePos, + upperRightPos, + lowerRightPos, + parentPos +}; + + +class BasicElement; +class FormulaCursor; + +/** + * A type that describes an index. You can get one of those + * for each index from an element that owns indexes. + * + * This type is used to work on indexes in a generic way. + */ +class ElementIndex { +public: + + virtual ~ElementIndex() { /*cerr << "ElementIndex destroyed.\n";*/ } + + /** + * Moves the cursor inside the index. The index has to exist. + */ + virtual void moveToIndex(FormulaCursor*, Direction) = 0; + + /** + * Sets the cursor to point to the place where the index normaly + * is. These functions are only used if there is no such index and + * we want to insert them. + */ + virtual void setToIndex(FormulaCursor*) = 0; + + /** + * Tells whether we own those indexes. + */ + virtual bool hasIndex() const = 0; + + /** + * Tells to which element the index belongs. + */ + virtual BasicElement* getElement() = 0; +}; + +typedef std::auto_ptr<ElementIndex> ElementIndexPtr; + +enum RequestID { + req_addBracket, + req_addOverline, + req_addUnderline, + req_addFraction, + req_addIndex, + req_addMatrix, + req_addMultiline, + req_addNameSequence, + req_addNewline, + req_addOneByTwoMatrix, + req_addRoot, + req_addSpace, + req_addSymbol, + req_addTabMark, + req_addText, + req_addTextChar, + req_addOperator, + req_addNumber, + req_addEmptyBox, + req_appendColumn, + req_appendRow, + req_compactExpression, + req_copy, + req_cut, + req_insertColumn, + req_insertRow, + req_makeGreek, + req_paste, + req_remove, + req_removeEnclosing, + req_removeColumn, + req_removeRow, + req_formatBold, + req_formatItalic, + req_formatFamily, + req_formatTokenElement +}; + + +class Request { + RequestID id; +public: + Request( RequestID _id ) : id( _id ) {} + virtual ~Request() {} + operator RequestID() const { return id;} +}; + + +class BracketRequest : public Request { + SymbolType m_left, m_right; +public: + BracketRequest( SymbolType l, SymbolType r ) : Request( req_addBracket ), m_left( l ), m_right( r ) {} + SymbolType left() const { return m_left; } + SymbolType right() const { return m_right; } +}; + +class SymbolRequest : public Request { + SymbolType m_type; +public: + SymbolRequest( SymbolType t ) : Request( req_addSymbol ), m_type( t ) {} + SymbolType type() const { return m_type; } +}; + +class IndexRequest : public Request { + IndexPosition m_index; +public: + IndexRequest( IndexPosition i ) : Request( req_addIndex ), m_index( i ) {} + IndexPosition index() const { return m_index; } +}; + +class SpaceRequest : public Request { + SpaceWidth m_space; +public: + SpaceRequest( SpaceWidth s ) : Request( req_addSpace ), m_space( s ) {} + SpaceWidth space() const { return m_space; } +}; + +class DirectedRemove : public Request { + Direction m_direction; +public: + DirectedRemove( RequestID id, Direction d ) : Request( id ), m_direction( d ) {} + Direction direction() const { return m_direction; } +}; + +class TextCharRequest : public Request { + QChar m_ch; + bool m_isSymbol; +public: + TextCharRequest( QChar ch, bool isSymbol=false ) : Request( req_addTextChar ), m_ch( ch ), m_isSymbol( isSymbol ) {} + QChar ch() const { return m_ch; } + bool isSymbol() const { return m_isSymbol; } +}; + +class OperatorRequest: public Request { + QChar m_ch; +public: + OperatorRequest( QChar ch ) : Request( req_addOperator ), m_ch( ch ) {} + QChar ch() const { return m_ch; } +}; + +class NumberRequest: public Request { + QChar m_ch; +public: + NumberRequest( QChar ch ) : Request( req_addNumber ), m_ch( ch ) {} + QChar ch() const { return m_ch; } +}; + +class TextRequest : public Request { + QString m_text; +public: + TextRequest( QString text ) : Request( req_addText ), m_text( text ) {} + QString text() const { return m_text; } +}; + +class MatrixRequest : public Request { + uint m_rows, m_columns; +public: + MatrixRequest( uint rows, uint columns ) : Request( req_addMatrix ), m_rows( rows ), m_columns( columns ) {} + uint rows() const { return m_rows; } + uint columns() const { return m_columns; } +}; + +class CharStyleRequest : public Request { + bool m_bold; + bool m_italic; +public: + CharStyleRequest( RequestID id, bool bold, bool italic ) : Request( id ), m_bold( bold ), m_italic( italic ) {} + bool bold() const { return m_bold; } + bool italic() const { return m_italic; } +}; + +class CharFamilyRequest : public Request { + CharFamily m_charFamily; +public: + CharFamilyRequest( CharFamily cf ) : Request( req_formatFamily ), m_charFamily( cf ) {} + CharFamily charFamily() const { return m_charFamily; } +}; + +class TokenElementRequest : public Request { + TokenElementType m_tokenElement; +public: + TokenElementRequest( TokenElementType te ) : Request( req_formatTokenElement ), m_tokenElement( te ) {} + TokenElementType tokenElement() const { return m_tokenElement; } +}; + + +KFORMULA_NAMESPACE_END + +#endif // FORMULADEFS_H |