ROOT logo
// @(#)root/gl:$Id$
// Author:  Richard Maunder / Timur Pocheptsov

/*************************************************************************
 * Copyright (C) 1995-2005, 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_TGLSAViewer
#define ROOT_TGLSAViewer

#include "TGLViewer.h"
#include "TString.h"

class TGLSAFrame;
class TGLFormat;
class TGWindow;
class TGFrame;
class TGCompositeFrame;
class TGPopupMenu;
class TGButton;

class TGedEditor;
class TGLEventHandler;
class TGMenuBar;

//______________________________________________________________________________
//
// TGLSAViewer
//
// The top-level standalone GL viewer.


class TGLSAViewer : public TGLViewer
{
public:
   enum EGLSACommands {
      kGLHelpAbout, kGLHelpViewer,
      kGLPerspYOZ, kGLPerspXOZ, kGLPerspXOY,
      kGLXOY,  kGLXOZ,  kGLZOY,
      kGLXnOY, kGLXnOZ, kGLZnOY,
      kGLOrthoRotate, kGLOrthoDolly,
      kGLSaveEPS, kGLSavePDF, kGLSavePNG, kGLSaveGIF, kGLSaveAnimGIF,
      kGLSaveJPG, kGLSaveAS, kGLCloseViewer, kGLQuitROOT,
      kGLEditObject, kGLHideMenus };

private:
   // GUI components
   TGLSAFrame        *fFrame;
   TGLFormat         *fFormat;
   TGPopupMenu       *fFileMenu;
   TGPopupMenu       *fFileSaveMenu;
   TGPopupMenu       *fCameraMenu;
   TGPopupMenu       *fHelpMenu;

   // Ged
   TGCompositeFrame  *fLeftVerticalFrame;

   TGCompositeFrame  *fRightVerticalFrame;

   TString            fDirName;
   Int_t              fTypeIdx;
   Bool_t             fOverwrite;
   TGMenuBar         *fMenuBar;
   TGButton          *fMenuBut;
   Bool_t             fHideMenuBar;
   TTimer            *fMenuHidingTimer;
   Bool_t             fMenuHidingShowMenu;

   Bool_t             fDeleteMenuBar;

   static Long_t      fgMenuHidingTimeout;

   void ResetMenuHidingTimer(Bool_t show_menu);

   // Initial window positioning
   static const Int_t fgInitX;
   static const Int_t fgInitY;
   static const Int_t fgInitW;
   static const Int_t fgInitH;

   static const char *fgHelpText1;
   static const char *fgHelpText2;

   void CreateMenus();
   void CreateFrames();

   // non-copyable class
   TGLSAViewer(const TGLSAViewer &);
   TGLSAViewer & operator = (const TGLSAViewer &);

public:
   TGLSAViewer(TVirtualPad* pad, TGLFormat* format=0);
   TGLSAViewer(const TGWindow* parent, TVirtualPad *pad, TGedEditor *ged=0,
               TGLFormat* format=0);
   ~TGLSAViewer();

   virtual void CreateGLWidget();
   virtual void DestroyGLWidget();

   virtual const char* GetName() const { return "GLViewer"; }

   virtual void SelectionChanged();

   void   Show();
   void   Close();
   void   DeleteMenuBar();
   void   DisableCloseMenuEntries();
   void   EnableMenuBarHiding();
   void   DisableMenuBarHiding();
   void   MenuHidingTimeout();

   void   HandleMenuBarHiding(Event_t* ev);

   // GUI events - editors, frame etc
   Bool_t ProcessFrameMessage(Long_t msg, Long_t parm1, Long_t);

   TGCompositeFrame* GetFrame() const;
   TGCompositeFrame* GetLeftVerticalFrame() const { return fLeftVerticalFrame; }

   TGLFormat*        GetFormat() const { return fFormat; }

   void ToggleEditObject();
   void ToggleOrthoRotate();
   void ToggleOrthoDolly();

   static void SetMenuHidingTimeout(Long_t timeout);

   ClassDef(TGLSAViewer, 0); // Standalone GL viewer.
};

#endif

 TGLSAViewer.h:1
 TGLSAViewer.h:2
 TGLSAViewer.h:3
 TGLSAViewer.h:4
 TGLSAViewer.h:5
 TGLSAViewer.h:6
 TGLSAViewer.h:7
 TGLSAViewer.h:8
 TGLSAViewer.h:9
 TGLSAViewer.h:10
 TGLSAViewer.h:11
 TGLSAViewer.h:12
 TGLSAViewer.h:13
 TGLSAViewer.h:14
 TGLSAViewer.h:15
 TGLSAViewer.h:16
 TGLSAViewer.h:17
 TGLSAViewer.h:18
 TGLSAViewer.h:19
 TGLSAViewer.h:20
 TGLSAViewer.h:21
 TGLSAViewer.h:22
 TGLSAViewer.h:23
 TGLSAViewer.h:24
 TGLSAViewer.h:25
 TGLSAViewer.h:26
 TGLSAViewer.h:27
 TGLSAViewer.h:28
 TGLSAViewer.h:29
 TGLSAViewer.h:30
 TGLSAViewer.h:31
 TGLSAViewer.h:32
 TGLSAViewer.h:33
 TGLSAViewer.h:34
 TGLSAViewer.h:35
 TGLSAViewer.h:36
 TGLSAViewer.h:37
 TGLSAViewer.h:38
 TGLSAViewer.h:39
 TGLSAViewer.h:40
 TGLSAViewer.h:41
 TGLSAViewer.h:42
 TGLSAViewer.h:43
 TGLSAViewer.h:44
 TGLSAViewer.h:45
 TGLSAViewer.h:46
 TGLSAViewer.h:47
 TGLSAViewer.h:48
 TGLSAViewer.h:49
 TGLSAViewer.h:50
 TGLSAViewer.h:51
 TGLSAViewer.h:52
 TGLSAViewer.h:53
 TGLSAViewer.h:54
 TGLSAViewer.h:55
 TGLSAViewer.h:56
 TGLSAViewer.h:57
 TGLSAViewer.h:58
 TGLSAViewer.h:59
 TGLSAViewer.h:60
 TGLSAViewer.h:61
 TGLSAViewer.h:62
 TGLSAViewer.h:63
 TGLSAViewer.h:64
 TGLSAViewer.h:65
 TGLSAViewer.h:66
 TGLSAViewer.h:67
 TGLSAViewer.h:68
 TGLSAViewer.h:69
 TGLSAViewer.h:70
 TGLSAViewer.h:71
 TGLSAViewer.h:72
 TGLSAViewer.h:73
 TGLSAViewer.h:74
 TGLSAViewer.h:75
 TGLSAViewer.h:76
 TGLSAViewer.h:77
 TGLSAViewer.h:78
 TGLSAViewer.h:79
 TGLSAViewer.h:80
 TGLSAViewer.h:81
 TGLSAViewer.h:82
 TGLSAViewer.h:83
 TGLSAViewer.h:84
 TGLSAViewer.h:85
 TGLSAViewer.h:86
 TGLSAViewer.h:87
 TGLSAViewer.h:88
 TGLSAViewer.h:89
 TGLSAViewer.h:90
 TGLSAViewer.h:91
 TGLSAViewer.h:92
 TGLSAViewer.h:93
 TGLSAViewer.h:94
 TGLSAViewer.h:95
 TGLSAViewer.h:96
 TGLSAViewer.h:97
 TGLSAViewer.h:98
 TGLSAViewer.h:99
 TGLSAViewer.h:100
 TGLSAViewer.h:101
 TGLSAViewer.h:102
 TGLSAViewer.h:103
 TGLSAViewer.h:104
 TGLSAViewer.h:105
 TGLSAViewer.h:106
 TGLSAViewer.h:107
 TGLSAViewer.h:108
 TGLSAViewer.h:109
 TGLSAViewer.h:110
 TGLSAViewer.h:111
 TGLSAViewer.h:112
 TGLSAViewer.h:113
 TGLSAViewer.h:114
 TGLSAViewer.h:115
 TGLSAViewer.h:116
 TGLSAViewer.h:117
 TGLSAViewer.h:118
 TGLSAViewer.h:119
 TGLSAViewer.h:120
 TGLSAViewer.h:121
 TGLSAViewer.h:122
 TGLSAViewer.h:123
 TGLSAViewer.h:124
 TGLSAViewer.h:125
 TGLSAViewer.h:126
 TGLSAViewer.h:127
 TGLSAViewer.h:128
 TGLSAViewer.h:129
 TGLSAViewer.h:130
 TGLSAViewer.h:131
 TGLSAViewer.h:132
 TGLSAViewer.h:133
 TGLSAViewer.h:134
 TGLSAViewer.h:135
 TGLSAViewer.h:136