/** * 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 TQt library by Trolltech AS, Norway (or with modified versions * of TQt that use the same license as TQt), 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 * TQt. 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 <tqvaluevector.h> class TQCheckBox; class TQPushButton; class TQLineEdit; class TQListBox; class TQComboBox; class KMFolder; class KMFolderTreeItem; class KMFolderDir; class KIntNumInput; class TDEIconButton; class KEditListBox; namespace KPIM { class IdentityCombo; } class KMFolderDialog; class KMFolderTree; template <typename T> class TQGuardedPtr; 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. TDEIO) 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 TQWidget { Q_OBJECT public: FolderDiaTab( TQWidget *parent=0, const char* name=0 ) : TQWidget( 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 AccepStatus { 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 TDEIO job). virtual AccepStatus 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 TQString& aName, TQWidget* parent, const char* name = 0 ); virtual void load(); virtual bool save(); private slots: void slotChangeIcon( TQString icon ); /* * is called if the folder dropdown changes * then we update the other items to reflect the capabilities */ void slotFolderNameChanged( const TQString& ); void slotFolderContentsSelectionChanged( int ); private: void initializeWithValuesFromFolder( KMFolder* folder ); private: TQComboBox *mShowSenderReceiverComboBox; TQComboBox *mContentsComboBox; TQComboBox *mIncidencesForComboBox; TQCheckBox *mAlarmsBlockedCheckBox; TQCheckBox *mSharedSeenFlagsCheckBox; TQLabel *mNormalIconLabel; TDEIconButton *mNormalIconButton; TQLabel *mUnreadIconLabel; TDEIconButton *mUnreadIconButton; TQCheckBox *mIconsCheckBox; TQCheckBox *mNewMailCheckBox; TQCheckBox *mNotifyOnNewMailCheckBox; TQCheckBox *mKeepRepliesInSameFolderCheckBox; KLineEdit *mNameEdit; KPIM::IdentityCombo *mIdentityComboBox; KMFolderDialog* mDlg; bool mIsLocalSystemFolder; bool mIsResourceFolder; }; /** * "Templates" tab in the folder dialog * Internal class, only used by KMFolderDialog */ class FolderDiaTemplatesTab : public FolderDiaTab { Q_OBJECT public: FolderDiaTemplatesTab( KMFolderDialog *dlg, TQWidget *parent ); virtual void load(); virtual bool save(); public slots: void slotEmitChanged(); // do nothing for now void slotCopyGlobal(); private: void initializeWithValuesFromFolder( KMFolder* folder ); private: TQCheckBox* 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 TQString& caption, const TQString& name = TQString() ); 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 TQValueList<TQGuardedPtr<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. TQGuardedPtr<KMFolder> mFolder; TQGuardedPtr<KMFolderDir> mFolderDir; TQGuardedPtr<KMFolder> mParentFolder; bool mIsNewFolder; // if true, save() did set mFolder. TQValueVector<KMail::FolderDiaTab*> mTabs; int mDelayedSavingTabs; // this should go into a base class one day KMFolderTree* mFolderTree; }; #endif /*__KMFOLDERDIA*/