Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
TStructNodeEditor.cxx
Go to the documentation of this file.
1// @(#)root/gviz3d:$Id$
2// Author: Tomasz Sosnicki 18/09/09
3
4/************************************************************************
5* Copyright (C) 1995-2009, 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
13#include "TStructNodeEditor.h"
14#include "TStructNode.h"
15#include "TStructNodeProperty.h"
16
17#include <TGColorSelect.h>
18#include <TGNumberEntry.h>
19#include <TGLabel.h>
20#include <TGTextEntry.h>
21#include <TClass.h>
22
24
25//________________________________________________________________________
26//////////////////////////////////////////////////////////////////////////
27//
28// TStructNodeEditor is an editor for changing node attributes such as
29// maximum numbers of level or maximum number of objects diplayed if this
30// node is our top node. We can also change color associated with a class
31// or chagne color to default.
32//
33//////////////////////////////////////////////////////////////////////////
34
35////////////////////////////////////////////////////////////////////////////////
36/// Constructor of node attributes GUI.
37
39 : TGedFrame(p, width, height, options | kVerticalFrame, back), fColors(colors)
40{
41 MakeTitle("TStructNode");
42 fInit = kFALSE;
43
44 TGLayoutHints* expandX = new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 5,5,5,5);
45 fNodeNameLabel = new TGLabel(this, "No node selected");
46 this->AddFrame(fNodeNameLabel, expandX);
47
48 fTypeName = new TGLabel(this);
49
50 this->AddFrame(fTypeName, expandX);
51
52 TGHorizontalFrame* maxObjectsFrame = new TGHorizontalFrame(this);
53 TGLabel* fMaxObjectslabel = new TGLabel(maxObjectsFrame, "Max objects:");
54 maxObjectsFrame->AddFrame(fMaxObjectslabel);
55
56 fMaxObjectsNumberEntry = new TGNumberEntry(maxObjectsFrame, 0);
60 fMaxObjectsNumberEntry->Connect("ValueSet(Long_t)", "TStructNodeEditor", this, "MaxObjectsValueSetSlot(Long_t)");
61 maxObjectsFrame->AddFrame(fMaxObjectsNumberEntry);
62 this->AddFrame(maxObjectsFrame, expandX);
63
64 TGHorizontalFrame* maxLevelFrame = new TGHorizontalFrame(this);
65 TGLabel* fMaxLevelsLabel = new TGLabel(maxLevelFrame, "Max levels:");
66 maxLevelFrame->AddFrame(fMaxLevelsLabel);
67 fMaxLevelsNumberEntry = new TGNumberEntry(maxLevelFrame, 0);
71 fMaxLevelsNumberEntry->Connect("ValueSet(Long_t)", "TStructNodeEditor", this, "MaxLevelsValueSetSlot(Long_t)");
72 maxLevelFrame->AddFrame(fMaxLevelsNumberEntry);
73 this->AddFrame(maxLevelFrame, expandX);
74
75 fNameEntry = new TGTextEntry(this, fName.Data());
76 this->AddFrame(fNameEntry, expandX);
78
79 fColorSelect = new TGColorSelect(this);
80 fColorSelect->Connect("ColorSelected(Pixel_t)", "TStructNodeEditor", this, "ColorSelectedSlot(Pixel_t)");
81 this->AddFrame(fColorSelect, expandX);
83
84 fAutoRefesh = new TGCheckButton(this, "Auto refesh");
86 fAutoRefesh->Connect("Toggled(Bool_t)", "TStructNodeEditor", this, "AutoRefreshButtonSlot(Bool_t)");
88 this->AddFrame(fAutoRefesh, expandX);
89
90 fDefaultButton = new TGTextButton(this, "Default color");
91 fDefaultButton->Connect("Clicked()", "TStructNodeEditor", this, "DefaultButtonSlot()");
92 this->AddFrame(fDefaultButton, expandX);
94
95
96 fApplyButton = new TGTextButton(this, "Apply");
97 fApplyButton->Connect("Clicked()", "TStructNodeEditor", this, "ApplyButtonSlot()");
99 this->AddFrame(fApplyButton, expandX);
100}
101
102////////////////////////////////////////////////////////////////////////////////
103/// Destructor of node editor.
104
106{
107}
108
109////////////////////////////////////////////////////////////////////////////////
110/// ApplyButton Slot. Activated when user press Apply button. Sets properties of a node
111
113{
114 Bool_t needReset = false;
115
118 needReset = true;
119 }
120
123 needReset = true;
124 }
125
126 if (fSelectedPropert) {
129 }
130
131 Update(needReset);
132}
133
134////////////////////////////////////////////////////////////////////////////////
135/// Activated when user chage condition
136
138{
139 if (on) {
140 Update(kTRUE);
141 }
142}
143
144////////////////////////////////////////////////////////////////////////////////
145/// Slot connected to the fill area color.
146
148{
149 if (fAvoidSignal) {
150 return;
151 }
152
154 if (prop) {
155 prop->SetColor(color);
156 } else {
157 // add property
158 prop = new TStructNodeProperty(fNode->GetTypeName(), color);
159 fColors->Add(prop);
160 fColors->Sort();
163 }
164 Update();
165}
166
167////////////////////////////////////////////////////////////////////////////////
168/// Slot for Defaulf button. Sets color of class to default
169
171{
177 Update();
178 }
179}
180
181////////////////////////////////////////////////////////////////////////////////
182/// Retruns property associated to the class of given node "node". If property isn't found
183/// then returns NULL
184
186{
187 TIter it(fColors);
189 while ((prop = (TStructNodeProperty*) it() )) {
190 TString propName(prop->GetName());
191 if (propName.EndsWith("+")) {
192
193 if (TClass* cl = TClass::GetClass(node->GetTypeName())) {
194 propName.Remove(propName.Length()-1, 1);
195 if (cl->InheritsFrom(propName.Data())) {
196 return prop;
197 }
198 }
199 } else {
200 if (propName == TString(node->GetTypeName())) {
201 return prop;
202 }
203 }
204 }
205
206 return NULL;
207}
208
209////////////////////////////////////////////////////////////////////////////////
210/// Returns property with default color
211
213{
214 return (TStructNodeProperty*)fColors->Last();
215}
216
217////////////////////////////////////////////////////////////////////////////////
218/// Enables button and fields
219
221{
229 fInit = kTRUE;
230}
231
232////////////////////////////////////////////////////////////////////////////////
233/// Emmited when user changes maximum number of levels
234
236{
238
239 if(fAutoRefesh->IsOn()) {
240 Update(kTRUE);
241 }
242}
243
244////////////////////////////////////////////////////////////////////////////////
245/// Emmited when user changes maximum number of objects
246
248{
250
251 if(fAutoRefesh->IsOn()) {
252 Update(kTRUE);
253 }
254}
255
256////////////////////////////////////////////////////////////////////////////////
257/// Pick up the used node attributes.
258
260{
261 fNode = dynamic_cast<TStructNode *>(obj);
262 if (!fNode) return;
263
264 // Add max level
266
267 // Add max objects
269
270 // Type label
271 fTypeName->SetText(fNode->GetTypeName());
272
273 // name label
275
276 // Add color property
278 if (!fSelectedPropert)
279 {
281 }
284
285 if (!fInit) {
286 Init();
287 }
288}
289
290////////////////////////////////////////////////////////////////////////////////
291/// Signal emmited when color or other property like number of level is changed
292/// without camera reset
293
295{
296 Emit("Update(Bool_t)", false);
297}
298
299////////////////////////////////////////////////////////////////////////////////
300/// Signal emmited when color or other property like number of level is changed.
301/// If "resetCamera" is true, then current camera is reset.
302
304{
305 Emit("Update(Bool_t)", resetCamera);
306}
@ kVerticalFrame
Definition GuiTypes.h:381
ULong_t Pixel_t
Pixel value.
Definition GuiTypes.h:40
long Long_t
Definition RtypesCore.h:54
constexpr Bool_t kFALSE
Definition RtypesCore.h:101
constexpr Bool_t kTRUE
Definition RtypesCore.h:100
#define ClassImp(name)
Definition Rtypes.h:377
@ kLHintsLeft
Definition TGLayout.h:24
@ kLHintsExpandX
Definition TGLayout.h:30
winID h TVirtualViewer3D TVirtualGLPainter p
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h prop
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void on
Option_t Option_t width
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t height
Color * colors
Definition X3DBuffer.c:21
TClass instances represent classes, structs and namespaces in the ROOT type system.
Definition TClass.h:81
static TClass * GetClass(const char *name, Bool_t load=kTRUE, Bool_t silent=kFALSE)
Static method returning pointer to TClass of the specified class name.
Definition TClass.cxx:2968
virtual void SetOn(Bool_t on=kTRUE, Bool_t emit=kFALSE)
Definition TGButton.h:120
virtual void SetEnabled(Bool_t e=kTRUE)
Set enabled or disabled state of button.
Definition TGButton.cxx:459
Selects different options.
Definition TGButton.h:264
Bool_t IsOn() const override
Definition TGButton.h:310
Like a checkbutton but instead of the check mark there is color area with a little down arrow.
void SetEnabled(Bool_t e=kTRUE) override
Set enabled or disabled state of button.
void SetColor(Pixel_t color, Bool_t emit=kTRUE)
Set color.
Pixel_t GetColor() const
virtual void AddFrame(TGFrame *f, TGLayoutHints *l=nullptr)
Add frame to the composite frame using the specified layout hints.
Definition TGFrame.cxx:1117
A composite frame that layout their children in horizontal way.
Definition TGFrame.h:385
This class handles GUI labels.
Definition TGLabel.h:24
virtual void SetText(TGString *newText)
Set new text in label.
Definition TGLabel.cxx:180
This class describes layout hints used by the layout classes.
Definition TGLayout.h:50
TGNumberEntry is a number entry input widget with up/down buttons.
virtual void SetLimits(ELimit limits=TGNumberFormat::kNELNoLimits, Double_t min=0, Double_t max=1)
virtual void SetState(Bool_t enable=kTRUE)
Set the active state.
virtual void SetIntNumber(Long_t val, Bool_t emit=kTRUE)
virtual Long_t GetIntNumber() const
virtual void SetFormat(EStyle style, EAttribute attr=TGNumberFormat::kNEAAnyNumber)
@ kNESInteger
Style of number entry field.
@ kNELLimitMin
Lower limit only.
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
virtual void SetState(Bool_t state)
Set state of widget. If kTRUE=enabled, kFALSE=disabled.
const char * GetText() const
virtual void SetText(const char *text, Bool_t emit=kTRUE)
Sets text entry to text, clears the selection and moves the cursor to the end of the line.
ROOT GUI Window base class.
Definition TGWindow.h:23
TString fName
name of the window used in SavePrimitive()
Definition TGWindow.h:30
Base frame for implementing GUI - a service class.
Definition TGedFrame.h:27
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:95
Bool_t fAvoidSignal
flag for executing slots
Definition TGedFrame.h:50
A doubly linked list.
Definition TList.h:38
void Add(TObject *obj) override
Definition TList.h:81
TObject * Remove(TObject *obj) override
Remove object from the list.
Definition TList.cxx:822
TObject * Last() const override
Return the last object in the list. Returns 0 when list is empty.
Definition TList.cxx:693
virtual void Sort(Bool_t order=kSortAscending)
Sort linked list.
Definition TList.cxx:937
const char * GetName() const override
Returns name of object.
Definition TNamed.h:47
virtual void SetName(const char *name)
Set the name of the TNamed.
Definition TNamed.cxx:140
Mother of all ROOT objects.
Definition TObject.h:41
void Emit(const char *signal, const T &arg)
Activate signal with single parameter.
Definition TQObject.h:164
Bool_t Connect(const char *signal, const char *receiver_class, void *receiver, const char *slot)
Non-static method is used to connect from the signal of this object to the receiver slot.
Definition TQObject.cxx:869
Basic string class.
Definition TString.h:139
Ssiz_t Length() const
Definition TString.h:421
Bool_t EndsWith(const char *pat, ECaseCompare cmp=kExact) const
Return true if string ends with the specified string.
Definition TString.cxx:2222
const char * Data() const
Definition TString.h:380
TString & Remove(Ssiz_t pos)
Definition TString.h:685
TGColorSelect * fColorSelect
void MaxLevelsValueSetSlot(Long_t)
Emmited when user changes maximum number of levels.
~TStructNodeEditor()
Destructor of node editor.
TStructNodeProperty * GetDefaultProperty()
Returns property with default color.
void SetModel(TObject *obj)
Pick up the used node attributes.
void MaxObjectsValueSetSlot(Long_t)
Emmited when user changes maximum number of objects.
void DefaultButtonSlot()
Slot for Defaulf button. Sets color of class to default.
void Update()
Signal emmited when color or other property like number of level is changed without camera reset.
TGNumberEntry * fMaxLevelsNumberEntry
void AutoRefreshButtonSlot(Bool_t on)
Activated when user chage condition.
void ColorSelectedSlot(Pixel_t color)
Slot connected to the fill area color.
TGNumberEntry * fMaxObjectsNumberEntry
TStructNodeProperty * fSelectedPropert
TGCheckButton * fAutoRefesh
TGTextEntry * fNameEntry
TStructNodeEditor(TList *colors, const TGWindow *p=nullptr, Int_t width=140, Int_t height=30, UInt_t options=kChildFrame, Pixel_t back=GetDefaultFrameBackground())
Constructor of node attributes GUI.
TGTextButton * fApplyButton
TGTextButton * fDefaultButton
TStructNodeProperty * FindNodeProperty(TStructNode *node)
Retruns property associated to the class of given node "node".
void Init()
Enables button and fields.
void ApplyButtonSlot()
ApplyButton Slot. Activated when user press Apply button. Sets properties of a node.
Pixel_t GetPixel() const
Return color in Pixel_t format.
void SetColor(const TColor &color)
Sets the color to "color".
UInt_t GetMaxLevel() const
Returns maximum number of leves displayed when the node is top node on scene.
TString GetTypeName() const
Returns name of class.
void SetMaxLevel(UInt_t level)
Sets maximum number of leves displayed when the node is top node on scene.
void SetMaxObjects(UInt_t max)
Sets maximum number of objects displayed when the node is top node on scene.
const char * GetName() const
Returns name of object.
UInt_t GetMaxObjects() const
Returns maximum number of objects displayed when the node is top node on scene.
struct void * fTypeName
Definition cppyy.h:9