summaryrefslogtreecommitdiffstats
path: root/kword/mailmerge/tdeabc/KWMailMergeTDEABCConfig.cpp
diff options
context:
space:
mode:
authorSlávek Banko <[email protected]>2013-09-03 19:57:37 +0200
committerSlávek Banko <[email protected]>2013-09-03 19:57:37 +0200
commit15ae7be824e362e8397532d7d60a3a93055caa41 (patch)
tree335b1112358991072b87137eb5ae8aa384b57c63 /kword/mailmerge/tdeabc/KWMailMergeTDEABCConfig.cpp
parent13402815bec5cb5702aedbd0a8119e40f106c2c1 (diff)
downloadkoffice-15ae7be824e362e8397532d7d60a3a93055caa41.tar.gz
koffice-15ae7be824e362e8397532d7d60a3a93055caa41.zip
Additional k => tde renaming and fixes
Diffstat (limited to 'kword/mailmerge/tdeabc/KWMailMergeTDEABCConfig.cpp')
-rw-r--r--kword/mailmerge/tdeabc/KWMailMergeTDEABCConfig.cpp546
1 files changed, 546 insertions, 0 deletions
diff --git a/kword/mailmerge/tdeabc/KWMailMergeTDEABCConfig.cpp b/kword/mailmerge/tdeabc/KWMailMergeTDEABCConfig.cpp
new file mode 100644
index 00000000..440e208a
--- /dev/null
+++ b/kword/mailmerge/tdeabc/KWMailMergeTDEABCConfig.cpp
@@ -0,0 +1,546 @@
+/*
+ This file is part of the KDE project
+ Copyright (C) 2004 Dirk Schmidt <[email protected]>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+
+#include <tqvbox.h>
+#include <tqlayout.h>
+#include <tqlineedit.h>
+
+#include <tdeapplication.h>
+#include <kdebug.h>
+#include <tdeglobal.h>
+#include <kinputdialog.h>
+#include <tdelocale.h>
+#include <tdemessagebox.h>
+#include <kpushbutton.h>
+#include <krun.h>
+#include <tdeabc/stdaddressbook.h>
+#include <tdeabc/distributionlist.h>
+
+#include "addresspicker.h"
+#include "KWMailMergeTDEABC.h"
+#include "KWMailMergeTDEABCConfig.h"
+
+
+KWMailMergeTDEABCConfig::KWMailMergeTDEABCConfig( TQWidget *parent, KWMailMergeTDEABC *db_)
+ :KDialogBase( Plain, i18n( "Mail Merge - Editor" ),
+ Ok | Cancel, Ok, parent, "", true)
+{
+ _db = db_;
+
+ (new TQVBoxLayout(plainPage()))->setAutoAdd(true);
+ setMainWidget( _ui=new AddressPickerUI( plainPage() ) );
+
+ updateAvailable();
+ initSelectedAddressees();
+ initSelectedLists();
+ initSlotSignalConnections();
+}
+
+
+KWMailMergeTDEABCConfig::~KWMailMergeTDEABCConfig()
+{
+ ;
+}
+
+
+void KWMailMergeTDEABCConfig::acceptSelection()
+{
+ _db->clear();
+
+ TQListViewItem* top = _ui->mSelectedView->firstChild();
+ while(top)
+ {
+ kdDebug() << "acceptSelection(): " << top->text(0) << endl;
+ if( top->text(0) == i18n("Distribution Lists") )
+ {
+ TQListViewItem* item = top->firstChild();
+ while(item)
+ {
+ kdDebug() << "acceptSelection(): " << item->text(0) << endl;
+ _db->addList( item->text(0) );
+ item = item->nextSibling();
+ }
+ }
+ else if( top->text(0) == i18n("Single Entries") )
+ {
+ TQListViewItem* item = top->firstChild();
+ while(item)
+ {
+ kdDebug() << "acceptSelection(): " << item->text(0) << endl;
+ _db->addEntry( item->text(-1) );
+ item = item->nextSibling();
+ }
+ }
+ top = top->nextSibling();
+ }
+
+}
+
+
+void KWMailMergeTDEABCConfig::addSelectedContacts()
+{
+ TQListViewItemIterator it( _ui->mAvailableView, TQListViewItemIterator::Selected );
+ TQListViewItem* selected = _ui->mSelectedView->findItem(
+ i18n("Single Entries"), 0, TQt::ExactMatch );
+ TQListViewItem* selectedLists = _ui->mSelectedView->findItem(
+ i18n("Distribution Lists"), 0, TQt::ExactMatch );
+ while ( it.current() )
+ {
+ if( it.current()->depth() > 0 )
+ {
+ TQString uid = it.current()->text( -1 );
+ kdDebug() << "addSelectedContacts(): uid :" << uid << endl;
+ if( !uid.isEmpty() )
+ {
+ KWMailMergeTDEABCConfigListItem *item =
+ static_cast<KWMailMergeTDEABCConfigListItem*> ( it.current() );
+ if( selected )
+ {
+ selected->insertItem( item );
+ selected->setOpen( true );
+ destroyAvailableClones( uid );
+ }
+ }
+ else if( it.current()->parent()->text(0) == i18n("Distribution Lists") )
+ {
+ if( selectedLists )
+ {
+ selectedLists->insertItem( it.current() );
+ selectedLists->setOpen( true );
+ }
+ }
+ }
+ ++it;
+ }
+ _ui->mSelectedView->selectAll( false );
+}
+
+
+void KWMailMergeTDEABCConfig::destroyAvailableClones( const TQString& uid )
+{
+ if( uid.isEmpty() )
+ return;
+
+ TQListViewItemIterator it( _ui->mAvailableView );
+
+ while ( it.current() )
+ {
+ if( it.current()->depth() > 0)
+ {
+ if( it.current()->text(-1)== uid )
+ {
+ delete it.current();
+ }
+ }
+ ++it;
+ }
+}
+
+
+void KWMailMergeTDEABCConfig::filterChanged( const TQString& txt )
+{
+ kdDebug() << "KWMailMergeTDEABCConfig::filterChanged( " << txt << " )" << endl;
+
+ bool showAll = txt.isEmpty();
+
+ TQListViewItem* category = _ui->mAvailableView->firstChild();
+ while(category)
+ {
+ if( category->text(0)!=i18n("Distribution Lists") )
+ {
+ TQListViewItem* item = category->firstChild();
+ while(item)
+ {
+ if(showAll)
+ {
+ item->setVisible( true );
+ }
+ else
+ {
+ item->setVisible( item->text(0).contains( txt, false ) );
+ }
+ item = item->nextSibling();
+ }
+ category->setOpen( !showAll );
+ }
+ else
+ {
+ category->setVisible( showAll );
+ }
+ category = category->nextSibling();
+ }
+}
+
+
+void KWMailMergeTDEABCConfig::initSelectedAddressees()
+{
+ TQStringList records = _db->singleRecords();
+
+ TQListViewItem* category = _ui->mAvailableView->firstChild();
+ TQListViewItem* selected = _ui->mSelectedView->findItem(
+ i18n("Single Entries"), 0, TQt::ExactMatch );
+ while ( category && (records.count()>0) )
+ {
+ if( category->text(0) != i18n("Distribution Lists") )
+ {
+ KWMailMergeTDEABCConfigListItem* item =
+ static_cast<KWMailMergeTDEABCConfigListItem*> ( category->firstChild() );
+ while( item && (records.count()>0) )
+ {
+ // Need some temporary item, because after selected->insertItem( item )
+ // the item->nextSibling() is not the one we want.
+ KWMailMergeTDEABCConfigListItem* nextItem =
+ static_cast<KWMailMergeTDEABCConfigListItem*> ( item->nextSibling() );
+
+ for( TQStringList::Iterator itRecords = records.begin();
+ itRecords != records.end(); ++itRecords )
+ {
+ TQString uid = *itRecords;
+ if( item->text(-1) == uid )
+ {
+ selected->insertItem( item );
+
+ // downsize records to speed up iterations
+ itRecords = records.remove( itRecords );
+ --itRecords;
+
+ destroyAvailableClones( uid );
+ }
+ }
+ item = nextItem;
+ }
+ }
+ category = category->nextSibling();
+ }
+}
+
+
+void KWMailMergeTDEABCConfig::initSelectedLists()
+{
+ TQStringList lists = _db->lists();
+
+ kdDebug() << "::initSelectedLists()" << lists.join(",") << endl;
+
+ TQListViewItem* l = _ui->mAvailableView->findItem(
+ i18n("Distribution Lists"), 0, TQt::ExactMatch );
+ TQListViewItem* selected = _ui->mSelectedView->findItem(
+ i18n("Distribution Lists"), 0, TQt::ExactMatch );
+
+ TQListViewItem* item = ( l->firstChild() );
+ while( item && (lists.count()>0) )
+ {
+ TQListViewItem* nextItem = item->nextSibling();
+
+ for( TQStringList::Iterator itLists = lists.begin();
+ itLists != lists.end(); ++itLists )
+ {
+ TQString id = *itLists;
+ if( item->text(0) == id )
+ {
+ selected->insertItem( item );
+ itLists = lists.remove( itLists );
+ --itLists;
+ }
+ }
+ item = nextItem;
+ }
+}
+
+
+void KWMailMergeTDEABCConfig::initSlotSignalConnections()
+{
+ connect( this, TQT_SIGNAL( okClicked() ), TQT_SLOT( acceptSelection() ) );
+ connect( _ui->mAddButton, TQT_SIGNAL( clicked() ), TQT_SLOT( addSelectedContacts() ) );
+ connect( _ui->mAddressBook, TQT_SIGNAL( clicked() ), TQT_SLOT( launchAddressbook() ) );
+
+ connect( _ui->mAvailableView, TQT_SIGNAL( doubleClicked( TQListViewItem *, const TQPoint &, int ) ),
+ TQT_SLOT( addSelectedContacts() ) );
+
+ connect( _ui->mFilterEdit, TQT_SIGNAL( textChanged(const TQString &) ),
+ TQT_SLOT( filterChanged(const TQString &) ) );
+ connect( _ui->mRemoveButton, TQT_SIGNAL( clicked() ), TQT_SLOT( removeSelectedContacts() ) );
+ connect( _ui->mSaveList, TQT_SIGNAL( clicked() ), TQT_SLOT( saveDistributionList() ) );
+ connect( _ui->mSelectedView, TQT_SIGNAL( doubleClicked( TQListViewItem *, const TQPoint &, int ) ),
+ TQT_SLOT( removeSelectedContacts() ) );
+}
+
+
+void KWMailMergeTDEABCConfig::launchAddressbook() const
+{
+ kapp->startServiceByDesktopName( "kaddressbook", TQString() );
+}
+
+
+
+void KWMailMergeTDEABCConfig::removeContact( TQListViewItem* item )
+{
+ TQStringList& categories = _usedCategories;
+ TQListViewItem* availableLists = _ui->mAvailableView->findItem(
+ i18n("Distribution Lists"), 0, TQt::ExactMatch );
+ if( item->depth() > 0 )
+ {
+ if( !item->text( -1 ).isEmpty() ) // remove selected single entry here
+ {
+ KWMailMergeTDEABCConfigListItem* rightItem =
+ static_cast<KWMailMergeTDEABCConfigListItem*> ( item );
+
+ TQStringList entryCategories = rightItem->addressee().categories();
+ for ( TQStringList::Iterator itEntryCat = entryCategories.begin();
+ itEntryCat != entryCategories.end(); ++itEntryCat )
+ {
+ int i = categories.findIndex(*itEntryCat);
+ if( i == -1 )
+ {
+ TQListViewItem* category = new TQListViewItem( _ui->mAvailableView,
+ *itEntryCat );
+ categories.append( *itEntryCat );
+
+ KWMailMergeTDEABCConfigListItem* leftItem = new KWMailMergeTDEABCConfigListItem(
+ category, rightItem->addressee() );
+ }
+ else
+ {
+ KWMailMergeTDEABCConfigListItem* leftItem = new
+ KWMailMergeTDEABCConfigListItem(
+ _ui->mAvailableView->findItem(
+ *itEntryCat, 0,
+ TQt::ExactMatch),
+ rightItem->addressee() );
+ }
+ }
+ if( entryCategories.isEmpty() )
+ {
+ TQString noCat = i18n("no category");
+ KWMailMergeTDEABCConfigListItem* leftItem = new KWMailMergeTDEABCConfigListItem(
+ _ui->mAvailableView->findItem(
+ noCat, 0, TQt::ExactMatch),
+ rightItem->addressee() );
+ }
+ delete item;
+ }
+ else if( item->parent()->text(0) == i18n("Distribution Lists") ) // remove a list
+ {
+ if( availableLists )
+ availableLists->insertItem( item );
+ }
+ }
+}
+
+void KWMailMergeTDEABCConfig::removeSelectedContacts()
+{
+ TQListViewItemIterator it( _ui->mSelectedView, TQListViewItemIterator::Selected );
+
+ while( it.current() )
+ {
+ kdDebug() << "removeSelectedContacts(): text: " << it.current()->text(-1) << endl;
+ removeContact( it.current() );
+ ++it;
+ }
+ _ui->mAvailableView->selectAll( false );
+}
+
+
+void KWMailMergeTDEABCConfig::saveDistributionList()
+{
+ TDEABC::DistributionListManager dlm( TDEABC::StdAddressBook::self() );
+ dlm.load();
+
+ bool ok = false;
+ TQString listName = KInputDialog::getText( i18n("New Distribution List"),
+ i18n("Please enter name:"),
+ TQString(), &ok,
+ this );
+ if ( !ok || listName.isEmpty() )
+ return;
+
+ if ( dlm.list( listName ) )
+ {
+ KMessageBox::information( 0,
+ i18n( "<qt>Distribution list with the given name <b>%1</b> "
+ "already exists. Please select a different name.</qt>" )
+ .arg( listName ) );
+ return;
+ }
+ TDEABC::DistributionList *distList = new TDEABC::DistributionList( &dlm, listName );
+
+ TQListViewItem* newListItem = new TQListViewItem( _ui->mSelectedView->findItem(
+ i18n("Distribution Lists"),0 , TQt::ExactMatch), listName );
+
+ TQListViewItem* category = _ui->mSelectedView->firstChild();
+ while(category)
+ {
+ if( category->text(0)==i18n("Single Entries") )
+ {
+ KWMailMergeTDEABCConfigListItem* item =
+ static_cast<KWMailMergeTDEABCConfigListItem*> ( category->firstChild() );
+
+ while(item)
+ {
+ distList->insertEntry( item->addressee() );
+
+ TDEABC::Addressee addr = item->addressee();
+ TQString formattedName = addr.formattedName();
+ TQListViewItem* newItem = new TQListViewItem(
+ newListItem, item->addressee().formattedName() );
+ newItem->setEnabled( false );
+
+ item = static_cast<KWMailMergeTDEABCConfigListItem*>( item->nextSibling() );
+ }
+
+ TQListViewItemIterator it ( category->firstChild() );
+ while( it.current() )
+ {
+ removeContact( it.current() );
+ ++it;
+ }
+ }
+ category = category->nextSibling();
+ }
+
+ dlm.save();
+ newListItem->setOpen( true );
+}
+
+
+void KWMailMergeTDEABCConfig::updateAvailable()
+{
+ _ui->mAvailableView->clear();
+ _ui->mAvailableView->setRootIsDecorated( true );
+
+ //
+ // First append the addressees.
+ //
+ TQListViewItem* noCategory = new TQListViewItem( _ui->mAvailableView,
+ i18n("no category") );
+
+ TQStringList& categories = _usedCategories ;
+ categories.clear();
+
+ TDEABC::AddressBook *addressBook = TDEABC::StdAddressBook::self();
+ for( TDEABC::AddressBook::Iterator itAddr = addressBook->begin();
+ itAddr != addressBook->end(); ++itAddr )
+ {
+
+ TQStringList entryCategories = itAddr->categories();
+ for ( TQStringList::Iterator itCat = entryCategories.begin();
+ itCat != entryCategories.end(); ++itCat )
+ {
+ int i = categories.findIndex(*itCat);
+
+ // Create category, if not yet in listview and append item to it.
+ if( i == -1 )
+ {
+ TQListViewItem* category = new TQListViewItem( _ui->mAvailableView, *itCat );
+ categories.append( *itCat );
+
+ KWMailMergeTDEABCConfigListItem* item = new KWMailMergeTDEABCConfigListItem(
+ category, *itAddr );
+ }
+ // Append item to existing category in listview.
+ else
+ {
+ KWMailMergeTDEABCConfigListItem* item = new KWMailMergeTDEABCConfigListItem(
+ _ui->mAvailableView->findItem(
+ *itCat, 0, TQt::ExactMatch),
+ *itAddr );
+ }
+
+ }
+ // If Addressee does not belong to any category, append it to "no category".
+ if( entryCategories.isEmpty() )
+ {
+ KWMailMergeTDEABCConfigListItem* item = new KWMailMergeTDEABCConfigListItem(
+ noCategory, *itAddr );
+ }
+ }
+
+ //
+ // Now append the distribution lists
+ //
+ TDEABC::DistributionListManager dlm ( addressBook );
+ dlm.load();
+
+ TQStringList distributionLists = dlm.listNames();
+ TQListViewItem* distributionListsItem = new TQListViewItem( _ui->mAvailableView,
+ i18n("Distribution Lists") );
+
+ TQStringList::Iterator itDistributionLists;
+
+ for( itDistributionLists = distributionLists.begin();
+ itDistributionLists != distributionLists.end(); ++itDistributionLists )
+ {
+ TDEABC::DistributionList* list = dlm.list( *itDistributionLists );
+
+ TDEABC::DistributionList::Entry::List entries = list->entries();
+
+ TQListViewItem* listItem = new TQListViewItem( distributionListsItem,
+ *itDistributionLists );
+
+ TDEABC::DistributionList::Entry::List::Iterator itList;
+ for ( itList = entries.begin(); itList != entries.end(); ++itList )
+ {
+ // Create a normal TQListViewItem and disable it, because this is not a
+ // distribution-list-editor. KAddressbook should be used instead.
+ TQListViewItem* item = new TQListViewItem(
+ listItem, (*itList).addressee.formattedName() );
+ item->setEnabled( false );
+ }
+
+ }
+}
+
+
+
+KWMailMergeTDEABCConfigListItem::KWMailMergeTDEABCConfigListItem( TQListView *parent,
+ const TDEABC::Addressee& addressEntry ) : TQListViewItem( parent )
+{
+ setText( 0, addressEntry.formattedName() );
+ _addressEntry = addressEntry;
+}
+
+KWMailMergeTDEABCConfigListItem::KWMailMergeTDEABCConfigListItem( TQListViewItem *parent,
+ const TDEABC::Addressee& addressEntry ) : TQListViewItem( parent )
+{
+ setText( 0, addressEntry.formattedName() );
+ _addressEntry = addressEntry;
+}
+
+KWMailMergeTDEABCConfigListItem::~KWMailMergeTDEABCConfigListItem()
+{}
+
+TDEABC::Addressee KWMailMergeTDEABCConfigListItem::addressee() const
+{
+ return _addressEntry;
+}
+
+TQString KWMailMergeTDEABCConfigListItem::text( int column ) const
+{
+ if( column == -1 )
+ {
+ return _addressEntry.uid();
+ }
+ else
+ {
+ return TQListViewItem::text( column );
+ }
+}
+
+#include "KWMailMergeTDEABCConfig.moc"