2
accountconfig.cpp - Kopete account config page
4
Copyright (c) 2007 by Gustavo Pichorim Boiko <gustavo.boiko@kdemail.net>
5
Copyright (c) 2003-2007 by Olivier Goffart <ogoffart@kde.org>
6
Copyright (c) 2003 by Martijn Klingens <klingens@kde.org>
7
Copyright (c) 2007 by Will Stephenson <wstephenson@kde.org>
9
Kopete (c) 2003-2007 by the Kopete developers <kopete-devel@kde.org>
11
*************************************************************************
13
* This program is free software; you can redistribute it and/or modify *
14
* it under the terms of the GNU General Public License as published by *
15
* the Free Software Foundation; either version 2 of the License, or *
16
* (at your option) any later version. *
18
*************************************************************************
21
#include "kopeteaccountconfig.h"
23
#include <QtGui/QCheckBox>
24
#include <QtGui/QLayout>
25
#include <QtGui/QHeaderView>
26
#include <QtGui/QBoxLayout>
27
#include <QtCore/QPointer>
28
#include <QtCore/QTimer>
29
#include <QtGui/QContextMenuEvent>
31
#include <kcolorbutton.h>
32
#include <kpushbutton.h>
35
#include <kpluginfactory.h>
36
#include <kiconloader.h>
38
#include <kmessagebox.h>
42
#include <kcolordialog.h>
44
#include "addaccountwizard.h"
45
#include "editaccountwidget.h"
46
#include "kopeteaccountmanager.h"
47
#include "kopeteidentitymanager.h"
48
#include "kopeteidentity.h"
49
#include "kopeteprotocol.h"
50
#include "kopeteaccount.h"
51
#include "kopetecontact.h"
52
#include "accountidentitydialog.h"
53
#include "identitydialog.h"
56
K_PLUGIN_FACTORY( KopeteAccountConfigFactory,
57
registerPlugin<KopeteAccountConfig>(); )
58
K_EXPORT_PLUGIN( KopeteAccountConfigFactory("kcm_kopete_accountconfig") )
60
KopeteAccountConfig::KopeteAccountConfig( QWidget *parent, const QVariantList &args )
61
: KCModule( KopeteAccountConfigFactory::componentData(), parent, args )
65
QHeaderView *header = mAccountList->header();
66
header->setResizeMode( 1, QHeaderView::ResizeToContents );
67
header->setResizeMode( 0, QHeaderView::Stretch );
68
header->setVisible(false);
73
connect( mAccountList, SIGNAL(itemPositionChanged()), this, SLOT(changed()) );
74
connect( mAccountList, SIGNAL(itemSelectionChanged()), this, SLOT(slotItemSelected()) );
75
connect( mAccountList, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)), this, SLOT(slotModify()) );
76
connect( mAccountList, SIGNAL(itemChanged(QTreeWidgetItem*,int)), this, SLOT(slotItemChanged(QTreeWidgetItem*)) );
77
connect( mAccountList, SIGNAL(itemClicked(QTreeWidgetItem*,int)), this, SLOT(slotItemClicked(QTreeWidgetItem*,int)) );
79
// this ensures that newly created accounts are assigned to the selected identity
80
connect( Kopete::AccountManager::self(), SIGNAL(accountRegistered(Kopete::Account*)), this, SLOT(slotAccountAdded(Kopete::Account*)) );
81
connect( Kopete::AccountManager::self(), SIGNAL(accountUnregistered(const Kopete::Account*)), this, SLOT(slotAccountRemoved(const Kopete::Account*)) );
83
mAccountList->installEventFilter( this );
89
KopeteAccountLVI* KopeteAccountConfig::selectedAccount()
91
QList<QTreeWidgetItem*> selectedItems = mAccountList->selectedItems();
92
if(!selectedItems.empty())
93
return dynamic_cast<KopeteAccountLVI*>( selectedItems.first() );
97
KopeteIdentityLVI* KopeteAccountConfig::selectedIdentity()
99
QList<QTreeWidgetItem*> selectedItems = mAccountList->selectedItems();
100
if(!selectedItems.empty())
101
return dynamic_cast<KopeteIdentityLVI*>( selectedItems.first() );
105
void KopeteAccountConfig::save()
108
for ( int i = 0; i < mAccountList->topLevelItemCount(); i++ )
109
priority += mAccountList->topLevelItem( i )->childCount();
111
for ( int i = 0; i < mAccountList->topLevelItemCount(); i++ )
113
KopeteIdentityLVI* identity = dynamic_cast<KopeteIdentityLVI*>( mAccountList->topLevelItem( i ) );
114
for ( int j = 0; j < identity->childCount(); j++ )
116
KopeteAccountLVI* account = dynamic_cast<KopeteAccountLVI*>( identity->child( j ) );
117
account->account()->setIdentity( identity->identity() );
118
account->account()->setPriority( priority-- );
122
Kopete::AccountManager::self()->save();
123
Kopete::IdentityManager::self()->save();
126
//load(); //refresh the colred accounts (in case of apply)
129
bool accountPriorityLessThan(const Kopete::Account* a, const Kopete::Account* b)
131
return (a->priority() > b->priority());
134
bool identityPriorityLessThan(const Kopete::Identity* a, const Kopete::Identity* b)
136
if ( a->accounts().isEmpty() )
139
if ( b->accounts().isEmpty() && !a->accounts().isEmpty() )
142
return (a->accounts().first()->priority() > b->accounts().first()->priority());
145
void KopeteAccountConfig::load()
147
mAccountList->clear();
149
QHash<Kopete::Identity *,QTreeWidgetItem *> identityItemHash;
150
Kopete::Identity *defaultIdentity = Kopete::IdentityManager::self()->defaultIdentity();
152
// Sort by priority, the priority is take from identity accounts because identity doesn't have priority
153
QList<Kopete::Identity*> identityList = Kopete::IdentityManager::self()->identities();
154
qSort( identityList.begin(), identityList.end(), identityPriorityLessThan );
156
foreach(Kopete::Identity *i, identityList)
158
//KopeteIdentityLVI *lvi = new KopeteIdentityLVI( i, mIdentityList );
159
QTreeWidgetItem *identityItem = new KopeteIdentityLVI( i, mAccountList );
160
// Insert the item after the previous one
162
identityItem->setText( 0, i->label() );
163
identityItem->setIcon( 0, KIcon( i->customIcon()) );
165
identityItem->setExpanded( true );
167
if (i == defaultIdentity)
169
QFont font = identityItem->font( 0 );
170
font.setBold( true );
171
identityItem->setFont( 0, font );
172
identityItem->setSelected( true );
174
//identityItem->setSizeHint( 0, QSize(0, 42) );
176
identityItemHash.insert(i,identityItem);
180
QList<Kopete::Account*> accountList = Kopete::AccountManager::self()->accounts();
181
qSort( accountList.begin(), accountList.end(), accountPriorityLessThan );
183
foreach( Kopete::Account *account, accountList )
185
Kopete::Identity *idnt = account->identity();
187
Q_ASSERT(identityItemHash.contains(idnt));
188
KopeteAccountLVI *lvi = new KopeteAccountLVI( account, identityItemHash[idnt] );
189
lvi->setText( 0, account->accountLabel() );
190
lvi->setIcon( 0, account->myself()->onlineStatus().iconFor( account ) );
191
QFont font = lvi->font( 0 );
192
font.setBold( true );
193
lvi->setFont( 0, font );
195
lvi->setSizeHint( 0, QSize(0, 42) );
197
lvi->setText( 1, account->myself()->onlineStatus().description() );
198
lvi->setTextAlignment( 1, Qt::AlignRight | Qt::AlignVCenter );
199
lvi->setFont( 1, font );
201
lvi->setFlags( (lvi->flags() & ~Qt::ItemIsDropEnabled) | Qt::ItemIsUserCheckable );
202
lvi->setCheckState ( 0, account->excludeConnect() ? Qt::Unchecked : Qt::Checked );
204
connect( account->myself(), SIGNAL(onlineStatusChanged(Kopete::Contact*,Kopete::OnlineStatus,Kopete::OnlineStatus)),
205
this, SLOT(slotOnlineStatusChanged(Kopete::Contact*,Kopete::OnlineStatus,Kopete::OnlineStatus)));
212
void KopeteAccountConfig::slotItemSelected()
214
bool accountSelected = selectedAccount();
215
bool hasMultipleIdentities = ( Kopete::IdentityManager::self()->identities().size() > 1 );
216
mButtonAccountModify->setEnabled( accountSelected );
217
mButtonAccountRemove->setEnabled( accountSelected );
218
m_actionAccountSwitchIdentity->setEnabled( accountSelected && hasMultipleIdentities );
219
mButtonAccountSwitchIdentity->setEnabled( m_actionAccountSwitchIdentity->isEnabled() );
220
mButtonAccountSetColor->setEnabled( accountSelected );
222
bool identitySelected = selectedIdentity();
223
bool isDefaultIdentity = (identitySelected && Kopete::IdentityManager::self()->defaultIdentity() == selectedIdentity()->identity());
224
mButtonAccountAdd->setEnabled( identitySelected );
225
mButtonIdentityCopy->setEnabled( identitySelected );
226
mButtonIdentityModify->setEnabled( identitySelected );
227
m_actionIdentityRemove->setEnabled( identitySelected && !isDefaultIdentity );
228
mButtonIdentityRemove->setEnabled( m_actionIdentityRemove->isEnabled() );
229
m_actionIdentitySetDefault->setEnabled( identitySelected && !isDefaultIdentity );
230
mButtonIdentitySetDefault->setEnabled( m_actionIdentitySetDefault->isEnabled() );
233
void KopeteAccountConfig::slotAddAccount()
235
AddAccountWizard *addwizard = new AddAccountWizard( this, true );
236
KopeteIdentityLVI *ilvi = selectedIdentity();
239
addwizard->setIdentity( ilvi->identity() );
244
void KopeteAccountConfig::slotModify()
246
KopeteAccountLVI *alvi = selectedAccount();
247
KopeteIdentityLVI *ilvi = selectedIdentity();
249
if ( ilvi && ilvi->identity() )
250
return modifyIdentity( ilvi->identity() );
252
if ( alvi && alvi->account() )
253
return modifyAccount( alvi->account() );
257
void KopeteAccountConfig::modifyAccount(Kopete::Account *account)
259
Kopete::Protocol *proto = account->protocol();
261
QPointer <KDialog> editDialog = new KDialog( this );
262
editDialog->setCaption( i18n("Modify Account" ) );
263
editDialog->setButtons( KDialog::Ok | KDialog::Cancel );
264
editDialog->setDefaultButton(KDialog::Ok);
265
editDialog->showButtonSeparator(true);
267
KopeteEditAccountWidget *m_accountWidget = proto->createEditAccountWidget( account, editDialog );
268
if ( !m_accountWidget )
271
// FIXME: Why the #### is EditAccountWidget not a QWidget?!? This sideways casting
272
// is braindead and error-prone. Looking at MSN the only reason I can see is
273
// because it allows direct subclassing of designer widgets. But what is
274
// wrong with embedding the designer widget in an empty QWidget instead?
275
// Also, if this REALLY has to be a pure class and not a widget, then the
276
// class should at least be renamed to EditAccountIface instead - Martijn
277
QWidget *w = dynamic_cast<QWidget *>( m_accountWidget );
281
editDialog->setMainWidget( w );
282
if ( editDialog->exec() == QDialog::Accepted )
284
if( m_accountWidget->validateData() )
285
m_accountWidget->apply();
290
Kopete::AccountManager::self()->save();
293
void KopeteAccountConfig::modifyIdentity(Kopete::Identity *)
295
KopeteIdentityLVI *lvi = selectedIdentity();
297
if ( !lvi || !lvi->identity() )
300
Kopete::Identity *ident = lvi->identity();
302
QPointer <IdentityDialog> dialog = new IdentityDialog(ident, this);
307
Kopete::IdentityManager::self()->save();
310
void KopeteAccountConfig::removeAccount()
312
KopeteAccountLVI *lvi = selectedAccount();
314
if ( lvi && lvi->account() ) {
315
Kopete::Account *i = lvi->account();
316
if ( KMessageBox::warningContinueCancel( this, i18n( "Are you sure you want to remove the account \"%1\"?", i->accountLabel() ),
317
i18n( "Remove Account" ), KGuiItem(i18n( "Remove Account" ), "edit-delete"), KStandardGuiItem::cancel(),
318
QString(), KMessageBox::Notify | KMessageBox::Dangerous ) == KMessageBox::Continue )
320
Kopete::AccountManager::self()->removeAccount( i );
325
void KopeteAccountConfig::removeIdentity()
327
KopeteIdentityLVI *lvi = selectedIdentity();
330
if ( lvi && ( i = lvi->identity() ) ) {
331
if (!i->accounts().count())
333
if ( KMessageBox::warningContinueCancel( this, i18n( "Are you sure you want to remove the identity \"%1\"?", i->label() ),
334
i18n( "Remove Identity" ), KGuiItem(i18n( "Remove Identity" ), "edit-delete"), KStandardGuiItem::cancel(),
335
"askRemoveIdentity", KMessageBox::Notify | KMessageBox::Dangerous ) == KMessageBox::Continue )
337
Kopete::IdentityManager::self()->removeIdentity( i );
343
// if there are any accounts linked to this identity, need to change them before removing the identity
344
if ( AccountIdentityDialog::changeAccountIdentity( this, i->accounts(), i,
345
i18n("Before removing the identity %1, the following accounts must be "
346
"assigned to another identity:", i->label())) )
348
Kopete::IdentityManager::self()->removeIdentity( i );
352
// if we removed the default identity, this will trigger an update
353
Kopete::IdentityManager::self()->defaultIdentity();
355
// To be sure that accounts with relocated identities appear, reload
360
void KopeteAccountConfig::slotAccountSwitchIdentity()
362
KopeteAccountLVI *lvi = selectedAccount();
364
if ( !lvi || !lvi->account() )
367
// If there are only two identities, don't show the dialog,
368
// just switch to the other identity
369
Kopete::Account *a = lvi->account();
370
if ( Kopete::IdentityManager::self()->identities().size() == 2 ) {
371
foreach ( Kopete::Identity * id, Kopete::IdentityManager::self()->identities() ) {
372
if ( id != a->identity() ) {
373
a->setIdentity( id );
378
AccountIdentityDialog::changeAccountIdentity( this, a, 0, i18n("Select an identity for the account:"));
384
void KopeteAccountConfig::slotAccountSetColor()
386
KopeteAccountLVI *lvi = selectedAccount();
388
if ( !lvi || !lvi->account() )
391
Kopete::Account *a = lvi->account();
393
QColor color = a->color();
395
if ( KColorDialog::getColor(color, Qt::black, this) == KColorDialog::Accepted ) {
402
void KopeteAccountConfig::slotSetDefaultIdentity()
404
KopeteIdentityLVI *lvi = selectedIdentity();
406
if ( !lvi || !lvi->identity() )
409
Kopete::IdentityManager::self()->setDefaultIdentity( lvi->identity() );
413
void KopeteAccountConfig::slotAddIdentity()
415
Kopete::Identity *ident = new Kopete::Identity(i18n("New Identity"));
420
QPointer <IdentityDialog> dialog = new IdentityDialog(ident, this);
421
if ( dialog->exec() == QDialog::Accepted ) {
422
ident = Kopete::IdentityManager::self()->registerIdentity(ident);
424
Kopete::IdentityManager::self()->save();
433
void KopeteAccountConfig::slotCopyIdentity()
435
Kopete::Identity * existing = selectedIdentity()->identity();
437
QString newLabel = i18nc( "String used for creating first copy of a named item",
438
"Copy of %1", existing->label() );
439
Kopete::Identity::List ids = Kopete::IdentityManager::self()->identities();
440
QStringList idLabels;
441
foreach ( Kopete::Identity *i, ids ) {
442
idLabels.append( i->label() );
444
while ( idLabels.contains( newLabel ) && copyCount < 100 ) {
445
newLabel = i18nc( "String used for creating second and subsequent copies of a named item",
446
"Copy %1 of %2", copyCount++, existing->label() );
448
Kopete::Identity * ident = existing->clone();
449
ident->setLabel( newLabel );
451
QPointer <IdentityDialog> dialog = new IdentityDialog(ident, this);
452
if ( dialog->exec() == QDialog::Accepted ) {
453
if ( Kopete::IdentityManager::self()->registerIdentity(ident) ) {
462
void KopeteAccountConfig::slotOnlineStatusChanged( Kopete::Contact *contact,
463
const Kopete::OnlineStatus &newStatus,
464
const Kopete::OnlineStatus &/*oldStatus*/)
467
QList<QTreeWidgetItem*> items = mAccountList->findItems("", Qt::MatchContains | Qt::MatchRecursive);
468
QList<QTreeWidgetItem*>::iterator it;
469
for (it = items.begin(); it != items.end(); ++it)
471
KopeteAccountLVI *i = dynamic_cast<KopeteAccountLVI*>(*it);
472
if (!i || !i->account())
475
if (i->account()->myself() == contact)
477
(*it)->setIcon( 0, newStatus.iconFor(i->account()) );
478
(*it)->setText( 1, newStatus.description() );
485
void KopeteAccountConfig::slotAccountAdded( Kopete::Account * account )
491
void KopeteAccountConfig::slotAccountRemoved( const Kopete::Account * account )
493
QList<QTreeWidgetItem*> items = mAccountList->findItems("", Qt::MatchContains | Qt::MatchRecursive);
494
QList<QTreeWidgetItem*>::iterator it;
495
for (it = items.begin(); it != items.end(); ++it)
497
KopeteAccountLVI *lvi = dynamic_cast<KopeteAccountLVI*>(*it);
498
if ( lvi && lvi->account() == account)
506
void KopeteAccountConfig::slotItemChanged(QTreeWidgetItem* item)
510
KopeteAccountLVI *a = dynamic_cast<KopeteAccountLVI*>(item);
511
KopeteIdentityLVI *i = dynamic_cast<KopeteIdentityLVI*>(item->parent());
514
if(a->account()->identity() != i->identity() )
516
a->account()->setIdentity( i->identity() );
522
bool KopeteAccountConfig::eventFilter( QObject *obj, QEvent *event )
524
if ( obj == mAccountList && event->type() == QEvent::ContextMenu )
526
QContextMenuEvent *cmEvent = static_cast<QContextMenuEvent *>(event);
527
KopeteIdentityLVI *ilvi = selectedIdentity();
528
if ( ilvi && ilvi->identity() )
530
m_identityContextMenu->popup(cmEvent->globalPos());
533
KopeteAccountLVI *alvi = selectedAccount();
534
if ( alvi && alvi->account() )
536
m_accountContextMenu->popup(cmEvent->globalPos());
541
return QObject::eventFilter( obj, event );
544
void KopeteAccountConfig::configureActions()
547
m_actionAccountAdd = new KAction( i18n( "&Add Account..." ), this );
548
m_actionAccountAdd->setIcon( KIcon("list-add") );
549
mButtonAccountAdd->setIcon( m_actionAccountAdd->icon() );
550
mButtonAccountAdd->setText( m_actionAccountAdd->text() );
551
connect( m_actionAccountAdd, SIGNAL(triggered(bool)), this, SLOT(slotAddAccount()) );
552
connect( mButtonAccountAdd, SIGNAL(clicked()), m_actionAccountAdd, SLOT(trigger()) );
555
m_actionAccountModify = new KAction( i18n( "&Modify Account..." ), this );
556
m_actionAccountModify->setIcon( KIcon("configure") );
557
mButtonAccountModify->setIcon( m_actionAccountModify->icon() );
558
mButtonAccountModify->setText( m_actionAccountModify->text() );
559
connect( m_actionAccountModify, SIGNAL(triggered(bool)), this, SLOT(slotModify()));
560
connect( mButtonAccountModify, SIGNAL(clicked()), m_actionAccountModify, SLOT(trigger()) );
563
m_actionAccountRemove = new KAction( i18n( "&Remove Account" ), this );
564
m_actionAccountRemove->setIcon( KIcon("edit-delete") );
565
m_actionAccountRemove->setShortcut(KShortcut(Qt::Key_Delete));
566
mButtonAccountRemove->setIcon( m_actionAccountRemove->icon() );
567
mButtonAccountRemove->setText( m_actionAccountRemove->text() );
568
connect( m_actionAccountRemove, SIGNAL(triggered(bool)), this, SLOT(removeAccount()) );
569
connect( mButtonAccountRemove, SIGNAL(clicked()), m_actionAccountRemove, SLOT(trigger()) );
571
// Switch identity for an account
572
m_actionAccountSwitchIdentity = new KAction( i18n( "&Switch Identity..." ), this );
573
mButtonAccountSwitchIdentity->setText( m_actionAccountSwitchIdentity->text() );
574
connect( m_actionAccountSwitchIdentity, SIGNAL(triggered(bool)), this, SLOT(slotAccountSwitchIdentity()) );
575
connect( mButtonAccountSwitchIdentity, SIGNAL(clicked()), m_actionAccountSwitchIdentity, SLOT(trigger()) );
577
// Set/clear custom color for account
578
m_actionAccountSetColor = new KAction( i18n( "Set C&olor..." ), this );
579
mButtonAccountSetColor->setText( m_actionAccountSetColor->text() );
580
connect( m_actionAccountSetColor, SIGNAL(triggered(bool)), this, SLOT(slotAccountSetColor()) );
581
connect( mButtonAccountSetColor, SIGNAL(clicked()), m_actionAccountSetColor, SLOT(trigger()) );
584
m_actionIdentityAdd = new KAction( i18n( "Add &Identity..." ), this );
585
m_actionIdentityAdd->setIcon( KIcon("list-add") );
586
mButtonIdentityAdd->setIcon( m_actionIdentityAdd->icon() );
587
mButtonIdentityAdd->setText( m_actionIdentityAdd->text() );
588
connect( m_actionIdentityAdd, SIGNAL(triggered(bool)), this, SLOT(slotAddIdentity()) );
589
connect( mButtonIdentityAdd, SIGNAL(clicked()), m_actionIdentityAdd, SLOT(trigger()) );
592
m_actionIdentityCopy = new KAction( i18n( "&Copy Identity..." ), this );
593
m_actionIdentityCopy->setIcon( KIcon("edit-copy") );
594
mButtonIdentityCopy->setIcon( m_actionIdentityCopy->icon() );
595
mButtonIdentityCopy->setText( m_actionIdentityCopy->text() );
596
connect( m_actionIdentityCopy, SIGNAL(triggered(bool)), this, SLOT(slotCopyIdentity()) );
597
connect( mButtonIdentityCopy, SIGNAL(clicked()), m_actionIdentityCopy, SLOT(trigger()) );
600
m_actionIdentityModify = new KAction( i18n( "M&odify Identity..." ), this );
601
m_actionIdentityModify->setIcon( KIcon("configure") );
602
mButtonIdentityModify->setIcon( m_actionIdentityModify->icon() );
603
mButtonIdentityModify->setText( m_actionIdentityModify->text() );
604
connect( m_actionIdentityModify, SIGNAL(triggered(bool)), this, SLOT(slotModify()) );
605
connect( mButtonIdentityModify, SIGNAL(clicked()), m_actionIdentityModify, SLOT(trigger()) );
608
m_actionIdentityRemove = new KAction( i18n( "R&emove Identity" ), this );
609
m_actionIdentityRemove->setIcon( KIcon("edit-delete") );
610
mButtonIdentityRemove->setIcon( m_actionIdentityRemove->icon() );
611
mButtonIdentityRemove->setText( m_actionIdentityRemove->text() );
612
connect( m_actionIdentityRemove, SIGNAL(triggered(bool)), this, SLOT(removeIdentity()) );
613
connect( mButtonIdentityRemove, SIGNAL(clicked()), m_actionIdentityRemove, SLOT(trigger()) );
615
// Switch identity for an identity
616
m_actionIdentitySetDefault = new KAction( i18n( "Set &Default" ), this );
617
mButtonIdentitySetDefault->setText( m_actionIdentitySetDefault->text() );
618
connect( m_actionIdentitySetDefault, SIGNAL(triggered(bool)), this, SLOT(slotSetDefaultIdentity()) );
619
connect( mButtonIdentitySetDefault, SIGNAL(clicked()), m_actionIdentitySetDefault, SLOT(trigger()) );
622
void KopeteAccountConfig::configureMenus()
624
// Account management context menu
625
m_accountContextMenu = new KMenu ( this );
626
m_accountContextMenu->addAction( m_actionAccountModify );
627
m_accountContextMenu->addAction( m_actionAccountRemove );
628
m_accountContextMenu->addAction( m_actionAccountSetColor );
630
// Identity management context menu
631
m_identityContextMenu = new KMenu ( this );
632
m_identityContextMenu->addAction( m_actionAccountAdd );
633
m_identityContextMenu->addSeparator();
634
m_identityContextMenu->addAction( m_actionIdentityModify );
635
m_identityContextMenu->addAction( m_actionIdentityRemove );
636
m_identityContextMenu->addAction( m_actionIdentitySetDefault );
639
void KopeteAccountConfig::slotItemClicked( QTreeWidgetItem * item, int /*column*/ )
641
KopeteAccountLVI *account = static_cast<KopeteAccountLVI*>( item );
642
if ( account && account->parent() )
643
account->account()->setExcludeConnect ( account->checkState(0) == Qt::Unchecked ? true : false );
647
#include "kopeteaccountconfig.moc"
649
// vim: set noet ts=4 sts=4 sw=4: