Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
TPieSliceEditor.cxx
Go to the documentation of this file.
1 #include "TPieSliceEditor.h"
2 #include "TPieSlice.h"
3 #include "TGTextEntry.h"
4 #include "TGNumberEntry.h"
5 #include "TGLabel.h"
6 
7 ClassImp(TPieSliceEditor);
8 
9 
10 enum EPieSliceID{
11  kPieSlice_Title = 0, kPieSlice_Value, kPieSlice_Offset
12 };
13 
14 
15 ////////////////////////////////////////////////////////////////////////////////
16 /// TPieSliceEditor constructor.
17 
18 TPieSliceEditor::TPieSliceEditor(const TGWindow *p,
19  Int_t width, Int_t height,
20  UInt_t options, Pixel_t back)
21  : TGedFrame(p, width, height, options | kVerticalFrame, back)
22 {
23  fPieSlice = 0;
24 
25  // start initializing the window components
26  MakeTitle("Title");
27 
28  fTitle = new TGTextEntry(this, new TGTextBuffer(50), kPieSlice_Title);
29  fTitle->Resize(135, fTitle->GetDefaultHeight());
30  fTitle->SetToolTipText("Enter the pie-slice label");
31  // better take kLHintsLeft and Right - Right is not working at the moment
32  AddFrame(fTitle, new TGLayoutHints(kLHintsLeft, 3, 1, 2, 5));
33 
34  TGCompositeFrame *f1 = new TGCompositeFrame(this, 120, 20, kHorizontalFrame);
35  TGLabel *lbl1 = new TGLabel(f1,"Value");
36  fValue = new TGNumberEntry(f1, 2, 2, kPieSlice_Value, TGNumberEntry::kNESReal, TGNumberEntry::kNEANonNegative);
37  //fValue->SetToolTipText("Set the slice absolute value")
38  fValue->Resize(50, 20);
39  f1->AddFrame(lbl1, new TGLayoutHints(kLHintsLeft, 1, 1, 1, 1));
40  f1->AddFrame(fValue, new TGLayoutHints(kLHintsLeft, 1, 1, 1, 1));
41  AddFrame(f1, new TGLayoutHints(kLHintsLeft, 1, 1, 1, 1));
42 
43  TGCompositeFrame *f2 = new TGCompositeFrame(this, 120, 20, kHorizontalFrame);
44  TGLabel *lbl2 = new TGLabel(f2,"Rad Offset");
45  fOffset = new TGNumberEntry(f2, 4, 2, kPieSlice_Offset, TGNumberEntry::kNESRealTwo, TGNumberEntry::kNEANonNegative);
46  //fOffset->SetToolTipText("Set the slice radial offset")
47  fOffset->Resize(50, 20);
48  f2->AddFrame(lbl2, new TGLayoutHints(kLHintsLeft,1, 1, 1, 1));
49  f2->AddFrame(fOffset, new TGLayoutHints(kLHintsLeft, 7, 1, 1, 1));
50  AddFrame(f2, new TGLayoutHints(kLHintsLeft, 1, 1, 1, 1));
51 }
52 
53 
54 ////////////////////////////////////////////////////////////////////////////////
55 /// TPieSliceEditor destructor.
56 
57 TPieSliceEditor::~TPieSliceEditor()
58 {
59 }
60 
61 
62 ////////////////////////////////////////////////////////////////////////////////
63 /// Set model.
64 
65 void TPieSliceEditor::SetModel(TObject *obj)
66 {
67  fPieSlice = (TPieSlice*) (obj);
68 
69  fAvoidSignal = kTRUE;
70  fTitle->SetText(fPieSlice->GetTitle());
71  fValue->SetNumber(fPieSlice->GetValue());
72  fOffset->SetNumber(fPieSlice->GetRadiusOffset());
73 
74  if (fInit) ConnectSignals2Slots();
75  fAvoidSignal = kFALSE;
76 }
77 
78 
79 ////////////////////////////////////////////////////////////////////////////////
80 /// Connect signals to slots.
81 
82 void TPieSliceEditor::ConnectSignals2Slots()
83 {
84  fTitle->Connect("TextChanged(const char *)","TPieSliceEditor",this,"DoTitle(const char *)");
85  fValue->Connect("ValueSet(Long_t)", "TPieSliceEditor", this, "DoValue()");
86  fOffset->Connect("ValueSet(Long_t)", "TPieSliceEditor", this, "DoOffset()");
87 
88  fInit = kFALSE; // connect the slots to the signals only once
89 }
90 
91 
92 ////////////////////////////////////////////////////////////////////////////////
93 /// Slot for setting the graph title.
94 
95 void TPieSliceEditor::DoTitle(const char *text)
96 {
97  if (fAvoidSignal) return;
98  fPieSlice->SetTitle(text);
99  Update();
100 }
101 
102 
103 ////////////////////////////////////////////////////////////////////////////////
104 /// Slot for setting the graph title.
105 
106 void TPieSliceEditor::DoValue()
107 {
108  if (fAvoidSignal) return;
109 
110  fPieSlice->SetValue(fValue->GetNumber());
111  Update();
112 }
113 
114 
115 ////////////////////////////////////////////////////////////////////////////////
116 /// Slot for setting the graph title.
117 
118 void TPieSliceEditor::DoOffset()
119 {
120  if (fAvoidSignal) return;
121 
122  fPieSlice->SetRadiusOffset(fOffset->GetNumber());
123  Update();
124 }
125