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 );
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