37 ClassImp(TGeoEltuEditor);
40 kELTU_NAME, kELTU_A, kELTU_B, kELTU_DZ,
41 kELTU_APPLY, kELTU_UNDO
47 TGeoEltuEditor::TGeoEltuEditor(
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 fAi = fBi = fDzi = 0.0;
55 fIsShapeEditable = kTRUE;
59 fShapeName =
new TGTextEntry(
this,
new TGTextBuffer(50), kELTU_NAME);
60 fShapeName->Resize(135, fShapeName->GetDefaultHeight());
61 fShapeName->SetToolTipText(
"Enter the elliptical tube 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,
"A"),
new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
70 fEA =
new TGNumberEntry(f1, 0., 5, kELTU_A);
71 fEA->SetNumAttr(TGNumberFormat::kNEAPositive);
72 fEA->Resize(100, fEA->GetDefaultHeight());
73 nef = (TGTextEntry*)fEA->GetNumberEntry();
74 nef->SetToolTipText(
"Enter the semi-axis of the ellipse along x");
76 f1->AddFrame(fEA,
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,
"B"),
new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
82 fEB =
new TGNumberEntry(f1, 0., 5, kELTU_B);
83 fEB->SetNumAttr(TGNumberFormat::kNEAPositive);
84 fEB->Resize(100, fEB->GetDefaultHeight());
85 nef = (TGTextEntry*)fEB->GetNumberEntry();
86 nef->SetToolTipText(
"Enter the semi-axis of the ellipse along y");
88 f1->AddFrame(fEB,
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, kELTU_DZ);
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 | kSunkenFrame);
105 fDelayed =
new TGCheckButton(f1,
"Delayed draw");
106 f1->AddFrame(fDelayed,
new TGLayoutHints(kLHintsLeft , 2, 2, 4, 4));
107 AddFrame(f1,
new TGLayoutHints(kLHintsLeft, 6, 6, 4, 4));
110 f1 =
new TGCompositeFrame(
this, 155, 10, kHorizontalFrame | kFixedWidth);
111 fApply =
new TGTextButton(f1,
"Apply");
112 f1->AddFrame(fApply,
new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));
113 fApply->Associate(
this);
114 fUndo =
new TGTextButton(f1,
"Undo");
115 f1->AddFrame(fUndo,
new TGLayoutHints(kLHintsRight , 2, 2, 4, 4));
116 fUndo->Associate(
this);
117 AddFrame(f1,
new TGLayoutHints(kLHintsLeft, 6, 6, 4, 4));
118 fUndo->SetSize(fApply->GetSize());
124 TGeoEltuEditor::~TGeoEltuEditor()
127 TIter next(GetList());
128 while ((el = (TGFrameElement *)next())) {
129 if (el->fFrame->IsComposite())
130 TGeoTabManager::Cleanup((TGCompositeFrame*)el->fFrame);
138 void TGeoEltuEditor::ConnectSignals2Slots()
140 fApply->Connect(
"Clicked()",
"TGeoEltuEditor",
this,
"DoApply()");
141 fUndo->Connect(
"Clicked()",
"TGeoEltuEditor",
this,
"DoUndo()");
142 fShapeName->Connect(
"TextChanged(const char *)",
"TGeoEltuEditor",
this,
"DoModified()");
143 fEA->Connect(
"ValueSet(Long_t)",
"TGeoEltuEditor",
this,
"DoA()");
144 fEB->Connect(
"ValueSet(Long_t)",
"TGeoEltuEditor",
this,
"DoB()");
145 fEDz->Connect(
"ValueSet(Long_t)",
"TGeoEltuEditor",
this,
"DoDz()");
146 fEA->GetNumberEntry()->Connect(
"TextChanged(const char *)",
"TGeoEltuEditor",
this,
"DoModified()");
147 fEB->GetNumberEntry()->Connect(
"TextChanged(const char *)",
"TGeoEltuEditor",
this,
"DoModified()");
148 fEDz->GetNumberEntry()->Connect(
"TextChanged(const char *)",
"TGeoEltuEditor",
this,
"DoModified()");
155 void TGeoEltuEditor::SetModel(TObject* obj)
157 if (obj == 0 || (obj->IsA()!=TGeoEltu::Class())) {
161 fShape = (TGeoEltu*)obj;
162 fAi = fShape->GetA();
163 fBi = fShape->GetB();
164 fDzi = fShape->GetDz();
165 const char *sname = fShape->GetName();
166 if (!strcmp(sname, fShape->ClassName())) fShapeName->SetText(
"-no_name");
168 fShapeName->SetText(sname);
173 fEDz->SetNumber(fDzi);
174 fApply->SetEnabled(kFALSE);
175 fUndo->SetEnabled(kFALSE);
177 if (fInit) ConnectSignals2Slots();
184 void TGeoEltuEditor::DoName()
192 Bool_t TGeoEltuEditor::IsDelayed()
const
194 return (fDelayed->GetState() == kButtonDown);
200 void TGeoEltuEditor::DoApply()
202 const char *name = fShapeName->GetText();
203 if (strcmp(name,fShape->GetName())) fShape->SetName(name);
204 Double_t a = fEA->GetNumber();
205 Double_t b = fEB->GetNumber();
206 Double_t z = fEDz->GetNumber();
211 fShape->SetDimensions(param);
212 fShape->ComputeBBox();
214 fApply->SetEnabled(kFALSE);
216 if (gGeoManager && gGeoManager->GetPainter() && gGeoManager->GetPainter()->IsPaintingShape()) {
217 TView *view = fPad->GetView();
220 fPad->GetView()->ShowAxis();
222 view->SetRange(-fShape->GetDX(), -fShape->GetDY(), -fShape->GetDZ(),
223 fShape->GetDX(), fShape->GetDY(), fShape->GetDZ());
233 void TGeoEltuEditor::DoModified()
235 fApply->SetEnabled();
241 void TGeoEltuEditor::DoUndo()
245 fEDz->SetNumber(fDzi);
247 fUndo->SetEnabled(kFALSE);
248 fApply->SetEnabled(kFALSE);
254 void TGeoEltuEditor::DoA()
256 Double_t a = fEA->GetNumber();
262 if (!IsDelayed()) DoApply();
268 void TGeoEltuEditor::DoB()
270 Double_t b = fEB->GetNumber();
276 if (!IsDelayed()) DoApply();
282 void TGeoEltuEditor::DoDz()
284 Double_t z = fEDz->GetNumber();
290 if (!IsDelayed()) DoApply();