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 /*************************************************************************** 8 ------------------- 9 begin : Sat Jan 14 2012 10 copyright : (C) 2012 by Franz Schmid 11 email : Franz.Schmid@altmuehlnet.de 12 ***************************************************************************/ 13 #ifndef IMPORTIDML_H 14 #define IMPORTIDML_H 15 16 #include "pluginapi.h" 17 #include "pageitem.h" 18 #include "sccolor.h" 19 #include "fpointarray.h" 20 #include <QList> 21 #include <QTransform> 22 #include <QMultiMap> 23 #include <QtGlobal> 24 #include <QObject> 25 #include <QString> 26 #include <QDomDocument> 27 #include <QDomElement> 28 29 #include "third_party/zip/scribus_zip.h" 30 31 class MultiProgressDialog; 32 class ScribusDoc; 33 class Selection; 34 class TransactionSettings; 35 36 //! \brief Idml importer plugin 37 class IdmlPlug : public QObject 38 { 39 Q_OBJECT 40 41 public: 42 /*! 43 \author Franz Schmid 44 \date 45 \brief Create the Idml importer window. 46 \param fName QString 47 \param flags combination of loadFlags 48 \param showProgress if progress must be displayed 49 \retval EPSPlug plugin 50 */ 51 IdmlPlug( ScribusDoc* doc, int flags ); 52 ~IdmlPlug(); 53 54 /*! 55 \author Franz Schmid 56 \date 57 \brief Perform import. 58 \param fn QString 59 \param trSettings undo transaction settings 60 \param flags combination of loadFlags 61 \param showProgress if progress must be displayed 62 \retval bool true if import was ok 63 */ 64 bool import(const QString& fn, const TransactionSettings& trSettings, int flags, bool showProgress = true); 65 QImage readThumbnail(const QString& fn); 66 bool readColors(const QString& fileName, ColorList & colors); 67 68 private: 69 struct ObjectStyle 70 { 71 QString parentStyle; 72 QString fillColor; 73 QString fillGradient; 74 QString strokeColor; 75 QString strokeGradient; 76 int fillTint; 77 int strokeTint; 78 double lineWidth; 79 double Opacity; 80 int blendMode; 81 QPointF gradientFillStart; 82 double gradientFillLength; 83 double gradientFillAngle; 84 QPointF gradientStrokeStart; 85 double gradientStrokeLength; 86 double gradientStrokeAngle; 87 double Extra; 88 double TExtra; 89 double BExtra; 90 double RExtra; 91 double TextColumnCount; 92 double TextColumnGutter; 93 double TextColumnFixedWidth; 94 PageItem::TextFlowMode TextFlow; 95 QString LeftLineEnd; 96 QString RightLineEnd; 97 }; 98 QString getNodeValue(QDomNode &baseNode, const QString& path); 99 bool convert(const QString& fn); 100 bool parseFontsXML(const QDomElement& grElem); 101 void parseFontsXMLNode(const QDomElement& grNode); 102 bool parseGraphicsXML(const QDomElement& grElem); 103 void parseGraphicsXMLNode(const QDomElement& grNode); 104 bool parseStylesXML(const QDomElement& sElem); 105 void parseStylesXMLNode(const QDomElement& sNode); 106 void parseObjectStyle(const QDomElement& styleElem); 107 void parseCharacterStyle(const QDomElement& styleElem); 108 void parseParagraphStyle(const QDomElement& styleElem); 109 bool parsePreferencesXML(const QDomElement& prElem); 110 void parsePreferencesXMLNode(const QDomElement& prNode); 111 bool parseSpreadXML(const QDomElement& spElem); 112 void parseSpreadXMLNode(const QDomElement& spNode); 113 QList<PageItem*> parseItemXML(const QDomElement& itElem, const QTransform& pTrans = QTransform()); 114 bool parseStoryXML(const QDomElement& stElem); 115 void parseStoryXMLNode(const QDomElement& stNode); 116 void parseParagraphStyleRange(QDomElement &ste, PageItem* item); 117 void parseCharacterStyleRange(QDomElement &stt, PageItem* item, QString fontBase, QString fontStyle, ParagraphStyle &newStyle, int posC); 118 void readCharStyleAttributes(CharStyle &newStyle, const QDomElement &styleElem); 119 void readParagraphStyleAttributes(ParagraphStyle &newStyle, const QDomElement &styleElem); 120 void resolveObjectStyle(ObjectStyle &nstyle, const QString& baseStyleName); 121 int convertBlendMode(const QString& blendName); 122 QString constructFontName(const QString& fontBaseName, const QString& fontStyle); 123 124 QList<PageItem*> Elements; 125 double baseX, baseY; 126 double docWidth; 127 double docHeight; 128 129 FPointArray Coords; 130 bool interactive; 131 MultiProgressDialog * progressDialog { nullptr }; 132 bool cancel; 133 ScribusDoc* m_Doc; 134 Selection* tmpSel; 135 int importerFlags; 136 QString baseFile; 137 bool firstLayer; 138 bool firstPage; 139 int pagecount; 140 int mpagecount; 141 bool facingPages; 142 QDomDocument designMapDom; 143 QStringList importedColors; 144 QMap<QString, QString> colorTranslate; 145 QStringList importedGradients; 146 QMap<QString, QString> gradientTranslate; 147 QMap<QString, int> gradientTypeMap; 148 QMap<QString, QString> layerTranslate; 149 QMap<QString, PageItem*> storyMap; 150 QMap<QString, QString> styleTranslate; 151 QMap<QString, QStringList> styleParents; 152 QMap<QString, QString> charStyleTranslate; 153 QMap<QString, QMap<QString, QString> > fontTranslateMap; 154 QMap<QString, QStringList> masterSpreads; 155 QString def_fillColor; 156 QString def_fillGradient; 157 QString def_strokeColor; 158 QString def_strokeGradient; 159 QString def_LeftLineEnd; 160 QString def_RightLineEnd; 161 int def_Blendmode; 162 int def_fillBlendmode; 163 int def_strokeBlendmode; 164 int def_fillTint; 165 int def_strokeTint; 166 double def_lineWidth; 167 double def_Opacity; 168 double def_fillOpacity; 169 double def_strokeOpacity; 170 double def_gradientAngle; 171 double def_gradientLen; 172 double def_gradientX; 173 double def_gradientY; 174 double def_gradientStrokeStartX; 175 double def_gradientStrokeStartY; 176 double def_gradientStrokeLength; 177 double def_gradientStrokeAngle; 178 double def_Extra; 179 double def_TExtra; 180 double def_BExtra; 181 double def_RExtra; 182 double def_TextColumnCount; 183 double def_TextColumnGutter; 184 double def_TextColumnFixedWidth; 185 PageItem::TextFlowMode def_TextFlow; 186 QMap<PageItem*, QString> frameLinks; 187 QMap<QString, PageItem*> frameTargets; 188 QMap<QString, ObjectStyle> ObjectStyles; 189 190 ScZipHandler *m_zip { nullptr }; 191 192 public slots: cancelRequested()193 void cancelRequested() { cancel = true; } 194 }; 195 196 #endif 197