diff options
Diffstat (limited to 'kpilot/kpilot/dbviewerWidget.cc')
-rw-r--r-- | kpilot/kpilot/dbviewerWidget.cc | 440 |
1 files changed, 0 insertions, 440 deletions
diff --git a/kpilot/kpilot/dbviewerWidget.cc b/kpilot/kpilot/dbviewerWidget.cc deleted file mode 100644 index b5f04632..00000000 --- a/kpilot/kpilot/dbviewerWidget.cc +++ /dev/null @@ -1,440 +0,0 @@ -/* dbViewerWidget.cc KPilot -** -** Copyright (C) 2003 by Dan Pilone. -** Copyright (C) 2003 Reinhold Kainhofer <reinhold@kainhofer.com> -** Written 2003 by Reinhold Kainhofer and Adriaan de Groot -** -** This is the generic DB viewer widget. -*/ - -/* -** 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 -*/ - - -#include "options.h" - -#include <unistd.h> -#include <stdio.h> - -#include <pi-file.h> -#include <pi-dlp.h> - -#include <tqlayout.h> -#include <tqdir.h> -#include <tqregexp.h> -#include <tqlistview.h> - -#include <klistbox.h> -#include <ktextedit.h> -#include <kpushbutton.h> -#include <kcombobox.h> -#include <kmessagebox.h> - -#include "listCat.h" -#include "listItems.h" - -#include "dbviewerWidget.h" -#include "pilotLocalDatabase.h" -#include "pilotDatabase.h" -#include "pilotRecord.h" -#include "dbFlagsEditor.h" -#include "dbRecordEditor.h" -#include "dbAppInfoEditor.h" -#include "kpilotConfig.h" - - -#include "dbviewerWidget.moc" - - -GenericDBWidget::GenericDBWidget(TQWidget *parent, const TQString &dbpath) : - PilotComponent(parent,"component_generic",dbpath), fDB(0L) -{ - FUNCTIONSETUP; - setupWidget(); - fRecList.setAutoDelete(true); -} - - -void GenericDBWidget::setupWidget() -{ - TQGridLayout *g = new TQGridLayout( this, 1, 1, SPACING); - - fDBList = new KListBox( this ); - g->addWidget( fDBList, 0, 0 ); - fDBType = new KComboBox( FALSE, this ); - g->addWidget( fDBType, 1, 0 ); - fDBType->insertItem( i18n( "All Databases" ) ); - fDBType->insertItem( i18n( "Only Applications (*.prc)" ) ); - fDBType->insertItem( i18n( "Only Databases (*.pdb)" ) ); - - TQGridLayout *g1 = new TQGridLayout( 0, 1, 1); - fDBInfo = new KTextEdit( this ); - fDBInfo->setSizePolicy( TQSizePolicy( (TQSizePolicy::SizeType)3, (TQSizePolicy::SizeType)0, 0, 0, fDBInfo->sizePolicy().hasHeightForWidth() ) ); - fDBInfo->setReadOnly( TRUE ); - g1->addWidget( fDBInfo, 0, 0 ); - fDBInfoButton = new KPushButton( i18n( "General Database &Information" ), this ); - g1->addWidget( fDBInfoButton, 1, 0 ); - fAppInfoButton = new KPushButton( i18n( "&Application Info Block (Categories etc.)" ), this ); - g1->addWidget( fAppInfoButton, 2, 0 ); - - TQGridLayout *g2 = new TQGridLayout( 0, 1, 1); - fRecordList = new KListView( this ); - g2->addMultiCellWidget( fRecordList, 0, 0, 0, 2 ); - fRecordList->addColumn(i18n("Rec. Nr.")); - fRecordList->addColumn(i18n("Length")); - fRecordList->addColumn(i18n("Record ID")); - fRecordList->setAllColumnsShowFocus(true); - fRecordList->setResizeMode( KListView::LastColumn ); - fRecordList->setFullWidth( TRUE ); - fRecordList->setItemsMovable( FALSE ); - - fAddRecord = new KPushButton( i18n("&Add..."), this ); - g2->addWidget( fAddRecord, 1, 0 ); - fEditRecord = new KPushButton( i18n("&Edit..."), this ); - g2->addWidget( fEditRecord, 1, 1 ); - fDeleteRecord = new KPushButton( i18n("&Delete"), this ); - g2->addWidget( fDeleteRecord, 1, 2 ); - - g1->addLayout( g2, 3, 0 ); - - - g->addMultiCellLayout( g1, 0, 1, 1, 1 ); - resize( TQSize(682, 661).expandedTo(minimumSizeHint()) ); - - connect(fDBList, TQT_SIGNAL(highlighted(const TQString &)), - this, TQT_SLOT(slotSelected(const TQString &))); - connect(fDBType, TQT_SIGNAL(activated(int)), - this, TQT_SLOT(slotDBType(int))); - connect(fDBInfoButton, TQT_SIGNAL(clicked()), - this, TQT_SLOT(slotShowDBInfo())); - connect(fAppInfoButton, TQT_SIGNAL(clicked()), - this, TQT_SLOT(slotShowAppInfo())); - connect(fAddRecord, TQT_SIGNAL(clicked()), - this, TQT_SLOT(slotAddRecord())); - connect(fEditRecord, TQT_SIGNAL(clicked()), - this, TQT_SLOT(slotEditRecord())); - connect(fDeleteRecord, TQT_SIGNAL(clicked()), - this, TQT_SLOT(slotDeleteRecord())); - connect(fRecordList, TQT_SIGNAL(executed(TQListViewItem*)), - this, TQT_SLOT(slotEditRecord(TQListViewItem*))); - -} - -GenericDBWidget::~GenericDBWidget() -{ - FUNCTIONSETUP; - if (fDB) KPILOT_DELETE(fDB); -} - - -void GenericDBWidget::showComponent() -{ - FUNCTIONSETUP; - fDBInfo->setText(TQString::null); - slotDBType(0); - - fDBList->show(); - fDBInfo->show(); -} - -void GenericDBWidget::hideComponent() -{ - reset(); -} - -void GenericDBWidget::slotSelected(const TQString &dbname) -{ - FUNCTIONSETUP; -#ifdef DEBUG - DEBUGKPILOT << fname << ": Selected DB " << dbname << endl; -#endif - struct DBInfo dbinfo; - TQString display; - fRecList.clear(); - fRecordList->clear(); - - if (fDB) KPILOT_DELETE(fDB); - currentDB=dbname; - - if (!shown) return; - - if (dbname.endsWith(CSL1(".pdb")) || dbname.endsWith(CSL1(".PDB"))) - { - // We are dealing with a database - currentDBtype=eDatabase; - - currentDB.remove( TQRegExp(CSL1(".(pdb|PDB)$")) ); - - fDB=new PilotLocalDatabase(dbPath(), currentDB, false); - if (!fDB || !fDB->isOpen()) - { - fDBInfo->setText(i18n("<B>Warning:</B> Cannot read " - "database file %1.").arg(currentDB)); - return; - } - dbinfo=fDB->getDBInfo(); - display.append(i18n("<B>Database:</B> %1, %2 records<BR>") - .arg(TQString::fromLatin1(dbinfo.name)).arg(fDB->recordCount())); - char buff[5]; - set_long(buff, dbinfo.type); - buff[4]='\0'; - TQString tp = TQString::fromLatin1(buff); - set_long(buff, dbinfo.creator); - buff[4]='\0'; - TQString cr = TQString::fromLatin1(buff); - display.append(i18n("<B>Type:</B> %1, <B>Creator:</B> %2<br><br>").arg(tp).arg(cr)); - - int currentRecord = 0; - PilotRecord *pilotRec; - -#ifdef DEBUG - DEBUGKPILOT << fname << ": Reading database "<<dbname<<"..." << endl; -#endif - - while ((pilotRec = fDB->readRecordByIndex(currentRecord)) != 0L) - { -// if (!(pilotRec->isDeleted()) ) - { - PilotListViewItem*item=new PilotListViewItem(fRecordList, - TQString::number(currentRecord), TQString::number(pilotRec->size()), - TQString::number(pilotRec->id()), - TQString::null, - pilotRec->id(), pilotRec); - item->setNumericCol(0, true); - item->setNumericCol(1, true); - item->setNumericCol(2, true); - } - fRecList.append(pilotRec); - - currentRecord++; - } - -#ifdef DEBUG - DEBUGKPILOT << fname - << ": Total " << currentRecord << " records" << endl; -#endif - - } - else - { - // we are dealing with an application - currentDBtype=eApplication; - - TQCString filename = TQFile::encodeName(dbPath() + CSL1("/") + dbname); - const char *s = filename; - struct pi_file *pf = pi_file_open(const_cast<char *>(s)); - if (!pf) - { - fDBInfo->setText(i18n("<B>Warning:</B> Cannot read " - "application file %1.").arg(dbname)); - return; - } -#if PILOT_LINK_NUMBER < PILOT_LINK_0_12_0 - if (pi_file_get_info(pf,&dbinfo)) - { - fDBInfo->setText(i18n("<B>Warning:</B> Cannot read " - "application file %1.").arg(dbname)); - return; - } -#else - pi_file_get_info(pf,&dbinfo); -#endif - display.append(i18n("<B>Application:</B> %1<BR><BR>").arg(dbname)); - } - enableWidgets(currentDBtype==eDatabase); - - TQDateTime ttime; - - ttime.setTime_t(dbinfo.createDate); - display.append(i18n("Created: %1<BR>").arg(ttime.toString())); - - ttime.setTime_t(dbinfo.modifyDate); - display.append(i18n("Modified: %1<BR>").arg(ttime.toString())); - - ttime.setTime_t(dbinfo.backupDate); - display.append(i18n("Backed up: %1<BR>").arg(ttime.toString())); - - fDBInfo->setText(display); -} - -void GenericDBWidget::slotDBType(int mode) -{ - FUNCTIONSETUP; - if (!shown) return; - - reset(); - - TQDir dir(dbPath()); - switch (mode) - { - case 1: - dir.setNameFilter(CSL1("*.prc")); break; - case 2: - dir.setNameFilter(CSL1("*.pdb")); break; - case 0: - default: - dir.setNameFilter(CSL1("*.pdb;*.prc")); break; - } - TQStringList l = dir.entryList(); - fDBList->insertStringList(l); -} - -void GenericDBWidget::reset() -{ - FUNCTIONSETUP; - fDBList->clear(); - fDBInfo->clear(); - fRecordList->clear(); - if (fDB) KPILOT_DELETE(fDB); - currentDB=TQString::null; -} - -void GenericDBWidget::slotAddRecord() -{ - FUNCTIONSETUP; - pi_buffer_t *b = pi_buffer_new(0); - PilotRecord *rec=new PilotRecord(b, 0, 0, 0); - PilotListViewItem*item=new PilotListViewItem(fRecordList, - TQString::number(-1), TQString::number(rec->size()), - TQString::number(rec->id()), TQString::null, - rec->id(), rec); - if (slotEditRecord(item)) - { - fRecList.append(rec); - } - else - { - KPILOT_DELETE(item); - KPILOT_DELETE(rec); - } -} - -bool GenericDBWidget::slotEditRecord(TQListViewItem*item) -{ - FUNCTIONSETUP; - PilotListViewItem*currRecItem=dynamic_cast<PilotListViewItem*>(item); - if (currRecItem) - { - PilotRecord*rec=(PilotRecord*)currRecItem->rec(); - int nr=currRecItem->text(0).toInt(); - DBRecordEditor*dlg=new DBRecordEditor(rec, nr, this); - if (dlg->exec()) - { - currRecItem->setText(1, TQString::number(rec->size())); - currRecItem->setText(2, TQString::number(rec->id())); - fRecordList->triggerUpdate(); - writeRecord(rec); - KPILOT_DELETE(dlg); - return true; - } - KPILOT_DELETE(dlg); - } - else - { - // Either nothing selected, or some error occurred... - KMessageBox::information(this, i18n("You must select a record for editing."), i18n("No Record Selected"), CSL1("norecordselected")); - } - return false; -} -void GenericDBWidget::slotEditRecord() -{ - slotEditRecord(fRecordList->selectedItem()); -} - -void GenericDBWidget::slotDeleteRecord() -{ - FUNCTIONSETUP; - PilotListViewItem*currRecItem=dynamic_cast<PilotListViewItem*>(fRecordList->selectedItem()); - if (currRecItem && (KMessageBox::questionYesNo(this, i18n("<qt>Do you really want to delete the selected record? This cannot be undone.<br><br>Delete record?<qt>"), i18n("Deleting Record"), KStdGuiItem::del(), KStdGuiItem::cancel())==KMessageBox::Yes) ) - { - PilotRecord*rec=(PilotRecord*)currRecItem->rec(); - rec->setDeleted(); - writeRecord(rec); - // fRecordList->triggerUpdate(); - KPILOT_DELETE(currRecItem); - } -} - -void GenericDBWidget::slotShowAppInfo() -{ - FUNCTIONSETUP; - if (!fDB) return; - char*appBlock=new char[0xFFFF]; - int len=fDB->readAppBlock((unsigned char*)appBlock, 0xFFFF); - DBAppInfoEditor*dlg=new DBAppInfoEditor(appBlock, len, this); - if (dlg->exec()) - { - fDB->writeAppBlock( (unsigned char*)(dlg->appInfo), dlg->len ); - - KPilotConfig::addAppBlockChangedDatabase(getCurrentDB()); - KPilotSettings::writeConfig(); - } - KPILOT_DELETE(dlg); - delete[] appBlock; -} - -void GenericDBWidget::slotShowDBInfo() -{ - FUNCTIONSETUP; - if ( !fDB || !shown ) return; - DBInfo db=fDB->getDBInfo(); - DBFlagsEditor*dlg=new DBFlagsEditor(&db, this); - if (dlg->exec()) - { -#ifdef DEBUG - DEBUGKPILOT<<"OK pressed, assiging DBInfo, flags="<< - db.flags<<", miscFlag="<<db.miscFlags<<endl; -#endif - fDB->setDBInfo(db); - - KPilotConfig::addFlagsChangedDatabase(getCurrentDB()); - KPilotSettings::writeConfig(); - - slotSelected(fDBList->currentText()); - } - KPILOT_DELETE(dlg); -} - -void GenericDBWidget::enableWidgets(bool enable) -{ - //FUNCTIONSETUP; - fDBInfoButton->setEnabled(enable); - fAppInfoButton->setEnabled(enable); - fRecordList->setEnabled(enable); - fAddRecord->setEnabled(enable); - fEditRecord->setEnabled(enable); - fDeleteRecord->setEnabled(enable); -} - -void GenericDBWidget::writeRecord(PilotRecord*r) -{ - // FUNCTIONSETUP; - if (fDB && r) - { - fDB->writeRecord(r); - markDBDirty(getCurrentDB()); - } -} - - - - - |