• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdenetwork API Reference
  • KDE Home
  • Contact Us
 

kopete/kopete

  • sources
  • kde-4.14
  • kdenetwork
  • kopete
  • kopete
  • config
  • accounts
kopeteaccountconfig.cpp
Go to the documentation of this file.
1 /*
2  accountconfig.cpp - Kopete account config page
3 
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>
8 
9  Kopete (c) 2003-2007 by the Kopete developers <kopete-devel@kde.org>
10 
11  *************************************************************************
12  * *
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. *
17  * *
18  *************************************************************************
19 */
20 
21 #include "kopeteaccountconfig.h"
22 
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>
30 
31 #include <kcolorbutton.h>
32 #include <kpushbutton.h>
33 #include <kdebug.h>
34 #include <kdialog.h>
35 #include <kpluginfactory.h>
36 #include <kiconloader.h>
37 #include <klocale.h>
38 #include <kmessagebox.h>
39 #include <kicon.h>
40 #include <kaction.h>
41 #include <kmenu.h>
42 #include <kcolordialog.h>
43 
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"
54 
55 
56 K_PLUGIN_FACTORY( KopeteAccountConfigFactory,
57  registerPlugin<KopeteAccountConfig>(); )
58 K_EXPORT_PLUGIN( KopeteAccountConfigFactory("kcm_kopete_accountconfig") )
59 
60 KopeteAccountConfig::KopeteAccountConfig( QWidget *parent, const QVariantList &args )
61 : KCModule( KopeteAccountConfigFactory::componentData(), parent, args )
62 {
63  setupUi( this );
64 
65  QHeaderView *header = mAccountList->header();
66  header->setResizeMode( 1, QHeaderView::ResizeToContents );
67  header->setResizeMode( 0, QHeaderView::Stretch );
68  header->setVisible(false);
69 
70  configureActions();
71  configureMenus();
72 
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)) );
78 
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*)) );
82 
83  mAccountList->installEventFilter( this );
84 
85  setButtons( Help );
86  load();
87 }
88 
89 KopeteAccountLVI* KopeteAccountConfig::selectedAccount()
90 {
91  QList<QTreeWidgetItem*> selectedItems = mAccountList->selectedItems();
92  if(!selectedItems.empty())
93  return dynamic_cast<KopeteAccountLVI*>( selectedItems.first() );
94  return 0;
95 }
96 
97 KopeteIdentityLVI* KopeteAccountConfig::selectedIdentity()
98 {
99  QList<QTreeWidgetItem*> selectedItems = mAccountList->selectedItems();
100  if(!selectedItems.empty())
101  return dynamic_cast<KopeteIdentityLVI*>( selectedItems.first() );
102  return 0;
103 }
104 
105 void KopeteAccountConfig::save()
106 {
107  uint priority = 0;
108  for ( int i = 0; i < mAccountList->topLevelItemCount(); i++ )
109  priority += mAccountList->topLevelItem( i )->childCount();
110 
111  for ( int i = 0; i < mAccountList->topLevelItemCount(); i++ )
112  {
113  KopeteIdentityLVI* identity = dynamic_cast<KopeteIdentityLVI*>( mAccountList->topLevelItem( i ) );
114  for ( int j = 0; j < identity->childCount(); j++ )
115  {
116  KopeteAccountLVI* account = dynamic_cast<KopeteAccountLVI*>( identity->child( j ) );
117  account->account()->setIdentity( identity->identity() );
118  account->account()->setPriority( priority-- );
119  }
120  }
121 
122  Kopete::AccountManager::self()->save();
123  Kopete::IdentityManager::self()->save();
124 
125 
126  //load(); //refresh the colred accounts (in case of apply)
127 }
128 
129 bool accountPriorityLessThan(const Kopete::Account* a, const Kopete::Account* b)
130 {
131  return (a->priority() > b->priority());
132 }
133 
134 bool identityPriorityLessThan(const Kopete::Identity* a, const Kopete::Identity* b)
135 {
136  if ( a->accounts().isEmpty() )
137  return false;
138 
139  if ( b->accounts().isEmpty() && !a->accounts().isEmpty() )
140  return true;
141 
142  return (a->accounts().first()->priority() > b->accounts().first()->priority());
143 }
144 
145 void KopeteAccountConfig::load()
146 {
147  mAccountList->clear();
148 
149  QHash<Kopete::Identity *,QTreeWidgetItem *> identityItemHash;
150  Kopete::Identity *defaultIdentity = Kopete::IdentityManager::self()->defaultIdentity();
151 
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 );
155 
156  foreach(Kopete::Identity *i, identityList)
157  {
158  //KopeteIdentityLVI *lvi = new KopeteIdentityLVI( i, mIdentityList );
159  QTreeWidgetItem *identityItem = new KopeteIdentityLVI( i, mAccountList );
160  // Insert the item after the previous one
161 
162  identityItem->setText( 0, i->label() );
163  identityItem->setIcon( 0, KIcon( i->customIcon()) );
164 
165  identityItem->setExpanded( true );
166 
167  if (i == defaultIdentity)
168  {
169  QFont font = identityItem->font( 0 );
170  font.setBold( true );
171  identityItem->setFont( 0, font );
172  identityItem->setSelected( true );
173  }
174  //identityItem->setSizeHint( 0, QSize(0, 42) );
175 
176  identityItemHash.insert(i,identityItem);
177  }
178 
179  // Sort by priority
180  QList<Kopete::Account*> accountList = Kopete::AccountManager::self()->accounts();
181  qSort( accountList.begin(), accountList.end(), accountPriorityLessThan );
182 
183  foreach( Kopete::Account *account, accountList )
184  {
185  Kopete::Identity *idnt = account->identity();
186 
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 );
194 
195  lvi->setSizeHint( 0, QSize(0, 42) );
196 
197  lvi->setText( 1, account->myself()->onlineStatus().description() );
198  lvi->setTextAlignment( 1, Qt::AlignRight | Qt::AlignVCenter );
199  lvi->setFont( 1, font );
200 
201  lvi->setFlags( (lvi->flags() & ~Qt::ItemIsDropEnabled) | Qt::ItemIsUserCheckable );
202  lvi->setCheckState ( 0, account->excludeConnect() ? Qt::Unchecked : Qt::Checked );
203 
204  connect( account->myself(), SIGNAL(onlineStatusChanged(Kopete::Contact*,Kopete::OnlineStatus,Kopete::OnlineStatus)),
205  this, SLOT(slotOnlineStatusChanged(Kopete::Contact*,Kopete::OnlineStatus,Kopete::OnlineStatus)));
206  }
207 
208  changed( false );
209  slotItemSelected();
210 }
211 
212 void KopeteAccountConfig::slotItemSelected()
213 {
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 );
221 
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() );
231 }
232 
233 void KopeteAccountConfig::slotAddAccount()
234 {
235  AddAccountWizard *addwizard = new AddAccountWizard( this, true );
236  KopeteIdentityLVI *ilvi = selectedIdentity();
237  if (ilvi)
238  {
239  addwizard->setIdentity( ilvi->identity() );
240  }
241  addwizard->show();
242 }
243 
244 void KopeteAccountConfig::slotModify()
245 {
246  KopeteAccountLVI *alvi = selectedAccount();
247  KopeteIdentityLVI *ilvi = selectedIdentity();
248 
249  if ( ilvi && ilvi->identity() )
250  return modifyIdentity( ilvi->identity() );
251 
252  if ( alvi && alvi->account() )
253  return modifyAccount( alvi->account() );
254 }
255 
256 
257 void KopeteAccountConfig::modifyAccount(Kopete::Account *account)
258 {
259  Kopete::Protocol *proto = account->protocol();
260 
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);
266 
267  KopeteEditAccountWidget *m_accountWidget = proto->createEditAccountWidget( account, editDialog );
268  if ( !m_accountWidget )
269  return;
270 
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 );
278  if ( !w )
279  return;
280 
281  editDialog->setMainWidget( w );
282  if ( editDialog->exec() == QDialog::Accepted )
283  {
284  if( m_accountWidget->validateData() )
285  m_accountWidget->apply();
286  }
287  delete editDialog;
288 
289  load();
290  Kopete::AccountManager::self()->save();
291 }
292 
293 void KopeteAccountConfig::modifyIdentity(Kopete::Identity *)
294 {
295  KopeteIdentityLVI *lvi = selectedIdentity();
296 
297  if ( !lvi || !lvi->identity() )
298  return;
299 
300  Kopete::Identity *ident = lvi->identity();
301 
302  QPointer <IdentityDialog> dialog = new IdentityDialog(ident, this);
303  dialog->exec();
304  delete dialog;
305 
306  load();
307  Kopete::IdentityManager::self()->save();
308 }
309 
310 void KopeteAccountConfig::removeAccount()
311 {
312  KopeteAccountLVI *lvi = selectedAccount();
313 
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 )
319  {
320  Kopete::AccountManager::self()->removeAccount( i );
321  }
322  }
323 }
324 
325 void KopeteAccountConfig::removeIdentity()
326 {
327  KopeteIdentityLVI *lvi = selectedIdentity();
328  Kopete::Identity *i;
329 
330  if ( lvi && ( i = lvi->identity() ) ) {
331  if (!i->accounts().count())
332  {
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 )
336  {
337  Kopete::IdentityManager::self()->removeIdentity( i );
338  delete lvi;
339  }
340  }
341  else
342  {
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())) )
347  {
348  Kopete::IdentityManager::self()->removeIdentity( i );
349  delete lvi;
350  }
351  }
352  // if we removed the default identity, this will trigger an update
353  Kopete::IdentityManager::self()->defaultIdentity();
354  save();
355  // To be sure that accounts with relocated identities appear, reload
356  load();
357  }
358 }
359 
360 void KopeteAccountConfig::slotAccountSwitchIdentity()
361 {
362  KopeteAccountLVI *lvi = selectedAccount();
363 
364  if ( !lvi || !lvi->account() )
365  return;
366 
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 );
374  break;
375  }
376  }
377  } else {
378  AccountIdentityDialog::changeAccountIdentity( this, a, 0, i18n("Select an identity for the account:"));
379  }
380 
381  load();
382 }
383 
384 void KopeteAccountConfig::slotAccountSetColor()
385 {
386  KopeteAccountLVI *lvi = selectedAccount();
387 
388  if ( !lvi || !lvi->account() )
389  return;
390 
391  Kopete::Account *a = lvi->account();
392 
393  QColor color = a->color();
394 
395  if ( KColorDialog::getColor(color, Qt::black, this) == KColorDialog::Accepted ) {
396  a->setColor(color);
397  }
398 
399  load();
400 }
401 
402 void KopeteAccountConfig::slotSetDefaultIdentity()
403 {
404  KopeteIdentityLVI *lvi = selectedIdentity();
405 
406  if ( !lvi || !lvi->identity() )
407  return;
408 
409  Kopete::IdentityManager::self()->setDefaultIdentity( lvi->identity() );
410  load();
411 }
412 
413 void KopeteAccountConfig::slotAddIdentity()
414 {
415  Kopete::Identity *ident = new Kopete::Identity(i18n("New Identity"));
416 
417  if (!ident)
418  return;
419 
420  QPointer <IdentityDialog> dialog = new IdentityDialog(ident, this);
421  if ( dialog->exec() == QDialog::Accepted ) {
422  ident = Kopete::IdentityManager::self()->registerIdentity(ident);
423  if (ident) {
424  Kopete::IdentityManager::self()->save();
425  load();
426  }
427  } else {
428  delete ident;
429  }
430  delete dialog;
431 }
432 
433 void KopeteAccountConfig::slotCopyIdentity()
434 {
435  Kopete::Identity * existing = selectedIdentity()->identity();
436  uint copyCount = 2;
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() );
443  }
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() );
447  }
448  Kopete::Identity * ident = existing->clone();
449  ident->setLabel( newLabel );
450 
451  QPointer <IdentityDialog> dialog = new IdentityDialog(ident, this);
452  if ( dialog->exec() == QDialog::Accepted ) {
453  if ( Kopete::IdentityManager::self()->registerIdentity(ident) ) {
454  load();
455  }
456  } else {
457  delete ident;
458  }
459  delete dialog;
460 }
461 
462 void KopeteAccountConfig::slotOnlineStatusChanged( Kopete::Contact *contact,
463  const Kopete::OnlineStatus &newStatus,
464  const Kopete::OnlineStatus &/*oldStatus*/)
465 {
466  //get all items
467  QList<QTreeWidgetItem*> items = mAccountList->findItems("", Qt::MatchContains | Qt::MatchRecursive);
468  QList<QTreeWidgetItem*>::iterator it;
469  for (it = items.begin(); it != items.end(); ++it)
470  {
471  KopeteAccountLVI *i = dynamic_cast<KopeteAccountLVI*>(*it);
472  if (!i || !i->account())
473  continue;
474 
475  if (i->account()->myself() == contact)
476  {
477  (*it)->setIcon( 0, newStatus.iconFor(i->account()) );
478  (*it)->setText( 1, newStatus.description() );
479  break;
480  }
481  }
482 
483 }
484 
485 void KopeteAccountConfig::slotAccountAdded( Kopete::Account * account )
486 {
487  save();
488  load();
489  Q_UNUSED(account);
490 }
491 
492 void KopeteAccountConfig::slotAccountRemoved( const Kopete::Account * account )
493 {
494  QList<QTreeWidgetItem*> items = mAccountList->findItems("", Qt::MatchContains | Qt::MatchRecursive);
495  QList<QTreeWidgetItem*>::iterator it;
496  for (it = items.begin(); it != items.end(); ++it)
497  {
498  KopeteAccountLVI *lvi = dynamic_cast<KopeteAccountLVI*>(*it);
499  if ( lvi && lvi->account() == account)
500  {
501  delete lvi;
502  break;
503  }
504  }
505 }
506 
507 void KopeteAccountConfig::slotItemChanged(QTreeWidgetItem* item)
508 {
509  if(!item)
510  return;
511  KopeteAccountLVI *a = dynamic_cast<KopeteAccountLVI*>(item);
512  KopeteIdentityLVI *i = dynamic_cast<KopeteIdentityLVI*>(item->parent());
513  if(a && i)
514  {
515  if(a->account()->identity() != i->identity() )
516  {
517  a->account()->setIdentity( i->identity() );
518  changed(true);
519  }
520  }
521 }
522 
523 bool KopeteAccountConfig::eventFilter( QObject *obj, QEvent *event )
524 {
525  if ( obj == mAccountList && event->type() == QEvent::ContextMenu )
526  {
527  QContextMenuEvent *cmEvent = static_cast<QContextMenuEvent *>(event);
528  KopeteIdentityLVI *ilvi = selectedIdentity();
529  if ( ilvi && ilvi->identity() )
530  {
531  m_identityContextMenu->popup(cmEvent->globalPos());
532  }
533 
534  KopeteAccountLVI *alvi = selectedAccount();
535  if ( alvi && alvi->account() )
536  {
537  m_accountContextMenu->popup(cmEvent->globalPos());
538  }
539  return true;
540  }
541 
542  return QObject::eventFilter( obj, event );
543 }
544 
545 void KopeteAccountConfig::configureActions()
546 {
547  // Add account
548  m_actionAccountAdd = new KAction( i18n( "&Add Account..." ), this );
549  m_actionAccountAdd->setIcon( KIcon("list-add") );
550  mButtonAccountAdd->setIcon( m_actionAccountAdd->icon() );
551  mButtonAccountAdd->setText( m_actionAccountAdd->text() );
552  connect( m_actionAccountAdd, SIGNAL(triggered(bool)), this, SLOT(slotAddAccount()) );
553  connect( mButtonAccountAdd, SIGNAL(clicked()), m_actionAccountAdd, SLOT(trigger()) );
554 
555  // Modify account
556  m_actionAccountModify = new KAction( i18n( "&Modify Account..." ), this );
557  m_actionAccountModify->setIcon( KIcon("configure") );
558  mButtonAccountModify->setIcon( m_actionAccountModify->icon() );
559  mButtonAccountModify->setText( m_actionAccountModify->text() );
560  connect( m_actionAccountModify, SIGNAL(triggered(bool)), this, SLOT(slotModify()));
561  connect( mButtonAccountModify, SIGNAL(clicked()), m_actionAccountModify, SLOT(trigger()) );
562 
563  // Remove account
564  m_actionAccountRemove = new KAction( i18n( "&Remove Account" ), this );
565  m_actionAccountRemove->setIcon( KIcon("edit-delete") );
566  m_actionAccountRemove->setShortcut(KShortcut(Qt::Key_Delete));
567  mButtonAccountRemove->setIcon( m_actionAccountRemove->icon() );
568  mButtonAccountRemove->setText( m_actionAccountRemove->text() );
569  connect( m_actionAccountRemove, SIGNAL(triggered(bool)), this, SLOT(removeAccount()) );
570  connect( mButtonAccountRemove, SIGNAL(clicked()), m_actionAccountRemove, SLOT(trigger()) );
571 
572  // Switch identity for an account
573  m_actionAccountSwitchIdentity = new KAction( i18n( "&Switch Identity..." ), this );
574  mButtonAccountSwitchIdentity->setText( m_actionAccountSwitchIdentity->text() );
575  connect( m_actionAccountSwitchIdentity, SIGNAL(triggered(bool)), this, SLOT(slotAccountSwitchIdentity()) );
576  connect( mButtonAccountSwitchIdentity, SIGNAL(clicked()), m_actionAccountSwitchIdentity, SLOT(trigger()) );
577 
578  // Set/clear custom color for account
579  m_actionAccountSetColor = new KAction( i18n( "Set C&olor..." ), this );
580  mButtonAccountSetColor->setText( m_actionAccountSetColor->text() );
581  connect( m_actionAccountSetColor, SIGNAL(triggered(bool)), this, SLOT(slotAccountSetColor()) );
582  connect( mButtonAccountSetColor, SIGNAL(clicked()), m_actionAccountSetColor, SLOT(trigger()) );
583 
584  // Add identity
585  m_actionIdentityAdd = new KAction( i18n( "Add &Identity..." ), this );
586  m_actionIdentityAdd->setIcon( KIcon("list-add") );
587  mButtonIdentityAdd->setIcon( m_actionIdentityAdd->icon() );
588  mButtonIdentityAdd->setText( m_actionIdentityAdd->text() );
589  connect( m_actionIdentityAdd, SIGNAL(triggered(bool)), this, SLOT(slotAddIdentity()) );
590  connect( mButtonIdentityAdd, SIGNAL(clicked()), m_actionIdentityAdd, SLOT(trigger()) );
591 
592  // Copy identity
593  m_actionIdentityCopy = new KAction( i18n( "&Copy Identity..." ), this );
594  m_actionIdentityCopy->setIcon( KIcon("edit-copy") );
595  mButtonIdentityCopy->setIcon( m_actionIdentityCopy->icon() );
596  mButtonIdentityCopy->setText( m_actionIdentityCopy->text() );
597  connect( m_actionIdentityCopy, SIGNAL(triggered(bool)), this, SLOT(slotCopyIdentity()) );
598  connect( mButtonIdentityCopy, SIGNAL(clicked()), m_actionIdentityCopy, SLOT(trigger()) );
599 
600  // Modify identity
601  m_actionIdentityModify = new KAction( i18n( "M&odify Identity..." ), this );
602  m_actionIdentityModify->setIcon( KIcon("configure") );
603  mButtonIdentityModify->setIcon( m_actionIdentityModify->icon() );
604  mButtonIdentityModify->setText( m_actionIdentityModify->text() );
605  connect( m_actionIdentityModify, SIGNAL(triggered(bool)), this, SLOT(slotModify()) );
606  connect( mButtonIdentityModify, SIGNAL(clicked()), m_actionIdentityModify, SLOT(trigger()) );
607 
608  // Remove identity
609  m_actionIdentityRemove = new KAction( i18n( "R&emove Identity" ), this );
610  m_actionIdentityRemove->setIcon( KIcon("edit-delete") );
611  mButtonIdentityRemove->setIcon( m_actionIdentityRemove->icon() );
612  mButtonIdentityRemove->setText( m_actionIdentityRemove->text() );
613  connect( m_actionIdentityRemove, SIGNAL(triggered(bool)), this, SLOT(removeIdentity()) );
614  connect( mButtonIdentityRemove, SIGNAL(clicked()), m_actionIdentityRemove, SLOT(trigger()) );
615 
616  // Switch identity for an identity
617  m_actionIdentitySetDefault = new KAction( i18n( "Set &Default" ), this );
618  mButtonIdentitySetDefault->setText( m_actionIdentitySetDefault->text() );
619  connect( m_actionIdentitySetDefault, SIGNAL(triggered(bool)), this, SLOT(slotSetDefaultIdentity()) );
620  connect( mButtonIdentitySetDefault, SIGNAL(clicked()), m_actionIdentitySetDefault, SLOT(trigger()) );
621 }
622 
623 void KopeteAccountConfig::configureMenus()
624 {
625  // Account management context menu
626  m_accountContextMenu = new KMenu ( this );
627  m_accountContextMenu->addAction( m_actionAccountModify );
628  m_accountContextMenu->addAction( m_actionAccountRemove );
629  m_accountContextMenu->addAction( m_actionAccountSetColor );
630 
631  // Identity management context menu
632  m_identityContextMenu = new KMenu ( this );
633  m_identityContextMenu->addAction( m_actionAccountAdd );
634  m_identityContextMenu->addSeparator();
635  m_identityContextMenu->addAction( m_actionIdentityModify );
636  m_identityContextMenu->addAction( m_actionIdentityRemove );
637  m_identityContextMenu->addAction( m_actionIdentitySetDefault );
638 }
639 
640 void KopeteAccountConfig::slotItemClicked( QTreeWidgetItem * item, int /*column*/ )
641 {
642  KopeteAccountLVI *account = static_cast<KopeteAccountLVI*>( item );
643  if ( account && account->parent() )
644  account->account()->setExcludeConnect ( account->checkState(0) == Qt::Unchecked ? true : false );
645 }
646 
647 
648 #include "kopeteaccountconfig.moc"
649 
650 // vim: set noet ts=4 sts=4 sw=4:
accountPriorityLessThan
bool accountPriorityLessThan(const Kopete::Account *a, const Kopete::Account *b)
Definition: kopeteaccountconfig.cpp:129
QEvent
QWidget
QEvent::type
Type type() const
QHash::insert
iterator insert(const Key &key, const T &value)
QTreeWidgetItem::checkState
Qt::CheckState checkState(int column) const
identityPriorityLessThan
bool identityPriorityLessThan(const Kopete::Identity *a, const Kopete::Identity *b)
Definition: kopeteaccountconfig.cpp:134
QTreeWidgetItem::child
QTreeWidgetItem * child(int index) const
QTreeWidgetItem::setFont
void setFont(int column, const QFont &font)
AddAccountWizard::setIdentity
void setIdentity(Kopete::Identity *identity)
Set the identity assigned to the account.
Definition: addaccountwizard.cpp:287
QFont
QPointer
QStringList::contains
bool contains(const QString &str, Qt::CaseSensitivity cs) const
QTreeWidgetItem::setIcon
void setIcon(int column, const QIcon &icon)
QWidget::setVisible
virtual void setVisible(bool visible)
KopeteIdentityLVI
Definition: accounttreewidget.h:50
KDialog
addaccountwizard.h
QContextMenuEvent::globalPos
const QPoint & globalPos() const
K_PLUGIN_FACTORY
K_PLUGIN_FACTORY(KopeteAccountConfigFactory, registerPlugin< KopeteAccountConfig >();) KopeteAccountConfig
Definition: kopeteaccountconfig.cpp:56
QFont::setBold
void setBold(bool enable)
KopeteAccountConfig::load
virtual void load()
Definition: kopeteaccountconfig.cpp:145
QList::append
void append(const T &value)
KopeteAccountConfig
Definition: kopeteaccountconfig.h:45
QList::empty
bool empty() const
QHash
QContextMenuEvent
QObject
QTreeWidgetItem::font
QFont font(int column) const
QObject::eventFilter
virtual bool eventFilter(QObject *watched, QEvent *event)
QList::first
T & first()
QString
QList
QColor
kopeteaccountconfig.h
QList::iterator
QStringList
QList::end
iterator end()
KopeteIdentityLVI::identity
Kopete::Identity * identity()
Definition: accounttreewidget.h:54
QSize
KopeteAccountConfig::save
virtual void save()
Definition: kopeteaccountconfig.cpp:105
QTreeWidgetItem::parent
QTreeWidgetItem * parent() const
QTreeWidgetItem::setExpanded
void setExpanded(bool expand)
QTreeWidgetItem
accountidentitydialog.h
identitydialog.h
QTreeWidgetItem::setSelected
void setSelected(bool select)
QHeaderView::setResizeMode
void setResizeMode(ResizeMode mode)
KAction
KopeteAccountConfig::eventFilter
virtual bool eventFilter(QObject *obj, QEvent *event)
Definition: kopeteaccountconfig.cpp:523
QTreeWidgetItem::setText
void setText(int column, const QString &text)
IdentityDialog
Definition: identitydialog.h:29
QHash::contains
bool contains(const Key &key) const
AddAccountWizard
Definition: addaccountwizard.h:43
QHeaderView
QTreeWidgetItem::childCount
int childCount() const
KopeteAccountLVI
Definition: accounttreewidget.h:39
AccountIdentityDialog::changeAccountIdentity
static bool changeAccountIdentity(QWidget *parent, Kopete::Account *account, Kopete::Identity *hidden_ident=0, const QString &message=QString())
This is the easiest (and the recommended) way of changing the account identity.
Definition: accountidentitydialog.cpp:198
QList::begin
iterator begin()
KCModule
KopeteAccountLVI::account
Kopete::Account * account()
Definition: accounttreewidget.h:43
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:29:08 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kopete/kopete

Skip menu "kopete/kopete"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdenetwork API Reference

Skip menu "kdenetwork API Reference"
  • kget
  • kopete
  •   kopete
  •   libkopete
  • krdc
  • krfb

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal