00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef BRACKETELEMENT_H
00022 #define BRACKETELEMENT_H
00023
00024 #include <qpoint.h>
00025 #include <qsize.h>
00026
00027 #include "basicelement.h"
00028
00029 KFORMULA_NAMESPACE_BEGIN
00030
00031 class Artwork;
00032 class SequenceElement;
00033
00034
00039 class SingleContentElement : public BasicElement {
00040 SingleContentElement& operator=( const SingleContentElement& ) { return *this; }
00041 public:
00042
00043 SingleContentElement(BasicElement* parent = 0);
00044 ~SingleContentElement();
00045
00046 SingleContentElement( const SingleContentElement& );
00047
00053 virtual QChar getCharacter() const;
00054
00061 virtual BasicElement* goToPos( FormulaCursor*, bool& handled,
00062 const LuPixelPoint& point, const LuPixelPoint& parentOrigin );
00063
00067 virtual void dispatchFontCommand( FontCommand* cmd );
00068
00074 virtual void moveLeft(FormulaCursor* cursor, BasicElement* from);
00075
00081 virtual void moveRight(FormulaCursor* cursor, BasicElement* from);
00082
00088 virtual void moveUp(FormulaCursor* cursor, BasicElement* from);
00089
00095 virtual void moveDown(FormulaCursor* cursor, BasicElement* from);
00096
00103 virtual void remove(FormulaCursor*, QPtrList<BasicElement>&, Direction);
00104
00109 virtual void normalize(FormulaCursor*, Direction);
00110
00111
00112
00113
00114
00115 virtual SequenceElement* getMainChild();
00116
00121 virtual void selectChild(FormulaCursor* cursor, BasicElement* child);
00122
00123 virtual void writeMathML( QDomDocument& doc, QDomNode& parent, bool oasisFormat = false );
00124
00125 protected:
00126
00130 virtual void writeDom(QDomElement element);
00131
00137 virtual bool readContentFromDom(QDomNode& node);
00138
00139 SequenceElement* getContent() { return content; }
00140
00141 private:
00142
00146 SequenceElement* content;
00147 };
00148
00149
00153 class BracketElement : public SingleContentElement {
00154 BracketElement& operator=( const BracketElement& ) { return *this; }
00155 public:
00156
00157 enum { contentPos };
00158
00159 BracketElement(SymbolType left = EmptyBracket, SymbolType right = EmptyBracket,
00160 BasicElement* parent = 0);
00161 ~BracketElement();
00162
00163 BracketElement( const BracketElement& );
00164
00165 virtual BracketElement* clone() {
00166 return new BracketElement( *this );
00167 }
00168
00169 virtual bool accept( ElementVisitor* visitor );
00170
00175 virtual TokenType getTokenType() const { return BRACKET; }
00176
00181 virtual void entered( SequenceElement* child );
00182
00189 virtual BasicElement* goToPos( FormulaCursor*, bool& handled,
00190 const LuPixelPoint& point, const LuPixelPoint& parentOrigin );
00191
00196 virtual void calcSizes(const ContextStyle& style, ContextStyle::TextStyle tstyle, ContextStyle::IndexStyle istyle);
00197
00203 virtual void draw( QPainter& painter, const LuPixelRect& r,
00204 const ContextStyle& style,
00205 ContextStyle::TextStyle tstyle,
00206 ContextStyle::IndexStyle istyle,
00207 const LuPixelPoint& parentOrigin );
00208
00209 virtual void writeMathML( QDomDocument& doc, QDomNode& parent, bool oasisFormat = false );
00210
00211 protected:
00212
00213
00214
00218 virtual QString getTagName() const { return "BRACKET"; }
00219
00224 virtual bool readAttributesFromDom(QDomElement element);
00225
00226 virtual void writeDom(QDomElement element);
00227
00232 virtual QString toLatex();
00233
00234 virtual QString formulaString();
00235
00236 private:
00237
00241 QString latexString(char);
00242
00246 Artwork* left;
00247 Artwork* right;
00248
00249 SymbolType leftType;
00250 SymbolType rightType;
00251 };
00252
00253
00257 class OverlineElement : public SingleContentElement {
00258 OverlineElement& operator=( const OverlineElement& ) { return *this; }
00259 public:
00260
00261 OverlineElement(BasicElement* parent = 0);
00262 ~OverlineElement();
00263
00264 OverlineElement( const OverlineElement& );
00265
00266 virtual OverlineElement* clone() {
00267 return new OverlineElement( *this );
00268 }
00269
00270 virtual bool accept( ElementVisitor* visitor );
00271
00276 virtual void entered( SequenceElement* child );
00277
00282 virtual void calcSizes(const ContextStyle& style, ContextStyle::TextStyle tstyle, ContextStyle::IndexStyle istyle);
00283
00289 virtual void draw( QPainter& painter, const LuPixelRect& r,
00290 const ContextStyle& style,
00291 ContextStyle::TextStyle tstyle,
00292 ContextStyle::IndexStyle istyle,
00293 const LuPixelPoint& parentOrigin );
00294
00299 virtual QString toLatex();
00300
00301 virtual QString formulaString();
00302
00303 virtual void writeMathML( QDomDocument& doc, QDomNode& parent, bool oasisFormat = false );
00304
00305 protected:
00306
00307
00308
00312 virtual QString getTagName() const { return "OVERLINE"; }
00313
00314 private:
00315 };
00316
00317
00321 class UnderlineElement : public SingleContentElement {
00322 UnderlineElement& operator=( const UnderlineElement& ) { return *this; }
00323 public:
00324 UnderlineElement(BasicElement* parent = 0);
00325 ~UnderlineElement();
00326
00327 UnderlineElement( const UnderlineElement& );
00328
00329 virtual UnderlineElement* clone() {
00330 return new UnderlineElement( *this );
00331 }
00332
00333 virtual bool accept( ElementVisitor* visitor );
00334
00339 virtual void entered( SequenceElement* child );
00340
00345 virtual void calcSizes(const ContextStyle& style, ContextStyle::TextStyle tstyle, ContextStyle::IndexStyle istyle);
00346
00352 virtual void draw( QPainter& painter, const LuPixelRect& r,
00353 const ContextStyle& style,
00354 ContextStyle::TextStyle tstyle,
00355 ContextStyle::IndexStyle istyle,
00356 const LuPixelPoint& parentOrigin );
00357
00362 virtual QString toLatex();
00363
00364 virtual QString formulaString();
00365
00366 virtual void writeMathML( QDomDocument& doc, QDomNode& parent, bool oasisFormat = false );
00367
00368 protected:
00369
00370
00371
00375 virtual QString getTagName() const { return "UNDERLINE"; }
00376
00377 private:
00378 };
00379
00380
00381 KFORMULA_NAMESPACE_END
00382
00383 #endif // BRACKETELEMENT_H