00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef MATRIXELEMENT_H
00022 #define MATRIXELEMENT_H
00023
00024 #include <qptrlist.h>
00025
00026 #include "basicelement.h"
00027
00028 KFORMULA_NAMESPACE_BEGIN
00029
00030
00031 class MatrixSequenceElement;
00032
00033
00037 class MatrixElement : public BasicElement {
00038 friend class KFCRemoveColumn;
00039 friend class KFCRemoveRow;
00040 friend class MatrixSequenceElement;
00041
00042 MatrixElement& operator=( const MatrixElement& ) { return *this; }
00043 public:
00044 MatrixElement(uint rows = 1, uint columns = 1, BasicElement* parent = 0);
00045 ~MatrixElement();
00046
00047 MatrixElement( const MatrixElement& );
00048
00049 virtual MatrixElement* clone() {
00050 return new MatrixElement( *this );
00051 }
00052
00053 virtual bool accept( ElementVisitor* visitor );
00054
00059 virtual void entered( SequenceElement* child );
00060
00067 virtual BasicElement* goToPos( FormulaCursor*, bool& handled,
00068 const LuPixelPoint& point, const LuPixelPoint& parentOrigin );
00069
00070
00071
00072
00073
00074
00075
00076
00081 virtual void calcSizes(const ContextStyle& context, ContextStyle::TextStyle tstyle, ContextStyle::IndexStyle istyle);
00082
00088 virtual void draw( QPainter& painter, const LuPixelRect& r,
00089 const ContextStyle& context,
00090 ContextStyle::TextStyle tstyle,
00091 ContextStyle::IndexStyle istyle,
00092 const LuPixelPoint& parentOrigin );
00093
00097 virtual void dispatchFontCommand( FontCommand* cmd );
00098
00099
00100
00101
00102
00103
00104
00105
00106
00112 virtual void moveLeft(FormulaCursor* cursor, BasicElement* from);
00113
00119 virtual void moveRight(FormulaCursor* cursor, BasicElement* from);
00120
00126 virtual void moveUp(FormulaCursor*, BasicElement*);
00127
00133 virtual void moveDown(FormulaCursor*, BasicElement*);
00134
00139 virtual void goInside(FormulaCursor* cursor);
00140
00144
00145 virtual SequenceElement* getMainChild();
00146
00151
00152
00157
00158
00163
00164
00169 virtual void selectChild(FormulaCursor*, BasicElement*);
00170
00175
00176
00182
00183
00188 virtual QString toLatex();
00189
00190 virtual QString formulaString();
00191
00192 uint getRows() const { return content.count(); }
00193 uint getColumns() const { return content.getFirst()->count(); }
00194
00195 SequenceElement* elementAt(uint row, uint column);
00196
00197 virtual void writeMathML( QDomDocument& doc, QDomNode parent, bool oasisFormat = false );
00198
00199 protected:
00200
00201
00202
00206 virtual QString getTagName() const { return "MATRIX"; }
00207
00211 virtual void writeDom(QDomElement element);
00212
00217 virtual bool readAttributesFromDom(QDomElement element);
00218
00224 virtual bool readContentFromDom(QDomNode& node);
00225
00226 private:
00227
00228 MatrixSequenceElement* getElement(uint row, uint column)
00229 { return content.at(row)->at(column); }
00230
00236 bool searchElement(BasicElement* element, uint& row, uint& column);
00237
00241 QPtrList< QPtrList< MatrixSequenceElement > > content;
00242 };
00243
00244
00245
00246 class MultilineSequenceElement;
00247
00248
00252 class MultilineElement : public BasicElement {
00253 friend class KFCNewLine;
00254
00255 typedef BasicElement inherited;
00256 public:
00257
00262 MultilineElement( BasicElement* parent = 0 );
00263 ~MultilineElement();
00264
00265 MultilineElement( const MultilineElement& );
00266
00267 virtual MultilineElement* clone() {
00268 return new MultilineElement( *this );
00269 }
00270
00271 virtual bool accept( ElementVisitor* visitor );
00272
00277 virtual void entered( SequenceElement* child );
00278
00282 BasicElement* goToPos( FormulaCursor* cursor, bool& handled,
00283 const LuPixelPoint& point, const LuPixelPoint& parentOrigin );
00284
00289 virtual void goInside(FormulaCursor* cursor);
00290
00296 virtual void moveLeft( FormulaCursor* cursor, BasicElement* from );
00297
00303 virtual void moveRight( FormulaCursor* cursor, BasicElement* from );
00304
00310 virtual void moveUp( FormulaCursor* cursor, BasicElement* from );
00311
00317 virtual void moveDown( FormulaCursor* cursor, BasicElement* from );
00318
00323 virtual void calcSizes(const ContextStyle& context, ContextStyle::TextStyle tstyle, ContextStyle::IndexStyle istyle);
00324
00330 virtual void draw( QPainter& painter, const LuPixelRect& r,
00331 const ContextStyle& context,
00332 ContextStyle::TextStyle tstyle,
00333 ContextStyle::IndexStyle istyle,
00334 const LuPixelPoint& parentOrigin );
00335
00339 virtual void dispatchFontCommand( FontCommand* cmd );
00340
00341 virtual void insert(FormulaCursor*, QPtrList<BasicElement>&, Direction);
00342 virtual void remove(FormulaCursor*, QPtrList<BasicElement>&, Direction);
00343
00344 virtual void normalize(FormulaCursor*, Direction);
00345
00346 virtual SequenceElement* getMainChild();
00347
00352 virtual void selectChild(FormulaCursor* cursor, BasicElement* child);
00353
00358 virtual QString toLatex();
00359
00360 virtual QString formulaString();
00361
00362 virtual void writeMathML( QDomDocument& doc, QDomNode parent, bool oasisFormat = false );
00363
00364 protected:
00365
00366
00367
00371 virtual QString getTagName() const { return "MULTILINE"; }
00372
00376 virtual void writeDom(QDomElement element);
00377
00382 virtual bool readAttributesFromDom(QDomElement element);
00383
00389 virtual bool readContentFromDom(QDomNode& node);
00390
00391
00392 private:
00393
00397 QPtrList< MultilineSequenceElement > content;
00398 };
00399
00400
00401 KFORMULA_NAMESPACE_END
00402
00403 #endif // MATRIXELEMENT_H