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/knode/knconfig.h

567 lines
16 KiB

/*
KNode, the KDE newsreader
Copyright (c) 1999-2005 the KNode authors.
See file AUTHORS for details
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; either version 2 of the License, or
(at your option) any later version.
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, US
*/
#ifndef KNCONFIG_H
#define KNCONFIG_H
#include <qasciidict.h>
#include <qcolor.h>
#include <qdatetime.h>
#include <qfont.h>
#include <qobject.h>
#include <qpixmap.h>
#include <kconfig.h>
#include <kmime_util.h>
class KScoringRule;
class KProcess;
class KSpellConfig;
namespace Kpgp {
class Config;
}
class KNNntpAccount;
class KNAccountManager;
class KNArticleFilter;
class KNFilterManager;
class KNDisplayedHeader;
class KNServerInfo;
class KNScoringManager;
namespace KNConfig {
class IdentityWidget;
}
namespace KNConfig {
class Base {
public:
Base() : d_irty(false) {}
virtual ~Base() {}
virtual void save() {}
bool dirty()const { return d_irty; }
void setDirty(bool b) { d_irty=b; }
protected:
bool d_irty;
};
class KDE_EXPORT Identity : public QObject, public Base {
Q_OBJECT
friend class IdentityWidget;
public:
Identity(bool g=true);
~Identity();
void loadConfig(KConfigBase *c);
void saveConfig(KConfigBase *c);
void save();
bool isEmpty();
bool isGlobal()const { return g_lobal; }
//personal information
bool hasName() { return (!n_ame.isEmpty()); }
QString name() const { return n_ame; }
void setName(const QString &s) { n_ame=s; }
bool emailIsValid();
bool hasEmail() { return (!e_mail.isEmpty()); }
QString email() { return e_mail; }
void setEmail(const QCString &s) { e_mail=s; }
bool hasReplyTo() { return (!r_eplyTo.isEmpty()); }
QString replyTo() { return r_eplyTo; }
void setReplyTo(const QString &s) { r_eplyTo=s; }
bool hasMailCopiesTo() { return (!m_ailCopiesTo.isEmpty()); }
QString mailCopiesTo() { return m_ailCopiesTo; }
void setMailCopiesTo(const QString &s) { m_ailCopiesTo=s; }
bool hasOrga() { return (!o_rga.isEmpty()); }
QString orga() const { return o_rga; }
void setOrga(const QString &s) { o_rga=s; }
// OpenPGP signing key
bool hasSigningKey() { return (!s_igningKey.isEmpty()); }
QCString signingKey() { return s_igningKey; }
void setSigningKey(const QCString &s) { s_igningKey=s;}
//signature
bool hasSignature() { return ( (u_seSigFile && !s_igPath.isEmpty()) || !s_igText.isEmpty() ); }
bool useSigFile() const { return u_seSigFile; }
bool useSigGenerator()const { return u_seSigGenerator; }
QString sigPath()const { return s_igPath; }
QString sigText()const { return s_igText; }
QString getSignature();
QString getSigGeneratorStdErr() { return s_igStdErr; }
protected slots:
void slotReceiveStdout(KProcess *proc, char *buffer, int buflen);
void slotReceiveStderr(KProcess *proc, char *buffer, int buflen);
protected:
QString n_ame,
e_mail,
o_rga,
r_eplyTo,
m_ailCopiesTo,
s_igText,
s_igContents,
s_igStdErr,
s_igPath;
QCString s_igningKey;
bool u_seSigFile,
u_seSigGenerator,
g_lobal;
};
class KDE_EXPORT Appearance : public Base {
#define COL_CNT 16
#define FNT_CNT 5
#define HEX_CNT 4
#define ICON_CNT 14
friend class AppearanceWidget;
public:
enum ColorIndex { background=0, alternateBackground=1, normalText=2, quoted1=3,
quoted2=4, quoted3=5, url=6, unreadThread=7, readThread=8,
unreadArticle=9, readArticle=10, signOkKeyOk=11, signOkKeyBad=12,
signWarn=13, signErr=14, htmlWarning=15 };
enum FontIndex { article=0, articleFixed=1, composer=2, groupList=3, articleList=4 };
enum IconIndex { greyBall=0, redBall=1, greyBallChkd=2,
redBallChkd=3, newFups=4, eyes=5,
ignore=6, mail=7, posting=8,
canceledPosting=9, savedRemote=10, group=11,
sendErr=12, null=13 };
Appearance();
~Appearance();
void save();
QColor backgroundColor() const;
QColor alternateBackgroundColor() const;
QColor textColor() const;
QColor quoteColor( int depth ) const;
QColor linkColor() const;
QColor unreadThreadColor() const;
QColor readThreadColor() const;
QColor unreadArticleColor() const;
QColor readArticleColor() const;
QColor signOkKeyOkColor() const { return u_seColors ? c_olors[signOkKeyOk] : defaultColor( signOkKeyOk ); }
QColor signOkKeyBadColor() const { return u_seColors ? c_olors[signOkKeyBad] : defaultColor( signOkKeyBad ); }
QColor signWarnColor() const { return u_seColors ? c_olors[signWarn] : defaultColor( signWarn ); }
QColor signErrColor() const { return u_seColors ? c_olors[signErr] : defaultColor( signErr ); }
QColor htmlWarningColor() const { return u_seColors ? c_olors[htmlWarning] : defaultColor( htmlWarning ); }
QFont articleFont() const;
QFont articleFixedFont() const;
QFont composerFont() const;
QFont groupListFont() const;
QFont articleListFont() const;
const QPixmap& icon(IconIndex i) { return i_cons[i]; }
protected:
const QColor& color( int i ) const { return c_olors[i]; }
const QString& colorName( int i ) const { return c_olorNames[i]; }
int colorCount() const { return COL_CNT; }
QColor defaultColor(int i) const;
const QFont& font(int i) const { return f_onts[i]; }
const QString& fontName(int i) const { return f_ontNames[i]; }
int fontCount() const { return FNT_CNT; }
QFont defaultFont(int) const;
void recreateLVIcons();
bool u_seColors,
u_seFonts;
QColor c_olors[COL_CNT];
QString c_olorNames[COL_CNT];
QFont f_onts[FNT_CNT];
QString f_ontNames[FNT_CNT];
QPixmap i_cons[ICON_CNT];
};
class KDE_EXPORT ReadNewsGeneral : public Base {
friend class ReadNewsGeneralWidget;
public:
ReadNewsGeneral();
~ReadNewsGeneral();
void save();
bool autoCheckGroups()const { return a_utoCheck; }
int maxToFetch()const { return m_axFetch; }
bool autoMark()const { return a_utoMark; }
int autoMarkSeconds()const { return m_arkSecs; }
bool markCrossposts()const { return m_arkCrossposts; }
bool smartScrolling()const { return s_martScrolling; }
bool totalExpandThreads()const { return t_otalExpand; }
bool defaultToExpandedThreads()const { return d_efaultExpand; }
bool showLines()const { return s_howLines; }
bool showScore()const { return s_howScore; }
bool showUnread()const { return s_howUnread; }
int collCacheSize()const { return c_ollCacheSize; }
int artCacheSize()const { return a_rtCacheSize; }
bool showThreads()const { return s_howThreads; }
void setShowThreads(bool b) { d_irty=true; s_howThreads=b;}
KMime::DateFormatter::FormatType dateFormat() const { return mDateFormat; }
QString dateCustomFormat() const { return mDateCustomFormat; }
void setShowLines( bool show ) { d_irty = true; s_howLines = show; }
void setShowScore( bool show ) { d_irty = true; s_howScore = show; }
protected:
bool a_utoCheck,
a_utoMark,
m_arkCrossposts,
s_martScrolling,
t_otalExpand,
d_efaultExpand,
s_howLines,
s_howScore,
s_howUnread,
s_howThreads;
int m_axFetch,
m_arkSecs,
c_ollCacheSize,
a_rtCacheSize;
KMime::DateFormatter::FormatType mDateFormat;
QString mDateCustomFormat;
};
class KDE_EXPORT ReadNewsNavigation : public Base {
friend class ReadNewsNavigationWidget;
public:
ReadNewsNavigation();
~ReadNewsNavigation();
void save();
bool markAllReadGoNext()const { return m_arkAllReadGoNext; }
bool markThreadReadGoNext() const { return m_arkThreadReadGoNext; }
bool markThreadReadCloseThread()const { return m_arkThreadReadCloseThread; }
bool ignoreThreadGoNext()const { return i_gnoreThreadGoNext; }
bool ignoreThreadCloseThread()const { return i_gnoreThreadCloseThread; }
bool leaveGroupMarkAsRead() const { return mLeaveGroupMarkAsRead; }
protected:
bool m_arkAllReadGoNext,
m_arkThreadReadGoNext,
m_arkThreadReadCloseThread,
i_gnoreThreadGoNext,
i_gnoreThreadCloseThread,
mLeaveGroupMarkAsRead;
};
class KDE_EXPORT ReadNewsViewer : public Base {
friend class ReadNewsViewerWidget;
public:
ReadNewsViewer();
~ReadNewsViewer();
void save();
bool rewrapBody()const { return r_ewrapBody; }
bool removeTrailingNewlines()const { return r_emoveTrailingNewlines; }
bool showSignature()const { return s_howSig; }
bool interpretFormatTags()const { return i_nterpretFormatTags; }
void setInterpretFormatTags( bool f ) { d_irty = true; i_nterpretFormatTags = f; }
QString quoteCharacters()const { return q_uoteCharacters; }
bool openAttachmentsOnClick()const { return o_penAtt; }
bool showAlternativeContents()const { return s_howAlts; }
bool useFixedFont() const { return u_seFixedFont; }
void setUseFixedFont(bool b) { d_irty = true; u_seFixedFont=b; }
bool showRefBar() const { return mShowRefBar; }
void setShowRefBar( bool b ) { d_irty = true; mShowRefBar = b; }
bool alwaysShowHTML() const { return mAlwaysShowHTML; }
void setAlwaysShowHTML( bool b ) { d_irty = true; mAlwaysShowHTML = b; }
protected:
bool r_ewrapBody,
r_emoveTrailingNewlines,
s_howSig,
i_nterpretFormatTags,
o_penAtt,
s_howAlts,
u_seFixedFont,
mShowRefBar,
mAlwaysShowHTML;
QString q_uoteCharacters;
};
class KDE_EXPORT DisplayedHeaders : public Base
{
public:
DisplayedHeaders();
~DisplayedHeaders();
void save();
KNDisplayedHeader* createNewHeader();
void remove(KNDisplayedHeader *h);
void up(KNDisplayedHeader *h);
void down(KNDisplayedHeader *h);
QValueList<KNDisplayedHeader*> headers() const { return mHeaderList; }
protected:
QValueList<KNDisplayedHeader*> mHeaderList;
};
class KDE_EXPORT Scoring : public Base {
friend class ScoringWidget;
public:
Scoring();
~Scoring();
void save();
int ignoredThreshold() { return i_gnoredThreshold; }
int watchedThreshold() { return w_atchedThreshold; }
protected:
int i_gnoredThreshold,
w_atchedThreshold;
};
class KDE_EXPORT XHeader {
public:
XHeader() {}
XHeader(const QString &s);
XHeader(const XHeader &s) { n_ame=s.n_ame; v_alue=s.v_alue; }
~XHeader() {}
XHeader& operator=(const XHeader &s) { n_ame=s.n_ame; v_alue=s.v_alue; return (*this); }
QCString name() { return n_ame; }
QString value() { return v_alue; }
QString header() { return (QString::fromLatin1(("X-"+n_ame+": "))+v_alue); }
protected:
QCString n_ame;
QString v_alue;
};
typedef QValueList<XHeader> XHeaders;
class KDE_EXPORT PostNewsTechnical : public Base {
friend class PostNewsTechnicalWidget;
friend class SmtpAccountWidget;
public:
PostNewsTechnical();
~PostNewsTechnical();
void save();
QCString charset() const { return c_harset; }
QStringList composerCharsets() { return c_omposerCharsets; }
int indexForCharset(const QCString &str);
QCString findComposerCharset(QCString cs);
bool allow8BitBody() const { return a_llow8BitBody; }
bool useOwnCharset() const { return u_seOwnCharset; }
bool generateMessageID()const { return g_enerateMID; }
QCString hostname()const { return h_ostname; }
XHeaders& xHeaders() { return x_headers; }
bool noUserAgent()const { return d_ontIncludeUA; }
bool useExternalMailer()const { return u_seExternalMailer; }
protected:
QCString c_harset,
h_ostname;
QStringList c_omposerCharsets;
bool a_llow8BitBody,
u_seOwnCharset,
g_enerateMID,
d_ontIncludeUA,
u_seExternalMailer;
XHeaders x_headers;
QAsciiDict<QCString> findComposerCSCache;
};
class PostNewsComposer : public Base {
friend class PostNewsComposerWidget;
public:
PostNewsComposer();
~PostNewsComposer();
void save();
bool wordWrap()const { return w_ordWrap; }
int maxLineLength()const { return m_axLen; }
bool appendOwnSignature()const { return a_ppSig; }
QString intro()const { return i_ntro; }
bool rewrap()const { return r_ewrap; }
bool includeSignature()const { return i_ncSig; }
bool cursorOnTop()const { return c_ursorOnTop; }
QString externalEditor()const { return e_xternalEditor; }
bool useExternalEditor()const { return u_seExtEditor; }
protected:
int m_axLen;
bool w_ordWrap,
a_ppSig,
r_ewrap,
i_ncSig,
c_ursorOnTop,
u_seExtEditor;
QString i_ntro,
e_xternalEditor;
};
//BEGIN: Cleanup configuration -----------------------------------------------
class KDE_EXPORT Cleanup : public Base {
friend class CleanupWidget;
friend class GroupCleanupWidget;
public:
Cleanup( bool global = true );
~Cleanup() {}
void loadConfig( KConfigBase *conf );
void saveConfig( KConfigBase *conf );
void save();
//expire
int maxAgeForRead() const { return r_eadMaxAge; }
int maxAgeForUnread() const { return u_nreadMaxAge; }
bool removeUnavailable() const { return r_emoveUnavailable; }
bool preserveThreads() const { return p_reserveThr; }
bool isGlobal() const { return mGlobal; }
bool useDefault() const { return mDefault; }
bool expireToday();
void setLastExpireDate();
void setUseDefault( bool def ) { mDefault = def; }
//compact
bool compactToday();
void setLastCompactDate();
protected:
bool d_oExpire,
r_emoveUnavailable,
p_reserveThr,
d_oCompact;
int e_xpireInterval,
r_eadMaxAge,
u_nreadMaxAge,
c_ompactInterval;
private:
/** global vs. per account or per group configuration */
bool mGlobal;
/** use default cleanup configuration */
bool mDefault;
/** last expiration and last comapction date */
QDateTime mLastExpDate, mLastCompDate;
};
//END: Cleanup configuration -------------------------------------------------
/*class Cache : public Base {
friend class CacheWidget;
public:
Cache();
~Cache();
void save();
// memory-cache
int memoryMaxArticles() { return m_emMaxArt; }
int memoryMaxKBytes() { return m_emMaxKB; }
// disk-cache
int diskMaxArticles() { return d_iskMaxArt; }
int diskMaxKBytes() { return d_iskMaxKB; }
protected:
int m_emMaxArt,
m_emMaxKB,
d_iskMaxArt,
d_iskMaxKB;
};*/
} //KNConfig
#endif //KNCONFIG_H