diff options
Diffstat (limited to 'kbarcode/documentitem.h')
-rw-r--r-- | kbarcode/documentitem.h | 230 |
1 files changed, 230 insertions, 0 deletions
diff --git a/kbarcode/documentitem.h b/kbarcode/documentitem.h new file mode 100644 index 0000000..ff528d3 --- /dev/null +++ b/kbarcode/documentitem.h @@ -0,0 +1,230 @@ +/*************************************************************************** + documentitem.h - description + ------------------- + begin : Do Sep 2 2004 + copyright : (C) 2004 by Dominik Seichter + email : domseichter@web.de + ***************************************************************************/ + +/*************************************************************************** + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + ***************************************************************************/ + +#ifndef DOCUMENTITEM_H +#define DOCUMENTITEM_H + +#include <xmlutils.h> +#include <qobject.h> +#include <qsortedlist.h> +#include <qstring.h> +#include <qtextstream.h> + +#include <qcolor.h> +#include <qpen.h> + +#include "zplutils.h" + +enum ERtti { + eRtti_Barcode, + eRtti_Image, + eRtti_Line, + eRtti_Rect, + eRtti_Text, + //NY33 + eRtti_TextLine + //NY33 +}; + +class QDomElement; +class QPainter; +class QPaintDevice; +class QTextStream; +class TCanvasItem; +class TokenProvider; + +/** + * Class DocumentItem + * Every object which can be placed on a document has to be a subclass of this class. + */ +class DocumentItem : public QObject, protected XMLUtils { +public: + DocumentItem ( ); + virtual ~DocumentItem() { }; + + /** + * + * @param element + */ + virtual void loadXML (QDomElement* element); + + + /** + * save this item to XML + */ + virtual void saveXML (QDomElement* element); + + + /** + * Draws the item + */ + virtual void draw (QPainter* painter) = 0; + + + /** + * Draw a border around the item, has to be reimplemented for round items or barcodes which do not allow borders. + */ + virtual void drawBorder (QPainter* painter); + + virtual int rtti () const = 0; + + /** + * Write a ZPL string for drawing this item onto a zebra printer to a QTextStream + */ + virtual void drawZpl( QTextStream* stream ) = 0; + + /** + * Write a IPL string for drawing this item onto a zebra printer to a QTextStream + */ + virtual void drawIpl( QTextStream* stream, IPLUtils* utils ) = 0; + + /** + * Write a EPCL string for drawing this item onto a zebra printer to a QTextStream + */ + virtual void drawEPcl( QTextStream* stream ) = 0; + + void setCanvasItem( TCanvasItem* item ); + TCanvasItem* canvasItem() const; + + void setPaintDevice( QPaintDevice* device ); + QPaintDevice* paintDevice() const; + + void setTokenProvider( TokenProvider* token ); + TokenProvider* tokenProvider() const; + + /** + * + * @param b + */ + void setBorder (bool b); + bool border () const; + + void setPen( const QPen& pen ); + QPen pen() const; + + /** move the documentitem using pixel coordinates on the current + * paint device + */ + void move( int x, int y ); + /** move the documentitem using 1/1000th of a millimeter coordinates + */ + void moveMM( int x, int y ); + + /** set the width and height of this item using pixel coordinates + * of the current paint device + */ + void setSize( int w, int h ); + /** set the width and height of this item using 1/1000th of a + * millimeter coordinates + */ + void setSizeMM( int w, int h ); + + /** The bounding rectangle. I.e. the rectangle including + * the border width + */ + void setBoundingRect( const QRect & rect ); + /** The bounding rectangle. I.e. the rectangle including + * the border width + */ + QRect boundingRect() const; + + /** The drawing rectangle. I.e. the rectangle with the + * border width substracted + */ + void setRect( const QRect & rect ); + /** The drawing rectangle. I.e. the rectangle with the + * border width substracted + */ + QRect rect() const; + + /** the bounding rectangle including the border in 1/1000mm + */ + void setRectMM( const QRect & rect ); + /** the bounding rectangle including the border in 1/1000mm + */ + QRect rectMM() const; + + /** set the item to be locked in the label editor + * i.e protect it from being move or resized by the user + */ + void setLocked( bool locked ); + const bool locked() const; + + /** set a javascript script for this item which is evaluate + * to determine wether this item should be printed (only in Label + * as items are always shown in the labeleditor. + * The script shall return true if the item should be visible. + * If script returns false the item will not be printed. + */ + inline void setVisibilityScript( const QString & script ); + inline const QString visibilityScript() const; + + int z() const; + void setZ( int z ); + + /** Only the z index is compared + */ + bool operator<( const DocumentItem & docitem ) + { + return m_z < docitem.m_z; + } + + /** Only the z index is compared + */ + bool operator==( const DocumentItem & docitem ) + { + return m_z == docitem.m_z; + } +private: + void init(); + +private: + /** + * Defines wether this item has a border or not + */ + bool m_border; + QPen m_pen; + QRect m_rect; + int m_z; + bool m_locked; + + /** + * Background color of this document item + */ + QColor m_background; + + QString m_visibilityScript; + + QPaintDevice* m_device; + TCanvasItem* m_canvasitem; + TokenProvider* m_token; +}; + +void DocumentItem::setVisibilityScript( const QString & script ) +{ + m_visibilityScript = script; +} + +const QString DocumentItem::visibilityScript() const +{ + return m_visibilityScript; +} + +typedef QSortedList<DocumentItem> DocumentItemList; + +#endif //DOCUMENTITEM_H + |