You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdepim/korn/maildrop.h

457 lines
15 KiB

/*
* maildrop.h -- Declaration of class KMailDrop.
* Generated by newclass on Sat Nov 29 20:07:45 EST 1997.
*/
#ifndef SSK_MAILDROP_H
#define SSK_MAILDROP_H
#include<qobject.h>
#include<qstring.h>
#include<qcolor.h>
#include<qvaluevector.h>
#include <qptrlist.h>
class Protocol;
class KConfigBase;
class KConfigGroup;
class KDropCfgDialog;
class QColor;
class KornMailSubject;
class KornMailId;
template< class T, class R > class QMap;
/**
* Abstract base class for all mailbox monitors.
* @author Sirtaj Singh Kang (taj@kde.org)
* @version $Id$
*/
class KMailDrop : public QObject
{
Q_OBJECT
public:
enum Style { Plain, Colour, Icon };
private:
QString _caption;
QString _clickCmd;
QString _nMailCmd;
QString _soundFile;
Style _style;
QColor _bgColour;
QColor _fgColour;
QColor _nbgColour;
QColor _nfgColour;
QString _icon;
QString _nIcon;
int _lastCount;
QString _realName;
bool _passivePopup;
bool _passiveDate;
public:
static const char *TypeConfigKey;
static const char *CaptionConfigKey;
static const char *ClickConfigKey;
static const char *NewMailConfigKey;
static const char *SoundFileConfigKey;
static const char *DisplayStyleConfigKey;
static const char *NFgColourConfigKey;
static const char *NBgColourConfigKey;
static const char *FgColourConfigKey;
static const char *BgColourConfigKey;
static const char *IconConfigKey;
static const char *NewMailIconConfigKey;
static const char *ResetCounterConfigKey;
static const char *PassivePopupConfigKey;
static const char *PassiveDateConfigKey; //Enabled date in Passive popup
static const char *UseBoxSettingsConfigKey;
static const char *RealNameConfigKey;
/**
* KMailDrop Constructor
*/
KMailDrop();
/**
* KMailDrop Destructor
*/
virtual ~KMailDrop();
/**
* @return TRUE if the mailbox and its configuration are valid.
*/
virtual bool valid() = 0;
/**
* Number of messages in the mailbox at the last count.
* @return The number of messages in the mailbox since last count.
*/
int count() {return _lastCount;};
/**
* Recheck the number of letters in this mailbox. Raises the
* changed(int) signal if new mail is found.
*
* Concrete subclasses MUST reimplement this method.
*/
virtual void recheck()=0;
/**
* Force a recheck
*/
virtual void forceRecheck() { recheck(); }
/**
*/
virtual bool startMonitor()=0;
/**
*/
virtual bool stopMonitor()=0;
/**
* Check monitor run status.
* @return true if monitor is running.
*/
virtual bool running()=0;
/**
* Add a configuration page to the configuration dialog.
* Each reimplementation should first call the inherited implementation,
* then call @ref KDropCfgDialog::addConfigPage with a custom
* @ref KMonitorCfg object.
*/
// virtual void addConfigPage( KDropCfgDialog * );
/**
* Returns a newly created KBoxFactory object initialized to
* be equivalent to this object (prototype pattern).
*
* Deletion of the returned object becomes the responsibility of
* the caller.
*
* Subclasses should override this to return objects of their
* own type.
*/
virtual KMailDrop *clone() const = 0;
/**
* This function reads the settings which can be used by several
* accounts. These values can be overwritten by the readConfigGroup
* -function.
*
*@param cfg A configuration object with the group already
* set to the configuration for this box
*/
virtual void readGeneralConfigGroup( const KConfigBase& cfg );
/**
* Read box configuration from a config group. Subclasses that
* reimplement this should call the overridden method.
*
* @param cfg A configuration object with the group already set to
* the configuration for this box.
* @return true if read was successful, false otherwise.
*/
virtual bool readConfigGroup( const KConfigBase& cfg );
virtual bool readConfigGroup( const QMap< QString, QString > &, const Protocol * ) { return true; }
/**
* Write box configuration to a config group. Subclasses that
* reimplement this should call the overridden method.
*
* @param cfg A configuration object with the group already set to
* the configuration for this box.
* @return true if read was successful, false otherwise.
*/
virtual bool writeConfigGroup( KConfigBase& cfg ) const;
/**
* Return the type of this monitor, for display and
* configuration purposes. Each concrete subclass should return a
* unique identifier.
*/
virtual QString type() const = 0;
/**
* Return if the maildrop is synchrone (true) or asynchrone (false).
* This way, classes like KornSubjectDlg know if functions like
* readSubject() return a result immediately.
* @param true by a synchrone type; false by an asynchrone (like KKkioDrop) type.
*/
virtual bool synchrone() const { return true; }
/**
* Return true if the concrete subclass can read the subjects of
* all new mails. This will enable the "Read Subjects" menu item.
*/
virtual bool canReadSubjects() {return false;}
/**
* Read the subjects of all new mails.
* NOTE: the default implementation stops the timer, calls
* doReadSubjects, restarts the time if necessary and updates
* the displayed mail count. Concrete implementations should not
* touch readSubjects() but implement doReadSubjects() instead!
* @param stop: stop flag. If it is set to true during the execution,
* readSubjects shoulkd return as soon as possible. The return value
* is invalid in this case. If stop is 0, readSubjects will not
* terminate before all mail subjects are loaded.
* @return all new mails subjects as a vector.
*/
virtual QValueVector<KornMailSubject> * readSubjects(bool * stop);
/**
* Read the subjects of all new mails. The concrete subclass has
* to implement it, if canReadSubjects() returns true.
* @param stop: stop flag. If it is set to true during the execution,
* readSubjects should return as soon as possible. The return value
* is invalid in this case. If stop is 0, readSubjects will not
* terminate before all mail subjects are loaded.
* @return all new mails subjects as a vector.
*/
virtual QValueVector<KornMailSubject> * doReadSubjects(bool * stop);
/**
* Return true if the concrete subclass can delete individual mails.
* This will enable the "Delete" button in the mail subjects dialog.
*/
virtual bool canDeleteMails() {return false;}
/**
* Delete some mails in the mailbox. The concrete subclass has
* to implement it, if canDeleteMails() returns true.
* @param ids list of mail ids to delete. The ids are taken from
* the corresponding KornMailSubject instances returned by a previous
* call to doReadSubjects().
* @param stop: stop flag. If it is set to true during the execution,
* deleteMails() should return as soon as possible. The return value
* is invalid in this case. If stop is 0, deleteMails() will not
* terminate before the mails are deleted.
* @return true, if the mail ids of the remaining mails might have changed.
* The corresponding KornMailSubject instances returned by a previous
* call to doReadSubjects() have to be discarded and readSubjects() must
* be called again to get the correct mail ids. If false is returned,
* the KornMailSubject instances of the remaining mails might be used
* further more.
*/
virtual bool deleteMails(QPtrList<const KornMailId> * ids, bool * stop);
/**
* Return true if the concrete subclass can load individual mails fully.
* This will enable the "Full Message" button in the mail dialog.
*/
virtual bool canReadMail() {return false;}
/**
* Load a mail from the mailbox fulle . The concrete subclass has
* to implement it, if deleteMails() returns true.
* @param id id of the mail to load. The id is taken from the corresponding
* KornMailSubject instances returned by a previous call to doReadSubjects().
* @param stop: stop flag. If it is set to true during the execution,
* readMail() should return as soon as possible. The return value
* is invalid in this case. If stop is 0, readMail() will not
* terminate before the mail is loaded.
* @return the fully loaded mail (header and body) or "" on error.
*/
virtual QString readMail(const KornMailId * id, bool * stop);
// data that belongs in every monitor
QString caption() const { return _caption; }
QString clickCmd() const { return _clickCmd; }
QString newMailCmd() const { return _nMailCmd; }
QString soundFile() const { return _soundFile;}
QColor bgColour() const { return _bgColour; }
QColor fgColour() const { return _fgColour; }
QColor newBgColour() const { return _nbgColour; }
QColor newFgColour() const { return _nfgColour; }
QString icon() const { return _icon; }
QString newIcon() const { return _nIcon; }
Style displayStyle() const { return _style; }
bool passivePopup() const { return _passivePopup; }
bool passiveDate() const { return _passiveDate; }
QString realName() const { return _realName; }
;
void setCaption(QString);
void setClickCmd(QString);
void setNewMailCmd(QString);
void setSoundFile(QString);
void setDisplayStyle(Style);
void setBgColour(QColor);
void setFgColour(QColor);
void setNewBgColour(QColor);
void setNewFgColour(QColor);
void setIcon(QString);
void setNewIcon(QString);
void setResetCounter(int);
void setPassivePopup(bool);
void setPassiveDate(bool);
void setRealName(QString);
/**
* This is called by the manager when it wishes to delete
* a monitor. Clients should connect to the @ref ::notifyDisconnect
* signal and ensure that the monitor is not accessed after
* the signal has been received.
*
* Reimplementations should call this implementation too.
*/
virtual void notifyClients();
public slots:
/**
* Forcibly set the count to zero;
*/
virtual void forceCountZero();
/*
* The next slots are used by kio; the present at this places
* prevent warnings at runtime.
*/
virtual void readSubjectsCanceled() {}
virtual void readMailCanceled() {}
virtual void deleteMailsCanceled() {}
protected slots:
void setCount( int, KMailDrop* );
signals:
/**
* This signal is emitted when the mailbox discovers
* new messages in the maildrop.
*/
void changed( int, KMailDrop* );
/**
* This signal is emitted when the valid-status changes.
* @param isValid true then and only then if the box is valid
*/
void validChanged( bool isValid );
/**
* This is emitted on configuration change, normally
* on an updateConfig() but
*/
void configChanged();
/**
* Clients should connect to this and discontinue use
* after it is emitted.
*/
void notifyDisconnect();
/**
* rechecked() is called if an asynchrone maildrop has
* rechecked the availability of email.
*/
void rechecked();
/**
* The next signal is emitted when a passive popup could be displayed.
* As argument, there is a KornSubject, which contains a subject and
* some more info that could be used with the popup.
*/
void showPassivePopup( QPtrList< KornMailSubject >*, int, bool, const QString& realname );
/**
* This signal is emitted when a passive error message should be displayed.
*
* @param error The error message
* @param realName The real name of this object.
*/
void showPassivePopup( const QString& error, const QString& realname );
/**
* readSubjects() might signal readSubject() if
* an subject is received. This is only useful in
* asynchrone situations.
* @param the subject structure which is read
*/
void readSubject( KornMailSubject * );
/**
* readSubjects() might signal readSubjectsTotalSteps() to
* send the expected total number of steps to a possible
* progress bar. See readSubjectsProgress();
* @param totalSteps expected total number of steps.
*/
void readSubjectsTotalSteps(int totalSteps);
/**
* readSubjects() might signal readSubjectsProgress() to
* send the current progress in relation to the
* expected total number of steps (see readSubjectsTotalSteps()).
* @param curent progress.
*/
void readSubjectsProgress(int progress);
/**
* readSubjects() might signal readSubjectsReady() to
* remove the progress bar in asynchrone situations.
* @param: true if succes, false if cancelled
*/
void readSubjectsReady( bool success );
/**
* deleteMails() might signal deleteMailsTotalSteps() to
* send the expected total number of steps to a possible
* progress bar. See deleteMailsProgress();
* @param totalSteps expected total number of steps.
*/
void deleteMailsTotalSteps(int totalSteps);
/**
* deleteMails() might signal deleteMailsProgress() to
* send the current progress in relation to the
* expected total number of steps (see deleteMailsTotalSteps()).
* @param curent progress.
*/
void deleteMailsProgress(int progress);
/**
* deleteMails() might signal deleteMailsReady() if
* it is not going to do something anyway.
* This could be the case when an email has been succesfully
* removed, or when the deletions failed. This is useful
* in asynchrone situations.
* @param: true if deletion was succesful; elsewise false.
*/
void deleteMailsReady( bool );
/**
* readMail() might signal readMailTotalSteps() to
* send the expected total number of steps to a possible
* progress bar. See readMailProgress();
* @param totalSteps expected total number of steps.
*/
void readMailTotalSteps(int totalSteps);
/**
* readMail() might signal readMailProgress() to
* send the current progress in relation to the
* expected total number of steps (see readMailTotalSteps()).
* @param curent progress.
*/
void readMailProgress(int progress);
/**
* readMail() might signal readMailReady() if
* a email is totally read. This is useful
* in asynchrone situations.
* @param pointer to the full email-message.
*/
void readMailReady( QString* );
};
#endif // SSK_MAILDROP_H