diff options
Diffstat (limited to 'kopete/protocols/oscar/aim/aimuserinfo.cpp')
-rw-r--r-- | kopete/protocols/oscar/aim/aimuserinfo.cpp | 224 |
1 files changed, 224 insertions, 0 deletions
diff --git a/kopete/protocols/oscar/aim/aimuserinfo.cpp b/kopete/protocols/oscar/aim/aimuserinfo.cpp new file mode 100644 index 00000000..0cce3a5c --- /dev/null +++ b/kopete/protocols/oscar/aim/aimuserinfo.cpp @@ -0,0 +1,224 @@ +/* + oscaruserinfo.cpp - Oscar Protocol Plugin + + Copyright (c) 2002 by Tom Linsky <twl6@po.cwru.edu> + + Kopete (c) 2002 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 "aimuserinfo.h" + +#include "aimaccount.h" +#include "aimcontact.h" +#include "aimprotocol.h" + +#include <tqlineedit.h> +#include <tqlabel.h> +#include <tqlayout.h> +#include <tqpushbutton.h> +#include <tqtimer.h> + +#include <tdelocale.h> +#include <kstandarddirs.h> +#include <ktextbrowser.h> +#include <kdebug.h> +#include <tdeapplication.h> + +#include <ktextedit.h> +#include <krun.h> + +AIMUserInfoDialog::AIMUserInfoDialog( Kopete::Contact *c, AIMAccount *acc, bool modal, + TQWidget *parent, const char* name ) + : KDialogBase( parent, name, modal, i18n( "User Information on %1" ) + .arg( c->property( Kopete::Global::Properties::self()->nickName() ).value().toString() ), + Cancel | Ok , Ok, true ) +{ + kdDebug(14200) << k_funcinfo << "for contact '" << c->contactId() << "'" << endl; + + m_contact = c; + mAccount = acc; + + mMainWidget = new AIMUserInfoWidget(this, "aimuserinfowidget"); + setMainWidget(mMainWidget); + + TQObject::connect(this, TQT_SIGNAL(okClicked()), this, TQT_SLOT(slotSaveClicked())); + TQObject::connect(this, TQT_SIGNAL(user1Clicked()), this, TQT_SLOT(slotUpdateClicked())); + TQObject::connect(this, TQT_SIGNAL(cancelClicked()), this, TQT_SLOT(slotCloseClicked())); + TQObject::connect(c, TQT_SIGNAL(updatedProfile()), this, TQT_SLOT(slotUpdateProfile())); + + mMainWidget->txtScreenName->setText( c->contactId() ); + + TQString nickName = c->property( Kopete::Global::Properties::self()->nickName() ).value().toString(); + if( nickName.isEmpty() ) + mMainWidget->txtNickName->setText( c->contactId() ); + else + mMainWidget->txtNickName->setText( nickName ); + + if(m_contact == mAccount->myself()) // edit own account profile + { + mMainWidget->lblWarnLevel->hide(); + mMainWidget->txtWarnLevel->hide(); + mMainWidget->lblIdleTime->hide(); + mMainWidget->txtIdleTime->hide(); + mMainWidget->lblOnlineSince->hide(); + mMainWidget->txtOnlineSince->hide(); + mMainWidget->txtAwayMessage->hide(); + mMainWidget->lblAwayMessage->hide(); + + userInfoView=0L; + mMainWidget->userInfoFrame->setFrameStyle(TQFrame::NoFrame | TQFrame::Plain); + TQVBoxLayout *l = new TQVBoxLayout(mMainWidget->userInfoFrame); + userInfoEdit = new KTextEdit(TQString(), TQString(), + mMainWidget->userInfoFrame, "userInfoEdit"); + userInfoEdit->setTextFormat(PlainText); + + AIMMyselfContact* aimmc = dynamic_cast<AIMMyselfContact*>( c ); + if ( aimmc ) + userInfoEdit->setText( aimmc->userProfile() ); + else + userInfoEdit->setText( TQString() ); + + setButtonText(Ok, i18n("&Save Profile")); + showButton(User1, false); + l->addWidget(userInfoEdit); + } + else + { + userInfoEdit=0L; + mMainWidget->userInfoFrame->setFrameStyle(TQFrame::NoFrame | TQFrame::Plain); + TQVBoxLayout *l = new TQVBoxLayout(mMainWidget->userInfoFrame); + userInfoView = new KTextBrowser(mMainWidget->userInfoFrame, "userInfoView"); + userInfoView->setTextFormat(AutoText); + userInfoView->setNotifyClick(true); + TQObject::connect( + userInfoView, TQT_SIGNAL(urlClick(const TQString&)), + this, TQT_SLOT(slotUrlClicked(const TQString&))); + TQObject::connect( + userInfoView, TQT_SIGNAL(mailClick(const TQString&, const TQString&)), + this, TQT_SLOT(slotMailClicked(const TQString&, const TQString&))); + showButton(Cancel, false); + setButtonText(Ok, i18n("&Close")); + setEscapeButton(Ok); + l->addWidget(userInfoView); + + if(m_contact->isOnline()) + { + // Update the user view to indicate that we're requesting the user's profile + userInfoView->setText(i18n("Requesting User Profile, please wait...")); + } + TQTimer::singleShot(0, this, TQT_SLOT(slotUpdateProfile())); + } +} + +AIMUserInfoDialog::~AIMUserInfoDialog() +{ + kdDebug(14200) << k_funcinfo << "Called." << endl; +} + +void AIMUserInfoDialog::slotUpdateClicked() +{ + kdDebug(14200) << k_funcinfo << "Called." << endl; + TQString newNick = mMainWidget->txtNickName->text(); + TQString currentNick = m_contact->property( Kopete::Global::Properties::self()->nickName() ).value().toString(); + if ( !newNick.isEmpty() && ( newNick != currentNick ) ) + { + //m_contact->rename(newNick); + //emit updateNickname(newNick); + setCaption(i18n("User Information on %1").arg(newNick)); + } + +} + +void AIMUserInfoDialog::slotSaveClicked() +{ + kdDebug(14200) << k_funcinfo << "Called." << endl; + + if (userInfoEdit) + { // editable mode, set profile + TQString newNick = mMainWidget->txtNickName->text(); + TQString currentNick = m_contact->property( Kopete::Global::Properties::self()->nickName() ).value().toString(); + if(!newNick.isEmpty() && ( newNick != currentNick ) ) + { + //m_contact->rename(newNick); + //emit updateNickname(newNick); + setCaption(i18n("User Information on %1").arg(newNick)); + } + + mAccount->setUserProfile(userInfoEdit->text()); + } + + emit closing(); +} + +void AIMUserInfoDialog::slotCloseClicked() +{ + kdDebug(14200) << k_funcinfo << "Called." << endl; + emit closing(); +} + +void AIMUserInfoDialog::slotUpdateProfile() +{ + kdDebug(14152) << k_funcinfo << "Got User Profile." << endl; + AIMProtocol* p = static_cast<AIMProtocol*>( mAccount->protocol() ); + TQString awayMessage = m_contact->property( p->awayMessage ).value().toString(); + mMainWidget->txtAwayMessage->setText( awayMessage ); + + if ( awayMessage.isNull() ) + { + mMainWidget->txtAwayMessage->hide(); + mMainWidget->lblAwayMessage->hide(); + } + else + { + mMainWidget->txtAwayMessage->show(); + mMainWidget->lblAwayMessage->show(); + } + + TQString onlineSince = m_contact->property("onlineSince").value().toString(); + //TQString onlineSince = m_details.onlineSinceTime().toString(); + mMainWidget->txtOnlineSince->setText( onlineSince ); + + AIMContact* c = static_cast<AIMContact*>( m_contact ); + mMainWidget->txtIdleTime->setText(c->formattedIdleTime()); + mMainWidget->txtWarnLevel->setText(TQString::number(c->warningLevel())); + + TQString contactProfile = m_contact->property( p->clientProfile ).value().toString(); + if ( contactProfile.isNull() ) + { + contactProfile = + i18n("<html><body><I>No user information provided</I></body></html>"); + } + + if(userInfoEdit) + { + userInfoEdit->setText(contactProfile); + } + else if(userInfoView) + { + userInfoView->setText(contactProfile); + } + +} + +void AIMUserInfoDialog::slotUrlClicked(const TQString &url) +{ + new KRun(KURL(url)); +} + +void AIMUserInfoDialog::slotMailClicked(const TQString&, const TQString &address) +{ + new KRun(KURL(address)); +} + +#include "aimuserinfo.moc" + +//kate: indent-mode csands; tab-width 4; space-indent off; replace-tabs off; |