Subversion Repositories Scribus

Rev

Rev 1381 | Rev 1385 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
3 paul 1
/***************************************************************************
2
                          pageitem.h  -  description
3
                             -------------------
4
    begin                : Sat Apr 7 2001
5
    copyright            : (C) 2001 by Franz Schmid
6
    email                : Franz.Schmid@altmuehlnet.de
7
 ***************************************************************************/
8
 
9
/***************************************************************************
10
 *                                                                         *
11
 *   This program is free software; you can redistribute it and/or modify  *
12
 *   it under the terms of the GNU General Public License as published by  *
13
 *   the Free Software Foundation; either version 2 of the License, or     *
14
 *   (at your option) any later version.                                   *
15
 *                                                                         *
16
 ***************************************************************************/
17
 
18
#ifndef PAGEITEM_H
19
#define PAGEITEM_H
20
 
21
#include <qobject.h>
22
#include <qwidget.h>
23
#include <qpointarray.h>
24
#include <qptrlist.h>
25
#include <qimage.h>
26
#include <qpixmap.h>
27
#include <qvaluestack.h>
28
#include <qvaluelist.h>
68 Franz 29
#include "scpainter.h"
1204 tsoots 30
#include "undoobject.h"
838 cbradney 31
class ScribusDoc;
1204 tsoots 32
class UndoManager;
33
class UndoState;
3 paul 34
/**
35
  *@author Franz Schmid
36
  */
37
 
