basicelement.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef BASICELEMENT_H
00022 #define BASICELEMENT_H
00023
00024
00025 #include <qdom.h>
00026 #include <qptrlist.h>
00027 #include <qstring.h>
00028
00029
00030
00031
00032 #include "contextstyle.h"
00033 #include "kformuladefs.h"
00034
00035 class QKeyEvent;
00036
00037 class KCommand;
00038
00039 KFORMULA_NAMESPACE_BEGIN
00040
00041 class ComplexElement;
00042 class Container;
00043 class ElementType;
00044 class ElementVisitor;
00045 class FontCommand;
00046 class FormulaCursor;
00047 class FormulaElement;
00048 class SequenceElement;
00049
00050
00074 class BasicElement
00075 {
00076 friend class SequenceElement;
00077 friend class SequenceParser;
00078
00079 BasicElement& operator= ( const BasicElement& ) { return *this; }
00080 public:
00081
00082
00083
00084
00085
00086
00087
00088
00089 BasicElement(BasicElement* parent = 0);
00090 virtual ~BasicElement();
00091
00092
00093 BasicElement( const BasicElement& );
00094
00095 virtual BasicElement* clone() = 0;
00096
00100 virtual bool accept( ElementVisitor* ) = 0;
00101
00106 virtual bool readOnly( const BasicElement* child ) const;
00107
00111 virtual FormulaElement* formula();
00112
00116 virtual const FormulaElement* formula() const { return parent->formula(); }
00117
00123 virtual QChar getCharacter() const { return QChar::null; }
00124
00129 virtual TokenType getTokenType() const { return ELEMENT; }
00130
00134 virtual bool isInvisible() const { return false; }
00135
00142 virtual BasicElement* goToPos( FormulaCursor*, bool& handled,
00143 const LuPixelPoint& point, const LuPixelPoint& parentOrigin );
00144
00148 LuPixelPoint widgetPos();
00149
00150
00151
00152
00153
00154
00155
00156
00157
00162 virtual void calcSizes(const ContextStyle& context, ContextStyle::TextStyle tstyle, ContextStyle::IndexStyle istyle) = 0;
00163
00169 virtual void draw( QPainter& painter, const LuPixelRect& r,
00170 const ContextStyle& context,
00171 ContextStyle::TextStyle tstyle,
00172 ContextStyle::IndexStyle istyle,
00173 const LuPixelPoint& parentOrigin ) = 0;
00174
00175
00179 virtual void dispatchFontCommand( FontCommand* ) {}
00180
00181
00182
00183
00184
00185
00186
00187
00188
00194 virtual void moveLeft(FormulaCursor* cursor, BasicElement* from);
00195
00201 virtual void moveRight(FormulaCursor* cursor, BasicElement* from);
00202
00208 virtual void moveUp(FormulaCursor*, BasicElement*) {}
00209
00215 virtual void moveDown(FormulaCursor*, BasicElement* ) {}
00216
00221 virtual void moveHome(FormulaCursor*) {}
00222
00227 virtual void moveEnd(FormulaCursor*) {}
00228
00233 virtual void goInside(FormulaCursor* cursor);
00234
00239 virtual void entered( SequenceElement* );
00240
00241
00242
00250
00251
00252
00253
00254
00255
00256
00257 virtual SequenceElement* getMainChild() { return 0; }
00258
00259
00260
00261
00262
00263
00264
00271 virtual void insert(FormulaCursor*, QPtrList<BasicElement>&, Direction) {}
00272
00277 virtual void remove(FormulaCursor*, QPtrList<BasicElement>&, Direction) {}
00278
00283 virtual void normalize(FormulaCursor*, Direction);
00284
00285
00291 virtual bool isSenseless() { return false; }
00292
00296 virtual BasicElement* getChild(FormulaCursor*, Direction = beforeCursor) { return 0; }
00297
00298
00303 virtual void selectChild(FormulaCursor*, BasicElement*) {}
00304
00305
00310 virtual void childWillVanish(FormulaCursor*, BasicElement*) {}
00311
00312
00316 virtual void registerTab( BasicElement* ) {}
00317
00318
00327 virtual KCommand* buildCommand( Container*, Request* ) { return 0; }
00328
00334 virtual KCommand* input( Container*, QKeyEvent* ) { return 0; }
00335
00336
00337
00338 const BasicElement* getParent() const { return parent; }
00339 BasicElement* getParent() { return parent; }
00340 void setParent(BasicElement* p) { parent = p; }
00341
00342 luPixel getX() const { return m_x; }
00343 luPixel getY() const { return m_y; }
00344
00345 void setX( luPixel x ) { m_x = x; }
00346 void setY( luPixel y ) { m_y = y; }
00347
00348
00349
00350 luPixel getWidth() const { return m_width; }
00351 luPixel getHeight() const { return m_height; }
00352
00353 void setWidth( luPixel width ) { m_width = width; }
00354 void setHeight( luPixel height ) { m_height = height; }
00355
00356 luPixel getBaseline() const { return m_baseline; }
00357 void setBaseline( luPixel line ) { m_baseline = line; }
00358
00359 luPixel axis( const ContextStyle& style, ContextStyle::TextStyle tstyle ) const {
00360 return getBaseline() - style.axisHeight( tstyle ); }
00361
00367 QDomElement getElementDom( QDomDocument& doc);
00368
00372 virtual void writeMathML( QDomDocument& doc, QDomNode parent, bool oasisFormat = false );
00373
00378 bool buildFromDom(QDomElement element);
00379
00383
00384
00385
00386 static int getEvilDestructionCount() { return evilDestructionCount; }
00387
00392 ElementType* getElementType() const { return elementType; }
00393
00397 virtual void setElementType(ElementType* t) { elementType = t; }
00398
00399 protected:
00400
00401
00402
00406 virtual QString getTagName() const { return "BASIC"; }
00407
00411 virtual void writeDom(QDomElement element);
00412
00417 virtual bool readAttributesFromDom(QDomElement element);
00418
00424 virtual bool readContentFromDom(QDomNode& node);
00425
00426
00433 bool buildChild( SequenceElement* child, QDomNode node, QString name );
00434
00435
00440 virtual QString toLatex();
00441
00442 virtual QString formulaString() { return ""; }
00443
00444 private:
00445
00451 BasicElement* parent;
00452
00456
00457 luPixel m_width;
00458 luPixel m_height;
00459
00463
00464 luPixel m_x;
00465 luPixel m_y;
00466
00475 luPixel m_baseline;
00476
00483
00484
00489 ElementType* elementType;
00490
00491
00492 static int evilDestructionCount;
00493 };
00494
00495 KFORMULA_NAMESPACE_END
00496
00497 #endif // BASICELEMENT_H
This file is part of the documentation for lib Library Version 1.4.2.