summaryrefslogtreecommitdiffstats
path: root/kword/mailmerge/KWClassicSerialDataSource.cpp
diff options
context:
space:
mode:
authortpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-01-20 01:29:50 +0000
committertpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-01-20 01:29:50 +0000
commit8362bf63dea22bbf6736609b0f49c152f975eb63 (patch)
tree0eea3928e39e50fae91d4e68b21b1e6cbae25604 /kword/mailmerge/KWClassicSerialDataSource.cpp
downloadkoffice-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.cpp569
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);
+ }
+
+}