diff options
Diffstat (limited to 'kpilot/kpilot/addressWidget.cc')
-rw-r--r-- | kpilot/kpilot/addressWidget.cc | 733 |
1 files changed, 0 insertions, 733 deletions
diff --git a/kpilot/kpilot/addressWidget.cc b/kpilot/kpilot/addressWidget.cc deleted file mode 100644 index e72b33ab..00000000 --- a/kpilot/kpilot/addressWidget.cc +++ /dev/null @@ -1,733 +0,0 @@ -/* KPilot -** -** Copyright (C) 1998-2001 by Dan Pilone -** Copyright (C) 2003 Reinhold Kainhofer <reinhold@kainhofer.com> -** Copyright (C) 2004 by Adriaan de Groot -** -** This file defines the addressWidget, that part of KPilot that -** displays address records from the Pilot. -*/ - -/* -** 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 in a file called COPYING; if not, write to -** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, -** MA 02110-1301, USA. -*/ - -/* -** Bug reports and questions can be sent to kde-pim@kde.org -*/ - - -#ifndef _KPILOT_OPTIONS_H -#include "options.h" -#endif - -#include <iostream> -#include <cstring> -#include <cstdlib> - -#include <tqptrlist.h> -#include <tqlistbox.h> -#include <tqfile.h> -#include <tqpushbutton.h> -#include <tqtextstream.h> -#include <tqlayout.h> -#include <tqlabel.h> -#include <tqmultilineedit.h> -#include <tqcombobox.h> -#include <tqwhatsthis.h> -#include <tqtextview.h> -#include <tqtextcodec.h> -#include <tqregexp.h> - -#include <kapplication.h> -#include <kmessagebox.h> -#include <kdebug.h> -#include <kfiledialog.h> - -#include "kpilotConfig.h" -#include "listItems.h" -#include "addressEditor.h" -#include "pilotLocalDatabase.h" - -#include "addressWidget.moc" - - -AddressWidget::AddressWidget(TQWidget * parent, - const TQString & path) : - PilotComponent(parent, "component_address", path), - fAddrInfo(0L), - fAddressAppInfo(0L), - fPendingAddresses(0) -{ - FUNCTIONSETUP; - - setupWidget(); - fAddressList.setAutoDelete(true); -} - -AddressWidget::~AddressWidget() -{ - FUNCTIONSETUP; -} - -int AddressWidget::getAllAddresses(PilotDatabase * addressDB) -{ - FUNCTIONSETUP; - - int currentRecord = 0; - PilotRecord *pilotRec; - PilotAddress *address; - - -#ifdef DEBUG - DEBUGKPILOT << fname << ": Reading AddressDB..." << endl; -#endif - - while ((pilotRec = addressDB->readRecordByIndex(currentRecord)) != 0L) - { - if (!(pilotRec->isDeleted()) && - (!(pilotRec->isSecret()) || KPilotSettings::showSecrets())) - { - address = new PilotAddress(pilotRec); - if (address == 0L) - { - WARNINGKPILOT << "Couldn't allocate record " - << currentRecord++ - << endl; - break; - } - fAddressList.append(address); - } - delete pilotRec; - - currentRecord++; - } - -#ifdef DEBUG - DEBUGKPILOT << fname - << ": Total " << currentRecord << " records" << endl; -#endif - - return currentRecord; -} - -void AddressWidget::showComponent() -{ - FUNCTIONSETUP; - if ( fPendingAddresses>0 ) return; - -#ifdef DEBUG - DEBUGKPILOT << fname - << ": Reading from directory " << dbPath() << endl; -#endif - - PilotDatabase *addressDB = - new PilotLocalDatabase(dbPath(), CSL1("AddressDB")); - - fAddressList.clear(); - - if (addressDB->isOpen()) - { - KPILOT_DELETE(fAddressAppInfo); - fAddressAppInfo = new PilotAddressInfo(addressDB); - populateCategories(fCatList, fAddressAppInfo->categoryInfo()); - getAllAddresses(addressDB); - - } - else - { - populateCategories(fCatList, 0L); - WARNINGKPILOT << "Could not open local AddressDB" << endl; - } - - KPILOT_DELETE( addressDB ); - - updateWidget(); -} - -void AddressWidget::hideComponent() -{ - FUNCTIONSETUP; - if (fPendingAddresses==0 ) - { - fAddressList.clear(); - fListBox->clear(); - - updateWidget(); - } -} - -/* virtual */ bool AddressWidget::preHotSync(TQString &s) -{ - FUNCTIONSETUP; - - if ( fPendingAddresses ) - { -#ifdef DEBUG - DEBUGKPILOT << fname - << ": fPendingAddress=" - << fPendingAddresses - << endl; -#endif - -#if KDE_VERSION<220 - s = i18n("There are still %1 address editing windows open.") - .arg(TQString::number(fPendingAddresses)); -#else - s = i18n("There is still an address editing window open.", - "There are still %n address editing windows open.", - fPendingAddresses); -#endif - return false; - } - - return true; -} - -void AddressWidget::postHotSync() -{ - FUNCTIONSETUP; - - if ( shown ) - { - fAddressList.clear(); - showComponent(); - } -} - - -void AddressWidget::setupWidget() -{ - FUNCTIONSETUP; - - TQLabel *label; - TQGridLayout *grid = new TQGridLayout(this, 6, 4, SPACING); - - fCatList = new TQComboBox(this); - grid->addWidget(fCatList, 0, 1); - connect(fCatList, TQT_SIGNAL(activated(int)), - this, TQT_SLOT(slotSetCategory(int))); - TQWhatsThis::add(fCatList, - i18n("<qt>Select the category of addresses to display here.</qt>")); - - label = new TQLabel(i18n("Category:"), this); - label->setBuddy(fCatList); - grid->addWidget(label, 0, 0); - - fListBox = new TQListBox(this); - grid->addMultiCellWidget(fListBox, 1, 1, 0, 1); - connect(fListBox, TQT_SIGNAL(highlighted(int)), - this, TQT_SLOT(slotShowAddress(int))); - connect(fListBox, TQT_SIGNAL(selected(int)), - this, TQT_SLOT(slotEditRecord())); - TQWhatsThis::add(fListBox, - i18n("<qt>This list displays all the addresses " - "in the selected category. Click on " - "one to display it to the right.</qt>")); - - label = new TQLabel(i18n("Address info:"), this); - grid->addWidget(label, 0, 2); - - // address info text view - fAddrInfo = new TQTextView(this); - grid->addMultiCellWidget(fAddrInfo, 1, 4, 2, 2); - - TQPushButton *button; - TQString wt; - - fEditButton = new TQPushButton(i18n("Edit Record..."), this); - grid->addWidget(fEditButton, 2, 0); - connect(fEditButton, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotEditRecord())); - wt = KPilotSettings::internalEditors() ? - i18n("<qt>You can edit an address when it is selected.</qt>") : - i18n("<qt><i>Editing is disabled by the 'internal editors' setting.</i></qt>"); - TQWhatsThis::add(fEditButton,wt); - - button = new TQPushButton(i18n("New Record..."), this); - grid->addWidget(button, 2, 1); - connect(button, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotCreateNewRecord())); - wt = KPilotSettings::internalEditors() ? - i18n("<qt>Add a new address to the address book.</qt>") : - i18n("<qt><i>Adding is disabled by the 'internal editors' setting.</i></qt>") ; - TQWhatsThis::add(button, wt); - button->setEnabled(KPilotSettings::internalEditors()); - - - fDeleteButton = new TQPushButton(i18n("Delete Record"), this); - grid->addWidget(fDeleteButton, 3, 0); - connect(fDeleteButton, TQT_SIGNAL(clicked()), - this, TQT_SLOT(slotDeleteRecord())); - wt = KPilotSettings::internalEditors() ? - i18n("<qt>Delete the selected address from the address book.</qt>") : - i18n("<qt><i>Deleting is disabled by the 'internal editors' setting.</i></qt>") ; - - button = new TQPushButton(i18n("Export addresses to file","Export..."), this); - grid->addWidget(button, 3,1); - connect(button, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotExport())); - TQWhatsThis::add(button, - i18n("<qt>Export all addresses in the selected category to CSV format.</qt>") ); - - TQWhatsThis::add(fDeleteButton,wt); -} - -void AddressWidget::updateWidget() -{ - FUNCTIONSETUP; - - if( !fAddressAppInfo ) - return; - int addressDisplayMode = KPilotSettings::addressDisplayMode(); - - int listIndex = 0; - -#ifdef DEBUG - DEBUGKPILOT << fname - << ": Display Mode=" << addressDisplayMode << endl; -#endif - - int currentCatID = findSelectedCategory(fCatList, - fAddressAppInfo->categoryInfo()); - - fListBox->clear(); - fAddressList.first(); - -#ifdef DEBUG - DEBUGKPILOT << fname << ": Adding records..." << endl; -#endif - - while (fAddressList.current()) - { - if ((currentCatID == -1) || - (fAddressList.current()->category() == currentCatID)) - { - TQString title = createTitle(fAddressList.current(), - addressDisplayMode); - - if (!title.isEmpty()) - { - title.remove(TQRegExp(CSL1("\n.*"))); - PilotListItem *p = new PilotListItem(title, - listIndex, - fAddressList.current()); - - fListBox->insertItem(p); - } - } - listIndex++; - fAddressList.next(); - } - - fListBox->sort(); -#ifdef DEBUG - DEBUGKPILOT << fname << ": " << listIndex << " records" << endl; -#endif - - slotUpdateButtons(); -} - - - -TQString AddressWidget::createTitle(PilotAddress * address, int displayMode) -{ - // FUNCTIONSETUP; - - TQString title; - - switch (displayMode) - { - case 1: - if (!address->getField(entryCompany).isEmpty()) - { - title.append(address->getField(entryCompany)); - } - if (!address->getField(entryLastname).isEmpty()) - { - if (!title.isEmpty()) - { - title.append( CSL1(", ")); - } - - title.append(address->getField(entryLastname)); - } - break; - case 0: - default: - if (!address->getField(entryLastname).isEmpty()) - { - title.append(address->getField(entryLastname)); - } - - if (!address->getField(entryFirstname).isEmpty()) - { - if (!title.isEmpty()) - { - title.append( CSL1(", ")); - } - title.append(address->getField(entryFirstname)); - } - break; - } - - if (title.isEmpty()) // One last try - { - if (!fAddressList.current()->getField(entryCompany).isEmpty()) - { - title.append(fAddressList.current()-> - getField(entryCompany)); - } - if (title.isEmpty()) - { - title = i18n("[unknown]"); - } - } - - return title; -} - - -/* slot */ void AddressWidget::slotUpdateButtons() -{ - FUNCTIONSETUP; - - bool enabled = (fListBox->currentItem() != -1); - - enabled &= KPilotSettings::internalEditors(); - fEditButton->setEnabled(enabled); - fDeleteButton->setEnabled(enabled); -} - -void AddressWidget::slotSetCategory(int) -{ - FUNCTIONSETUP; - - updateWidget(); -} - -void AddressWidget::slotEditRecord() -{ - FUNCTIONSETUP; - if ( !shown ) return; - - int item = fListBox->currentItem(); - - if (item == -1) - return; - - PilotListItem *p = (PilotListItem *) fListBox->item(item); - PilotAddress *selectedRecord = (PilotAddress *) p->rec(); - - if (selectedRecord->id() == 0) - { - KMessageBox::error(0L, - i18n("Cannot edit new records until " - "HotSynced with Pilot."), - i18n("HotSync Required")); - return; - } - - AddressEditor *editor = new AddressEditor(selectedRecord, - fAddressAppInfo, this); - - connect(editor, TQT_SIGNAL(recordChangeComplete(PilotAddress *)), - this, TQT_SLOT(slotUpdateRecord(PilotAddress *))); - connect(editor, TQT_SIGNAL(cancelClicked()), - this, TQT_SLOT(slotEditCancelled())); - editor->show(); - - fPendingAddresses++; -} - -void AddressWidget::slotCreateNewRecord() -{ - FUNCTIONSETUP; - if ( !shown ) return; - - // Response to bug 18072: Don't even try to - // add records to an empty or unopened database, - // since we don't have the DBInfo stuff to deal with it. - // - // - PilotDatabase *myDB = new PilotLocalDatabase(dbPath(), CSL1("AddressDB")); - - if (!myDB || !myDB->isOpen()) - { -#ifdef DEBUG - DEBUGKPILOT << fname - << ": Tried to open " - << dbPath() - << "/AddressDB" - << " and got pointer @" - << (long) myDB - << " with status " - << ( myDB ? myDB->isOpen() : false ) - << endl; -#endif - - KMessageBox::sorry(this, - i18n("You cannot add addresses to the address book " - "until you have done a HotSync at least once " - "to retrieve the database layout from your Pilot."), - i18n("Cannot Add New Address")); - - if (myDB) - KPILOT_DELETE( myDB ); - - return; - } - - AddressEditor *editor = new AddressEditor(0L, - fAddressAppInfo, this); - - connect(editor, TQT_SIGNAL(recordChangeComplete(PilotAddress *)), - this, TQT_SLOT(slotAddRecord(PilotAddress *))); - connect(editor, TQT_SIGNAL(cancelClicked()), - this, TQT_SLOT(slotEditCancelled())); - editor->show(); - - fPendingAddresses++; -} - -void AddressWidget::slotAddRecord(PilotAddress * address) -{ - FUNCTIONSETUP; - if ( !shown && fPendingAddresses==0 ) return; - - int currentCatID = findSelectedCategory(fCatList, - fAddressAppInfo->categoryInfo(), true); - - - address->PilotRecordBase::setCategory(currentCatID); - fAddressList.append(address); - writeAddress(address); - // TODO: Just add the new record to the lists - updateWidget(); - - // k holds the item number of the address just added. - // - // - int k = fListBox->count() - 1; - - fListBox->setCurrentItem(k); // Show the newest one - fListBox->setBottomItem(k); - - fPendingAddresses--; - if ( !shown && fPendingAddresses==0 ) hideComponent(); -} - -void AddressWidget::slotUpdateRecord(PilotAddress * address) -{ - FUNCTIONSETUP; - if ( !shown && fPendingAddresses==0 ) return; - - writeAddress(address); - int currentRecord = fListBox->currentItem(); - - // TODO: Just change the record - updateWidget(); - fListBox->setCurrentItem(currentRecord); - - emit(recordChanged(address)); - - fPendingAddresses--; - if ( !shown && fPendingAddresses==0 ) hideComponent(); -} - -void AddressWidget::slotEditCancelled() -{ - FUNCTIONSETUP; - - fPendingAddresses--; - if ( !shown && fPendingAddresses==0 ) hideComponent(); -} - -void AddressWidget::slotDeleteRecord() -{ - FUNCTIONSETUP; - if ( !shown ) return; - - int item = fListBox->currentItem(); - - if (item == -1) - return; - - PilotListItem *p = (PilotListItem *) fListBox->item(item); - PilotAddress *selectedRecord = (PilotAddress *) p->rec(); - - if (selectedRecord->id() == 0) - { - KMessageBox::error(this, - i18n("New records cannot be deleted until " - "HotSynced with pilot."), - i18n("HotSync Required")); - return; - } - - if (KMessageBox::questionYesNo(this, - i18n("Delete currently selected record?"), - i18n("Delete Record?"), KStdGuiItem::del(), KStdGuiItem::cancel()) == KMessageBox::No) - return; - - selectedRecord->setDeleted( true ); - writeAddress(selectedRecord); - emit(recordChanged(selectedRecord)); - showComponent(); -} - - - -void AddressWidget::slotShowAddress(int which) -{ - FUNCTIONSETUP; - if (!shown) return; - - PilotListItem *p = (PilotListItem *) fListBox->item(which); - PilotAddress *addr = (PilotAddress *) p->rec(); - -#ifdef DEBUG - DEBUGKPILOT << fname - << ": Showing " - << addr->getField(entryLastname) - << " " - << addr->getField(entryFirstname) - << endl; -#endif - - TQString text(CSL1("<qt>")); - text += addr->getTextRepresentation(fAddressAppInfo,Qt::RichText); - text += CSL1("</qt>\n"); - fAddrInfo->setText(text); - - slotUpdateButtons(); -} - - - -void AddressWidget::writeAddress(PilotAddress * which, - PilotDatabase * addressDB) -{ - FUNCTIONSETUP; - - // Open a database (myDB) only if needed, - // i.e. only if the passed-in addressDB - // isn't valid. - // - // - PilotDatabase *myDB = addressDB; - bool usemyDB = false; - - if (myDB == 0L || !myDB->isOpen()) - { - myDB = new PilotLocalDatabase(dbPath(), CSL1("AddressDB")); - usemyDB = true; - } - - // Still no valid address database... - // - // - if (!myDB->isOpen()) - { -#ifdef DEBUG - DEBUGKPILOT << fname << ": Address database is not open" << - endl; -#endif - return; - } - - - // Do the actual work. - PilotRecord *pilotRec = which->pack(); - - myDB->writeRecord(pilotRec); - markDBDirty(CSL1("AddressDB")); - delete pilotRec; - - // Clean up in the case that we allocated our own DB. - // - // - if (usemyDB) - { - KPILOT_DELETE( myDB ); - } -} - -#define plu_quiet 1 -#include "pilot-addresses.c" - -void AddressWidget::slotExport() -{ - FUNCTIONSETUP; - if( !fAddressAppInfo ) return; - int currentCatID = findSelectedCategory(fCatList, - fAddressAppInfo->categoryInfo()); - - TQString prompt = (currentCatID==-1) ? - i18n("Export All Addresses") : - i18n("Export Address Category %1").arg(fAddressAppInfo->categoryName(currentCatID)) ; - - - TQString saveFile = KFileDialog::getSaveFileName( - TQString::null, - CSL1("*.csv|Comma Separated Values"), - this, - prompt - ); - if (saveFile.isEmpty()) - { -#ifdef DEBUG - DEBUGKPILOT << fname << ": No save file selected." << endl; -#endif - return; - } - if (TQFile::exists(saveFile) && - KMessageBox::warningContinueCancel(this, - i18n("The file <i>%1</i> exists. Overwrite?").arg(saveFile), - i18n("Overwrite File?"), - i18n("Overwrite"))!=KMessageBox::Continue) - { -#ifdef DEBUG - DEBUGKPILOT << fname << ": Overwrite file canceled." << endl; -#endif - return; - } - - FILE *f = fopen(TQFile::encodeName(saveFile),"w"); - if (!f) - { - KMessageBox::sorry(this, - i18n("The file <i>%1</i> could not be opened for writing.").arg(saveFile)); - return; - } - fAddressList.first(); - -#ifdef DEBUG - DEBUGKPILOT << fname << ": Adding records..." << endl; -#endif - - while (fAddressList.current()) - { - const PilotAddress *a = fAddressList.current(); - if ((currentCatID == -1) || - (a->category() == currentCatID)) - { - write_record_CSV(f, fAddressAppInfo->info(), a->address(), - a->attributes(), a->category(), 0); - } - fAddressList.next(); - } - - fclose(f); -} - |