51 Bool_t TEveViewer::fgInitInternal = kFALSE;
52 Bool_t TEveViewer::fgRecreateGlOnDockOps = kFALSE;
62 TEveViewer::TEveViewer(
const char* n,
const char* t) :
63 TEveWindowFrame(0, n, t),
67 SetChildClass(TEveSceneInfo::Class());
68 fGUIFrame->SetCleanup(kNoCleanup);
79 TEveViewer::~TEveViewer()
81 fGLViewer->SetEventHandler(0);
83 fGLViewerFrame->UnmapWindow();
84 GetGUICompositeFrame()->RemoveFrame(fGLViewerFrame);
85 fGLViewerFrame->ReparentWindow(gClient->GetDefaultRoot());
86 TTimer::SingleShot(150,
"TGLViewer", fGLViewer,
"Delete()");
92 void TEveViewer::InitInternal()
96 fgRecreateGlOnDockOps = (gVirtualX->SupportsExtension(
"Apple-WM") == 1);
98 fgInitInternal = kTRUE;
105 void TEveViewer::PreUndock()
107 TEveWindowFrame::PreUndock();
108 if (fgRecreateGlOnDockOps)
112 if (fGLViewer->GetGLWidget())
114 fGLViewer->DestroyGLWidget();
123 void TEveViewer::PostDock()
125 if (fgRecreateGlOnDockOps) {
126 fGLViewer->CreateGLWidget();
128 TEveWindowFrame::PostDock();
134 const TGPicture* TEveViewer::GetListTreeIcon(Bool_t)
136 return TEveElement::fgListTreeIcons[1];
143 void TEveViewer::SetGLViewer(TGLViewer* viewer, TGFrame* frame)
147 fGLViewerFrame = frame;
149 fGLViewer->SetSmartRefresh(kTRUE);
155 TGLSAViewer* TEveViewer::SpawnGLViewer(TGedEditor* ged, Bool_t stereo, Bool_t quad_buf)
157 static const TEveException kEH(
"TEveViewer::SpawnGLViewer ");
159 TGCompositeFrame* cf = GetGUICompositeFrame();
162 if (stereo && quad_buf)
164 form =
new TGLFormat;
165 form->SetStereo(kTRUE);
168 cf->SetEditable(kTRUE);
172 v =
new TGLSAViewer(cf, 0, ged, form);
174 catch (std::exception&)
176 Error(
"SpawnGLViewer",
"Insufficient support from the graphics hardware. Aborting.");
177 gApplication->Terminate(1);
179 cf->SetEditable(kFALSE);
180 v->ToggleEditObject();
181 v->DisableCloseMenuEntries();
182 if (gEnv->GetValue(
"Eve.Viewer.HideMenus", 1) == 1)
184 v->EnableMenuBarHiding();
186 SetGLViewer(v, v->GetFrame());
189 v->SetStereo(kTRUE, quad_buf);
200 TGLEmbeddedViewer* TEveViewer::SpawnGLEmbeddedViewer(TGedEditor* ged, Int_t border)
202 static const TEveException kEH(
"TEveViewer::SpawnGLEmbeddedViewer ");
204 TGCompositeFrame* cf = GetGUICompositeFrame();
206 TGLEmbeddedViewer* v =
new TGLEmbeddedViewer(cf, 0, ged, border);
207 SetGLViewer(v, v->GetFrame());
209 cf->AddFrame(fGLViewerFrame,
new TGLayoutHints(kLHintsNormal | kLHintsExpandX | kLHintsExpandY));
211 fGLViewerFrame->MapWindow();
222 void TEveViewer::Redraw(Bool_t resetCameras)
224 if (resetCameras) fGLViewer->PostSceneBuildSetup(kTRUE);
225 fGLViewer->RequestDraw(TGLRnrCtx::kLODHigh);
233 void TEveViewer::SwitchStereo()
235 TGLSAViewer *v =
dynamic_cast<TGLSAViewer*
>(fGLViewer);
238 Warning(
"SwitchStereo",
"Only supported for TGLSAViewer.");
242 v->DestroyGLWidget();
243 TGLFormat *f = v->GetFormat();
245 f->SetStereo(!f->IsStereo());
246 v->SetStereo(f->IsStereo());
251 catch (std::exception&)
253 Error(
"SwitchStereo",
"Insufficient support from the graphics hardware. Reverting.");
261 void TEveViewer::AddScene(TEveScene* scene)
263 static const TEveException eh(
"TEveViewer::AddScene ");
265 TGLSceneInfo* glsi = fGLViewer->AddScene(scene->GetGLScene());
267 TEveSceneInfo* si =
new TEveSceneInfo(
this, scene, glsi);
270 throw(eh +
"scene already in the viewer.");
279 void TEveViewer::RemoveElementLocal(TEveElement* el)
281 fGLViewer->RemoveScene(((TEveSceneInfo*)el)->GetGLScene());
288 void TEveViewer::RemoveElementsLocal()
290 fGLViewer->RemoveAllScenes();
297 TObject* TEveViewer::GetEditorObject(
const TEveException& eh)
const
300 throw(eh +
"fGLViewer not set.");
309 Bool_t TEveViewer::HandleElementPaste(TEveElement* el)
311 static const TEveException eh(
"TEveViewer::HandleElementPaste ");
313 TEveScene* scene =
dynamic_cast<TEveScene*
>(el);
318 Warning(eh.Data(),
"class TEveViewer only accepts TEveScene paste argument.");
328 ClassImp(TEveViewerList);
332 TEveViewerList::TEveViewerList(
const char* n,
const char* t) :
333 TEveElementList(n, t),
334 fShowTooltip (kTRUE),
337 fUseLightColorSet(kFALSE)
341 SetChildClass(TEveViewer::Class());
348 TEveViewerList::~TEveViewerList()
358 void TEveViewerList::AddElement(TEveElement* el)
360 TEveElementList::AddElement(el);
361 el->IncParentIgnoreCnt();
367 void TEveViewerList::RemoveElementLocal(TEveElement* el)
369 el->DecParentIgnoreCnt();
370 TEveElementList::RemoveElementLocal(el);
376 void TEveViewerList::RemoveElementsLocal()
378 for (List_i i=fChildren.begin(); i!=fChildren.end(); ++i)
380 (*i)->DecParentIgnoreCnt();
383 TEveElementList::RemoveElementsLocal();
389 void TEveViewerList::Connect()
391 TQObject::Connect(
"TGLViewer",
"MouseOver(TObject*,UInt_t)",
392 "TEveViewerList",
this,
"OnMouseOver(TObject*,UInt_t)");
394 TQObject::Connect(
"TGLViewer",
"ReMouseOver(TObject*,UInt_t)",
395 "TEveViewerList",
this,
"OnReMouseOver(TObject*,UInt_t)");
397 TQObject::Connect(
"TGLViewer",
"UnMouseOver(TObject*,UInt_t)",
398 "TEveViewerList",
this,
"OnUnMouseOver(TObject*,UInt_t)");
400 TQObject::Connect(
"TGLViewer",
"Clicked(TObject*,UInt_t,UInt_t)",
401 "TEveViewerList",
this,
"OnClicked(TObject*,UInt_t,UInt_t)");
403 TQObject::Connect(
"TGLViewer",
"ReClicked(TObject*,UInt_t,UInt_t)",
404 "TEveViewerList",
this,
"OnReClicked(TObject*,UInt_t,UInt_t)");
406 TQObject::Connect(
"TGLViewer",
"UnClicked(TObject*,UInt_t,UInt_t)",
407 "TEveViewerList",
this,
"OnUnClicked(TObject*,UInt_t,UInt_t)");
413 void TEveViewerList::Disconnect()
415 TQObject::Disconnect(
"TGLViewer",
"MouseOver(TObject*,UInt_t)",
416 this,
"OnMouseOver(TObject*,UInt_t)");
418 TQObject::Disconnect(
"TGLViewer",
"ReMouseOver(TObject*,UInt_t)",
419 this,
"OnReMouseOver(TObject*,UInt_t)");
421 TQObject::Disconnect(
"TGLViewer",
"UnMouseOver(TObject*,UInt_t)",
422 this,
"OnUnMouseOver(TObject*,UInt_t)");
424 TQObject::Disconnect(
"TGLViewer",
"Clicked(TObject*,UInt_t,UInt_t)",
425 this,
"OnClicked(TObject*,UInt_t,UInt_t)");
427 TQObject::Disconnect(
"TGLViewer",
"ReClicked(TObject*,UInt_t,UInt_t)",
428 this,
"OnReClicked(TObject*,UInt_t,UInt_t)");
430 TQObject::Disconnect(
"TGLViewer",
"UnClicked(TObject*,UInt_t,UInt_t)",
431 this,
"OnUnClicked(TObject*,UInt_t,UInt_t)");
437 void TEveViewerList::RepaintChangedViewers(Bool_t resetCameras, Bool_t dropLogicals)
439 for (List_i i=fChildren.begin(); i!=fChildren.end(); ++i)
441 TGLViewer* glv = ((TEveViewer*)*i)->GetGLViewer();
442 if (glv->IsChanged())
444 if (resetCameras) glv->PostSceneBuildSetup(kTRUE);
445 if (dropLogicals) glv->SetSmartRefresh(kFALSE);
447 glv->RequestDraw(TGLRnrCtx::kLODHigh);
449 if (dropLogicals) glv->SetSmartRefresh(kTRUE);
457 void TEveViewerList::RepaintAllViewers(Bool_t resetCameras, Bool_t dropLogicals)
459 for (List_i i=fChildren.begin(); i!=fChildren.end(); ++i)
461 TGLViewer* glv = ((TEveViewer*)*i)->GetGLViewer();
463 if (resetCameras) glv->PostSceneBuildSetup(kTRUE);
464 if (dropLogicals) glv->SetSmartRefresh(kFALSE);
466 glv->RequestDraw(TGLRnrCtx::kLODHigh);
468 if (dropLogicals) glv->SetSmartRefresh(kTRUE);
475 void TEveViewerList::DeleteAnnotations()
477 for (List_i i=fChildren.begin(); i!=fChildren.end(); ++i)
479 TGLViewer* glv = ((TEveViewer*)*i)->GetGLViewer();
480 glv->DeleteOverlayAnnotations();
488 void TEveViewerList::SceneDestructing(TEveScene* scene)
490 for (List_i i=fChildren.begin(); i!=fChildren.end(); ++i)
492 TEveViewer* viewer = (TEveViewer*) *i;
493 List_i j = viewer->BeginChildren();
494 while (j != viewer->EndChildren())
496 TEveSceneInfo* sinfo = (TEveSceneInfo*) *j;
498 if (sinfo->GetScene() == scene)
499 viewer->RemoveElement(sinfo);
508 void TEveViewerList::HandleTooltip()
512 TGLViewer *glw =
dynamic_cast<TGLViewer*
>((TQObject*) gTQSender);
513 TGLEventHandler *glh = (TGLEventHandler*) glw->GetEventHandler();
514 if (gEve->GetHighlight()->NumChildren() == 1)
516 TString title(gEve->GetHighlight()->FirstChild()->GetHighlightTooltip());
517 if ( ! title.IsNull())
518 glh->TriggerTooltip(title);
522 glh->RemoveTooltip();
539 void TEveViewerList::OnMouseOver(TObject *obj, UInt_t )
541 TEveElement *el =
dynamic_cast<TEveElement*
>(obj);
542 if (el && !el->IsPickable())
545 void *qsender = gTQSender;
546 gEve->GetHighlight()->UserPickedElement(el, kFALSE);
561 void TEveViewerList::OnReMouseOver(TObject *obj, UInt_t )
563 TEveElement* el =
dynamic_cast<TEveElement*
>(obj);
564 if (el && !el->IsPickable())
567 void *qsender = gTQSender;
568 gEve->GetHighlight()->UserRePickedElement(el);
583 void TEveViewerList::OnUnMouseOver(TObject *obj, UInt_t )
585 TEveElement* el =
dynamic_cast<TEveElement*
>(obj);
586 if (el && !el->IsPickable())
589 void *qsender = gTQSender;
590 gEve->GetHighlight()->UserUnPickedElement(el);
605 void TEveViewerList::OnClicked(TObject *obj, UInt_t , UInt_t state)
607 TEveElement* el =
dynamic_cast<TEveElement*
>(obj);
608 if (el && !el->IsPickable())
610 gEve->GetSelection()->UserPickedElement(el, state & kKeyControlMask);
622 void TEveViewerList::OnReClicked(TObject *obj, UInt_t , UInt_t )
624 TEveElement* el =
dynamic_cast<TEveElement*
>(obj);
625 if (el && !el->IsPickable())
627 gEve->GetSelection()->UserRePickedElement(el);
639 void TEveViewerList::OnUnClicked(TObject *obj, UInt_t , UInt_t )
641 TEveElement* el =
dynamic_cast<TEveElement*
>(obj);
642 if (el && !el->IsPickable())
644 gEve->GetSelection()->UserUnPickedElement(el);
650 void TEveViewerList::SetColorBrightness(Float_t b)
652 TEveUtil::SetColorBrightness(b, 1);
658 void TEveViewerList::SwitchColorSet()
660 fUseLightColorSet = ! fUseLightColorSet;
661 for (List_i i=fChildren.begin(); i!=fChildren.end(); ++i)
663 TGLViewer* glv = ((TEveViewer*)*i)->GetGLViewer();
664 if ( fUseLightColorSet)
665 glv->UseLightColorSet();
667 glv->UseDarkColorSet();
669 glv->RequestDraw(TGLRnrCtx::kLODHigh);