21#include "KWClassicSerialDataSource.h"
22#include "KWClassicSerialDataSource.moc"
23#include "KWMailMergeDataBase.h"
24#include <kinputdialog.h>
29#include <tqpushbutton.h>
30#include <tqlineedit.h>
31#include <tqvalidator.h>
34#include <tqtoolbutton.h>
36#include <kiconloader.h>
38#include "KWDocument.h"
41#define KWSLCPBarIcon( x ) BarIcon( x, db->KWInstance() )
49KWClassicSerialDataSource::KWClassicSerialDataSource(TDEInstance *inst,TQObject *parent)
50 : KWMailMergeDataSource(inst,parent)
55KWClassicSerialDataSource::~KWClassicSerialDataSource()
59TQString KWClassicSerialDataSource::getValue(
const TQString &name,
int record )
const
65 if ( num < 0 || num > (
int)db.count() )
68 return db[ num ][ name ];
71void KWClassicSerialDataSource::setValue(
const TQString &name,
const TQString &value,
int record )
77 if ( num < 0 || num > (
int)db.count() )
80 db[ num ][ name ] = value;
83void KWClassicSerialDataSource::appendRecord()
85 DbRecord record( sampleRecord );
89void KWClassicSerialDataSource::addEntry(
const TQString &name )
91 sampleRecord[ name ] = i18n(
"No Value" );
92 Db::Iterator it = db.begin();
93 for ( ; it != db.end(); ++it )
94 ( *it )[ name ] = sampleRecord[ name ];
97void KWClassicSerialDataSource::removeEntry(
const TQString &name )
99 sampleRecord.remove( name );
100 Db::Iterator it = db.begin();
101 for ( ; it != db.end(); ++it )
102 ( *it ).remove( name );
105void KWClassicSerialDataSource::removeRecord(
int i )
107 if ( (i < 0) || (i > (
int)db.count() - 1) )
110 kdDebug()<<TQString(
"Removing record %1").arg(i)<<endl;
112 Db::Iterator it = db.at( i);
116void KWClassicSerialDataSource::save( TQDomDocument &doc, TQDomElement &parent)
118 TQDomElement def=doc.createElement(TQString::fromLatin1(
"DEFINITION"));
119 parent.appendChild(def);
120 for (DbRecord::Iterator it=sampleRecord.begin();it!=sampleRecord.end();++it)
122 TQDomElement defEnt=doc.createElement(TQString::fromLatin1(
"FIELD"));
123 defEnt.setAttribute(TQString::fromLatin1(
"name"),it.key());
124 def.appendChild(defEnt);
126 TQDomElement cont=doc.createElement(TQString::fromLatin1(
"CONTENT"));
127 parent.appendChild(cont);
128 for (Db::Iterator dbI=db.begin();dbI!=db.end();++dbI)
130 TQDomElement rec=doc.createElement(TQString::fromLatin1(
"RECORD"));
131 cont.appendChild(rec);
132 for (DbRecord::Iterator it=sampleRecord.begin();it!=sampleRecord.end();++it)
134 TQDomElement recEnt=doc.createElement(TQString::fromLatin1(
"ITEM"));
135 recEnt.setAttribute(TQString::fromLatin1(
"name"),it.key());
136 recEnt.setAttribute(TQString::fromLatin1(
"data"),(*dbI)[it.key()]);
137 rec.appendChild(recEnt);
142void KWClassicSerialDataSource::load( TQDomElement& parentElem )
145 sampleRecord.clear();
146 TQDomNode defNd=parentElem.namedItem(
"DEFINITION");
147 if (defNd.isNull())
return;
148 TQDomElement def=defNd.toElement();
149 for (TQDomElement defEnt=def.firstChild().toElement();!defEnt.isNull();defEnt=defEnt.nextSibling().toElement())
151 sampleRecord[defEnt.attribute(TQString::fromLatin1(
"name"))]=i18n(
"No Value" );
153 TQDomNode contNd=parentElem.namedItem(
"CONTENT");
154 if (contNd.isNull())
return;
155 for (TQDomNode rec=contNd.firstChild();!rec.isNull();rec=rec.nextSibling())
158 for (TQDomElement recEnt=rec.firstChild().toElement();!recEnt.isNull();recEnt=recEnt.nextSibling().toElement())
160 setValue(recEnt.attribute(TQString::fromLatin1(
"name")),
161 recEnt.attribute(TQString::fromLatin1(
"data")),db.count()-1);
166bool KWClassicSerialDataSource::showConfigDialog(TQWidget *par,
int action)
168 if (action==KWSLCreate)
171 sampleRecord.clear();
173 KWClassicMailMergeEditor *dia=
new KWClassicMailMergeEditor( par,
this );
174 bool ret=(dia->exec()==TQDialog::Accepted);
186KWClassicMailMergeEditorListItem::KWClassicMailMergeEditorListItem( TQListView *parent )
187 : TQListViewItem( parent )
189 editWidget =
new TQLineEdit( listView()->viewport() );
190 listView()->addChild( editWidget );
193KWClassicMailMergeEditorListItem::KWClassicMailMergeEditorListItem( TQListView *parent, TQListViewItem *after )
194 : TQListViewItem( parent, after )
196 editWidget =
new TQLineEdit( listView()->viewport() );
197 listView()->addChild( editWidget );
200KWClassicMailMergeEditorListItem::~KWClassicMailMergeEditorListItem()
205void KWClassicMailMergeEditorListItem::setText(
int i,
const TQString &text )
207 TQListViewItem::setText( i, text );
209 editWidget->setText( text );
212TQString KWClassicMailMergeEditorListItem::text(
int i )
const
215 return editWidget->text();
216 return TQListViewItem::text( i );
219void KWClassicMailMergeEditorListItem::setup()
221 setHeight( TQMAX( listView()->fontMetrics().height(),
222 editWidget->sizeHint().height() ) );
223 if ( listView()->columnWidth( 1 ) < editWidget->sizeHint().width() )
224 listView()->setColumnWidth( 1, editWidget->sizeHint().width() );
227void KWClassicMailMergeEditorListItem::update()
229 editWidget->resize( listView()->header()->cellSize( 1 ), height() );
230 listView()->moveChild( editWidget, listView()->header()->cellPos( 1 ),
231 listView()->itemPos(
this ) + listView()->contentsY() );
241KWClassicMailMergeEditorList::KWClassicMailMergeEditorList( TQWidget *parent, KWClassicSerialDataSource *db_ )
242 : TQListView( parent ), db( db_ )
245 addColumn( i18n(
"Name" ) );
246 addColumn( i18n(
"Value" ) );
247 header()->setMovingEnabled(
false );
248 connect( header(), TQ_SIGNAL( sizeChange(
int,
int,
int ) ),
249 this, TQ_SLOT( columnSizeChange(
int,
int,
int ) ) );
252 disconnect( header(), TQ_SIGNAL( sectionClicked(
int ) ),
253 this, TQ_SLOT( changeSortColumn(
int ) ) );
258void KWClassicMailMergeEditorList::invalidateCurrentRecord()
263KWClassicMailMergeEditorList::~KWClassicMailMergeEditorList()
265 if ( currentRecord == -1 )
268 TQListViewItemIterator lit(
this );
269 TQMap< TQString, TQString >::ConstIterator it = db->getRecordEntries().begin();
270 for ( ; it != db->getRecordEntries().end(); ++it ) {
271 TQListViewItem *item = 0;
272 item = lit.current();
274 if ( currentRecord != -1 && item )
275 db->setValue( it.key(), item->text( 1 ), currentRecord );
279void KWClassicMailMergeEditorList::columnSizeChange(
int c,
int,
int )
281 if ( c == 0 || c == 1 )
285void KWClassicMailMergeEditorList::sectionClicked(
int )
290void KWClassicMailMergeEditorList::updateItems()
292 TQListViewItemIterator it(
this );
293 for ( ; it.current(); ++it )
294 ( (KWClassicMailMergeEditorListItem*)it.current() )->update();
297void KWClassicMailMergeEditorList::displayRecord(
int i )
299 if ( i < 0 || i >= db->getNumRecords() )
302 bool create = !firstChild();
303 TQListViewItemIterator lit(
this );
304 TQMap< TQString, TQString >::ConstIterator it = db->getRecordEntries().begin();
305 TQListViewItem *after = 0;
306 for ( ; it != db->getRecordEntries().end(); ++it ) {
307 TQListViewItem *item = 0;
309 item =
new KWClassicMailMergeEditorListItem(
this, after );
310 item->setText( 0, it.key() );
313 item = lit.current();
315 if ( currentRecord != -1 && item )
316 db->setValue( it.key(), item->text( 1 ), currentRecord );
320 item->setText( 1, db->getValue( it.key(), i ) );
332KWClassicMailMergeEditor::KWClassicMailMergeEditor( TQWidget *parent, KWClassicSerialDataSource *db_ )
333 : KDialogBase( Plain, i18n(
"Mail Merge - Editor" ), Ok | Cancel, Ok, parent,
"", true ), db( db_ )
337 TQVBoxLayout *l =
new TQVBoxLayout( back );
339 l->setSpacing( KDialog::spacingHint() );
341 TQHBox *toolbar =
new TQHBox( back );
343 first =
new TQToolButton( toolbar );
344 first->setIconSet( SmallIconSet(
"go-first" ) );
345 first->setFixedSize( first->sizeHint() );
346 connect(first, TQ_SIGNAL(clicked()),
this, TQ_SLOT(firstRecord()));
348 back_ =
new TQToolButton( toolbar );
349 back_->setIconSet( SmallIconSet(
"back" ) );
350 back_->setFixedSize( back_->sizeHint() );
351 connect(back_, TQ_SIGNAL(clicked()),
this, TQ_SLOT(prevRecord()));
353 records =
new TQSpinBox( 1, db->getNumRecords(), 1, toolbar );
354 records->setMaximumHeight( records->sizeHint().height() );
355 connect( records, TQ_SIGNAL( valueChanged(
int ) ),
356 this, TQ_SLOT( changeRecord(
int ) ) );
358 forward =
new TQToolButton( toolbar );
359 forward->setIconSet( SmallIconSet(
"forward" ) );
360 forward->setFixedSize( forward->sizeHint() );
361 connect(forward, TQ_SIGNAL(clicked()),
this, TQ_SLOT(nextRecord()));
363 finish =
new TQToolButton( toolbar );
364 finish->setIconSet( SmallIconSet(
"go-last" ) );
365 finish->setFixedSize( finish->sizeHint() );
366 connect(finish, TQ_SIGNAL(clicked()),
this, TQ_SLOT(lastRecord()));
368 TQWidget *sep =
new TQWidget( toolbar );
369 sep->setMaximumWidth( 10 );
371 newRecord =
new TQToolButton( toolbar );
372 newRecord->setIconSet( SmallIconSet(
"sl_addrecord" ) );
373 newRecord->setFixedSize( newRecord->sizeHint() );
374 connect( newRecord, TQ_SIGNAL( clicked() ),
375 this, TQ_SLOT( addRecord() ) );
376 TQToolTip::add( newRecord, i18n(
"Add record" ) );
378 newEntry =
new TQToolButton( toolbar );
379 newEntry->setIconSet( SmallIconSet(
"sl_addentry" ) );
380 newEntry->setFixedSize( newEntry->sizeHint() );
381 connect( newEntry, TQ_SIGNAL( clicked() ),
382 this, TQ_SLOT( addEntry() ) );
383 TQToolTip::add( newEntry, i18n(
"Add entry" ) );
385 deleteRecord =
new TQToolButton( toolbar );
386 deleteRecord->setIconSet( SmallIconSet(
"sl_delrecord" ) );
387 deleteRecord->setFixedSize( deleteRecord->sizeHint() );
388 connect( deleteRecord, TQ_SIGNAL( clicked() ),
389 this, TQ_SLOT( removeRecord() ) );
390 TQToolTip::add( deleteRecord, i18n(
"Remove record" ) );
392 deleteEntry =
new TQToolButton( toolbar );
393 deleteEntry->setIconSet( SmallIconSet(
"sl_delentry" ) );
394 deleteEntry->setFixedSize( deleteEntry->sizeHint() );
395 connect( deleteEntry, TQ_SIGNAL( clicked() ),
396 this, TQ_SLOT( removeEntry() ) );
397 TQToolTip::add( deleteEntry, i18n(
"Remove entry" ) );
399 dbList =
new KWClassicMailMergeEditorList( back, db );
401 if ( db->getNumRecords() > 0 ) {
402 records->setValue( 1 );
403 dbList->displayRecord(0);
406 first->setEnabled(
false);
407 back_->setEnabled(
false);
408 forward->setEnabled(
false);
409 finish->setEnabled(
false);
410 newRecord->setEnabled(
false);
411 deleteEntry->setEnabled(
false);
412 deleteRecord->setEnabled(
false);
413 records->setEnabled(
true);
415 setInitialSize( TQSize( 600, 400 ) );
419void KWClassicMailMergeEditor::firstRecord()
421 records->setValue(1);
425void KWClassicMailMergeEditor::prevRecord()
427 records->setValue(records->value()-1);
431void KWClassicMailMergeEditor::nextRecord()
433 records->setValue(records->value()+1);
437void KWClassicMailMergeEditor::lastRecord()
439 records->setValue(records->maxValue());
444void KWClassicMailMergeEditor::updateButton()
446 int val = records->value();
447 first->setEnabled( val > 1);
448 back_->setEnabled( val> 1 );
449 forward->setEnabled( val < records->maxValue() );
450 finish->setEnabled( val < records->maxValue());
454void KWClassicMailMergeEditor::resizeEvent( TQResizeEvent *e )
456 KDialogBase::resizeEvent( e );
460void KWClassicMailMergeEditor::changeRecord(
int i )
462 dbList->displayRecord( i - 1 );
465void KWClassicMailMergeEditor::addEntry()
468 TQString value=KInputDialog::getText( i18n(
"Add Entry"),
469 i18n(
"Enter entry name:"),
473 if ((ok) && !value.isEmpty())
475 if ( db->getNumRecords() == 0 )
477 first->setEnabled(
true);
478 back_->setEnabled(
true);
479 forward->setEnabled(
true);
480 finish->setEnabled(
true);
481 newRecord->setEnabled(
true);
482 deleteEntry->setEnabled(
true);
483 deleteRecord->setEnabled(
true);
484 records->setEnabled(
true);
488 db->addEntry( value );
489 changeRecord( records->value() );
490 dbList->updateItems();
495void KWClassicMailMergeEditor::addRecord()
498 records->setRange( records->minValue(), records->maxValue() + 1 );
499 records->setValue( db->getNumRecords() );
504void KWClassicMailMergeEditor::removeEntry()
506 TQListViewItem * item = dbList->selectedItem ();
509 db->removeEntry( item->text(0) );
511 changeRecord( records->value() );
512 dbList->updateItems();
515#if defined( TQ_CC_GNU )
534void KWClassicMailMergeEditor::removeRecord()
536 if ( db->getNumRecords() == 0 )
539 db->removeRecord( records->value() - 1 );
540 dbList->invalidateCurrentRecord();
541 if ( db->getNumRecords() > 0 ) {
542 records->setRange( records->minValue(), records->maxValue() - 1 );
543 records->setValue( 1 );
545 dbList->updateItems();
549 records->setEnabled(
false );
552 if ( db->getNumRecords() == 0 )
554 newRecord->setEnabled(
false);
555 deleteEntry->setEnabled(
false);
556 deleteRecord->setEnabled(
false);
557 records->setEnabled(
true);
564 KWORD_MAILMERGE_EXPORT KWMailMergeDataSource *create_kwmailmerge_classic(TDEInstance *inst,TQObject *parent)
566 return new KWClassicSerialDataSource(inst,parent);