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