TGLEmbeddedViewer.cxx

Go to the documentation of this file.
00001 // @(#)root/gl:$Id: TGLEmbeddedViewer.cxx 36675 2010-11-15 20:33:58Z matevz $
00002 // Author: Bertrand Bellenot 23/01/2008
00003 
00004 /*************************************************************************
00005  * Copyright (C) 1995-2008, Rene Brun and Fons Rademakers.               *
00006  * All rights reserved.                                                  *
00007  *                                                                       *
00008  * For the licensing terms see $ROOTSYS/LICENSE.                         *
00009  * For the list of contributors see $ROOTSYS/README/CREDITS.             *
00010  *************************************************************************/
00011 
00012 #include "TGFrame.h"
00013 #include "TGLayout.h"
00014 #include "TGLWidget.h"
00015 #include "TGLSAFrame.h"
00016 #include "TString.h"
00017 #include "TGLPShapeObj.h"
00018 #include "TGLPhysicalShape.h"
00019 #include "TGLLogicalShape.h"
00020 #include "TGLEmbeddedViewer.h"
00021 #include "TGLEventHandler.h"
00022 
00023 //==============================================================================
00024 // TGLEmbeddedViewer
00025 //==============================================================================
00026 
00027 //______________________________________________________________________________
00028 //
00029 // Minimal GL-viewer that can be embedded in a standard ROOT frames.
00030 
00031 ClassImp(TGLEmbeddedViewer);
00032 
00033 //______________________________________________________________________________
00034 TGLEmbeddedViewer::TGLEmbeddedViewer(const TGWindow *parent, TVirtualPad *pad,
00035                                      Int_t border) :
00036    TGLViewer(pad, 0, 0, 400, 300),
00037    fFrame(0),
00038    fBorder(border)
00039 {
00040    // Constructor.
00041    // Argument 'border' specifies how many pixels to pad on each side of the
00042    // viewer. This area can be used for highlightning of the active viewer.
00043 
00044    Init(parent);
00045 }
00046 
00047 //______________________________________________________________________________
00048 TGLEmbeddedViewer::TGLEmbeddedViewer(const TGWindow *parent, TVirtualPad *pad,
00049                                      TGedEditor *ged, Int_t border) :
00050    TGLViewer(pad, 0, 0, 400, 300),
00051    fFrame(0),
00052    fBorder(border)
00053 {
00054    // Constructor allowing to also specify an GED editor to use.
00055    // Argument 'border' specifies how many pixels to pad on each side of the
00056    // viewer. This area can be used for highlightning of the active viewer.
00057 
00058    fGedEditor = ged;
00059    Init(parent);
00060 }
00061 
00062 //______________________________________________________________________________
00063 TGLEmbeddedViewer::~TGLEmbeddedViewer()
00064 {
00065    // Destroy standalone viewer object.
00066 
00067    delete fFrame;
00068    fGLWidget = 0;
00069 }
00070 
00071 //______________________________________________________________________________
00072 void TGLEmbeddedViewer::Init(const TGWindow *parent)
00073 {
00074    // Common initialization from all constructors.
00075 
00076    fFrame = new TGCompositeFrame(parent);
00077 
00078    CreateFrames();
00079 
00080    fFrame->MapSubwindows();
00081    fFrame->Resize(fFrame->GetDefaultSize());
00082    fFrame->Resize(400, 300);
00083 }
00084  
00085 //______________________________________________________________________________
00086 void TGLEmbeddedViewer::CreateFrames()
00087 {
00088    // Internal frames creation.
00089 
00090    fGLWidget = TGLWidget::Create(fFrame, kTRUE, kTRUE, 0, 10, 10);
00091 
00092    // Direct events from the TGWindow directly to the base viewer
00093    fEventHandler = new TGLEventHandler(0, this);
00094    fGLWidget->SetEventHandler(fEventHandler);
00095 
00096    fFrame->AddFrame(fGLWidget, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,
00097                                                  fBorder, fBorder, fBorder, fBorder));
00098 }
00099 
00100 //______________________________________________________________________________
00101 void TGLEmbeddedViewer::CreateGLWidget()
00102 {
00103    // Create a GLwidget, it is an error if it is already created.
00104    // This is needed for frame-swapping on mac.
00105 
00106    if (fGLWidget) {
00107       Error("CreateGLWidget", "Widget already exists.");
00108       return;
00109    }
00110 
00111    fGLWidget = TGLWidget::Create(fFrame, kTRUE, kTRUE, 0, 10, 10);
00112    fGLWidget->SetEventHandler(fEventHandler);
00113 
00114    fFrame->AddFrame(fGLWidget, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,
00115                                                  fBorder, fBorder, fBorder, fBorder));
00116    fFrame->Layout();
00117 
00118    fGLWidget->MapWindow();
00119 }
00120 
00121 //______________________________________________________________________________
00122 void TGLEmbeddedViewer::DestroyGLWidget()
00123 {
00124    // Destroy the GLwidget, it is an error if it does not exist.
00125    // This is needed for frame-swapping on mac.
00126 
00127    if (fGLWidget == 0) {
00128       Error("DestroyGLWidget", "Widget does not exist.");
00129       return;
00130    }
00131 
00132    fGLWidget->UnmapWindow();
00133    fGLWidget->SetEventHandler(0);
00134 
00135    fFrame->RemoveFrame(fGLWidget);
00136    fGLWidget->DeleteWindow();
00137    fGLWidget = 0;
00138 }

Generated on Tue Jul 5 14:18:06 2011 for ROOT_528-00b_version by  doxygen 1.5.1