summaryrefslogtreecommitdiffstats
path: root/lib/kformula/formulaelement.cpp
diff options
context:
space:
mode:
authorMichele Calgaro <michele.calgaro@yahoo.it>2021-05-23 20:48:35 +0900
committerMichele Calgaro <michele.calgaro@yahoo.it>2021-05-29 15:17:38 +0900
commitd63c9d696eb6e2539528b99afc21f4086c9defe3 (patch)
treeb3bfc97a66431a12cdd8f9379c0072673ede43df /lib/kformula/formulaelement.cpp
parent5363fe3c36504c37bdc6dcfafd5f71daeae251e8 (diff)
downloadkoffice-d63c9d696eb6e2539528b99afc21f4086c9defe3.tar.gz
koffice-d63c9d696eb6e2539528b99afc21f4086c9defe3.zip
Renaming of files in preparation for code style tools.
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it> (cherry picked from commit 8b78a8791bc539bcffe7159f9d9714d577cb3d7d)
Diffstat (limited to 'lib/kformula/formulaelement.cpp')
-rw-r--r--lib/kformula/formulaelement.cpp336
1 files changed, 336 insertions, 0 deletions
diff --git a/lib/kformula/formulaelement.cpp b/lib/kformula/formulaelement.cpp
new file mode 100644
index 00000000..946e595d
--- /dev/null
+++ b/lib/kformula/formulaelement.cpp
@@ -0,0 +1,336 @@
+/* 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.
+*/
+
+#include <iostream>
+#include <tqpainter.h>
+
+#include <kdebug.h>
+
+#include "contextstyle.h"
+#include "formulacursor.h"
+#include "formulaelement.h"
+#include "kformulacontainer.h"
+#include "kformuladocument.h"
+
+KFORMULA_NAMESPACE_BEGIN
+
+FormulaElement::FormulaElement(FormulaDocument* container)
+ : document( container ), baseSize( 20 ), ownBaseSize( false )
+{
+}
+
+
+void FormulaElement::setBaseSize( int size )
+{
+ if ( size > 0 ) {
+ baseSize = size;
+ ownBaseSize = true;
+ }
+ else {
+ ownBaseSize = false;
+ }
+ document->baseSizeChanged( size, ownBaseSize );
+}
+
+
+/**
+ * Returns the element the point is in.
+ */
+BasicElement* FormulaElement::goToPos( FormulaCursor* cursor, const LuPixelPoint& point )
+{
+ bool handled = false;
+ BasicElement* element = inherited::goToPos(cursor, handled, point, LuPixelPoint());
+ if (element == 0) {
+ //if ((point.x() > getWidth()) || (point.y() > getHeight())) {
+ cursor->setTo(this, countChildren());
+ //}
+ return this;
+ }
+ return element;
+}
+
+void FormulaElement::elementRemoval(BasicElement* child)
+{
+ document->elementRemoval(child);
+}
+
+void FormulaElement::changed()
+{
+ document->changed();
+}
+
+void FormulaElement::cursorHasMoved( FormulaCursor* cursor )
+{
+ document->cursorHasMoved( cursor );
+}
+
+void FormulaElement::moveOutLeft( FormulaCursor* cursor )
+{
+ document->moveOutLeft( cursor );
+}
+
+void FormulaElement::moveOutRight( FormulaCursor* cursor )
+{
+ document->moveOutRight( cursor );
+}
+
+void FormulaElement::moveOutBelow( FormulaCursor* cursor )
+{
+ document->moveOutBelow( cursor );
+}
+
+void FormulaElement::moveOutAbove( FormulaCursor* cursor )
+{
+ document->moveOutAbove( cursor );
+}
+
+void FormulaElement::tell( const TQString& msg )
+{
+ document->tell( msg );
+}
+
+void FormulaElement::removeFormula( FormulaCursor* cursor )
+{
+ document->removeFormula( cursor );
+}
+
+void FormulaElement::insertFormula( FormulaCursor* cursor )
+{
+ document->insertFormula( cursor );
+}
+
+void FormulaElement::calcSizes( const ContextStyle& context,
+ ContextStyle::TextStyle tstyle,
+ ContextStyle::IndexStyle istyle,
+ StyleAttributes& style )
+{
+ inherited::calcSizes( context, tstyle, istyle, style );
+}
+
+
+void FormulaElement::draw( TQPainter& painter, const LuPixelRect& r,
+ const ContextStyle& context,
+ ContextStyle::TextStyle tstyle,
+ ContextStyle::IndexStyle istyle,
+ StyleAttributes& style,
+ const LuPixelPoint& parentOrigin )
+{
+ inherited::draw( painter, r, context, tstyle, istyle, style, parentOrigin );
+}
+
+
+/**
+ * Calculates the formulas sizes and positions.
+ */
+void FormulaElement::calcSizes( ContextStyle& context )
+{
+ //kdDebug( DEBUGID ) << "FormulaElement::calcSizes" << endl;
+ if ( ownBaseSize ) {
+ context.setSizeFactor( static_cast<double>( getBaseSize() )/context.baseSize() );
+ }
+ else {
+ context.setSizeFactor( 1 );
+ }
+ StyleAttributes style;
+ calcSizes( context, context.getBaseTextStyle(), ContextStyle::normal, style );
+}
+
+/**
+ * Draws the whole thing.
+ */
+void FormulaElement::draw( TQPainter& painter, const LuPixelRect& r,
+ ContextStyle& context )
+{
+ //kdDebug( DEBUGID ) << "FormulaElement::draw" << endl;
+ if ( ownBaseSize ) {
+ context.setSizeFactor( static_cast<double>( getBaseSize() )/context.baseSize() );
+ }
+ else {
+ context.setSizeFactor( 1 );
+ }
+ StyleAttributes style;
+ draw( painter, r, context, context.getBaseTextStyle(),
+ ContextStyle::normal, style, LuPixelPoint() );
+}
+
+KCommand* FormulaElement::buildCommand( Container* container, Request* request )
+{
+ switch ( *request ) {
+ case req_compactExpression:
+ return 0;
+ default:
+ break;
+ }
+ return inherited::buildCommand( container, request );
+}
+
+const SymbolTable& FormulaElement::getSymbolTable() const
+{
+ return document->getSymbolTable();
+}
+
+
+TQDomElement FormulaElement::emptyFormulaElement( TQDomDocument& doc )
+{
+ TQDomElement element = doc.createElement( getTagName() );
+ /*
+ element.setAttribute( "VERSION", "6" );
+ if ( ownBaseSize ) {
+ element.setAttribute( "BASESIZE", baseSize );
+ }
+ */
+ return element;
+}
+
+KCommand* FormulaElement::input( Container* container, TQKeyEvent* event )
+{
+ TQChar ch = event->text().at( 0 );
+ if ( !ch.isPrint() ) {
+ int action = event->key();
+ //int state = event->state();
+ //MoveFlag flag = movementFlag(state);
+
+ switch ( action ) {
+ case TQt::Key_Return:
+ case TQt::Key_Enter: {
+ FormulaCursor* cursor = container->activeCursor();
+ insertFormula( cursor );
+ return 0;
+ }
+ }
+ }
+ return inherited::input( container, event );
+}
+
+/**
+ * Appends our attributes to the dom element.
+ */
+void FormulaElement::writeDom(TQDomElement element)
+{
+ inherited::writeDom(element);
+ element.setAttribute( "VERSION", "6" );
+ if ( ownBaseSize ) {
+ element.setAttribute( "BASESIZE", baseSize );
+ }
+}
+
+/**
+ * Reads our attributes from the element.
+ * Returns false if it failed.
+ */
+bool FormulaElement::readAttributesFromDom(TQDomElement element)
+{
+ if (!inherited::readAttributesFromDom(element)) {
+ return false;
+ }
+ int version = -1;
+ TQString versionStr = element.attribute( "VERSION" );
+ if ( !versionStr.isNull() ) {
+ version = versionStr.toInt();
+ }
+ if ( version > -1 ) {
+ // Version 6 added the MultilineElement (TabMarker)
+ // Version 5 added under- and overlines
+ if ( version < 4 ) {
+ convertNames( element );
+ }
+ }
+ TQString baseSizeStr = element.attribute( "BASESIZE" );
+ if ( !baseSizeStr.isNull() ) {
+ ownBaseSize = true;
+ baseSize = baseSizeStr.toInt();
+ }
+ else {
+ ownBaseSize = false;
+ }
+ return true;
+}
+
+/**
+ * Reads our content from the node. Sets the node to the next node
+ * that needs to be read.
+ * Returns false if it failed.
+ */
+bool FormulaElement::readContentFromDom(TQDomNode& node)
+{
+ return inherited::readContentFromDom(node);
+}
+
+void FormulaElement::convertNames( TQDomNode node )
+{
+ if ( node.isElement() && ( node.nodeName().upper() == "TEXT" ) ) {
+ TQDomNamedNodeMap attr = node.attributes();
+ TQDomAttr ch = attr.namedItem( "CHAR" ).toAttr();
+ if ( ch.value() == "\\" ) {
+ TQDomNode sequence = node.parentNode();
+ TQDomDocument doc = sequence.ownerDocument();
+ TQDomElement nameseq = doc.createElement( "NAMESEQUENCE" );
+ sequence.replaceChild( nameseq, node );
+
+ bool inName = true;
+ while ( inName ) {
+ inName = false;
+ TQDomNode n = nameseq.nextSibling();
+ if ( n.isElement() && ( n.nodeName().upper() == "TEXT" ) ) {
+ attr = n.attributes();
+ ch = attr.namedItem( "CHAR" ).toAttr();
+ if ( ch.value().at( 0 ).isLetter() ) {
+ nameseq.appendChild( sequence.removeChild( n ) );
+ inName = true;
+ }
+ }
+ }
+ }
+ }
+ if ( node.hasChildNodes() ) {
+ TQDomNode n = node.firstChild();
+ while ( !n.isNull() ) {
+ convertNames( n );
+ n = n.nextSibling();
+ }
+ }
+}
+
+TQString FormulaElement::toLatex()
+{
+ return inherited::toLatex(); //Consider $$ sorround
+}
+
+void FormulaElement::writeMathML( TQDomDocument& doc, TQDomNode& parent, bool oasisFormat ) const
+{
+ TQDomElement de;
+ if ( !oasisFormat ) {
+ de = doc.createElementNS( "http://www.w3.org/1998/Math/MathML",
+ "math" );
+ parent.appendChild( de );
+ }
+ else {
+ TQDomElement element = doc.createElement( "math:semantics" );
+ de = doc.createElement( "math:mrow" );
+ parent.appendChild( element );
+ element.appendChild( de );
+ }
+ for ( uint i = 0; i < countChildren(); ++i ) {
+ const BasicElement* e = getChild( i );
+ e->writeMathML( doc, de, oasisFormat );
+ }
+}
+
+KFORMULA_NAMESPACE_END