libkdepim

kprefsdialog.h

00001 /*
00002     This file is part of libkdepim.
00003 
00004     Copyright (c) 2001-2003 Cornelius Schumacher <schumacher@kde.org>
00005     Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
00006     Copyright (C) 2005 Allen Winter <winter@kde.org>
00007 
00008     This library is free software; you can redistribute it and/or
00009     modify it under the terms of the GNU Library General Public
00010     License as published by the Free Software Foundation; either
00011     version 2 of the License, or (at your option) any later version.
00012 
00013     This library is distributed in the hope that it will be useful,
00014     but WITHOUT ANY WARRANTY; without even the implied warranty of
00015     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00016     Library General Public License for more details.
00017 
00018     You should have received a copy of the GNU Library General Public License
00019     along with this library; see the file COPYING.LIB.  If not, write to
00020     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00021     Boston, MA 02110-1301, USA.
00022 */
00023 #ifndef KPREFSDIALOG_H
00024 #define KPREFSDIALOG_H
00025 
00026 #include <qptrlist.h>
00027 #include <qlineedit.h>
00028 #include <qvaluelist.h>
00029 #include <qdatetimeedit.h>
00030 
00031 #include <kdialogbase.h>
00032 #include <kcmodule.h>
00033 #include <kconfigskeleton.h>
00034 #include <kfile.h>
00035 #include <kdepimmacros.h>
00036 
00037 
00038 class KColorButton;
00039 class QCheckBox;
00040 class QComboBox;
00041 class QLabel;
00042 class QSpinBox;
00043 class QButtonGroup;
00044 class QTimeEdit;
00045 class KTimeEdit;
00046 class KDateEdit;
00047 class KURLRequester;
00048 
00058 class KDE_EXPORT KPrefsWid : public QObject
00059 {
00060     Q_OBJECT
00061   public:
00066     virtual void readConfig() = 0;
00071     virtual void writeConfig() = 0;
00072 
00076     virtual QValueList<QWidget *> widgets() const;
00077 
00078   signals:
00082     void changed();
00083 };
00084 
00091 class KDE_EXPORT KPrefsWidBool : public KPrefsWid
00092 {
00093   public:
00100     KPrefsWidBool( KConfigSkeleton::ItemBool *item, QWidget *parent );
00101 
00105     QCheckBox *checkBox();
00106 
00107     void readConfig();
00108     void writeConfig();
00109 
00110     QValueList<QWidget *> widgets() const;
00111 
00112   private:
00113     KConfigSkeleton::ItemBool *mItem;
00114 
00115     QCheckBox *mCheck;
00116 };
00117 
00125 class KDE_EXPORT KPrefsWidInt : public KPrefsWid
00126 {
00127   public:
00135     KPrefsWidInt( KConfigSkeleton::ItemInt *item, QWidget *parent );
00136 
00140     QLabel *label();
00141 
00145     QSpinBox *spinBox();
00146 
00147     void readConfig();
00148     void writeConfig();
00149 
00150     QValueList<QWidget *> widgets() const;
00151 
00152   private:
00153     KConfigSkeleton::ItemInt *mItem;
00154 
00155     QLabel *mLabel;
00156     QSpinBox *mSpin;
00157 };
00158 
00166 class KDE_EXPORT KPrefsWidTime : public KPrefsWid
00167 {
00168   public:
00175     KPrefsWidTime( KConfigSkeleton::ItemDateTime *item, QWidget *parent );
00176 
00180     QLabel *label();
00184     KTimeEdit *timeEdit();
00185 
00186     void readConfig();
00187     void writeConfig();
00188 
00189   private:
00190     KConfigSkeleton::ItemDateTime *mItem;
00191 
00192     QLabel *mLabel;
00193     KTimeEdit *mTimeEdit;
00194 };
00195 
00203 class KDE_EXPORT KPrefsWidDuration : public KPrefsWid
00204 {
00205   public:
00213     KPrefsWidDuration( KConfigSkeleton::ItemDateTime *item, QWidget *parent );
00214 
00218     QLabel *label();
00222     QTimeEdit *timeEdit();
00223 
00224     void readConfig();
00225     void writeConfig();
00226 
00227   private:
00228     KConfigSkeleton::ItemDateTime *mItem;
00229 
00230     QLabel *mLabel;
00231     QTimeEdit *mTimeEdit;
00232 };
00233 
00241 class KDE_EXPORT KPrefsWidDate : public KPrefsWid
00242 {
00243   public:
00250     KPrefsWidDate( KConfigSkeleton::ItemDateTime *item, QWidget *parent );
00251 
00255     QLabel *label();
00259     KDateEdit *dateEdit();
00260 
00261     void readConfig();
00262     void writeConfig();
00263 
00264   private:
00265     KConfigSkeleton::ItemDateTime *mItem;
00266 
00267     QLabel *mLabel;
00268     KDateEdit *mDateEdit;
00269 };
00270 
00278 class KDE_EXPORT KPrefsWidColor : public KPrefsWid
00279 {
00280     Q_OBJECT
00281   public:
00289     KPrefsWidColor( KConfigSkeleton::ItemColor *item, QWidget *parent );
00293     ~KPrefsWidColor();
00294 
00298     QLabel *label();
00302     KColorButton *button();
00303 
00304     void readConfig();
00305     void writeConfig();
00306 
00307   private:
00308     KConfigSkeleton::ItemColor *mItem;
00309 
00310     QLabel *mLabel;
00311     KColorButton *mButton;
00312 };
00313 
00320 class KDE_EXPORT KPrefsWidFont : public KPrefsWid
00321 {
00322     Q_OBJECT
00323   public:
00332     KPrefsWidFont( KConfigSkeleton::ItemFont *item,
00333                    QWidget *parent, const QString &sampleText );
00337     ~KPrefsWidFont();
00338 
00342     QLabel *label();
00346     QFrame *preview();
00350     QPushButton *button();
00351 
00352     void readConfig();
00353     void writeConfig();
00354 
00355   protected slots:
00356     void selectFont();
00357 
00358   private:
00359     KConfigSkeleton::ItemFont *mItem;
00360 
00361     QLabel *mLabel;
00362     QLabel *mPreview;
00363     QPushButton *mButton;
00364 };
00365 
00377 class KDE_EXPORT KPrefsWidRadios : public KPrefsWid
00378 {
00379   public:
00387     KPrefsWidRadios( KConfigSkeleton::ItemEnum *item, QWidget *parent );
00388     virtual ~KPrefsWidRadios();
00389 
00396     void addRadio( const QString &text,
00397                    const QString &whatsThis = QString::null );
00398 
00402     QButtonGroup *groupBox();
00403 
00404     void readConfig();
00405     void writeConfig();
00406 
00407     QValueList<QWidget *> widgets() const;
00408 
00409   private:
00410     KConfigSkeleton::ItemEnum *mItem;
00411 
00412     QButtonGroup *mBox;
00413 };
00414 
00425 class KDE_EXPORT KPrefsWidCombo : public KPrefsWid
00426 {
00427   public:
00435     KPrefsWidCombo( KConfigSkeleton::ItemEnum *item, QWidget *parent );
00436     virtual ~KPrefsWidCombo();
00437 
00438     void readConfig();
00439     void writeConfig();
00440 
00441     QComboBox *comboBox();
00442     QValueList<QWidget *> widgets() const;
00443 
00444   private:
00445     KConfigSkeleton::ItemEnum *mItem;
00446     QComboBox *mCombo;
00447 };
00448 
00449 
00450 
00458 class KDE_EXPORT KPrefsWidString : public KPrefsWid
00459 {
00460   public:
00469     KPrefsWidString( KConfigSkeleton::ItemString *item, QWidget *parent,
00470                      QLineEdit::EchoMode echomode=QLineEdit::Normal );
00474     virtual ~KPrefsWidString();
00475 
00479     QLabel *label();
00483     QLineEdit *lineEdit();
00484 
00485     void readConfig();
00486     void writeConfig();
00487 
00488     QValueList<QWidget *> widgets() const;
00489 
00490   private:
00491     KConfigSkeleton::ItemString *mItem;
00492 
00493     QLabel *mLabel;
00494     QLineEdit *mEdit;
00495 };
00496 
00497 
00505 class KDE_EXPORT KPrefsWidPath : public KPrefsWid
00506 {
00507   public:
00517     KPrefsWidPath( KConfigSkeleton::ItemPath *item, QWidget *parent,
00518                    const QString &filter = QString::null, uint mode = KFile::File );
00522     virtual ~KPrefsWidPath();
00523 
00527     QLabel *label();
00531     KURLRequester *urlRequester();
00532 
00533     void readConfig();
00534     void writeConfig();
00535 
00536     QValueList<QWidget *> widgets() const;
00537 
00538   private:
00539     KConfigSkeleton::ItemPath *mItem;
00540 
00541     QLabel *mLabel;
00542     KURLRequester *mURLRequester;
00543 };
00544 
00545 
00554 class KDE_EXPORT KPrefsWidManager
00555 {
00556   public:
00562     KPrefsWidManager( KConfigSkeleton *prefs );
00566     virtual ~KPrefsWidManager();
00567 
00568     KConfigSkeleton *prefs() const { return mPrefs; }
00569 
00573     virtual void addWid( KPrefsWid * );
00574 
00581     KPrefsWidBool *addWidBool( KConfigSkeleton::ItemBool *item,
00582                                QWidget *parent );
00583 
00590     KPrefsWidInt *addWidInt( KConfigSkeleton::ItemInt *item,
00591                              QWidget *parent );
00592 
00599     KPrefsWidDate *addWidDate( KConfigSkeleton::ItemDateTime *item,
00600                                QWidget *parent );
00601 
00608     KPrefsWidTime *addWidTime( KConfigSkeleton::ItemDateTime *item,
00609                                QWidget *parent );
00610 
00617     KPrefsWidDuration *addWidDuration( KConfigSkeleton::ItemDateTime *item,
00618                                        QWidget *parent );
00619 
00626     KPrefsWidColor *addWidColor( KConfigSkeleton::ItemColor *item,
00627                                  QWidget *parent );
00628 
00636     KPrefsWidRadios *addWidRadios( KConfigSkeleton::ItemEnum *item,
00637                                    QWidget *parent );
00638 
00646     KPrefsWidCombo *addWidCombo( KConfigSkeleton::ItemEnum *item,
00647                                    QWidget *parent );
00648 
00655     KPrefsWidString *addWidString( KConfigSkeleton::ItemString *item,
00656                                    QWidget *parent );
00657 
00666     KPrefsWidPath *addWidPath ( KConfigSkeleton::ItemPath *item, QWidget *parent,
00667                                 const QString &filter = QString::null,
00668                                 uint mode = KFile::File );
00669 
00676     KPrefsWidString *addWidPassword ( KConfigSkeleton::ItemString *item,
00677                                       QWidget *parent );
00678 
00687     KPrefsWidFont *addWidFont( KConfigSkeleton::ItemFont *item,
00688                                QWidget *parent, const QString &sampleText );
00689 
00691     void setWidDefaults();
00692 
00694     void readWidConfig();
00695 
00697     void writeWidConfig();
00698 
00699   private:
00700     KConfigSkeleton *mPrefs;
00701 
00702     QPtrList<KPrefsWid> mPrefsWids;
00703 };
00704 
00705 
00718 class KDE_EXPORT KPrefsDialog : public KDialogBase, public KPrefsWidManager
00719 {
00720     Q_OBJECT
00721   public:
00730     KPrefsDialog( KConfigSkeleton *prefs, QWidget *parent = 0, char *name = 0,
00731                   bool modal = false );
00735     virtual ~KPrefsDialog();
00736 
00737     void autoCreate();
00738 
00739   public slots:
00741     void setDefaults();
00742 
00744     void readConfig();
00745 
00747     void writeConfig();
00748 
00749   signals:
00751     void configChanged();
00752 
00753   protected slots:
00755     void slotApply();
00756 
00758     void slotOk();
00759 
00761     void slotDefault();
00762 
00763   protected:
00765     virtual void usrReadConfig() {}
00767     virtual void usrWriteConfig() {}
00768 };
00769 
00770 
00771 class KDE_EXPORT KPrefsModule : public KCModule, public KPrefsWidManager
00772 {
00773     Q_OBJECT
00774   public:
00775     KPrefsModule( KConfigSkeleton *, QWidget *parent = 0, const char *name = 0 );
00776 
00777     virtual void addWid( KPrefsWid * );
00778 
00779     void load();
00780     void save();
00781     void defaults();
00782 
00783   protected slots:
00784     void slotWidChanged();
00785 
00786   protected:
00788     virtual void usrReadConfig() {}
00790     virtual void usrWriteConfig() {}
00791 };
00792 
00793 #endif