// @(#)root/gl:$Id$
// Author:  Alja Mrak-Tadel, Matevz Tadel, Timur Pocheptsov 08/03/2006

/*************************************************************************
 * Copyright (C) 1995-2006, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#ifndef ROOT_TGLViewerEditor
#define ROOT_TGLViewerEditor

#include <memory>

#ifndef ROOT_TGedFrame
#include "TGedFrame.h"
#endif

#ifndef ROOT_TGLUtil
#include "TGLUtil.h"
#endif
 
class TGCheckButton;
class TGNumberEntry;
class TGButtonGroup;
class TGroupFrame;
class TGRadioButton;
class TGColorSelect;
class TGComboBox;
class TGButton;
class TGTextEntry;
class TGLViewer;
class TGTab;

class TGLLightSetSubEditor;
class TGLClipSetSubEditor;

class TGLViewerEditor : public TGedFrame
{
private:
   //Pointers to manipulate with tabs
   TGCompositeFrame *fGuidesFrame;
   TGCompositeFrame *fClipFrame;
   TGCompositeFrame *fStereoFrame;

   TGLLightSetSubEditor *fLightSet;

   TGColorSelect    *fClearColor;
   TGCheckButton    *fIgnoreSizesOnUpdate;
   TGCheckButton    *fResetCamerasOnUpdate;
   TGTextButton     *fUpdateScene;
   TGTextButton     *fCameraHome;

   TGNumberEntry    *fMaxSceneDrawTimeHQ;
   TGNumberEntry    *fMaxSceneDrawTimeLQ;

   TGNumberEntry    *fPointSizeScale;
   TGNumberEntry    *fLineWidthScale;
   TGCheckButton    *fPointSmooth;
   TGCheckButton    *fLineSmooth;
   TGNumberEntry    *fWFLineWidth;
   TGNumberEntry    *fOLLineWidth;

   //"Guides" tab's controls
   TGCheckButton    *fCameraCenterExt;
   TGTextButton     *fCaptureCenter;
   TGCheckButton    *fDrawCameraCenter;
   TGNumberEntry    *fCameraCenterX;
   TGNumberEntry    *fCameraCenterY;
   TGNumberEntry    *fCameraCenterZ;

   TGCheckButton*    fCaptureAnnotate;

   Int_t             fAxesType;
   TGButtonGroup    *fAxesContainer;
   TGRadioButton    *fAxesNone;
   TGRadioButton    *fAxesEdge;
   TGRadioButton    *fAxesOrigin;
   TGCheckButton    *fAxesDepthTest;

   TGGroupFrame     *fRefContainer;
   TGCheckButton    *fReferenceOn;
   TGNumberEntry    *fReferencePosX;
   TGNumberEntry    *fReferencePosY;
   TGNumberEntry    *fReferencePosZ;

   TGGroupFrame     *fCamContainer;
   TGComboBox*       fCamMode;
   TGCheckButton*    fCamOverlayOn;

   TGLClipSetSubEditor *fClipSet;

   //'Extras' tab.
   TGCheckButton    *fRotateSceneOn;
   TGNumberEntry    *fSceneRotDt;
   
   TGNumberEntry    *fARotDt,     *fARotWPhi;
   TGNumberEntry    *fARotATheta, *fARotWTheta;
   TGNumberEntry    *fARotADolly, *fARotWDolly;

   TGTextEntry      *fASavImageGUIBaseName;
   TGButtonGroup    *fASavImageGUIOutMode;

   TGNumberEntry    *fStereoZeroParallax;
   TGNumberEntry    *fStereoEyeOffsetFac;
   TGNumberEntry    *fStereoFrustumAsymFac;

   // Model
   TGLViewer        *fViewer;
   Bool_t	     fIsInPad;

   void ConnectSignals2Slots();

   TGLViewerEditor(const TGLViewerEditor &);
   TGLViewerEditor &operator = (const TGLViewerEditor &);

   void CreateStyleTab();
   void CreateGuidesTab();
   void CreateClippingTab();
   void CreateExtrasTab();

   void UpdateReferencePosState();

public:
   TGLViewerEditor(const TGWindow *p=0, Int_t width=140, Int_t height=30,
                   UInt_t options=kChildFrame, Pixel_t back=GetDefaultFrameBackground());
   ~TGLViewerEditor();

   virtual void ViewerRedraw();

   virtual void SetModel(TObject* obj);

   void SetGuides();
   void DoClearColor(Pixel_t color);
   void DoIgnoreSizesOnUpdate();
   void DoResetCamerasOnUpdate();
   void DoUpdateScene();
   void DoCameraHome();
   void UpdateMaxDrawTimes();
   void UpdatePointLineStuff();
   void DoCameraCenterExt();
   void DoCaptureCenter();
   void DoAnnotation();
   void DoDrawCameraCenter();
   void UpdateCameraCenter();
   // Axis manipulation
   void UpdateViewerAxes(Int_t id);
   void UpdateViewerReference();
   void DoCameraOverlay();
   // Extras
   void SetRotatorMode();
   void UpdateRotator();
   void DoRotatorStart();
   void DoRotatorStop();
   void DoASavImageGUIBaseName(const char* t);
   void DoASavImageGUIOutMode(Int_t m);
   void DoASavImageStart();
   void DoASavImageStop();
   void UpdateStereo();

   void DetachFromPad(){fIsInPad = kFALSE;}

   static TGNumberEntry* MakeLabeledNEntry(TGCompositeFrame* p, const char* name,
                                           Int_t labelw, Int_t nd=7, Int_t s=5);

   ClassDef(TGLViewerEditor, 0); //GUI for editing TGLViewer attributes
};

#endif
 TGLViewerEditor.h:1
 TGLViewerEditor.h:2
 TGLViewerEditor.h:3
 TGLViewerEditor.h:4
 TGLViewerEditor.h:5
 TGLViewerEditor.h:6
 TGLViewerEditor.h:7
 TGLViewerEditor.h:8
 TGLViewerEditor.h:9
 TGLViewerEditor.h:10
 TGLViewerEditor.h:11
 TGLViewerEditor.h:12
 TGLViewerEditor.h:13
 TGLViewerEditor.h:14
 TGLViewerEditor.h:15
 TGLViewerEditor.h:16
 TGLViewerEditor.h:17
 TGLViewerEditor.h:18
 TGLViewerEditor.h:19
 TGLViewerEditor.h:20
 TGLViewerEditor.h:21
 TGLViewerEditor.h:22
 TGLViewerEditor.h:23
 TGLViewerEditor.h:24
 TGLViewerEditor.h:25
 TGLViewerEditor.h:26
 TGLViewerEditor.h:27
 TGLViewerEditor.h:28
 TGLViewerEditor.h:29
 TGLViewerEditor.h:30
 TGLViewerEditor.h:31
 TGLViewerEditor.h:32
 TGLViewerEditor.h:33
 TGLViewerEditor.h:34
 TGLViewerEditor.h:35
 TGLViewerEditor.h:36
 TGLViewerEditor.h:37
 TGLViewerEditor.h:38
 TGLViewerEditor.h:39
 TGLViewerEditor.h:40
 TGLViewerEditor.h:41
 TGLViewerEditor.h:42
 TGLViewerEditor.h:43
 TGLViewerEditor.h:44
 TGLViewerEditor.h:45
 TGLViewerEditor.h:46
 TGLViewerEditor.h:47
 TGLViewerEditor.h:48
 TGLViewerEditor.h:49
 TGLViewerEditor.h:50
 TGLViewerEditor.h:51
 TGLViewerEditor.h:52
 TGLViewerEditor.h:53
 TGLViewerEditor.h:54
 TGLViewerEditor.h:55
 TGLViewerEditor.h:56
 TGLViewerEditor.h:57
 TGLViewerEditor.h:58
 TGLViewerEditor.h:59
 TGLViewerEditor.h:60
 TGLViewerEditor.h:61
 TGLViewerEditor.h:62
 TGLViewerEditor.h:63
 TGLViewerEditor.h:64
 TGLViewerEditor.h:65
 TGLViewerEditor.h:66
 TGLViewerEditor.h:67
 TGLViewerEditor.h:68
 TGLViewerEditor.h:69
 TGLViewerEditor.h:70
 TGLViewerEditor.h:71
 TGLViewerEditor.h:72
 TGLViewerEditor.h:73
 TGLViewerEditor.h:74
 TGLViewerEditor.h:75
 TGLViewerEditor.h:76
 TGLViewerEditor.h:77
 TGLViewerEditor.h:78
 TGLViewerEditor.h:79
 TGLViewerEditor.h:80
 TGLViewerEditor.h:81
 TGLViewerEditor.h:82
 TGLViewerEditor.h:83
 TGLViewerEditor.h:84
 TGLViewerEditor.h:85
 TGLViewerEditor.h:86
 TGLViewerEditor.h:87
 TGLViewerEditor.h:88
 TGLViewerEditor.h:89
 TGLViewerEditor.h:90
 TGLViewerEditor.h:91
 TGLViewerEditor.h:92
 TGLViewerEditor.h:93
 TGLViewerEditor.h:94
 TGLViewerEditor.h:95
 TGLViewerEditor.h:96
 TGLViewerEditor.h:97
 TGLViewerEditor.h:98
 TGLViewerEditor.h:99
 TGLViewerEditor.h:100
 TGLViewerEditor.h:101
 TGLViewerEditor.h:102
 TGLViewerEditor.h:103
 TGLViewerEditor.h:104
 TGLViewerEditor.h:105
 TGLViewerEditor.h:106
 TGLViewerEditor.h:107
 TGLViewerEditor.h:108
 TGLViewerEditor.h:109
 TGLViewerEditor.h:110
 TGLViewerEditor.h:111
 TGLViewerEditor.h:112
 TGLViewerEditor.h:113
 TGLViewerEditor.h:114
 TGLViewerEditor.h:115
 TGLViewerEditor.h:116
 TGLViewerEditor.h:117
 TGLViewerEditor.h:118
 TGLViewerEditor.h:119
 TGLViewerEditor.h:120
 TGLViewerEditor.h:121
 TGLViewerEditor.h:122
 TGLViewerEditor.h:123
 TGLViewerEditor.h:124
 TGLViewerEditor.h:125
 TGLViewerEditor.h:126
 TGLViewerEditor.h:127
 TGLViewerEditor.h:128
 TGLViewerEditor.h:129
 TGLViewerEditor.h:130
 TGLViewerEditor.h:131
 TGLViewerEditor.h:132
 TGLViewerEditor.h:133
 TGLViewerEditor.h:134
 TGLViewerEditor.h:135
 TGLViewerEditor.h:136
 TGLViewerEditor.h:137
 TGLViewerEditor.h:138
 TGLViewerEditor.h:139
 TGLViewerEditor.h:140
 TGLViewerEditor.h:141
 TGLViewerEditor.h:142
 TGLViewerEditor.h:143
 TGLViewerEditor.h:144
 TGLViewerEditor.h:145
 TGLViewerEditor.h:146
 TGLViewerEditor.h:147
 TGLViewerEditor.h:148
 TGLViewerEditor.h:149
 TGLViewerEditor.h:150
 TGLViewerEditor.h:151
 TGLViewerEditor.h:152
 TGLViewerEditor.h:153
 TGLViewerEditor.h:154
 TGLViewerEditor.h:155
 TGLViewerEditor.h:156
 TGLViewerEditor.h:157
 TGLViewerEditor.h:158
 TGLViewerEditor.h:159
 TGLViewerEditor.h:160
 TGLViewerEditor.h:161
 TGLViewerEditor.h:162
 TGLViewerEditor.h:163
 TGLViewerEditor.h:164
 TGLViewerEditor.h:165
 TGLViewerEditor.h:166
 TGLViewerEditor.h:167
 TGLViewerEditor.h:168
 TGLViewerEditor.h:169
 TGLViewerEditor.h:170
 TGLViewerEditor.h:171