00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef FORMULADEFS_H
00022 #define FORMULADEFS_H
00023
00024 #include <memory>
00025
00026 #include <qpoint.h>
00027 #include <qrect.h>
00028 #include <qstring.h>
00029
00030 #include <KoPoint.h>
00031 #include <KoRect.h>
00032
00033
00034 #define KFORMULA_NAMESPACE_BEGIN namespace KFormula {
00035 #define KFORMULA_NAMESPACE_END }
00036
00037 KFORMULA_NAMESPACE_BEGIN
00038
00039 const int DEBUGID = 40000;
00040
00041
00042
00043
00044
00048 typedef double pt;
00049 typedef KoPoint PtPoint;
00050 typedef KoRect PtRect;
00051
00052
00056 typedef int pixel;
00057 typedef QPoint PixelPoint;
00058 typedef QRect PixelRect;
00059 typedef QSize PixelSize;
00060
00065 typedef int luPt;
00066 typedef QPoint LuPtPoint;
00067 typedef QRect LuPtRect;
00068 typedef QSize LuPtSize;
00069
00070 typedef int luPixel;
00071 typedef QPoint LuPixelPoint;
00072 typedef QRect LuPixelRect;
00073 typedef QSize LuPixelSize;
00074
00075
00079 enum SymbolType {
00080 LeftSquareBracket = '[',
00081 RightSquareBracket = ']',
00082 LeftCurlyBracket = '{',
00083 RightCurlyBracket = '}',
00084 LeftCornerBracket = '<',
00085 RightCornerBracket = '>',
00086 LeftRoundBracket = '(',
00087 RightRoundBracket = ')',
00088 SlashBracket = '/',
00089 BackSlashBracket = '\\',
00090 LeftLineBracket = 256,
00091 RightLineBracket,
00092 EmptyBracket = 1000,
00093 Integral,
00094 Sum,
00095 Product
00096 };
00097
00098
00104 enum MoveFlag { NormalMovement = 0, SelectMovement = 1, WordMovement = 2 };
00105
00106 inline MoveFlag movementFlag( int state )
00107 {
00108 int flag = NormalMovement;
00109 if ( state & Qt::ControlButton )
00110 flag |= WordMovement;
00111 if ( state & Qt::ShiftButton )
00112 flag |= SelectMovement;
00113 return static_cast<MoveFlag>( flag );
00114 }
00115
00116
00117
00121 enum CharClass {
00122 ORDINARY = 0,
00123 BINOP = 1,
00124 RELATION = 2,
00125 PUNCTUATION = 3,
00126
00127 NUMBER, NAME, ELEMENT, INNER, BRACKET, SEQUENCE, SEPARATOR, END
00128 };
00129
00130 typedef CharClass TokenType;
00131
00132
00133
00134 enum CharStyle {
00135 normalChar,
00136 boldChar,
00137 italicChar,
00138 boldItalicChar,
00139
00140 anyChar
00141 };
00142
00143
00144 enum CharFamily {
00145 normalFamily,
00146 scriptFamily,
00147 frakturFamily,
00148 doubleStruckFamily,
00149 anyFamily
00150 };
00151
00152
00156 struct InternFontTable {
00157 short unicode;
00158 QChar pos;
00159 CharClass cl;
00160 CharStyle style;
00161 };
00162
00163
00169 enum Direction { beforeCursor, afterCursor };
00170
00174 enum SpaceWidth { THIN, MEDIUM, THICK, QUAD, NEGTHIN };
00175
00179 enum IndexPosition {
00180 upperLeftPos,
00181 lowerLeftPos,
00182 upperMiddlePos,
00183 contentPos,
00184 lowerMiddlePos,
00185 upperRightPos,
00186 lowerRightPos,
00187 parentPos
00188 };
00189
00190
00191 class BasicElement;
00192 class FormulaCursor;
00193
00200 class ElementIndex {
00201 public:
00202
00203 virtual ~ElementIndex() { }
00204
00208 virtual void moveToIndex(FormulaCursor*, Direction) = 0;
00209
00215 virtual void setToIndex(FormulaCursor*) = 0;
00216
00220 virtual bool hasIndex() const = 0;
00221
00225 virtual BasicElement* getElement() = 0;
00226 };
00227
00228 typedef std::auto_ptr<ElementIndex> ElementIndexPtr;
00229
00230 enum RequestID {
00231 req_addBracket,
00232 req_addOverline,
00233 req_addUnderline,
00234 req_addFraction,
00235 req_addIndex,
00236 req_addMatrix,
00237 req_addMultiline,
00238 req_addNameSequence,
00239 req_addNewline,
00240 req_addOneByTwoMatrix,
00241 req_addRoot,
00242 req_addSpace,
00243 req_addSymbol,
00244 req_addTabMark,
00245 req_addText,
00246 req_addTextChar,
00247 req_addEmptyBox,
00248 req_appendColumn,
00249 req_appendRow,
00250 req_compactExpression,
00251 req_copy,
00252 req_cut,
00253 req_insertColumn,
00254 req_insertRow,
00255 req_makeGreek,
00256 req_paste,
00257 req_remove,
00258 req_removeEnclosing,
00259 req_removeColumn,
00260 req_removeRow,
00261 req_formatBold,
00262 req_formatItalic,
00263 req_formatFamily
00264 };
00265
00266
00267 class Request {
00268 RequestID id;
00269 public:
00270 Request( RequestID _id ) : id( _id ) {}
00271 virtual ~Request() {}
00272 operator RequestID() const { return id;}
00273 };
00274
00275
00276 class BracketRequest : public Request {
00277 SymbolType m_left, m_right;
00278 public:
00279 BracketRequest( SymbolType l, SymbolType r ) : Request( req_addBracket ), m_left( l ), m_right( r ) {}
00280 SymbolType left() const { return m_left; }
00281 SymbolType right() const { return m_right; }
00282 };
00283
00284 class SymbolRequest : public Request {
00285 SymbolType m_type;
00286 public:
00287 SymbolRequest( SymbolType t ) : Request( req_addSymbol ), m_type( t ) {}
00288 SymbolType type() const { return m_type; }
00289 };
00290
00291 class IndexRequest : public Request {
00292 IndexPosition m_index;
00293 public:
00294 IndexRequest( IndexPosition i ) : Request( req_addIndex ), m_index( i ) {}
00295 IndexPosition index() const { return m_index; }
00296 };
00297
00298 class SpaceRequest : public Request {
00299 SpaceWidth m_space;
00300 public:
00301 SpaceRequest( SpaceWidth s ) : Request( req_addSpace ), m_space( s ) {}
00302 SpaceWidth space() const { return m_space; }
00303 };
00304
00305 class DirectedRemove : public Request {
00306 Direction m_direction;
00307 public:
00308 DirectedRemove( RequestID id, Direction d ) : Request( id ), m_direction( d ) {}
00309 Direction direction() const { return m_direction; }
00310 };
00311
00312 class TextCharRequest : public Request {
00313 QChar m_ch;
00314 bool m_isSymbol;
00315 public:
00316 TextCharRequest( QChar ch, bool isSymbol=false ) : Request( req_addTextChar ), m_ch( ch ), m_isSymbol( isSymbol ) {}
00317 QChar ch() const { return m_ch; }
00318 bool isSymbol() const { return m_isSymbol; }
00319 };
00320
00321 class TextRequest : public Request {
00322 QString m_text;
00323 public:
00324 TextRequest( QString text ) : Request( req_addText ), m_text( text ) {}
00325 QString text() const { return m_text; }
00326 };
00327
00328 class MatrixRequest : public Request {
00329 uint m_rows, m_columns;
00330 public:
00331 MatrixRequest( uint rows, uint columns ) : Request( req_addMatrix ), m_rows( rows ), m_columns( columns ) {}
00332 uint rows() const { return m_rows; }
00333 uint columns() const { return m_columns; }
00334 };
00335
00336 class CharStyleRequest : public Request {
00337 bool m_bold;
00338 bool m_italic;
00339 public:
00340 CharStyleRequest( RequestID id, bool bold, bool italic ) : Request( id ), m_bold( bold ), m_italic( italic ) {}
00341 bool bold() const { return m_bold; }
00342 bool italic() const { return m_italic; }
00343 };
00344
00345 class CharFamilyRequest : public Request {
00346 CharFamily m_charFamily;
00347 public:
00348 CharFamilyRequest( CharFamily cf ) : Request( req_formatFamily ), m_charFamily( cf ) {}
00349 CharFamily charFamily() const { return m_charFamily; }
00350 };
00351
00352
00353 KFORMULA_NAMESPACE_END
00354
00355 #endif // FORMULADEFS_H