1204 tsoots 38
class PageItem : public QObject, public UndoObject
270 Franz 39
{
40
        Q_OBJECT
1364 tsoots 41
        // Properties - see http://doc.trolltech.com/3.3/properties.html
1381 cbradney 42
        // See the getters and setters of these properties for details on their use.
1364 tsoots 43
        Q_PROPERTY(QString itemName READ itemName WRITE setItemName DESIGNABLE false)
1381 cbradney 44
        Q_PROPERTY(QString fillColor READ fillColor WRITE setFillColor DESIGNABLE false)
45
        Q_PROPERTY(int fillShade READ fillShade WRITE setFillShade DESIGNABLE false)
46
        Q_PROPERTY(double fillTransparency READ fillTransparency WRITE setFillTransparency DESIGNABLE false)
47
        Q_PROPERTY(QString lineColor READ lineColor WRITE setLineColor DESIGNABLE false)
48
        Q_PROPERTY(int lineShade READ lineShade WRITE setLineShade DESIGNABLE false)
49
        Q_PROPERTY(double lineTransparency READ lineTransparency WRITE setLineTransparency DESIGNABLE false)
50
        Q_PROPERTY(bool locked READ locked WRITE setLocked DESIGNABLE false)
51
        Q_PROPERTY(bool sizeLocked READ sizeLocked WRITE setSizeLocked DESIGNABLE false)
3 paul 52
public:
456 fschmid 53
        PageItem(ScribusDoc *pa, int art, double x, double y, double w, double h, double w2, QString fill, QString outline);
3 paul 54
        ~PageItem() {};
168 Franz 55
        struct ZZ {
56
                                double xco;
57
                                double yco;
268 Franz 58
                                double wide;
59
                                double kern;
168 Franz 60
                                int Siz;
61
                                int Style;
62
                                int scale;
268 Franz 63
                                int shade;
64
                                int shade2;
65
                                bool Sele;
66
                                QString Zeich;
67
                                QString Farb;
68
                                QString Farb2;
69
                                QString ZFo;
168 Franz 70
                          };
3 paul 71
  /** Zeichnet das Item */
168 Franz 72
        void paintObj(QRect e=QRect(), QPixmap *ppX = 0);
73
        void DrawObj(ScPainter *p, QRect e);
1065 cbradney 74
        double SetZeichAttr(struct ScText *hl, int *chs, QString *chx);
3 paul 75
        void SetFarbe(QColor *tmp, QString farbe, int shad);
68 Franz 76
        void DrawZeichenS(ScPainter *p, struct ZZ *hl);
3 paul 77
        void DrawPolyL(QPainter *p, QPointArray pts);
78
        QString ExpandToken(uint base);
79
        bool Locked;
205 Franz 80
        bool LockRes;
3 paul 81
        bool Reverse;
82
  /** X-Position auf der Seite */
168 Franz 83
        double Xpos;
1204 tsoots 84
        /** @brief Stores the old X-position for undo action. Is used to detect move actions.*/
85
        double oldXpos;
3 paul 86
  /** Y-Position auf der Seite */
168 Franz 87
        double Ypos;
1204 tsoots 88
        /** @brief Stores the old Y-position for undo action. Is used to detect move actions. */
89
        double oldYpos;
3 paul 90
  /** Breite des Elements */
168 Franz 91
        double Width;
1206 tsoots 92
        /** @brief Stores the old width for undo action. Is used to detect resize actions. */
93
        double oldWidth;
3 paul 94
  /** Hoehe des Elements */
168 Franz 95
        double Height;
1206 tsoots 96
        /** @brief Stores the old height for undo action. Is used to detect resize actions. */
97
        double oldHeight;
3 paul 98
  /** Eckrundung von Rechtecken */
168 Franz 99
        double RadRect;
3 paul 100
  /** Art des Items */
168 Franz 101
        int PType;
3 paul 102
  /** Winkel um den das Item gedreht wird */
168 Franz 103
        double Rot;
1211 tsoots 104
        /** @brief Stores the old rotation value for undo action. Is used to detect rotation actions. */
105
        double oldRot;
3 paul 106
  /** Enthaelt das Dokument */
168 Franz 107
        ScribusDoc *Doc;
3 paul 108
        int GrType;
292 Franz 109
        double GrStartX;
110
        double GrStartY;
111
        double GrEndX;
112
        double GrEndY;
3 paul 113
  /** Fuellfarbe */
168 Franz 114
        QString Pcolor;
115
  /** Abstufung fuer Fllfarbe */
116
        int Shade;
3 paul 117
  /** Zeichenfarbe fuer Elemente */
168 Franz 118
        QString Pcolor2;
3 paul 119
  /** Abstufung fuer Zeichenfarbe */
168 Franz 120
        int Shade2;
68 Franz 121
        QString TxtStroke;
122
        QString TxtFill;
123
        int ShTxtStroke;
124
        int ShTxtFill;
125
        int TxtScale;
126
        int TxTStyle;
134 Franz 127
        int Cols;
135 Franz 128
        double ColGap;
3 paul 129
  /** Strichstaerke */
168 Franz 130
        double Pwidth;
263 Franz 131
        double OldPwidth;
3 paul 132
  /** Linienart */
168 Franz 133
        PenStyle PLineArt;
134
        PenCapStyle PLineEnd;
135
        PenJoinStyle PLineJoin;
27 Franz 136
        QString NamedLStyle;
3 paul 137
  /** Element selektiert Ja/Nein */
168 Franz 138
        bool Select;
3 paul 139
  /** Definiert die Clipping-Region des Elements; */
168 Franz 140
        QPointArray Clip;
3 paul 141
        FPointArray PoLine;
340 Franz 142
        bool UseContour;
143
        FPointArray ContourLine;
3 paul 144
        QValueList<uint> Segments;
145
        bool PoShow;
80 Franz 146
        double BaseOffs;
168 Franz 147
        bool ClipEdited;
148
        int FrameType;
3 paul 149
  /** Interne Item-Nummer */
168 Franz 150
        uint ItemNr;
3 paul 151
  /** Hat Element Rahmen? */
168 Franz 152
        bool Frame;
3 paul 153
  /** Seite zu der das Element gehoert */
456 fschmid 154
        int OwnPage;
1211 tsoots 155
        /** @brief Old page number tracked for the move undo action */
156
        int oldOwnPage;
3 paul 157
  /** Darzustellendes Bild */
168 Franz 158
        QImage pixm;
204 Franz 159
        QImage pixmOrg;
3 paul 160
  /** Dateiname des Bildes */
168 Franz 161
        QString Pfile;
162
        QString Pfile2;
163
        QString Pfile3;
164
        QString IProfile;
165
        bool UseEmbedded;
166
        QString EmProfile;
167
        int IRender;
3 paul 168
  /** Darstellungsart Bild/Titel */
168 Franz 169
        bool PicArt;
3 paul 170
  /** Bild verfuegbar */
168 Franz 171
        bool PicAvail;
3 paul 172
  /** Lokales Scaling x*/
168 Franz 173
        double LocalScX;
80 Franz 174
        double LocalViewX;
3 paul 175
  /** Lokales Scaling y*/
168 Franz 176
        double LocalScY;
80 Franz 177
        double LocalViewY;
3 paul 178
  /** Lokales X */
168 Franz 179
        double LocalX;
3 paul 180
  /** Lokales Y */
168 Franz 181
        double LocalY;
3 paul 182
        int OrigW;
183
        int OrigH;
127 Franz 184
        double dpiX;
185
        double dpiY;
3 paul 186
  /** Anzahl horizontaler Spiegelungen */
168 Franz 187
        int flippedH;
3 paul 188
  /** Anzahl vertikaler Spiegelungen */
168 Franz 189
        int flippedV;
3 paul 190
  /** BoundigBox-X */
168 Franz 191
        double BBoxX;
3 paul 192
  /** BoundingBox-H */
168 Franz 193
        double BBoxH;
3 paul 194
  /** Extra Abstand vom Rand */
168 Franz 195
        double Extra;
196
        double TExtra;
197
        double BExtra;
198
        double RExtra;
3 paul 199
  /** Linespacing */
168 Franz 200
        double LineSp;
3 paul 201
  /** Zeichen X-Position */
168 Franz 202
        double CurX;
3 paul 203
  /** Zeichen Y-Position */
168 Franz 204
        double CurY;
3 paul 205
  /** Cursorposition */
168 Franz 206
        int CPos;
3 paul 207
  /** Text des Elements */
1065 cbradney 208
        QPtrList<ScText> itemText;
3 paul 209
  /** Flag ob Element gedruckt wird */
168 Franz 210
        bool isPrintable;
3 paul 211
  /** Flag fuer PDF-Bookmark */
168 Franz 212
        bool isBookmark;
213
        int BMnr;
3 paul 214
  /** Flag fuer PDF-Annotation */
168 Franz 215
        bool isAnnotation;
216
        int AnType;
3 paul 217
        int AnActType;
168 Franz 218
        QString AnAction;
3 paul 219
        QString An_E_act;
220
        QString An_X_act;
221
        QString An_D_act;
222
        QString An_Fo_act;
223
        QString An_Bl_act;
224
        QString An_K_act;
225
        QString An_F_act;
226
        QString An_V_act;
227
        QString An_C_act;
88 Franz 228
        bool AutoName;
3 paul 229
        QString AnToolTip;
230
        QString AnRollOver;
231
        QString AnDown;
232
        QString AnBColor;
19 Franz 233
        QString An_Extern;
3 paul 234
        int AnBsty;
235
        int AnBwid;
236
        int AnFeed;
168 Franz 237
        int AnZiel;
3 paul 238
        int AnFlag;
239
        int AnMaxChar;
240
        int AnVis;
241
        int AnChkStil;
242
        int AnFont;
243
        bool AnIsChk;
244
        bool AnAAact;
245
        bool AnHTML;
246
        bool AnUseIcons;
247
        int AnIPlace;
248
        int AnScaleW;
249
        int AnFormat;
250
  /** Flag fuer neuzeichnen im EditMode */
168 Franz 251
        bool Dirty;
3 paul 252
  /** Item Font */
168 Franz 253
        QString IFont;
3 paul 254
  /** Item Fontgroesse */
168 Franz 255
        int ISize;
3 paul 256
  /** Flag fuer Auswahl */
168 Franz 257
        bool HasSel;
3 paul 258
  /** Flag fuer Textfluss */
168 Franz 259
        bool Textflow;
260
        bool Textflow2;
261
        bool FrameOnly;
262
        PageItem *BackBox;
263
        PageItem *NextBox;
264
        int NextIt;
265
        int NextPg;
266
        bool Tinput;
267
        bool isAutoText;
1065 cbradney 268
        int textAlignment;
168 Franz 269
        uint MaxChars;
270
        bool Redrawn;
271
        double ExtraV;
272
        bool isRaster;
273
        double OldB;
274
        double OldH;
275
        double OldB2;
276
        double OldH2;
277
        bool Sizing;
278
        bool toPixmap;
3 paul 279
        int LayerNr;
280
        bool ScaleType;
281
        bool AspectRatio;
80 Franz 282
        double Transparency;
283
        double TranspStroke;
168 Franz 284
        QValueStack<int> Groups;
20 Franz 285
        bool InvPict;
80 Franz 286
        QValueList<double> DashValues;
139 Franz 287
        QValueList<double> TabValues;
80 Franz 288
        double DashOffset;
68 Franz 289
        VGradient fill_gradient;
290
        QString Language;
232 Franz 291
/* Additions for Table Support */
292
        PageItem* LeftLink;
293
        PageItem* RightLink;
294
        PageItem* TopLink;
295
        PageItem* BottomLink;
234 Franz 296
        int LeftLinkID;
297
        int RightLinkID;
298
        int TopLinkID;
299
        int BottomLinkID;
232 Franz 300
        bool LeftLine;
301
        bool RightLine;
302
        bool TopLine;
303
        bool BottomLine;
304
        bool isTableItem;
305
        bool isSingleSel;
456 fschmid 306
        double BoundingX;
307
        double BoundingY;
308
        double BoundingW;
309
        double BoundingH;
310
        bool ChangedMasterItem;
537 fschmid 311
        QString OnMasterPage;
740 fschmid 312
        int startArrowIndex;
313
        int endArrowIndex;
1250 tsoots 314
 
1211 tsoots 315
        /** @brief Manages undostack and is where all undo actions/states are sent. */
1204 tsoots 316
        UndoManager *undoManager;
1361 tsoots 317
        /**  @brief Get name of the item
318
         *
319
         * This is unrelated to QObject::name(); the pageItem's name is independent
320
         * of its Qt name.
321
         * See also PageItem::setItemName()
322
         */
1371 tsoots 323
        QString itemName() const;
1361 tsoots 324
        /**
1204 tsoots 325
         * @brief Set name of the item
326
         * @param newName name for the item
327
         * @author Riku Leino
1361 tsoots 328
         *
329
         * Note that this is unrelated to QObject::setName()
330
         * See also PageItem::itemName()
1204 tsoots 331
         */
1361 tsoots 332
        void setItemName(const QString& newName);
1381 cbradney 333
 
334
        /** @brief Get the (name of the) fill color of the object */
335
        QString fillColor() const;
1286 tsoots 336
        /**
337
         * @brief Set the fill color of the object.
338
         * @param newColor fill color for the object
339
         */
340
        void setFillColor(const QString &newColor);
1381 cbradney 341
 
342
        /** @brief Get the shade of the fill color */
343
        int fillShade() const;
1286 tsoots 344
        /**
345
         * @brief Set the fill color shade.
346
         * @param newShade shade for the fill color
347
         */
348
        void setFillShade(int newShade);
1381 cbradney 349
 
350
        /** @brief Get the transparency of the fill color */
351
        double fillTransparency() const;
1286 tsoots 352
        /**
1371 tsoots 353
         * @brief Set the transparency of the fill color.
354
         * @param newTransparency transparency of the fill color
355
         */
356
        void setFillTransparency(double newTransparency);
1381 cbradney 357
 
358
        /** @brief Get the line color of the object */
359
        QString lineColor() const;
1371 tsoots 360
        /**
1286 tsoots 361
         * @brief Set the line color of the object.
362
         * @param newFill line color for the object
363
         */
364
        void setLineColor(const QString &newColor);
1381 cbradney 365
 
366
        /** @brief Get the line color shade */
367
        int lineShade() const;
1286 tsoots 368
        /**
369
         * @brief Set the line color shade.
370
         * @param newColor shade for the line color
371
         */
372
        void setLineShade(int newShade);
1381 cbradney 373
 
374
        /** @brief Get the line transparency */
375
        double lineTransparency() const;
1371 tsoots 376
        /**
377
         * @brief Set the transparency of the line color.
378
         * @param newTransparency transparency of the line color
379
         */
380
        void setLineTransparency(double newTransparency);
1383 tsoots 381
        /**
382
         * @brief Set the style of line.
383
         * @param newStyle style of line
384
         * @sa Qt::PenStyle
385
         */
386
        void setLineStyle(PenStyle newStyle);
1287 tsoots 387
        /** @brief Flip an image horizontally. */
388
        void flipImageH();
389
        /** @brief Flip an image vertically */
390
        void flipImageV();
1381 cbradney 391
 
1290 tsoots 392
        /** @brief Lock or unlock this pageitem. */
393
        void toggleLock();
1381 cbradney 394
        /** @brief is the item locked ? */
395
        bool locked() const;
1293 tsoots 396
        /** @brief Lock or unlock this pageitem */
397
        void setLocked(bool isLocked);
1381 cbradney 398
 
1290 tsoots 399
        /** @brief Toggle lock for resizing */
400
        void toggleSizeLock();
1381 cbradney 401
        /** @brief Is the item's size locked? */
402
        bool sizeLocked() const;
403
        /** @brief set lock for resizing */
1298 fschmid 404
        void setSizeLocked(bool isLocked);
1381 cbradney 405
 
1211 tsoots 406
        /**
407
         * @brief Check the changes to the item and add undo actions for them.
408
         * @param force Force the check. Do not care if mouse button or arrow key is down
409
         * check anyway.
410
         * @author Riku Leino
411
         */
412
        void checkChanges(bool force = false);
1204 tsoots 413
        /**
1211 tsoots 414
         * @name Store undo actions
1204 tsoots 415
         * @brief Add an undo action to the undo guis
416
         * @author Riku Leino
417
         */
1211 tsoots 418
        /*@{*/
1204 tsoots 419
        void moveUndoAction();
1211 tsoots 420
        void resizeUndoAction();
421
        void rotateUndoAction();
422
        /*@}*/
423
        /** @brief Required by the UndoObject */
424
        void restore(UndoState *state, bool isUndo);
1361 tsoots 425
 
426
protected:
1206 tsoots 427
        /**
1211 tsoots 428
         * @name Restore helper methods
429
         * Split the restore method for easier handling.
1206 tsoots 430
         * @author Riku Leino
431
         */
1211 tsoots 432
        /*@{*/
433
        void restoreMove(SimpleState *state, bool isUndo);
434
        void restoreResize(SimpleState *state, bool isUndo);
435
        void restoreRotate(SimpleState *state, bool isUndo);
1286 tsoots 436
        void restoreFill(SimpleState *state, bool isUndo);
437
        void restoreShade(SimpleState *state, bool isUndo);
438
        void restoreLineColor(SimpleState *state, bool isUndo);
439
        void restoreLineShade(SimpleState *state, bool isUndo);
1357 tsoots 440
        void restoreName(SimpleState *state, bool isUndo);
1371 tsoots 441
        void restoreFillTP(SimpleState *state, bool isUndo);
442
        void restoreLineTP(SimpleState *state, bool isUndo);
1383 tsoots 443
        void restoreLineStyle(SimpleState *state, bool isUndo);
1211 tsoots 444
        /*@}*/
1238 tsoots 445
 
446
        /**
447
         * @brief Returns true if the actions should be sent to the UndoManager.
448
         *
449
         * Checks the state of the arrow keys and mouse buttons. If a key or a
450
         * mouse button is down PageItem is under some action which should only be
451
         * stored after the action has been finished (to get a single undo action).
452
         * @return true if the actions should be sent to the UndoManager based on the
453
         * state of arrow keys and mouse buttons else returns false.
454
         */
455
        bool shouldCheck();
1290 tsoots 456
        /** @brief Clears the current selection and selects this PageItem. */
457
        void select();
1361 tsoots 458
 
459
        // Protected members
460
 
461
        /**
462
         * @brief Item name. Unicode. User visible (outline, property palette, etc).
463
         *
464
         * See PageItem::itemName(), PageItem::setItemName()
465
         * */
466
        QString AnName;
3 paul 467
};
468
 
469
#endif