You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
koffice/lib/kformula/formulaelement.h

235 lines
6.4 KiB

/* This file is part of the KDE project
Copyright (C) 2001 Andrea Rizzi <rizzi@kde.org>
Ulrich Kuettler <ulrich.kuettler@mailbox.tu-dresden.de>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#ifndef FORMULAELEMENT_H
#define FORMULAELEMENT_H
// Formula include
#include "sequenceelement.h"
KFORMULA_NAMESPACE_BEGIN
class BasicElement;
class ContextStyle;
class FormulaDocument;
class SymbolTable;
/**
* The main element.
* A formula consists of a FormulaElement and its children.
* The only element that has no parent.
*/
class FormulaElement : public SequenceElement {
typedef SequenceElement inherited;
public:
/**
* The container this FormulaElement belongs to must not be 0,
* except you really know what you are doing.
*/
FormulaElement(FormulaDocument* container);
virtual FormulaElement* clone() { return 0; }
/**
* Returns the element the point is in.
*/
BasicElement* goToPos( FormulaCursor*, const LuPixelPoint& point );
/**
* Ordinary formulas are not write protected.
*/
virtual bool readOnly( const BasicElement* /*child*/ ) const { return false; }
/**
* @returns whether its prohibited to change the sequence with this cursor.
*/
virtual bool readOnly( const FormulaCursor* ) const { return false; }
/**
* Provide fast access to the rootElement for each child.
*/
virtual FormulaElement* formula() { return this; }
/**
* Provide fast access to the rootElement for each child.
*/
virtual const FormulaElement* formula() const { return this; }
/**
* Gets called just before the child is removed from
* the element tree.
*/
void elementRemoval(BasicElement* child);
/**
* Gets called whenever something changes and we need to
* recalc.
*/
virtual void changed();
/**
* Gets called when a request has the side effect of moving the
* cursor. In the end any operation that moves the cursor should
* call this.
*/
void cursorHasMoved( FormulaCursor* );
void moveOutLeft( FormulaCursor* );
void moveOutRight( FormulaCursor* );
void moveOutBelow( FormulaCursor* );
void moveOutAbove( FormulaCursor* );
/**
* Tell the user something has happened.
*/
void tell( const TQString& msg );
/**
* Gets called when the formula wants to vanish. The one who
* holds it should create an appropriate command and execute it.
*/
void removeFormula( FormulaCursor* );
void insertFormula( FormulaCursor* );
/**
* Calculates our width and height and
* our children's parentPosition.
*/
virtual void calcSizes( const ContextStyle& context,
ContextStyle::TextStyle tstyle,
ContextStyle::IndexStyle istyle,
StyleAttributes& style );
/**
* Draws the whole element including its children.
* The `parentOrigin' is the point this element's parent starts.
* We can use our parentPosition to get our own origin then.
*/
virtual void draw( TQPainter& painter, const LuPixelRect& r,
const ContextStyle& context,
ContextStyle::TextStyle tstyle,
ContextStyle::IndexStyle istyle,
StyleAttributes& style,
const LuPixelPoint& parentOrigin );
/**
* Calculates the formulas sizes and positions.
*/
void calcSizes( ContextStyle& context );
/**
* Draws the whole thing.
*/
void draw( TQPainter& painter, const LuPixelRect& r, ContextStyle& context );
/**
* This is called by the container to get a command depending on
* the current cursor position (this is how the element gets chosen)
* and the request.
*
* @returns the command that performs the requested action with
* the containers active cursor.
*/
virtual KCommand* buildCommand( Container*, Request* );
/**
* @returns our documents symbol table
*/
const SymbolTable& getSymbolTable() const;
/**
* @returns the latex representation of the element and
* of the element's children
*/
virtual TQString toLatex();
int getBaseSize() const { return baseSize; }
void setBaseSize( int size );
bool hasOwnBaseSize() const { return ownBaseSize; }
virtual KCommand* input( Container* container, TQKeyEvent* event );
virtual void writeMathML( TQDomDocument& doc, TQDomNode& parent, bool oasisFormat = false ) const ;
/**
* Appends our attributes to the dom element.
*/
virtual void writeDom(TQDomElement element);
/**
* For copy&paste we need to create an empty XML element.
*/
TQDomElement emptyFormulaElement( TQDomDocument& doc );
protected:
//Save/load support
/**
* Returns the tag name of this element type.
*/
virtual TQString getTagName() const { return "FORMULA"; }
/**
* Reads our attributes from the element.
* Returns false if it failed.
*/
virtual bool readAttributesFromDom(TQDomElement element);
/**
* Reads our content from the node. Sets the node to the next node
* that needs to be read.
* Returns false if it failed.
*/
virtual bool readContentFromDom(TQDomNode& node);
private:
/**
* The introduction of 'NameSequence' changed the DOM.
* However, we need to read the old version.
*/
void convertNames( TQDomNode node );
/**
* The document that owns (is) this formula.
*/
FormulaDocument* document;
/**
* The base font size.
*/
int baseSize;
/**
* Whether we want to use the default base size.
*/
bool ownBaseSize;
};
KFORMULA_NAMESPACE_END
#endif // FORMULAELEMENT_H