24#include <tqlineedit.h>
26#include <tdeapplication.h>
29#include <kinputdialog.h>
31#include <tdemessagebox.h>
32#include <kpushbutton.h>
34#include <tdeabc/stdaddressbook.h>
35#include <tdeabc/distributionlist.h>
37#include "addresspicker.h"
38#include "KWMailMergeTDEABC.h"
39#include "KWMailMergeTDEABCConfig.h"
42KWMailMergeTDEABCConfig::KWMailMergeTDEABCConfig( TQWidget *parent, KWMailMergeTDEABC *db_)
43 :KDialogBase( Plain, i18n(
"Mail Merge - Editor" ),
44 Ok | Cancel, Ok, parent,
"", true)
48 (
new TQVBoxLayout(plainPage()))->setAutoAdd(
true);
49 setMainWidget( _ui=
new AddressPickerUI( plainPage() ) );
52 initSelectedAddressees();
54 initSlotSignalConnections();
58KWMailMergeTDEABCConfig::~KWMailMergeTDEABCConfig()
64void KWMailMergeTDEABCConfig::acceptSelection()
68 TQListViewItem* top = _ui->mSelectedView->firstChild();
71 kdDebug() <<
"acceptSelection(): " << top->text(0) << endl;
72 if( top->text(0) == i18n(
"Distribution Lists") )
74 TQListViewItem* item = top->firstChild();
77 kdDebug() <<
"acceptSelection(): " << item->text(0) << endl;
78 _db->addList( item->text(0) );
79 item = item->nextSibling();
82 else if( top->text(0) == i18n(
"Single Entries") )
84 TQListViewItem* item = top->firstChild();
87 kdDebug() <<
"acceptSelection(): " << item->text(0) << endl;
88 _db->addEntry( item->text(-1) );
89 item = item->nextSibling();
92 top = top->nextSibling();
98void KWMailMergeTDEABCConfig::addSelectedContacts()
100 TQListViewItemIterator it( _ui->mAvailableView, TQListViewItemIterator::Selected );
101 TQListViewItem* selected = _ui->mSelectedView->findItem(
102 i18n(
"Single Entries"), 0, TQt::ExactMatch );
103 TQListViewItem* selectedLists = _ui->mSelectedView->findItem(
104 i18n(
"Distribution Lists"), 0, TQt::ExactMatch );
105 while ( it.current() )
107 if( it.current()->depth() > 0 )
109 TQString uid = it.current()->text( -1 );
110 kdDebug() <<
"addSelectedContacts(): uid :" << uid << endl;
113 KWMailMergeTDEABCConfigListItem *item =
114 static_cast<KWMailMergeTDEABCConfigListItem*
> ( it.current() );
117 selected->insertItem( item );
118 selected->setOpen(
true );
119 destroyAvailableClones( uid );
122 else if( it.current()->parent()->text(0) == i18n(
"Distribution Lists") )
126 selectedLists->insertItem( it.current() );
127 selectedLists->setOpen(
true );
133 _ui->mSelectedView->selectAll(
false );
137void KWMailMergeTDEABCConfig::destroyAvailableClones(
const TQString& uid )
142 TQListViewItemIterator it( _ui->mAvailableView );
144 while ( it.current() )
146 if( it.current()->depth() > 0)
148 if( it.current()->text(-1)== uid )
158void KWMailMergeTDEABCConfig::filterChanged(
const TQString& txt )
160 kdDebug() <<
"KWMailMergeTDEABCConfig::filterChanged( " << txt <<
" )" << endl;
162 bool showAll = txt.isEmpty();
164 TQListViewItem* category = _ui->mAvailableView->firstChild();
167 if( category->text(0)!=i18n(
"Distribution Lists") )
169 TQListViewItem* item = category->firstChild();
174 item->setVisible(
true );
178 item->setVisible( item->text(0).contains( txt,
false ) );
180 item = item->nextSibling();
182 category->setOpen( !showAll );
186 category->setVisible( showAll );
188 category = category->nextSibling();
193void KWMailMergeTDEABCConfig::initSelectedAddressees()
195 TQStringList records = _db->singleRecords();
197 TQListViewItem* category = _ui->mAvailableView->firstChild();
198 TQListViewItem* selected = _ui->mSelectedView->findItem(
199 i18n(
"Single Entries"), 0, TQt::ExactMatch );
200 while ( category && (records.count()>0) )
202 if( category->text(0) != i18n(
"Distribution Lists") )
204 KWMailMergeTDEABCConfigListItem* item =
205 static_cast<KWMailMergeTDEABCConfigListItem*
> ( category->firstChild() );
206 while( item && (records.count()>0) )
210 KWMailMergeTDEABCConfigListItem* nextItem =
211 static_cast<KWMailMergeTDEABCConfigListItem*
> ( item->nextSibling() );
213 for( TQStringList::Iterator itRecords = records.begin();
214 itRecords != records.end(); ++itRecords )
216 TQString uid = *itRecords;
217 if( item->text(-1) == uid )
219 selected->insertItem( item );
222 itRecords = records.remove( itRecords );
225 destroyAvailableClones( uid );
231 category = category->nextSibling();
236void KWMailMergeTDEABCConfig::initSelectedLists()
238 TQStringList lists = _db->lists();
240 kdDebug() <<
"::initSelectedLists()" << lists.join(
",") << endl;
242 TQListViewItem* l = _ui->mAvailableView->findItem(
243 i18n(
"Distribution Lists"), 0, TQt::ExactMatch );
244 TQListViewItem* selected = _ui->mSelectedView->findItem(
245 i18n(
"Distribution Lists"), 0, TQt::ExactMatch );
247 TQListViewItem* item = ( l->firstChild() );
248 while( item && (lists.count()>0) )
250 TQListViewItem* nextItem = item->nextSibling();
252 for( TQStringList::Iterator itLists = lists.begin();
253 itLists != lists.end(); ++itLists )
255 TQString
id = *itLists;
256 if( item->text(0) == id )
258 selected->insertItem( item );
259 itLists = lists.remove( itLists );
268void KWMailMergeTDEABCConfig::initSlotSignalConnections()
270 connect(
this, TQ_SIGNAL( okClicked() ), TQ_SLOT( acceptSelection() ) );
271 connect( _ui->mAddButton, TQ_SIGNAL( clicked() ), TQ_SLOT( addSelectedContacts() ) );
272 connect( _ui->mAddressBook, TQ_SIGNAL( clicked() ), TQ_SLOT( launchAddressbook() ) );
274 connect( _ui->mAvailableView, TQ_SIGNAL( doubleClicked( TQListViewItem *,
const TQPoint &,
int ) ),
275 TQ_SLOT( addSelectedContacts() ) );
277 connect( _ui->mFilterEdit, TQ_SIGNAL( textChanged(
const TQString &) ),
278 TQ_SLOT( filterChanged(
const TQString &) ) );
279 connect( _ui->mRemoveButton, TQ_SIGNAL( clicked() ), TQ_SLOT( removeSelectedContacts() ) );
280 connect( _ui->mSaveList, TQ_SIGNAL( clicked() ), TQ_SLOT( saveDistributionList() ) );
281 connect( _ui->mSelectedView, TQ_SIGNAL( doubleClicked( TQListViewItem *,
const TQPoint &,
int ) ),
282 TQ_SLOT( removeSelectedContacts() ) );
286void KWMailMergeTDEABCConfig::launchAddressbook()
const
288 kapp->startServiceByDesktopName(
"kaddressbook", TQString() );
293void KWMailMergeTDEABCConfig::removeContact( TQListViewItem* item )
295 TQStringList& categories = _usedCategories;
296 TQListViewItem* availableLists = _ui->mAvailableView->findItem(
297 i18n(
"Distribution Lists"), 0, TQt::ExactMatch );
298 if( item->depth() > 0 )
300 if( !item->text( -1 ).isEmpty() )
302 KWMailMergeTDEABCConfigListItem* rightItem =
303 static_cast<KWMailMergeTDEABCConfigListItem*
> ( item );
305 TQStringList entryCategories = rightItem->addressee().categories();
306 for ( TQStringList::Iterator itEntryCat = entryCategories.begin();
307 itEntryCat != entryCategories.end(); ++itEntryCat )
309 int i = categories.findIndex(*itEntryCat);
312 TQListViewItem* category =
new TQListViewItem( _ui->mAvailableView,
314 categories.append( *itEntryCat );
316 KWMailMergeTDEABCConfigListItem* leftItem =
new KWMailMergeTDEABCConfigListItem(
317 category, rightItem->addressee() );
321 KWMailMergeTDEABCConfigListItem* leftItem =
new
322 KWMailMergeTDEABCConfigListItem(
323 _ui->mAvailableView->findItem(
326 rightItem->addressee() );
329 if( entryCategories.isEmpty() )
331 TQString noCat = i18n(
"no category");
332 KWMailMergeTDEABCConfigListItem* leftItem =
new KWMailMergeTDEABCConfigListItem(
333 _ui->mAvailableView->findItem(
334 noCat, 0, TQt::ExactMatch),
335 rightItem->addressee() );
339 else if( item->parent()->text(0) == i18n(
"Distribution Lists") )
342 availableLists->insertItem( item );
347void KWMailMergeTDEABCConfig::removeSelectedContacts()
349 TQListViewItemIterator it( _ui->mSelectedView, TQListViewItemIterator::Selected );
351 while( it.current() )
353 kdDebug() <<
"removeSelectedContacts(): text: " << it.current()->text(-1) << endl;
354 removeContact( it.current() );
357 _ui->mAvailableView->selectAll(
false );
361void KWMailMergeTDEABCConfig::saveDistributionList()
363 TDEABC::DistributionListManager dlm( TDEABC::StdAddressBook::self() );
367 TQString listName = KInputDialog::getText( i18n(
"New Distribution List"),
368 i18n(
"Please enter name:"),
371 if ( !ok || listName.isEmpty() )
374 if ( dlm.list( listName ) )
376 KMessageBox::information( 0,
377 i18n(
"<qt>Distribution list with the given name <b>%1</b> "
378 "already exists. Please select a different name.</qt>" )
382 TDEABC::DistributionList *distList =
new TDEABC::DistributionList( &dlm, listName );
384 TQListViewItem* newListItem =
new TQListViewItem( _ui->mSelectedView->findItem(
385 i18n(
"Distribution Lists"),0 , TQt::ExactMatch), listName );
387 TQListViewItem* category = _ui->mSelectedView->firstChild();
390 if( category->text(0)==i18n(
"Single Entries") )
392 KWMailMergeTDEABCConfigListItem* item =
393 static_cast<KWMailMergeTDEABCConfigListItem*
> ( category->firstChild() );
397 distList->insertEntry( item->addressee() );
399 TDEABC::Addressee addr = item->addressee();
400 TQString formattedName = addr.formattedName();
401 TQListViewItem* newItem =
new TQListViewItem(
402 newListItem, item->addressee().formattedName() );
403 newItem->setEnabled(
false );
405 item =
static_cast<KWMailMergeTDEABCConfigListItem*
>( item->nextSibling() );
408 TQListViewItemIterator it ( category->firstChild() );
409 while( it.current() )
411 removeContact( it.current() );
415 category = category->nextSibling();
419 newListItem->setOpen(
true );
423void KWMailMergeTDEABCConfig::updateAvailable()
425 _ui->mAvailableView->clear();
426 _ui->mAvailableView->setRootIsDecorated(
true );
431 TQListViewItem* noCategory =
new TQListViewItem( _ui->mAvailableView,
432 i18n(
"no category") );
434 TQStringList& categories = _usedCategories ;
437 TDEABC::AddressBook *addressBook = TDEABC::StdAddressBook::self();
438 for( TDEABC::AddressBook::Iterator itAddr = addressBook->begin();
439 itAddr != addressBook->end(); ++itAddr )
442 TQStringList entryCategories = itAddr->categories();
443 for ( TQStringList::Iterator itCat = entryCategories.begin();
444 itCat != entryCategories.end(); ++itCat )
446 int i = categories.findIndex(*itCat);
451 TQListViewItem* category =
new TQListViewItem( _ui->mAvailableView, *itCat );
452 categories.append( *itCat );
454 KWMailMergeTDEABCConfigListItem* item =
new KWMailMergeTDEABCConfigListItem(
460 KWMailMergeTDEABCConfigListItem* item =
new KWMailMergeTDEABCConfigListItem(
461 _ui->mAvailableView->findItem(
462 *itCat, 0, TQt::ExactMatch),
468 if( entryCategories.isEmpty() )
470 KWMailMergeTDEABCConfigListItem* item =
new KWMailMergeTDEABCConfigListItem(
471 noCategory, *itAddr );
478 TDEABC::DistributionListManager dlm ( addressBook );
481 TQStringList distributionLists = dlm.listNames();
482 TQListViewItem* distributionListsItem =
new TQListViewItem( _ui->mAvailableView,
483 i18n(
"Distribution Lists") );
485 TQStringList::Iterator itDistributionLists;
487 for( itDistributionLists = distributionLists.begin();
488 itDistributionLists != distributionLists.end(); ++itDistributionLists )
490 TDEABC::DistributionList* list = dlm.list( *itDistributionLists );
492 TDEABC::DistributionList::Entry::List entries = list->entries();
494 TQListViewItem* listItem =
new TQListViewItem( distributionListsItem,
495 *itDistributionLists );
497 TDEABC::DistributionList::Entry::List::Iterator itList;
498 for ( itList = entries.begin(); itList != entries.end(); ++itList )
502 TQListViewItem* item =
new TQListViewItem(
503 listItem, (*itList).addressee.formattedName() );
504 item->setEnabled(
false );
512KWMailMergeTDEABCConfigListItem::KWMailMergeTDEABCConfigListItem( TQListView *parent,
513 const TDEABC::Addressee& addressEntry ) : TQListViewItem( parent )
515 setText( 0, addressEntry.formattedName() );
516 _addressEntry = addressEntry;
519KWMailMergeTDEABCConfigListItem::KWMailMergeTDEABCConfigListItem( TQListViewItem *parent,
520 const TDEABC::Addressee& addressEntry ) : TQListViewItem( parent )
522 setText( 0, addressEntry.formattedName() );
523 _addressEntry = addressEntry;
526KWMailMergeTDEABCConfigListItem::~KWMailMergeTDEABCConfigListItem()
529TDEABC::Addressee KWMailMergeTDEABCConfigListItem::addressee()
const
531 return _addressEntry;
534TQString KWMailMergeTDEABCConfigListItem::text(
int column )
const
538 return _addressEntry.uid();
542 return TQListViewItem::text( column );
546#include "KWMailMergeTDEABCConfig.moc"