• Skip to content
  • Skip to link menu
KDE 4.2 API Reference
  • KDE API Reference
  • kdepim
  • Sitemap
  • Contact Us
 

kmobiletools

addaddresseedialog.cpp

Go to the documentation of this file.
00001 /***************************************************************************
00002    Copyright (C) 2007 by Matthias Lechner <matthias@lmme.de>
00003 
00004    This program is free software; you can redistribute it and/or modify
00005    it under the terms of the GNU General Public License as published by
00006    the Free Software Foundation; either version 2 of the License, or
00007    (at your option) any later version.
00008 
00009    This program is distributed in the hope that it will be useful,
00010    but WITHOUT ANY WARRANTY; without even the implied warranty of
00011    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012    GNU General Public License for more details.
00013 
00014    You should have received a copy of the GNU General Public License
00015    along with this program; if not, write to the
00016    Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00017    Boston, MA 02110-1301, USA.
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     // clean up any existing entries if necessarry
00054     if( isHidden() ) {
00055         m_email->clear();
00056         m_name->clear();
00057         m_phoneNumber->clear();
00058         m_phoneNumberTable->clearContents();
00059 
00060         // the table header must be set here since clear() also clears the header?!
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     // insert the phone numbers
00120     for( int i=0; i<m_phoneNumberTable->rowCount(); i++ ) {
00121         QTableWidgetItem* item;
00122 
00123         // process the phone number item
00124         item = m_phoneNumberTable->item( i, 0 );
00125         Q_ASSERT(item);
00126         if( item ) {
00127             QString number = item->text();
00128 
00129             // process the phone number type item
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     // set the memory slot
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     // name
00173     QLabel* nameLabel = new QLabel( i18n( "Name" ), m_widget );
00174     m_name = new KLineEdit( m_widget );
00175     nameLabel->setBuddy( m_name );
00176 
00177     // e-mail
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     // phone numbers
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     // storage location (memory slot)
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"

kmobiletools

Skip menu "kmobiletools"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

kdepim

Skip menu "kdepim"
  • akonadi
  •   clients
  •   kabc
  •   kcal
  •   kcm
  • akregator
  • console
  •   kabcclient
  •   konsolekalendar
  • kaddressbook
  • kalarm
  •   lib
  • kdgantt
  • kdgantt1
  • kjots
  • kleopatra
  • kmail
  • kmobiletools
  • knode
  • knotes
  • kontact
  • kontactinterfaces
  • korganizer
  •   korgac
  • kpilot
  • ktimetracker
  •   doc
  • libkdepim
  • libkholidays
  • libkleo
  • libkpgp
  • maildir
Generated for kdepim by doxygen 1.5.4
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal