addresseditwidget.cpp
00001 /* 00002 This file is part of KAddressBook. 00003 Copyright (c) 2002 Mike Pilone <mpilone@slac.com> 00004 2003 Tobias Koenig <tokoe@kde.org> 00005 00006 This program is free software; you can redistribute it and/or modify 00007 it under the terms of the GNU General Public License as published by 00008 the Free Software Foundation; either version 2 of the License, or 00009 (at your option) any later version. 00010 00011 This program is distributed in the hope that it will be useful, 00012 but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 GNU General Public License for more details. 00015 00016 You should have received a copy of the GNU General Public License 00017 along with this program; if not, write to the Free Software 00018 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 00019 00020 As a special exception, permission is given to link this program 00021 with any edition of TQt, and distribute the resulting executable, 00022 without including the source code for TQt in the source distribution. 00023 */ 00024 00025 #include <tqbuttongroup.h> 00026 #include <tqcheckbox.h> 00027 #include <tqhbox.h> 00028 #include <tqlabel.h> 00029 #include <tqlayout.h> 00030 #include <tqlistbox.h> 00031 #include <tqlistview.h> 00032 #include <tqpushbutton.h> 00033 #include <tqsignal.h> 00034 #include <tqstring.h> 00035 #include <tqtextedit.h> 00036 #include <tqtoolbutton.h> 00037 #include <tqtooltip.h> 00038 00039 #include <tdeaccelmanager.h> 00040 #include <kactivelabel.h> 00041 #include <tdeapplication.h> 00042 #include <kbuttonbox.h> 00043 #include <kcombobox.h> 00044 #include <tdeconfig.h> 00045 #include <kdebug.h> 00046 #include <kdialog.h> 00047 #include <kiconloader.h> 00048 #include <kinputdialog.h> 00049 #include <klineedit.h> 00050 #include <tdelistview.h> 00051 #include <tdelocale.h> 00052 #include <tdemessagebox.h> 00053 #include <kseparator.h> 00054 00055 #include "addresseditwidget.h" 00056 00057 class TabPressEater : public TQObject 00058 { 00059 public: 00060 TabPressEater( TQObject *parent ) 00061 : TQObject( parent, "TabPressEater" ) 00062 { 00063 } 00064 00065 protected: 00066 bool eventFilter( TQObject*, TQEvent *event ) 00067 { 00068 if ( event->type() == TQEvent::KeyPress ) { 00069 TQKeyEvent *keyEvent = (TQKeyEvent*)event; 00070 if ( keyEvent->key() == TQt::Key_Tab ) { 00071 TQApplication::sendEvent( parent(), event ); 00072 return true; 00073 } else 00074 return false; 00075 } else { 00076 return false; 00077 } 00078 } 00079 }; 00080 00081 00082 AddressEditWidget::AddressEditWidget( TQWidget *parent, const char *name ) 00083 : TQWidget( parent, name ) 00084 { 00085 TQBoxLayout *layout = new TQVBoxLayout( this, 4, 2 ); 00086 layout->setSpacing( KDialog::spacingHint() ); 00087 00088 mTypeCombo = new AddressTypeCombo( mAddressList, this ); 00089 connect( mTypeCombo, TQT_SIGNAL( activated( int ) ), 00090 TQT_SLOT( updateAddressEdit() ) ); 00091 layout->addWidget( mTypeCombo ); 00092 00093 mAddressField = new KActiveLabel( this ); 00094 mAddressField->setFrameStyle( TQFrame::Panel | TQFrame::Sunken ); 00095 mAddressField->setMinimumHeight( 20 ); 00096 mAddressField->setAlignment( TQt::AlignTop ); 00097 mAddressField->setTextFormat( TQt::PlainText ); 00098 layout->addWidget( mAddressField ); 00099 00100 mEditButton = new TQPushButton( i18n( "street/postal", "&Edit Addresses..." ), this ); 00101 connect( mEditButton, TQT_SIGNAL( clicked() ), this, TQT_SLOT( edit() ) ); 00102 00103 layout->addWidget( mEditButton ); 00104 } 00105 00106 AddressEditWidget::~AddressEditWidget() 00107 { 00108 } 00109 00110 void AddressEditWidget::setReadOnly( bool readOnly ) 00111 { 00112 mEditButton->setEnabled( !readOnly ); 00113 } 00114 00115 TDEABC::Address::List AddressEditWidget::addresses() 00116 { 00117 TDEABC::Address::List retList; 00118 00119 TDEABC::Address::List::ConstIterator it; 00120 for ( it = mAddressList.begin(); it != mAddressList.end(); ++it ) 00121 if ( !(*it).isEmpty() ) 00122 retList.append( *it ); 00123 00124 return retList; 00125 } 00126 00127 void AddressEditWidget::setAddresses( const TDEABC::Addressee &addr, 00128 const TDEABC::Address::List &list ) 00129 { 00130 mAddressee = addr; 00131 00132 mAddressList.clear(); 00133 00134 // Insert types for existing numbers. 00135 mTypeCombo->insertTypeList( list ); 00136 00137 TQValueList<int> defaultTypes; 00138 defaultTypes << TDEABC::Address::Home; 00139 defaultTypes << TDEABC::Address::Work; 00140 00141 AddresseeConfig config( mAddressee ); 00142 const TQValueList<int> configList = config.noDefaultAddrTypes(); 00143 TQValueList<int>::ConstIterator it; 00144 for ( it = configList.begin(); it != configList.end(); ++it ) 00145 defaultTypes.remove( *it ); 00146 00147 // Insert default types. 00148 // Doing this for mPrefCombo is enough because the list is shared by all 00149 // combos. 00150 for ( it = defaultTypes.begin(); it != defaultTypes.end(); ++it ) { 00151 if ( !mTypeCombo->hasType( *it ) ) 00152 mTypeCombo->insertType( list, *it, Address( *it ) ); 00153 } 00154 00155 mTypeCombo->updateTypes(); 00156 00157 // find preferred address which will be shown 00158 int preferred = TDEABC::Address::Home; // default if no preferred address set 00159 TDEABC::Address::List::ConstIterator addrIt; 00160 for ( addrIt = list.begin(); addrIt != list.end(); ++addrIt ) 00161 if ( (*addrIt).type() & TDEABC::Address::Pref ) { 00162 preferred = (*addrIt).type(); 00163 break; 00164 } 00165 00166 mTypeCombo->selectType( preferred ); 00167 00168 updateAddressEdit(); 00169 } 00170 00171 void AddressEditWidget::updateAddressee( const TDEABC::Addressee &addr ) 00172 { 00173 mAddressee = addr; 00174 updateAddressEdit(); 00175 } 00176 00177 void AddressEditWidget::edit() 00178 { 00179 AddressEditDialog dialog( mAddressList, mTypeCombo->currentItem(), this ); 00180 if ( dialog.exec() ) { 00181 if ( dialog.changed() ) { 00182 mAddressList = dialog.addresses(); 00183 00184 bool hasHome = false, hasWork = false; 00185 TDEABC::Address::List::ConstIterator it; 00186 for ( it = mAddressList.begin(); it != mAddressList.end(); ++it ) { 00187 if ( (*it).type() == TDEABC::Address::Home ) { 00188 if ( !(*it).isEmpty() ) 00189 hasHome = true; 00190 } 00191 if ( (*it).type() == TDEABC::Address::Work ) { 00192 if ( !(*it).isEmpty() ) 00193 hasWork = true; 00194 } 00195 } 00196 00197 AddresseeConfig config( mAddressee ); 00198 TQValueList<int> configList; 00199 if ( !hasHome ) 00200 configList << TDEABC::Address::Home; 00201 if ( !hasWork ) 00202 configList << TDEABC::Address::Work; 00203 config.setNoDefaultAddrTypes( configList ); 00204 00205 mTypeCombo->updateTypes(); 00206 updateAddressEdit(); 00207 emit modified(); 00208 } 00209 } 00210 } 00211 00212 void AddressEditWidget::updateAddressEdit() 00213 { 00214 TDEABC::Address::List::Iterator it = mTypeCombo->selectedElement(); 00215 00216 bool block = signalsBlocked(); 00217 blockSignals( true ); 00218 00219 mAddressField->setText( "" ); 00220 00221 if ( it != mAddressList.end() ) { 00222 TDEABC::Address a = *it; 00223 if ( !a.isEmpty() ) { 00224 #if TDE_VERSION >= 319 00225 if ( a.type() & TDEABC::Address::Work && mAddressee.realName() != mAddressee.organization() ) { 00226 mAddressField->setText( a.formattedAddress( mAddressee.realName(), 00227 mAddressee.organization() ) ); 00228 } else { 00229 mAddressField->setText( a.formattedAddress( mAddressee.realName() ) ); 00230 } 00231 #else 00232 TQString text; 00233 if ( !a.street().isEmpty() ) 00234 text += a.street() + "\n"; 00235 00236 if ( !a.postOfficeBox().isEmpty() ) 00237 text += a.postOfficeBox() + "\n"; 00238 00239 text += a.locality() + TQString(" ") + a.region(); 00240 00241 if ( !a.postalCode().isEmpty() ) 00242 text += TQString(", ") + a.postalCode(); 00243 00244 text += "\n"; 00245 00246 if ( !a.country().isEmpty() ) 00247 text += a.country() + "\n"; 00248 00249 text += a.extended(); 00250 00251 mAddressField->setText( text ); 00252 #endif 00253 } 00254 } 00255 00256 blockSignals( block ); 00257 } 00258 00259 AddressEditDialog::AddressEditDialog( const TDEABC::Address::List &list, 00260 int selected, TQWidget *parent, 00261 const char *name ) 00262 : KDialogBase( Plain, i18n( "street/postal", "Edit Address" ), Ok | Cancel, Ok, 00263 parent, name, true, true ), 00264 mPreviousAddress( 0 ) 00265 { 00266 mAddressList = list; 00267 00268 TQWidget *page = plainPage(); 00269 00270 TQGridLayout *topLayout = new TQGridLayout( page, 8, 2 ); 00271 topLayout->setSpacing( spacingHint() ); 00272 00273 mTypeCombo = new AddressTypeCombo( mAddressList, page ); 00274 topLayout->addMultiCellWidget( mTypeCombo, 0, 0, 0, 1 ); 00275 00276 TQLabel *label = new TQLabel( i18n( "<streetLabel>:", "%1:" ).arg( TDEABC::Address::streetLabel() ), page ); 00277 label->setAlignment( TQt::AlignTop | TQt::AlignLeft ); 00278 topLayout->addWidget( label, 1, 0 ); 00279 mStreetTextEdit = new TQTextEdit( page ); 00280 mStreetTextEdit->setTextFormat( TQt::PlainText ); 00281 label->setBuddy( mStreetTextEdit ); 00282 topLayout->addWidget( mStreetTextEdit, 1, 1 ); 00283 00284 TabPressEater *eater = new TabPressEater( TQT_TQOBJECT(this) ); 00285 mStreetTextEdit->installEventFilter( eater ); 00286 00287 label = new TQLabel( i18n( "<postOfficeBoxLabel>:", "%1:" ).arg( TDEABC::Address::postOfficeBoxLabel() ), page ); 00288 topLayout->addWidget( label, 2 , 0 ); 00289 mPOBoxEdit = new KLineEdit( page ); 00290 label->setBuddy( mPOBoxEdit ); 00291 topLayout->addWidget( mPOBoxEdit, 2, 1 ); 00292 00293 label = new TQLabel( i18n( "<localityLabel>:", "%1:" ).arg( TDEABC::Address::localityLabel() ), page ); 00294 topLayout->addWidget( label, 3, 0 ); 00295 mLocalityEdit = new KLineEdit( page ); 00296 label->setBuddy( mLocalityEdit ); 00297 topLayout->addWidget( mLocalityEdit, 3, 1 ); 00298 00299 label = new TQLabel( i18n( "<regionLabel>:", "%1:" ).arg( TDEABC::Address::regionLabel() ), page ); 00300 topLayout->addWidget( label, 4, 0 ); 00301 mRegionEdit = new KLineEdit( page ); 00302 label->setBuddy( mRegionEdit ); 00303 topLayout->addWidget( mRegionEdit, 4, 1 ); 00304 00305 label = new TQLabel( i18n( "<postalCodeLabel>:", "%1:" ).arg( TDEABC::Address::postalCodeLabel() ), page ); 00306 topLayout->addWidget( label, 5, 0 ); 00307 mPostalCodeEdit = new KLineEdit( page ); 00308 label->setBuddy( mPostalCodeEdit ); 00309 topLayout->addWidget( mPostalCodeEdit, 5, 1 ); 00310 00311 label = new TQLabel( i18n( "<countryLabel>:", "%1:" ).arg( TDEABC::Address::countryLabel() ), page ); 00312 topLayout->addWidget( label, 6, 0 ); 00313 mCountryCombo = new KComboBox( page ); 00314 mCountryCombo->setEditable( true ); 00315 mCountryCombo->setDuplicatesEnabled( false ); 00316 00317 #if KDE_IS_VERSION(3,3,0) 00318 TQPushButton *labelButton = new TQPushButton( i18n( "Edit Label..." ), page ); 00319 topLayout->addMultiCellWidget( labelButton, 7, 7, 0, 1 ); 00320 connect( labelButton, TQT_SIGNAL( clicked() ), TQT_SLOT( editLabel() ) ); 00321 #endif 00322 00323 fillCountryCombo(); 00324 label->setBuddy( mCountryCombo ); 00325 topLayout->addWidget( mCountryCombo, 6, 1 ); 00326 00327 mPreferredCheckBox = new TQCheckBox( i18n( "street/postal", "This is the preferred address" ), page ); 00328 topLayout->addMultiCellWidget( mPreferredCheckBox, 8, 8, 0, 1 ); 00329 00330 KSeparator *sep = new KSeparator( KSeparator::HLine, page ); 00331 topLayout->addMultiCellWidget( sep, 9, 9, 0, 1 ); 00332 00333 TQHBox *buttonBox = new TQHBox( page ); 00334 buttonBox->setSpacing( spacingHint() ); 00335 topLayout->addMultiCellWidget( buttonBox, 10, 10, 0, 1 ); 00336 00337 TQPushButton *addButton = new TQPushButton( i18n( "New..." ), buttonBox ); 00338 connect( addButton, TQT_SIGNAL( clicked() ), TQT_SLOT( addAddress() ) ); 00339 00340 mRemoveButton = new TQPushButton( i18n( "Remove" ), buttonBox ); 00341 connect( mRemoveButton, TQT_SIGNAL( clicked() ), TQT_SLOT( removeAddress() ) ); 00342 00343 mChangeTypeButton = new TQPushButton( i18n( "Change Type..." ), buttonBox ); 00344 connect( mChangeTypeButton, TQT_SIGNAL( clicked() ), TQT_SLOT( changeType() ) ); 00345 00346 mTypeCombo->updateTypes(); 00347 mTypeCombo->setCurrentItem( selected ); 00348 00349 updateAddressEdits(); 00350 00351 connect( mTypeCombo, TQT_SIGNAL( activated( int ) ), 00352 TQT_SLOT( updateAddressEdits() ) ); 00353 connect( mStreetTextEdit, TQT_SIGNAL( textChanged() ), TQT_SLOT( modified() ) ); 00354 connect( mPOBoxEdit, TQT_SIGNAL( textChanged( const TQString& ) ), TQT_SLOT( modified() ) ); 00355 connect( mLocalityEdit, TQT_SIGNAL( textChanged( const TQString& ) ), TQT_SLOT( modified() ) ); 00356 connect( mRegionEdit, TQT_SIGNAL( textChanged( const TQString& ) ), TQT_SLOT( modified() ) ); 00357 connect( mPostalCodeEdit, TQT_SIGNAL( textChanged( const TQString& ) ), TQT_SLOT( modified() ) ); 00358 connect( mCountryCombo, TQT_SIGNAL( textChanged( const TQString& ) ), TQT_SLOT( modified() ) ); 00359 connect( mPreferredCheckBox, TQT_SIGNAL( toggled( bool ) ), TQT_SLOT( modified() ) ); 00360 00361 TDEAcceleratorManager::manage( this ); 00362 00363 mChanged = false; 00364 00365 bool state = (mAddressList.count() > 0); 00366 mRemoveButton->setEnabled( state ); 00367 mChangeTypeButton->setEnabled( state ); 00368 } 00369 00370 AddressEditDialog::~AddressEditDialog() 00371 { 00372 } 00373 00374 TDEABC::Address::List AddressEditDialog::addresses() 00375 { 00376 saveAddress( *(mTypeCombo->selectedElement()) ); 00377 00378 return mAddressList; 00379 } 00380 00381 bool AddressEditDialog::changed() const 00382 { 00383 return mChanged; 00384 } 00385 00386 void AddressEditDialog::addAddress() 00387 { 00388 AddressTypeDialog dlg( mTypeCombo->selectedType(), this ); 00389 if ( dlg.exec() ) { 00390 mAddressList.append( Address( dlg.type() ) ); 00391 00392 mTypeCombo->updateTypes(); 00393 mTypeCombo->setCurrentItem( mTypeCombo->count() - 1 ); 00394 updateAddressEdits(); 00395 00396 modified(); 00397 00398 mRemoveButton->setEnabled( true ); 00399 mChangeTypeButton->setEnabled( true ); 00400 } 00401 } 00402 00403 void AddressEditDialog::removeAddress() 00404 { 00405 if ( mAddressList.count() > 0 ) { 00406 TDEABC::Address::List::Iterator it = mTypeCombo->selectedElement(); 00407 if ( mPreviousAddress && mPreviousAddress->id() == (*it).id() ) 00408 mPreviousAddress = 0; 00409 00410 mAddressList.remove( it ); 00411 mTypeCombo->updateTypes(); 00412 updateAddressEdits(); 00413 00414 modified(); 00415 } 00416 00417 bool state = ( mAddressList.count() > 0 ); 00418 mRemoveButton->setEnabled( state ); 00419 mChangeTypeButton->setEnabled( state ); 00420 } 00421 00422 void AddressEditDialog::changeType() 00423 { 00424 TDEABC::Address::List::Iterator a = mTypeCombo->selectedElement(); 00425 00426 AddressTypeDialog dlg( (*a).type(), this ); 00427 if ( dlg.exec() ) { 00428 (*a).setType( dlg.type() ); 00429 00430 mTypeCombo->updateTypes(); 00431 00432 modified(); 00433 } 00434 } 00435 00436 void AddressEditDialog::editLabel() 00437 { 00438 #if KDE_IS_VERSION(3,3,0) 00439 bool ok = false; 00440 TQString result = KInputDialog::getMultiLineText( TDEABC::Address::labelLabel(), 00441 TDEABC::Address::labelLabel(), 00442 mLabel, &ok, this ); 00443 if ( ok ) { 00444 mLabel = result; 00445 modified(); 00446 } 00447 #endif 00448 } 00449 00450 void AddressEditDialog::updateAddressEdits() 00451 { 00452 if ( mPreviousAddress ) 00453 saveAddress( *mPreviousAddress ); 00454 00455 TDEABC::Address::List::Iterator it = mTypeCombo->selectedElement(); 00456 TDEABC::Address a = *it; 00457 mPreviousAddress = &(*it); 00458 00459 bool tmp = mChanged; 00460 00461 mStreetTextEdit->setText( a.street() ); 00462 mRegionEdit->setText( a.region() ); 00463 mLocalityEdit->setText( a.locality() ); 00464 mPostalCodeEdit->setText( a.postalCode() ); 00465 mPOBoxEdit->setText( a.postOfficeBox() ); 00466 mCountryCombo->setCurrentText( a.country() ); 00467 mLabel = a.label(); 00468 00469 mPreferredCheckBox->setChecked( a.type() & TDEABC::Address::Pref ); 00470 00471 if ( a.isEmpty() ) 00472 mCountryCombo->setCurrentText( TDEGlobal::locale()->twoAlphaToCountryName( TDEGlobal::locale()->country() ) ); 00473 00474 mStreetTextEdit->setFocus(); 00475 00476 mChanged = tmp; 00477 } 00478 00479 void AddressEditDialog::modified() 00480 { 00481 mChanged = true; 00482 } 00483 00484 void AddressEditDialog::saveAddress( TDEABC::Address &addr ) 00485 { 00486 addr.setLocality( mLocalityEdit->text() ); 00487 addr.setRegion( mRegionEdit->text() ); 00488 addr.setPostalCode( mPostalCodeEdit->text() ); 00489 addr.setCountry( mCountryCombo->currentText() ); 00490 addr.setPostOfficeBox( mPOBoxEdit->text() ); 00491 addr.setStreet( mStreetTextEdit->text() ); 00492 addr.setLabel( mLabel ); 00493 00494 00495 if ( mPreferredCheckBox->isChecked() ) { 00496 TDEABC::Address::List::Iterator it; 00497 for ( it = mAddressList.begin(); it != mAddressList.end(); ++it ) 00498 (*it).setType( (*it).type() & ~( TDEABC::Address::Pref ) ); 00499 00500 addr.setType( addr.type() | TDEABC::Address::Pref ); 00501 } else 00502 addr.setType( addr.type() & ~( TDEABC::Address::Pref ) ); 00503 } 00504 00505 void AddressEditDialog::fillCountryCombo() 00506 { 00507 TQString country[] = { 00508 i18n( "Afghanistan" ), i18n( "Albania" ), i18n( "Algeria" ), 00509 i18n( "American Samoa" ), i18n( "Andorra" ), i18n( "Angola" ), 00510 i18n( "Anguilla" ), i18n( "Antarctica" ), i18n( "Antigua and Barbuda" ), 00511 i18n( "Argentina" ), i18n( "Armenia" ), i18n( "Aruba" ), 00512 i18n( "Ashmore and Cartier Islands" ), i18n( "Australia" ), 00513 i18n( "Austria" ), i18n( "Azerbaijan" ), i18n( "Bahamas" ), 00514 i18n( "Bahrain" ), i18n( "Bangladesh" ), i18n( "Barbados" ), 00515 i18n( "Belarus" ), i18n( "Belgium" ), i18n( "Belize" ), 00516 i18n( "Benin" ), i18n( "Bermuda" ), i18n( "Bhutan" ), 00517 i18n( "Bolivia" ), i18n( "Bosnia and Herzegovina" ), i18n( "Botswana" ), 00518 i18n( "Brazil" ), i18n( "Brunei" ), i18n( "Bulgaria" ), 00519 i18n( "Burkina Faso" ), i18n( "Burundi" ), i18n( "Cambodia" ), 00520 i18n( "Cameroon" ), i18n( "Canada" ), i18n( "Cape Verde" ), 00521 i18n( "Cayman Islands" ), i18n( "Central African Republic" ), 00522 i18n( "Chad" ), i18n( "Chile" ), i18n( "China" ), i18n( "Colombia" ), 00523 i18n( "Comoros" ), i18n( "Congo" ), i18n( "Congo, Dem. Rep." ), 00524 i18n( "Costa Rica" ), i18n( "Croatia" ), 00525 i18n( "Cuba" ), i18n( "Cyprus" ), i18n( "Czech Republic" ), 00526 i18n( "Denmark" ), i18n( "Djibouti" ), 00527 i18n( "Dominica" ), i18n( "Dominican Republic" ), i18n( "Ecuador" ), 00528 i18n( "Egypt" ), i18n( "El Salvador" ), i18n( "Equatorial Guinea" ), 00529 i18n( "Eritrea" ), i18n( "Estonia" ), i18n( "England" ), 00530 i18n( "Ethiopia" ), i18n( "European Union" ), i18n( "Faroe Islands" ), 00531 i18n( "Fiji" ), i18n( "Finland" ), i18n( "France" ), 00532 i18n( "French Polynesia" ), i18n( "Gabon" ), i18n( "Gambia" ), 00533 i18n( "Georgia" ), i18n( "Germany" ), i18n( "Ghana" ), 00534 i18n( "Greece" ), i18n( "Greenland" ), i18n( "Grenada" ), 00535 i18n( "Guam" ), i18n( "Guatemala" ), i18n( "Guinea" ), 00536 i18n( "Guinea-Bissau" ), i18n( "Guyana" ), i18n( "Haiti" ), 00537 i18n( "Honduras" ), i18n( "Hong Kong" ), i18n( "Hungary" ), 00538 i18n( "Iceland" ), i18n( "India" ), i18n( "Indonesia" ), 00539 i18n( "Iran" ), i18n( "Iraq" ), i18n( "Ireland" ), 00540 i18n( "Israel" ), i18n( "Italy" ), i18n( "Ivory Coast" ), 00541 i18n( "Jamaica" ), i18n( "Japan" ), i18n( "Jordan" ), 00542 i18n( "Kazakhstan" ), i18n( "Kenya" ), i18n( "Kiribati" ), 00543 i18n( "Korea, North" ), i18n( "Korea, South" ), 00544 i18n( "Kuwait" ), i18n( "Kyrgyzstan" ), i18n( "Laos" ), 00545 i18n( "Latvia" ), i18n( "Lebanon" ), i18n( "Lesotho" ), 00546 i18n( "Liberia" ), i18n( "Libya" ), i18n( "Liechtenstein" ), 00547 i18n( "Lithuania" ), i18n( "Luxembourg" ), i18n( "Macau" ), 00548 i18n( "Madagascar" ), i18n( "Malawi" ), i18n( "Malaysia" ), 00549 i18n( "Maldives" ), i18n( "Mali" ), i18n( "Malta" ), 00550 i18n( "Marshall Islands" ), i18n( "Martinique" ), i18n( "Mauritania" ), 00551 i18n( "Mauritius" ), i18n( "Mexico" ), 00552 i18n( "Micronesia, Federated States Of" ), i18n( "Moldova" ), 00553 i18n( "Monaco" ), i18n( "Mongolia" ), i18n( "Montserrat" ), 00554 i18n( "Morocco" ), i18n( "Mozambique" ), i18n( "Myanmar" ), 00555 i18n( "Namibia" ), 00556 i18n( "Nauru" ), i18n( "Nepal" ), i18n( "Netherlands" ), 00557 i18n( "Netherlands Antilles" ), i18n( "New Caledonia" ), 00558 i18n( "New Zealand" ), i18n( "Nicaragua" ), i18n( "Niger" ), 00559 i18n( "Nigeria" ), i18n( "Niue" ), i18n( "North Korea" ), 00560 i18n( "Northern Ireland" ), i18n( "Northern Mariana Islands" ), 00561 i18n( "Norway" ), i18n( "Oman" ), i18n( "Pakistan" ), i18n( "Palau" ), 00562 i18n( "Palestinian" ), i18n( "Panama" ), i18n( "Papua New Guinea" ), 00563 i18n( "Paraguay" ), i18n( "Peru" ), i18n( "Philippines" ), 00564 i18n( "Poland" ), i18n( "Portugal" ), i18n( "Puerto Rico" ), 00565 i18n( "Qatar" ), i18n( "Romania" ), i18n( "Russia" ), i18n( "Rwanda" ), 00566 i18n( "St. Kitts and Nevis" ), i18n( "St. Lucia" ), 00567 i18n( "St. Vincent and the Grenadines" ), i18n( "San Marino" ), 00568 i18n( "Sao Tome and Principe" ), i18n( "Saudi Arabia" ), 00569 i18n( "Senegal" ), i18n( "Serbia & Montenegro" ), i18n( "Seychelles" ), 00570 i18n( "Sierra Leone" ), i18n( "Singapore" ), i18n( "Slovakia" ), 00571 i18n( "Slovenia" ), i18n( "Solomon Islands" ), i18n( "Somalia" ), 00572 i18n( "South Africa" ), i18n( "South Korea" ), i18n( "Spain" ), 00573 i18n( "Sri Lanka" ), i18n( "St. Kitts and Nevis" ), i18n( "Sudan" ), 00574 i18n( "Suriname" ), i18n( "Swaziland" ), i18n( "Sweden" ), 00575 i18n( "Switzerland" ), i18n( "Syria" ), i18n( "Taiwan" ), 00576 i18n( "Tajikistan" ), i18n( "Tanzania" ), i18n( "Thailand" ), 00577 i18n( "Tibet" ), i18n( "Togo" ), i18n( "Tonga" ), 00578 i18n( "Trinidad and Tobago" ), i18n( "Tunisia" ), i18n( "Turkey" ), 00579 i18n( "Turkmenistan" ), i18n( "Turks and Caicos Islands" ), 00580 i18n( "Tuvalu" ), i18n( "Uganda" ), i18n( "Ukraine" ), 00581 i18n( "United Arab Emirates" ), i18n( "United Kingdom" ), 00582 i18n( "United States" ), i18n( "Uruguay" ), i18n( "Uzbekistan" ), 00583 i18n( "Vanuatu" ), i18n( "Vatican City" ), i18n( "Venezuela" ), 00584 i18n( "Vietnam" ), i18n( "Western Samoa" ), i18n( "Yemen" ), 00585 i18n( "Yugoslavia" ), i18n( "Zaire" ), i18n( "Zambia" ), 00586 i18n( "Zimbabwe" ), 00587 "" 00588 }; 00589 00590 TQStringList countries; 00591 for ( int i = 0; !country[ i ].isEmpty(); ++i ) 00592 countries.append( country[ i ] ); 00593 00594 countries = sortLocaleAware( countries ); 00595 00596 mCountryCombo->insertStringList( countries ); 00597 mCountryCombo->completionObject()->setItems( countries ); 00598 mCountryCombo->setAutoCompletion( true ); 00599 } 00600 00601 00602 AddressTypeDialog::AddressTypeDialog( int type, TQWidget *parent ) 00603 : KDialogBase( Plain, i18n( "street/postal", "Edit Address Type" ), Ok | Cancel, Ok, 00604 parent, "AddressTypeDialog" ) 00605 { 00606 TQWidget *page = plainPage(); 00607 TQVBoxLayout *layout = new TQVBoxLayout( page ); 00608 00609 mGroup = new TQButtonGroup( 2, Qt::Horizontal, i18n( "street/postal", "Address Types" ), page ); 00610 layout->addWidget( mGroup ); 00611 00612 mTypeList = TDEABC::Address::typeList(); 00613 mTypeList.remove( TDEABC::Address::Pref ); 00614 00615 TDEABC::Address::TypeList::ConstIterator it; 00616 for ( it = mTypeList.begin(); it != mTypeList.end(); ++it ) 00617 new TQCheckBox( TDEABC::Address::typeLabel( *it ), mGroup ); 00618 00619 for ( int i = 0; i < mGroup->count(); ++i ) { 00620 TQCheckBox *box = (TQCheckBox*)mGroup->find( i ); 00621 box->setChecked( type & mTypeList[ i ] ); 00622 } 00623 } 00624 00625 AddressTypeDialog::~AddressTypeDialog() 00626 { 00627 } 00628 00629 int AddressTypeDialog::type() const 00630 { 00631 int type = 0; 00632 for ( int i = 0; i < mGroup->count(); ++i ) { 00633 TQCheckBox *box = (TQCheckBox*)mGroup->find( i ); 00634 if ( box->isChecked() ) 00635 type += mTypeList[ i ]; 00636 } 00637 00638 return type; 00639 } 00640 00645 class LocaleAwareString : public TQString 00646 { 00647 public: 00648 LocaleAwareString() : TQString() 00649 {} 00650 00651 LocaleAwareString( const TQString &str ) : TQString( str ) 00652 {} 00653 }; 00654 00655 static bool operator<( const LocaleAwareString &s1, const LocaleAwareString &s2 ) 00656 { 00657 return ( TQString::localeAwareCompare( s1, s2 ) < 0 ); 00658 } 00659 00660 TQStringList AddressEditDialog::sortLocaleAware( const TQStringList &list ) 00661 { 00662 TQValueList<LocaleAwareString> sortedList; 00663 00664 TQStringList::ConstIterator it; 00665 for ( it = list.begin(); it != list.end(); ++it ) 00666 sortedList.append( LocaleAwareString( *it ) ); 00667 00668 qHeapSort( sortedList ); 00669 00670 TQStringList retval; 00671 TQValueList<LocaleAwareString>::ConstIterator retIt; 00672 for ( retIt = sortedList.begin(); retIt != sortedList.end(); ++retIt ) 00673 retval.append( *retIt ); 00674 00675 return retval; 00676 } 00677 00678 #include "addresseditwidget.moc"