-rw-r--r-- | kaddressbook/phoneeditwidget.cpp | 37 | ||||
-rw-r--r-- | kaddressbook/phoneeditwidget.h | 18 |
2 files changed, 31 insertions, 24 deletions
diff --git a/kaddressbook/phoneeditwidget.cpp b/kaddressbook/phoneeditwidget.cpp index b20275d..997fc05 100644 --- a/kaddressbook/phoneeditwidget.cpp +++ b/kaddressbook/phoneeditwidget.cpp @@ -54,115 +54,121 @@ 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(); + mTypeNumberEditList.setAutoDelete( true ); } PhoneEditWidget::~PhoneEditWidget() { } void PhoneEditWidget::setDefaults() { - PhoneTypeNumberEdit* edit = mTypeNumberEditList.first(); + mTypeNumberEditList.clear(); + PhoneTypeNumberEdit* edit = appendEditCombo(); KABC::PhoneNumber phoneNumber; phoneNumber.setType( KABC::PhoneNumber::Home | KABC::PhoneNumber::Pref ); edit->setPhoneNumber( phoneNumber ); - edit = mTypeNumberEditList.next(); + edit = appendEditCombo(); phoneNumber.setType( KABC::PhoneNumber::Work | KABC::PhoneNumber::Pref ); edit->setPhoneNumber( phoneNumber ); - edit = mTypeNumberEditList.next(); + edit = appendEditCombo(); 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 ( edit, SIGNAL ( deleteMe( PhoneTypeNumberEdit* ) ), this, SLOT ( deleteEdit( PhoneTypeNumberEdit*) ) ); connect ( this, SIGNAL ( typeChange( int , int)), edit, SLOT ( typeExternalChanged( int, int)) ); mainLayout->add( edit ); mTypeNumberEditList.append( edit ); return edit; } +void PhoneEditWidget::deleteEdit( PhoneTypeNumberEdit* ew ) +{ + mPendingDelete = ew; + QTimer::singleShot( 0, this, SLOT ( pendingDelete() ) ); +} +void PhoneEditWidget::pendingDelete() +{ + mTypeNumberEditList.removeRef( mPendingDelete ); + emit modified(); +} + void PhoneEditWidget::setPhoneNumbers( const KABC::PhoneNumber::List &li ) { if ( li.isEmpty() ) { setDefaults(); return; - } + } + mTypeNumberEditList.clear(); KABC::PhoneNumber::List::Iterator it; KABC::PhoneNumber::List list = li; - PhoneTypeNumberEdit* edit = mTypeNumberEditList.first(); + PhoneTypeNumberEdit* edit = 0;//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() ); @@ -494,48 +500,49 @@ PhoneEditDialog::PhoneEditDialog( const KABC::PhoneNumber::List &list, QWidget * mEditButton = buttonBox->addButton( i18n( "&Edit..." ), this, SLOT( slotEditPhoneNumber() ) ); mEditButton->setEnabled( false ); mRemoveButton = buttonBox->addButton( i18n( "&Remove" ), this, SLOT( slotRemovePhoneNumber() ) ); mRemoveButton->setEnabled( false ); buttonBox->layout(); layout->addWidget( mListView, 0, 0 ); layout->addWidget( buttonBox, 0, 1 ); connect( mListView, SIGNAL(selectionChanged()), SLOT(slotSelectionChanged()) ); connect( mListView, SIGNAL(doubleClicked( QListViewItem *, const QPoint &, int )), this, SLOT( slotEditPhoneNumber())); KABC::PhoneNumber::List::Iterator it; for ( it = mPhoneNumberList.begin(); it != mPhoneNumberList.end(); ++it ) new PhoneViewItem( mListView, *it ); if (QApplication::desktop()->width() < 480 ) showMaximized(); else resize( 400, 400 ); mChanged = false; } PhoneEditDialog::~PhoneEditDialog() { + qDebug("PhoneEditDialog::~PhoneEditDialog() "); } void PhoneEditDialog::slotAddPhoneNumber() { KABC::PhoneNumber tmp( "", 0 ); PhoneTypeDialog dlg( tmp, this ); if ( dlg.exec() ) { QListViewItem* i = mListView->firstChild(); KABC::PhoneNumber phoneNumber = dlg.phoneNumber(); bool insert = true; while ( i ) { PhoneViewItem* p = ( PhoneViewItem* ) i; KABC::PhoneNumber pn = p->phoneNumber(); if ( (pn.type() | KABC::PhoneNumber::Pref) == (phoneNumber.type() | KABC::PhoneNumber::Pref) ) { if ( p->text(0).isEmpty()) { p->setPhoneNumber( phoneNumber ); mPhoneNumberList.remove( pn ); mPhoneNumberList.append( phoneNumber ); insert = false; break; } } i = i->nextSibling(); diff --git a/kaddressbook/phoneeditwidget.h b/kaddressbook/phoneeditwidget.h index 6a514ed..c730c7b 100644 --- a/kaddressbook/phoneeditwidget.h +++ b/kaddressbook/phoneeditwidget.h @@ -45,52 +45,55 @@ class PhoneTypeNumberEdit; typedef TypeCombo<KABC::PhoneNumber> PhoneTypeCombo; /** Widget for editing phone numbers. */ 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 ); signals: void modified(); void typeChange( int oldType, int newType ); private slots: - void addNumber(); + void deleteEdit( PhoneTypeNumberEdit* ew ); + void addNumber(); + void pendingDelete(); protected: private: + PhoneTypeNumberEdit* mPendingDelete; 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(); @@ -191,97 +194,94 @@ private: }; #endif class PhoneTypeNumberEdit : public QWidget { Q_OBJECT public: 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; } - + ~PhoneTypeNumberEdit() { + // qDebug("~PhoneTypeNumberEdit() "); + } 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; + emit deleteMe( this ); } void comboTypeChange( int index ) { int old = mPhoneNumber.type(); int newT = PhoneNumber::supportedTypeList()[index]; if ( old != 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(); + void deleteMe( PhoneTypeNumberEdit* ); private: - bool mIsValid; KABC::PhoneNumber mPhoneNumber; QPushButton* mMinusButton; KComboBox *mCombo; KLineEdit *mNumber; }; #endif |