1 /* 2 For general Scribus (>=1.3.2) copyright and licensing information please refer 3 to the COPYING file provided with the program. Following this notice may exist 4 a copyright and/or license notice that predates the release of Scribus 1.3.2 5 for which a new license (GPL+exception) is in place. 6 */ 7 #ifndef OODPLUG_H 8 #define OODPLUG_H 9 10 #include "pluginapi.h" 11 #include "loadsaveplugin.h" 12 #include "../../formatidlist.h" 13 #include "stylestack.h" 14 #include "scribusstructs.h" 15 16 class PageItem; 17 class ScrAction; 18 class ScribusDoc; 19 class Selection; 20 class TransactionSettings; 21 22 class PLUGIN_API OODrawImportPlugin : public LoadSavePlugin 23 { 24 Q_OBJECT 25 26 public: 27 // Standard plugin implementation 28 OODrawImportPlugin(); 29 virtual ~OODrawImportPlugin(); 30 QString fullTrName() const override; 31 const AboutData* getAboutData() const override; 32 void deleteAboutData(const AboutData* about) const override; 33 void languageChange() override; 34 bool fileSupported(QIODevice* file, const QString & fileName=QString()) const override; 35 bool loadFile(const QString & fileName, const FileFormat & fmt, int flags, int index = 0) override; 36 QImage readThumbnail(const QString& fileName) override; addToMainWindowMenu(ScribusMainWindow *)37 void addToMainWindowMenu(ScribusMainWindow *) override {}; 38 39 // Special features - File->Import slot 40 public slots: 41 virtual bool import(QString target = QString(), int flags = lfUseCurrentPage|lfInteractive); 42 43 private: 44 void registerFormats(); 45 ScrAction* importAction; 46 }; 47 48 extern "C" PLUGIN_API int oodrawimp_getPluginAPIVersion(); 49 extern "C" PLUGIN_API ScPlugin* oodrawimp_getPlugin(); 50 extern "C" PLUGIN_API void oodrawimp_freePlugin(ScPlugin* plugin); 51 52 class QWidget; 53 class ScribusMainWindow; 54 class ScribusDoc; 55 class FPointArray; 56 class QDomDocument; 57 class QDomElement; 58 59 class OODrawStyle 60 { 61 public: OODrawStyle()62 OODrawStyle() : 63 fillColor("None"), 64 strokeColor("None"), 65 fillTrans(0.0), 66 strokeTrans(0.0), 67 strokeWidth(0.0), 68 haveGradient(false), 69 gradientType(0), 70 gradientAngle(0.0), 71 gradientPointX(0.0), 72 gradientPointY(0.0) 73 {} 74 QString fillColor; 75 QString strokeColor; 76 double fillTrans; 77 double strokeTrans; 78 double strokeWidth; 79 QVector<double> dashes; 80 bool haveGradient; 81 int gradientType; 82 VGradient gradient; 83 double gradientAngle; 84 double gradientPointX; 85 double gradientPointY; 86 }; 87 88 class OODPlug : public QObject 89 { 90 Q_OBJECT 91 92 public: 93 94 OODPlug(ScribusDoc* doc); 95 ~OODPlug(); 96 97 //! \brief Indicator if there is any unsupported feature in imported svg. 98 bool unsupported; 99 bool importFailed; 100 bool importCanceled; 101 bool import(const QString& fName, const TransactionSettings& trSettings, int flags); 102 QImage readThumbnail(const QString& fileName ); 103 static double parseUnit(const QString &unit); 104 105 protected: 106 107 bool convert(const TransactionSettings& trSettings, int flags); 108 QList<PageItem*> parseGroup(const QDomElement &e); 109 QList<PageItem*> parseElement(const QDomElement &e); 110 QList<PageItem*> parseRect(const QDomElement &e); 111 QList<PageItem*> parseEllipse(const QDomElement &e); 112 QList<PageItem*> parseLine(const QDomElement &e); 113 QList<PageItem*> parsePolygon(const QDomElement &e); 114 QList<PageItem*> parsePolyline(const QDomElement &e); 115 QList<PageItem*> parsePath(const QDomElement &e); 116 QList<PageItem*> parseTextBox(const QDomElement &e); 117 QList<PageItem*> parseFrame(const QDomElement &e); 118 QList<PageItem*> parseConnector(const QDomElement &e); 119 void parseStyle(OODrawStyle& style, const QDomElement &e); 120 void parseCharStyle(CharStyle& style, const QDomElement &e); 121 void parseParagraphStyle(ParagraphStyle& style, const QDomElement &e); 122 PageItem* parseTextP(const QDomElement& e, PageItem* item); 123 PageItem* parseTextSpans(const QDomElement& elm, PageItem* item); 124 PageItem* finishNodeParsing(const QDomElement &elm, PageItem* item, OODrawStyle& oostyle); 125 void createStyleMap( QDomDocument &docstyles ); 126 void insertDraws( const QDomElement& styles ); 127 void insertStyles( const QDomElement& styles ); 128 void fillStyleStack( const QDomElement& object ); 129 void addStyles( const QDomElement* style ); 130 void storeObjectStyles( const QDomElement& object ); 131 QString parseColor( const QString &s ); 132 void parseTransform(FPointArray *composite, const QString &transform); 133 void parseViewBox( const QDomElement& object, double *x, double *y, double *w, double *h ); 134 void appendPoints(FPointArray *composite, const QDomElement& object, bool closePath); 135 const char * getCoord( const char *ptr, double &number ); 136 bool parseSVG( const QString &s, FPointArray *ite ); 137 void calculateArc(FPointArray *ite, bool relative, double &curx, double &cury, double angle, double x, double y, double r1, double r2, bool largeArcFlag, bool sweepFlag); 138 void svgClosePath(FPointArray *i); 139 void svgMoveTo(double x1, double y1); 140 void svgLineTo(FPointArray *i, double x1, double y1); 141 void svgCurveToCubic(FPointArray *i, double x1, double y1, double x2, double y2, double x3, double y3); 142 143 QDomDocument inpContents; 144 QDomDocument inpStyles; 145 QDomDocument inpMeta; 146 QHash<QString,QDomElement*> m_styles, m_draws; 147 StyleStack m_styleStack; 148 double CurrX, CurrY, StartX, StartY; 149 int PathLen; 150 bool FirstM, WasM, PathClosed, HaveMeta; 151 152 bool interactive; 153 ScribusDoc* m_Doc; 154 Selection* tmpSel; 155 QStringList importedColors; 156 }; 157 158 #endif 159