diff options
Diffstat (limited to 'kbarcode/barkode.h')
-rw-r--r-- | kbarcode/barkode.h | 297 |
1 files changed, 297 insertions, 0 deletions
diff --git a/kbarcode/barkode.h b/kbarcode/barkode.h new file mode 100644 index 0000000..4d7004b --- /dev/null +++ b/kbarcode/barkode.h @@ -0,0 +1,297 @@ +/* This file is part of the KDE project + Copyright (C) 1998, 1999, 2000 Torben Weis <weis@kde.org> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef BARKODE_H +#define BARKODE_H + + +#include <qcolor.h> +#include <qstring.h> + +#include "barkodeengine.h" + +/** + * Enumeration values for sequence modes + */ +typedef enum { NUM, ALPHA, ALPHANUM } ESequence; + +/** This values are used to indicate the feature supported by a + * certain barcode typedef + */ +enum { NOCUT = 0x00001, MULTILINE = 0x00002, NOTEXT = 0x00004, NOSCALE = 0x00008, + /** + * Different advanced option modes. + */ + PDF417BARCODE = 0x00100, TBARCODEADV = 0x00200, PUREADV = 0x00400, DATAMATRIX = 0x00800, + COLORED = 0x00010, + + /** + * Checksum ID's + */ + POSTNETCHECK = 0x01000, CODE128CHECK = 0x02000, EAN8CHECK = 0x04000, EAN13CHECK = 0x08000, + UPCACHECK = 0x10000, UPCECHECK = 0x20000, MODULOALLCHECK = 0x40000, MODULO10CHECK = 0x80000, + + /** + * Short cut's + */ + BARCODE2D = NOCUT | MULTILINE | NOTEXT }; + +/** This structure holds information about a supported barcode encoding typedef + */ +typedef struct tBarcodeInfo +{ + /** the name which is stored for identification in the xml file + * and used as commandline parameter for external tools + */ + QString xml; + /** the user visible name of this typedef + */ + QString name; + /** the barcode engine to use + */ + EEngine engine; + /** features supported by this type orred together + */ + unsigned int features; + + /** internal value (e.g. identifier of GNU Barcode) + */ + int internal; + + /** A regular expression that validates + * a value for this barcode. + */ + QString validator; + QString validatorNot; +}; + +typedef QValueList<tBarcodeInfo> TBarcodeInfoList; + +class BarkodeEngine; +class QPainter; +class QPicture; +class QSize; +class QPaintDevice; +class TokenProvider; + +class Barkode { + public: + Barkode(); + Barkode( const Barkode & barkode ); + virtual ~Barkode(); + + /** set a TokenProvider for data field parsing + */ + void setTokenProvider( TokenProvider* token ); + + /** restore default values + */ + void defaults(); + + /** call this method after you changed a property + * to update the internal structures + */ + void update( const QPaintDevice* device ); + + /** get the barcode value after all sequences and datafields have + * been parsed + */ + const QString parsedValue(); + + const QPixmap pixmap( double scalex = 1.0, double scaley = 1.0 ); + const QPicture picture(); + const QSize size() const; + bool isValid() const; + + const QColor & background() const; + const QColor & foreground() const; + const QColor & textColor() const; + const unsigned int fontsize() const; + const unsigned int quietZone() const; + const unsigned int barHeight() const; + const QString & type() const; + const QString & value() const; + const bool sequenceEnabled() const; + const ESequence sequenceMode() const; + const int sequenceStart() const; + const int sequenceStep() const; + const QString & databaseMode() const; + const bool textVisible() const; + const int rotation() const; + const double scaling() const; + const unsigned int index() const; + const double cut() const; + const int datamatrixSize() const; + + void setBackground( const QColor & c ); + void setForeground( const QColor & c ); + void setTextColor( const QColor & c ); + void setFontsize ( unsigned int f ); + void setQuietZone( unsigned int q ); + void setBarHeight( unsigned int h ); + void setType( const QString & type ); + void setValue( const QString & value ); + void setTextVisible( const bool b ); + /** Set the index of the barcodes for barcode sequences. + */ + void setIndex( unsigned int i ); + void setSequenceEnabled( bool b ); + void setSequenceMode( ESequence e ); + void setSequenceStart( int s ); + void setSequenceStep( int s ); + void setDatabaseMode( const QString & mode ); + void setRotation( const int r ); + void setScaling( const double d ); + void setCut( const double c ); + void setDatamatrixSize( int s ); + + /** Sets the barcodes data structures + * the same as operator= + */ + void setData( const Barkode & barkode ); + void operator=( const Barkode & barkode ); + bool operator==( const Barkode & barkode ) const; + + inline BarkodeEngine* engine(); + inline const BarkodeEngine* engine() const; + + /** Test if the encodingType @p type has a certain + * @p feature, as defined in the codes QValueList. + */ + static bool hasFeature( const QString & type, unsigned int feature ); + /** Returns the internal value for the encoding type @p typedef + */ + static int internalType( const QString & type ); + /** Returns all supported encoding types + * ready for displaying them to the user + */ + static const QStringList* encodingTypes(); + /** Convert the uservisible encoding type @p name + * to the internal identifier + */ + static const char* typeFromName( const QString & name ); + /** Convert the internal identifier @p type + * to the user visible encoding name + */ + static const char* nameFromType( const QString & type ); + + static QString* validatorFromType( const QString & type ); + static QString* validatorNotFromType( const QString & type ); + + /** return the barcode generation engine for type @p typedef + */ + + static EEngine engineForType( const QString & type ); + /** Draw an invalid barcode sign to QPainter @p painter + */ + void drawInvalid( QPainter & painter, int x = 0, int y = 0 ); + + /** returns wether barcode functionallity + * is available + */ + static bool haveBarcode() { + Barkode::initInfo(); + return ( s_haveGnuBarcode || s_havePdfEncode || s_haveTBarcode || s_havePurePostscript ); + } + static bool haveGNUBarcode() { + Barkode::initInfo(); + return s_haveGnuBarcode; + } + static bool haveTBarcode() { + Barkode::initInfo(); + return s_haveTBarcode; + } + static bool haveTBarcode2() { + Barkode::initInfo(); + return s_haveTBarcode2; + } + static bool havePDFBarcode() { + Barkode::initInfo(); + return s_havePdfEncode; + } + static bool havePurePostscriptBarcode() { + Barkode::initInfo(); + return s_havePurePostscript; + } + + static tBarcodeInfo createInfo( const char* xml, const QString & name, const EEngine engine, + const unsigned int features = 0, const int internal = 0 ); + + protected: + void drawBarcode( QPainter & painter, int x = 0, int y = 0 ); + + private: + static void initInfo(); + static void initValidators(); + + void updateEngine(); + + protected: + BarkodeEngine* m_engine; + TokenProvider* m_token; + + bool m_valid; + bool m_sequence; + ESequence m_esequence; + int m_sequence_start; + int m_sequence_step; + bool m_text_visible; + + QColor m_background; + QColor m_foreground; + QColor m_textcolor; + + unsigned int m_quietzone; + unsigned int m_bar_height; + unsigned int m_fontsize; + unsigned int m_index; + int m_datamatrix_size; + int m_rotation; + + double m_scaling; + double m_cut; // temporarly used for the pixmap engines + // won't be needed for the Barkode engine + + QString m_type; + QString m_value; + QString m_database_mode; + + static TBarcodeInfoList s_info; + static QStringList* s_encoding; + + static bool s_haveGnuBarcode; + static bool s_haveTBarcode; + static bool s_haveTBarcode2; + static bool s_havePdfEncode; + static bool s_havePurePostscript; +}; + +BarkodeEngine* Barkode::engine() +{ + return m_engine; +} + +const BarkodeEngine* Barkode::engine() const +{ + return m_engine; +} + +#endif // BARKODE_H + + |