37 ClassImp(TGeoTrd1Editor);
40 kTRD1_NAME, kTRD1_X1, kTRD1_X2, kTRD1_Y, kTRD1_Z,
41 kTRD1_APPLY, kTRD1_UNDO
47 TGeoTrd1Editor::TGeoTrd1Editor(
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 fDxi1 = fDxi2 = fDyi = fDzi = 0.0;
55 fIsShapeEditable = kFALSE;
59 fShapeName =
new TGTextEntry(
this,
new TGTextBuffer(50), kTRD1_NAME);
60 fShapeName->Resize(135, fShapeName->GetDefaultHeight());
61 fShapeName->SetToolTipText(
"Enter the box name");
62 fShapeName->Associate(
this);
63 AddFrame(fShapeName,
new TGLayoutHints(kLHintsLeft, 3, 1, 2, 5));
66 MakeTitle(
"Trd1 dimensions");
67 TGCompositeFrame *compxyz =
new TGCompositeFrame(
this, 118, 30, kVerticalFrame | kRaisedFrame | kDoubleBorder);
70 TGCompositeFrame *f1 =
new TGCompositeFrame(compxyz, 118, 10, kHorizontalFrame |
71 kLHintsExpandX | kFixedWidth | kOwnBackground);
72 f1->AddFrame(
new TGLabel(f1,
"DX1"),
new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
73 fEDx1 =
new TGNumberEntry(f1, 0., 5, kTRD1_X1);
74 fEDx1->SetNumAttr(TGNumberFormat::kNEAPositive);
75 nef = (TGTextEntry*)fEDx1->GetNumberEntry();
76 nef->SetToolTipText(
"Enter the half-length in X1");
77 fEDx1->Associate(
this);
78 f1->AddFrame(fEDx1,
new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 4, 4));
79 compxyz->AddFrame(f1,
new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 4, 4));
82 f1 =
new TGCompositeFrame(compxyz, 118, 10, kHorizontalFrame |
83 kLHintsExpandX | kFixedWidth | kOwnBackground);
84 f1->AddFrame(
new TGLabel(f1,
"DX2"),
new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
85 fEDx2 =
new TGNumberEntry(f1, 0., 5, kTRD1_X2);
86 fEDx2->SetNumAttr(TGNumberFormat::kNEAPositive);
87 nef = (TGTextEntry*)fEDx2->GetNumberEntry();
88 nef->SetToolTipText(
"Enter the half-length in X2");
89 fEDx2->Associate(
this);
90 f1->AddFrame(fEDx2,
new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 4, 4));
91 compxyz->AddFrame(f1,
new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 4, 4));
94 TGCompositeFrame *f2 =
new TGCompositeFrame(compxyz, 118, 10, kHorizontalFrame |
95 kLHintsExpandX | kFixedWidth | kOwnBackground);
96 f2->AddFrame(
new TGLabel(f2,
"DY"),
new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
97 fEDy =
new TGNumberEntry(f2, 0., 5, kTRD1_Y);
98 fEDy->SetNumAttr(TGNumberFormat::kNEAPositive);
99 nef = (TGTextEntry*)fEDy->GetNumberEntry();
100 nef->SetToolTipText(
"Enter the half-length in Y");
101 fEDy->Associate(
this);
102 f2->AddFrame(fEDy,
new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 4, 4));
103 compxyz->AddFrame(f2,
new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 4, 4));
106 TGCompositeFrame *f3 =
new TGCompositeFrame(compxyz, 118, 10, kHorizontalFrame |
107 kLHintsExpandX | kFixedWidth | kOwnBackground);
108 f3->AddFrame(
new TGLabel(f3,
"DZ"),
new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
109 fEDz =
new TGNumberEntry(f3, 0., 5, kTRD1_Z);
110 fEDz->SetNumAttr(TGNumberFormat::kNEAPositive);
111 nef = (TGTextEntry*)fEDz->GetNumberEntry();
112 nef->SetToolTipText(
"Enter the half-length in Z");
113 fEDz->Associate(
this);
114 f3->AddFrame(fEDz,
new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 4, 4));
115 compxyz->AddFrame(f3,
new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 4, 4));
117 compxyz->Resize(150,30);
118 AddFrame(compxyz,
new TGLayoutHints(kLHintsLeft, 6, 6, 4, 4));
121 f1 =
new TGCompositeFrame(
this, 155, 10, kHorizontalFrame | kFixedWidth | kSunkenFrame);
122 fDelayed =
new TGCheckButton(f1,
"Delayed draw");
123 f1->AddFrame(fDelayed,
new TGLayoutHints(kLHintsLeft , 2, 2, 4, 4));
124 AddFrame(f1,
new TGLayoutHints(kLHintsLeft, 6, 6, 4, 4));
127 f1 =
new TGCompositeFrame(
this, 155, 10, kHorizontalFrame | kFixedWidth);
128 fApply =
new TGTextButton(f1,
"Apply");
129 f1->AddFrame(fApply,
new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));
130 fApply->Associate(
this);
131 fUndo =
new TGTextButton(f1,
"Undo");
132 f1->AddFrame(fUndo,
new TGLayoutHints(kLHintsRight , 2, 2, 4, 4));
133 fUndo->Associate(
this);
134 AddFrame(f1,
new TGLayoutHints(kLHintsLeft, 6, 6, 4, 4));
135 fUndo->SetSize(fApply->GetSize());
141 TGeoTrd1Editor::~TGeoTrd1Editor()
144 TIter next(GetList());
145 while ((el = (TGFrameElement *)next())) {
146 if (el->fFrame->IsComposite())
147 TGeoTabManager::Cleanup((TGCompositeFrame*)el->fFrame);
155 void TGeoTrd1Editor::ConnectSignals2Slots()
157 fApply->Connect(
"Clicked()",
"TGeoTrd1Editor",
this,
"DoApply()");
158 fUndo->Connect(
"Clicked()",
"TGeoTrd1Editor",
this,
"DoUndo()");
159 fShapeName->Connect(
"TextChanged(const char *)",
"TGeoTrd1Editor",
this,
"DoModified()");
160 fEDx1->Connect(
"ValueSet(Long_t)",
"TGeoTrd1Editor",
this,
"DoDx1()");
161 fEDx2->Connect(
"ValueSet(Long_t)",
"TGeoTrd1Editor",
this,
"DoDx2()");
162 fEDy->Connect(
"ValueSet(Long_t)",
"TGeoTrd1Editor",
this,
"DoDy()");
163 fEDz->Connect(
"ValueSet(Long_t)",
"TGeoTrd1Editor",
this,
"DoDz()");
164 fEDx1->GetNumberEntry()->Connect(
"TextChanged(const char *)",
"TGeoTrd1Editor",
this,
"DoModified()");
165 fEDx2->GetNumberEntry()->Connect(
"TextChanged(const char *)",
"TGeoTrd1Editor",
this,
"DoModified()");
166 fEDy->GetNumberEntry()->Connect(
"TextChanged(const char *)",
"TGeoTrd1Editor",
this,
"DoModified()");
167 fEDz->GetNumberEntry()->Connect(
"TextChanged(const char *)",
"TGeoTrd1Editor",
this,
"DoModified()");
175 void TGeoTrd1Editor::SetModel(TObject* obj)
177 if (obj == 0 || (obj->IsA()!=TGeoTrd1::Class())) {
181 fShape = (TGeoTrd1*)obj;
182 fDxi1 = fShape->GetDx1();
183 fDxi2 = fShape->GetDx2();
184 fDyi = fShape->GetDy();
185 fDzi = fShape->GetDz();
186 const char *sname = fShape->GetName();
187 if (!strcmp(sname, fShape->ClassName())) fShapeName->SetText(
"-no_name");
189 fShapeName->SetText(sname);
192 fEDx1->SetNumber(fDxi1);
193 fEDx2->SetNumber(fDxi2);
194 fEDy->SetNumber(fDyi);
195 fEDz->SetNumber(fDzi);
196 fApply->SetEnabled(kFALSE);
197 fUndo->SetEnabled(kFALSE);
200 if (fInit) ConnectSignals2Slots();
207 Bool_t TGeoTrd1Editor::IsDelayed()
const
209 return (fDelayed->GetState() == kButtonDown);
215 void TGeoTrd1Editor::DoName()
223 void TGeoTrd1Editor::DoApply()
225 const char *name = fShapeName->GetText();
226 if (strcmp(name,fShape->GetName())) fShape->SetName(name);
227 Double_t dx1 = fEDx1->GetNumber();
228 Double_t dx2 = fEDx2->GetNumber();
229 Double_t dy = fEDy->GetNumber();
230 Double_t dz = fEDz->GetNumber();
236 fShape->SetDimensions(param);
237 fShape->ComputeBBox();
239 fApply->SetEnabled(kFALSE);
241 if (gGeoManager && gGeoManager->GetPainter() && gGeoManager->GetPainter()->IsPaintingShape()) {
243 fPad->GetView()->ShowAxis();
251 void TGeoTrd1Editor::DoModified()
253 fApply->SetEnabled();
259 void TGeoTrd1Editor::DoUndo()
261 fEDx1->SetNumber(fDxi1);
262 fEDx2->SetNumber(fDxi2);
263 fEDy->SetNumber(fDyi);
264 fEDz->SetNumber(fDzi);
266 fUndo->SetEnabled(kFALSE);
267 fApply->SetEnabled(kFALSE);
273 void TGeoTrd1Editor::DoDx1()
275 Double_t dx1 = fEDx1->GetNumber();
276 Double_t dx2 = fEDx2->GetNumber();
279 fEDx1->SetNumber(dx1);
281 if (dx1<1.e-6 && dx2<1.e-6) {
283 fEDx1->SetNumber(dx1);
286 if (!IsDelayed()) DoApply();
292 void TGeoTrd1Editor::DoDx2()
294 Double_t dx1 = fEDx1->GetNumber();
295 Double_t dx2 = fEDx2->GetNumber();
298 fEDx2->SetNumber(dx2);
300 if (dx1<1.e-6 && dx2<1.e-6) {
302 fEDx2->SetNumber(dx2);
305 if (!IsDelayed()) DoApply();
311 void TGeoTrd1Editor::DoDy()
313 Double_t dy = fEDy->GetNumber();
319 if (!IsDelayed()) DoApply();
325 void TGeoTrd1Editor::DoDz()
327 Double_t dz = fEDz->GetNumber();
333 if (!IsDelayed()) DoApply();