Logo ROOT  
Reference Guide
Loading...
Searching...
No Matches
TGLViewerEditor.cxx
Go to the documentation of this file.
1// @(#)root/gl:$Id$
2// Author: Alja Mrak-Tadel, Matevz Tadel, Timur Pocheptsov 08/03/2006
3
4/*************************************************************************
5 * Copyright (C) 1995-2006, Rene Brun and Fons Rademakers. *
6 * All rights reserved. *
7 * *
8 * For the licensing terms see $ROOTSYS/LICENSE. *
9 * For the list of contributors see $ROOTSYS/README/CREDITS. *
10 *************************************************************************/
11
12#include <cstring>
13
14#include "TGedEditor.h"
15#include "TGNumberEntry.h"
16#include "TGButtonGroup.h"
17#include "TGColorSelect.h"
18#include "TGTextEntry.h"
19#include "TVirtualGL.h"
20#include "TG3DLine.h"
21#include "TGButton.h"
22#include "TColor.h"
23#include "TString.h"
24#include "TGLabel.h"
25#include "TGComboBox.h"
26#include "TError.h"
27
28#include "TGLViewerEditor.h"
29#include "TGLViewer.h"
30#include "TGLLightSetEditor.h"
31#include "TGLClipSetEditor.h"
32#include "TGLUtil.h"
33#include "TGLCameraOverlay.h"
34#include "TGLAutoRotator.h"
35
36/** \class TGLViewerEditor
37\ingroup opengl
38GUI editor for TGLViewer.
39*/
40
41namespace {
42
43void SetLabeledNEntryState(TGNumberEntry *entry, Bool_t enabled);
44
45}
46
47
48TGLViewerEditor::TGLViewerEditor(const TGWindow *p, Int_t width, Int_t height, UInt_t options, Pixel_t back) :
49 TGedFrame(p, width, height, options | kVerticalFrame, back),
50 fGuidesFrame(nullptr),
51 fClipFrame(nullptr),
52 fClearColor(nullptr),
53 fIgnoreSizesOnUpdate(nullptr),
54 fResetCamerasOnUpdate(nullptr),
55 fUpdateScene(nullptr),
56 fCameraHome(nullptr),
57 fMaxSceneDrawTimeHQ(nullptr),
58 fMaxSceneDrawTimeLQ(nullptr),
59 fPointSizeScale(nullptr), fLineWidthScale(nullptr),
60 fPointSmooth(nullptr), fLineSmooth(nullptr),
61 fWFLineWidth(nullptr), fOLLineWidth(nullptr),
62
63 fCameraCenterExt(nullptr),
64 fCaptureCenter(nullptr),
65 fCameraCenterX(nullptr),
66 fCameraCenterY(nullptr),
67 fCameraCenterZ(nullptr),
69 fAxesType(0),
70 fAxesContainer(nullptr),
71 fAxesNone(nullptr),
72 fAxesEdge(nullptr),
73 fAxesOrigin(nullptr),
74 fAxesDepthTest(nullptr),
75 fRefContainer(nullptr),
76 fReferenceOn(nullptr),
77 fReferencePosX(nullptr),
78 fReferencePosY(nullptr),
79 fReferencePosZ(nullptr),
80 fCamContainer(nullptr),
81 fCamMode(nullptr),
82 fCamOverlayOn(nullptr),
83 fClipSet(nullptr),
84 fARotDt(nullptr), fARotWPhi(nullptr), fARotATheta(nullptr), fARotWTheta(nullptr), fARotADolly(nullptr), fARotWDolly(nullptr),
87 fViewer(nullptr),
89{
90 // Constructor.
91
96}
97
98//______________________________________________________________________________
99
101{
102 // Destructor.
103
104}
105
106////////////////////////////////////////////////////////////////////////////////
107/// Connect signals to slots.
108
110{
111 fClearColor->Connect("ColorSelected(Pixel_t)", "TGLViewerEditor", this, "DoClearColor(Pixel_t)");
112 fIgnoreSizesOnUpdate->Connect("Toggled(Bool_t)", "TGLViewerEditor", this, "DoIgnoreSizesOnUpdate()");
113 fResetCamerasOnUpdate->Connect("Toggled(Bool_t)", "TGLViewerEditor", this, "DoResetCamerasOnUpdate()");
114 fUpdateScene->Connect("Pressed()", "TGLViewerEditor", this, "DoUpdateScene()");
115 fCameraHome->Connect("Pressed()", "TGLViewerEditor", this, "DoCameraHome()");
116 fMaxSceneDrawTimeHQ->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdateMaxDrawTimes()");
117 fMaxSceneDrawTimeLQ->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdateMaxDrawTimes()");
118 fPointSizeScale->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdatePointLineStuff()");
119 fLineWidthScale->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdatePointLineStuff()");
120 fPointSmooth->Connect("Clicked()", "TGLViewerEditor", this, "UpdatePointLineStuff()");
121 fLineSmooth ->Connect("Clicked()", "TGLViewerEditor", this, "UpdatePointLineStuff()");
122 fWFLineWidth->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdatePointLineStuff()");
123 fOLLineWidth->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdatePointLineStuff()");
124
125 fCameraCenterExt->Connect("Clicked()", "TGLViewerEditor", this, "DoCameraCenterExt()");
126 fCaptureCenter->Connect("Clicked()", "TGLViewerEditor", this, "DoCaptureCenter()");
127 fDrawCameraCenter->Connect("Clicked()", "TGLViewerEditor", this, "DoDrawCameraCenter()");
128 fCameraCenterX->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdateCameraCenter()");
129 fCameraCenterY->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdateCameraCenter()");
130 fCameraCenterZ->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdateCameraCenter()");
131
132 fCaptureAnnotate->Connect("Clicked()", "TGLViewerEditor", this, "DoAnnotation()");
133
134 fAxesContainer->Connect("Clicked(Int_t)", "TGLViewerEditor", this, "UpdateViewerAxes(Int_t)");
135
136 fReferenceOn->Connect("Clicked()", "TGLViewerEditor", this, "UpdateViewerReference()");
137 fReferencePosX->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdateViewerReference()");
138 fReferencePosY->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdateViewerReference()");
139 fReferencePosZ->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdateViewerReference()");
140
141 fCamMode->Connect("Selected(Int_t)", "TGLViewerEditor", this, "DoCameraOverlay()");
142 fCamOverlayOn->Connect("Clicked()", "TGLViewerEditor", this, "DoCameraOverlay()");
143
144 //
145 fRotateSceneOn->Connect("Clicked()", "TGLViewerEditor", this, "SetRotatorMode()");
146
147 fSceneRotDt->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdateRotator()");
148 fARotDt ->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdateRotator()");
149 fARotWPhi ->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdateRotator()");
150 fARotATheta->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdateRotator()");
151 fARotWTheta->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdateRotator()");
152 fARotADolly->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdateRotator()");
153 fARotWDolly->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdateRotator()");
154
155 fASavImageGUIBaseName->Connect("TextChanged(char*", "TGLViewerEditor", this, "DoASavImageGUIBaseName(char*)");
156 fASavImageGUIOutMode->Connect("Clicked(Int_t)", "TGLViewerEditor", this, "DoASavImageGUIOutMode(Int_t)");
157
158 fStereoZeroParallax ->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdateStereo()");
159 fStereoEyeOffsetFac ->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdateStereo()");
160 fStereoFrustumAsymFac->Connect("ValueSet(Long_t)", "TGLViewerEditor", this, "UpdateStereo()");
161 fStereoZeroParallax ->Connect("ValueChanged(Long_t)", "TGLViewerEditor", this, "UpdateStereo()");
162 fStereoEyeOffsetFac ->Connect("ValueChanged(Long_t)", "TGLViewerEditor", this, "UpdateStereo()");
163 fStereoFrustumAsymFac->Connect("ValueChanged(Long_t)", "TGLViewerEditor", this, "UpdateStereo()");
164
165 fInit = kFALSE;
166}
167
168////////////////////////////////////////////////////////////////////////////////
169/// Initiate redraw of the viewer.
170
172{
173 if (gGLManager && fIsInPad)
174 gGLManager->MarkForDirectCopy(fViewer->GetDev(), kTRUE);
175 fViewer->RequestDraw();
176}
177
178////////////////////////////////////////////////////////////////////////////////
179/// Sets model or disables/hides viewer.
180
182{
183 fViewer = nullptr;
184
185 fViewer = static_cast<TGLViewer *>(obj);
186 fIsInPad = (fViewer->GetDev() != -1);
187
188 SetGuides();
189
190 if (fInit)
192
193 fLightSet->SetModel(fViewer->GetLightSet());
194 fClipSet->SetModel(fViewer->GetClipSet());
195
196 // style tab
197 fClearColor->SetColor(TColor::Number2Pixel(fViewer->RnrCtx().ColorSet().Background().GetColorIndex()), kFALSE);
198 fClearColor->Enable(!fViewer->IsUsingDefaultColorSet());
199 fIgnoreSizesOnUpdate->SetState(fViewer->GetIgnoreSizesOnUpdate() ? kButtonDown : kButtonUp);
200 fResetCamerasOnUpdate->SetState(fViewer->GetResetCamerasOnUpdate() ? kButtonDown : kButtonUp);
201 fMaxSceneDrawTimeHQ->SetNumber(fViewer->GetMaxSceneDrawTimeHQ());
202 fMaxSceneDrawTimeLQ->SetNumber(fViewer->GetMaxSceneDrawTimeLQ());
203 fPointSizeScale->SetNumber(fViewer->GetPointScale());
204 fLineWidthScale->SetNumber(fViewer->GetLineScale ());
205 fPointSmooth->SetState(fViewer->GetSmoothPoints() ? kButtonDown : kButtonUp);
206 fLineSmooth ->SetState(fViewer->GetSmoothLines () ? kButtonDown : kButtonUp);
207 fWFLineWidth->SetNumber(fViewer->WFLineW());
208 fOLLineWidth->SetNumber(fViewer->OLLineW());
209 //camera look at
210 TGLCamera & cam = fViewer->CurrentCamera();
211 fCameraCenterExt->SetDown(cam.GetExternalCenter());
212 fDrawCameraCenter->SetDown(fViewer->GetDrawCameraCenter());
213 Double_t* la = cam.GetCenterVec();
214 fCameraCenterX->SetNumber(la[0]);
215 fCameraCenterY->SetNumber(la[1]);
216 fCameraCenterZ->SetNumber(la[2]);
217 fCameraCenterX->SetState(fCameraCenterExt->IsDown());
218 fCameraCenterY->SetState(fCameraCenterExt->IsDown());
219 fCameraCenterZ->SetState(fCameraCenterExt->IsDown());
220
221 // push action
222 fCaptureCenter->SetTextColor((fViewer->GetPushAction() == TGLViewer::kPushCamCenter) ? 0xa03060 : 0x000000);
223 fCaptureAnnotate->SetDown( (fViewer->GetPushAction() == TGLViewer::kPushAnnotate), kFALSE);
224
225 {
226 TGLAutoRotator *r = fViewer->GetAutoRotator();
227
228 fSceneRotDt->SetNumber(r->GetDeltaPhi());
229 fARotDt ->SetNumber(r->GetDt());
230 fARotWPhi ->SetNumber(r->GetWPhi());
231 fARotATheta->SetNumber(r->GetATheta());
232 fARotWTheta->SetNumber(r->GetWTheta());
233 fARotADolly->SetNumber(r->GetADolly());
234 fARotWDolly->SetNumber(r->GetWDolly());
235
236 fASavImageGUIBaseName->SetText(r->GetImageGUIBaseName());
237 fASavImageGUIOutMode ->SetButton(r->GetImageGUIOutMode());
238
239 Bool_t rotate_standard = ! fViewer->GetAutoRotator()->GetRotateScene();
240 fRotateSceneOn->SetState(rotate_standard ? kButtonUp : kButtonDown);
241 SetLabeledNEntryState(fSceneRotDt, ! rotate_standard);
242 SetLabeledNEntryState(fARotDt, rotate_standard);
243 SetLabeledNEntryState(fARotWPhi, rotate_standard);
244 SetLabeledNEntryState(fARotATheta, rotate_standard);
245 SetLabeledNEntryState(fARotWTheta, rotate_standard);
246 SetLabeledNEntryState(fARotADolly, rotate_standard);
247 SetLabeledNEntryState(fARotWDolly, rotate_standard);
248 }
249
250 if (fViewer->GetStereo())
251 {
252 fStereoZeroParallax ->SetNumber(fViewer->GetStereoZeroParallax());
253 fStereoEyeOffsetFac ->SetNumber(fViewer->GetStereoEyeOffsetFac());
254 fStereoFrustumAsymFac->SetNumber(fViewer->GetStereoFrustumAsymFac());
255 fStereoFrame->MapWindow();
256 }
257 else
258 {
259 fStereoFrame->UnmapWindow();
260 }
261}
262
263////////////////////////////////////////////////////////////////////////////////
264/// Clear-color was changed.
265
267{
268 fViewer->RnrCtx().ColorSet().Background().SetColor(Color_t(TColor::GetColor(color)));
269 ViewerRedraw();
270}
271
272////////////////////////////////////////////////////////////////////////////////
273/// ResetCamerasOnUpdate was toggled.
274
276{
277 fViewer->SetIgnoreSizesOnUpdate(fIgnoreSizesOnUpdate->IsOn());
278 if (fIgnoreSizesOnUpdate->IsOn())
279 fViewer->UpdateScene();
280}
281
282////////////////////////////////////////////////////////////////////////////////
283/// ResetCamerasOnUpdate was toggled.
284
286{
287 fViewer->SetResetCamerasOnUpdate(fResetCamerasOnUpdate->IsOn());
288}
289
290////////////////////////////////////////////////////////////////////////////////
291/// UpdateScene was clicked.
292
294{
295 fViewer->UpdateScene();
296}
297
298////////////////////////////////////////////////////////////////////////////////
299/// CameraHome was clicked.
300
302{
303 fViewer->ResetCurrentCamera();
304 ViewerRedraw();
305}
306
307////////////////////////////////////////////////////////////////////////////////
308/// Slot for fMaxSceneDrawTimeHQ and fMaxSceneDrawTimeLQ.
309
311{
312 fViewer->SetMaxSceneDrawTimeHQ(fMaxSceneDrawTimeHQ->GetNumber());
313 fViewer->SetMaxSceneDrawTimeLQ(fMaxSceneDrawTimeLQ->GetNumber());
314}
315
316////////////////////////////////////////////////////////////////////////////////
317/// Slot for point-sizes and line-widths.
318
320{
321 fViewer->SetPointScale(fPointSizeScale->GetNumber());
322 fViewer->SetLineScale (fLineWidthScale->GetNumber());
323 fViewer->SetSmoothPoints(fPointSmooth->IsDown());
324 fViewer->SetSmoothLines (fLineSmooth->IsDown());
325 fViewer->SetWFLineW(fWFLineWidth->GetNumber());
326 fViewer->SetOLLineW(fOLLineWidth->GetNumber());
327 ViewerRedraw();
328}
329
330////////////////////////////////////////////////////////////////////////////////
331/// Update viewer with GUI state.
332
334{
335 TGLCameraOverlay* co = fViewer->GetCameraOverlay();
336
337 if (fViewer->CurrentCamera().IsPerspective())
338 {
339 co->SetShowPerspective(fCamOverlayOn->IsDown());
341 }
342 else
343 {
344 co->SetShowOrthographic(fCamOverlayOn->IsDown());
346 }
347 ViewerRedraw();
348}
349
350////////////////////////////////////////////////////////////////////////////////
351/// Set external camera center.
352
354{
355 TGLCamera& cam = fViewer->CurrentCamera();
356 cam.SetExternalCenter(fCameraCenterExt->IsDown());
357
358 fCameraCenterX->SetState(fCameraCenterExt->IsDown());
359 fCameraCenterY->SetState(fCameraCenterExt->IsDown());
360 fCameraCenterZ->SetState(fCameraCenterExt->IsDown());
361
362 ViewerRedraw();
363}
364
365////////////////////////////////////////////////////////////////////////////////
366/// Capture camera-center via picking.
367
369{
370 fViewer->PickCameraCenter();
371 ViewerRedraw();
372}
373
374////////////////////////////////////////////////////////////////////////////////
375/// Draw camera center.
376
378{
379 fViewer->SetDrawCameraCenter(fDrawCameraCenter->IsDown());
380 ViewerRedraw();
381}
382
383////////////////////////////////////////////////////////////////////////////////
384/// Update current camera with GUI state.
385
387{
388 TGLCamera& cam = fViewer->CurrentCamera();
389 cam.SetCenterVec(fCameraCenterX->GetNumber(), fCameraCenterY->GetNumber(), fCameraCenterZ->GetNumber());
390 ViewerRedraw();
391}
392
393////////////////////////////////////////////////////////////////////////////////
394/// Create annotation via picking.
395
397{
398 fViewer->PickAnnotate();
399}
400
401////////////////////////////////////////////////////////////////////////////////
402/// Update viewer with GUI state.
403
405{
406 if(id < 4)
407 {
408 fAxesType = id -1;
409 for (Int_t i = 1; i < 4; i++) {
410 TGButton * button = fAxesContainer->GetButton(i);
411 if (i == id)
412 button->SetDown(kTRUE);
413 else
414 button->SetDown(kFALSE);
415 }
416 }
417 Bool_t axdt = fAxesContainer->GetButton(4)->IsDown();
418 const Double_t refPos[] = {fReferencePosX->GetNumber(), fReferencePosY->GetNumber(), fReferencePosZ->GetNumber()};
419 fViewer->SetGuideState(fAxesType, axdt, fReferenceOn->IsDown(), refPos);
421}
422
423////////////////////////////////////////////////////////////////////////////////
424/// Update viewer with GUI state.
425
427{
428 const Double_t refPos[] = {fReferencePosX->GetNumber(), fReferencePosY->GetNumber(), fReferencePosZ->GetNumber()};
429 fViewer->SetGuideState(fAxesType, fAxesContainer->GetButton(4)->IsDown(), fReferenceOn->IsDown(), refPos);
431}
432
433////////////////////////////////////////////////////////////////////////////////
434/// Helper function to create fixed width TGLabel and TGNumberEntry in same row.
435
437 Int_t labelw,Int_t nd, Int_t style)
438{
440 TGHorizontalFrame *labfr = new TGHorizontalFrame(rfr, labelw, 20, kFixedSize);
441 TGLabel *lab = new TGLabel(labfr, name);
442 labfr->AddFrame(lab, new TGLayoutHints(kLHintsLeft | kLHintsBottom, 0, 0, 0) );
443 rfr->AddFrame(labfr, new TGLayoutHints(kLHintsLeft | kLHintsBottom, 0, 0, 0));
444
445 TGNumberEntry* ne = new TGNumberEntry(rfr, 0.0f, nd, -1, (TGNumberFormat::EStyle)style);
447
448 p->AddFrame(rfr, new TGLayoutHints(kLHintsLeft, 0, 0, 1, 0));
449 return ne;
450}
451
452////////////////////////////////////////////////////////////////////////////////
453/// Creates "Style" tab.
454
456{
457 MakeTitle("Update behaviour");
458 fIgnoreSizesOnUpdate = new TGCheckButton(this, "Ignore sizes");
459 fIgnoreSizesOnUpdate->SetToolTipText("Ignore bounding-box sizes on scene update");
461 fResetCamerasOnUpdate = new TGCheckButton(this, "Reset on update");
462 fResetCamerasOnUpdate->SetToolTipText("Reset camera on scene update");
464
465 TGCompositeFrame* af = this;
466 fUpdateScene = new TGTextButton(af, "Update Scene", 130);
468 fCameraHome = new TGTextButton(af, "Camera Home", 130);
470 fMaxSceneDrawTimeHQ = MakeLabeledNEntry(af, "Max HQ draw time:", 120, 6, TGNumberFormat::kNESInteger);
472 fMaxSceneDrawTimeHQ->GetNumberEntry()->SetToolTipText("Maximum time spent in scene drawing\nin high-quality mode [ms].");
473 fMaxSceneDrawTimeLQ = MakeLabeledNEntry(af, "Max LQ draw time:", 120, 6, TGNumberFormat::kNESInteger);
475 fMaxSceneDrawTimeLQ->GetNumberEntry()->SetToolTipText("Maximum time spent in scene drawing\nin low-quality mode (during rotation etc).");
476
477 TGHorizontalFrame* hf = new TGHorizontalFrame(this);
478 TGLabel* lab = new TGLabel(hf, "Clear Color");
479 hf->AddFrame(lab, new TGLayoutHints(kLHintsLeft|kLHintsBottom, 1, 4, 8, 3));
480 fClearColor = new TGColorSelect(hf, 0, -1);
481 hf->AddFrame(fClearColor, new TGLayoutHints(kLHintsLeft, 1, 1, 8, 1));
482 AddFrame(hf, new TGLayoutHints(kLHintsLeft, 2, 1, 1, 1));
483
484 // LightSet
486 fLightSet->Connect("Changed()", "TGLViewerEditor", this, "ViewerRedraw()");
488
489 // Point-sizes / line-widths.
490 hf = new TGHorizontalFrame(af);
491 fPointSizeScale = MakeLabeledNEntry(hf, "Point-size scale:", 116, 4, TGNumberFormat::kNESRealOne);
493 fPointSmooth = new TGCheckButton(hf);
494 fPointSmooth->SetToolTipText("Use smooth points.");
495 hf->AddFrame(fPointSmooth, new TGLayoutHints(kLHintsNormal, 3, 0, 3, 0));
496 af->AddFrame(hf);
497 hf = new TGHorizontalFrame(af);
498 fLineWidthScale = MakeLabeledNEntry(hf, "Line-width scale:", 116, 4, TGNumberFormat::kNESRealOne);
500 fLineSmooth = new TGCheckButton(hf);
501 fLineSmooth->SetToolTipText("Use smooth lines.");
502 hf->AddFrame(fLineSmooth, new TGLayoutHints(kLHintsNormal, 3, 0, 3, 0));
503 af->AddFrame(hf);
504 fWFLineWidth = MakeLabeledNEntry(af, "Wireframe line-width:", 116, 4, TGNumberFormat::kNESRealOne);
506 fOLLineWidth = MakeLabeledNEntry(af, "Outline line-width:", 116, 4, TGNumberFormat::kNESRealOne);
508}
509
510////////////////////////////////////////////////////////////////////////////////
511/// Create "Guides" tab.
512
514{
516
517 // external camera look at point
518 TGGroupFrame* grf = new TGGroupFrame(fGuidesFrame, "Camera center:", kVerticalFrame);
519 fDrawCameraCenter = new TGCheckButton(grf, "Show", 50);
521 fCameraCenterExt = new TGCheckButton(grf, "External", 50);
522 grf->AddFrame(fCameraCenterExt, new TGLayoutHints(kLHintsLeft, 0, 0, 1, 0));
523 fGuidesFrame->AddFrame(grf, new TGLayoutHints(kLHintsTop| kLHintsLeft | kLHintsExpandX, 2, 3, 3, 0));
524 Int_t labw = 20;
528 fCaptureCenter = new TGTextButton(grf, " Pick center ");
529 grf->AddFrame(fCaptureCenter, new TGLayoutHints(kLHintsNormal, labw + 2, 0, 2, 0));
530
531 // annotate
532 TGGroupFrame* annf = new TGGroupFrame(fGuidesFrame, "Annotation");
533 fGuidesFrame->AddFrame(annf, new TGLayoutHints(kLHintsTop | kLHintsCenterX | kLHintsExpandX, 2, 3, 0, 0));
534 fCaptureAnnotate = new TGCheckButton(annf, "Pick annotation");
536
537 // reference container
538 fRefContainer = new TGGroupFrame(fGuidesFrame, "Reference marker");
545
546 // axes
548 fAxesNone = new TGRadioButton(fAxesContainer, "None", 1);
549 fAxesEdge = new TGRadioButton(fAxesContainer, "Edge", 2);
550 fAxesOrigin = new TGRadioButton(fAxesContainer, "Origin", 3);
551 fAxesDepthTest = new TGCheckButton(fAxesContainer, "DepthTest",4);
553
554 // camera overlay
555 fCamContainer = new TGGroupFrame(fGuidesFrame, "Camera overlay");
560 TGLabel* lab = new TGLabel(chf, "Mode");
561 chf->AddFrame(lab, new TGLayoutHints(kLHintsLeft|kLHintsBottom, 1, 4, 1, 2));
562 fCamMode = new TGComboBox(chf);
564 fCamMode->AddEntry("Bar", TGLCameraOverlay::kBar);
565 fCamMode->AddEntry("Axis", TGLCameraOverlay::kAxis);
566 fCamMode->AddEntry("Grid Front", TGLCameraOverlay::kGridFront);
567 fCamMode->AddEntry("Grid Back", TGLCameraOverlay::kGridBack);
568 TGListBox* lb = fCamMode->GetListBox();
569 lb->Resize(lb->GetWidth(), 5*18);
570 fCamMode->Resize(90, 20);
571 chf->AddFrame(fCamMode, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
572 fCamContainer->AddFrame(chf);
573}
574
575////////////////////////////////////////////////////////////////////////////////
576/// Create GUI controls - clip type (none/plane/box) and plane/box properties.
577
579{
581
583 fClipSet->Connect("Changed()", "TGLViewerEditor", this, "ViewerRedraw()");
584 fClipFrame->AddFrame(fClipSet, new TGLayoutHints(kLHintsTop | kLHintsExpandX, 2, 0, 0, 0));
585}
586
587////////////////////////////////////////////////////////////////////////////////
588/// Create Extra Tab controls - camera rotator and stereo.
589
591{
592 Int_t labw = 80;
593
594 TGCompositeFrame *tab = CreateEditorTabSubFrame("Extras"), *p = nullptr;
595
596 // ----- Auto rotator -----
597
598 p = new TGGroupFrame(tab, "Auto rotator", kVerticalFrame);
599
600 //
601 fRotateSceneOn = new TGCheckButton(p, "Rotate all objects");
602 fRotateSceneOn->SetToolTipText("This covers a very specific use-case and is most likely not what you need.\nProceed at your own risk. Sorry about that.");
603 p->AddFrame(fRotateSceneOn, new TGLayoutHints(kLHintsLeft, 4, 1, 1, 1));
604
606 fSceneRotDt->SetLimits(TGNumberFormat::kNELLimitMinMax, 0.005, 0.06);
607
609 fARotDt->SetLimits(TGNumberFormat::kNELLimitMinMax, 0.001, 1);
610
611 fARotWPhi = MakeLabeledNEntry(p, "Omega Phi:", labw, 5, TGNumberFormat::kNESRealTwo);
612 fARotWPhi->SetLimits(TGNumberFormat::kNELLimitMinMax, -10, 10);
613
615 fARotATheta->SetLimits(TGNumberFormat::kNELLimitMinMax, 0.01, 1);
616
617 fARotWTheta = MakeLabeledNEntry(p, "Omega Theta:", labw, 5, TGNumberFormat::kNESRealTwo);
618 fARotWTheta->SetLimits(TGNumberFormat::kNELLimitMinMax, -10, 10);
619
621 fARotADolly->SetLimits(TGNumberFormat::kNELLimitMinMax, 0.01, 1);
622
623 fARotWDolly = MakeLabeledNEntry(p, "Omega Dolly:", labw, 5, TGNumberFormat::kNESRealTwo);
624 fARotWDolly->SetLimits(TGNumberFormat::kNELLimitMinMax, -10, 10);
625
626 {
628
629 TGTextButton *b = new TGTextButton(l, "Start");
630 b->Connect("Clicked()", "TGLViewerEditor", this, "DoRotatorStart()");
631 l->AddFrame(b, new TGLayoutHints(kLHintsLeft | kLHintsExpandX));
632
633 b = new TGTextButton(l, "Stop");
634 b->Connect("Clicked()", "TGLViewerEditor", this, "DoRotatorStop()");
635 l->AddFrame(b, new TGLayoutHints(kLHintsLeft | kLHintsExpandX));
636
637 p->AddFrame(l, new TGLayoutHints(kLHintsTop | kLHintsExpandX, 0, 0, 4, 0));
638 }
639
641
642 // ----- Auto Save Images -----
643
644 p = new TGGroupFrame(tab, "Auto save images", kVerticalFrame);
645
647 fASavImageGUIBaseName->SetDefaultSize(160, 0);
648 p->AddFrame(fASavImageGUIBaseName, new TGLayoutHints(kLHintsTop | kLHintsExpandX, 0, 0, 4, 0));
649
652 new TGRadioButton(fASavImageGUIOutMode, "PNG set ");
653 fASavImageGUIOutMode->SetLayoutHints(new TGLayoutHints(kLHintsLeft | kLHintsBottom, 0, 0, 2, -10));
655
656 {
658
659 TGTextButton *b = new TGTextButton(l, "Start");
660 b->Connect("Clicked()", "TGLViewerEditor", this, "DoASavImageStart()");
661 l->AddFrame(b, new TGLayoutHints(kLHintsLeft | kLHintsExpandX));
662
663 b = new TGTextButton(l, "Stop");
664 b->Connect("Clicked()", "TGLViewerEditor", this, "DoASavImageStop()");
665 l->AddFrame(b, new TGLayoutHints(kLHintsLeft | kLHintsExpandX));
666
667 p->AddFrame(l, new TGLayoutHints(kLHintsTop | kLHintsExpandX, 0, 0, 4, 0));
668 }
669
671
672 // ----- Stereo -----
673
674 fStereoFrame = p = new TGGroupFrame(tab, "Stereo", kVerticalFrame);
675
676 // Int_t labw = 80;
677
680
683
686
688}
689
690
691////////////////////////////////////////////////////////////////////////////////
692/// Enable/disable reference position (x/y/z) number edits based on
693/// reference check box.
694
696{
697 fReferencePosX->SetState(fReferenceOn->IsDown());
698 fReferencePosY->SetState(fReferenceOn->IsDown());
699 fReferencePosZ->SetState(fReferenceOn->IsDown());
700}
701
702////////////////////////////////////////////////////////////////////////////////
703/// Configuration of guides GUI called from SetModel().
704
706{
707 Bool_t axesDepthTest = kFALSE;
708 Bool_t referenceOn = kFALSE;
709 Double_t referencePos[3] = {0.};
710 fViewer->GetGuideState(fAxesType, axesDepthTest, referenceOn, referencePos);
711
712 for (Int_t i = 1; i < 4; i++) {
713 TGButton * btn = fAxesContainer->GetButton(i);
714 if (fAxesType+1 == i)
715 btn->SetDown(kTRUE);
716 else
717 btn->SetDown(kFALSE);
718 }
719 fAxesContainer->GetButton(4)->SetOn(axesDepthTest, kFALSE);
720
721 fReferenceOn->SetDown(referenceOn);
722 fReferencePosX->SetNumber(referencePos[0]);
723 fReferencePosY->SetNumber(referencePos[1]);
724 fReferencePosZ->SetNumber(referencePos[2]);
726
727 // overlay
728 TGLCameraOverlay* co = fViewer->GetCameraOverlay();
729 TGCompositeFrame *fr = (TGCompositeFrame*)((TGFrameElement*) fCamContainer->GetList()->Last() )->fFrame;
730
731 if (fViewer->CurrentCamera().IsOrthographic())
732 {
733 fCamOverlayOn->SetDown(co->GetShowOrthographic());
734 fr->ShowFrame(fCamMode);
735
736
737 if (! fr->IsMapped()) {
738 fr->MapSubwindows();
739 fr->MapWindow();
740 fCamContainer->MapWindow();
741 fCamContainer->MapWindow();
742 fCamMode->Select(co->GetOrthographicMode(), kFALSE);
743 }
744 }
745 else
746 {
747 fCamOverlayOn->SetDown(co->GetShowPerspective());
748
749 // only mode implemented for perspective camera
750 fCamMode->Select(co->GetPerspectiveMode(), kFALSE);
751 fr->HideFrame(fCamMode);
752 if (fr->IsMapped())
753 fr->UnmapWindow();
754 }
755}
756
757////////////////////////////////////////////////////////////////////////////////
758
760{
761 if (TGLAutoRotator * const r = fViewer->GetAutoRotator()) {
762 r->Stop();
763
764 if (fRotateSceneOn->IsOn()) {
765 r->SetDeltaPhi(fSceneRotDt->GetNumber());
766
767 SetLabeledNEntryState(fSceneRotDt, kTRUE);
768 SetLabeledNEntryState(fARotDt, kFALSE);
769 SetLabeledNEntryState(fARotWPhi, kFALSE);
770 SetLabeledNEntryState(fARotATheta, kFALSE);
771 SetLabeledNEntryState(fARotWTheta, kFALSE);
772 SetLabeledNEntryState(fARotADolly, kFALSE);
773 SetLabeledNEntryState(fARotWDolly, kFALSE);
774 } else {
775 SetLabeledNEntryState(fSceneRotDt, kFALSE);
776 SetLabeledNEntryState(fARotDt, kTRUE);
777 SetLabeledNEntryState(fARotWPhi, kTRUE);
778 SetLabeledNEntryState(fARotATheta, kTRUE);
779 SetLabeledNEntryState(fARotWTheta, kTRUE);
780 SetLabeledNEntryState(fARotADolly, kTRUE);
781 SetLabeledNEntryState(fARotWDolly, kTRUE);
782 }
783
784 r->SetRotateScene(fRotateSceneOn->IsOn());
785 }
786}
787
788////////////////////////////////////////////////////////////////////////////////
789/// Update rotator related variables.
790
792{
793 TGLAutoRotator *r = fViewer->GetAutoRotator();
794 if (fRotateSceneOn->IsOn()) {
795 r->SetDeltaPhi(fSceneRotDt->GetNumber());
796 } else {
797 r->SetDt (fARotDt->GetNumber());
798 r->SetWPhi (fARotWPhi->GetNumber());
799 r->SetATheta(fARotATheta->GetNumber());
800 r->SetWTheta(fARotWTheta->GetNumber());
801 r->SetADolly(fARotADolly->GetNumber());
802 r->SetWDolly(fARotWDolly->GetNumber());
803 }
804}
805
806////////////////////////////////////////////////////////////////////////////////
807/// Start auto-rotator.
808
810{
811 TGLAutoRotator *r = fViewer->GetAutoRotator();
812 if (!r->IsRunning())
813 r->SetRotateScene(fRotateSceneOn->IsOn());
814
815 r->Start();
816}
817
818////////////////////////////////////////////////////////////////////////////////
819/// Stop auto-rotator.
820
822{
823 fViewer->GetAutoRotator()->Stop();
824}
825
826////////////////////////////////////////////////////////////////////////////////
827/// Update base-name.
828
830{
831 TGLAutoRotator *r = fViewer->GetAutoRotator();
832 r->SetImageGUIBaseName(t);
833}
834
835////////////////////////////////////////////////////////////////////////////////
836/// Update output mode.
837
839{
840 TGLAutoRotator *r = fViewer->GetAutoRotator();
841 r->SetImageGUIOutMode(m);
842}
843
844////////////////////////////////////////////////////////////////////////////////
845/// Start auto-rotator image auto-save.
846
848{
849 TGLAutoRotator *r = fViewer->GetAutoRotator();
850 if (r->GetImageAutoSave())
851 {
852 Warning("DoASavImageStart", "AutoSave in progress.");
853 return;
854 }
855
856 r->StartImageAutoSaveWithGUISettings();
857}
858
859////////////////////////////////////////////////////////////////////////////////
860/// Stop auto-rotator image auto-save.
861
863{
864 TGLAutoRotator *r = fViewer->GetAutoRotator();
865 if (!r->GetImageAutoSave())
866 {
867 Warning("DoASavImageStop", "AutoSave not in progress.");
868 return;
869 }
870
871 r->StopImageAutoSave();
872}
873
874////////////////////////////////////////////////////////////////////////////////
875/// Update stereo related variables.
876
878{
879 fViewer->SetStereoZeroParallax (fStereoZeroParallax->GetNumber());
880 fViewer->SetStereoEyeOffsetFac (fStereoEyeOffsetFac->GetNumber());
881 fViewer->SetStereoFrustumAsymFac(fStereoFrustumAsymFac->GetNumber());
882 ViewerRedraw();
883}
884
885//Aux. functions that do not have to be members.
886
887namespace {
888
889//Here's how we create a number entry and its label:
890
891// TGHorizontalFrame *rfr = new TGHorizontalFrame(p);
892// TGHorizontalFrame *labfr = new TGHorizontalFrame(rfr, labelw, 20, kFixedSize);
893// TGLabel *lab = new TGLabel(labfr, name);
894// labfr->AddFrame(lab, new TGLayoutHints(kLHintsLeft | kLHintsBottom, 0, 0, 0) );
895// rfr->AddFrame(labfr, new TGLayoutHints(kLHintsLeft | kLHintsBottom, 0, 0, 0));
896//
897// TGNumberEntry* ne = new TGNumberEntry(rfr, 0.0f, nd, -1, (TGNumberFormat::EStyle)style);
898// rfr->AddFrame(ne, new TGLayoutHints(kLHintsLeft | kLHintsExpandX | kLHintsBottom, 2, 0, 0));
899//
900// p->AddFrame(rfr, new TGLayoutHints(kLHintsLeft, 0, 0, 1, 0));
901
902////////////////////////////////////////////////////////////////////////////////
903
904TGLabel *FindLabelForNEntry(TGNumberEntry *entry)
905{
906 if (!entry) {
907 //I would prefer an assert here.
908 ::Error("FindLabelForNEntry", "parameter 'entry' is null");
909 return nullptr;
910 }
911
912 TGLabel *label = nullptr;
913
914 if (const TGHorizontalFrame * const grandpa = dynamic_cast<const TGHorizontalFrame *>(entry->GetParent())) {
915 if (TList * const parents = grandpa->GetList()) {
916 TIter next1(parents);
917 while (TGFrameElement * const frameElement = dynamic_cast<TGFrameElement *>(next1())) {
918 if (TGHorizontalFrame * const parent = dynamic_cast<TGHorizontalFrame *>(frameElement->fFrame)) {
919 if (TList * const children = parent->GetList()) {
920 TIter next2(children);
921 while (TGFrameElement * const candidate = dynamic_cast<TGFrameElement *>(next2())) {
922 if ((label = dynamic_cast<TGLabel *>(candidate->fFrame)))
923 break;
924 }
925 }
926 }
927
928 if (label)
929 break;
930 }
931 }
932 }
933
934 return label;
935}
936
937////////////////////////////////////////////////////////////////////////////////
938///This is quite an ugly hack but still not as ugly as having 5-6 additional
939///TGLabels as data members.
940
941void SetLabeledNEntryState(TGNumberEntry *entry, Bool_t enabled)
942{
943 if (!entry) {
944 //I would prefer an assert here.
945 ::Error("SetLabeledNEntryState", "parameter 'entry' is null");
946 return;
947 }
948
949 entry->SetState(enabled);
950 if (TGLabel * const label = FindLabelForNEntry(entry))
951 //Wah!
952 label->Disable(!enabled);
953}
954
955}
@ kChildFrame
Definition GuiTypes.h:380
@ kVerticalFrame
Definition GuiTypes.h:382
@ kHorizontalFrame
Definition GuiTypes.h:383
@ kFixedSize
Definition GuiTypes.h:391
ULong_t Pixel_t
Pixel value.
Definition GuiTypes.h:41
ROOT::R::TRInterface & r
Definition Object.C:4
#define b(i)
Definition RSha256.hxx:100
int Int_t
Signed integer 4 bytes (int).
Definition RtypesCore.h:59
unsigned int UInt_t
Unsigned integer 4 bytes (unsigned int).
Definition RtypesCore.h:60
bool Bool_t
Boolean (0=false, 1=true) (bool).
Definition RtypesCore.h:77
constexpr Bool_t kFALSE
Definition RtypesCore.h:108
double Double_t
Double 8 bytes.
Definition RtypesCore.h:73
short Color_t
Color number (short).
Definition RtypesCore.h:99
constexpr Bool_t kTRUE
Definition RtypesCore.h:107
Error("WriteTObject","The current directory (%s) is not associated with a file. The object (%s) has not been written.", GetName(), objname)
void Warning(const char *location, const char *msgfmt,...)
Use this function in warning situations.
Definition TError.cxx:252
@ kButtonDown
Definition TGButton.h:54
@ kButtonUp
Definition TGButton.h:53
@ kLHintsLeft
Definition TGLayout.h:24
@ kLHintsNormal
Definition TGLayout.h:32
@ kLHintsCenterX
Definition TGLayout.h:25
@ kLHintsBottom
Definition TGLayout.h:29
@ kLHintsTop
Definition TGLayout.h:27
@ kLHintsExpandX
Definition TGLayout.h:30
char name[80]
Definition TGX11.cxx:148
#define gGLManager
Definition TVirtualGL.h:159
static Int_t GetColor(const char *hexcolor)
static ULong_t Number2Pixel(Int_t ci)
Organizes TGButton widgets in a group.
A button abstract base class.
Definition TGButton.h:68
virtual void SetDown(Bool_t on=kTRUE, Bool_t emit=kFALSE)
Definition TGButton.cxx:304
Selects different options.
Definition TGButton.h:264
Like a checkbutton but instead of the check mark there is color area with a little down arrow.
A combobox (also known as a drop down listbox) allows the selection of one item out of a list of item...
Definition TGComboBox.h:47
virtual void AddFrame(TGFrame *f, TGLayoutHints *l=nullptr)
Add frame to the composite frame using the specified layout hints.
Definition TGFrame.cxx:1109
void MapSubwindows() override
Map all sub windows that are part of the composite frame.
Definition TGFrame.cxx:1156
TGCompositeFrame(const TGCompositeFrame &)=delete
virtual void ShowFrame(TGFrame *f)
Show sub frame.
Definition TGFrame.cxx:1196
virtual void HideFrame(TGFrame *f)
Hide sub frame.
Definition TGFrame.cxx:1182
void MapWindow() override
map window
Definition TGFrame.h:206
void UnmapWindow() override
unmap window
Definition TGFrame.h:208
UInt_t GetWidth() const
Definition TGFrame.h:226
A composite frame with a border and a title.
Definition TGFrame.h:532
A composite frame that layout their children in horizontal way.
Definition TGFrame.h:387
Automatically rotates GL camera.
A GL overlay element which displays camera furstum.
void SetShowPerspective(Bool_t x)
Int_t GetPerspectiveMode() const
void SetShowOrthographic(Bool_t x)
Int_t GetOrthographicMode() const
Bool_t GetShowPerspective() const
Bool_t GetShowOrthographic() const
void SetPerspectiveMode(EMode m)
void SetOrthographicMode(EMode m)
Abstract base camera class - concrete classes for orthographic and perspective cameras derive from it...
Definition TGLCamera.h:44
Double_t * GetCenterVec()
Definition TGLCamera.h:157
Bool_t GetExternalCenter()
Definition TGLCamera.h:153
void SetExternalCenter(Bool_t x)
Set camera center diffrent than scene center, if enable is kTRUE.
void SetCenterVec(Double_t x, Double_t y, Double_t z)
Set camera center vector.
GUI sub-editor for TGLClipSet.
Sub-editor for TGLLightSet.
TGButtonGroup * fAxesContainer
void DoDrawCameraCenter()
Draw camera center.
void DoUpdateScene()
UpdateScene was clicked.
TGCompositeFrame * fGuidesFrame
void DoCameraHome()
CameraHome was clicked.
void DoCaptureCenter()
Capture camera-center via picking.
void DoCameraCenterExt()
Set external camera center.
void DoASavImageGUIBaseName(const char *t)
Update base-name.
TGLLightSetSubEditor * fLightSet
static TGNumberEntry * MakeLabeledNEntry(TGCompositeFrame *p, const char *name, Int_t labelw, Int_t nd=7, Int_t s=5)
Helper function to create fixed width TGLabel and TGNumberEntry in same row.
void UpdateCameraCenter()
Update current camera with GUI state.
TGLViewer * fViewer
TGNumberEntry * fPointSizeScale
void DoClearColor(Pixel_t color)
Clear-color was changed.
void UpdatePointLineStuff()
Slot for point-sizes and line-widths.
TGCompositeFrame * fClipFrame
TGCheckButton * fPointSmooth
TGCheckButton * fReferenceOn
TGComboBox * fCamMode
TGNumberEntry * fARotWDolly
TGNumberEntry * fCameraCenterY
void SetGuides()
Configuration of guides GUI called from SetModel().
void DoRotatorStart()
Start auto-rotator.
TGNumberEntry * fStereoEyeOffsetFac
void UpdateViewerReference()
Update viewer with GUI state.
void CreateClippingTab()
Create GUI controls - clip type (none/plane/box) and plane/box properties.
TGCheckButton * fLineSmooth
void SetModel(TObject *obj) override
Sets model or disables/hides viewer.
TGNumberEntry * fMaxSceneDrawTimeLQ
TGCheckButton * fRotateSceneOn
void DoRotatorStop()
Stop auto-rotator.
TGNumberEntry * fARotATheta
TGCheckButton * fDrawCameraCenter
TGNumberEntry * fSceneRotDt
void UpdateStereo()
Update stereo related variables.
void UpdateMaxDrawTimes()
Slot for fMaxSceneDrawTimeHQ and fMaxSceneDrawTimeLQ.
TGNumberEntry * fReferencePosY
TGGroupFrame * fRefContainer
void UpdateReferencePosState()
Enable/disable reference position (x/y/z) number edits based on reference check box.
TGCheckButton * fResetCamerasOnUpdate
TGLClipSetSubEditor * fClipSet
TGCheckButton * fIgnoreSizesOnUpdate
TGCheckButton * fCameraCenterExt
TGNumberEntry * fCameraCenterX
TGNumberEntry * fReferencePosZ
TGRadioButton * fAxesEdge
TGNumberEntry * fCameraCenterZ
void DoIgnoreSizesOnUpdate()
ResetCamerasOnUpdate was toggled.
void DoASavImageGUIOutMode(Int_t m)
Update output mode.
TGNumberEntry * fARotADolly
TGLViewerEditor(const TGLViewerEditor &)
TGCheckButton * fCamOverlayOn
TGTextButton * fUpdateScene
void CreateExtrasTab()
Create Extra Tab controls - camera rotator and stereo.
TGCompositeFrame * fStereoFrame
void DoASavImageStop()
Stop auto-rotator image auto-save.
void CreateGuidesTab()
Create "Guides" tab.
void CreateStyleTab()
Creates "Style" tab.
TGButtonGroup * fASavImageGUIOutMode
TGNumberEntry * fReferencePosX
TGRadioButton * fAxesOrigin
void DoAnnotation()
Create annotation via picking.
virtual void ViewerRedraw()
Initiate redraw of the viewer.
TGNumberEntry * fOLLineWidth
TGNumberEntry * fARotWPhi
TGRadioButton * fAxesNone
void DoCameraOverlay()
Update viewer with GUI state.
TGColorSelect * fClearColor
TGNumberEntry * fARotDt
TGNumberEntry * fMaxSceneDrawTimeHQ
TGCheckButton * fCaptureAnnotate
TGNumberEntry * fWFLineWidth
void DoASavImageStart()
Start auto-rotator image auto-save.
void DoResetCamerasOnUpdate()
ResetCamerasOnUpdate was toggled.
TGGroupFrame * fCamContainer
TGNumberEntry * fStereoFrustumAsymFac
TGTextButton * fCameraHome
~TGLViewerEditor() override
TGNumberEntry * fARotWTheta
void UpdateViewerAxes(Int_t id)
Update viewer with GUI state.
TGNumberEntry * fLineWidthScale
TGCheckButton * fAxesDepthTest
TGTextEntry * fASavImageGUIBaseName
TGNumberEntry * fStereoZeroParallax
void UpdateRotator()
Update rotator related variables.
void ConnectSignals2Slots()
Connect signals to slots.
TGTextButton * fCaptureCenter
Base GL viewer object - used by both standalone and embedded (in pad) GL.
Definition TGLViewer.h:55
@ kPushCamCenter
Definition TGLViewer.h:126
@ kPushAnnotate
Definition TGLViewer.h:126
This class handles GUI labels.
Definition TGLabel.h:24
virtual void Disable(Bool_t on=kTRUE)
Definition TGLabel.h:89
This class describes layout hints used by the layout classes.
Definition TGLayout.h:50
A listbox is a box, possibly with scrollbar, containing entries.
Definition TGListBox.h:221
void Resize(UInt_t w, UInt_t h) override
Resize the listbox widget.
TGNumberEntry is a number entry input widget with up/down buttons.
virtual void SetState(Bool_t enable=kTRUE)
Set the active state.
@ kNESRealOne
Fixed fraction real, one digit.
@ kNESRealThree
Fixed fraction real, three digit.
@ kNESInteger
Style of number entry field.
@ kNESRealTwo
Fixed fraction real, two digit.
@ kNELLimitMin
Lower limit only.
@ kNELLimitMinMax
Both lower and upper limits.
Selects different options.
Definition TGButton.h:321
Yield an action as soon as it is clicked.
Definition TGButton.h:142
A TGTextEntry is a one line text input widget.
Definition TGTextEntry.h:24
ROOT GUI Window base class.
Definition TGWindow.h:23
const TGWindow * GetParent() const
Definition TGWindow.h:83
virtual Bool_t IsMapped()
Returns kTRUE if window is mapped on screen, kFALSE otherwise.
Definition TGWindow.cxx:293
virtual TGVerticalFrame * CreateEditorTabSubFrame(const char *name)
Create a vertical frame to be used by 'owner' in extra tab 'name'.
TGedFrame(const TGedFrame &)=delete
Bool_t fInit
init flag for setting signals/slots
Definition TGedFrame.h:47
virtual void MakeTitle(const char *title)
Create attribute frame title.
Definition TGedFrame.cxx:94
A doubly linked list.
Definition TList.h:38
Mother of all ROOT objects.
Definition TObject.h:42
TCanvas * style()
Definition style.C:1
TMarker m
Definition textangle.C:8
TLine l
Definition textangle.C:4