Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
#include "TCanvas.h"
#include "RVersion.h"
#include "TRootEmbeddedCanvas.h"
#include "TGLViewer.h"

#include "TEveWindow.h"
#include "TEveViewer.h"
#include "TEveScene.h"
#include "TEveManager.h"
#include "TSystem.h"

#include "Fireworks/Core/interface/FWColorManager.h"
#include "Fireworks/Core/interface/FWGLEventHandler.h"

template <typename T>
FWDetailViewGL<T>::FWDetailViewGL()
    : m_infoCanvas(nullptr), m_guiFrame(nullptr), m_eveViewer(nullptr), m_eveScene(nullptr) {}

template <typename T>
FWDetailViewGL<T>::~FWDetailViewGL() {
  m_eveScene->Destroy();
}

template <typename T>
void FWDetailViewGL<T>::init(TEveWindowSlot* slot) {
  TEveWindowPack* pack = slot->MakePack();
  pack->SetHorizontal();
  pack->SetShowTitleBar(kFALSE);
  pack->SetElementNameTitle("DetalView pack", "DetailViewPack");

  // canvas & widgets
  TEveWindowFrame* frame = pack->NewSlotWithWeight(1)->MakeFrame();
  frame->SetShowTitleBar(kFALSE);
  TGCompositeFrame* cf = frame->GetGUICompositeFrame();

  TGCompositeFrame* hf = new TGVerticalFrame(cf);
  hf->SetCleanup(kLocalCleanup);
  cf->AddFrame(hf, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY));
  {
    m_guiFrame = new TGVerticalFrame(hf);
    hf->AddFrame(m_guiFrame, new TGLayoutHints(kLHintsExpandX));
    m_guiFrame->SetCleanup(kDeepCleanup);

    // legend
    TRootEmbeddedCanvas* ec = new TRootEmbeddedCanvas("Embeddedcanvas", hf, 100, 100, 0);
    hf->AddFrame(ec, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY));
    m_infoCanvas = ec->GetCanvas();
    m_infoCanvas->SetHighLightColor(-1);
  }

  cf->MapSubwindows();
  cf->Layout();
  cf->MapWindow();

  // viewer GL
  m_eveViewer = new TEveViewer("DetailView");
#if ROOT_VERSION_CODE >= ROOT_VERSION(5, 25, 4)
  m_eveViewer->SpawnGLEmbeddedViewer(nullptr);
#else
  m_eveViewer->SpawnGLEmbeddedViewer();
#endif
  pack->NewSlotWithWeight(3)->ReplaceWindow(m_eveViewer);
  m_eveViewer->SetShowTitleBar(kFALSE);
  gEve->GetViewers()->AddElement(m_eveViewer);

  m_eveScene = gEve->SpawnNewScene("Detailed view");
  m_eveViewer->AddScene(m_eveScene);

  // override event handling
  TGLViewer* glv = m_eveViewer->GetGLViewer();
  FWGLEventHandler* eh = new FWGLEventHandler((TGWindow*)glv->GetGLWidget(), (TObject*)glv);
  glv->SetEventHandler(eh);
}

template <typename T>
void FWDetailViewGL<T>::setBackgroundColor(Color_t col) {
  FWColorManager::setColorSetViewer(viewerGL(), col);
}