/*
QtWagon: a project about 3D objects.
Science and technology promotion license applied. Third party license automatically cascaded.
Zhikai Wang/ www.heteroclinic.net 2013
You can do anything with this file or any file(s) published as part QtWagon project, given this header is kept.
*/
#ifndef __QTMOVINGOBJECT
#define __QTMOVINGOBJECT
//#include <QGLWidget>
#include <QWidget>
#include <QtGui>
//#include "glwidgetSingleton.h"
//#include <GL/glut.h>
//#include <QGLWidget>
//#include <QWidget>
//#include <QtGui>
//#include "glwidget.h"
#include "enumops.h"
#include "glMovingObject.h"

//class GLWidget;

// From here on all use float
class qtMovingObject: public QWidget{
	Q_OBJECT
protected:
	virtual void emitGLWidgetOrders(int,float);
	//QWidget * screen;
	//GLWidget *glwpt;

	glMovingObjectf * mvopt;


	QGroupBox * myBox ;
	QVBoxLayout *myLayout ;

	QDial  * dialFB;
	QLineEdit * editDialFBDelta;

	float FBDelta;

	QLineEdit * editGlbPosx, * editGlbPosy, * editGlbPosz;
	//GLfloat glbPosx_f,glbPosy_f,glbPosz_f;

	QDial  * dialYAW;
	QDial  * dialROLL;
	QDial  * dialPITCH;
	int valDialFBPrev,valDialRollPrev,valDialYawPrev,valDialPitchPrev;


	float  RYPDelta;

	QLineEdit * editRYPDelta;

	QLabel *  editUpx,* editUpy,* editUpz; //these values are not editable
	QLabel *  editLeftx,* editLefty,* editLeftz;//these values are not editable
	QLabel *  editFrontx,* editFronty,* editFrontz; //these values are not editable


	QPushButton * buttonOneShotFB;
	QPushButton * buttonOneShotRoll;
	QPushButton * buttonOneShotYaw;
	QPushButton * buttonOneShotPitch;

public:

	void setMovingObjPt(glMovingObjectf * n_mvopt);

	virtual void setControls();
	int  dialDerivative(int nval,int & prevVal, int max);
	//void setControlsByVolk();

	QLineEdit * createDoubleEditLine();

	//ONLY set local connnections
	virtual void setConnections();

	QDial  * createDial(bool on = true);
	virtual QGroupBox * getMyBox() ;
	//virtual QVBoxLayout *myLayout ;
	virtual QVBoxLayout * getMyLayout() ;

	//void setGLWidgetPt(GLWidget * nglwpt);
	//qtMovingObject(QWidget * newScreen) ;
	qtMovingObject() ;

	void  setControlsDefaultValues(int inited = 0);
	virtual ~qtMovingObject() ;
	glMovingObjectf * qtMovingObject::getMovingObjPt();

signals:
	//void sigForwardBackward(int);
	//void sigUpdateGL();
	//void sigEditVolkLabel(std::string);//??
	//void sig3dMoveOrders(int,float);
	//void sig3dOrders(int,float);
    //void sig3dMoveOrderspt(int,float,glMovingObjectf *);
	//void sigQtMovObjpt3dOrders(int,float,qtMovingObject *);

	//void sigGLWidgetSingleton3DMove(int,float,qtMovingObject *);
	void sigGLWidgetSingleton3DMove(int,float);
	//void sigGLWidgetSingletonUpdateGL();

	public slots:
		void dialYAW_valueChanged(int nval);
		void dialROLL_valueChanged(int nval) ;
		void dialPITCH_valueChanged(int nval);
		void dialFB_valueChanged(int nval);
		
		//void slotUpdateWagonValueOnly();//??
		void slotUpdateControlsValueOnly();//??




	protected slots:
		void buttonOneShotRoll_clicked();
		void buttonOneShotYaw_clicked();
			void buttonOneShotPitch_clicked();
			void buttonOneShotFB_clicked();

			void editRYPDelta_editingFinished();

			void editGlbPosx_editingFinished();
			void editGlbPosy_editingFinished();
			void editGlbPosz_editingFinished();

			void editDialFBDelta_editingFinished ();
};
#endif