#include "globjwin.h"
#include "AdapterWidget.h"
#include <iostream>
//*********************************************************************************************************
//
//
//*********************************************************************************************************

AdapterWidget::AdapterWidget( QWidget * parent, const char * name, const QGLWidget * shareWidget, WindowFlags f):
    QGLWidget(parent, name, shareWidget, f)
{
	_gw = new osgViewer::GraphicsWindowEmbedded(0,0,width(),height());
	_viewer = new osgViewer::Viewer();
  	_viewer->getCamera()->setViewport(new osg::Viewport(0,0,width(),height()));
	_viewer->getCamera()->setProjectionMatrixAsPerspective(30.0f, static_cast<double>(width())/static_cast<double>(height()), 1.0f, 10000.0f);
	_viewer->getCamera()->setGraphicsContext(getGraphicsWindow());
	_viewer->setThreadingModel(osgViewer::Viewer::SingleThreaded);
	connect(&_timer, SIGNAL(timeout()),this,SLOT(updateGL()));
  //  _timer.start(10);
}
void AdapterWidget::init()
{

}

void AdapterWidget::resizeGL( int width, int height )
{
   _gw->getEventQueue()->windowResize(0, 0, width, height );
   _gw->resized(0,0,width,height);
}

void AdapterWidget::keyPressEvent( QKeyEvent* event )
{
    _gw->getEventQueue()->keyPress( (osgGA::GUIEventAdapter::KeySymbol) event->ascii() );
}

void AdapterWidget::keyReleaseEvent( QKeyEvent* event )
{
    _gw->getEventQueue()->keyRelease( (osgGA::GUIEventAdapter::KeySymbol) event->ascii() );
}

void AdapterWidget::mousePressEvent( QMouseEvent* event )
{
    int button = 0;
    switch(event->button())
    {
        case(Qt::LeftButton): button = 1; break;
        case(Qt::MidButton): button = 2; break;
        case(Qt::RightButton): button = 3; break;
        case(Qt::NoButton): button = 0; break;
        default: button = 0; break;
    }
    _gw->getEventQueue()->mouseButtonPress(event->x(), event->y(), button);
    updateGL();
}

void AdapterWidget::mouseReleaseEvent( QMouseEvent* event )
{
    int button = 0;
    switch(event->button())
    {
        case(Qt::LeftButton): button = 1; break;
        case(Qt::MidButton): button = 2; break;
        case(Qt::RightButton): button = 3; break;
        case(Qt::NoButton): button = 0; break;
        default: button = 0; break;
    }
    _gw->getEventQueue()->mouseButtonRelease(event->x(), event->y(), button);
    updateGL();
}

void AdapterWidget::mouseMoveEvent( QMouseEvent* event )
{
    _gw->getEventQueue()->mouseMotion(event->x(), event->y());
    updateGL();
}

void AdapterWidget::paintGL()
{
	_viewer->frame();

 }

//*********************************************************************************************************
//
//
//*********************************************************************************************************
