diff options
Diffstat (limited to 'kmail/kmfolderdia.h')
-rw-r--r-- | kmail/kmfolderdia.h | 241 |
1 files changed, 241 insertions, 0 deletions
diff --git a/kmail/kmfolderdia.h b/kmail/kmfolderdia.h new file mode 100644 index 000000000..c1df2b546 --- /dev/null +++ b/kmail/kmfolderdia.h @@ -0,0 +1,241 @@ +// -*- mode: C++; c-file-style: "gnu" -*- +/** + * kmfolderdia.h + * + * Copyright (c) 1997-2004 KMail Developers + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of this program with any edition of + * the Qt library by Trolltech AS, Norway (or with modified versions + * of Qt that use the same license as Qt), and distribute linked + * combinations including the two. You must obey the GNU General + * Public License in all respects for all of the code used other than + * Qt. If you modify this file, you may extend this exception to + * your version of the file, but you are not obligated to do so. If + * you do not wish to do so, delete this exception statement from + * your version. + */ +#ifndef __KMFOLDERDIA +#define __KMFOLDERDIA + +#include <kdialogbase.h> +#include "configuredialog_p.h" +#include <qvaluevector.h> + +class QCheckBox; +class QPushButton; +class QLineEdit; +class QListBox; +class QComboBox; +class KMFolder; +class KMFolderTreeItem; +class KMFolderDir; +class KIntNumInput; +class KIconButton; +class KEditListBox; +namespace KPIM { class IdentityCombo; } +class KMFolderDialog; +class KMFolderTree; +template <typename T> class QGuardedPtr; +class TemplatesConfiguration; +class KPushButton; + +namespace KMail { + class FolderRequester; +/** + * This is the base class for tabs in the folder dialog. + * It uses the API from ConfigModuleTab (basically: it's a widget that can load and save) + * but it also adds support for delayed-saving: + * when save() needs to use async jobs (e.g. KIO) for saving, + * we need to delay the closing until after the jobs are finished, + * and to cancel the saving on error. + * + * Feel free to rename and move this base class somewhere else if it + * can be useful for other dialogs. + */ +class FolderDiaTab : public QWidget +{ + Q_OBJECT +public: + FolderDiaTab( QWidget *parent=0, const char* name=0 ) + : QWidget( parent, name ) {} + + virtual void load() = 0; + + /// Unlike ConfigModuleTab, we return a bool from save. + /// This allows to cancel closing on error. + /// When called from the Apply button, the return value is ignored + /// @return whether save succeeded + virtual bool save() = 0; + + enum AcceptStatus { Accepted, Canceled, Delayed }; + /// Called when clicking OK. + /// If a module returns Delayed, the closing is cancelled for now, + /// and the module can close the dialog later on (i.e. after an async + /// operation like a KIO job). + virtual AcceptStatus accept() { + return save() ? Accepted : Canceled; + } + +signals: + /// Emit this to tell the dialog that you're done with the async jobs, + /// and that the dialog can be closed. + void readyForAccept(); + + /// Emit this, i.e. after a job had an error, to tell the dialog to cancel + /// the closing. + void cancelAccept(); + + /// Called when this module was changed [not really used yet] + void changed(bool); +}; + +/** + * "General" tab in the folder dialog + * Internal class, only used by KMFolderDialog + */ +class FolderDiaGeneralTab : public FolderDiaTab +{ + Q_OBJECT + +public: + FolderDiaGeneralTab( KMFolderDialog* dlg, + const QString& aName, + QWidget* parent, const char* name = 0 ); + + virtual void load(); + virtual bool save(); + +private slots: + void slotChangeIcon( QString icon ); + /* + * is called if the folder dropdown changes + * then we update the other items to reflect the capabilities + */ + void slotFolderNameChanged( const QString& ); + void slotFolderContentsSelectionChanged( int ); + +private: + void initializeWithValuesFromFolder( KMFolder* folder ); + +private: + QComboBox *mShowSenderReceiverComboBox; + QComboBox *mContentsComboBox; + QComboBox *mIncidencesForComboBox; + QCheckBox *mAlarmsBlockedCheckBox; + QLabel *mNormalIconLabel; + KIconButton *mNormalIconButton; + QLabel *mUnreadIconLabel; + KIconButton *mUnreadIconButton; + QCheckBox *mIconsCheckBox; + QCheckBox *mNewMailCheckBox; + QCheckBox *mNotifyOnNewMailCheckBox; + QCheckBox *mKeepRepliesInSameFolderCheckBox; + KLineEdit *mNameEdit; + + KPIM::IdentityCombo *mIdentityComboBox; + + KMFolderDialog* mDlg; + bool mIsLocalSystemFolder; +}; + +/** + * "Templates" tab in the folder dialog + * Internal class, only used by KMFolderDialog + */ +class FolderDiaTemplatesTab : public FolderDiaTab +{ + Q_OBJECT + +public: + FolderDiaTemplatesTab( KMFolderDialog *dlg, QWidget *parent ); + + virtual void load(); + virtual bool save(); + +public slots: + void slotEmitChanged(); // do nothing for now + + void slotCopyGlobal(); + +private: + void initializeWithValuesFromFolder( KMFolder* folder ); + +private: + QCheckBox* mCustom; + TemplatesConfiguration* mWidget; + KPushButton* mCopyGlobal; + KMFolder* mFolder; + uint mIdentity; + + KMFolderDialog* mDlg; + bool mIsLocalSystemFolder; +}; + +} // end of namespace KMail + +/** + * Dialog for handling the properties of a mail folder + */ +class KMFolderDialog : public KDialogBase +{ + Q_OBJECT + +public: + KMFolderDialog( KMFolder *folder, KMFolderDir *aFolderDir, + KMFolderTree* parent, const QString& caption, + const QString& name = QString::null ); + + KMFolder* folder() const { return mFolder; } + void setFolder( KMFolder* folder ); + // Was mFolder just created? (This only makes sense from save()) + // If Apply is clicked, or OK proceeeds half-way, then next time "new folder" will be false. + bool isNewFolder() const { return mIsNewFolder; } + + KMFolderDir* folderDir() const { return mFolderDir; } + typedef QValueList<QGuardedPtr<KMFolder> > FolderList; + + KMFolder* parentFolder() const { return mParentFolder; } + + KMFolderTree* folderTree() const { return mFolderTree; } + +protected slots: + void slotChanged( bool ); + virtual void slotOk(); + virtual void slotApply(); + + void slotReadyForAccept(); + void slotCancelAccept(); + +private: + void addTab( KMail::FolderDiaTab* tab ); + +private: + // Can be 0 initially when creating a folder, but will be set by save() in the first tab. + QGuardedPtr<KMFolder> mFolder; + QGuardedPtr<KMFolderDir> mFolderDir; + QGuardedPtr<KMFolder> mParentFolder; + + bool mIsNewFolder; // if true, save() did set mFolder. + + QValueVector<KMail::FolderDiaTab*> mTabs; + int mDelayedSavingTabs; // this should go into a base class one day + KMFolderTree* mFolderTree; +}; + +#endif /*__KMFOLDERDIA*/ + |