diff options
| author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
|---|---|---|
| committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
| commit | 8362bf63dea22bbf6736609b0f49c152f975eb63 (patch) | |
| tree | 0eea3928e39e50fae91d4e68b21b1e6cbae25604 /kword/mailmerge/KWClassicSerialDataSource.cpp | |
| download | koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.tar.gz koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.zip | |
Added old abandoned KDE3 version of koffice
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/koffice@1077364 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kword/mailmerge/KWClassicSerialDataSource.cpp')
| -rw-r--r-- | kword/mailmerge/KWClassicSerialDataSource.cpp | 569 |
1 files changed, 569 insertions, 0 deletions
diff --git a/kword/mailmerge/KWClassicSerialDataSource.cpp b/kword/mailmerge/KWClassicSerialDataSource.cpp new file mode 100644 index 000000000..0b3f446f6 --- /dev/null +++ b/kword/mailmerge/KWClassicSerialDataSource.cpp @@ -0,0 +1,569 @@ +/* This file is part of the KDE project + Original file (mailmerge.cc): Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org> + Copyright (C) 2001 Joseph Wenninger <jowenn@kde.org> + + 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 "KWClassicSerialDataSource.h" +#include "KWClassicSerialDataSource.moc" +#include "KWMailMergeDataBase.h" +#include <kinputdialog.h> +#include <qlabel.h> +#include <qhbox.h> +#include <qlayout.h> +#include <qvbox.h> +#include <qpushbutton.h> +#include <qlineedit.h> +#include <qvalidator.h> +#include <klocale.h> +#include <kdebug.h> +#include <qtoolbutton.h> +#include <qtooltip.h> +#include <kiconloader.h> +#include <qheader.h> +#include "KWDocument.h" +#include "defs.h" + +#define KWSLCPBarIcon( x ) BarIcon( x, db->KWInstance() ) + +/****************************************************************** + * + * Class: KWClassicSerialDataSource + * + ******************************************************************/ + +KWClassicSerialDataSource::KWClassicSerialDataSource(KInstance *inst,QObject *parent) + : KWMailMergeDataSource(inst,parent) +// : doc( doc_ ) +{ +} + +KWClassicSerialDataSource::~KWClassicSerialDataSource() +{ +} + +QString KWClassicSerialDataSource::getValue( const QString &name, int record ) const +{ + int num = record; +/* if ( num == -1 ) + num = doc->getMailMergeRecord(); Is this really needed ?*/ + + if ( num < 0 || num > (int)db.count() ) + return name; + + return db[ num ][ name ]; +} + +void KWClassicSerialDataSource::setValue( const QString &name, const QString &value, int record ) +{ + int num = record; +/* if ( num == -1 ) + num = doc->getMailMergeRecord(); Is this really needed?*/ + + if ( num < 0 || num > (int)db.count() ) + return; + + db[ num ][ name ] = value; +} + +void KWClassicSerialDataSource::appendRecord() +{ + DbRecord record( sampleRecord ); + db.append( record ); +} + +void KWClassicSerialDataSource::addEntry( const QString &name ) +{ + sampleRecord[ name ] = i18n( "No Value" ); + Db::Iterator it = db.begin(); + for ( ; it != db.end(); ++it ) + ( *it )[ name ] = sampleRecord[ name ]; +} + +void KWClassicSerialDataSource::removeEntry( const QString &name ) +{ + sampleRecord.remove( name ); + Db::Iterator it = db.begin(); + for ( ; it != db.end(); ++it ) + ( *it ).remove( name ); +} + +void KWClassicSerialDataSource::removeRecord( int i ) +{ + if ( (i < 0) || (i > (int)db.count() - 1) ) + return; + + kdDebug()<<QString("Removing record %1").arg(i)<<endl; + + Db::Iterator it = db.at( i); + db.remove( it ); +} + +void KWClassicSerialDataSource::save( QDomDocument &doc, QDomElement &parent) +{ + QDomElement def=doc.createElement(QString::fromLatin1("DEFINITION")); + parent.appendChild(def); + for (DbRecord::Iterator it=sampleRecord.begin();it!=sampleRecord.end();++it) + { + QDomElement defEnt=doc.createElement(QString::fromLatin1("FIELD")); + defEnt.setAttribute(QString::fromLatin1("name"),it.key()); + def.appendChild(defEnt); + } + QDomElement cont=doc.createElement(QString::fromLatin1("CONTENT")); + parent.appendChild(cont); + for (Db::Iterator dbI=db.begin();dbI!=db.end();++dbI) + { + QDomElement rec=doc.createElement(QString::fromLatin1("RECORD")); + cont.appendChild(rec); + for (DbRecord::Iterator it=sampleRecord.begin();it!=sampleRecord.end();++it) + { + QDomElement recEnt=doc.createElement(QString::fromLatin1("ITEM")); + recEnt.setAttribute(QString::fromLatin1("name"),it.key()); + recEnt.setAttribute(QString::fromLatin1("data"),(*dbI)[it.key()]); + rec.appendChild(recEnt); + } + } +} + +void KWClassicSerialDataSource::load( QDomElement& parentElem ) +{ + db.clear(); + sampleRecord.clear(); + QDomNode defNd=parentElem.namedItem("DEFINITION"); + if (defNd.isNull()) return; + QDomElement def=defNd.toElement(); + for (QDomElement defEnt=def.firstChild().toElement();!defEnt.isNull();defEnt=defEnt.nextSibling().toElement()) + { + sampleRecord[defEnt.attribute(QString::fromLatin1("name"))]=i18n( "No Value" ); + } + QDomNode contNd=parentElem.namedItem("CONTENT"); + if (contNd.isNull()) return; + for (QDomNode rec=contNd.firstChild();!rec.isNull();rec=rec.nextSibling()) + { + appendRecord(); + for (QDomElement recEnt=rec.firstChild().toElement();!recEnt.isNull();recEnt=recEnt.nextSibling().toElement()) + { + setValue(recEnt.attribute(QString::fromLatin1("name")), + recEnt.attribute(QString::fromLatin1("data")),db.count()-1); + } + } +} + +bool KWClassicSerialDataSource::showConfigDialog(QWidget *par,int action) +{ + if (action==KWSLCreate) + { + db.clear(); + sampleRecord.clear(); + } + KWClassicMailMergeEditor *dia=new KWClassicMailMergeEditor( par, this ); + bool ret=(dia->exec()==QDialog::Accepted); + delete dia; + return ret; +} + + +/****************************************************************** + * + * Class: KWClassicMailMergeEditorListItem + * + ******************************************************************/ + +KWClassicMailMergeEditorListItem::KWClassicMailMergeEditorListItem( QListView *parent ) + : QListViewItem( parent ) +{ + editWidget = new QLineEdit( listView()->viewport() ); + listView()->addChild( editWidget ); +} + +KWClassicMailMergeEditorListItem::KWClassicMailMergeEditorListItem( QListView *parent, QListViewItem *after ) + : QListViewItem( parent, after ) +{ + editWidget = new QLineEdit( listView()->viewport() ); + listView()->addChild( editWidget ); +} + +KWClassicMailMergeEditorListItem::~KWClassicMailMergeEditorListItem() +{ + delete editWidget; +} + +void KWClassicMailMergeEditorListItem::setText( int i, const QString &text ) +{ + QListViewItem::setText( i, text ); + if ( i == 1 ) + editWidget->setText( text ); +} + +QString KWClassicMailMergeEditorListItem::text( int i ) const +{ + if ( i == 1 ) + return editWidget->text(); + return QListViewItem::text( i ); +} + +void KWClassicMailMergeEditorListItem::setup() +{ + setHeight( QMAX( listView()->fontMetrics().height(), + editWidget->sizeHint().height() ) ); + if ( listView()->columnWidth( 1 ) < editWidget->sizeHint().width() ) + listView()->setColumnWidth( 1, editWidget->sizeHint().width() ); +} + +void KWClassicMailMergeEditorListItem::update() +{ + editWidget->resize( listView()->header()->cellSize( 1 ), height() ); + listView()->moveChild( editWidget, listView()->header()->cellPos( 1 ), + listView()->itemPos( this ) + listView()->contentsY() ); + editWidget->show(); +} + +/****************************************************************** + * + * Class: KWClassicMailMergeEditorList + * + ******************************************************************/ + +KWClassicMailMergeEditorList::KWClassicMailMergeEditorList( QWidget *parent, KWClassicSerialDataSource *db_ ) + : QListView( parent ), db( db_ ) +{ + setSorting( -1 ); + addColumn( i18n( "Name" ) ); + addColumn( i18n( "Value" ) ); + header()->setMovingEnabled( FALSE ); + connect( header(), SIGNAL( sizeChange( int, int, int ) ), + this, SLOT( columnSizeChange( int, int, int ) ) ); +// connect( header(), SIGNAL( sectionClicked( int ) ), +// this, SLOT( sectionClicked( int ) ) ); + disconnect( header(), SIGNAL( sectionClicked( int ) ), + this, SLOT( changeSortColumn( int ) ) ); + + currentRecord = -1; +} + +void KWClassicMailMergeEditorList::invalidateCurrentRecord() +{ + currentRecord=-1; +} + +KWClassicMailMergeEditorList::~KWClassicMailMergeEditorList() +{ + if ( currentRecord == -1 ) + return; + + QListViewItemIterator lit( this ); + QMap< QString, QString >::ConstIterator it = db->getRecordEntries().begin(); + for ( ; it != db->getRecordEntries().end(); ++it ) { + QListViewItem *item = 0; + item = lit.current(); + ++lit; + if ( currentRecord != -1 && item ) + db->setValue( it.key(), item->text( 1 ), currentRecord ); + } +} + +void KWClassicMailMergeEditorList::columnSizeChange( int c, int, int ) +{ + if ( c == 0 || c == 1 ) + updateItems(); +} + +void KWClassicMailMergeEditorList::sectionClicked( int ) +{ + updateItems(); +} + +void KWClassicMailMergeEditorList::updateItems() +{ + QListViewItemIterator it( this ); + for ( ; it.current(); ++it ) + ( (KWClassicMailMergeEditorListItem*)it.current() )->update(); +} + +void KWClassicMailMergeEditorList::displayRecord( int i ) +{ + if ( i < 0 || i >= db->getNumRecords() ) + return; + + bool create = !firstChild(); + QListViewItemIterator lit( this ); + QMap< QString, QString >::ConstIterator it = db->getRecordEntries().begin(); + QListViewItem *after = 0; + for ( ; it != db->getRecordEntries().end(); ++it ) { + QListViewItem *item = 0; + if ( create ) { + item = new KWClassicMailMergeEditorListItem( this, after ); + item->setText( 0, it.key() ); + after = item; + } else { + item = lit.current(); + ++lit; + if ( currentRecord != -1 && item ) + db->setValue( it.key(), item->text( 1 ), currentRecord ); + } + + if ( item ) + item->setText( 1, db->getValue( it.key(), i ) ); + } + updateItems(); + currentRecord = i; +} + +/****************************************************************** + * + * Class: KWClassicMailMergeEditor + * + ******************************************************************/ + +KWClassicMailMergeEditor::KWClassicMailMergeEditor( QWidget *parent, KWClassicSerialDataSource *db_ ) + : KDialogBase( Plain, i18n( "Mail Merge - Editor" ), Ok | Cancel, Ok, parent, "", true ), db( db_ ) +{ + back = plainPage(); + + QVBoxLayout *l = new QVBoxLayout( back ); + l->setAutoAdd(true); + l->setSpacing( KDialog::spacingHint() ); + + QHBox *toolbar = new QHBox( back ); + + first = new QToolButton( toolbar ); + first->setIconSet( SmallIconSet( "start" ) ); + first->setFixedSize( first->sizeHint() ); + connect(first, SIGNAL(clicked()), this, SLOT(firstRecord())); + + back_ = new QToolButton( toolbar ); + back_->setIconSet( SmallIconSet( "back" ) ); + back_->setFixedSize( back_->sizeHint() ); + connect(back_, SIGNAL(clicked()), this, SLOT(prevRecord())); + + records = new QSpinBox( 1, db->getNumRecords(), 1, toolbar ); + records->setMaximumHeight( records->sizeHint().height() ); + connect( records, SIGNAL( valueChanged( int ) ), + this, SLOT( changeRecord( int ) ) ); + + forward = new QToolButton( toolbar ); + forward->setIconSet( SmallIconSet( "forward" ) ); + forward->setFixedSize( forward->sizeHint() ); + connect(forward, SIGNAL(clicked()), this, SLOT(nextRecord())); + + finish = new QToolButton( toolbar ); + finish->setIconSet( SmallIconSet( "finish" ) ); + finish->setFixedSize( finish->sizeHint() ); + connect(finish, SIGNAL(clicked()), this, SLOT(lastRecord())); + + QWidget *sep = new QWidget( toolbar ); + sep->setMaximumWidth( 10 ); + + newRecord = new QToolButton( toolbar ); + newRecord->setIconSet( SmallIconSet( "sl_addrecord" ) ); + newRecord->setFixedSize( newRecord->sizeHint() ); + connect( newRecord, SIGNAL( clicked() ), + this, SLOT( addRecord() ) ); + QToolTip::add( newRecord, i18n( "Add record" ) ); + + newEntry = new QToolButton( toolbar ); + newEntry->setIconSet( SmallIconSet( "sl_addentry" ) ); + newEntry->setFixedSize( newEntry->sizeHint() ); + connect( newEntry, SIGNAL( clicked() ), + this, SLOT( addEntry() ) ); + QToolTip::add( newEntry, i18n( "Add entry" ) ); + + deleteRecord = new QToolButton( toolbar ); + deleteRecord->setIconSet( SmallIconSet( "sl_delrecord" ) ); + deleteRecord->setFixedSize( deleteRecord->sizeHint() ); + connect( deleteRecord, SIGNAL( clicked() ), + this, SLOT( removeRecord() ) ); + QToolTip::add( deleteRecord, i18n( "Remove record" ) ); + + deleteEntry = new QToolButton( toolbar ); + deleteEntry->setIconSet( SmallIconSet( "sl_delentry" ) ); + deleteEntry->setFixedSize( deleteEntry->sizeHint() ); + connect( deleteEntry, SIGNAL( clicked() ), + this, SLOT( removeEntry() ) ); + QToolTip::add( deleteEntry, i18n( "Remove entry" ) ); + + dbList = new KWClassicMailMergeEditorList( back, db ); + + if ( db->getNumRecords() > 0 ) { + records->setValue( 1 ); + dbList->displayRecord(0); +// dbList->updateItems(); + } else { + first->setEnabled(false); + back_->setEnabled(false); + forward->setEnabled(false); + finish->setEnabled(false); + newRecord->setEnabled(false); + deleteEntry->setEnabled(false); + deleteRecord->setEnabled(false); + records->setEnabled(true); + } + setInitialSize( QSize( 600, 400 ) ); + updateButton(); +} + +void KWClassicMailMergeEditor::firstRecord() +{ + records->setValue(1); + updateButton(); +} + +void KWClassicMailMergeEditor::prevRecord() +{ + records->setValue(records->value()-1); + updateButton(); +} + +void KWClassicMailMergeEditor::nextRecord() +{ + records->setValue(records->value()+1); + updateButton(); +} + +void KWClassicMailMergeEditor::lastRecord() +{ + records->setValue(records->maxValue()); + updateButton(); +} + + +void KWClassicMailMergeEditor::updateButton() +{ + int val = records->value(); + first->setEnabled( val > 1); + back_->setEnabled( val> 1 ); + forward->setEnabled( val < records->maxValue() ); + finish->setEnabled( val < records->maxValue()); + +} + +void KWClassicMailMergeEditor::resizeEvent( QResizeEvent *e ) +{ + KDialogBase::resizeEvent( e ); +// back->resize( size() ); +} + +void KWClassicMailMergeEditor::changeRecord( int i ) +{ + dbList->displayRecord( i - 1 ); +} + +void KWClassicMailMergeEditor::addEntry() +{ + bool ok; + QString value=KInputDialog::getText( i18n("Add Entry"), + i18n("Enter entry name:"), + QString::null, + &ok, + this); + if ((ok) && !value.isEmpty()) + { + if ( db->getNumRecords() == 0 ) + { + first->setEnabled(true); + back_->setEnabled(true); + forward->setEnabled(true); + finish->setEnabled(true); + newRecord->setEnabled(true); + deleteEntry->setEnabled(true); + deleteRecord->setEnabled(true); + records->setEnabled(true); + addRecord(); + } + dbList->clear(); + db->addEntry( value ); + changeRecord( records->value() ); + dbList->updateItems(); + } + updateButton(); +} + +void KWClassicMailMergeEditor::addRecord() +{ + db->appendRecord(); + records->setRange( records->minValue(), records->maxValue() + 1 ); + records->setValue( db->getNumRecords() ); + updateButton(); + +} + +void KWClassicMailMergeEditor::removeEntry() +{ + QListViewItem * item = dbList->selectedItem (); + if ( item ) + { + db->removeEntry( item->text(0) ); + dbList->clear(); + changeRecord( records->value() ); + dbList->updateItems(); + updateButton(); + } +#if defined( Q_CC_GNU ) +#warning reimplement +#endif +/* + if ( db->getNumRecords() == 0 ) + return; + + KWMailMergeVariableInsertDia + *dia = new KWMailMergeVariableInsertDia( this, db ); + if ( dia->exec() == QDialog::Accepted ) { + dbList->clear(); + db->removeEntry( dia->getName() ); + changeRecord( records->value() + 1 ); + dbList->updateItems(); + } + delete dia; +*/ +} + +void KWClassicMailMergeEditor::removeRecord() +{ + if ( db->getNumRecords() == 0 ) + return; + + db->removeRecord( records->value() - 1 ); + dbList->invalidateCurrentRecord(); + if ( db->getNumRecords() > 0 ) { + records->setRange( records->minValue(), records->maxValue() - 1 ); + records->setValue( 1 ); + dbList->clear(); + dbList->updateItems(); + } else + { + dbList->clear(); + records->setEnabled( FALSE ); + } + + if ( db->getNumRecords() == 0 ) + { + newRecord->setEnabled(false); + deleteEntry->setEnabled(false); + deleteRecord->setEnabled(false); + records->setEnabled(true); + } + + updateButton(); +} + +extern "C" { + KWORD_MAILMERGE_EXPORT KWMailMergeDataSource *create_kwmailmerge_classic(KInstance *inst,QObject *parent) + { + return new KWClassicSerialDataSource(inst,parent); + } + +} |
