diff options
Diffstat (limited to 'filters/kspread/kexi/kspread_kexiimportdialog.cpp')
-rw-r--r-- | filters/kspread/kexi/kspread_kexiimportdialog.cpp | 236 |
1 files changed, 236 insertions, 0 deletions
diff --git a/filters/kspread/kexi/kspread_kexiimportdialog.cpp b/filters/kspread/kexi/kspread_kexiimportdialog.cpp new file mode 100644 index 000000000..0e15acbe7 --- /dev/null +++ b/filters/kspread/kexi/kspread_kexiimportdialog.cpp @@ -0,0 +1,236 @@ +/*************************************************************************** + * Copyright (C) 2006 by Adam Pigg * + * adam@piggz.co.uk * + * * + * Based on insert calendar code: * + * Copyright (C) 2005 by Raphael Langerhorst * + * raphael-langerhorst@gmx.at * + * * + * Permission is hereby granted, free of charge, to any person obtaining * + * a copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, sublicense, and/or sell copies of the Software, and to * + * permit persons to whom the Software is furnished to do so, subject to * + * the following conditions: * + * * + * The above copyright notice and this permission notice shall be * + * included in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.* + * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR * + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * + * OTHER DEALINGS IN THE SOFTWARE. * + ***************************************************************************/ + +#include "kspread_kexiimportdialog.h" + +//KDE Includes +#include <kdebug.h> +#include <tdeglobal.h> +#include <kpushbutton.h> +#include <tdelistview.h> +#include <kcombobox.h> +#include <tqradiobutton.h> +#include <tqtextedit.h> +#include <tqcheckbox.h> +#include <tdelocale.h> + +//Kexi Includes +#include <kexidb/global.h> +#include <kexidb/kexidb_export.h> +#include <kexidb/connectiondata.h> +#include <kexidb/connection.h> +#include <kexidb/drivermanager.h> +#include <kexidb/driver.h> + +//KSpread includes +#include <kspread_view.h> +#include <kspread_doc.h> +#include <kspread_map.h> + +/** + * Constructor + * @param parent Pointer to kspread view + * @param name Name of the dialog + * @return None + */ + KSpreadKexiImportDialog::KSpreadKexiImportDialog(TQWidget* parent, const char* name) + : KSpreadKexiImportDialogBase(parent,name) +{ + connect(this->m_insertButton,TQT_SIGNAL(clicked()),this,TQT_SLOT(accept())); + connect(this->m_cancelButton,TQT_SIGNAL(clicked()),this,TQT_SLOT(reject())); +} + +/** + * Destructor + * @return None + */ +KSpreadKexiImportDialog::~KSpreadKexiImportDialog() +{} + +/** + * Accepts the dialog and start the import process + */ +void KSpreadKexiImportDialog::accept() +{ + kdDebug() << "insert kexi data dialog accepted (insert button clicked)" << endl; + done(TQDialog::Accepted); + emit insertKexi(); +} + +/** + * Cancels the dialog + */ +void KSpreadKexiImportDialog::reject() +{ + kdDebug() << "insert kexi data dialog rejected (cancel button clicked)" << endl; + done(TQDialog::Rejected); +} + +/** + * Opens a database given either a filename or connection data + * @param fileName name of file to open if cdata is null + * @param cdata connection data to server based database...not implemented though + */ +void KSpreadKexiImportDialog::openDatabase( TQString fileName , KexiDB::ConnectionData *cdata) +{ + kdDebug() << "openDatabase" << endl; + KexiDB::Driver *dr; + KexiDB::DriverManager *dm; + KexiDB::ConnectionData cd; + + //Open file db + dm = new KexiDB::DriverManager(); + dr = dm->driver("sqlite3"); + if (!dr) + { + kdDebug() << "Unable to create driver" << endl; + return; + } + + if (cdata) + { + //Open server db + cd = *cdata; + } + else + { + if (!fileName.isEmpty()) + { + cd.setFileName(fileName); + } + else + { + kdDebug() << "No file name" << endl; + KMessageBox::error(NULL, i18n("No file specified"), i18n("Error")); + return; + } + } + + conn = dr->createConnection(cd); + + if (!conn) + { + KMessageBox::error(NULL, i18n("Error creating connection"), i18n("Error")); + return; + } + + if(!conn->connect()) + { + KMessageBox::error(NULL, i18n("Error connecting to database"), i18n("Error")); + conn->debugError(); + return; + } + + if (!conn->useDatabase( fileName )) + { + KMessageBox::error(NULL, i18n("Error using database"), i18n("Error")); + conn->debugError(); + return; + } + + populateTables(); + +} + +/** + * Gets all the tables and queries from the database + * and adds them to m_sourceList + */ +void KSpreadKexiImportDialog::populateTables() +{ + TQValueList<int> tids; + TQValueList<int> qids; + + kdDebug() << "Getting Tables and Queries" << endl; + tids = conn->objectIds(KexiDB::TableObjectType); + qids = conn->objectIds(KexiDB::QueryObjectType); + + kdDebug() << qids.count() << " queries " << tids.count() << " tables" << endl; + + TQValueList<int>::iterator it; + + for ( it = tids.begin(); it != tids.end(); ++it ) + { + (void) new TDEListViewItem(m_sourceList,"Table", conn->tableSchema(*it)->name()); + kdDebug() << "Table ID:" << (*it) << " " << conn->tableSchema(*it)->name()<< endl; + } + + for ( it = qids.begin(); it != qids.end(); ++it ) + { + (void) new TDEListViewItem(m_sourceList,"Query", conn->querySchema(*it)->name()); + kdDebug() << "Query ID:" << (*it) << " " << conn->querySchema(*it)->name() << endl; + } + + //Select the first item + if(m_sourceList->firstChild()) + { + m_sourceList->setSelected(m_sourceList->firstChild(), true); + } + +} + +/** + * + * @return the custom query that has been entered + */ +TQString KSpreadKexiImportDialog::customQueryString() +{ + return m_CustomQueryText->text(); +} + +TQPtrList<TQListViewItem> KSpreadKexiImportDialog::selectedItems() +{ + TQPtrList<TQListViewItem> lst; + TQListViewItemIterator it( m_sourceList ); + while ( it.current() ) + { + if ( it.current()->isSelected() ) + lst.append( it.current() ); + ++it; + } + return lst; +} + +bool KSpreadKexiImportDialog::customQuery() +{ + return m_customQueryCheck->isChecked(); +} +/** + * Returns the user specified option for data conversion + * @return integer stating the type of cenverion to make + */ +int KSpreadKexiImportDialog::conversion() +{ + if ( m_convKSRadio->isChecked()) + return 1; + else if ( m_convTextRadio->isChecked()) + return 2; + else + return -1; +} + |