// NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
// Copyright (C) 2010  Winch Gate Property Limited
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// 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 Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

#ifndef NLQT_GRAPHICS_VIEWPORT_H
#define NLQT_GRAPHICS_VIEWPORT_H
#include <nel/misc/types_nl.h>

// STL includes

// Qt includes
#include <QtGui/QWidget>

// NeL includes
#include <nel/misc/config_file.h>
#include <nel/misc/rgba.h>

// Project includes

class QAction;

namespace NL3D {
	class UDriver;
	class UTextContext;
	class UScene;
}

namespace NLQT {
	class CGraphicsConfig;
	class CInternationalization;

/**
 * CGraphicsViewport
 * \brief CGraphicsViewport
 * \date 2010-02-06 10:11GMT
 * \author Jan Boon (Kaetemi)
 */
class CGraphicsViewport : public QWidget
{
	Q_OBJECT

public:
	CGraphicsViewport(QWidget *parent);
	virtual ~CGraphicsViewport();

	virtual QPaintEngine* paintEngine() const { return NULL; }

	void init(CGraphicsConfig *graphicsConfig);
	void release();

	void updateInput();
	void renderDriver();
	void renderDebug2D();

	QAction *createSaveScreenshotAction(QObject *parent);

	void saveScreenshot(const std::string &name, bool jpg, bool png, bool tga);

	inline NL3D::UDriver *getDriver() { return m_Driver; }
	inline NL3D::UTextContext *getTextContext() { return m_TextContext; }
	inline NL3D::UScene *getScene() { return m_Scene; }

public slots:		
	void saveScreenshot();

private slots:
	void cfcbBackgroundColor(NLMISC::CRGBA backgroundColor);
	void cfcbFontShadow(bool fontShadow);

private:
	virtual void resizeEvent(QResizeEvent *resizeEvent);

private:
	NLMISC::CRGBA m_BackgroundColor;

	CGraphicsConfig *m_GraphicsConfig;

	NL3D::UDriver *m_Driver;
	NL3D::UTextContext *m_TextContext;
	NL3D::UScene *m_Scene;

	bool m_Direct3D;

private:
	CGraphicsViewport(const CGraphicsViewport &);
	CGraphicsViewport &operator=(const CGraphicsViewport &);
	
}; /* class CGraphicsViewport */

} /* namespace NLQT */

#endif /* #ifndef NLQT_GRAPHICS_VIEWPORT_H */

/* end of file */