00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef kovariable_h
00021 #define kovariable_h
00022
00023 #include <qstring.h>
00024 #include <qdatetime.h>
00025 #include <qasciidict.h>
00026 #include <qptrlist.h>
00027 #include <qmap.h>
00028 #include <qobject.h>
00029 #include <kaction.h>
00030 #include "korichtext.h"
00031 #include <qvariant.h>
00032
00033 class QDomElement;
00034
00035
00036 enum VariableType { VT_NONE = -1,
00037 VT_DATE = 0, VT_DATE_VAR_KWORD10 = 1,
00038 VT_TIME = 2, VT_TIME_VAR_KWORD10 = 3,
00039 VT_PGNUM = 4,
00040 VT_CUSTOM = 6, VT_MAILMERGE = 7, VT_FIELD = 8, VT_LINK = 9,
00041 VT_NOTE = 10, VT_FOOTNOTE = 11,
00042 VT_ALL=256 };
00043
00044 enum VariableFormat { VF_DATE = 0, VF_TIME = 1, VF_STRING = 2, VF_NUM = 3 };
00045
00046 class KoVariable;
00047
00048 class KoVariableSettings
00049 {
00050 public:
00051 KoVariableSettings();
00052 virtual ~KoVariableSettings();
00053
00054
00055
00056 int startingPage()const { return m_startingPageNumber; }
00057 void setStartingPage(int num) { m_startingPageNumber=num; }
00058
00059 int startingPageNumber()const { return startingPage(); }
00060 void setStartingPageNumber(int num) { setStartingPage(num); }
00061
00062 bool displayLink() const{ return m_displayLink; }
00063 void setDisplayLink( bool b) { m_displayLink=b; }
00064
00065 bool underlineLink() const { return m_underlineLink; }
00066 void setUnderlineLink( bool b) { m_underlineLink=b; }
00067
00068 bool displayComment() const { return m_displayComment; }
00069 void setDisplayComment( bool b) { m_displayComment=b; }
00070
00071 bool displayFieldCode() const { return m_displayFieldCode; }
00072 void setDisplayFieldCode( bool b) { m_displayFieldCode=b; }
00073
00074 virtual void save( QDomElement &parentElem );
00075 virtual void load( QDomElement &elem );
00076
00077 QDateTime lastPrintingDate() const;
00078 void setLastPrintingDate( const QDateTime & _date);
00079
00080 QDateTime creationDate() const;
00081 void setCreationDate( const QDateTime & _date);
00082
00083 QDateTime modificationDate() const;
00084 void setModificationDate( const QDateTime & _date);
00085
00086
00087 private:
00088 int m_startingPageNumber;
00089 bool m_displayLink;
00090 bool m_displayComment;
00091 bool m_underlineLink;
00092 bool m_displayFieldCode;
00093 class KoVariableSettingPrivate;
00094 KoVariableSettingPrivate *d;
00095 };
00096
00104 class KoVariableFormat
00105 {
00106 public:
00107 KoVariableFormat() {}
00108 virtual ~KoVariableFormat() {}
00113 virtual QCString key() const = 0;
00119 virtual QCString getKey( const QString& props ) const = 0;
00123 virtual void load( const QCString &key ) = 0;
00127 virtual QString convert(const QVariant& data ) const = 0;
00133 virtual void setFormatProperties( const QString& ) {}
00137 virtual QString formatProperties() const { return QString::null; }
00141 virtual QStringList formatPropsList() const { return QStringList(); }
00145 virtual QStringList translatedFormatPropsList() const { return QStringList(); }
00146 };
00147
00152 class KoVariableDateFormat : public KoVariableFormat
00153 {
00154 public:
00155 KoVariableDateFormat();
00156 virtual QString convert(const QVariant& data ) const;
00157 virtual QCString key() const;
00158 virtual QCString getKey( const QString& props ) const;
00159 virtual void load( const QCString &key );
00160
00162 virtual void setFormatProperties( const QString& props ) {
00163 m_strFormat = props;
00164 }
00166 virtual QString formatProperties() const { return m_strFormat; }
00167
00169 virtual QStringList formatPropsList() const { return staticFormatPropsList(); }
00170
00172 virtual QStringList translatedFormatPropsList() const { return staticTranslatedFormatPropsList(); }
00173
00174 static QStringList staticFormatPropsList();
00175 static QStringList staticTranslatedFormatPropsList();
00176
00177 private:
00178 QString m_strFormat;
00179 };
00180
00184 class KoVariableTimeFormat : public KoVariableFormat
00185 {
00186 public:
00187 KoVariableTimeFormat();
00188 virtual QString convert(const QVariant& data ) const;
00189 virtual QCString key() const;
00190 virtual QCString getKey( const QString& props ) const;
00191 virtual void load( const QCString & );
00192
00194 virtual void setFormatProperties( const QString& props ) {
00195 m_strFormat = props;
00196 }
00198 virtual QString formatProperties() const { return m_strFormat; }
00199
00201 virtual QStringList formatPropsList() const { return staticFormatPropsList(); }
00202
00204 virtual QStringList translatedFormatPropsList() const { return staticTranslatedFormatPropsList(); }
00205
00206 static QStringList staticFormatPropsList();
00207 static QStringList staticTranslatedFormatPropsList();
00208
00209 private:
00210 QString m_strFormat;
00211 };
00212
00216 class KoVariableStringFormat : public KoVariableFormat
00217 {
00218 public:
00219 KoVariableStringFormat() : KoVariableFormat() {}
00220 virtual QString convert(const QVariant& data ) const;
00221 virtual QCString key() const;
00222 virtual QCString getKey( const QString& props ) const;
00223 virtual void load( const QCString & ) {}
00224 };
00225
00226 class KoVariableNumberFormat : public KoVariableFormat
00227 {
00228 public:
00229 KoVariableNumberFormat() : KoVariableFormat() {}
00230 virtual QString convert(const QVariant& data ) const;
00231 virtual QCString key() const;
00232 virtual QCString getKey( const QString& props ) const;
00233 virtual void load( const QCString & ) {}
00234 };
00235
00242 class KoVariableFormatCollection
00243 {
00244 public:
00245 KoVariableFormatCollection();
00246
00250 void clear() { m_dict.clear(); }
00251
00255 KoVariableFormat *format( const QCString &key );
00256
00257
00258
00259 protected:
00260 KoVariableFormat *createFormat( const QCString &key );
00261
00262 private:
00263 QAsciiDict<KoVariableFormat> m_dict;
00264 };
00265
00266 class KoVariable;
00267 class KoVariableFormat;
00268 class KoDocument;
00269 class KoVariableFormatCollection;
00270 class KoTextDocument;
00271 class KoVariableCollection;
00272 class KoVariableCollection : public QObject
00273 {
00274 Q_OBJECT
00275 public:
00276
00277
00278 KoVariableCollection(KoVariableSettings *settings, KoVariableFormatCollection *formatCollection);
00279 ~KoVariableCollection();
00280 void registerVariable( KoVariable *var );
00281 void unregisterVariable( KoVariable *var );
00282 void recalcVariables(int type);
00283 void recalcVariables(KoVariable *var);
00284
00285
00286 void setVariableValue( const QString &name, const QString &value );
00287 QString getVariableValue( const QString &name ) const;
00288
00289 const QPtrList<KoVariable>& getVariables() const {
00290 return variables;
00291 }
00292
00293 bool customVariableExist(const QString &varname)const ;
00294
00295 virtual KoVariable *createVariable( int type, short int subtype, KoVariableFormatCollection * coll, KoVariableFormat *varFormat,KoTextDocument *textdoc, KoDocument * doc, int _correct , bool _forceDefaultFormat=false );
00296
00297 KoVariableSettings *variableSetting() const { return m_variableSettings; }
00298 KoVariableFormatCollection *formatCollection() const { return m_formatCollection; }
00299
00301 void setVariableSelected(KoVariable * var);
00302 KoVariable *selectedVariable()const {return m_varSelected;}
00303
00305 QPtrList<KAction> popupActionList();
00306
00307 signals:
00308 void repaintVariable();
00309
00310 protected slots:
00311
00312 void slotChangeSubType();
00313 void slotChangeFormat();
00314
00315 private:
00316
00317
00318
00319 QPtrList<KoVariable> variables;
00320 QMap< QString, QString > varValues;
00321 KoVariableSettings *m_variableSettings;
00322 KoVariable *m_varSelected;
00323 KoVariableFormatCollection *m_formatCollection;
00324 };
00325
00326
00327
00328
00329 class KoDocument;
00330 class KoVariable;
00331 class QDomElement;
00332 class KoTextFormat;
00333
00338 class KoVariable : public KoTextCustomItem
00339 {
00340 public:
00341 KoVariable( KoTextDocument *fs, KoVariableFormat *varFormat,KoVariableCollection *varColl );
00342 virtual ~KoVariable();
00343
00344 virtual VariableType type() const = 0;
00345 virtual short int subType() const { return 0; }
00346
00347
00348 virtual Placement placement() const { return PlaceInline; }
00349 virtual void resize();
00350 virtual int ascent() const { return m_ascent; }
00351 virtual int widthHint() const { return width; }
00352 virtual int minimumWidth() const { return width; }
00353 virtual void drawCustomItem( QPainter* p, int x, int y, int wpix, int hpix, int ascentpix, int cx, int cy, int cw, int ch, const QColorGroup& cg, bool selected, int offset, bool drawingShadow);
00358 void drawCustomItemHelper( QPainter* p, int x, int y, int wpix, int hpix, int ascentpix, const QColorGroup& cg, bool selected, int offset, KoTextFormat* fmt, const QFont& font, QColor textColor, bool drawingShadow );
00359
00360 void setVariableFormat( KoVariableFormat *_varFormat );
00361
00362 KoVariableFormat *variableFormat() const
00363 { return m_varFormat; }
00364
00365 KoVariableCollection *variableColl() const
00366 { return m_varColl; }
00367
00373 virtual QString text(bool realValue=false);
00374
00375 virtual QString fieldCode();
00376
00378 QVariant varValue() const { return m_varValue; }
00379
00386 void recalcAndRepaint();
00387
00389 void save( QDomElement &parentElem );
00390 virtual void load( QDomElement &elem );
00391
00395 virtual int typeId() const { return 4; }
00396
00398 virtual QStringList subTypeText();
00399
00401 virtual void setVariableSubType( short int ) {}
00402
00406 virtual short int variableSubType(short int menuNumber){ return menuNumber; }
00407
00408 protected:
00410 virtual void saveVariable( QDomElement &parentElem ) = 0;
00411 virtual int correctValue() const { return 0;}
00412
00413 KoVariableFormat *m_varFormat;
00414 KoVariableCollection *m_varColl;
00415 QVariant m_varValue;
00416 int m_ascent;
00417
00418
00419
00420 class Private;
00421 Private *d;
00422 };
00423
00427 class KoDateVariable : public KoVariable
00428 {
00429 public:
00430 KoDateVariable( KoTextDocument *textdoc, short int subtype, KoVariableFormat *_varFormat,KoVariableCollection *_varColl , int _correctDate = 0);
00431
00432 virtual VariableType type() const
00433 { return VT_DATE; }
00434
00435 enum { VST_DATE_FIX = 0, VST_DATE_CURRENT = 1, VST_DATE_LAST_PRINTING = 2, VST_DATE_CREATE_FILE = 3, VST_DATE_MODIFY_FILE =4 };
00436 static QStringList actionTexts();
00437
00438 virtual void recalc();
00439 virtual QString fieldCode();
00440 virtual void resize();
00441 void setDate( const QDate & _date ) { m_varValue = QVariant(_date); }
00442
00443 virtual void saveVariable( QDomElement &parentElem );
00444 virtual int correctValue() const { return m_correctDate;}
00445 virtual void load( QDomElement &elem );
00446 virtual QStringList subTypeText();
00448 virtual void setVariableSubType( short int subtype )
00449 { m_subtype = subtype; }
00450 virtual short int subType() const { return m_subtype; }
00454 static QCString formatStr( int & correct );
00458 static QCString defaultFormat();
00459
00460 protected:
00461 short int m_subtype;
00462 int m_correctDate;
00463 };
00464
00468 class KoTimeVariable : public KoVariable
00469 {
00470 public:
00471 KoTimeVariable( KoTextDocument *textdoc, short int subtype, KoVariableFormat *varFormat, KoVariableCollection *_varColl, int _correct);
00472
00473 virtual VariableType type() const
00474 { return VT_TIME; }
00475
00476 enum { VST_TIME_FIX = 0, VST_TIME_CURRENT = 1 };
00477 static QStringList actionTexts();
00478
00479 virtual void recalc();
00480 virtual void resize();
00481 virtual QString fieldCode();
00482
00483 void setTime( const QTime & _time ) { m_varValue = QVariant(_time); }
00484
00485 virtual void saveVariable( QDomElement &parentElem );
00486 virtual int correctValue() const { return m_correctTime;}
00487 virtual void load( QDomElement &elem );
00488
00489 virtual QStringList subTypeText();
00490 virtual void setVariableSubType( short int subtype )
00491 { m_subtype = subtype; }
00492 virtual short int subType() const { return m_subtype; }
00496 static QCString formatStr(int & _correct);
00500 static QCString defaultFormat();
00501
00502 protected:
00503 short int m_subtype;
00504 int m_correctTime;
00505 };
00506
00507
00512 class KoCustomVariable : public KoVariable
00513 {
00514 public:
00515 KoCustomVariable(KoTextDocument *textdoc , const QString &name, KoVariableFormat *varFormat,KoVariableCollection *_varcoll );
00516
00517 virtual VariableType type() const
00518 { return VT_CUSTOM; }
00519 static QStringList actionTexts();
00520
00521 virtual void saveVariable( QDomElement &parentElem );
00522 virtual void load( QDomElement &elem );
00523
00524 QString name() const { return m_varValue.toString(); }
00525 virtual void recalc();
00526 virtual QString fieldCode();
00527
00528 virtual QString text(bool realValue=false);
00529
00530 QString value() const;
00531 void setValue( const QString &v );
00532
00533 protected:
00534 };
00535
00536
00542 class KoFieldVariable : public KoVariable
00543 {
00544 public:
00545 KoFieldVariable( KoTextDocument *textdoc, short int subtype, KoVariableFormat *varFormat,KoVariableCollection *_varColl, KoDocument *_doc );
00546
00547
00548 enum FieldSubType { VST_NONE = -1,
00549 VST_FILENAME = 0, VST_DIRECTORYNAME = 1,
00550 VST_AUTHORNAME = 2, VST_EMAIL = 3, VST_COMPANYNAME = 4,
00551 VST_PATHFILENAME = 5, VST_FILENAMEWITHOUTEXTENSION=6,
00552 VST_TELEPHONE = 7, VST_FAX = 8, VST_COUNTRY = 9,
00553 VST_TITLE = 10, VST_ABSTRACT = 11,
00554 VST_POSTAL_CODE = 12, VST_CITY = 13, VST_STREET = 14,
00555 VST_AUTHORTITLE = 15, VST_INITIAL = 16};
00556
00557 virtual VariableType type() const
00558 { return VT_FIELD; }
00559
00560 virtual void saveVariable( QDomElement &parentElem );
00561 virtual void load( QDomElement &elem );
00562 virtual QString fieldCode();
00563
00564 virtual void recalc();
00565 virtual QString text(bool realValue=false);
00566
00567 QString value() const { return m_varValue.toString(); }
00568
00569 static QStringList actionTexts();
00573 virtual short int variableSubType( short int menuNumber );
00577 static FieldSubType fieldSubType( short int menuNumber);
00578
00579 virtual QStringList subTypeText();
00580 virtual void setVariableSubType( short int subtype )
00581 { m_subtype = subtype; }
00582 virtual short int subType() const { return m_subtype; }
00583
00584 protected:
00585 short int m_subtype;
00586 KoDocument *m_doc;
00587 };
00588
00589 class KoMailMergeVariable : public KoVariable
00590 {
00591 public:
00592 KoMailMergeVariable( KoTextDocument *textdoc, const QString &name, KoVariableFormat *varFormat, KoVariableCollection *_varColl );
00593
00594 virtual VariableType type() const
00595 { return VT_MAILMERGE; }
00596 static QStringList actionTexts();
00597 virtual QString fieldCode();
00598
00599 virtual void saveVariable( QDomElement &parentElem );
00600 virtual void load( QDomElement &elem );
00601
00602 virtual QString text(bool realValue=false);
00603 QString name() const { return m_varValue.toString(); }
00604 virtual QString value() const;
00605
00606 protected:
00607 };
00608
00615 class KoPgNumVariable : public KoVariable
00616 {
00617 public:
00618 KoPgNumVariable( KoTextDocument *textdoc, short int subtype, KoVariableFormat *varFormat ,KoVariableCollection *_varColl);
00619
00620 virtual VariableType type() const
00621 { return VT_PGNUM; }
00622
00623 enum { VST_PGNUM_CURRENT = 0, VST_PGNUM_TOTAL = 1, VST_CURRENT_SECTION = 2 , VST_PGNUM_PREVIOUS = 3, VST_PGNUM_NEXT = 4 };
00624 static QStringList actionTexts();
00625 virtual QString fieldCode();
00626
00627 virtual QStringList subTypeText();
00628
00629 virtual void setVariableSubType( short int subtype );
00630
00631
00632
00633 void setPgNum( int pgNum ) { m_varValue = QVariant( pgNum); }
00634
00635 void setSectionTitle( const QString& title );
00636
00637 virtual short int subType() const { return m_subtype; }
00638
00639 virtual void recalc() = 0;
00640
00641 virtual void saveVariable( QDomElement &parentElem );
00642 virtual void load( QDomElement &elem );
00643 protected:
00644 short int m_subtype;
00645 };
00646
00647 class KoLinkVariable : public KoVariable
00648 {
00649 public:
00650 KoLinkVariable( KoTextDocument *textdoc, const QString & _linkName, const QString & _ulr,KoVariableFormat *varFormat, KoVariableCollection *_varColl );
00651 virtual void drawCustomItem( QPainter* p, int x, int y, int wpix, int hpix, int ascentpix, int , int , int , int , const QColorGroup& cg, bool selected, int offset, bool drawingShadow );
00652
00653 virtual VariableType type() const
00654 { return VT_LINK; }
00655
00656 static QStringList actionTexts();
00657 virtual QString fieldCode();
00658
00659 virtual void saveVariable( QDomElement &parentElem );
00660 virtual void load( QDomElement &elem );
00661
00662 virtual QString text(bool realValue=false);
00663 QString value() const { return m_varValue.toString(); }
00664 QString url() const { return m_url;}
00665
00666 virtual void recalc();
00667
00668 void setLink(const QString & _linkName, const QString &_url)
00669 {
00670 m_varValue=QVariant(_linkName);
00671 m_url=_url;
00672 }
00673
00674 protected:
00675 QString m_url;
00676 };
00677
00678
00679 class KoNoteVariable : public KoVariable
00680 {
00681 public:
00682 KoNoteVariable( KoTextDocument *textdoc, const QString & _note,KoVariableFormat *varFormat, KoVariableCollection *_varColl );
00683 virtual void drawCustomItem( QPainter* p, int x, int y, int wpix, int hpix, int ascentpix, int , int , int , int , const QColorGroup& cg, bool selected, int offset, bool drawingShadow );
00684
00685 virtual VariableType type() const
00686 { return VT_NOTE; }
00687
00688 static QStringList actionTexts();
00689 virtual QString fieldCode();
00690
00691 virtual void saveVariable( QDomElement &parentElem );
00692 virtual void load( QDomElement &elem );
00693
00694 virtual QString text(bool realValue=false);
00695 QString note() const { return m_varValue.toString(); }
00696 void setNote( const QString & _note) { m_varValue = QVariant(_note); }
00697 virtual void recalc();
00698 };
00699
00700
00701 #endif