//***************************************************************************
/*
* TOra - An Oracle Toolkit for DBA's and developers
* Copyright (C) 2003 Quest Software, Inc
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; only version 2 of
* the License is valid for this program.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* As a special exception, you have permission to link this program
* with the Oracle Client libraries and distribute executables, as long
* as you follow the requirements of the GNU GPL in regard to all of the
* software in the executable aside from Oracle client libraries.
*
* Specifically you are not permitted to link this program with the
* Qt/UNIX, Qt/Windows or Qt Non Commercial products of TrollTech.
* And you are not permitted to distribute binaries compiled against
* these libraries without written consent from Quest Software, Inc.
* Observe that this does not disallow linking to the Qt Free Edition.
*
* All trademarks belong to their respective owners.
*
****************************************************************************/
#ifndef TORESULT_H
#define TORESULT_H
#include "toqvalue.h"
#include "tosql.h"
#include <list>
#include <qobject.h>
class QTabWidget;
class toConnection;
class toResult;
class toTimer;
/** Used for getting slots into toResult.
* @internal
*/
class toResultObject : public QObject {
Q_OBJECT
toResult *Result;
public:
toResultObject(toResult *result)
: Result(result)
{ }
public slots:
/** Called when connection is changed. Be sure to call the parent if you reimplement this.
*/
virtual void connectionChanged(void);
/** Called when timer times out
*/
virtual void setup(void);
};
/** Abstract baseclass of widgets that can perform queries. Usefull because you can execute
* the query without knowing how it's UI is presented.
*/
class toResult {
toResultObject Slots;
bool Handled;
QTabWidget *Tabs;
int TabIndex;
QString TabLabel;
QWidget *TabWidget;
QString SQL;
bool QueryReady;
toQList Params;
bool FromSQL;
QString Name;
protected:
/** Set parameters of last query.
*/
void setParams(const toQList &par)
{ Params=par; QueryReady=true; }
/** Set SQL and parameters and return false if query shouldn't be reexecuted.
*/
bool setSQLParams(const QString &sql,const toQList &par);
public:
/** Get the current connection from the closest tool.
* @return Reference to connection.
*/
toConnection &connection(void);
/** Get the timer associated with the closest tool.
* @return Pointer to tool timer.
*/
toTimer *timer(void);
toResult(void);
virtual ~toResult()
{ }
/** Erase last parameters
*/
virtual void clearParams(void)
{ Params.clear(); QueryReady=false; }
/** Re execute last query
*/
virtual void refresh(void);
/** Perform a query.
* @param sql Execute an SQL statement.
* @param params Parameters needed as input to execute statement.
*/
virtual void query(const QString &sql,const toQList ¶ms) = 0;
/** Reexecute with changed parameters.
* @param Param1 First parameter.
*/
virtual void changeParams(const QString &Param1);
/** Reexecute with changed parameters.
* @param Param1 First parameter.
* @param Param1 Second parameter.
*/
virtual void changeParams(const QString &Param1,const QString &Param2);
/** Reexecute with changed parameters.
* @param Param1 First parameter.
* @param Param2 Second parameter.
* @param Param3 Third parameter.
*/
virtual void changeParams(const QString &Param1,const QString &Param2,const QString &Param3);
/** Reimplemented for internal reasons.
*/
virtual bool canHandle(toConnection &)
{ return false; }
/** Get last parameters used.
* @return Don't modify the list returned.
*/
toQList ¶ms(void)
{ return Params; }
/** Check if this result is handled by the current connection
*/
bool handled(void)
{ return Handled; }
/** Indicate that this result can not be handled even though indicated otherwise
*/
void setHandle(bool);
/** Indicate what tabbed widget to disable page if not immediate parent if this
* result is not handled.
*/
void setTabWidget(QTabWidget *tab)
{ Tabs=tab; }
/** Set the SQL statement of this list
* @param sql String containing statement.
*/
void setSQL(const QString &sql)
{ SQL=sql; }
/** Set the SQL statement of this list. This will also affect @ref Name.
* @param sql SQL containing statement.
*/
void setSQL(const toSQL &sql);
/** Set new SQL and run query.
* @param sql New sql.
* @see setSQL
*/
void query(const QString &sql);
/** Set new SQL and run query.
* @param sql New sql.
* @see setSQL
*/
void query(const toSQL &sql);
/** Set new SQL and run query.
* @param sql New sql.
* @see setSQL
*/
void query(const toSQL &sql,toQList &par);
/** Get SQL to execute
*/
QString sql(void)
{ return SQL; }
/** Get SQL name of list.
*/
virtual QString sqlName(void)
{ return Name; }
/** Set SQL name of list.
*/
virtual void setSQLName(const QString &name)
{ Name=name; }
friend class toResultObject;
protected:
/** Called when connection is changed. Be sure to call the parent if you reimplement this.
*/
virtual void connectionChanged(void);
private:
void changeHandle(void);
};
#endif