/* This file is part of the KDE project Copyright (C) 2001 Joseph Wenninger 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 "KWQtSqlPowerSerialDataSource.h" #include "KWQtSqlPowerSerialDataSource.moc" #include "KWQtSqlMailMergeOpen.h" #include #include #include #include #include #include #include #include #include #include #include #include #define KWQtSqlBarIcon( x ) BarIcon( x, db->KWInstance() ) /****************************************************************** * * Class: KWQtSqlSerialDataSource * ******************************************************************/ KWQtSqlPowerSerialDataSource::KWQtSqlPowerSerialDataSource(KInstance *inst,TQObject *tqparent) : KWQtSqlSerialDataSourceBase(inst,tqparent),myquery(0) { port=i18n("default"); } KWQtSqlPowerSerialDataSource::~KWQtSqlPowerSerialDataSource() { if (myquery) delete myquery; TQSqlDatabase::removeDatabase("KWTQTSQLPOWER"); } void KWQtSqlPowerSerialDataSource::refresh(bool force) { if ((force) || (myquery==0)) { if (myquery) { delete myquery; myquery=0; } TQString tmp=query.upper(); if (!tmp.startsWith("SELECT")) return; if ((!database) || (!database->isOpen()))openDatabase(); myquery=new KWMySqlCursor(query,true,database); myquery->setMode(TQSqlCursor::ReadOnly); } kdDebug()<size())< (int)myquery->size() ) return name; if (!myquery->seek(num,false)) return i18n(">>>Illegal position within datasource<<<"); if (!myquery->contains(name)) return i18n(">>>Field %1 is unknown in the current database query<<<").tqarg(name); return (myquery->value(name)).toString(); } void KWQtSqlPowerSerialDataSource::save( TQDomDocument &doc, TQDomElement &tqparent) { TQDomElement def=doc.createElement(TQString::tqfromLatin1("DEFINITION")); tqparent.appendChild(def); { TQDomElement defEnt=doc.createElement(TQString::tqfromLatin1("DATABASE")); defEnt.setAttribute(TQString::tqfromLatin1("hostname"),hostname); defEnt.setAttribute(TQString::tqfromLatin1("port"),port); defEnt.setAttribute(TQString::tqfromLatin1("driver"),driver); defEnt.setAttribute(TQString::tqfromLatin1("databasename"),databasename); defEnt.setAttribute(TQString::tqfromLatin1("username"),username); def.appendChild(defEnt); defEnt=doc.createElement(TQString::tqfromLatin1("TQUERY")); defEnt.setAttribute(TQString::tqfromLatin1("value"),query); def.appendChild(defEnt); TQDomElement sampleEnt=doc.createElement(TQString::tqfromLatin1("SAMPLERECORD")); tqparent.appendChild(sampleEnt); for (DbRecord::Iterator it=sampleRecord.begin();it!=sampleRecord.end();++it) { TQDomElement fieldEnt=doc.createElement(TQString::tqfromLatin1("FIELD")); fieldEnt.setAttribute(TQString::tqfromLatin1("name"),it.key()); sampleEnt.appendChild(fieldEnt); } } } void KWQtSqlPowerSerialDataSource::load( TQDomElement& parentElem ) { clearSampleRecord(); TQDomNode defNd=parentElem.namedItem("DEFINITION"); if (!defNd.isNull()) { TQDomElement def=defNd.toElement(); TQDomNode dbNd=def.namedItem("DATABASE"); if (!dbNd.isNull()) { TQDomElement dbEnt=dbNd.toElement(); if (dbEnt.tagName()==TQString::tqfromLatin1("DATABASE")) { hostname=dbEnt.attribute(TQString::tqfromLatin1("hostname")); port=dbEnt.attribute(TQString::tqfromLatin1("port")); driver=dbEnt.attribute(TQString::tqfromLatin1("driver")); databasename=dbEnt.attribute(TQString::tqfromLatin1("databasename")); username=dbEnt.attribute(TQString::tqfromLatin1("username")); } } TQDomNode queryNd=def.namedItem("TQUERY"); if (!queryNd.isNull()) { query=queryNd.toElement().attribute(TQString::tqfromLatin1("value")); } } defNd=parentElem.namedItem("SAMPLERECORD"); if (!defNd.isNull()) { TQDomElement def1=defNd.toElement(); for (TQDomElement defEnt=defNd.firstChild().toElement();!defEnt.isNull();defEnt=defEnt.nextSibling().toElement()) { addSampleRecordEntry(defEnt.attribute(TQString::tqfromLatin1("name"))); } } } bool KWQtSqlPowerSerialDataSource::showConfigDialog(TQWidget *par,int action) { bool ret=false; if (action==KWSLEdit) { if ((!database) || (!database->isOpen()))openDatabase(); KWQtSqlPowerMailMergeEditor *dia=new KWQtSqlPowerMailMergeEditor(par,this); ret=dia->exec(); delete dia; } else ret=KWQtSqlSerialDataSourceBase::showConfigDialog(par,action); return ret; } void KWQtSqlPowerSerialDataSource::clearSampleRecord() {sampleRecord.clear();} void KWQtSqlPowerSerialDataSource::addSampleRecordEntry(TQString name) {sampleRecord[name]=name; }//i18n("No Value");} /****************************************************************** * * Class: KWQtSqlMailMergeEditor * ******************************************************************/ KWQtSqlPowerMailMergeEditor::KWQtSqlPowerMailMergeEditor( TQWidget *tqparent, KWQtSqlPowerSerialDataSource *db_ ) :KDialogBase( Plain, i18n( "Mail Merge - Editor" ), Ok | Cancel, Ok, tqparent, "", true ), db( db_ ) { (new TQVBoxLayout(plainPage()))->setAutoAdd(true); setMainWidget(widget=new KWQtSqlPowerWidget(plainPage())); connect(widget->setup,TQT_SIGNAL(clicked()),this,TQT_SLOT(openSetup())); connect(widget->tables,TQT_SIGNAL(currentChanged(TQListBoxItem*)),this,TQT_SLOT(slotTableChanged(TQListBoxItem*))); connect(widget->execute,TQT_SIGNAL(clicked()),this,TQT_SLOT(slotExecute())); connect(this,TQT_SIGNAL(okClicked()),this,TQT_SLOT(slotSetQuery())); widget->query->setText(db->query); updateDBViews(); } void KWQtSqlPowerMailMergeEditor::slotSetQuery() { db->query=widget->query->text(); db->refresh(true); } void KWQtSqlPowerMailMergeEditor::slotExecute() { if (!db->database) if (!db->openDatabase()) return; TQString tmp=widget->query->text().upper(); if (!tmp.startsWith("SELECT")) return; KWMySqlCursor *cur=new KWMySqlCursor(widget->query->text(),true,db->database); cur->setMode(TQSqlCursor::ReadOnly); db->clearSampleRecord(); kdDebug()<count())<count();i++) db->addSampleRecordEntry(cur->fieldName(i)); widget->queryresult->setSqlCursor(cur,true,true); widget->queryresult->refresh(TQDataTable::RefreshAll); } void KWQtSqlPowerMailMergeEditor::slotTableChanged ( TQListBoxItem * item ) { widget->fields->clear(); if (item) { if (!db->database) return; TQSqlRecord rec=db->database->record(item->text()); for (uint i=0;ifields->insertItem(rec.fieldName(i)); } } } void KWQtSqlPowerMailMergeEditor::openSetup() { KWQtSqlMailMergeOpen *dia=new KWQtSqlMailMergeOpen(this,db); if (dia->exec()) { db->openDatabase(); updateDBViews(); } delete dia; } void KWQtSqlPowerMailMergeEditor::updateDBViews() { widget->fields->clear(); widget->tables->clear(); if (!db->database) return; widget->tables->insertStringList(db->database->tables()); } KWQtSqlPowerMailMergeEditor::~KWQtSqlPowerMailMergeEditor(){;} extern "C" { KWORD_MAILMERGE_EXPORT KWMailMergeDataSource *create_kwmailmerge_qtsqldb_power(KInstance *inst,TQObject *tqparent) { return new KWQtSqlPowerSerialDataSource(inst,tqparent); } }