-rw-r--r-- | bin/kdepim/kaddressbook/germantranslation.txt | 4 | ||||
-rw-r--r-- | kabc/addressee.cpp | 4 | ||||
-rw-r--r-- | kabc/addresseeview.cpp | 2 | ||||
-rw-r--r-- | kaddressbook/phoneeditwidget.cpp | 112 | ||||
-rw-r--r-- | kaddressbook/phoneeditwidget.h | 87 |
5 files changed, 193 insertions, 16 deletions
diff --git a/bin/kdepim/kaddressbook/germantranslation.txt b/bin/kdepim/kaddressbook/germantranslation.txt index dcf43c1..f12f880 100644 --- a/bin/kdepim/kaddressbook/germantranslation.txt +++ b/bin/kdepim/kaddressbook/germantranslation.txt @@ -776,62 +776,62 @@ { "Spouse","Ehegatte" },
{ "Notes","Notizen" },
{ "Messanger","Messanger" },
{ "Assistant","Assistent" },
{ "Manager","Manager" },
{ "Secrecy","Sichtbar" },
{ "male","männlich" },
{ "female","weiblich" },
{ "Hide!","Verbergen!" },
{ "Show!","Anzeigen!" },
{ "Details","Details" },
{ "Search:","Suche:" },
{ "Automatically sync with KDE-Desktop\nwhen receiving sync request","Synce automatisch mit KDE-Desktop\nwenn eine Sync-Anforderung kommt" },
{ "Pi-Sync Port Error","Pi-Sync Port Fehler" },
{ "<b>Enabling Pi-Sync failed!</b> Failed to bind or listen to the port %1! Is another instance already listening to that port?","<b>Anschalten von Pi-Sync fehlgeschlagen!</b> Fehler beim Ansprechen des Ports %1! Ist bereits eine andere Anwendung dabei diesen Port zu nutzen?" },
{ "No valid port number:\n%1","Keine gültige Port Nummer:\n%1" },
{ "Port number (Default: %1)\nValid range from 1 to 65535","Port Nummer (Standard: %1)\nGültiger Bereich von 1 bis 65535" },
{ "Pi-Sync Error","Pi-Sync Fehler" },
{ "Got send file request\nwith invalid password","Erhielt "sende Datei" Anfrage\nmit ungültigem Passwort" },
{ "Got receive file request\nwith invalid password","Erhielt "empfange Datei" Anfrage\nmit ungültigem Passwort" },
{ "Wrong password: Receiving remote file failed.","Falsches Passwort: Empfangen von entfernter Datei fehlgeschlagen." },
{ "Please close error dialog on remote.","Bitte schließe Fehler-Dialog am entfernten Rechner" },
{ "Unknown error on remote.","Unbekannter Fehler am entfernten Rechner" },
{ "Pi-Sync: Connected!","Pi-Sync: Verbunden!" },
{ "Receiving file from remote...","Empfange entfernte Datei..." },
{ "Sending back synced file...","Sende synchronisierte Datei zurück..." },
{ "Do you want to\nclear all sync info\nof all profiles?","Möchten Sie wirklich\ndie Sync-Info\nfür alle Profile\nlöschen?" },
{ "Do you want to\nclear the sync\ninfo of profile\n%1?\n","Möchten Sie wirklich\ndie Sync-Info für Profil\n%1?\nlöschen" },
{ "Sorry, no valid port.Syncing cancelled.","Sorry, kein gültiger Port. Syncing abgebrochen." },
{ "Remote port number:\n(May be: 1 - 65535)","Ferne Port Nummer:\n(Darf sein: 1 - 65535)" },
{ "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)" },
+{ "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/addressee.cpp b/kabc/addressee.cpp index 19c78ee..789a694 100644 --- a/kabc/addressee.cpp +++ b/kabc/addressee.cpp @@ -1014,119 +1014,119 @@ QString Addressee::businessAddressStreetLabel() QString Addressee::businessAddressLocalityLabel() { return i18n("Business Address Locality"); } QString Addressee::businessAddressRegionLabel() { return i18n("Business Address Region"); } QString Addressee::businessAddressPostalCodeLabel() { return i18n("Business Address Postal Code"); } QString Addressee::businessAddressCountryLabel() { return i18n("Business Address Country"); } QString Addressee::businessAddressLabelLabel() { return i18n("Business Address Label"); } QString Addressee::homePhoneLabel() { return i18n("Home Phone"); } QString Addressee::businessPhoneLabel() { return i18n("Work Phone"); } QString Addressee::mobilePhoneLabel() { return i18n("Mobile Phone"); } QString Addressee::mobileWorkPhoneLabel() { - return i18n("Mobile2 (work)"); + return i18n("Mobile2 (Work)"); } QString Addressee::mobileHomePhoneLabel() { return i18n("Mobile (Home)"); } QString Addressee::homeFaxLabel() { return i18n("Fax (Home)"); } QString Addressee::businessFaxLabel() { return i18n("Fax (Work)"); } QString Addressee::carPhoneLabel() { - return i18n("Mobile2 (car)"); + return i18n("Mobile2 (Car)"); } QString Addressee::isdnLabel() { return i18n("ISDN"); } QString Addressee::pagerLabel() { return i18n("Pager"); } QString Addressee::sipLabel() { return i18n("SIP"); } QString Addressee::emailLabel() { return i18n("Email Address"); } void Addressee::setMailer( const QString &mailer ) { if ( mailer == mData->mailer ) return; detach(); mData->empty = false; mData->mailer = mailer; } QString Addressee::mailer() const { return mData->mailer; } QString Addressee::mailerLabel() { return i18n("Mail Client"); } void Addressee::setTimeZone( const TimeZone &timeZone ) { if ( timeZone == mData->timeZone ) return; detach(); diff --git a/kabc/addresseeview.cpp b/kabc/addresseeview.cpp index 05d604f..aae923c 100644 --- a/kabc/addresseeview.cpp +++ b/kabc/addresseeview.cpp @@ -539,99 +539,101 @@ mText = "<table width=\"100%\">\n"; mText += notes; mText += "</table>"; } // at last display it... setText( mText ); } QString AddresseeView::getPhoneNumbers( KABC::PhoneNumber::List phones ,bool preferred ) { ExternalAppHandler* eah = ExternalAppHandler::instance(); bool kphoneAvail = eah->isPhoneAppAvailable(); bool kfaxAvail = eah->isFaxAppAvailable(); bool ksmsAvail = eah->isSMSAppAvailable(); bool kpagerAvail = eah->isPagerAppAvailable(); bool ksipAvail = eah->isSIPAppAvailable(); QString dynamicPart; KABC::PhoneNumber::List::ConstIterator phoneIt; QString extension; int phonetype; QString sms; for ( phoneIt = phones.begin(); phoneIt != phones.end(); ++phoneIt ) { phonetype = (*phoneIt).type(); if ( ((phonetype & KABC::PhoneNumber::Pref) == 0 ) == preferred ) continue; if (ksmsAvail && ( ((phonetype & KABC::PhoneNumber::Car) == KABC::PhoneNumber::Car) || ((phonetype & KABC::PhoneNumber::Cell) == KABC::PhoneNumber::Cell) ) ) { sms = QString("<a href=\"smsto:%1 \">(sms)</a>" ) .arg( (*phoneIt).number() ); } else sms = ""; extension = QString::null; if ((phonetype & KABC::PhoneNumber::Fax) == KABC::PhoneNumber::Fax) { if (kfaxAvail) extension = "faxto:"; } else if ((phonetype & KABC::PhoneNumber::Pager) == KABC::PhoneNumber::Pager) { if (kpagerAvail) extension = "pagerto:"; } +#if 0 else if ((phonetype & KABC::PhoneNumber::Sip) == KABC::PhoneNumber::Sip) { if (ksipAvail) extension = "sipto:"; } +#endif else if (kphoneAvail) { extension = "phoneto:"; } else extension = QString::null; if ( !extension.isEmpty() ) { dynamicPart += QString( "<tr><td align=\"right\"><b>%1</b></td>" "<td align=\"left\"><a href=\"%2%3 \">%4</a> %5</td></tr>" ) .arg( KABC::PhoneNumber::typeLabel( phonetype ) ) .arg( extension ) .arg( (*phoneIt).number() ) .arg( (*phoneIt).number() ) .arg( sms ); } else { dynamicPart += QString( "<tr><td align=\"right\"><b>%1</b></td>" "<td align=\"left\">%2 %3</td></tr>" ) .arg( KABC::PhoneNumber::typeLabel( phonetype ) ) .arg( (*phoneIt).number() ) .arg( sms ); } } return dynamicPart; } /* KABC::Addressee AddresseeView::addressee() const { return mAddressee; } */ void AddresseeView::addTag(const QString & tag,const QString & text) { if ( text.isEmpty() ) return; int number=text.contains("\n"); QString str = "<" + tag + ">"; QString tmpText=text; QString tmpStr=str; if(number !=-1) { if (number > 0) { int pos=0; QString tmp; for(int i=0;i<=number;i++) { pos=tmpText.find("\n"); diff --git a/kaddressbook/phoneeditwidget.cpp b/kaddressbook/phoneeditwidget.cpp index 2bce39a..b20275d 100644 --- a/kaddressbook/phoneeditwidget.cpp +++ b/kaddressbook/phoneeditwidget.cpp @@ -1,100 +1,210 @@ /* 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 <qlayout.h> #include <qlabel.h> #include <qtooltip.h> #include <qpushbutton.h> #include <qcheckbox.h> #include <qstring.h> #include <qlistbox.h> #include <qlistview.h> #include <qbuttongroup.h> +#include <qhbox.h> #include <kbuttonbox.h> #include <klistview.h> #include <kapplication.h> #include <qapplication.h> #include <kconfig.h> #include <klineedit.h> #include <kcombobox.h> #include <klocale.h> #include <kdebug.h> #include <kglobal.h> #include <kiconloader.h> #include <kabc/phonenumber.h> #include "typecombo.h" #include "phoneeditwidget.h" PhoneEditWidget::PhoneEditWidget( QWidget *parent, const char *name ) + : QScrollView(parent,name) +{ + setFrameStyle ( QFrame::Panel | QFrame::Plain ); + setLineWidth ( 1 ); + setMidLineWidth ( 1 ); + mw = new QWidget ( viewport() ); + addChild(mw); + setResizePolicy( AutoOneFit ); + mainLayout = new QVBoxLayout ( mw ); + mainLayout->setMargin( 2 ); + mainLayout->setSpacing( 2 ); + QWidget* hb = new QWidget ( mw ); + mainLayout->add( hb ); + QHBoxLayout* hbLayout = new QHBoxLayout ( hb ); + QPushButton *addBut = new QPushButton ( "add", hb ); + hbLayout->add( addBut ); + addBut->setPixmap ( SmallIcon("plus")); + addBut->setMaximumSize( addBut->sizeHint().height(),addBut->sizeHint().height() ); + connect(addBut,SIGNAL(clicked()),SLOT(addNumber())); + //QLabel * temp = new QLabel( i18n("Phone Type"), hb ); + QLabel *temp = new QLabel( i18n("Phone Number"),hb ); + temp->setAlignment( Qt::AlignCenter ); + temp->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop, 0 ) ); + hbLayout->add( temp ); + appendEditCombo(); + appendEditCombo(); + appendEditCombo(); + setDefaults(); +} + +PhoneEditWidget::~PhoneEditWidget() +{ +} +void PhoneEditWidget::setDefaults() +{ + PhoneTypeNumberEdit* edit = mTypeNumberEditList.first(); + KABC::PhoneNumber phoneNumber; + phoneNumber.setType( KABC::PhoneNumber::Home | KABC::PhoneNumber::Pref ); + edit->setPhoneNumber( phoneNumber ); + edit = mTypeNumberEditList.next(); + phoneNumber.setType( KABC::PhoneNumber::Work | KABC::PhoneNumber::Pref ); + edit->setPhoneNumber( phoneNumber ); + edit = mTypeNumberEditList.next(); + phoneNumber.setType( KABC::PhoneNumber::Cell ); + edit->setPhoneNumber( phoneNumber ); + edit = mTypeNumberEditList.next(); + while ( edit ) { + edit->hide(); + edit = mTypeNumberEditList.next(); + } +} +void PhoneEditWidget::addNumber() +{ + +} +PhoneTypeNumberEdit* PhoneEditWidget::appendEditCombo() +{ + PhoneTypeNumberEdit* edit = new PhoneTypeNumberEdit( mw ); + connect ( edit, SIGNAL ( typeChange( int , int) ), this, SIGNAL ( typeChange( int , int)) ); + connect ( edit, SIGNAL ( modified() ), this, SIGNAL ( modified() ) ); + connect ( this, SIGNAL ( typeChange( int , int)), edit, SLOT ( typeExternalChanged( int, int)) ); + + mainLayout->add( edit ); + mTypeNumberEditList.append( edit ); + return edit; +} + +void PhoneEditWidget::setPhoneNumbers( const KABC::PhoneNumber::List &li ) +{ + if ( li.isEmpty() ) { + setDefaults(); + return; + } + KABC::PhoneNumber::List::Iterator it; + KABC::PhoneNumber::List list = li; + PhoneTypeNumberEdit* edit = mTypeNumberEditList.first(); + for ( it = list.begin(); it != list.end(); ++it ) { + if ( edit ) { + edit->setPhoneNumber( (*it ) ); + edit = mTypeNumberEditList.next(); + } else { + PhoneTypeNumberEdit* editNew = appendEditCombo(); + editNew->setPhoneNumber( (*it ) ); + } + } + while ( edit ) { + edit->hide(); + edit = mTypeNumberEditList.next(); + } + //mainLayout->invalidate (); + mw->update(); +} +KABC::PhoneNumber::List PhoneEditWidget::phoneNumbers() +{ + KABC::PhoneNumber::List retList; + + PhoneTypeNumberEdit* edit = mTypeNumberEditList.first(); + while ( edit ) { + if ( edit->isValid() ) { + retList.append( edit->phoneNumber()); + } + edit = mTypeNumberEditList.next(); + + } + return retList; +} + +#if 0 +PhoneEditWidget::PhoneEditWidget( QWidget *parent, const char *name ) : QWidget( parent, name ) { QGridLayout *layout = new QGridLayout( this, 4, 1 ); //US layout->setSpacing( KDialog::spacingHint() ); layout->setSpacing( KDialogBase::spacingHintSmall() ); QLabel* label = new QLabel( this ); //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 ) ); label->setAlignment( AlignCenter ); //US layout->addMultiCellWidget( label, 0, 1, 3, 3 ); layout->addWidget( label, 0, 0 ); QPushButton *editButton = new QPushButton( i18n( "Edit Phone Numbers..." ), this ); if ( QApplication::desktop()->width() < 640 ) layout->addWidget( editButton, 0, 1 ); else layout->addMultiCellWidget( editButton, 0, 0, 1, 3); mPrefCombo = new PhoneTypeCombo( mPhoneList, this ); mPrefEdit = new KLineEdit( this ); //mPrefEdit->setMinimumWidth( int(mPrefEdit->sizeHint().width() * 1.5) ); mPrefCombo->setLineEdit( mPrefEdit ); layout->addWidget( mPrefCombo, 1, 0 ); layout->addWidget( mPrefEdit, 1, 1 ); int x = 1, y = 2; if ( QApplication::desktop()->width() < 640 ) { ++x; y = 0; } mSecondCombo = new PhoneTypeCombo( mPhoneList, this ); mSecondEdit = new KLineEdit( this ); mSecondCombo->setLineEdit( mSecondEdit ); layout->addWidget( mSecondCombo, x, y++ ); layout->addWidget( mSecondEdit, x, y++ ); y = 0; ++x; mThirdCombo = new PhoneTypeCombo( mPhoneList, this ); mThirdEdit = new KLineEdit( this ); mThirdCombo->setLineEdit( mThirdEdit ); layout->addWidget( mThirdCombo, x, y++ ); layout->addWidget( mThirdEdit, x, y++ ); if ( QApplication::desktop()->width() < 640 ) { @@ -505,52 +615,52 @@ PhoneTypeDialog::PhoneTypeDialog( const KABC::PhoneNumber &phoneNumber, mNumber = new KLineEdit( page ); layout->addWidget( mNumber, 0, 1 ); mPreferredBox = new QCheckBox( i18n( "This is the preferred phone number" ), page ); layout->addMultiCellWidget( mPreferredBox, 1, 1, 0, 1 ); mGroup = new QButtonGroup( 2, Horizontal, i18n( "Types" ), page ); layout->addMultiCellWidget( mGroup, 2, 2, 0, 1 ); // fill widgets mNumber->setText( mPhoneNumber.number() ); mTypeList = KABC::PhoneNumber::typeList(); mTypeList.remove( KABC::PhoneNumber::Pref ); KABC::PhoneNumber::TypeList::Iterator it; for ( it = mTypeList.begin(); it != mTypeList.end(); ++it ) new QCheckBox( KABC::PhoneNumber::typeLabel( *it ), mGroup ); for ( int i = 0; i < mGroup->count(); ++i ) { int type = mPhoneNumber.type(); QCheckBox *box = (QCheckBox*)mGroup->find( i ); box->setChecked( type & mTypeList[ i ] ); } mPreferredBox->setChecked( mPhoneNumber.type() & KABC::PhoneNumber::Pref ); mNumber->setFocus(); mNumber->setSelection( 0, 1024); } KABC::PhoneNumber PhoneTypeDialog::phoneNumber() { mPhoneNumber.setNumber( mNumber->text() ); int type = 0; for ( int i = 0; i < mGroup->count(); ++i ) { QCheckBox *box = (QCheckBox*)mGroup->find( i ); if ( box->isChecked() ) type += mTypeList[ i ]; } if ( mPreferredBox->isChecked() ) mPhoneNumber.setType( type | KABC::PhoneNumber::Pref ); else mPhoneNumber.setType( type & ~KABC::PhoneNumber::Pref ); return mPhoneNumber; } - +#endif #ifndef KAB_EMBEDDED #include "phoneeditwidget.moc" #endif //KAB_EMBEDDED diff --git a/kaddressbook/phoneeditwidget.h b/kaddressbook/phoneeditwidget.h index 0241cf0..6a514ed 100644 --- a/kaddressbook/phoneeditwidget.h +++ b/kaddressbook/phoneeditwidget.h @@ -1,222 +1,287 @@ #ifndef PHONEEDITWIDGET_H #define PHONEEDITWIDGET_H /* 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 <qptrlist.h> +#include <qscrollview.h> #include "addresseeconfig.h" #include "typecombo.h" class QButtonGroup; class QCheckBox; +class PhoneTypeNumberEdit; #include <klineedit.h> #include <kcombobox.h> -class KListView; +#include <kabc/phonenumber.h> typedef TypeCombo<KABC::PhoneNumber> PhoneTypeCombo; /** Widget for editing phone numbers. */ -class PhoneEditWidget : public QWidget +class PhoneEditWidget : public QScrollView { 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 ); + // void updateTypeCombo( const KABC::PhoneNumber::List&, KComboBox* ); + //KABC::PhoneNumber currentPhoneNumber( KComboBox*, int ); signals: void modified(); + void typeChange( int oldType, int newType ); private slots: + void addNumber(); + protected: + + private: + void setDefaults(); + PhoneTypeNumberEdit* appendEditCombo(); + QWidget* mw; + QVBoxLayout* mainLayout; + QPtrList <PhoneTypeNumberEdit> mTypeNumberEditList; + + KABC::PhoneNumber::List mPhoneList; +}; + + + + + +#if 0 +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 ); + + sig_nals: + void modified(); + void typeChange( int oldType, int newType ); + + private sl_ots: void edit(); void updatePrefEdit(); void updateSecondEdit(); void updateThirdEdit(); void updateFourthEdit(); void slotPrefEditChanged(); void slotSecondEditChanged(); void slotThirdEditChanged(); void slotFourthEditChanged(); protected: void updateLineEdits(); void updateCombos(); private: + QPtrList <PhoneTypeNumberEdit> mTypeNumberEditList; void updateEdit( PhoneTypeCombo *combo ); void updatePhoneNumber( PhoneTypeCombo *combo ); void updateOtherEdit( PhoneTypeCombo *combo, PhoneTypeCombo *otherCombo ); PhoneTypeCombo *mPrefCombo; PhoneTypeCombo *mSecondCombo; PhoneTypeCombo *mThirdCombo; PhoneTypeCombo *mFourthCombo; KLineEdit *mPrefEdit; KLineEdit *mSecondEdit; KLineEdit *mThirdEdit; KLineEdit *mFourthEdit; KABC::PhoneNumber::List mPhoneList; }; /** Dialog for editing lists of phonenumbers. */ class PhoneEditDialog : public KDialogBase { - Q_OBJECT + Q___OBJECT public: PhoneEditDialog( const KABC::PhoneNumber::List &list, QWidget *parent, const char *name = 0 ); ~PhoneEditDialog(); const KABC::PhoneNumber::List &phoneNumbers(); bool changed() const; - protected slots: + protected s__lots: void slotAddPhoneNumber(); void slotRemovePhoneNumber(); void slotEditPhoneNumber(); void slotSelectionChanged(); private: KABC::PhoneNumber::List mPhoneNumberList; KABC::PhoneNumber::TypeList mTypeList; KComboBox *mTypeBox; KListView *mListView; QPushButton *mRemoveButton; QPushButton *mEditButton; bool mChanged; }; /** Dialog for editing phone number types. */ class PhoneTypeDialog : public KDialogBase { - Q_OBJECT + 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; }; +#endif + class PhoneTypeNumberEdit : public QWidget { Q_OBJECT public: - PhoneTypeNumberEdit( QWidget *parent, const char *name = 0 ) + PhoneTypeNumberEdit( QWidget *parent, const char *name = 0 ) :QWidget( parent ) { 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 ) ) ); + connect( mNumber , SIGNAL ( textChanged ( const QString & ) ), + this, SLOT ( textChanged ( const QString & ) ) ); mCombo->insertStringList( PhoneNumber::supportedTypeListNames() ); + mIsValid = true; } void setPhoneNumber( const KABC::PhoneNumber &phoneNumber ) { mPhoneNumber = phoneNumber; int index = PhoneNumber::typeListIndex4Type( mPhoneNumber.type() ); mCombo->setCurrentItem( index ); mNumber->setText( mPhoneNumber.number() ); + mIsValid = true; show(); } KABC::PhoneNumber phoneNumber() { mPhoneNumber.setNumber( mNumber->text() ); int index = mCombo->currentItem(); mPhoneNumber.setType( PhoneNumber::supportedTypeList()[index] ); return mPhoneNumber; - } + bool isValid() + { + if ( !mIsValid ) return false; + if ( mNumber->text().isEmpty() )return false; + return true; + } 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() { + emit modified(); hide(); + mIsValid = false; } void comboTypeChange( int index ) { int old = mPhoneNumber.type(); int newT = PhoneNumber::supportedTypeList()[index]; if ( old != newT ) { - mPhoneNumber.setType(newT ); + emit modified(); emit typeChange ( old, newT ); + mPhoneNumber.setType(newT ); } } + int currentType() + { + return mCombo->currentItem(); + } + void textChanged ( const QString & ) + { + emit modified(); + } signals: void typeChange( int oldType, int newType ); + void modified(); private: + bool mIsValid; KABC::PhoneNumber mPhoneNumber; QPushButton* mMinusButton; KComboBox *mCombo; KLineEdit *mNumber; }; #endif |