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.
283 lines
9.4 KiB
283 lines
9.4 KiB
/*
|
|
accountconfig.cpp - Kopete account config page
|
|
|
|
Copyright (c) 2003-2004 by Olivier Goffart <ogoffart @ kde.org>
|
|
Copyright (c) 2003 by Martijn Klingens <klingens@kde.org>
|
|
|
|
Kopete (c) 2003-2004 by the Kopete developers <kopete-devel@kde.org>
|
|
|
|
*************************************************************************
|
|
* *
|
|
* 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. *
|
|
* *
|
|
*************************************************************************
|
|
*/
|
|
|
|
#include "kopeteaccountconfig.h"
|
|
|
|
#include <tqcheckbox.h>
|
|
#include <tqlayout.h>
|
|
#include <tqguardedptr.h>
|
|
|
|
#include <kcolorbutton.h>
|
|
#include <kpushbutton.h>
|
|
#include <kdebug.h>
|
|
#include <kdialogbase.h>
|
|
#include <kgenericfactory.h>
|
|
#include <kiconloader.h>
|
|
#include <tdelistview.h>
|
|
#include <tdelocale.h>
|
|
#include <tdemessagebox.h>
|
|
|
|
#include "addaccountwizard.h"
|
|
#include "editaccountwidget.h"
|
|
#include "kopeteaccountconfigbase.h"
|
|
#include "kopeteaccountmanager.h"
|
|
#include "kopeteprotocol.h"
|
|
#include "kopeteaccount.h"
|
|
|
|
class KopeteAccountLVI : public TDEListViewItem
|
|
{
|
|
public:
|
|
KopeteAccountLVI( Kopete::Account *a, TDEListView *p ) : TDEListViewItem( p ){ m_account = a; }
|
|
Kopete::Account *account() { return m_account; }
|
|
|
|
private:
|
|
//need to be guarded because some accounts may be linked (that's the case of jabber transports)
|
|
TQGuardedPtr<Kopete::Account> m_account;
|
|
};
|
|
|
|
typedef KGenericFactory<KopeteAccountConfig, TQWidget> KopeteAccountConfigFactory;
|
|
K_EXPORT_COMPONENT_FACTORY( kcm_kopete_accountconfig, KopeteAccountConfigFactory( "kcm_kopete_accountconfig" ) )
|
|
|
|
KopeteAccountConfig::KopeteAccountConfig( TQWidget *parent, const char * /* name */, const TQStringList &args )
|
|
: TDECModule( KopeteAccountConfigFactory::instance(), parent, args )
|
|
{
|
|
|
|
( new TQVBoxLayout( this ) )->setAutoAdd( true );
|
|
m_view = new KopeteAccountConfigBase( this, "KopeteAccountConfig::m_view" );
|
|
|
|
m_view->mButtonUp->setIconSet( SmallIconSet( "go-up" ) );
|
|
m_view->mButtonDown->setIconSet( SmallIconSet( "go-down" ) );
|
|
|
|
connect( m_view->mButtonNew, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotAddAccount() ) );
|
|
connect( m_view->mButtonEdit, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotEditAccount() ) );
|
|
connect( m_view->mButtonRemove, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotRemoveAccount() ) );
|
|
connect( m_view->mButtonUp, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotAccountUp() ) );
|
|
connect( m_view->mButtonDown, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotAccountDown() ) );
|
|
connect( m_view->mAccountList, TQT_SIGNAL( selectionChanged() ), this, TQT_SLOT( slotItemSelected() ) );
|
|
connect( m_view->mAccountList, TQT_SIGNAL( doubleClicked( TQListViewItem * ) ), this, TQT_SLOT( slotEditAccount() ) );
|
|
connect( m_view->mUseColor, TQT_SIGNAL( toggled( bool ) ), this, TQT_SLOT( slotColorChanged() ) );
|
|
connect( m_view->mColorButton, TQT_SIGNAL( changed( const TQColor & ) ), this, TQT_SLOT( slotColorChanged() ) );
|
|
|
|
m_view->mAccountList->setSorting(-1);
|
|
|
|
setButtons( Help );
|
|
load();
|
|
}
|
|
|
|
void KopeteAccountConfig::save()
|
|
{
|
|
uint priority = m_view->mAccountList->childCount();
|
|
|
|
KopeteAccountLVI *i = static_cast<KopeteAccountLVI*>( m_view->mAccountList->firstChild() );
|
|
while( i )
|
|
{
|
|
if(!i->account())
|
|
continue;
|
|
i->account()->setPriority( priority-- );
|
|
i = static_cast<KopeteAccountLVI*>( i->nextSibling() );
|
|
}
|
|
|
|
TQMap<Kopete::Account *, TQColor>::Iterator it;
|
|
for(it=m_newColors.begin() ; it != m_newColors.end() ; ++it)
|
|
it.key()->setColor(it.data());
|
|
m_newColors.clear();
|
|
|
|
Kopete::AccountManager::self()->save();
|
|
|
|
load(); //refresh the colred accounts (in case of apply)
|
|
}
|
|
|
|
void KopeteAccountConfig::load()
|
|
{
|
|
KopeteAccountLVI *lvi = 0L;
|
|
|
|
m_view->mAccountList->clear();
|
|
|
|
TQPtrList<Kopete::Account> accounts = Kopete::AccountManager::self()->accounts();
|
|
for ( Kopete::Account *i = accounts.first() ; i; i = accounts.next() )
|
|
{
|
|
// Insert the item after the previous one
|
|
lvi = new KopeteAccountLVI( i, m_view->mAccountList );
|
|
lvi->setText( 0, i->protocol()->displayName() );
|
|
lvi->setPixmap( 0, i->accountIcon() );
|
|
lvi->setText( 1, i->accountLabel() );
|
|
}
|
|
|
|
m_newColors.clear();
|
|
slotItemSelected();
|
|
}
|
|
|
|
void KopeteAccountConfig::slotItemSelected()
|
|
{
|
|
m_protected=true;
|
|
KopeteAccountLVI *itemSelected = static_cast<KopeteAccountLVI*>( m_view->mAccountList->selectedItem() );
|
|
|
|
m_view->mButtonEdit->setEnabled( itemSelected );
|
|
m_view->mButtonRemove->setEnabled( itemSelected );
|
|
|
|
if ( itemSelected && itemSelected->account() )
|
|
{
|
|
m_view->mButtonUp->setEnabled( itemSelected->itemAbove() );
|
|
m_view->mButtonDown->setEnabled( itemSelected->itemBelow() );
|
|
|
|
Kopete::Account *account = itemSelected->account();
|
|
TQColor color= m_newColors.contains(account) ? m_newColors[account] : account->color();
|
|
m_view->mUseColor->setEnabled( true );
|
|
m_view->mUseColor->setChecked( color.isValid() );
|
|
m_view->mColorButton->setColor( color );
|
|
m_view->mColorButton->setEnabled( m_view->mUseColor->isChecked() );
|
|
|
|
}
|
|
else
|
|
{
|
|
m_view->mButtonUp->setEnabled( false );
|
|
m_view->mButtonDown->setEnabled( false);
|
|
m_view->mUseColor->setEnabled( false );
|
|
m_view->mColorButton->setEnabled( false );
|
|
}
|
|
m_protected=false;
|
|
}
|
|
|
|
void KopeteAccountConfig::slotAccountUp()
|
|
{
|
|
KopeteAccountLVI *itemSelected = static_cast<KopeteAccountLVI*>( m_view->mAccountList->selectedItem() );
|
|
if ( !itemSelected )
|
|
return;
|
|
|
|
if ( itemSelected->itemAbove() )
|
|
itemSelected->itemAbove()->moveItem( itemSelected );
|
|
|
|
slotItemSelected();
|
|
emit changed( true );
|
|
}
|
|
|
|
void KopeteAccountConfig::slotAccountDown()
|
|
{
|
|
KopeteAccountLVI *itemSelected = static_cast<KopeteAccountLVI*>( m_view->mAccountList->selectedItem() );
|
|
if ( !itemSelected )
|
|
return;
|
|
|
|
itemSelected->moveItem( itemSelected->itemBelow() );
|
|
|
|
slotItemSelected();
|
|
emit changed( true );
|
|
}
|
|
|
|
void KopeteAccountConfig::slotAddAccount()
|
|
{
|
|
AddAccountWizard *m_addwizard = new AddAccountWizard( this, "addAccountWizard", true );
|
|
connect( m_addwizard, TQT_SIGNAL( destroyed( TQObject * ) ), this, TQT_SLOT( slotAddWizardDone() ) );
|
|
m_addwizard->show();
|
|
}
|
|
|
|
void KopeteAccountConfig::slotEditAccount()
|
|
{
|
|
KopeteAccountLVI *lvi = static_cast<KopeteAccountLVI*>( m_view->mAccountList->selectedItem() );
|
|
if ( !lvi || !lvi->account() )
|
|
return;
|
|
|
|
Kopete::Account *ident = lvi->account();
|
|
Kopete::Protocol *proto = ident->protocol();
|
|
|
|
KDialogBase *editDialog = new KDialogBase( this, "KopeteAccountConfig::editDialog", true,
|
|
i18n( "Edit Account" ), KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok, true );
|
|
|
|
KopeteEditAccountWidget *m_accountWidget = proto->createEditAccountWidget( ident, editDialog );
|
|
if ( !m_accountWidget )
|
|
return;
|
|
|
|
// FIXME: Why the #### is EditAccountWidget not a TQWidget?!? This sideways casting
|
|
// is braindead and error-prone. Looking at MSN the only reason I can see is
|
|
// because it allows direct subclassing of designer widgets. But what is
|
|
// wrong with embedding the designer widget in an empty TQWidget instead?
|
|
// Also, if this REALLY has to be a pure class and not a widget, then the
|
|
// class should at least be renamed to EditAccountIface instead - Martijn
|
|
TQWidget *w = dynamic_cast<TQWidget *>( m_accountWidget );
|
|
if ( !w )
|
|
return;
|
|
|
|
editDialog->setMainWidget( w );
|
|
if ( editDialog->exec() == TQDialog::Accepted )
|
|
{
|
|
if( m_accountWidget->validateData() )
|
|
m_accountWidget->apply();
|
|
}
|
|
|
|
// FIXME: Why deleteLater? It shouldn't be in use anymore at this point - Martijn
|
|
editDialog->deleteLater();
|
|
load();
|
|
Kopete::AccountManager::self()->save();
|
|
}
|
|
|
|
void KopeteAccountConfig::slotRemoveAccount()
|
|
{
|
|
KopeteAccountLVI *lvi = static_cast<KopeteAccountLVI*>( m_view->mAccountList->selectedItem() );
|
|
if ( !lvi || !lvi->account() )
|
|
return;
|
|
|
|
Kopete::Account *i = lvi->account();
|
|
if ( KMessageBox::warningContinueCancel( this, i18n( "Are you sure you want to remove the account \"%1\"?" ).arg( i->accountLabel() ),
|
|
i18n( "Remove Account" ), KGuiItem(i18n( "Remove Account" ), "edit-delete"),
|
|
"askRemoveAccount", KMessageBox::Notify | KMessageBox::Dangerous ) == KMessageBox::Continue )
|
|
{
|
|
Kopete::AccountManager::self()->removeAccount( i );
|
|
delete lvi;
|
|
}
|
|
}
|
|
|
|
void KopeteAccountConfig::slotAddWizardDone()
|
|
{
|
|
save();
|
|
load();
|
|
}
|
|
|
|
void KopeteAccountConfig::slotColorChanged()
|
|
{
|
|
if(m_protected) //this slot is called because we changed the button
|
|
return; // color because another account has been selected
|
|
|
|
KopeteAccountLVI *lvi = static_cast<KopeteAccountLVI*>( m_view->mAccountList->selectedItem() );
|
|
if ( !lvi || !lvi->account() )
|
|
return;
|
|
Kopete::Account *account = lvi->account();
|
|
|
|
if(!account->color().isValid() && !m_view->mUseColor->isChecked() )
|
|
{ //we don't use color for that account and nothing changed.
|
|
m_newColors.remove(account);
|
|
return;
|
|
}
|
|
else if(!m_view->mUseColor->isChecked())
|
|
{ //the user disabled account coloring, but it was activated before
|
|
m_newColors[account]=TQColor();
|
|
emit changed(true);
|
|
return;
|
|
}
|
|
else if(account->color() == m_view->mColorButton->color() )
|
|
{ //The color has not changed.
|
|
m_newColors.remove(account);
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
m_newColors[account]=m_view->mColorButton->color();
|
|
emit changed(true);
|
|
}
|
|
}
|
|
|
|
#include "kopeteaccountconfig.moc"
|