37 ClassImp(TGeoParaEditor);
40 kPARA_NAME, kPARA_X, kPARA_Y, kPARA_Z, kPARA_ALPHA,
41 kPARA_THETA, kPARA_PHI, kPARA_APPLY, kPARA_UNDO
47 TGeoParaEditor::TGeoParaEditor(
const TGWindow *p, Int_t width,
48 Int_t height, UInt_t options, Pixel_t back)
49 : TGeoGedFrame(p, width, height, options | kVerticalFrame, back)
52 fXi = fYi = fZi = fAlphai = fThetai = fPhii = 0.0;
55 fIsShapeEditable = kTRUE;
59 fShapeName =
new TGTextEntry(
this,
new TGTextBuffer(50), kPARA_NAME);
60 fShapeName->Resize(135, fShapeName->GetDefaultHeight());
61 fShapeName->SetToolTipText(
"Enter the parallelepiped name");
62 fShapeName->Associate(
this);
63 AddFrame(fShapeName,
new TGLayoutHints(kLHintsLeft, 3, 1, 2, 5));
66 MakeTitle(
"Dimensions");
68 TGCompositeFrame *f1 =
new TGCompositeFrame(
this, 155, 10, kHorizontalFrame | kFixedWidth);
69 f1->AddFrame(
new TGLabel(f1,
"DX"),
new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
70 fEDx =
new TGNumberEntry(f1, 0., 5, kPARA_X);
71 fEDx->SetNumAttr(TGNumberFormat::kNEAPositive);
72 fEDx->Resize(100, fEDx->GetDefaultHeight());
73 nef = (TGTextEntry*)fEDx->GetNumberEntry();
74 nef->SetToolTipText(
"Enter the half-length in X");
75 fEDx->Associate(
this);
76 f1->AddFrame(fEDx,
new TGLayoutHints(kLHintsRight, 2, 2, 4, 4));
77 AddFrame(f1,
new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));
80 f1 =
new TGCompositeFrame(
this, 155, 10, kHorizontalFrame | kFixedWidth);
81 f1->AddFrame(
new TGLabel(f1,
"DY"),
new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
82 fEDy =
new TGNumberEntry(f1, 0., 5, kPARA_Y);
83 fEDy->SetNumAttr(TGNumberFormat::kNEAPositive);
84 fEDy->Resize(100, fEDy->GetDefaultHeight());
85 nef = (TGTextEntry*)fEDy->GetNumberEntry();
86 nef->SetToolTipText(
"Enter the half-length in Y");
87 fEDy->Associate(
this);
88 f1->AddFrame(fEDy,
new TGLayoutHints(kLHintsRight, 2, 2, 4, 4));
89 AddFrame(f1,
new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));
92 f1 =
new TGCompositeFrame(
this, 155, 10, kHorizontalFrame | kFixedWidth);
93 f1->AddFrame(
new TGLabel(f1,
"Dz"),
new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
94 fEDz =
new TGNumberEntry(f1, 0., 5, kPARA_Z);
95 fEDz->SetNumAttr(TGNumberFormat::kNEAPositive);
96 fEDz->Resize(100, fEDz->GetDefaultHeight());
97 nef = (TGTextEntry*)fEDz->GetNumberEntry();
98 nef->SetToolTipText(
"Enter the half-length in Z");
99 fEDz->Associate(
this);
100 f1->AddFrame(fEDz,
new TGLayoutHints(kLHintsRight, 2, 2, 4, 4));
101 AddFrame(f1,
new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));
104 f1 =
new TGCompositeFrame(
this, 155, 10, kHorizontalFrame | kFixedWidth);
105 f1->AddFrame(
new TGLabel(f1,
"Alpha"),
new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
106 fEAlpha =
new TGNumberEntry(f1, 0., 5, kPARA_ALPHA);
107 fEAlpha->Resize(100, fEAlpha->GetDefaultHeight());
108 nef = (TGTextEntry*)fEAlpha->GetNumberEntry();
109 nef->SetToolTipText(
"Enter the angle with respect to Y axis [deg]");
110 fEAlpha->Associate(
this);
111 f1->AddFrame(fEAlpha,
new TGLayoutHints(kLHintsRight, 2, 2, 4, 4));
112 AddFrame(f1,
new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));
115 f1 =
new TGCompositeFrame(
this, 155, 10, kHorizontalFrame | kFixedWidth);
116 f1->AddFrame(
new TGLabel(f1,
"Theta"),
new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
117 fETheta =
new TGNumberEntry(f1, 0., 5, kPARA_THETA);
118 fETheta->SetNumAttr(TGNumberFormat::kNEAPositive);
119 fETheta->Resize(100, fETheta->GetDefaultHeight());
120 nef = (TGTextEntry*)fETheta->GetNumberEntry();
121 nef->SetToolTipText(
"Enter the theta angle of the para axis [deg]");
122 fETheta->Associate(
this);
123 f1->AddFrame(fETheta,
new TGLayoutHints(kLHintsRight, 2, 2, 4, 4));
124 AddFrame(f1,
new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));
127 f1 =
new TGCompositeFrame(
this, 155, 10, kHorizontalFrame | kFixedWidth);
128 f1->AddFrame(
new TGLabel(f1,
"Phi"),
new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
129 fEPhi =
new TGNumberEntry(f1, 0., 5, kPARA_PHI);
130 fEPhi->SetNumAttr(TGNumberFormat::kNEAPositive);
131 fEPhi->Resize(100, fEPhi->GetDefaultHeight());
132 nef = (TGTextEntry*)fEPhi->GetNumberEntry();
133 nef->SetToolTipText(
"Enter the phi angle of the para axis [deg]");
134 fEPhi->Associate(
this);
135 f1->AddFrame(fEPhi,
new TGLayoutHints(kLHintsRight, 2, 2, 4, 4));
136 AddFrame(f1,
new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));
139 f1 =
new TGCompositeFrame(
this, 155, 10, kHorizontalFrame | kFixedWidth | kSunkenFrame);
140 fDelayed =
new TGCheckButton(f1,
"Delayed draw");
141 f1->AddFrame(fDelayed,
new TGLayoutHints(kLHintsLeft , 2, 2, 4, 4));
142 AddFrame(f1,
new TGLayoutHints(kLHintsLeft, 6, 6, 4, 4));
145 f1 =
new TGCompositeFrame(
this, 155, 10, kHorizontalFrame | kFixedWidth);
146 fApply =
new TGTextButton(f1,
"Apply");
147 f1->AddFrame(fApply,
new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));
148 fApply->Associate(
this);
149 fUndo =
new TGTextButton(f1,
"Undo");
150 f1->AddFrame(fUndo,
new TGLayoutHints(kLHintsRight , 2, 2, 4, 4));
151 fUndo->Associate(
this);
152 AddFrame(f1,
new TGLayoutHints(kLHintsLeft, 6, 6, 4, 4));
153 fUndo->SetSize(fApply->GetSize());
159 TGeoParaEditor::~TGeoParaEditor()
162 TIter next(GetList());
163 while ((el = (TGFrameElement *)next())) {
164 if (el->fFrame->IsComposite())
165 TGeoTabManager::Cleanup((TGCompositeFrame*)el->fFrame);
173 void TGeoParaEditor::ConnectSignals2Slots()
175 fApply->Connect(
"Clicked()",
"TGeoParaEditor",
this,
"DoApply()");
176 fUndo->Connect(
"Clicked()",
"TGeoParaEditor",
this,
"DoUndo()");
177 fShapeName->Connect(
"TextChanged(const char *)",
"TGeoParaEditor",
this,
"DoModified()");
178 fEDx->Connect(
"ValueSet(Long_t)",
"TGeoParaEditor",
this,
"DoX()");
179 fEDy->Connect(
"ValueSet(Long_t)",
"TGeoParaEditor",
this,
"DoY()");
180 fEDz->Connect(
"ValueSet(Long_t)",
"TGeoParaEditor",
this,
"DoZ()");
181 fEAlpha->Connect(
"ValueSet(Long_t)",
"TGeoParaEditor",
this,
"DoAlpha()");
182 fETheta->Connect(
"ValueSet(Long_t)",
"TGeoParaEditor",
this,
"DoTheta()");
183 fEPhi->Connect(
"ValueSet(Long_t)",
"TGeoParaEditor",
this,
"DoPhi()");
184 fEDx->GetNumberEntry()->Connect(
"TextChanged(const char *)",
"TGeoParaEditor",
this,
"DoModified()");
185 fEDy->GetNumberEntry()->Connect(
"TextChanged(const char *)",
"TGeoParaEditor",
this,
"DoModified()");
186 fEDz->GetNumberEntry()->Connect(
"TextChanged(const char *)",
"TGeoParaEditor",
this,
"DoModified()");
187 fEAlpha->GetNumberEntry()->Connect(
"TextChanged(const char *)",
"TGeoParaEditor",
this,
"DoModified()");
188 fETheta->GetNumberEntry()->Connect(
"TextChanged(const char *)",
"TGeoParaEditor",
this,
"DoModified()");
189 fEPhi->GetNumberEntry()->Connect(
"TextChanged(const char *)",
"TGeoParaEditor",
this,
"DoModified()");
197 void TGeoParaEditor::SetModel(TObject* obj)
199 if (obj == 0 || (obj->IsA()!=TGeoPara::Class())) {
203 fShape = (TGeoPara*)obj;
204 fXi = fShape->GetX();
205 fYi = fShape->GetY();
206 fZi = fShape->GetZ();
207 fAlphai = fShape->GetAlpha();
208 fThetai = fShape->GetTheta();
209 fPhii = fShape->GetPhi();
210 const char *sname = fShape->GetName();
211 if (!strcmp(sname, fShape->ClassName())) fShapeName->SetText(
"-no_name");
213 fShapeName->SetText(sname);
216 fEDx->SetNumber(fXi);
217 fEDy->SetNumber(fYi);
218 fEDz->SetNumber(fZi);
219 fEAlpha->SetNumber(fAlphai);
220 fETheta->SetNumber(fThetai);
221 fEPhi->SetNumber(fPhii);
222 fApply->SetEnabled(kFALSE);
223 fUndo->SetEnabled(kFALSE);
225 if (fInit) ConnectSignals2Slots();
232 Bool_t TGeoParaEditor::IsDelayed()
const
234 return (fDelayed->GetState() == kButtonDown);
240 void TGeoParaEditor::DoName()
248 void TGeoParaEditor::DoApply()
250 const char *name = fShapeName->GetText();
251 if (strcmp(name,fShape->GetName())) fShape->SetName(name);
252 Double_t dx = fEDx->GetNumber();
253 Double_t dy = fEDy->GetNumber();
254 Double_t dz = fEDz->GetNumber();
255 Double_t alpha = fEAlpha->GetNumber();
256 Double_t theta = fETheta->GetNumber();
257 Double_t phi = fEPhi->GetNumber();
265 fShape->SetDimensions(param);
266 fShape->ComputeBBox();
268 fApply->SetEnabled(kFALSE);
270 if (gGeoManager && gGeoManager->GetPainter() && gGeoManager->GetPainter()->IsPaintingShape()) {
271 TView *view = fPad->GetView();
274 fPad->GetView()->ShowAxis();
276 view->SetRange(-fShape->GetDX(), -fShape->GetDY(), -fShape->GetDZ(),
277 fShape->GetDX(), fShape->GetDY(), fShape->GetDZ());
287 void TGeoParaEditor::DoModified()
289 fApply->SetEnabled();
295 void TGeoParaEditor::DoUndo()
297 fEDx->SetNumber(fXi);
298 fEDy->SetNumber(fYi);
299 fEDz->SetNumber(fZi);
300 fEAlpha->SetNumber(fAlphai);
301 fETheta->SetNumber(fThetai);
302 fEPhi->SetNumber(fPhii);
304 fUndo->SetEnabled(kFALSE);
305 fApply->SetEnabled(kFALSE);
311 void TGeoParaEditor::DoX()
313 Double_t dx = fEDx->GetNumber();
319 if (!IsDelayed()) DoApply();
325 void TGeoParaEditor::DoY()
327 Double_t dy = fEDy->GetNumber();
333 if (!IsDelayed()) DoApply();
339 void TGeoParaEditor::DoZ()
341 Double_t dz = fEDz->GetNumber();
347 if (!IsDelayed()) DoApply();
353 void TGeoParaEditor::DoAlpha()
355 Double_t alpha = fEAlpha->GetNumber();
356 if (TMath::Abs(alpha)>=90) {
357 alpha = 89.9*TMath::Sign(1.,alpha);
358 fEAlpha->SetNumber(alpha);
361 if (!IsDelayed()) DoApply();
367 void TGeoParaEditor::DoTheta()
369 Double_t theta = fETheta->GetNumber();
372 fETheta->SetNumber(theta);
376 fETheta->SetNumber(theta);
379 if (!IsDelayed()) DoApply();
385 void TGeoParaEditor::DoPhi()
387 Double_t phi = fEPhi->GetNumber();
388 if (phi<0 || phi>360) {
390 fEPhi->SetNumber(phi);
393 if (!IsDelayed()) DoApply();