// This is the SIP interface definition for QDataTable.
//
// Copyright (c) 2007
// 	Riverbank Computing Limited <info@riverbankcomputing.co.uk>
// 
// This file is part of PyQt.
// 
// This copy of PyQt 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; either version 2, or (at your option) any later
// version.
// 
// PyQt is supplied 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
// PyQt; see the file LICENSE.  If not, write to the Free Software Foundation,
// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.


%ExportedDoc
<Sect2><Title>QDataTable (Qt v3+)</Title>
<Para>
<Literal>QDataTable</Literal> is fully implemented.
</Para>
</Sect2>
%End


%If (Qt_3_0_0 -)

class QDataTable : QTable
{
%TypeHeaderCode
#include <qdatatable.h>
%End

public:
	QDataTable(QWidget* /TransferThis/ = 0,const char * = 0);
	QDataTable(QSqlCursor *,bool = 0,QWidget * /TransferThis/ = 0,
		   const char * = 0);

	virtual void addColumn(const QString &,const QString & = QString::null,
			       int = -1,const QIconSet & = QIconSet());
	virtual void removeColumn(uint);
	virtual void setColumn(uint,const QString &,
			       const QString & = QString::null,int = -1,
			       const QIconSet & = QIconSet());

	QString nullText() const;
	QString trueText() const;
	QString falseText() const;
	DateFormat dateFormat() const;
	bool confirmEdits() const;
	bool confirmInsert() const;
	bool confirmUpdate() const;
	bool confirmDelete() const;
	bool confirmCancels() const;
	bool autoDelete() const;
	bool autoEdit() const;
	QString filter() const;
	QStringList sort() const;

	virtual void setSqlCursor(QSqlCursor * /GetWrapper/ = 0,bool = 0,bool = 0);
%MethodCode
		Py_BEGIN_ALLOW_THREADS
		sipSelfWasArg ? sipCpp->QDataTable::setSqlCursor(a0, a1, a2) : sipCpp->setSqlCursor(a0, a1, a2);
		Py_END_ALLOW_THREADS

		// Transfer ownership of the cursor if the autoDelete flag is
		// set.
		if (a0 && a2)
			sipTransferTo(a0Wrapper,sipSelf);
%End

	QSqlCursor *sqlCursor() const;

	virtual void setNullText(const QString &);
	virtual void setTrueText(const QString &);
	virtual void setFalseText(const QString &);
	virtual void setDateFormat(const DateFormat);
	virtual void setConfirmEdits(bool);
	virtual void setConfirmInsert(bool);
	virtual void setConfirmUpdate(bool);
	virtual void setConfirmDelete(bool);
	virtual void setConfirmCancels(bool);
	virtual void setAutoDelete(bool);
	virtual void setAutoEdit(bool);
	virtual void setFilter(const QString &);
	virtual void setSort(const QStringList &);
	virtual void setSort(const QSqlIndex &);

	enum Refresh {
		RefreshData,
		RefreshColumns,
		RefreshAll
	};

	void refresh(Refresh);
	void sortColumn(int,bool = 1,bool = 0);
	QString text(int,int) const;
	QVariant value(int,int) const;
	QSqlRecord *currentRecord() const;

	void installEditorFactory(QSqlEditorFactory * /Transfer/);
	void installPropertyMap(QSqlPropertyMap * /Transfer/);

	int numCols() const;
	int numRows() const;
	void setNumCols(int);
	void setNumRows(int);
	bool findBuffer(const QSqlIndex &,int = 0);

%If (Qt_3_2_0 -)
	void hideColumn(int);
	void showColumn(int);
%End

signals:
	void currentChanged(QSqlRecord *);
	void primeInsert(QSqlRecord *);
	void primeUpdate(QSqlRecord *);
	void primeDelete(QSqlRecord *);
	void beforeInsert(QSqlRecord *);
	void beforeUpdate(QSqlRecord *);
	void beforeDelete(QSqlRecord *);
	void cursorChanged(QSql::Op);

public slots:
	virtual void find(const QString &,bool,bool);
	virtual void sortAscending(int);
	virtual void sortDescending(int);
	virtual void refresh();
	void setColumnWidth(int,int);
%If (Qt_3_0_5 -)
	void adjustColumn(int);
	void setColumnStretchable(int,bool);
%End
%If (Qt_3_1_0 -)
	void swapColumns(int,int,bool = 0);
%End

protected:
	virtual bool insertCurrent();
	virtual bool updateCurrent();
	virtual bool deleteCurrent();

	virtual QSql::Confirm confirmEdit(QSql::Op);
	virtual QSql::Confirm confirmCancel(QSql::Op);

	virtual void handleError(const QSqlError &);

	virtual bool beginInsert();
	virtual QWidget *beginUpdate(int,int,bool);

	bool eventFilter(QObject *,QEvent *);
%If (Qt_3_2_0 -)
	void keyPressEvent(QKeyEvent *);
%End
	void resizeEvent(QResizeEvent *);
	void contentsMousePressEvent(QMouseEvent *);
	void contentsContextMenuEvent(QContextMenuEvent *);
	void endEdit(int,int,bool,bool);

	// We don't specify /Factory/ for this because the returned QWidget
	// will always have a parent which will own it.
	QWidget *createEditor(int,int,bool) const;

	void activateNextCell();
	int indexOf(uint) const;
	void reset();
	void setSize(QSqlCursor *);
	void repaintCell(int,int);
	void paintCell(QPainter *,int,int,const QRect &,bool,
		       const QColorGroup &);
	virtual void paintField(QPainter *,const QSqlField *,const QRect &,
				bool);
%If (Qt_3_1_0 -)
	void drawContents(QPainter *,int,int,int,int);
%End
	virtual int fieldAlignment(const QSqlField *);
	void columnClicked(int);
	void resizeData(int);

	QTableItem *item(int,int) const;
	void setItem(int,int,QTableItem *);
	void clearCell(int,int);
	void setPixmap(int,int,const QPixmap &);
	void takeItem(QTableItem *);

private:
	QWidget *beginEdit(int,int,bool);

%If (Qt_3_1_0 -)
	QDataTable(const QDataTable &);
%End
};

%End
