Scribus
Open source desktop publishing at your fingertips
wmfimport.h
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 /* Code inspired by KOffice libwmf and adapted for Scribus by Jean Ghali */
9 
10 #ifndef WMFIMPORT_H
11 #define WMFIMPORT_H
12 
13 #include <QtXml/QtXml>
14 
15 #include <QColor>
16 #include <QList>
17 #include <QSize>
18 #include "pluginapi.h"
19 #include "fpointarray.h"
20 #include "wmfcontext.h"
21 
22 class QBuffer;
23 class FPointArray;
24 class PageItem;
25 class ScribusDoc;
26 class Selection;
27 class PrefsManager;
29 
30 class WmfCmd;
31 class WmfObjHandle;
32 class WmfObjPenHandle;
33 class WmfObjBrushHandle;
34 struct WmfPlaceableHeader;
35 
36 class WMFImport : public QObject
37 {
38  Q_OBJECT
39 
40 public:
41 
42  WMFImport(ScribusDoc* doc, int flags);
43  ~WMFImport();
44 
45  bool import(QString fname, const TransactionSettings& trSettings, int flags);
46  QImage readThumbnail(QString fn);
47 
48  void wmfClosePath(FPointArray *i);
49  void wmfMoveTo(double x1, double y1);
50  void wmfLineTo(FPointArray *i, double x1, double y1);
51  void wmfCurveToCubic(FPointArray *i, double x1, double y1, double x2, double y2, double x3, double y3);
52 
53  bool interactive;
56  bool importFailed;
57  bool importCanceled;
58 
59  ScribusDoc* m_Doc;
60  Selection* m_tmpSel;
61  QStringList importedColors;
62 
63 protected:
64 
65  QString m_docDesc;
66  QString m_docTitle;
67 
68  WMFContext m_context;
69 
70  bool m_IsPlaceable, m_IsEnhanced, m_Valid;
71 
72  // coordinate system
73  QRect m_HeaderBoundingBox;
74  QRect m_BBox;
75 
76  QList<WmfCmd*> m_commands;
77  WmfObjHandle** m_ObjHandleTab;
78  FPointArray m_Points;
79  int m_Dpi;
80 
82  bool importWMF(const TransactionSettings& trSettings, int flags);
83  bool loadWMF( const QString &fileName );
84  bool loadWMF( QBuffer &buffer );
85 
86  QList<PageItem*> parseWmfCommands(void);
87 
88  void finishCmdParsing( PageItem* item );
89 
91  QString importColor(const QColor& color);
92 
94  QColor colorFromParam( short* params );
95 
97  QTextCodec* codecFromCharset( int charset );
98 
100  QString symbolToUnicode ( const QByteArray& chars );
101 
103  FPointArray pointsFromParam( short num, short* params );
104 
106  FPointArray pointsToPolyline( const FPointArray& points, bool closePath );
107 
108  void pointsToAngle( double xStart, double yStart, double xEnd, double yEnd, double& angleStart, double& angleLength );
109 
111  void addHandle( WmfObjHandle* );
112  void deleteHandle( int );
113 
115  unsigned short calcCheckSum( WmfPlaceableHeader* );
116 
119  virtual int findFunc( unsigned short aFunc ) const;
120 
122  unsigned int toDWord( short* params );
123 
124 public:
125 
127  void setWindowOrg( QList<PageItem*>& items, long num, short* params );
129  void setWindowExt( QList<PageItem*>& items, long num, short* params );
130 
131  /****************** Drawing *******************/
133  void lineTo( QList<PageItem*>& items, long num, short* params );
135  void moveTo( QList<PageItem*>& items, long num, short* params );
137  void ellipse( QList<PageItem*>& items, long num, short* params );
139  void polygon( QList<PageItem*>& items, long num, short* params );
141  void polyPolygon( QList<PageItem*>& items, long num, short* params );
143  void polyline( QList<PageItem*>& items, long num, short* params );
145  void rectangle( QList<PageItem*>& items, long num, short* params );
147  void roundRect( QList<PageItem*>& items, long num, short* params );
149  void arc( QList<PageItem*>& items, long num, short* params );
151  void chord( QList<PageItem*>& items, long num, short* params );
153  void pie( QList<PageItem*>& items, long num, short* params );
155  void setPolyFillMode( QList<PageItem*>& items, long num, short* params );
157  void setBkColor( QList<PageItem*>& items, long num, short* params );
159  void setBkMode( QList<PageItem*>& items, long num, short* params );
161  void saveDC( QList<PageItem*>& items, long num, short* params );
163  void restoreDC( QList<PageItem*>& items, long num, short* params );
165  void intersectClipRect( QList<PageItem*>& items, long num, short* params );
167  void excludeClipRect( QList<PageItem*>& items, long num, short* params );
168 
169  /****************** Text *******************/
171  void setTextColor( QList<PageItem*>& items, long num, short* params );
173  void setTextAlign( QList<PageItem*>& items, long num, short* params );
175  void textOut( QList<PageItem*>& items, long num, short* params );
176  void extTextOut( QList<PageItem*>& items, long num, short* params );
177 
178  /****************** Object handle *******************/
180  void selectObject( QList<PageItem*>& items, long num, short* params );
182  void deleteObject( QList<PageItem*>& items, long num, short* params );
184  void createEmptyObject( QList<PageItem*>& items, long num, short* params );
186  void createBrushIndirect( QList<PageItem*>& items, long num, short* params );
188  void createPenIndirect( QList<PageItem*>& items, long num, short* params );
190  void createFontIndirect( QList<PageItem*>& items, long num, short* params );
191 
192  /****************** misc *******************/
194  void noop( QList<PageItem*>& items, long , short* );
196  void end( QList<PageItem*>& items, long /*num*/, short* /*params*/ );
197 
198 };
199 
200 #endif
void roundRect(QList< PageItem * > &items, long num, short *params)
Definition: wmfimport.cpp:964
FPointArray pointsFromParam(short num, short *params)
Definition: wmfimport.cpp:262
void moveTo(QList< PageItem * > &items, long num, short *params)
Definition: wmfimport.cpp:826
Definition: wmfcmd.h:13
QTextCodec * codecFromCharset(int charset)
Definition: wmfimport.cpp:199
Definition: wmfhandle.h:29
void polygon(QList< PageItem * > &items, long num, short *params)
Definition: wmfimport.cpp:852
void polyPolygon(QList< PageItem * > &items, long num, short *params)
Definition: wmfimport.cpp:877
QColor colorFromParam(short *params)
Definition: wmfimport.cpp:186
void saveDC(QList< PageItem * > &items, long num, short *params)
Definition: wmfimport.cpp:1122
void setBkColor(QList< PageItem * > &items, long num, short *params)
Definition: wmfimport.cpp:1109
void createEmptyObject(QList< PageItem * > &items, long num, short *params)
Definition: wmfimport.cpp:1298
void end(QList< PageItem * > &items, long, short *)
Definition: wmfimport.cpp:1402
void addHandle(WmfObjHandle *)
Definition: wmfimport.cpp:1407
FPointArray pointsToPolyline(const FPointArray &points, bool closePath)
Definition: wmfimport.cpp:273
void textOut(QList< PageItem * > &items, long num, short *params)
Definition: wmfimport.cpp:1153
void createBrushIndirect(QList< PageItem * > &items, long num, short *params)
Definition: wmfimport.cpp:1306
void setTextColor(QList< PageItem * > &items, long num, short *params)
Definition: wmfimport.cpp:1143
void setTextAlign(QList< PageItem * > &items, long num, short *params)
Definition: wmfimport.cpp:1148
void createFontIndirect(QList< PageItem * > &items, long num, short *params)
Definition: wmfimport.cpp:1377
the Document Class
Definition: scribusdoc.h:90
void deleteObject(QList< PageItem * > &items, long num, short *params)
Definition: wmfimport.cpp:1293
virtual int findFunc(unsigned short aFunc) const
Definition: wmfimport.cpp:1444
void excludeClipRect(QList< PageItem * > &items, long num, short *params)
Definition: wmfimport.cpp:1138
void chord(QList< PageItem * > &items, long num, short *params)
Definition: wmfimport.cpp:1029
Definition: wmfstruct.h:86
void rectangle(QList< PageItem * > &items, long num, short *params)
Definition: wmfimport.cpp:940
bool unsupported
Indicator if there is any unsupported feature in imported wmf.
Definition: wmfimport.h:55
void arc(QList< PageItem * > &items, long num, short *params)
Definition: wmfimport.cpp:996
void pie(QList< PageItem * > &items, long num, short *params)
Definition: wmfimport.cpp:1066
void createPenIndirect(QList< PageItem * > &items, long num, short *params)
Definition: wmfimport.cpp:1355
void intersectClipRect(QList< PageItem * > &items, long num, short *params)
Definition: wmfimport.cpp:1133
Definition: wmfimport.h:36
void polyline(QList< PageItem * > &items, long num, short *params)
Definition: wmfimport.cpp:917
Definition: undomanager.h:52
void setWindowOrg(QList< PageItem * > &items, long num, short *params)
Definition: wmfimport.cpp:789
void selectObject(QList< PageItem * > &items, long num, short *params)
Definition: wmfimport.cpp:1286
Binary buffer.
Definition: pdbim.h:93
QString symbolToUnicode(const QByteArray &chars)
Definition: wmfimport.cpp:239
void lineTo(QList< PageItem * > &items, long num, short *params)
Definition: wmfimport.cpp:799
void ellipse(QList< PageItem * > &items, long num, short *params)
Definition: wmfimport.cpp:831
Definition: pageitem.h:92
unsigned short calcCheckSum(WmfPlaceableHeader *)
Definition: wmfimport.cpp:1429
void noop(QList< PageItem * > &items, long, short *)
Definition: wmfimport.cpp:1398
Definition: wmfcontext.h:55
Definition: fpointarray.h:42
Definition: wmfhandle.h:22
QString importColor(const QColor &color)
Definition: wmfimport.cpp:173
bool importWMF(const TransactionSettings &trSettings, int flags)
Definition: wmfimport.cpp:572
Definition: wmfhandle.h:15
void setWindowExt(QList< PageItem * > &items, long num, short *params)
Definition: wmfimport.cpp:794
void restoreDC(QList< PageItem * > &items, long num, short *params)
Definition: wmfimport.cpp:1127
void setBkMode(QList< PageItem * > &items, long num, short *params)
Definition: wmfimport.cpp:1114
unsigned int toDWord(short *params)
Definition: wmfimport.cpp:1455
Manage Scribus preferences here, and here alone Start to move the preferences out of scribus...
Definition: prefsmanager.h:43
void setPolyFillMode(QList< PageItem * > &items, long num, short *params)
Definition: wmfimport.cpp:1104
Definition: selection.h:34