00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
#ifndef DRIVER_H
00022
#define DRIVER_H
00023
00024
#if !defined( _KDEPRINT_COMPILE ) && defined( __GNUC__ )
00025
#warning internal header, do not use except if you are a KDEPrint developer
00026
#endif
00027
00028
#include <qstring.h>
00029
#include <qptrlist.h>
00030
#include <qdict.h>
00031
#include <qmap.h>
00032
#include <qrect.h>
00033
#include <qsize.h>
00034
00035
#include <kdelibs_export.h>
00036
00037
class DriverItem;
00038
class QListView;
00039
00040
00041
00042
00043
00044
class DrBase;
00045
class DrMain;
00046
class DrGroup;
00047
class DrConstraint;
00048
class DrPageSize;
00049
00050
00051
00052
00053
00061
class KDEPRINT_EXPORT DrBase
00062 {
00063
public:
00064
enum Type { Base = 0, Main, ChoiceGroup, Group, String, Integer, Float, List, Boolean };
00065
00066 DrBase();
00067
virtual ~DrBase();
00068
00069 Type type()
const {
return m_type; }
00070
bool isOption()
const {
return (m_type >= DrBase::String); }
00071
00072
const QString& get(
const QString& key)
const {
return m_map[key]; }
00073
void set(
const QString& key,
const QString& val) { m_map[key] = val; }
00074
bool has(
const QString& key)
const {
return m_map.contains(key); }
00075
const QString& name()
const {
return m_name; }
00076
void setName(
const QString& s) { m_name = s; }
00077
bool conflict()
const {
return m_conflict; }
00078
void setConflict(
bool on) { m_conflict = on; }
00079
00080
virtual QString valueText();
00081
virtual QString prettyText();
00082
virtual void setValueText(
const QString&);
00083
virtual DriverItem* createItem(DriverItem *parent, DriverItem *after = 0);
00084
virtual void setOptions(
const QMap<QString,QString>& opts);
00085
virtual void getOptions(
QMap<QString,QString>& opts,
bool incldef =
false);
00086
virtual DrBase* clone();
00087
00088
protected:
00089
QMap<QString,QString> m_map;
00090
QString m_name;
00091 Type m_type;
00092
bool m_conflict;
00093 };
00094
00095
00096
00097
00098
00106
class KDEPRINT_EXPORT DrGroup :
public DrBase
00107 {
00108
public:
00109 DrGroup();
00110 ~DrGroup();
00111
00112
void addOption(DrBase *opt);
00113
void addGroup(DrGroup *grp);
00114
void addObject(DrBase *optgrp);
00115
void clearConflict();
00116
void removeOption(
const QString& name);
00117
void removeGroup(DrGroup *grp);
00118
bool isEmpty();
00119
00120
virtual DriverItem* createItem(DriverItem *parent, DriverItem *after = 0);
00121 DrBase* findOption(
const QString& name, DrGroup **parentGroup = 0);
00122 DrGroup* findGroup(DrGroup *grp, DrGroup **parentGroup = 0);
00123
void setOptions(
const QMap<QString,QString>& opts);
00124
void getOptions(
QMap<QString,QString>& opts,
bool incldef =
false);
00125 DrBase* clone();
00126
00127
const QPtrList<DrGroup>& groups() {
return m_subgroups; }
00128
const QPtrList<DrBase>& options() {
return m_listoptions; }
00129
00130
static QString groupForOption(
const QString& optname );
00131
00132
protected:
00133
void createTree(DriverItem *parent);
00134
void flattenGroup(
QMap<QString, DrBase*>&,
int&);
00135
00136
protected:
00137
QPtrList<DrGroup> m_subgroups;
00138
QDict<DrBase> m_options;
00139
QPtrList<DrBase> m_listoptions;
00140 };
00141
00142
00143
00144
00145
00153
class KDEPRINT_EXPORT DrMain :
public DrGroup
00154 {
00155
public:
00156 DrMain();
00157 ~DrMain();
00158
00159 DriverItem* createTreeView(
QListView *parent);
00160
void addConstraint(DrConstraint *c) { m_constraints.append(c); }
00161
int checkConstraints();
00162 DrPageSize* findPageSize(
const QString& name) {
return m_pagesizes.find(name); }
00163
void addPageSize(DrPageSize *sz);
00164
void removeOptionGlobally(
const QString& name);
00165
void removeGroupGlobally(DrGroup *grp);
00166
QMap<QString, DrBase*> flatten();
00167 DrMain* cloneDriver();
00168
00169
protected:
00170
QPtrList<DrConstraint> m_constraints;
00171
QDict<DrPageSize> m_pagesizes;
00172 };
00173
00174
00175
00176
00177
00185
class DrChoiceGroup :
public DrGroup
00186 {
00187
public:
00188 DrChoiceGroup();
00189 ~DrChoiceGroup();
00190
00191 DriverItem* createItem(DriverItem *parent, DriverItem *after = 0);
00192 };
00193
00194
00195
00196
00197
00205
class KDEPRINT_EXPORT DrStringOption :
public DrBase
00206 {
00207
public:
00208 DrStringOption();
00209 ~DrStringOption();
00210
00211
virtual QString valueText();
00212
virtual void setValueText(
const QString& s);
00213
00214
protected:
00215
QString m_value;
00216 };
00217
00218
00219
00220
00221
00229
class KDEPRINT_EXPORT DrIntegerOption :
public DrBase
00230 {
00231
public:
00232 DrIntegerOption();
00233 ~DrIntegerOption();
00234
00235
virtual QString valueText();
00236
virtual void setValueText(
const QString& s);
00237
QString fixedVal();
00238
00239
protected:
00240
int m_value;
00241 };
00242
00243
00244
00245
00246
00254
class KDEPRINT_EXPORT DrFloatOption :
public DrBase
00255 {
00256
public:
00257 DrFloatOption();
00258 ~DrFloatOption();
00259
00260
virtual QString valueText();
00261
virtual void setValueText(
const QString& s);
00262
QString fixedVal();
00263
00264
protected:
00265
float m_value;
00266 };
00267
00268
00269
00270
00271
00279
class KDEPRINT_EXPORT DrListOption :
public DrBase
00280 {
00281
public:
00282 DrListOption();
00283 ~DrListOption();
00284
00285
void addChoice(DrBase *ch) { m_choices.append(ch); }
00286
QPtrList<DrBase>* choices() {
return &m_choices; }
00287 DrBase* currentChoice()
const {
return m_current; }
00288 DrBase* findChoice(
const QString& txt);
00289
void setChoice(
int choicenum);
00290
00291
virtual QString valueText();
00292
virtual QString prettyText();
00293
virtual void setValueText(
const QString& s);
00294
void setOptions(
const QMap<QString,QString>& opts);
00295
void getOptions(
QMap<QString,QString>& opts,
bool incldef =
false);
00296 DriverItem* createItem(DriverItem *parent, DriverItem *after = 0);
00297 DrBase* clone();
00298
00299
protected:
00300
QPtrList<DrBase> m_choices;
00301 DrBase *m_current;
00302 };
00303
00311
class KDEPRINT_EXPORT DrBooleanOption :
public DrListOption
00312 {
00313
00314
public:
00315 DrBooleanOption() : DrListOption() { m_type = DrBase::Boolean; }
00316 ~DrBooleanOption() {}
00317 };
00318
00319
00320
00321
00322
00330
class DrConstraint
00331 {
00332
public:
00333 DrConstraint(
const QString& o1,
const QString& o2,
const QString& c1 = QString::null,
const QString& c2 = QString::null);
00334 DrConstraint(
const DrConstraint&);
00335
00336
bool check(DrMain*);
00337
00338
protected:
00339
QString m_opt1, m_opt2;
00340
QString m_choice1, m_choice2;
00341 DrListOption *m_option1, *m_option2;
00342 };
00343
00344
00345
00346
00347
00355
class DrPageSize
00356 {
00357
public:
00358 DrPageSize(
const QString& s,
float width,
float height,
float left,
float bottom,
float right,
float top);
00359 DrPageSize(
const DrPageSize&);
00360
00366
float pageWidth()
const {
return m_width; }
00367
float pageHeight()
const {
return m_height; }
00368
float leftMargin()
const {
return m_left; }
00369
float rightMargin()
const {
return m_right; }
00370
float topMargin()
const {
return m_top; }
00371
float bottomMargin()
const {
return m_bottom; }
00372
QString pageName()
const {
return m_name; }
00373
00374
QSize pageSize() const;
00375
QRect pageRect() const;
00376
QSize margins() const;
00377
00378 protected:
00379
QString m_name;
00380
float m_width, m_height, m_left, m_bottom, m_right, m_top;
00381 };
00382
00383 #endif