summaryrefslogtreecommitdiffstats
path: root/libkpimidentities/identitymanager.h
diff options
context:
space:
mode:
Diffstat (limited to 'libkpimidentities/identitymanager.h')
-rw-r--r--libkpimidentities/identitymanager.h242
1 files changed, 242 insertions, 0 deletions
diff --git a/libkpimidentities/identitymanager.h b/libkpimidentities/identitymanager.h
new file mode 100644
index 000000000..b07ba7434
--- /dev/null
+++ b/libkpimidentities/identitymanager.h
@@ -0,0 +1,242 @@
+/* -*- c++ -*-
+ identitymanager.h
+
+ This file is part of KMail, the KDE mail client.
+ Copyright (c) 2002 Marc Mutz <mutz@kde.org>
+
+ KMail is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License, version 2, as
+ published by the Free Software Foundation.
+
+ KMail 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 _KPIM_IDENTITYMANAGER_H_
+#define _KPIM_IDENTITYMANAGER_H_
+
+#include <libkdepim/configmanager.h>
+
+#include <qvaluelist.h>
+#include <dcopobject.h>
+#include <kdepimmacros.h>
+
+class KConfigBase;
+class KConfig;
+class KMKernel;
+class QStringList;
+class KMIdentity;
+
+namespace KPIM {
+
+class Identity;
+/**
+ * @short Manages the list of identities.
+ * @author Marc Mutz <mutz@kde.org>
+ **/
+#define IdentityManager KDE_EXPORT IdentityManager
+class IdentityManager : public ConfigManager, public DCOPObject
+#undef IdentityManager
+{
+ Q_OBJECT
+ K_DCOP
+
+public:
+ /**
+ * Create an identity manager, which loads the emailidentities file
+ * to create identities.
+ * @param readonly if true, no changes can be made to the identity manager
+ * This means in particular that if there is no identity configured,
+ * the default identity created here will not be saved.
+ */
+ IdentityManager( bool readonly = false, QObject * parent=0, const char * name=0 );
+ virtual ~IdentityManager();
+
+public:
+ typedef QValueList<Identity>::Iterator Iterator;
+ typedef QValueList<Identity>::ConstIterator ConstIterator;
+
+ /** Commit changes to disk and emit changed() if necessary. */
+ void commit();
+ /** Re-read the config from disk and forget changes. */
+ void rollback();
+
+ /** Check whether there are any unsaved changes. */
+ bool hasPendingChanges() const;
+
+ /** @return the list of identities */
+ QStringList identities() const;
+
+ /** Convenience method.
+
+ @return the list of (shadow) identities, ie. the ones currently
+ under configuration.
+ */
+ QStringList shadowIdentities() const;
+
+ /** Sort the identities by name (the default is always first). This
+ operates on the @em shadow list, so you need to @ref commit for
+ the changes to take effect.
+ **/
+ void sort();
+
+ /** @return an identity whose address matches any in @p addresses
+ or @ref Identity::null if no such identity exists.
+ **/
+ const Identity & identityForAddress( const QString & addresses ) const;
+
+ /** @return true if @p addressList contains any of our addresses,
+ false otherwise.
+ @see #identityForAddress
+ **/
+ bool thatIsMe( const QString & addressList ) const;
+
+ /** @deprecated
+ @return the identity named @p identityName or @ref
+ Identity::null if not found.
+ **/
+ const Identity & identityForName( const QString & identityName ) const;
+
+ /** @return the identity with Unique Object Identifier (UOID) @p
+ uoid or @ref Identity::null if not found.
+ **/
+ const Identity & identityForUoid( uint uoid ) const;
+
+ /** @deprecated
+ Convenience method.
+
+ @return the identity named @p identityName or the default
+ identity if not found.
+ **/
+ const Identity & identityForNameOrDefault( const QString & identityName ) const;
+
+ /** Convenience menthod.
+
+ @return the identity with Unique Object Identifier (UOID) @p
+ uoid or the default identity if not found.
+ **/
+ const Identity & identityForUoidOrDefault( uint uoid ) const;
+
+ /** @return the default identity */
+ const Identity & defaultIdentity() const;
+
+ /** @deprecated
+ Sets the identity named @p identityName to be the new default
+ identity. As usual, use @ref commit to make this permanent.
+
+ @return false if an identity named @p identityName was not found
+ **/
+ bool setAsDefault( const QString & identityName );
+
+ /** Sets the identity with Unique Object Identifier (UOID) @p uoid
+ to be new the default identity. As usual, use @ref commit to
+ make this permanent.
+
+ @return false if an identity with UOID @p uoid was not found
+ **/
+ bool setAsDefault( uint uoid );
+
+ /** @return the identity named @p identityName. This method returns a
+ reference to the identity that can be modified. To let others
+ see this change, use @ref commit.
+ **/
+ Identity & modifyIdentityForName( const QString & identityName );
+
+ /** @return the identity with Unique Object Identifier (UOID) @p uoid.
+ This method returns a reference to the identity that can
+ be modified. To let others see this change, use @ref commit.
+ **/
+ Identity & modifyIdentityForUoid( uint uoid );
+
+ /** Removes the identity with name @p identityName */
+ bool removeIdentity( const QString & identityName );
+
+ ConstIterator begin() const;
+ ConstIterator end() const;
+ /// Iterator used by the configuration dialog, which works on a separate list
+ /// of identities, for modification. Changes are made effective by commit().
+ Iterator modifyBegin();
+ Iterator modifyEnd();
+
+ Identity & newFromScratch( const QString & name );
+ Identity & newFromControlCenter( const QString & name );
+ Identity & newFromExisting( const Identity & other,
+ const QString & name=QString::null );
+
+ /** Returns the list of all email addresses (only name@host) from all identities */
+ QStringList allEmails() const;
+
+signals:
+ /** Emitted whenever the identity with Unique Object Identifier
+ (UOID) @p uoid changed. Useful for more fine-grained change
+ notifications than what is possible with the standard @ref
+ changed() signal. */
+ void changed( uint uoid );
+ /** Emitted whenever the identity @p ident changed. Useful for more
+ fine-grained change notifications than what is possible with the
+ standard @ref changed() signal. */
+ void changed( const KPIM::Identity & ident );
+ /** Emitted on @ref commit() for each deleted identity. At the time
+ this signal is emitted, the identity does still exist and can be
+ retrieved by @ref identityForUoid() if needed */
+ void deleted( uint uoid );
+ /** Emitted on @ref commit() for each new identity */
+ void added( const KPIM::Identity & ident );
+
+protected:
+ /**
+ * This is called when no identity has been defined, so we need to create a default one
+ * The parameters are filled with some default values from KUser,
+ * but reimplementations of this method can give them another value.
+ */
+ virtual void createDefaultIdentity( QString& /*fullName*/, QString& /*emailAddress*/ ) {}
+
+protected slots:
+ void slotRollback() { rollback(); };
+
+protected:
+ /** The list that will be seen by everyone */
+ QValueList<Identity> mIdentities;
+ /** The list that will be seen by the config dialog */
+ QValueList<Identity> mShadowIdentities;
+
+//k_dcop_signals:
+// void identitiesChanged( QCString appId, QCString objId );
+
+k_dcop:
+ // Connected to the DCOP signal
+ void slotIdentitiesChanged( QCString appId, QCString objId );
+
+private:
+ void writeConfig() const;
+ void readConfig(KConfigBase* config);
+ QStringList groupList(KConfigBase* config) const;
+ void createDefaultIdentity();
+
+ // returns a new Unique Object Identifier
+ int newUoid();
+
+private:
+ KConfig* mConfig;
+ bool mReadOnly;
+};
+
+} // namespace
+
+#endif // _KMAIL_IDENTITYMANAGER_H_