// // Copyright (C) 2003 Grzegorz Jaskiewicz // // gadupubdir.cpp // Gadu-Gadu Public directory contains people data, using it you can search friends // different criteria // // 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. // // This program 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., 59 Temple Place - Suite 330, Boston, MA // 02111-1307, USA. // #include "gadupubdir.h" #include "gadueditcontact.h" #include "gaducontactlist.h" #include "gaduaccount.h" #include "gaduprotocol.h" #include #include #include #include #include #include #include #include #include #include #include GaduPublicDir::GaduPublicDir( GaduAccount* account, QWidget* parent, const char* name ) : KDialogBase( parent, name, false, QString::null, User1|User2|User3|Cancel, User2 ) { mAccount = account; createWidget(); initConnections(); show(); } GaduPublicDir::GaduPublicDir( GaduAccount* account, int searchFor, QWidget* parent, const char* name ) : KDialogBase( parent, name, false, QString::null, User1|User2|User3|Cancel, User2 ) { ResLine rs; mAccount = account; createWidget(); initConnections(); kdDebug( 14100 ) << "search for Uin: " << searchFor << endl; mMainWidget->listFound->clear(); show(); if ( searchFor == 0 ) { return; } mMainWidget->pubsearch->raiseWidget( 1 ); mMainWidget->radioByUin->setChecked( true ); setButtonText( User2, i18n( "Search &More..." ) ); showButton( User3, true ); showButton( User1, true ); enableButton( User3, false ); enableButton( User2, false ); // now it is time to switch to Right Page(tm) rs.uin = searchFor; fName = fSurname = fNick = fCity = QString::null; fUin = searchFor; fGender = fAgeFrom = fAgeTo = 0; fOnlyOnline = false; mAccount->pubDirSearch( rs, fAgeFrom, fAgeTo, fOnlyOnline ); } void GaduPublicDir::createWidget() { setCaption( i18n( "Gadu-Gadu Public Directory" ) ); mMainWidget = new GaduPublicDirectory( this ); setMainWidget( mMainWidget ); mMainWidget->UIN->setValidChars( "1234567890" ); setButtonText( User1, i18n( "&New Search" ) ); setButtonText( User2, i18n( "S&earch" ) ); setButtonText( User3, i18n( "&Add User..." ) ); setButtonText( Cancel, i18n( "&Close" ) ); showButton( User1, false ); showButton( User3, false ); enableButton( User2, false ); mMainWidget->radioByData->setChecked( true ); mAccount->pubDirSearchClose(); } void GaduPublicDir::slotAddContact() { GaduContactsList::ContactLine* cl = new GaduContactsList::ContactLine; QListViewItem* item = mMainWidget->listFound->currentItem(); cl->ignored = false; cl->firstname = item->text( 1 ); cl->uin = item->text( 5 ); cl->nickname = item->text( 2 ); cl->surname = fSurname; // GaduEditContact *ed = new GaduEditContact( mAccount, cl, this ); } void GaduPublicDir::slotListSelected( ) { QListViewItem* item = mMainWidget->listFound->currentItem(); if ( item ) { enableButton( User3, true ); } else { enableButton( User3, false ); } } void GaduPublicDir::initConnections() { connect( this, SIGNAL( user2Clicked() ), SLOT( slotSearch() ) ); connect( this, SIGNAL( user1Clicked() ), SLOT( slotNewSearch() ) ); connect( this, SIGNAL( user3Clicked() ), SLOT( slotAddContact() ) ); connect( mAccount, SIGNAL( pubDirSearchResult( const SearchResult&, unsigned int ) ), SLOT( slotSearchResult( const SearchResult&, unsigned int ) ) ); connect( mMainWidget->nameS, SIGNAL( textChanged( const QString &) ), SLOT( inputChanged( const QString & ) ) ); connect( mMainWidget->surname, SIGNAL( textChanged( const QString &) ), SLOT( inputChanged( const QString & ) ) ); connect( mMainWidget->nick, SIGNAL( textChanged( const QString &) ), SLOT( inputChanged( const QString & ) ) ); connect( mMainWidget->UIN, SIGNAL( textChanged( const QString &) ), SLOT( inputChanged( const QString & ) ) ); connect( mMainWidget->cityS, SIGNAL( textChanged( const QString &) ), SLOT( inputChanged( const QString & ) ) ); connect( mMainWidget->gender, SIGNAL( activated( const QString &) ), SLOT( inputChanged( const QString & ) ) ); connect( mMainWidget->ageFrom, SIGNAL( valueChanged( const QString &) ), SLOT( inputChanged( const QString & ) ) ); connect( mMainWidget->ageTo, SIGNAL( valueChanged( const QString &) ), SLOT( inputChanged( const QString & ) ) ); connect( mMainWidget->radioByData, SIGNAL( toggled( bool ) ), SLOT( inputChanged( bool ) ) ); connect( mMainWidget->listFound, SIGNAL( selectionChanged () ), SLOT( slotListSelected() ) ); } void GaduPublicDir::inputChanged( bool ) { inputChanged( QString::null ); } void GaduPublicDir::inputChanged( const QString& ) { if ( validateData() == false ) { enableButton( User2, false ); } else { enableButton( User2, true ); } } void GaduPublicDir::getData() { fName = mMainWidget->nameS->text(); fSurname = mMainWidget->surname->text(); fNick = mMainWidget->nick->text(); fUin = mMainWidget->UIN->text().toInt(); fGender = mMainWidget->gender->currentItem(); fOnlyOnline = mMainWidget->onlyOnline->isChecked(); fAgeFrom = mMainWidget->ageFrom->value(); fAgeTo = mMainWidget->ageTo->value(); fCity = mMainWidget->cityS->text(); } // return true if not empty #define CHECK_STRING(A) { if ( !A.isEmpty() ) { return true; } } #define CHECK_INT(A) { if ( A ) { return true; } } bool GaduPublicDir::validateData() { getData(); if ( mMainWidget->radioByData->isChecked() ) { CHECK_STRING( fCity ); CHECK_STRING( fName ); CHECK_STRING( fSurname ); CHECK_STRING( fNick ); CHECK_INT( fGender ); CHECK_INT( fAgeFrom ); CHECK_INT( fAgeTo ); } else { fSurname = QString::null; CHECK_INT( fUin ); } return false; } // Move to GaduProtocol someday QPixmap GaduPublicDir::iconForStatus( uint status ) { QPixmap n; if ( GaduProtocol::protocol() ) { return GaduProtocol::protocol()->convertStatus( status ).protocolIcon(); } return n; } void GaduPublicDir::slotSearchResult( const SearchResult& result, unsigned int ) { QListView* list = mMainWidget->listFound; kdDebug(14100) << "searchResults(" << result.count() <<")" << endl; QListViewItem* sl; SearchResult::const_iterator r; for ( r = result.begin(); r != result.end() ; ++r ){ kdDebug(14100) << "adding" << (*r).uin << endl; sl= new QListViewItem( list, QString::fromAscii(""), (*r).firstname, (*r).nickname, (*r).age, (*r).city, QString::number( (*r).uin ).ascii() ); sl->setPixmap( 0, iconForStatus( (*r).status ) ); } // if not found anything, obviously we don't want to search for more // if we are looking just for one UIN, don't allow search more - it is pointless if ( result.count() && fUin==0 ) { enableButton( User2, true ); } enableButton( User1, true ); enableButton( User3, false ); mMainWidget->pubsearch->setDisabled( false ); } void GaduPublicDir::slotNewSearch() { mMainWidget->pubsearch->raiseWidget( 0 ); setButtonText( User2, i18n( "S&earch" ) ); showButton( User1, false ); showButton( User3, false ); enableButton( User2, false ); inputChanged( QString::null ); mAccount->pubDirSearchClose(); } void GaduPublicDir::slotSearch() { mMainWidget->listFound->clear(); QString empty; // search more, or search ? if ( mMainWidget->pubsearch->id( mMainWidget->pubsearch->visibleWidget() ) == 0 ) { kdDebug(14100) << "start search... " << endl; getData(); // validate data if ( validateData() == false ) { return; } // go on mMainWidget->pubsearch->raiseWidget( 1 ); } else{ kdDebug(14100) << "search more... " << endl; // Search for more } mMainWidget->pubsearch->setDisabled( true ); setButtonText( User2, i18n( "Search &More..." ) ); showButton( User3, true ); showButton( User1, true ); enableButton( User3, false ); enableButton( User2, false ); ResLine rs; rs.firstname = fName; rs.surname = fSurname; rs.nickname = fNick; rs.uin = fUin; rs.city = fCity; if ( fGender == 1 ) { rs.gender = GG_PUBDIR50_GENDER_MALE; } if ( fGender == 2 ) { rs.gender = GG_PUBDIR50_GENDER_FEMALE; } if ( mMainWidget->radioByData->isChecked() ) { mAccount->pubDirSearch( rs, fAgeFrom, fAgeTo, fOnlyOnline ); } else { mAccount->pubDirSearch( rs, 0, 0, fOnlyOnline ); } } #include "gadupubdir.moc"