Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
TCurlyLineEditor.cxx
Go to the documentation of this file.
1 // @(#)root/ged:$Id$
2 // Author: Ilka Antcheva, Otto Schaile 15/12/04
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2004, 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 // //
14 // TCurlyLineEditor //
15 // //
16 // Implements GUI for editing CurlyLine attributes: shape, size, angle.// //
17 // //
18 //////////////////////////////////////////////////////////////////////////
19 //Begin_Html
20 /*
21 <img src="gif/TCurlyLineEditor.gif">
22 */
23 //End_Html
24 
25 
26 #include "TCurlyLineEditor.h"
27 #include "TGedEditor.h"
28 #include "TGLabel.h"
29 #include "TGNumberEntry.h"
30 #include "TGButton.h"
31 #include "TCurlyLine.h"
32 #include <iostream>
33 
34 ClassImp(TCurlyLineEditor);
35 
36 enum ECurlyLineWid {
37  kCRLL_AMPL,
38  kCRLL_WAVE,
39  kCRLL_ISW,
40  kCRLL_STRX,
41  kCRLL_STRY,
42  kCRLL_ENDX,
43  kCRLL_ENDY
44 };
45 
46 ////////////////////////////////////////////////////////////////////////////////
47 /// Constructor of CurlyLine GUI.
48 
49 TCurlyLineEditor::TCurlyLineEditor(const TGWindow *p, Int_t width,
50  Int_t height, UInt_t options, Pixel_t back)
51  : TGedFrame(p, width, height, options | kVerticalFrame, back)
52 {
53  fCurlyLine = 0;
54 
55  MakeTitle("Curly Line");
56 
57  TGCompositeFrame *f3 = new TGCompositeFrame(this, 80, 20, kHorizontalFrame);
58  AddFrame(f3, new TGLayoutHints(kLHintsTop, 1, 1, 3, 0));
59 
60  TGCompositeFrame *f3a = new TGCompositeFrame(f3, 80, 20);
61  f3->AddFrame(f3a, new TGLayoutHints(kLHintsTop, 1, 1, 0, 0));
62 
63  TGLabel *fAmplitudeLabel = new TGLabel(f3a, "Amplitude:");
64  f3a->AddFrame(fAmplitudeLabel, new TGLayoutHints(kLHintsNormal, 3, 0, 5, 5));
65 
66  TGLabel *fWaveLengthLabel = new TGLabel(f3a, "Wavelgth:");
67  f3a->AddFrame(fWaveLengthLabel, new TGLayoutHints(kLHintsNormal, 3, 0, 5, 5));
68 
69  TGCompositeFrame *f3b = new TGCompositeFrame(f3, 80, 20);
70  f3->AddFrame(f3b, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
71 
72  fAmplitudeEntry = new TGNumberEntry(f3b, 0.005, 7, kCRLL_AMPL,
73  TGNumberFormat::kNESRealThree,
74  TGNumberFormat::kNEANonNegative,
75  TGNumberFormat::kNELLimitMinMax, 0.005, 0.3);
76  fAmplitudeEntry->GetNumberEntry()->SetToolTipText("Set amplitude in percent of the pad height.");
77  f3b->AddFrame(fAmplitudeEntry, new TGLayoutHints(kLHintsLeft, 4, 1, 1, 1));
78 
79  fWaveLengthEntry = new TGNumberEntry(f3b, 0.005, 7, kCRLL_WAVE,
80  TGNumberFormat::kNESRealThree,
81  TGNumberFormat::kNEANonNegative,
82  TGNumberFormat::kNELLimitMinMax, 0.005, 0.3);
83  fWaveLengthEntry->GetNumberEntry()->SetToolTipText("Set wavelength in percent of the pad height.");
84  fWaveLengthEntry->Associate(this);
85  f3b->AddFrame(fWaveLengthEntry, new TGLayoutHints(kLHintsLeft, 4, 1, 3, 1));
86 
87  fIsWavy = new TGCheckButton(this, "Gluon (Gamma)", kCRLL_ISW);
88  fIsWavy->SetToolTipText("Toggle between wavy line (Gluon) if selected; curly line (Gamma) otherwise.");
89  AddFrame(fIsWavy, new TGLayoutHints(kLHintsLeft, 5, 1, 5, 8));
90 
91  fStartXFrame = new TGCompositeFrame(this, 80, 20, kHorizontalFrame);
92  AddFrame(fStartXFrame, new TGLayoutHints(kLHintsTop, 1, 1, 3, 0));
93 
94  TGCompositeFrame *f4a = new TGCompositeFrame(fStartXFrame, 80, 20);
95  fStartXFrame->AddFrame(f4a, new TGLayoutHints(kLHintsTop, 1, 1, 0, 0));
96 
97  TGLabel *fStartXLabel = new TGLabel(f4a, "Start X:");
98  f4a->AddFrame(fStartXLabel, new TGLayoutHints(kLHintsNormal, 21, 0, 5, 5));
99 
100  TGLabel *fStartYLabel = new TGLabel(f4a, "Y:");
101  f4a->AddFrame(fStartYLabel, new TGLayoutHints(kLHintsNormal, 50, 0, 5, 5));
102 
103  TGLabel *fEndXLabel = new TGLabel(f4a, "End X:");
104  f4a->AddFrame(fEndXLabel, new TGLayoutHints(kLHintsNormal, 24, 0, 5, 5));
105 
106  TGLabel *fEndYLabel = new TGLabel(f4a, "Y:");
107  f4a->AddFrame(fEndYLabel, new TGLayoutHints(kLHintsNormal, 51, 0, 5, 1));
108 
109  TGCompositeFrame *f4b = new TGCompositeFrame(fStartXFrame, 80, 20);
110  fStartXFrame->AddFrame(f4b, new TGLayoutHints(kLHintsTop, 1, 1, 0, 0));
111 
112  fStartXEntry = new TGNumberEntry(f4b, 0.0, 7, kCRLL_STRX,
113  TGNumberFormat::kNESRealThree,
114  TGNumberFormat::kNEANonNegative,
115  TGNumberFormat::kNELNoLimits);
116  fStartXEntry->GetNumberEntry()->SetToolTipText("Set start point X ccordinate of curly line.");
117  f4b->AddFrame(fStartXEntry, new TGLayoutHints(kLHintsLeft, 1, 1, 1, 1));
118 
119  fStartYEntry = new TGNumberEntry(f4b, 0.0, 7, kCRLL_STRY,
120  TGNumberFormat::kNESRealThree,
121  TGNumberFormat::kNEANonNegative,
122  TGNumberFormat::kNELNoLimits);
123  fStartYEntry->GetNumberEntry()->SetToolTipText("Set start point Y coordinate of curly line.");
124  f4b->AddFrame(fStartYEntry, new TGLayoutHints(kLHintsLeft, 1, 1, 3, 1));
125 
126  fEndXEntry = new TGNumberEntry(f4b, 0.0, 7, kCRLL_ENDX,
127  TGNumberFormat::kNESRealThree,
128  TGNumberFormat::kNEANonNegative,
129  TGNumberFormat::kNELNoLimits);
130  fEndXEntry->GetNumberEntry()->SetToolTipText("Set end point X coordinate of curly line.");
131  f4b->AddFrame(fEndXEntry, new TGLayoutHints(kLHintsLeft, 1, 1, 3, 1));
132 
133  fEndYEntry = new TGNumberEntry(f4b, 0.0, 7, kCRLL_ENDY,
134  TGNumberFormat::kNESRealThree,
135  TGNumberFormat::kNEANonNegative,
136  TGNumberFormat::kNELNoLimits);
137  fEndYEntry->GetNumberEntry()->SetToolTipText("Set end point Y coordinate of curly line.");
138  f4b->AddFrame(fEndYEntry, new TGLayoutHints(kLHintsLeft, 1, 1, 3, 1));
139 
140 }
141 
142 ////////////////////////////////////////////////////////////////////////////////
143 /// Destructor of CurlyLine editor.
144 
145 TCurlyLineEditor::~TCurlyLineEditor()
146 {
147 }
148 
149 ////////////////////////////////////////////////////////////////////////////////
150 /// Connect signals to slots.
151 
152 void TCurlyLineEditor::ConnectSignals2Slots()
153 {
154  fStartXEntry->Connect("ValueSet(Long_t)", "TCurlyLineEditor", this, "DoStartXY()");
155  (fStartXEntry->GetNumberEntry())->Connect("ReturnPressed()", "TCurlyLineEditor", this, "DoStartXY()");
156  fStartYEntry->Connect("ValueSet(Long_t)", "TCurlyLineEditor", this, "DoStartXY()");
157  (fStartYEntry->GetNumberEntry())->Connect("ReturnPressed()", "TCurlyLineEditor", this, "DoStartXY()");
158  fEndXEntry->Connect("ValueSet(Long_t)", "TCurlyLineEditor", this, "DoEndXY()");
159  (fEndXEntry->GetNumberEntry())->Connect("ReturnPressed()", "TCurlyLineEditor", this, "DoEndXY()");
160  fEndYEntry->Connect("ValueSet(Long_t)", "TCurlyLineEditor", this, "DoEndXY()");
161  (fEndYEntry->GetNumberEntry())->Connect("ReturnPressed()", "TCurlyLineEditor", this, "DoEndXY()");
162  fAmplitudeEntry->Connect("ValueSet(Long_t)", "TCurlyLineEditor", this, "DoAmplitude()");
163  (fAmplitudeEntry->GetNumberEntry())->Connect("ReturnPressed()", "TCurlyLineEditor", this, "DoAmplitude()");
164  fWaveLengthEntry->Connect("ValueSet(Long_t)", "TCurlyLineEditor", this, "DoWaveLength()");
165  (fWaveLengthEntry->GetNumberEntry())->Connect("ReturnPressed()", "TCurlyLineEditor", this, "DoWaveLength()");
166  fIsWavy->Connect("Clicked()", "TCurlyLineEditor", this, "DoWavy()");
167 
168  fInit = kFALSE;
169 }
170 
171 ////////////////////////////////////////////////////////////////////////////////
172 /// Pick up the used curly line attributes.
173 
174 void TCurlyLineEditor::SetModel(TObject* obj)
175 {
176  if (obj->InheritsFrom("TCurlyArc")) {
177  HideFrame(fStartXFrame);
178  fStartXEntry->Disconnect("ValueSet(Long_t)");
179  (fStartXEntry->GetNumberEntry())->Disconnect("ReturnPressed()");
180  fStartYEntry->Disconnect("ValueSet(Long_t)");
181  (fStartYEntry->GetNumberEntry())->Disconnect("ReturnPressed()");
182  fEndXEntry->Disconnect("ValueSet(Long_t)");
183  (fEndXEntry->GetNumberEntry())->Disconnect("ReturnPressed()");
184  fEndYEntry->Disconnect("ValueSet(Long_t)");
185  (fEndYEntry->GetNumberEntry())->Disconnect("ReturnPressed()");
186  }
187 
188  fCurlyLine = (TCurlyLine *)obj;
189  fAvoidSignal = kTRUE;
190 
191  Double_t val = fCurlyLine->GetAmplitude();
192  fAmplitudeEntry->SetNumber(val);
193 
194  val = fCurlyLine->GetWaveLength();
195  fWaveLengthEntry->SetNumber(val);
196 
197  val = fCurlyLine->GetStartX();
198  fStartXEntry->SetNumber(val);
199 
200  val = fCurlyLine->GetEndX();
201  fEndXEntry->SetNumber(val);
202 
203  val = fCurlyLine->GetStartY();
204  fStartYEntry->SetNumber(val);
205 
206  val = fCurlyLine->GetEndY();
207  fEndYEntry->SetNumber(val);
208 
209  if (fCurlyLine->GetCurly())
210  fIsWavy->SetState(kButtonDown);
211  else
212  fIsWavy->SetState(kButtonUp);
213 
214  if (fInit) ConnectSignals2Slots();
215  fAvoidSignal = kFALSE;
216 }
217 
218 ////////////////////////////////////////////////////////////////////////////////
219 /// Exclude TAttFillEditor.
220 
221 void TCurlyLineEditor::ActivateBaseClassEditors(TClass* cl)
222 {
223  fGedEditor->ExcludeClassEditor(TAttFill::Class());
224  TGedFrame::ActivateBaseClassEditors(cl);
225 }
226 
227 ////////////////////////////////////////////////////////////////////////////////
228 /// Slot connected to the CurlyLine StartPoint.
229 
230 void TCurlyLineEditor::DoStartXY()
231 {
232  if (fAvoidSignal) return;
233  fCurlyLine->SetStartPoint(fStartXEntry->GetNumber(), fStartYEntry->GetNumber());
234  fCurlyLine->Paint(fCurlyLine->GetDrawOption());
235  Update();
236 }
237 ////////////////////////////////////////////////////////////////////////////////
238 /// Slot connected to the CurlyLine End.
239 
240 void TCurlyLineEditor::DoEndXY()
241 {
242  if (fAvoidSignal) return;
243  fCurlyLine->SetEndPoint(fEndXEntry->GetNumber(), fEndYEntry->GetNumber());
244  fCurlyLine->Paint(fCurlyLine->GetDrawOption());
245  Update();
246 }
247 
248 ////////////////////////////////////////////////////////////////////////////////
249 /// Slot connected to the amplitude setting.
250 
251 void TCurlyLineEditor::DoAmplitude()
252 {
253  if (fAvoidSignal) return;
254  fCurlyLine->SetAmplitude((Double_t)fAmplitudeEntry->GetNumber());
255  fCurlyLine->Paint(fCurlyLine->GetDrawOption());
256  Update();
257 }
258 
259 ////////////////////////////////////////////////////////////////////////////////
260 /// Slot connected to the wavelength setting.
261 
262 void TCurlyLineEditor::DoWaveLength()
263 {
264  if (fAvoidSignal) return;
265  Double_t num = fWaveLengthEntry->GetNumber();
266  fCurlyLine->SetWaveLength(num);
267  fCurlyLine->Paint(GetDrawOption());
268  Update();
269 }
270 
271 ////////////////////////////////////////////////////////////////////////////////
272 /// Slot connected to the wavy / curly setting.
273 
274 void TCurlyLineEditor::DoWavy()
275 {
276  if (fAvoidSignal) return;
277  if (fIsWavy->GetState() == kButtonDown)
278  fCurlyLine->SetCurly();
279  else
280  fCurlyLine->SetWavy();
281  fCurlyLine->Paint(GetDrawOption());
282  Update();
283 }