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                : Sun Sep 29 2013
10 	copyright            : (C) 2013 by Franz Schmid
11 	email                : Franz.Schmid@altmuehlnet.de
12  ***************************************************************************/
13 #ifndef IMPORTVIVA_H
14 #define IMPORTVIVA_H
15 
16 #include "pluginapi.h"
17 #include "pageitem.h"
18 #include "sccolor.h"
19 #include "sctextstruct.h"
20 #include "text/storytext.h"
21 #include "fpointarray.h"
22 #include "scribusstructs.h"
23 #include <QList>
24 #include <QTransform>
25 #include <QMultiMap>
26 #include <QtGlobal>
27 #include <QObject>
28 #include <QString>
29 #include <QDomDocument>
30 #include <QDomElement>
31 
32 class MultiProgressDialog;
33 class ScribusDoc;
34 class Selection;
35 class TransactionSettings;
36 
37 //! \brief Viva importer plugin
38 class VivaPlug : public QObject
39 {
40 	Q_OBJECT
41 
42 public:
43 	/*!
44 	\author Franz Schmid
45 	\date
46 	\brief Create the Viva importer window.
47 	\param fName QString
48 	\param flags combination of loadFlags
49 	\param showProgress if progress must be displayed
50 	\retval EPSPlug plugin
51 	*/
52 	VivaPlug( ScribusDoc* doc, int flags );
53 	~VivaPlug();
54 
55 	/*!
56 	\author Franz Schmid
57 	\date
58 	\brief Perform import.
59 	\param fn QString
60 	\param trSettings undo transaction settings
61 	\param flags combination of loadFlags
62 	\param showProgress if progress must be displayed
63 	\retval bool true if import was ok
64 	 */
65 	bool import(const QString& fn, const TransactionSettings& trSettings, int flags, bool showProgress = true);
66 	QImage readThumbnail(const QString& fn);
67 	bool readColors(const QString& fileName, ColorList & colors);
68 
69 private:
70 	struct triplePoint
71 	{
72 		FPoint beforePolyPoint;
73 		FPoint PolyPoint;
74 		FPoint afterPolyPoint;
75 	};
76 
77 	struct AttributeSet
78 	{
79 		AttributeValue applyedParStyle;
80 		AttributeValue parentStyle;
81 		// Character Attributes
82 		AttributeValue fontFullName;
83 		AttributeValue fontFamily;
84 		AttributeValue fontStyle;
85 		AttributeValue fontSize;
86 		AttributeValue fontColor;
87 		AttributeValue fontColorDensity;
88 		AttributeValue fontEffect;
89 		AttributeValue placement;
90 		AttributeValue underline;
91 		AttributeValue underlineWidth;
92 		AttributeValue underlineOffset;
93 		AttributeValue strikethrough;
94 		AttributeValue strikethroughWidth;
95 		AttributeValue strikethroughOffset;
96 		AttributeValue outline;
97 		AttributeValue outlineWidth;
98 		AttributeValue outlineColor;
99 		AttributeValue widthScale;
100 		AttributeValue heightScale;
101 		AttributeValue spacing;
102 		AttributeValue baselineOffset;
103 		// Paragraph Attributes
104 		AttributeValue justification;
105 		AttributeValue gapbefore;
106 		AttributeValue gapafter;
107 		AttributeValue lineSpacing;
108 		AttributeValue indent;
109 		AttributeValue firstLineIndent;
110 		AttributeValue rightIndent;
111 		AttributeValue columnCount;
112 		AttributeValue columnGutter;
113 		AttributeValue dropCaps;
114 		AttributeValue dropCapsLines;
115 		AttributeValue dropCapsDist;
116 		AttributeValue tabulators;
117 	};
118 	double parseUnit(const QString &unit);
119 	bool convert(const QString& fn);
120 	void parseSettingsXML(const QDomElement& grNode);
121 	void parseColorsXML(const QDomElement& grNode);
122 	void parsePreferencesXML(const QDomElement& spNode);
123 	void parseLayerXML(const QDomElement& spNode);
124 	void parseMasterSpreadXML(const QDomElement& spNode);
125 	void parseSpreadXML(const QDomElement& spElem);
126 	void parseTextChainsXML(const QDomElement& obNode);
127 	PageItem* parseObjectXML(const QDomElement& obNode);
128 	PageItem *parseObjectDetailsXML(const QDomElement& obNode, int baseType);
129 	void parseTextXML(const QDomElement& obNode, StoryText &itemText, int &textColumnCount, double &textColumnGap);
130 	void parseAttributeSetXML(const QDomElement& obNode, AttributeSet &attrs);
131 	void parseAttributeSetsXML(const QDomElement& obNode);
132 	void parseStylesheetsXML(const QDomElement& obNode);
133 	void applyParagraphAttrs(ParagraphStyle &newStyle, AttributeSet &pAttrs);
134 	void applyCharacterAttrs(CharStyle &tmpCStyle, ParagraphStyle &newStyle, AttributeSet &pAttrs);
135 	QString constructFontName(const QString& fontBaseName, const QString& fontStyle);
136 	QPointF intersectBoundingRect(PageItem *item, QLineF gradientVector);
137 
138 	QList<PageItem*> Elements;
139 	double baseX, baseY;
140 	double docWidth;
141 	double docHeight;
142 	bool facingPages;
143 	bool hasLayers;
144 	bool firstLayer;
145 	bool firstPage;
146 	int pagecount;
147 	int mpagecount;
148 	QMap<QString, int> mspreadTypes;
149 	FPointArray Coords;
150 	bool interactive;
151 	MultiProgressDialog * progressDialog;
152 	bool cancel;
153 	ScribusDoc* m_Doc;
154 	Selection* tmpSel;
155 	int importerFlags;
156 	QString baseFile;
157 	QDomDocument designMapDom;
158 	QStringList importedColors;
159 	double topMargin;
160 	double leftMargin;
161 	double rightMargin;
162 	double bottomMargin;
163 	QString papersize;
164 	QHash<QString, AttributeSet> AttributeSets;
165 	QHash<QString, QString> colorTranslate;
166 	QStringList importedGradients;
167 	QMap<QString, QString> gradientTranslate;
168 	QMap<QString, int> gradientTypeMap;
169 	QMap<QString, PageItem*> storyMap;
170 
171 public slots:
cancelRequested()172 	void cancelRequested() { cancel = true; }
173 };
174 
175 #endif
176