From 460c52653ab0dcca6f19a4f492ed2c5e4e963ab0 Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features. BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdepim@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- libkpimidentities/identitycombo.cpp | 129 ++++++++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 libkpimidentities/identitycombo.cpp (limited to 'libkpimidentities/identitycombo.cpp') diff --git a/libkpimidentities/identitycombo.cpp b/libkpimidentities/identitycombo.cpp new file mode 100644 index 000000000..a7b9cd3ab --- /dev/null +++ b/libkpimidentities/identitycombo.cpp @@ -0,0 +1,129 @@ +/* -*- c++ -*- + identitycombo.cpp + + This file is part of KMail, the KDE mail client. + Copyright (c) 2002 Marc Mutz + + 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. +*/ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include "identitycombo.h" +#include "identity.h" +#include "identitymanager.h" + +#include + +#include + +using namespace KPIM; + +IdentityCombo::IdentityCombo( IdentityManager* manager, QWidget * parent, const char * name ) + : QComboBox( false, parent, name ), mIdentityManager( manager ) +{ + reloadCombo(); + reloadUoidList(); + connect( this, SIGNAL(activated(int)), SLOT(slotEmitChanged(int)) ); + connect( manager, SIGNAL(changed()), + SLOT(slotIdentityManagerChanged()) ); +} + +QString IdentityCombo::currentIdentityName() const { + return mIdentityManager->identities()[ currentItem() ]; +} + +uint IdentityCombo::currentIdentity() const { + return mUoidList[ currentItem() ]; +} + +void IdentityCombo::setCurrentIdentity( const Identity & identity ) { + setCurrentIdentity( identity.uoid() ); +} + +void IdentityCombo::setCurrentIdentity( const QString & name ) { + int idx = mIdentityManager->identities().findIndex( name ); + if ( idx < 0 ) return; + if ( idx == currentItem() ) return; + + blockSignals( true ); // just in case Qt gets fixed to emit activated() here + setCurrentItem( idx ); + blockSignals( false ); + + slotEmitChanged( idx ); +} + +void IdentityCombo::setCurrentIdentity( uint uoid ) { + int idx = mUoidList.findIndex( uoid ); + if ( idx < 0 ) return; + if ( idx == currentItem() ) return; + + blockSignals( true ); // just in case Qt gets fixed to emit activated() here + setCurrentItem( idx ); + blockSignals( false ); + + slotEmitChanged( idx ); +} + +void IdentityCombo::reloadCombo() { + QStringList identities = mIdentityManager->identities(); + // the IM should prevent this from happening: + assert( !identities.isEmpty() ); + identities.first() = i18n("%1 (Default)").arg( identities.first() ); + clear(); + insertStringList( identities ); +} + +void IdentityCombo::reloadUoidList() { + mUoidList.clear(); + IdentityManager::ConstIterator it; + for ( it = mIdentityManager->begin() ; it != mIdentityManager->end() ; ++it ) + mUoidList << (*it).uoid(); +} + +void IdentityCombo::slotIdentityManagerChanged() { + uint oldIdentity = mUoidList[ currentItem() ]; + + reloadUoidList(); + int idx = mUoidList.findIndex( oldIdentity ); + + blockSignals( true ); + reloadCombo(); + setCurrentItem( idx < 0 ? 0 : idx ); + blockSignals( false ); + + if ( idx < 0 ) + // apparently our oldIdentity got deleted: + slotEmitChanged( currentItem() ); +} + +void IdentityCombo::slotEmitChanged( int idx ) { + emit identityChanged( mIdentityManager->identities()[idx] ); + emit identityChanged( mUoidList[idx] ); +} + +#include "identitycombo.moc" -- cgit v1.2.1