# kabc Library API Documentation

Overview | Class Hierarchy | Classes | Classes (annotated) | Members | Namespaces | Source Files

# distributionlisteditor.cpp

    00001 /*
    00002     This file is part of libkabc.
    00003     Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
    00004
    00005     This library is free software; you can redistribute it and/or
    00006     modify it under the terms of the GNU Library General Public
    00007     License as published by the Free Software Foundation; either
    00008     version 2 of the License, or (at your option) any later version.
    00009
    00010     This library is distributed in the hope that it will be useful,
    00011     but WITHOUT ANY WARRANTY; without even the implied warranty of
    00012     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    00013     Library General Public License for more details.
    00014
    00015     You should have received a copy of the GNU Library General Public License
    00016     along with this library; see the file COPYING.LIB.  If not, write to
    00017     the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    00018     Boston, MA 02111-1307, USA.
    00019 */
    00020
    00021 #include <qlistview.h>
    00022 #include <qlayout.h>
    00023 #include <qpushbutton.h>
    00024 #include <qcombobox.h>
    00025 #include <qbuttongroup.h>
    00026 #include <qradiobutton.h>
    00027
    00028 #include <kinputdialog.h>
    00029 #include <klocale.h>
    00030 #include <kdebug.h>
    00031
    00032 #include "addressbook.h"
    00033 #include "addresseedialog.h"
    00034 #include "distributionlist.h"
    00035
    00036 #include "distributionlisteditor.h"
    00037 #include "distributionlisteditor.moc"
    00038
    00039 using namespace KABC;
    00040
    00041 EmailSelectDialog::EmailSelectDialog( const QStringList &emails, const QString &current,
    00042                                       QWidget *parent ) :
    00043   KDialogBase( KDialogBase::Plain, i18n("Select Email Address"), Ok, Ok,
    00044                parent )
    00045 {
    00046   QFrame *topFrame = plainPage();
    00047   QBoxLayout *topLayout = new QVBoxLayout( topFrame );
    00048
    00049   mButtonGroup = new QButtonGroup( 1, Horizontal, i18n("Email Addresses"),
    00050                                    topFrame );
    00051   mButtonGroup->setRadioButtonExclusive( true );
    00052   topLayout->addWidget( mButtonGroup );
    00053
    00054   QStringList::ConstIterator it;
    00055   for( it = emails.begin(); it != emails.end(); ++it ) {
    00056     QRadioButton *button = new QRadioButton( *it, mButtonGroup );
    00057     if ( (*it) == current ) {
    00058       button->setDown( true );
    00059     }
    00060   }
    00061 }
    00062
    00063 QString EmailSelectDialog::selected()
    00064 {
    00065   QButton *button = mButtonGroup->selected();
    00066   if ( button ) return button->text();
    00067   return QString::null;
    00068 }
    00069
    00070 QString EmailSelectDialog::getEmail( const QStringList &emails, const QString &current,
    00071                                      QWidget *parent )
    00072 {
    00073   EmailSelectDialog *dlg = new EmailSelectDialog( emails, current, parent );
    00074   dlg->exec();
    00075
    00076   QString result = dlg->selected();
    00077
    00078   delete dlg;
    00079
    00080   return result;
    00081 }
    00082
    00083 class EditEntryItem : public QListViewItem
    00084 {
    00085   public:
    00086     EditEntryItem( QListView *parent, const Addressee &addressee,
    00087                const QString &email=QString::null ) :
    00088       QListViewItem( parent ),
    00089       mAddressee( addressee ),
    00090       mEmail( email )
    00091     {
    00092       setText( 0, addressee.realName() );
    00093       if( email.isEmpty() ) {
    00094         setText( 1, addressee.preferredEmail() );
    00095         setText( 2, i18n("Yes") );
    00096       } else {
    00097         setText( 1, email );
    00098         setText( 2, i18n("No") );
    00099       }
    00100     }
    00101
    00102     Addressee addressee() const
    00103     {
    00104       return mAddressee;
    00105     }
    00106
    00107     QString email() const
    00108     {
    00109       return mEmail;
    00110     }
    00111
    00112   private:
    00113     Addressee mAddressee;
    00114     QString mEmail;
    00115 };
    00116
    00117 DistributionListEditor::DistributionListEditor( AddressBook *addressBook, QWidget *parent) :
    00118   QWidget( parent ),
    00119   mAddressBook( addressBook )
    00120 {
    00121   kdDebug(5700) << "DistributionListEditor()" << endl;
    00122
    00123   QBoxLayout *topLayout = new QVBoxLayout( this );
    00124   topLayout->setMargin( KDialog::marginHint() );
    00125   topLayout->setSpacing( KDialog::spacingHint() );
    00126
    00127   QBoxLayout *nameLayout = new QHBoxLayout( topLayout) ;
    00128
    00129   mNameCombo = new QComboBox( this );
    00130   nameLayout->addWidget( mNameCombo );
    00131   connect( mNameCombo, SIGNAL( activated( int ) ), SLOT( updateEntryView() ) );
    00132
    00133   newButton = new QPushButton( i18n("New List"), this );
    00134   nameLayout->addWidget( newButton );
    00135   connect( newButton, SIGNAL( clicked() ), SLOT( newList() ) );
    00136
    00137   removeButton = new QPushButton( i18n("Remove List"), this );
    00138   nameLayout->addWidget( removeButton );
    00139   connect( removeButton, SIGNAL( clicked() ), SLOT( removeList() ) );
    00140
    00141   mEntryView = new QListView( this );
    00142   mEntryView->addColumn( i18n("Name") );
    00143   mEntryView->addColumn( i18n("Email") );
    00144   mEntryView->addColumn( i18n("Use Preferred") );
    00145   topLayout->addWidget( mEntryView );
    00146   connect(mEntryView,SIGNAL(selectionChanged ()),this, SLOT(slotSelectionEntryViewChanged()));
    00147
    00148   changeEmailButton = new QPushButton( i18n("Change Email"), this );
    00149   topLayout->addWidget( changeEmailButton );
    00150   connect( changeEmailButton, SIGNAL( clicked() ), SLOT( changeEmail() ) );
    00151
    00152   removeEntryButton = new QPushButton( i18n("Remove Entry"), this );
    00153   topLayout->addWidget( removeEntryButton );
    00154   connect( removeEntryButton, SIGNAL( clicked() ), SLOT( removeEntry() ) );
    00155
    00156   addEntryButton = new QPushButton( i18n("Add Entry"), this );
    00157   topLayout->addWidget( addEntryButton );
    00158   connect( addEntryButton, SIGNAL( clicked() ), SLOT( addEntry() ) );
    00159
    00160   mAddresseeView = new QListView( this );
    00161   mAddresseeView->addColumn( i18n("Name") );
    00162   mAddresseeView->addColumn( i18n("Preferred Email") );
    00163   topLayout->addWidget( mAddresseeView );
    00164
    00165
    00166   connect(mAddresseeView,SIGNAL(selectionChanged ()),this, SLOT(slotSelectionAddresseeViewChanged()));
    00167
    00168   mManager = new DistributionListManager( mAddressBook );
    00169   mManager->load();
    00170
    00171   updateAddresseeView();
    00172   updateNameCombo();
    00173   removeButton->setEnabled(!mManager->listNames().isEmpty());
    00174 }
    00175
    00176 DistributionListEditor::~DistributionListEditor()
    00177 {
    00178   kdDebug(5700) << "~DistributionListEditor()" << endl;
    00179
    00180   mManager->save();
    00181   delete mManager;
    00182 }
    00183
    00184 void DistributionListEditor::slotSelectionEntryViewChanged()
    00185 {
    00186     EditEntryItem *entryItem = dynamic_cast<EditEntryItem *>( mEntryView->selectedItem() );
    00187     bool state = (entryItem != 0L);
    00188
    00189     changeEmailButton->setEnabled(state);
    00190     removeEntryButton->setEnabled(state);
    00191 }
    00192
    00193 void DistributionListEditor::newList()
    00194 {
    00195   bool ok = false;
    00196   QString name = KInputDialog::getText( i18n("New Distribution List"),
    00197                                         i18n("Please enter name:"),
    00198                                         QString::null, &ok, this );
    00199   if ( !ok )
    00200     return;
    00201
    00202   new DistributionList( mManager, name );
    00203
    00204   mNameCombo->insertItem( name );
    00205   removeButton->setEnabled(true);
    00206   updateEntryView();
    00207 }
    00208
    00209 void DistributionListEditor::removeList()
    00210 {
    00211   mManager->remove( mManager->list( mNameCombo->currentText() ) );
    00212   mNameCombo->removeItem( mNameCombo->currentItem() );
    00213   removeButton->setEnabled(!mManager->listNames().isEmpty());
    00214   addEntryButton->setEnabled( !mNameCombo->currentText().isEmpty());
    00215   updateEntryView();
    00216 }
    00217
    00218 void DistributionListEditor::addEntry()
    00219 {
    00220   AddresseeItem *addresseeItem =
    00221       dynamic_cast<AddresseeItem *>( mAddresseeView->selectedItem() );
    00222
    00223   if( !addresseeItem ) {
    00224     kdDebug(5700) << "DLE::addEntry(): No addressee selected." << endl;
    00225     return;
    00226   }
    00227
    00228   DistributionList *list = mManager->list( mNameCombo->currentText() );
    00229   if ( !list ) {
    00230     kdDebug(5700) << "DLE::addEntry(): No dist list '" << mNameCombo->currentText() << "'" << endl;
    00231     return;
    00232   }
    00233
    00234   list->insertEntry( addresseeItem->addressee() );
    00235   updateEntryView();
    00236   slotSelectionAddresseeViewChanged();
    00237 }
    00238
    00239 void DistributionListEditor::removeEntry()
    00240 {
    00241   DistributionList *list = mManager->list( mNameCombo->currentText() );
    00242   if ( !list ) return;
    00243
    00244   EditEntryItem *entryItem =
    00245       dynamic_cast<EditEntryItem *>( mEntryView->selectedItem() );
    00246   if ( !entryItem ) return;
    00247
    00248   list->removeEntry( entryItem->addressee(), entryItem->email() );
    00249   delete entryItem;
    00250 }
    00251
    00252 void DistributionListEditor::changeEmail()
    00253 {
    00254   DistributionList *list = mManager->list( mNameCombo->currentText() );
    00255   if ( !list ) return;
    00256
    00257   EditEntryItem *entryItem =
    00258       dynamic_cast<EditEntryItem *>( mEntryView->selectedItem() );
    00259   if ( !entryItem ) return;
    00260
    00261   QString email = EmailSelectDialog::getEmail( entryItem->addressee().emails(),
    00262                                                entryItem->email(), this );
    00263   list->removeEntry( entryItem->addressee(), entryItem->email() );
    00264   list->insertEntry( entryItem->addressee(), email );
    00265
    00266   updateEntryView();
    00267 }
    00268
    00269 void DistributionListEditor::updateEntryView()
    00270 {
    00271   DistributionList *list = mManager->list( mNameCombo->currentText() );
    00272   if ( !list ) return;
    00273
    00274   mEntryView->clear();
    00275   DistributionList::Entry::List entries = list->entries();
    00276   DistributionList::Entry::List::ConstIterator it;
    00277   for( it = entries.begin(); it != entries.end(); ++it ) {
    00278     new EditEntryItem( mEntryView, (*it).addressee, (*it).email );
    00279   }
    00280    EditEntryItem *entryItem = dynamic_cast<EditEntryItem *>( mEntryView->selectedItem() );
    00281    bool state = (entryItem != 0L);
    00282
    00283    changeEmailButton->setEnabled(state);
    00284    removeEntryButton->setEnabled(state);
    00285 }
    00286
    00287 void DistributionListEditor::updateAddresseeView()
    00288 {
    00289   mAddresseeView->clear();
    00290
    00291   AddressBook::Iterator it;
    00292   for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) {
    00293     new AddresseeItem( mAddresseeView, *it );
    00294   }
    00295 }
    00296
    00297 void DistributionListEditor::updateNameCombo()
    00298 {
    00299   mNameCombo->insertStringList( mManager->listNames() );
    00300
    00301   updateEntryView();
    00302 }
    00303
    00304 void DistributionListEditor::slotSelectionAddresseeViewChanged()
    00305 {
    00306     AddresseeItem *addresseeItem =
    00307         dynamic_cast<AddresseeItem *>( mAddresseeView->selectedItem() );
    00308     bool state = (addresseeItem != 0L);
    00309     addEntryButton->setEnabled( state && !mNameCombo->currentText().isEmpty());
    00310 }

This file is part of the documentation for kabc Library Version 3.4.1.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Sat Jun 11 20:31:29 2005 by doxygen 1.4.1 written by Dimitri van Heesch, © 1997-2003