29#include "kspread_kexiimport.h"
31#include "kspread_kexiimportdialog.h"
34#include <kspread_view.h>
35#include <kspread_doc.h>
37#include <kspread_sheet.h>
38#include <kspread_map.h>
39#include <kspread_style.h>
42#include <KoFilterChain.h>
43#include <KoFilterManager.h>
44#include <kofficeversion.h>
47#include <kexidb/cursor.h>
48#include <kexidb/connection.h>
49#include <kexidb/parser/parser.h>
52#include <kgenericfactory.h>
54#include <tdemessagebox.h>
55#include <tdelistview.h>
58typedef KGenericFactory<KSpreadKexiImport, KoFilter> KSpreadKexiImportFactory;
59K_EXPORT_COMPONENT_FACTORY( libkspreadkexiimport, KSpreadKexiImportFactory(
"kofficefilters" ) )
64KSpreadKexiImport::KSpreadKexiImport(KoFilter *parent, const
char *name, const TQStringList&)
70KSpreadKexiImport::~KSpreadKexiImport()
77KoFilter::ConversionStatus KSpreadKexiImport::convert(
const TQCString& from,
const TQCString& to )
79 TQPtrList<TQListViewItem> objects;
80 TQString file( m_chain->inputFile() );
83 m_dialog =
new KSpreadKexiImportDialog();
85 m_dialog->openDatabase( file, 0);
86 if (!m_dialog->exec())
88 return KoFilter::UserCancelled;
91 objects = m_dialog->selectedItems();
93 kdDebug() <<
"Getting Documents..." << endl;
95 KoDocument* document = m_chain->outputDocument();
98 return KoFilter::StupidError;
100 kdDebug() <<
"here we go... " << document->className() << endl;
102 if ( !::tqt_cast<const KSpread::Doc *>( document ) )
104 kdWarning() <<
"document isn't a KSpread::Doc but a " << document->className() << endl;
105 return KoFilter::NotImplemented;
107 if(from!=
"application/x-kexiproject-sqlite3" || to!=
"application/x-kspread")
109 kdWarning() <<
"Invalid mimetypes " << from <<
" " << to << endl;
110 return KoFilter::NotImplemented;
113 ksdoc =
static_cast<KSpread::Doc *
>( document );
115 if(ksdoc->mimeType()!=
"application/x-kspread")
117 kdWarning() <<
"Invalid document mimetype " << ksdoc->mimeType() << endl;
118 return KoFilter::NotImplemented;
121 document->emitBeginOperation();
124 for(itm = objects.first(); itm ; itm = objects.next())
126 if (!insertObject(itm->text(1), itm->text(0)))
128 return KoFilter::StupidError;
131 if (m_dialog->customQuery())
133 if (!insertObject(m_dialog->customQueryString(),
"Custom"))
135 return KoFilter::StupidError;
139 document->emitEndOperation();
140 kdDebug() <<
"inserting kexi data completed" << endl;
144bool KSpreadKexiImport::insertObject(
const TQString&
object,
const TQString& type)
146 TQStringList fieldNames;
147 KSpread::Sheet *sheet;
148 KexiDB::Parser *parser;
149 KexiDB::QuerySchema *query;
151 sheet = ksdoc->map()->addNewSheet();
154 KMessageBox::error(NULL, i18n(
"Cant find sheet"), i18n(
"Error"));
158 if (type ==
"Custom")
160 sheet->setSheetName(
"Custom");
164 sheet->setSheetName(
object);
170 fieldNames = m_dialog->connection()->tableSchema(
object)->names();
172 else if (type ==
"Query")
175 fieldNames = m_dialog->connection()->querySchema(
object)->names();
177 else if (type ==
"Custom")
179 parser =
new KexiDB::Parser(m_dialog->connection());
180 parser->parse(
object );
182 if (parser->operation() != KexiDB::Parser::OP_Select)
184 KMessageBox::error(NULL, i18n(
"Your query was invalid or not a SELECT query"), i18n(
"Error"));
187 query = parser->query();
188 fieldNames = query->names();
192 TQStringList::iterator it;
194 for (it = fieldNames.begin(); it != fieldNames.end(); ++it, ++i)
196 KSpread::Cell *c = sheet->nonDefaultCell(i ,1);
197 c->setCellText(*it,
true);
198 c->format()->setBgColor(TQColor(200,200,200));
199 c->format()->setTextFontBold(
true);
206 cur = m_dialog->connection()->executeQuery( *(m_dialog->connection()->tableSchema(
object)));
208 else if (type ==
"Query")
210 cur = m_dialog->connection()->executeQuery( *(m_dialog->connection()->querySchema(
object)));
212 else if (type ==
"Custom")
214 cur = m_dialog->connection()->executeQuery( *query );
223 KMessageBox::error(NULL, i18n(
"Error executing query"), i18n(
"Error"));
228 int j = cur->fieldCount();
233 if(m_dialog->conversion() == 2)
238 for (i = 0; i < j; ++i)
240 sheet->nonDefaultCell(i+1 ,k)->setCellText(cur->value(i).toString(), asText);
243 kdDebug() << k << endl;
249#include "kspread_kexiimport.moc"