|
|
|
/*
|
|
|
|
This file is part of KAddressBook.
|
|
|
|
Copyright (c) 2002 Cornelius Schumacher <schumacher@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.
|
|
|
|
|
|
|
|
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
|
|
|
|
As a special exception, permission is given to link this program
|
|
|
|
with any edition of TQt, and distribute the resulting executable,
|
|
|
|
without including the source code for TQt in the source distribution.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef TYPECOMBO_H
|
|
|
|
#define TYPECOMBO_H
|
|
|
|
|
|
|
|
#include <kabc/phonenumber.h>
|
|
|
|
#include <kcombobox.h>
|
|
|
|
|
|
|
|
/**
|
|
|
|
Combo box for type information of Addresses and Phone numbers.
|
|
|
|
*/
|
|
|
|
template <class T>
|
|
|
|
class TypeCombo : public KComboBox
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
typedef typename T::List List;
|
|
|
|
typedef typename T::List::Iterator Iterator;
|
|
|
|
|
|
|
|
TypeCombo( List &list, TQWidget *tqparent, const char *name = 0 );
|
|
|
|
|
|
|
|
void setLineEdit( TQLineEdit *edit ) { mLineEdit = edit; }
|
|
|
|
TQLineEdit *lineEdit() const { return mLineEdit; }
|
|
|
|
|
|
|
|
void updateTypes();
|
|
|
|
|
|
|
|
void selectType( int type );
|
|
|
|
|
|
|
|
int selectedType();
|
|
|
|
|
|
|
|
Iterator selectedElement();
|
|
|
|
|
|
|
|
void insertType( const List &list, int type,
|
|
|
|
const T &defaultObject );
|
|
|
|
void insertTypeList( const List &list );
|
|
|
|
|
|
|
|
bool hasType( int type );
|
|
|
|
|
|
|
|
private:
|
|
|
|
List &mTypeList;
|
|
|
|
TQLineEdit *mLineEdit;
|
|
|
|
};
|
|
|
|
|
|
|
|
template <class T>
|
|
|
|
TypeCombo<T>::TypeCombo( TypeCombo::List &list, TQWidget *tqparent,
|
|
|
|
const char *name )
|
|
|
|
: KComboBox( tqparent, name ),
|
|
|
|
mTypeList( list )
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
template <class T>
|
|
|
|
void TypeCombo<T>::updateTypes()
|
|
|
|
{
|
|
|
|
// Remember current item
|
|
|
|
TQString currentId;
|
|
|
|
int current = currentItem();
|
|
|
|
if ( current >= 0 ) currentId = mTypeList[ current ].id();
|
|
|
|
|
|
|
|
clear();
|
|
|
|
|
|
|
|
TQMap<int,int> labelCount;
|
|
|
|
|
|
|
|
uint i;
|
|
|
|
for ( i = 0; i < mTypeList.count(); ++i ) {
|
|
|
|
int type = ( mTypeList[ i ].type() & ~( T::Pref ) );
|
|
|
|
TQString label = mTypeList[ i ].typeLabel( type );
|
|
|
|
int count = 1;
|
|
|
|
if ( labelCount.tqcontains( type ) ) {
|
|
|
|
count = labelCount[ type ] + 1;
|
|
|
|
}
|
|
|
|
labelCount[ type ] = count;
|
|
|
|
if ( count > 1 ) {
|
|
|
|
label = i18n("label (number)", "%1 (%2)").tqarg( label )
|
|
|
|
.tqarg( TQString::number( count ) );
|
|
|
|
}
|
|
|
|
insertItem( label );
|
|
|
|
}
|
|
|
|
|
|
|
|
// Restore previous current item
|
|
|
|
if ( !currentId.isEmpty() ) {
|
|
|
|
for ( i = 0; i < mTypeList.count(); ++i ) {
|
|
|
|
if ( mTypeList[ i ].id() == currentId ) {
|
|
|
|
setCurrentItem( i );
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
template <class T>
|
|
|
|
void TypeCombo<T>::selectType( int type )
|
|
|
|
{
|
|
|
|
uint i;
|
|
|
|
for ( i = 0; i < mTypeList.count(); ++i ) {
|
|
|
|
if ( (mTypeList[ i ].type() & ~T::Pref) == type ) {
|
|
|
|
setCurrentItem( i );
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
template <class T>
|
|
|
|
int TypeCombo<T>::selectedType()
|
|
|
|
{
|
|
|
|
return mTypeList[ currentItem() ].type();
|
|
|
|
}
|
|
|
|
|
|
|
|
template <class T>
|
|
|
|
typename TypeCombo<T>::Iterator TypeCombo<T>::selectedElement()
|
|
|
|
{
|
|
|
|
return mTypeList.at( currentItem() );
|
|
|
|
}
|
|
|
|
|
|
|
|
template <class T>
|
|
|
|
void TypeCombo<T>::insertType( const TypeCombo::List &list, int type,
|
|
|
|
const T &defaultObject )
|
|
|
|
{
|
|
|
|
uint i;
|
|
|
|
for ( i = 0; i < list.count(); ++i ) {
|
|
|
|
if ( list[ i ].type() == type ) {
|
|
|
|
mTypeList.append( list[ i ] );
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ( i == list.count() ) {
|
|
|
|
mTypeList.append( defaultObject );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
template <class T>
|
|
|
|
void TypeCombo<T>::insertTypeList( const TypeCombo::List &list )
|
|
|
|
{
|
|
|
|
uint i;
|
|
|
|
for ( i = 0; i < list.count(); ++i ) {
|
|
|
|
uint j;
|
|
|
|
for ( j = 0; j < mTypeList.count(); ++j ) {
|
|
|
|
if ( list[ i ].id() == mTypeList[ j ].id() ) break;
|
|
|
|
}
|
|
|
|
if ( j == mTypeList.count() ) {
|
|
|
|
mTypeList.append( list[ i ] );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
template <class T>
|
|
|
|
bool TypeCombo<T>::hasType( int type )
|
|
|
|
{
|
|
|
|
for ( uint i = 0; i < mTypeList.count(); ++i ) {
|
|
|
|
if ( ( mTypeList[ i ].type() & ~T::Pref ) == type )
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|