diff options
Diffstat (limited to 'kdeprint/driver.h')
-rw-r--r-- | kdeprint/driver.h | 383 |
1 files changed, 383 insertions, 0 deletions
diff --git a/kdeprint/driver.h b/kdeprint/driver.h new file mode 100644 index 000000000..3bba797a8 --- /dev/null +++ b/kdeprint/driver.h @@ -0,0 +1,383 @@ +/* + * This file is part of the KDE libraries + * Copyright (c) 2001 Michael Goffioul <kdeprint@swing.be> + * + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * 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 DRIVER_H +#define DRIVER_H + +#if !defined( _KDEPRINT_COMPILE ) && defined( __GNUC__ ) +#warning internal header, do not use except if you are a KDEPrint developer +#endif + +#include <qstring.h> +#include <qptrlist.h> +#include <qdict.h> +#include <qmap.h> +#include <qrect.h> +#include <qsize.h> + +#include <kdelibs_export.h> + +class DriverItem; +class QListView; + +/*********************** + * Forward definitions * + ***********************/ + +class DrBase; +class DrMain; +class DrGroup; +class DrConstraint; +class DrPageSize; + +/************************************* + * Base class for all driver objects * + *************************************/ + +/** + * @internal + * This class is internal to KDEPrint and is not intended to be + * used outside it. Please do not make use of this header, except + * if you're a KDEPrint developer. The API might change in the + * future and binary compatibility might be broken. + */ +class KDEPRINT_EXPORT DrBase +{ +public: + enum Type { Base = 0, Main, ChoiceGroup, Group, String, Integer, Float, List, Boolean }; + + DrBase(); + virtual ~DrBase(); + + Type type() const { return m_type; } + bool isOption() const { return (m_type >= DrBase::String); } + + const QString& get(const QString& key) const { return m_map[key]; } + void set(const QString& key, const QString& val) { m_map[key] = val; } + bool has(const QString& key) const { return m_map.contains(key); } + const QString& name() const { return m_name; } + void setName(const QString& s) { m_name = s; } + bool conflict() const { return m_conflict; } + void setConflict(bool on) { m_conflict = on; } + + virtual QString valueText(); + virtual QString prettyText(); + virtual void setValueText(const QString&); + virtual DriverItem* createItem(DriverItem *parent, DriverItem *after = 0); + virtual void setOptions(const QMap<QString,QString>& opts); + virtual void getOptions(QMap<QString,QString>& opts, bool incldef = false); + virtual DrBase* clone(); + +protected: + QMap<QString,QString> m_map; + QString m_name; // used as a search key, better to have defined directly + Type m_type; + bool m_conflict; +}; + +/********************** + * Option group class * + **********************/ + +/** + * @internal + * This class is internal to KDEPrint and is not intended to be + * used outside it. Please do not make use of this header, except + * if you're a KDEPrint developer. The API might change in the + * future and binary compatibility might be broken. + */ +class KDEPRINT_EXPORT DrGroup : public DrBase +{ +public: + DrGroup(); + ~DrGroup(); + + void addOption(DrBase *opt); + void addGroup(DrGroup *grp); + void addObject(DrBase *optgrp); + void clearConflict(); + void removeOption(const QString& name); + void removeGroup(DrGroup *grp); + bool isEmpty(); + + virtual DriverItem* createItem(DriverItem *parent, DriverItem *after = 0); + DrBase* findOption(const QString& name, DrGroup **parentGroup = 0); + DrGroup* findGroup(DrGroup *grp, DrGroup **parentGroup = 0); + void setOptions(const QMap<QString,QString>& opts); + void getOptions(QMap<QString,QString>& opts, bool incldef = false); + DrBase* clone(); + + const QPtrList<DrGroup>& groups() { return m_subgroups; } + const QPtrList<DrBase>& options() { return m_listoptions; } + + static QString groupForOption( const QString& optname ); + +protected: + void createTree(DriverItem *parent); + void flattenGroup(QMap<QString, DrBase*>&, int&); + +protected: + QPtrList<DrGroup> m_subgroups; + QDict<DrBase> m_options; + QPtrList<DrBase> m_listoptions; // keep track of order of appearance +}; + +/********************* + * Main driver class * + *********************/ + +/** + * @internal + * This class is internal to KDEPrint and is not intended to be + * used outside it. Please do not make use of this header, except + * if you're a KDEPrint developer. The API might change in the + * future and binary compatibility might be broken. + */ +class KDEPRINT_EXPORT DrMain : public DrGroup +{ +public: + DrMain(); + ~DrMain(); + + DriverItem* createTreeView(QListView *parent); + void addConstraint(DrConstraint *c) { m_constraints.append(c); } + int checkConstraints(); + DrPageSize* findPageSize(const QString& name) { return m_pagesizes.find(name); } + void addPageSize(DrPageSize *sz); + void removeOptionGlobally(const QString& name); + void removeGroupGlobally(DrGroup *grp); + QMap<QString, DrBase*> flatten(); + DrMain* cloneDriver(); + +protected: + QPtrList<DrConstraint> m_constraints; + QDict<DrPageSize> m_pagesizes; +}; + +/********************************************************** + * Choice group class: a choice that involve a sub-option * + **********************************************************/ + +/** + * @internal + * This class is internal to KDEPrint and is not intended to be + * used outside it. Please do not make use of this header, except + * if you're a KDEPrint developer. The API might change in the + * future and binary compatibility might be broken. + */ +class DrChoiceGroup : public DrGroup +{ +public: + DrChoiceGroup(); + ~DrChoiceGroup(); + + DriverItem* createItem(DriverItem *parent, DriverItem *after = 0); +}; + +/*********************** + * String option class * + ***********************/ + +/** + * @internal + * This class is internal to KDEPrint and is not intended to be + * used outside it. Please do not make use of this header, except + * if you're a KDEPrint developer. The API might change in the + * future and binary compatibility might be broken. + */ +class KDEPRINT_EXPORT DrStringOption : public DrBase +{ +public: + DrStringOption(); + ~DrStringOption(); + + virtual QString valueText(); + virtual void setValueText(const QString& s); + +protected: + QString m_value; +}; + +/********************************** + * Integer numerical option class * + **********************************/ + +/** + * @internal + * This class is internal to KDEPrint and is not intended to be + * used outside it. Please do not make use of this header, except + * if you're a KDEPrint developer. The API might change in the + * future and binary compatibility might be broken. + */ +class KDEPRINT_EXPORT DrIntegerOption : public DrBase +{ +public: + DrIntegerOption(); + ~DrIntegerOption(); + + virtual QString valueText(); + virtual void setValueText(const QString& s); + QString fixedVal(); + +protected: + int m_value; +}; + +/******************************** + * Float numerical option class * + ********************************/ + +/** + * @internal + * This class is internal to KDEPrint and is not intended to be + * used outside it. Please do not make use of this header, except + * if you're a KDEPrint developer. The API might change in the + * future and binary compatibility might be broken. + */ +class KDEPRINT_EXPORT DrFloatOption : public DrBase +{ +public: + DrFloatOption(); + ~DrFloatOption(); + + virtual QString valueText(); + virtual void setValueText(const QString& s); + QString fixedVal(); + +protected: + float m_value; +}; + +/*********************** + * Single choice class * + ***********************/ + +/** + * @internal + * This class is internal to KDEPrint and is not intended to be + * used outside it. Please do not make use of this header, except + * if you're a KDEPrint developer. The API might change in the + * future and binary compatibility might be broken. + */ +class KDEPRINT_EXPORT DrListOption : public DrBase +{ +public: + DrListOption(); + ~DrListOption(); + + void addChoice(DrBase *ch) { m_choices.append(ch); } + QPtrList<DrBase>* choices() { return &m_choices; } + DrBase* currentChoice() const { return m_current; } + DrBase* findChoice(const QString& txt); + void setChoice(int choicenum); + + virtual QString valueText(); + virtual QString prettyText(); + virtual void setValueText(const QString& s); + void setOptions(const QMap<QString,QString>& opts); + void getOptions(QMap<QString,QString>& opts, bool incldef = false); + DriverItem* createItem(DriverItem *parent, DriverItem *after = 0); + DrBase* clone(); + +protected: + QPtrList<DrBase> m_choices; + DrBase *m_current; +}; + +/** + * @internal + * This class is internal to KDEPrint and is not intended to be + * used outside it. Please do not make use of this header, except + * if you're a KDEPrint developer. The API might change in the + * future and binary compatibility might be broken. + */ +class KDEPRINT_EXPORT DrBooleanOption : public DrListOption +{ + /* just an overloaded class, with different type */ +public: + DrBooleanOption() : DrListOption() { m_type = DrBase::Boolean; } + ~DrBooleanOption() {} +}; + +/******************** + * Constraint class * + ********************/ + +/** + * @internal + * This class is internal to KDEPrint and is not intended to be + * used outside it. Please do not make use of this header, except + * if you're a KDEPrint developer. The API might change in the + * future and binary compatibility might be broken. + */ +class DrConstraint +{ +public: + DrConstraint(const QString& o1, const QString& o2, const QString& c1 = QString::null, const QString& c2 = QString::null); + DrConstraint(const DrConstraint&); + + bool check(DrMain*); + +protected: + QString m_opt1, m_opt2; + QString m_choice1, m_choice2; + DrListOption *m_option1, *m_option2; +}; + +/******************* + * Page Size class * + *******************/ + +/** + * @internal + * This class is internal to KDEPrint and is not intended to be + * used outside it. Please do not make use of this header, except + * if you're a KDEPrint developer. The API might change in the + * future and binary compatibility might be broken. + */ +class DrPageSize +{ +public: + DrPageSize(const QString& s, float width, float height, float left, float bottom, float right, float top); + DrPageSize(const DrPageSize&); + + /** + * All dimensions are int dot: 1/72th of an inch ( PostScript ). + * When rounded, the rounding is made safely: upward for a margin, + * downward for a page size. + */ + float pageWidth() const { return m_width; } + float pageHeight() const { return m_height; } + float leftMargin() const { return m_left; } + float rightMargin() const { return m_right; } + float topMargin() const { return m_top; } + float bottomMargin() const { return m_bottom; } + QString pageName() const { return m_name; } + + QSize pageSize() const; + QRect pageRect() const; + QSize margins() const; + +protected: + QString m_name; + float m_width, m_height, m_left, m_bottom, m_right, m_top; +}; + +#endif |