📄 contactfieldlist.cpp
字号:
m_noMatches = tr("No matches.");}void ContactFieldList::viewportPaintEvent( QPaintEvent *e ){ QListBox::viewportPaintEvent( e ); if( !count() ) { QWidget *vp = viewport(); QPainter p( vp ); QFont f = p.font(); f.setBold( TRUE ); f.setItalic( TRUE ); p.setFont( f ); p.drawText( 0, 0, vp->width(), vp->height(), Qt::AlignCenter, ( filter().isEmpty() ? tr("No items.") : m_noMatches ) ); }}void ContactFieldList::contactsChanged(){ mAllContacts = contacts.sortedContacts(); refresh();}void ContactFieldList::focusInEvent( QFocusEvent * ){#ifdef QTOPIA_PHONE if( !Global::mousePreferred() ) { if( !isModalEditing() ) setModalEditing( TRUE ); }#endif}void ContactFieldList::setFilter( const QString &f ){ if( f != mFilter ) { mFilter = f; refresh(); }}QString ContactFieldList::filter() const{ return mFilter;}void ContactFieldList::refresh(){ clear(); mIndexToContact.clear();}QPixmap ContactFieldList::fieldTypePixmap( ContactFieldListItem::FieldType type ){ if( type == ContactFieldListItem::None ) return QPixmap(); QString pixString = "addressbook/"; switch( type ) { case ContactFieldListItem::HomePhone: pixString += "homephone"; break; case ContactFieldListItem::HomeFax: pixString += "homefax"; break; case ContactFieldListItem::HomeMobile: pixString += "homemobile"; break; case ContactFieldListItem::BusinessPhone: pixString += "businessphone"; break; case ContactFieldListItem::BusinessFax: pixString += "businessfax"; break; case ContactFieldListItem::BusinessMobile: pixString += "businessmobile"; break; case ContactFieldListItem::BusinessPager: pixString += "businesspager"; break; case ContactFieldListItem::Email: pixString += "email"; break; default: qDebug("pixmap for unknown field type not yet implemented TODO"); return QPixmap(); } QPixmap fieldTypePix; QPixmap *cached = QPixmapCache::find( pixString + "-cfl" ); if( cached ) { fieldTypePix = *cached; } else { fieldTypePix.convertFromImage( Image::loadScaled( Resource::findPixmap( pixString ), 24, 24 ) ); QPixmapCache::insert( pixString + "-cfl", fieldTypePix ); } return fieldTypePix;}QPixmap ContactFieldList::contactPixmap( const PimContact &cnt ){ // XXX : Copied from the addressbook -mrb //try and get the contact's pixmap if it has it, otherwise load the generic one QString pFileName = cnt.customField("photofile"); if( !pFileName.isEmpty() ) { QPixmap *cached = QPixmapCache::find( "pimcontact"+cnt.uid().toString()+"-cfl" ); if( cached ) { return *cached; } else { QString baseDirStr = Global::applicationFileName( "addressbook", "contactimages/" ); QImage port = Image::loadPortrait(baseDirStr+pFileName, 24, 30); if( !port.isNull() ) { QPixmap cp; if( cp.convertFromImage( port ) ) { QPixmapCache::insert( "pimcontact"+cnt.uid().toString()+"-cfl", cp ); return cp; } } } } /* at this point the contact doesn't have an image or loading of cached image failed */ QPixmap *cached = QPixmapCache::find( "addressbook/generic-contact-cfl" ); if( cached ) { return *cached; } else { QPixmap gp; gp.convertFromImage( Image::loadPortrait( Resource::findPixmap( "addressbook/generic-contact" ), 24, 30 ) ); QPixmapCache::insert( "addressbook/generic-contact-cfl", gp ); return gp; }}void ContactFieldList::reset(){ mAllContacts = contacts.sortedContacts(); mIndexToContact.clear(); mSelected.clear(); clear(); setFilter( QString::null );}QString ContactFieldList::extraInfoText( int ) const{ return QString::null;}void ContactFieldList::setAllowMultiple( bool allowMultiple ){ mAllowMultiple = allowMultiple;}bool ContactFieldList::allowMultiple() const{ return mAllowMultiple;}void ContactFieldList::itemClicked( QListBoxItem *i ){ int idx = index( i ); if( idx < 0 ) return; itemClicked( idx );}void ContactFieldList::itemClicked( int idx ){ QString clickedId = ((ContactFieldListItem *)item( idx ))->id(); if( mSelected.contains( clickedId ) && allowMultiple() ) //previously selected and in multiple mode - deselect { mSelected.remove( clickedId ); } else // may contain item in single mode, or no selection for this in either mode { if( !allowMultiple() ) mSelected.clear(); mSelected += clickedId; } triggerUpdate( FALSE );}void ContactFieldList::setSelectionMode( QListBox::SelectionMode m ){ //always set single selection mode on the list box QListBox::setSelectionMode( QListBox::Single ); if( m == QListBox::Single ) { setAllowMultiple( FALSE ); } else if( m == QListBox::Multi || m == QListBox::Extended ) { setAllowMultiple( TRUE ); } else { qWarning("ContactFieldlist::setSelectionMode - NoSelection mode not supported."); }}QValueList<int> ContactFieldList::selected() const{ if( filter().length() && allowMultiple() ) qDebug("BUG : ContactFieldList::selected() called on a filtered list that allows multiple selection."); QValueList<int> selectedIndices; QValueList<QString> selectedIds = mSelected; for( uint i = 0 ; i < count() ; ++i ) { ContactFieldListItem *ci = (ContactFieldListItem *)item( i ); for( uint j = 0 ; j < selectedIds.count() ; ++j ) { if( selectedIds[j] == ci->id() ) { selectedIndices += i; selectedIds.remove( selectedIds.at( j ) ); break; } } if( !selectedIds.count() ) break; } return selectedIndices;}PimContact ContactFieldList::contactAt( int idx ) const{ // int(count()) as count will never be past end of ints if( idx >= 0 && idx < int(count()) && mIndexToContact.contains( idx ) ) return PimContact( *(mIndexToContact[idx] ) ); else return PimContact();}int ContactFieldList::fieldTypeAt( int idx ) const{ // int(count()) as count will never be past end of ints if( idx < 0 || idx >= int(count()) ) return -1; return (int)((ContactFieldListItem *)item(idx))->fieldType();}QString ContactFieldList::fieldDataAt( int idx ) const{ int ft = fieldTypeAt( idx ); if( ft == -1 || !mIndexToContact.contains( idx ) ) return QString::null; return mIndexToContact[idx]->field( ft );}void ContactFieldList::setSelectedFields( const QStringList &fieldData ){ if( filter().length() ) { qWarning("ContactFieldList::setSelectedFields called on filtered list - reseting filter."); setFilter( QString::null ); } mSelected.clear(); QStringList fd = fieldData; if( !allowMultiple() && fd.count() > 1 ) { qWarning("ContactFieldList::setSelectedFields - Passed multiple fields in single selection mode. Only using first field."); QString tmp = fd.first(); fd.clear(); fd += tmp; } for( uint i = 0 ; i < count() ; ++i ) { QString itemFieldData = fieldDataAt( i ); ContactFieldListItem *ci = (ContactFieldListItem *)item( i ); for( uint j = 0 ; j < fd.count() ; ++j ) { if( itemFieldData == fd[j] ) { mSelected += ci->id(); QStringList::Iterator rit = fd.at( j ); fd.remove( rit ); if( !allowMultiple() ) //physically select the list box item in single mode setSelected( i, TRUE ); break; } } if( !fd.count() ) break; } //for everything that's remaining in fd, couldn't find matching items in the list //just store it and make it available to the caller mUnknownFieldData = fd;}QStringList ContactFieldList::unknownFieldData() const{ return mUnknownFieldData;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -