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 uchar 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