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
class DriverItem;
00036
class QListView;
00037
00038
00039
00040
00041
00042
class DrBase;
00043
class DrMain;
00044
class DrGroup;
00045
class DrConstraint;
00046
class DrPageSize;
00047
00048
00049
00050
00051
00059
class DrBase
00060 {
00061
public:
00062
enum Type { Base = 0, Main, ChoiceGroup, Group, String, Integer, Float, List, Boolean };
00063
00064 DrBase();
00065
virtual ~DrBase();
00066
00067 Type type()
const {
return m_type; }
00068
bool isOption()
const {
return (m_type >= DrBase::String); }
00069
00070
const QString& get(
const QString& key)
const {
return m_map[key]; }
00071
void set(
const QString& key,
const QString& val) { m_map[key] = val; }
00072
bool has(
const QString& key)
const {
return m_map.contains(key); }
00073
const QString& name()
const {
return m_name; }
00074
void setName(
const QString& s) { m_name = s; }
00075
bool conflict()
const {
return m_conflict; }
00076
void setConflict(
bool on) { m_conflict = on; }
00077
00078
virtual QString valueText();
00079
virtual QString prettyText();
00080
virtual void setValueText(
const QString&);
00081
virtual DriverItem* createItem(DriverItem *parent, DriverItem *after = 0);
00082
virtual void setOptions(
const QMap<QString,QString>& opts);
00083
virtual void getOptions(
QMap<QString,QString>& opts,
bool incldef =
false);
00084
virtual DrBase* clone();
00085
00086
protected:
00087
QMap<QString,QString> m_map;
00088
QString m_name;
00089 Type m_type;
00090
bool m_conflict;
00091 };
00092
00093
00094
00095
00096
00104
class DrGroup :
public DrBase
00105 {
00106
public:
00107 DrGroup();
00108 ~DrGroup();
00109
00110
void addOption(DrBase *opt);
00111
void addGroup(DrGroup *grp);
00112
void addObject(DrBase *optgrp);
00113
void clearConflict();
00114
void removeOption(
const QString& name);
00115
void removeGroup(DrGroup *grp);
00116
bool isEmpty();
00117
00118
virtual DriverItem* createItem(DriverItem *parent, DriverItem *after = 0);
00119 DrBase* findOption(
const QString& name, DrGroup **parentGroup = 0);
00120 DrGroup* findGroup(DrGroup *grp, DrGroup **parentGroup = 0);
00121
void setOptions(
const QMap<QString,QString>& opts);
00122
void getOptions(
QMap<QString,QString>& opts,
bool incldef =
false);
00123 DrBase* clone();
00124
00125
const QPtrList<DrGroup>& groups() {
return m_subgroups; }
00126
const QPtrList<DrBase>& options() {
return m_listoptions; }
00127
00128
static QString groupForOption(
const QString& optname );
00129
00130
protected:
00131
void createTree(DriverItem *parent);
00132
void flattenGroup(
QMap<QString, DrBase*>&,
int&);
00133
00134
protected:
00135
QPtrList<DrGroup> m_subgroups;
00136
QDict<DrBase> m_options;
00137
QPtrList<DrBase> m_listoptions;
00138 };
00139
00140
00141
00142
00143
00151
class DrMain :
public DrGroup
00152 {
00153
public:
00154 DrMain();
00155 ~DrMain();
00156
00157 DriverItem* createTreeView(
QListView *parent);
00158
void addConstraint(DrConstraint *c) { m_constraints.append(c); }
00159
int checkConstraints();
00160 DrPageSize* findPageSize(
const QString& name) {
return m_pagesizes.find(name); }
00161
void addPageSize(DrPageSize *sz);
00162
void removeOptionGlobally(
const QString& name);
00163
void removeGroupGlobally(DrGroup *grp);
00164
QMap<QString, DrBase*> flatten();
00165 DrMain* cloneDriver();
00166
00167
protected:
00168
QPtrList<DrConstraint> m_constraints;
00169
QDict<DrPageSize> m_pagesizes;
00170 };
00171
00172
00173
00174
00175
00183
class DrChoiceGroup :
public DrGroup
00184 {
00185
public:
00186 DrChoiceGroup();
00187 ~DrChoiceGroup();
00188
00189 DriverItem* createItem(DriverItem *parent, DriverItem *after = 0);
00190 };
00191
00192
00193
00194
00195
00203
class DrStringOption :
public DrBase
00204 {
00205
public:
00206 DrStringOption();
00207 ~DrStringOption();
00208
00209
virtual QString valueText();
00210
virtual void setValueText(
const QString& s);
00211
00212
protected:
00213
QString m_value;
00214 };
00215
00216
00217
00218
00219
00227
class DrIntegerOption :
public DrBase
00228 {
00229
public:
00230 DrIntegerOption();
00231 ~DrIntegerOption();
00232
00233
virtual QString valueText();
00234
virtual void setValueText(
const QString& s);
00235
QString fixedVal();
00236
00237
protected:
00238
int m_value;
00239 };
00240
00241
00242
00243
00244
00252
class DrFloatOption :
public DrBase
00253 {
00254
public:
00255 DrFloatOption();
00256 ~DrFloatOption();
00257
00258
virtual QString valueText();
00259
virtual void setValueText(
const QString& s);
00260
QString fixedVal();
00261
00262
protected:
00263
float m_value;
00264 };
00265
00266
00267
00268
00269
00277
class DrListOption :
public DrBase
00278 {
00279
public:
00280 DrListOption();
00281 ~DrListOption();
00282
00283
void addChoice(DrBase *ch) { m_choices.append(ch); }
00284
QPtrList<DrBase>* choices() {
return &m_choices; }
00285 DrBase* currentChoice()
const {
return m_current; }
00286 DrBase* findChoice(
const QString& txt);
00287
void setChoice(
int choicenum);
00288
00289
virtual QString valueText();
00290
virtual QString prettyText();
00291
virtual void setValueText(
const QString& s);
00292
void setOptions(
const QMap<QString,QString>& opts);
00293
void getOptions(
QMap<QString,QString>& opts,
bool incldef =
false);
00294 DriverItem* createItem(DriverItem *parent, DriverItem *after = 0);
00295 DrBase* clone();
00296
00297
protected:
00298
QPtrList<DrBase> m_choices;
00299 DrBase *m_current;
00300 };
00301
00309
class DrBooleanOption :
public DrListOption
00310 {
00311
00312
public:
00313 DrBooleanOption() : DrListOption() { m_type = DrBase::Boolean; }
00314 ~DrBooleanOption() {}
00315 };
00316
00317
00318
00319
00320
00328
class DrConstraint
00329 {
00330
public:
00331 DrConstraint(
const QString& o1,
const QString& o2,
const QString& c1 = QString::null,
const QString& c2 = QString::null);
00332 DrConstraint(
const DrConstraint&);
00333
00334
bool check(DrMain*);
00335
00336
protected:
00337
QString m_opt1, m_opt2;
00338
QString m_choice1, m_choice2;
00339 DrListOption *m_option1, *m_option2;
00340 };
00341
00342
00343
00344
00345
00353
class DrPageSize
00354 {
00355
public:
00356 DrPageSize(
const QString& s,
float width,
float height,
float left,
float bottom,
float right,
float top);
00357 DrPageSize(
const DrPageSize&);
00358
00364
float pageWidth()
const {
return m_width; }
00365
float pageHeight()
const {
return m_height; }
00366
float leftMargin()
const {
return m_left; }
00367
float rightMargin()
const {
return m_right; }
00368
float topMargin()
const {
return m_top; }
00369
float bottomMargin()
const {
return m_bottom; }
00370
QString pageName()
const {
return m_name; }
00371
00372
QSize pageSize() const;
00373
QRect pageRect() const;
00374
QSize margins() const;
00375
00376 protected:
00377
QString m_name;
00378
float m_width, m_height, m_left, m_bottom, m_right, m_top;
00379 };
00380
00381 #endif