|
|
//*************************************************************************** /* * 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 TOTEMPLATE_H #define TOTEMPLATE_H #include "tobackground.h" #include "tohelp.h" #include "toresultview.h" #include <list> #include <map> #include <qvbox.h> class QListView; class QListViewItem; class QSplitter; class QTextView; class QToolBar; class toConnection; class toListView; class toTemplateItem; class toTemplateProvider; class toNoBlockQuery; /** Not part of the API. * @internal */ class toTemplate : public QVBox, public toHelpContext { Q_OBJECT QToolBar *Toolbar; toListView *List; QWidget *WidgetExtra; QWidget *Result; QVBox *Frame; public: toTemplate(TODock *parent); virtual ~toTemplate(); void setWidget(QWidget *widget); QWidget *widget(void) { return WidgetExtra; } QWidget *frame(void); static QWidget *parentWidget(QListViewItem *item); static toTemplate *templateWidget(QListViewItem *item); static toTemplate *templateWidget(QListView *obj); static bool templateShown(); virtual bool canHandle(toConnection &) { return true; } void closeFrame(void); void showResult(bool show); void hideEvent(QHideEvent *); void showEvent(QShowEvent *); public slots: void expand(QListViewItem *item); void collapse(QListViewItem *item); void selected(QListViewItem *item); }; /** * This is the base class of a provider of template items. Usually it is created with * a static object just like the tools. It can also be assumed that a maximum of one * template window will be opened. */ class toTemplateProvider { /** List of currently available template providers. */ static std::list<toTemplateProvider *> *Providers; static bool Shown; static QCString *ToolKey;; QCString Name; bool Open; public: toTemplateProvider(const QCString &name); virtual ~toTemplateProvider() { } /** Get name of this template provider. */ const QCString name() { return Name; } /** Insert a parent item for this template provider into a list view. * @param parent The list into which to insert the item. * @param toolbar The template toolbar if any buttons are to be added on it. */ virtual void insertItems(QListView *parent,QToolBar *toolbar)=0; /** Save settings for this template provider. * @param data Map of data. * @param prefix Prefix of where to save info. */ virtual void exportData(std::map<QCString,QString> &data,const QCString &prefix); /** Save settings for all template providers. * @param data Map of data. * @param prefix Prefix of where to save info. */ static void exportAllData(std::map<QCString,QString> &data,const QCString &prefix); /** Import data * @param data Data to read from a map. * @param prefix Prefix to read data from. */ virtual void importData(std::map<QCString,QString> &data,const QCString &prefix); /** Import data for all template providers. * @param data Data to read from a map. * @param prefix Prefix to read data from. */ static void importAllData(std::map<QCString,QString> &data,const QCString &prefix); /** Used internally to indicate if template help is shown. */ static void setShown(bool shown); /** Used internally to indicate tool key string */ static void setToolKey(const QCString &key); friend class toTemplate; }; /** This is an item that is contained in a template. It is different in the expand and * collapse methods that are called when this item is expanded or collapsed from the * template widget. */ class toTemplateItem : public toResultViewItem { /** The provider responsible for this item. */ toTemplateProvider &Provider; public: /** Create an item. * @param prov Provider for this item. * @param parent Parent of this item. * @param name Contents of the first column of the item. */ toTemplateItem(toTemplateProvider &prov,QListView *parent,const QString &name) : toResultViewItem(parent,NULL,name),Provider(prov) { } /** Create an item. * @param parent Parent of this item. * @param name Contents of the first column of the item. * @param after The item to put this item after. */ toTemplateItem(toTemplateItem *parent,const QString &name,QListViewItem *after=NULL) : toResultViewItem(parent,after,name),Provider(parent->provider()) { } /** Get a reference to the provider of this item. * @return Reference to provider. */ toTemplateProvider &provider(void) { return Provider; } /** This function is called when the item is expanded and can be used to fill up the * list when needed. */ virtual void expand(void) { } /** This function is called when the item is selected by doubleclicking or pressing return. */ virtual void selected(void) { } /** This function is called when the item is collapsed. */ virtual void collapse(void) { } /** This function can be used to return a widget that is displays extra information for * this item. Return NULL if no widget is to be displayed. The widget will be deleted * when this item is no longer shown. */ virtual QWidget *selectedWidget(QWidget *parent); /** Reimplemented for internal reasons. */ virtual void setSelected(bool sel); }; /** This class represent a template item that have an extra text to describe it if it is * selected. */ class toTemplateText : public toTemplateItem { /** The note to display. */ const QString Note; public: /** Create an item. * @param parent Parent of this item. * @param name Contents of the first column of the item. * @param note Extra text to display if item is selected. */ toTemplateText(toTemplateItem *parent,const QString &name,const QString ¬e) : toTemplateItem(parent,name), Note(note) { } /** Reimplemented for internal reasons. */ virtual QWidget *selectedWidget(QWidget *parent); }; class toTemplateSQL; /** Used by toTemplateSQL. Only for internal use. * @internal */ class toTemplateSQLObject : public QObject { Q_OBJECT toNoBlockQuery *Query; toBackground Poll; toTemplateSQL *Parent; toTemplateSQLObject(toTemplateSQL *parent); virtual ~toTemplateSQLObject(); void expand(void); friend class toTemplateSQL; private slots: void poll(void); }; /** This class represent an item that when expanded will execute an SQL statement * and create child items which are the result of the query. */ class toTemplateSQL :public toTemplateItem { toTemplateSQLObject Object; /** Connection to run statement in */ toConnection *Connection; /** Statement to run. */ QString SQL; protected: /** Create an item. * @param conn Connection to query. * @param parent Parent of this item. * @param name Contents of the first column of the item. * @param sql SQL statement, observe that it is in @ref QCString format and you * should use utf8 if converting from QString. */ toTemplateSQL(toTemplateItem *parent, const QString &name,const QString &sql); public: /** Create an item. * @param conn Connection to query. * @param parent Parent of this item. * @param name Contents of the first column of the item. * @param sql SQL statement, observe that it is in @ref QCString format and you * should use utf8 if converting from QString. */ toTemplateSQL(toConnection &conn,toTemplateItem *parent, const QString &name,const QString &sql); /** Get connection of this item. * @return Reference to connection. */ virtual toConnection &connection() { return *Connection; } /** Create a child of this item. * @param name Name of the child. * @return A newly created item. */ virtual toTemplateItem *createChild(const QString &name) { return new toTemplateItem(this,name); } /** Get parameters to pass to query. * @return List of strings to pass as input parameters to query */ virtual toQList parameters(void) { toQList ret; return ret; } /** Reimplemented for internal reasons. */ virtual void expand(void); friend class toTemplateSQLObject; }; #endif