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