-rw-r--r-- | bin/kdepim/kaddressbook/germantranslation.txt | 4 | ||||
-rw-r--r-- | kabc/phonenumber.cpp | 26 | ||||
-rw-r--r-- | kabc/phonenumber.h | 3 | ||||
-rw-r--r-- | kaddressbook/addresseeeditorwidget.cpp | 26 | ||||
-rw-r--r-- | kaddressbook/phoneeditwidget.h | 79 |
5 files changed, 130 insertions, 8 deletions
diff --git a/bin/kdepim/kaddressbook/germantranslation.txt b/bin/kdepim/kaddressbook/germantranslation.txt index 2ae6eb9..dcf43c1 100644 --- a/bin/kdepim/kaddressbook/germantranslation.txt +++ b/bin/kdepim/kaddressbook/germantranslation.txt @@ -806,32 +806,32 @@ { "Writing back file ...","Schreibe Datei zurück..." },
{ "Sending back file ...","Sende Datei zurück..." },
{ "Eeek, there I am ticklish!","Huch, da bin ich kitzlig!" },
{ "Save using LOCAL storage","Speichere nutze LOCAL Pfad" },
{ "...and %1 more\ncontact(s) selected","...und noch %1 Kontakte\n mehr ausgewählt" },
{ "Do you really\nwant to delete the\nsetected contact(s)?\n\n","Möchten Sie wirklich\ndie ausgewählten\nKontakte löschen?\n\n" },
{ "%1 contacts\nsuccessfully\nimported.","%1 Kontakte\nerfolgreich\nimportiert." },
{ "Import this contact?","Importiere diesen Kontakt?" },
{ "Import all!","Importiere alle!" },
{ "Loading addressbook data ... please wait","Lade Adressbuchdaten ... bitte warten" },
{ "Import Format","Import Format" },
{ "Select import format!\nDefault and standard is Utf8.\nLatin1 may be the right\nfor some West Europian languages.","Wähle Import Format!\nDefault und Standard ist Utf8.\nLatin1 kann das richtige für\nWesteuropäische Sprachen sein." },
{ "Home2","Privat2" },
{ "Work2","Arbeit2" },
{ "Fax (Work)","Fax (Arbeit)" },
{ "Fax (Home)","Fax (Privat)" },
{ "Assistent","Sekretär(in)" },
{ "Company","Firma" },
{ "Mobile2 (work)","Handy2 (Arbeit)" },
{ "Mobile2 (car)","Handy2 (Auto)" },
{ "Callback","Rückruf" },
{ "Fax (Other)","Fax (Anderes)" },
{ "Primary","Bevorzugt" },
{ "Mobile (Home)","Handy (Privat)" },
-{ "","" },
-{ "","" },
+{ "Unfiled","Nicht zugeordnet" },
+{ "Format.n.:","Format.N.:" },
{ "","" },
{ "","" },
{ "","" },
{ "","" },
{ "","" },
{ "","" },
\ No newline at end of file diff --git a/kabc/phonenumber.cpp b/kabc/phonenumber.cpp index 0d46ba7..eee25a5 100644 --- a/kabc/phonenumber.cpp +++ b/kabc/phonenumber.cpp @@ -201,48 +201,74 @@ QString PhoneNumber::typeLabel() const if ( ( type() & (*it) ) && ( (*it) != Pref ) ) { label.append( ( first ? "" : "/" ) + typeLabel( *it ) ); if ( first ) first = false; } } return label; } QString PhoneNumber::label() const { return typeLabel( type() ); } PhoneNumber::TypeList PhoneNumber::typeList() { TypeList list; list << Home << Work << Msg << Pref << Voice << Fax << Cell << Video << Bbs << Modem << Car << Isdn << Pcs << Pager; return list; } +PhoneNumber::TypeList PhoneNumber::supportedTypeList() +{ + static TypeList list; + if ( list.count() == 0 ) + list << (Home| Pref) << (Work| Pref) << Cell << Home << Work << Car << (Work| Msg | Voice) << (Work| Msg) << (Home | Fax) << (Work| Fax) << Fax<< (Pcs|Pref)<< Pcs<< Pager << Isdn << Video << Msg << Pref << Voice; + return list; +} +QStringList PhoneNumber::supportedTypeListNames() +{ + static QStringList list; + if ( list.count() == 0 ) + list << i18n("Home") << i18n("Work") << i18n("Mobile") << i18n("Home2")<< i18n("Work2") << i18n("Mobile2 (Work)") << i18n("Assistent") << i18n("Company") << i18n("Fax (Home)") << i18n("Fax (Work)") << i18n("Fax (Other)") << i18n("SIP") << i18n("VoIP") << i18n("Pager") << i18n("ISDN") << i18n("Video") << i18n("Callback") << i18n("Primary")<< i18n("Other"); + return list; +} + +int PhoneNumber::typeListIndex4Type(int type ) +{ + TypeList list = supportedTypeList(); + int i = 0; + while ( i < list.count() ) { + if ( list [i] == type ) + return i; + ++i; + } + return list.count()-1; +} QString PhoneNumber::label( int type ) { return typeLabel( type ); } QString PhoneNumber::typeLabel( int type ) { if ((type & Cell) == Cell) return i18n("Mobile"); if ((type & Home) == Home) { if ((type & Pref) == Pref) return i18n("Home"); if ((type & Fax) == Fax) return i18n("Fax (Home)"); return i18n("Home2"); } if ((type & Work) == Work) { if ((type & Pref) == Pref) return i18n("Work"); if ((type & Fax) == Fax) return i18n("Fax (Work)"); if ((type & Msg) == Msg) { diff --git a/kabc/phonenumber.h b/kabc/phonenumber.h index b9d6a17..feeba6c 100644 --- a/kabc/phonenumber.h +++ b/kabc/phonenumber.h @@ -127,44 +127,47 @@ class PhoneNumber Returns a translated string of all types the address has. */ QString typeLabel() const; /** Returns the translated label for phone number depending on its type. */ QString label() const; /** Returns a list of all available types */ static TypeList typeList(); /** Returns the translated label for phone number type. */ static QString typeLabel( int type ); /** Returns the translated label for phone number type. @obsolete */ static QString label( int type ); + static TypeList supportedTypeList(); + static QStringList supportedTypeListNames(); + static int typeListIndex4Type(int type ); bool simplifyNumber(); void simplifyType(); void makeCompat(); int getCompatType( int type ); private: void init(); QString mId; int mType; QString mNumber; }; QDataStream &operator<<( QDataStream &, const PhoneNumber & ); QDataStream &operator>>( QDataStream &, PhoneNumber & ); } #endif diff --git a/kaddressbook/addresseeeditorwidget.cpp b/kaddressbook/addresseeeditorwidget.cpp index 310d628..9814cd5 100644 --- a/kaddressbook/addresseeeditorwidget.cpp +++ b/kaddressbook/addresseeeditorwidget.cpp @@ -133,49 +133,56 @@ void AddresseeEditorWidget::initGUI() QVBoxLayout *layout = new QVBoxLayout( this ); mTabWidget = new QTabWidget( this ); layout->addWidget( mTabWidget ); setupTab1(); setupTab1_1(); setupTab2(); setupTab2_1(); setupTab3(); setupTab3_1(); mNameEdit->setFocus(); connect( mTabWidget, SIGNAL( currentChanged(QWidget*) ), SLOT( pageChanged(QWidget*) ) ); } void AddresseeEditorWidget::setupTab1() { // This is the General tab QWidget *tab1 = new QWidget( mTabWidget ); //US QGridLayout *layout = new QGridLayout( tab1, 11, 7 ); - QGridLayout *layout = new QGridLayout( tab1, 7, 1 ); + bool horLayout = false; + int maxCol = 1; + if ( QApplication::desktop()->width() == 640 || QApplication::desktop()->width() == 320 ) { + horLayout = true; + maxCol = 3; + } + QGridLayout *layout = new QGridLayout( tab1, 8-maxCol, maxCol ); + layout->setMargin( KDialogBase::marginHintSmall() ); layout->setSpacing( KDialogBase::spacingHintSmall() ); QLabel *label; KSeparator* bar; QPushButton *button; ////////////////////////////////// // Upper left group (person info) // Person icon /* LR label = new QLabel( tab1 ); //US ambiguous call. Add one more parameter //US label->setPixmap( KGlobal::iconLoader()->loadIcon( "personal", KIcon::Desktop ) ); label->setPixmap( KGlobal::iconLoader()->loadIcon( "personal", KIcon::Desktop, 0 ) ); layout->addMultiCellWidget( label, 0, 1, 0, 0 ); */ // First name button = new QPushButton( i18n( "Name..." ), tab1 ); //US QToolTip::add( button, i18n( "Edit the contact's name" ) ); mNameEdit = new KLineEdit( tab1, "mNameEdit" ); connect( mNameEdit, SIGNAL( textChanged( const QString& ) ), SLOT( nameTextChanged( const QString& ) ) ); @@ -185,83 +192,94 @@ void AddresseeEditorWidget::setupTab1() mNameLabel->hide(); layout->addWidget( button, 0, 0 ); layout->addWidget( mNameEdit, 0, 1 ); layout->addWidget( mNameLabel, 0, 1 ); button = new QPushButton( i18n( "Role:" ), tab1 ); connect( button, SIGNAL( clicked() ), SLOT( setRole2FN() ) ); //label = new QLabel( i18n( "Role:" ), tab1 ); mRoleEdit = new KLineEdit( tab1 ); connect( mRoleEdit, SIGNAL( textChanged( const QString& ) ), SLOT( textChanged( const QString& ) ) ); //label->setBuddy( mRoleEdit ); layout->addWidget( button, 1, 0 ); layout->addWidget( mRoleEdit, 1, 1 ); // Organization button = new QPushButton( i18n( "Organization:" ), tab1 ); connect( button, SIGNAL( clicked() ), SLOT( setCompany2FN() ) ); //label = new QLabel( i18n( "Organization:" ), tab1 ); mOrgEdit = new KLineEdit( tab1 ); //label->setBuddy( mOrgEdit ); connect( mOrgEdit, SIGNAL( textChanged( const QString& ) ), SLOT( textChanged( const QString& ) ) ); + if ( horLayout ) { + layout->addWidget( button, 1, 2 ); + layout->addWidget( mOrgEdit, 1, 3 ); + + } else { layout->addWidget( button, 2, 0 ); layout->addWidget( mOrgEdit, 2, 1 ); + } // File as (formatted name) - label = new QLabel( i18n( "Formatted name:" ), tab1 ); + label = new QLabel( i18n( "Format.n.:" ), tab1 ); mFormattedNameLabel = new KSqueezedTextLabel( tab1 ); + if ( horLayout ) { + layout->addWidget( label, 0,2 ); + layout->addWidget( mFormattedNameLabel, 0, 3 ); + } else { layout->addWidget( label, 3, 0 ); layout->addWidget( mFormattedNameLabel, 3, 1 ); + } /* LR // Left hand separator. This separator doesn't go all the way // across so the dialog still flows from top to bottom bar = new KSeparator( KSeparator::HLine, tab1 ); layout->addMultiCellWidget( bar, 4, 4, 0, 2 ); */ ////////////////////////////////////// /* LR // Phone numbers (upper right) label = new QLabel( tab1 ); //US loadIcon call is ambiguous. Add one more parameter //US label->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop ) ); label->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop, 0 ) ); //US layout->addMultiCellWidget( label, 0, 1, 3, 3 ); layout->addMultiCellWidget( label, 5, 6, 0, 0 ); */ mPhoneEditWidget = new PhoneEditWidget( tab1 ); connect( mPhoneEditWidget, SIGNAL( modified() ), SLOT( emitModified() ) ); //US layout->addMultiCellWidget( mPhoneEditWidget, 0, 3, 4, 6 ); int iii; #ifndef DESKTOP_VERSION iii = 7; #else iii = 8; #endif - layout->addMultiCellWidget( mPhoneEditWidget, 4, iii, 0, 1 ); + layout->addMultiCellWidget( mPhoneEditWidget, 4, iii, 0, maxCol ); ++iii; /* LR bar = new KSeparator( KSeparator::HLine, tab1 ); //US layout->addMultiCellWidget( bar, 4, 4, 3, 6 ); layout->addMultiCellWidget( bar, 9, 9, 0, 2 ); */ /*US ////////////////////////////////////// // Addresses (lower left) label = new QLabel( tab1 ); //US loadIcon call is ambiguous. Add one more parameter //US label->setPixmap( KGlobal::iconLoader()->loadIcon( "gohome", KIcon::Desktop ) ); label->setPixmap( KGlobal::iconLoader()->loadIcon( "gohome", KIcon::Desktop, 0 ) ); layout->addMultiCellWidget( label, 5, 6, 0, 0 ); mAddressEditWidget = new AddressEditWidget( tab1 ); connect( mAddressEditWidget, SIGNAL( modified() ), SLOT( emitModified() ) ); layout->addMultiCellWidget( mAddressEditWidget, 5, 9, 1, 2 ); ////////////////////////////////////// // Email / Web (lower right) label = new QLabel( tab1 ); //US loadIcon call is ambiguous. Add one more parameter //US label->setPixmap( KGlobal::iconLoader()->loadIcon( "email", KIcon::Desktop) ); @@ -300,49 +318,49 @@ void AddresseeEditorWidget::setupTab1() layout->addColSpacing( 6, 50 ); bar = new KSeparator( KSeparator::HLine, tab1 ); layout->addMultiCellWidget( bar, 10, 10, 0, 6 ); */ /////////////////////////////////////// QHBox *categoryBox = new QHBox( tab1 ,"cato"); categoryBox->setSpacing( KDialogBase::spacingHint() ); categoryBox->setMargin( KDialogBase::marginHintSmall() ); // Categories button = new QPushButton( i18n( "Categories" ), categoryBox ); connect( button, SIGNAL( clicked() ), SLOT( categoryButtonClicked() ) ); mCategoryEdit = new KLineEdit( categoryBox ); mCategoryEdit->setReadOnly( true ); connect( mCategoryEdit, SIGNAL( textChanged( const QString& ) ), SLOT( textChanged( const QString& ) ) ); mSecrecyWidget = new SecrecyWidget( categoryBox ); connect( mSecrecyWidget, SIGNAL( changed() ), SLOT( emitModified() ) ); //US layout->addMultiCellWidget( categoryBox, 11, 11, 0, 6 ); - layout->addMultiCellWidget( categoryBox, iii, iii, 0, 1 ); + layout->addMultiCellWidget( categoryBox, iii, iii, 0, maxCol ); // Build the layout and add to the tab widget layout->activate(); // required mTabWidget->addTab( tab1, i18n( "&General" ) ); } void AddresseeEditorWidget::setRole2FN() { if ( mRoleEdit->text().isEmpty() ) return; mFormattedNameType = NameEditDialog::CustomName; mAddressee.setFormattedName( mRoleEdit->text() ); mFormattedNameLabel->setText( mRoleEdit->text() ); mDirty = true; } void AddresseeEditorWidget::setCompany2FN() { if ( mOrgEdit->text().isEmpty() ) return; mFormattedNameType = NameEditDialog::CustomName; mAddressee.setFormattedName( mOrgEdit->text() ); mFormattedNameLabel->setText( mOrgEdit->text() ); mDirty = true; } diff --git a/kaddressbook/phoneeditwidget.h b/kaddressbook/phoneeditwidget.h index 7fe4bc0..0241cf0 100644 --- a/kaddressbook/phoneeditwidget.h +++ b/kaddressbook/phoneeditwidget.h @@ -3,58 +3,62 @@ /* This file is part of KAddressBook. Copyright (c) 2002 Mike Pilone <mpilone@slac.com> 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. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #include <kdialogbase.h> +#include <kiconloader.h> +#include <qpushbutton.h> +#include <qlayout.h> + #include "addresseeconfig.h" #include "typecombo.h" class QButtonGroup; class QCheckBox; +#include <klineedit.h> +#include <kcombobox.h> class KListView; -class KLineEdit; -class KComboBox; typedef TypeCombo<KABC::PhoneNumber> PhoneTypeCombo; /** Widget for editing phone numbers. */ class PhoneEditWidget : public QWidget { Q_OBJECT public: PhoneEditWidget( QWidget *parent, const char *name = 0 ); ~PhoneEditWidget(); void setPhoneNumbers( const KABC::PhoneNumber::List &list ); KABC::PhoneNumber::List phoneNumbers(); void updateTypeCombo( const KABC::PhoneNumber::List&, KComboBox* ); KABC::PhoneNumber currentPhoneNumber( KComboBox*, int ); signals: void modified(); private slots: @@ -122,26 +126,97 @@ class PhoneEditDialog : public KDialogBase QPushButton *mEditButton; bool mChanged; }; /** Dialog for editing phone number types. */ class PhoneTypeDialog : public KDialogBase { Q_OBJECT public: PhoneTypeDialog( const KABC::PhoneNumber &phoneNumber, QWidget *parent, const char *name = 0 ); KABC::PhoneNumber phoneNumber(); private: KABC::PhoneNumber mPhoneNumber; KABC::PhoneNumber::TypeList mTypeList; QButtonGroup *mGroup; QCheckBox *mPreferredBox; KLineEdit *mNumber; }; +class PhoneTypeNumberEdit : public QWidget +{ + Q_OBJECT +public: + PhoneTypeNumberEdit( QWidget *parent, const char *name = 0 ) + { + QHBoxLayout * lay = new QHBoxLayout( this ); + lay->setSpacing( KDialogBase::spacingHintSmall() ); + lay->setMargin( KDialogBase::marginHintSmall() ); + mMinusButton = new QPushButton ( this ); + mMinusButton->setPixmap ( SmallIcon("minus")); + mCombo = new KComboBox( this ); + mNumber = new KLineEdit( this ); + lay->addWidget( mMinusButton ); + lay->addWidget( mCombo ); + lay->addWidget( mNumber ); + connect( mMinusButton , SIGNAL ( clicked() ), this, SLOT ( deleteNumber() ) ); + connect( mCombo , SIGNAL ( activated ( int ) ), this, SLOT ( comboTypeChange( int ) ) ); + mCombo->insertStringList( PhoneNumber::supportedTypeListNames() ); + } + + void setPhoneNumber( const KABC::PhoneNumber &phoneNumber ) + { + mPhoneNumber = phoneNumber; + int index = PhoneNumber::typeListIndex4Type( mPhoneNumber.type() ); + mCombo->setCurrentItem( index ); + mNumber->setText( mPhoneNumber.number() ); + show(); + + } + KABC::PhoneNumber phoneNumber() + { + mPhoneNumber.setNumber( mNumber->text() ); + int index = mCombo->currentItem(); + mPhoneNumber.setType( PhoneNumber::supportedTypeList()[index] ); + return mPhoneNumber; + + } + private slots: + void typeExternalChanged( int oldType, int newType ) + { + if ( mPhoneNumber.type() == newType ) { + mPhoneNumber.setType(oldType); + int index = PhoneNumber::typeListIndex4Type( mPhoneNumber.type() ); + mCombo->setCurrentItem( index ); + } + + } + void deleteNumber() + { + hide(); + } + void comboTypeChange( int index ) + { + int old = mPhoneNumber.type(); + int newT = PhoneNumber::supportedTypeList()[index]; + if ( old != newT ) { + mPhoneNumber.setType(newT ); + emit typeChange ( old, newT ); + } + + } + signals: +void typeChange( int oldType, int newType ); + +private: + KABC::PhoneNumber mPhoneNumber; + QPushButton* mMinusButton; + KComboBox *mCombo; + KLineEdit *mNumber; +}; #endif |