summaryrefslogtreecommitdiffstats
path: root/lib/kformula/kformulamimesource.cc
diff options
context:
space:
mode:
Diffstat (limited to 'lib/kformula/kformulamimesource.cc')
-rw-r--r--lib/kformula/kformulamimesource.cc154
1 files changed, 154 insertions, 0 deletions
diff --git a/lib/kformula/kformulamimesource.cc b/lib/kformula/kformulamimesource.cc
new file mode 100644
index 00000000..a0438e5e
--- /dev/null
+++ b/lib/kformula/kformulamimesource.cc
@@ -0,0 +1,154 @@
+/* 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 <qpopupmenu.h>
+#include <qbuffer.h>
+#include <qcolor.h>
+#include <qimage.h>
+#include <qpainter.h>
+#include <qpixmap.h>
+
+#include <kcommand.h>
+
+#include "contextstyle.h"
+#include "formulacursor.h"
+#include "formulaelement.h"
+#include "kformuladocument.h"
+#include "kformulamimesource.h"
+
+KFORMULA_NAMESPACE_BEGIN
+using namespace std;
+
+
+MimeSource::MimeSource(Document* doc, const QDomDocument& formula)
+ : formulaDocument( doc ), document(formula)
+{
+ // The query for text/plain comes very often. So make sure
+ // it's fast.
+
+ rootElement = new FormulaElement(this);
+ FormulaCursor cursor(rootElement);
+
+ QPtrList<BasicElement> list;
+ list.setAutoDelete(true);
+ if ( cursor.buildElementsFromDom( document.documentElement(), list ) ) {
+ cursor.insert(list);
+ latexString = rootElement->toLatex().utf8();
+ if (latexString.size() > 0) {
+ latexString.truncate(latexString.size()-1);
+ }
+ }
+}
+
+MimeSource::~MimeSource()
+{
+ delete rootElement;
+}
+
+const char * MimeSource::selectionMimeType()
+{
+ return "application/x-kformula";
+}
+
+const char* MimeSource::format( int n ) const
+{
+ switch (n) {
+ case 0:
+ return selectionMimeType();
+ case 1:
+ return "image/ppm";
+ case 2:
+ return "text/plain";
+ case 3:
+ return "text/x-tex";
+ }
+ return NULL;
+}
+
+bool MimeSource::provides( const char * format) const
+{
+//This is not completed
+ if(QString(format)==selectionMimeType())
+ return true;
+ else if(QString(format)=="image/ppm")
+ return true;
+ else if(QString(format)=="text/plain")
+ return true;
+ else if(QString(format)=="text/x-tex")
+ return true;
+ else
+ return false;
+}
+
+QByteArray MimeSource::encodedData ( const char *format ) const
+{
+ QString fmt=format; //case sensitive?
+
+ if ((fmt=="text/plain") || (fmt=="text/x-tex"))
+ return latexString;
+
+ if (fmt==selectionMimeType()) {
+ QByteArray d=document.toCString();
+ d.truncate(d.size()-1);
+ return d;
+ }
+
+ if (fmt=="image/ppm") {
+
+ //cerr << "asking image" << endl;
+ ContextStyle& context = formulaDocument->getContextStyle( false );
+ //context.setResolution(5, 5);
+
+ rootElement->calcSizes(context);
+ QRect rect(rootElement->getX(), rootElement->getY(),
+ rootElement->getWidth(), rootElement->getHeight());
+
+ QPixmap pm( context.layoutUnitToPixelX( rootElement->getWidth() ),
+ context.layoutUnitToPixelY( rootElement->getHeight() ) );
+ pm.fill();
+ QPainter paint(&pm);
+ rootElement->draw(paint, rect, context);
+ paint.end();
+
+ QByteArray d;
+ QBuffer buff(d);
+ buff.open(IO_WriteOnly);
+ QImageIO io(&buff,"PPM");
+ QImage ima=pm.convertToImage();
+ ima.detach();
+ io.setImage(ima);
+ if(!io.write())
+ return QByteArray();
+
+ buff.close();
+ return d;
+ }
+
+ return QByteArray();
+}
+
+const SymbolTable& MimeSource::getSymbolTable() const
+{
+ return formulaDocument->getContextStyle( false ).symbolTable();
+}
+
+KFORMULA_NAMESPACE_END