summaryrefslogtreecommitdiffstats
path: root/kdeprint/kdeprintfax/faxab.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kdeprint/kdeprintfax/faxab.cpp')
-rw-r--r--kdeprint/kdeprintfax/faxab.cpp212
1 files changed, 212 insertions, 0 deletions
diff --git a/kdeprint/kdeprintfax/faxab.cpp b/kdeprint/kdeprintfax/faxab.cpp
new file mode 100644
index 000000000..28ba4e5c8
--- /dev/null
+++ b/kdeprint/kdeprintfax/faxab.cpp
@@ -0,0 +1,212 @@
+/*
+ * kdeprintfax - a small fax utility
+ * Copyright (C) 2001 Michael Goffioul
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "faxab.h"
+
+#include <qlabel.h>
+#include <qlayout.h>
+#include <kpushbutton.h>
+#include <klistview.h>
+#include <qheader.h>
+#include <klocale.h>
+#include <kabc/stdaddressbook.h>
+#include <kmessagebox.h>
+#include <kiconloader.h>
+#include <krun.h>
+#include <kstdguiitem.h>
+#include <kglobal.h>
+#include <kconfig.h>
+
+FaxAB::FaxAB(QWidget *parent, const char *name)
+: KDialog(parent, name, true)
+{
+ m_list = new KListView( this );
+ m_list->addColumn( i18n( "Name" ) );
+ m_list->addColumn( i18n( "Fax Number" ) );
+ m_list->header()->setStretchEnabled( true, 0 );
+ QLabel *m_listlabel = new QLabel(i18n("Entries:"), this);
+ m_ok = new KPushButton(KStdGuiItem::ok(), this);
+ QPushButton *m_cancel = new KPushButton(KStdGuiItem::cancel(), this);
+ QPushButton *m_ab = new KPushButton(KGuiItem(i18n("&Edit Addressbook"), "contents"), this);
+ connect(m_ok, SIGNAL(clicked()), SLOT(accept()));
+ connect(m_cancel, SIGNAL(clicked()), SLOT(reject()));
+ connect(m_ab, SIGNAL(clicked()), SLOT(slotEditAb()));
+ m_ok->setDefault(true);
+
+ QVBoxLayout *l0 = new QVBoxLayout(this, 10, 10);
+ l0->addWidget( m_listlabel );
+ l0->addWidget( m_list );
+ QHBoxLayout *l2 = new QHBoxLayout(0, 0, 10);
+ l0->addLayout(l2, 0);
+ l2->addWidget(m_ab, 0);
+ l2->addStretch(1);
+ l2->addWidget(m_ok, 0);
+ l2->addWidget(m_cancel, 0);
+
+ KConfig *conf = KGlobal::config();
+ conf->setGroup( "General" );
+ QSize defsize( 400, 200 );
+ resize( conf->readSizeEntry( "ABSize", &defsize ) );
+
+ initialize();
+ connect(KABC::StdAddressBook::self(), SIGNAL(addressBookChanged(AddressBook*)), SLOT(slotAbChanged(AddressBook*)));
+}
+
+FaxAB::~FaxAB()
+{
+ KConfig *conf = KGlobal::config();
+ conf->setGroup( "General" );
+ conf->writeEntry( "ABSize", size() );
+}
+
+void FaxAB::initialize()
+{
+ m_entries.clear();
+ m_list->clear();
+
+ KABC::AddressBook *bk = KABC::StdAddressBook::self();
+ for (KABC::AddressBook::Iterator it=bk->begin(); it!=bk->end(); ++it)
+ {
+ KABC::PhoneNumber::List numbers = (*it).phoneNumbers();
+ KABC::PhoneNumber::List faxNumbers;
+ for (QValueList<KABC::PhoneNumber>::Iterator nit=numbers.begin(); nit!=numbers.end(); ++nit)
+ {
+ if (((*nit).type() & KABC::PhoneNumber::Fax) && !(*nit).number().isEmpty())
+ faxNumbers << ( *nit );
+ }
+ if (faxNumbers.count() > 0)
+ {
+ for ( KABC::PhoneNumber::List::ConstIterator nit = faxNumbers.begin(); nit != faxNumbers.end(); ++nit )
+ {
+ FaxABEntry entry;
+ entry.m_number = ( *nit );
+ entry.m_enterprise = ( *it ).organization();
+ if ( !( *it ).formattedName().isEmpty() )
+ entry.m_name = ( *it ).formattedName();
+ else
+ {
+ QString key = ( *it ).familyName();
+ if ( !( *it ).givenName().isEmpty() )
+ {
+ if ( !key.isEmpty() )
+ key.append( " " );
+ key.append( ( *it ).givenName() );
+ }
+ entry.m_name = key;
+ }
+ entry.m_name += ( " (" + ( *nit ).typeLabel() + ")" );
+ m_entries[ entry.m_name ] = entry;
+ }
+ }
+ }
+
+ if (m_entries.count() > 0)
+ {
+ for (QMap<QString,FaxABEntry>::ConstIterator it=m_entries.begin(); it!=m_entries.end(); ++it)
+ {
+ QCheckListItem *item = new QCheckListItem( m_list, it.key(), QCheckListItem::CheckBox );
+ item->setText( 1, ( *it ).m_number.number() );
+ item->setText( 2, ( *it ).m_enterprise );
+ }
+ m_list->sort();
+ m_ok->setEnabled(true);
+ }
+ else
+ m_ok->setDisabled(true);
+}
+
+void FaxAB::slotEditAb()
+{
+ KRun::runCommand("kaddressbook");
+}
+
+void FaxAB::slotAbChanged(AddressBook*)
+{
+ initialize();
+}
+
+bool FaxAB::getEntry(QStringList& number, QStringList& name, QStringList& enterprise, QWidget *parent)
+{
+ FaxAB kab(parent);
+ if (!kab.isValid())
+ {
+ KMessageBox::error(parent, i18n("No fax number found in your address book."));
+ return false;
+ }
+ if (kab.exec())
+ {
+ QListViewItemIterator it( kab.m_list, QListViewItemIterator::Checked );
+ while ( it.current() )
+ {
+ number << it.current()->text( 1 );
+ name << it.current()->text( 0 );
+ enterprise << it.current()->text( 2 );
+ ++it;
+ }
+ /*
+ number = kab.m_fax->currentText();
+ name = kab.m_name->currentText();
+ if (kab.m_entries.contains(name))
+ {
+ enterprise = kab.m_entries[name][0];
+ }
+ */
+ return true;
+ }
+
+ return false;
+}
+
+bool FaxAB::getEntryByNumber(const QString& number, QString& name, QString& enterprise)
+{
+ KABC::AddressBook *bk = KABC::StdAddressBook::self();
+ for (KABC::AddressBook::Iterator it=bk->begin(); it!=bk->end(); ++it)
+ {
+ KABC::PhoneNumber::List numbers = (*it).phoneNumbers();
+ QStringList filteredNumbers;
+ for (QValueList<KABC::PhoneNumber>::Iterator nit=numbers.begin(); nit!=numbers.end(); ++nit)
+ {
+ if (((*nit).type() & KABC::PhoneNumber::Fax) )
+ {
+ QString strippedNumber;
+ for (uint i = 0; i < (*nit).number().length(); ++i)
+ if ((*nit).number()[i].isDigit() || ( *nit ).number()[ i ] == '+')
+ strippedNumber.append((*nit).number()[i]);
+
+ if ( strippedNumber == number)
+ {
+ enterprise = (*it).organization();
+ name = (*it).formattedName();
+ return true;
+ }
+ }
+ }
+ }
+
+ return false;
+}
+
+bool FaxAB::isValid()
+{
+ return true;
+ //return (m_name->count() > 0);
+}
+
+#include "faxab.moc"