00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "addaddresseedialog.h"
00021
00022 #include <QtGui/QLabel>
00023 #include <QtGui/QTableWidget>
00024 #include <QtGui/QGridLayout>
00025 #include <QtGui/QVBoxLayout>
00026 #include <QtGui/QHBoxLayout>
00027 #include <QtGui/QComboBox>
00028 #include <QtCore/QRegExp>
00029 #include <QtGui/QRegExpValidator>
00030 #include <QtGui/QHeaderView>
00031
00032 #include <KLineEdit>
00033 #include <KPushButton>
00034 #include <KLocale>
00035 #include <KIcon>
00036 #include <KPassivePopup>
00037
00038 AddAddresseeDialog::AddAddresseeDialog( QWidget* parent )
00039 : KDialog( parent )
00040 {
00041 setCaption( i18n( "New contact" ) );
00042 setButtons( KDialog::Ok | KDialog::Cancel );
00043
00044 setupGui();
00045 }
00046
00047
00048 AddAddresseeDialog::~AddAddresseeDialog()
00049 {
00050 }
00051
00052 void AddAddresseeDialog::show() {
00053
00054 if( isHidden() ) {
00055 m_email->clear();
00056 m_name->clear();
00057 m_phoneNumber->clear();
00058 m_phoneNumberTable->clearContents();
00059
00060
00061 QStringList header;
00062 header << i18n( "Phone number" );
00063 header << i18n( "Number type" );
00064 m_phoneNumberTable->setHorizontalHeaderLabels( header );
00065 }
00066
00067 KDialog::show();
00068 m_name->setFocus( Qt::OtherFocusReason );
00069 }
00070
00071 QString AddAddresseeDialog::memorySlotToString( KMobileTools::AddressbookEntry::MemorySlot memorySlot ) {
00072 switch( memorySlot ) {
00073 case KMobileTools::AddressbookEntry::Phone:
00074 return i18n( "Phone internal memory" );
00075
00076 case KMobileTools::AddressbookEntry::Sim:
00077 return i18n( "Sim card" );
00078
00079 case KMobileTools::AddressbookEntry::DataCard:
00080 return i18n( "Memory card" );
00081
00082 case KMobileTools::AddressbookEntry::Unknown:
00083 return i18n( "Unknown storage location" );
00084 }
00085
00086 return QString();
00087 }
00088
00089 void AddAddresseeDialog::availableSlots( KMobileTools::AddressbookEntry::MemorySlots memorySlots )
00090 {
00091 m_storageLocation->clear();
00092
00093 if( memorySlots.testFlag( KMobileTools::AddressbookEntry::Phone ) )
00094 m_storageLocation->addItem( memorySlotToString( KMobileTools::AddressbookEntry::Phone ),
00095 KMobileTools::AddressbookEntry::Phone );
00096
00097 if( memorySlots.testFlag( KMobileTools::AddressbookEntry::Sim ) )
00098 m_storageLocation->addItem( memorySlotToString( KMobileTools::AddressbookEntry::Sim ),
00099 KMobileTools::AddressbookEntry::Sim );
00100
00101 if( memorySlots.testFlag( KMobileTools::AddressbookEntry::DataCard ) )
00102 m_storageLocation->addItem( memorySlotToString( KMobileTools::AddressbookEntry::DataCard ),
00103 KMobileTools::AddressbookEntry::DataCard );
00104
00105 if( memorySlots.testFlag( KMobileTools::AddressbookEntry::Unknown ) ) {
00106 m_storageLocation->addItem( memorySlotToString( KMobileTools::AddressbookEntry::Unknown ),
00107 KMobileTools::AddressbookEntry::Unknown );
00108 }
00109
00110 }
00111
00112 void AddAddresseeDialog::accept() {
00114 KMobileTools::AddressbookEntry entry;
00115
00116 entry.setName( m_name->text() );
00117 entry.insertEmail( m_email->text() );
00118
00119
00120 for( int i=0; i<m_phoneNumberTable->rowCount(); i++ ) {
00121 QTableWidgetItem* item;
00122
00123
00124 item = m_phoneNumberTable->item( i, 0 );
00125 Q_ASSERT(item);
00126 if( item ) {
00127 QString number = item->text();
00128
00129
00130 item = m_phoneNumberTable->item( i, 1 );
00131 QVariant typeVariant = item->data( Qt::UserRole );
00132 KABC::PhoneNumber::TypeFlag type = static_cast<KABC::PhoneNumber::TypeFlag>( typeVariant.toInt() );
00133
00134 entry.insertPhoneNumber( KABC::PhoneNumber( number, type ) );
00135 }
00136 }
00137
00138
00139 QVariant memorySlot = m_storageLocation->itemData( m_storageLocation->currentIndex() );
00140 entry.setMemorySlot( static_cast<KMobileTools::AddressbookEntry::MemorySlot>( memorySlot.toInt() ) );
00141
00142 emit addAddressee( entry );
00143 KDialog::accept();
00144 }
00145
00146 void AddAddresseeDialog::addPhoneNumber() {
00147 QTableWidgetItem* phoneNumberItem = new QTableWidgetItem( m_phoneNumber->text() );
00148 QTableWidgetItem* typeItem = new QTableWidgetItem( m_phoneNumberTypes->currentText() );
00149 typeItem->setData( Qt::UserRole, m_phoneNumberTypes->itemData( m_phoneNumberTypes->currentIndex() ) );
00150
00151 m_phoneNumberTable->insertRow( m_phoneNumberTable->rowCount() );
00152 int row = m_phoneNumberTable->rowCount() - 1;
00153 m_phoneNumberTable->setItem( row, 0, phoneNumberItem );
00154 m_phoneNumberTable->setItem( row, 1, typeItem );
00155
00156 m_phoneNumberTable->resizeColumnsToContents();
00157 }
00158
00159 void AddAddresseeDialog::removePhoneNumber() {
00160 QTableWidgetItem* currentItem = m_phoneNumberTable->currentItem();
00161 if( currentItem ) {
00162 int row = currentItem->row();
00163 m_phoneNumberTable->removeRow( row );
00164 }
00165
00166 m_phoneNumberTable->resizeColumnsToContents();
00167 }
00168
00169 void AddAddresseeDialog::setupGui() {
00170 m_widget = new QWidget( this );
00171
00172
00173 QLabel* nameLabel = new QLabel( i18n( "Name" ), m_widget );
00174 m_name = new KLineEdit( m_widget );
00175 nameLabel->setBuddy( m_name );
00176
00177
00178 QLabel* emailLabel = new QLabel( i18n( "E-mail" ), m_widget );
00179 m_email = new KLineEdit( m_widget );
00180
00181 QRegExp emailRegExp( "^[a-zA-Z][\\w\\.-]*[a-zA-Z0-9]@[a-zA-Z0-9]"
00182 "[\\w\\.-]*[a-zA-Z0-9]\\.[a-zA-Z][a-zA-Z\\.]*[a-zA-Z]$" );
00183 QRegExpValidator* emailValidator = new QRegExpValidator( emailRegExp, 0 );
00184 m_email->setValidator( emailValidator );
00185
00186 emailLabel->setBuddy( m_email );
00187
00188
00189 QLabel* phoneLabel = new QLabel( i18n( "Phone numbers" ), m_widget );
00190
00191 m_phoneNumber = new KLineEdit( m_widget );
00193
00194 m_phoneNumberTable = new QTableWidget( m_widget );
00195 m_phoneNumberTable->setColumnCount( 2 );
00196 m_phoneNumberTable->setRowCount( 0 );
00197 m_phoneNumberTable->verticalHeader()->hide();
00198 m_phoneNumberTable->setShowGrid( false );
00199 m_phoneNumberTable->setSelectionBehavior( QAbstractItemView::SelectRows );
00200 m_phoneNumberTable->setSelectionMode( QAbstractItemView::SingleSelection );
00201 m_phoneNumberTable->setEditTriggers( QAbstractItemView::NoEditTriggers );
00202
00203 m_phoneNumberTypes = new QComboBox( m_widget );
00204 m_phoneNumberTypes->addItem( i18n( "Mobile" ), KABC::PhoneNumber::Cell );
00205 m_phoneNumberTypes->addItem( i18n( "Home" ), KABC::PhoneNumber::Home );
00206 m_phoneNumberTypes->addItem( i18n( "Work" ), KABC::PhoneNumber::Work );
00207 m_phoneNumberTypes->addItem( i18n( "Messaging" ), KABC::PhoneNumber::Msg );
00208 m_phoneNumberTypes->addItem( i18n( "Voice" ), KABC::PhoneNumber::Voice );
00209 m_phoneNumberTypes->addItem( i18n( "Fax" ), KABC::PhoneNumber::Fax );
00210 m_phoneNumberTypes->addItem( i18n( "Pager" ), KABC::PhoneNumber::Pager );
00211
00212 m_addPhoneNumber = new KPushButton( i18n( "Add phone number" ), m_widget );
00213 m_removePhoneNumber = new KPushButton( i18n( "Remove phone number" ), m_widget );
00214 connect( m_addPhoneNumber, SIGNAL(clicked()), this, SLOT(addPhoneNumber()) );
00215 connect( m_removePhoneNumber, SIGNAL(clicked()), this, SLOT(removePhoneNumber()) );
00216
00217
00218 QLabel* storageLocationLabel = new QLabel( i18n( "Storage location" ), m_widget );
00219 m_storageLocation = new QComboBox( m_widget );
00220
00221 QLabel* information = new QLabel( m_widget );
00222 KIcon informationIcon = KIcon( "dialog-information" );
00223 information->setPixmap( informationIcon.pixmap( 32, 32 ) );
00224 QLabel* noticeLabel = new QLabel( i18n( "Please note that not all kind of contact information "
00225 "might be supported by your phone." ) );
00226
00227 QGridLayout* layout1 = new QGridLayout;
00228 layout1->setHorizontalSpacing( 5 );
00229 layout1->addWidget( nameLabel, 0, 0 );
00230 layout1->addWidget( m_name, 0, 1 );
00231 layout1->addWidget( emailLabel, 1, 0 );
00232 layout1->addWidget( m_email, 1, 1 );
00233
00234 QGridLayout* layout2 = new QGridLayout;
00235 layout1->setHorizontalSpacing( 5 );
00236 layout2->addWidget( phoneLabel, 0, 0, 1, 2 );
00237 layout2->addWidget( m_phoneNumber, 1, 0 );
00238 layout2->addWidget( m_phoneNumberTypes, 1, 1 );
00239 layout2->addWidget( m_phoneNumberTable, 2, 0, 3, 1 );
00240 layout2->setRowStretch( 4, 1 );
00241 layout2->addWidget( m_addPhoneNumber, 2, 1 );
00242 layout2->addWidget( m_removePhoneNumber, 3, 1 );
00243
00244 QGridLayout* layout3 = new QGridLayout;
00245 layout1->setHorizontalSpacing( 5 );
00246 layout3->addWidget( storageLocationLabel, 0, 0 );
00247 layout3->addWidget( m_storageLocation, 0, 1 );
00248 layout3->setColumnStretch( 1, 1 );
00249
00250 QGridLayout* layout4 = new QGridLayout;
00251 layout1->setHorizontalSpacing( 5 );
00252 layout4->addWidget( information, 0, 0 );
00253 layout4->addWidget( noticeLabel, 0, 1 );
00254 layout4->setColumnStretch( 1, 1 );
00255
00256 QVBoxLayout* main = new QVBoxLayout;
00257 main->addLayout( layout1, 0 );
00258 main->addSpacing( 1 );
00259 main->addLayout( layout2, 1 );
00260 main->addSpacing( 10 );
00261 main->addLayout( layout3, 0 );
00262 main->addSpacing( 10 );
00263 main->addLayout( layout4, 0 );
00264
00265 m_widget->setLayout( main );
00266
00267 setMainWidget( m_widget );
00268
00269 }
00270
00271 #include "addaddresseedialog.moc"