File indexing completed on 2024-05-12 16:29:03

0001 /*
0002  * This file is part of Office 2007 Filters for Calligra
0003  *
0004  * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
0005  *
0006  * Contact: Suresh Chande suresh.chande@nokia.com
0007  *
0008  * This library is free software; you can redistribute it and/or
0009  * modify it under the terms of the GNU Lesser General Public License
0010  * version 2.1 as published by the Free Software Foundation.
0011  *
0012  * This library is distributed in the hope that it will be useful, but
0013  * WITHOUT ANY WARRANTY; without even the implied warranty of
0014  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
0015  * Lesser General Public License for more details.
0016  *
0017  * You should have received a copy of the GNU Lesser General Public
0018  * License along with this library; if not, write to the Free Software
0019  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
0020  * 02110-1301 USA
0021  *
0022  */
0023 
0024 #ifndef COMPLEXSHAPEHANDLER_H
0025 #define COMPLEXSHAPEHANDLER_H
0026 
0027 #include "komsooxml_export.h"
0028 
0029 #include <QXmlStreamReader>
0030 #include <QString>
0031 
0032 // This class is meant to be used as a helper class to understand
0033 // drawingML elements avLst, gdLst and pathLst and to help
0034 // create a custom-shape from them
0035 class KOMSOOXML_EXPORT ComplexShapeHandler {
0036 
0037 public:
0038 
0039     // Set of default equations needed in order to support all variables which are possible in drawingML
0040     QString defaultEquations();
0041 
0042     // pathLst needs to sometimes create extra equations on the fly because arcTo is defined in a way
0043     // which is not compatible with odf. The equations created are returned by this function.
0044     QString pathEquationsCreated();
0045 
0046     // Handles avLst items and creates equations out of them
0047     QString handle_avLst(QXmlStreamReader* reader);
0048 
0049     // Handles gdLst items and creates equations out of them
0050     QString handle_gdLst(QXmlStreamReader* reader);
0051 
0052     // Handles rect item and creates coordinates for text-areas out of them
0053     QString handle_rect(QXmlStreamReader* reader);
0054 
0055     // Handles pathLst and creates a value which should be used for enhanced-path attribute
0056     // Note: remember to check pathEquationsCreated() after using this one
0057     QString handle_pathLst(QXmlStreamReader* reader);
0058 
0059 private:
0060 
0061     QString getArgument(QString& function, bool equation = false);
0062 
0063     QString createEquation(QString& function);
0064 
0065     QString handle_gd(QXmlStreamReader* reader);
0066 
0067     QString handle_lnTo(QXmlStreamReader* reader);
0068 
0069     QString handle_close(QXmlStreamReader* reader);
0070 
0071     QString handle_arcTo(QXmlStreamReader* reader);
0072 
0073     QString handle_quadBezTo(QXmlStreamReader* reader);
0074 
0075     QString handle_cubicBezTo(QXmlStreamReader* reader);
0076 
0077     QString handle_pt(QXmlStreamReader* reader);
0078 
0079     QString handle_path(QXmlStreamReader* reader);
0080 
0081     QString handle_moveTo(QXmlStreamReader* reader);
0082 
0083     // Storing the latest position where we are, this is needed in order to implement arcTo
0084     QString oldX, oldY;
0085 
0086     int pathWidth, pathHeight;
0087 
0088     int pathEquationIndex;
0089     QString pathEquations;
0090 };
0091 
0092 #endif