35 enum EParametersDialogWid {
49 ClassImp(TFunctionParametersDialog);
54 TFunctionParametersDialog::TFunctionParametersDialog(
const TGWindow *p,
58 Double_t rx, Double_t ry) :
59 TGTransientFrame(p, main, 10, 10, kVerticalFrame)
65 fFunc->GetRange(fRangexmin, fRangexmax);
66 fNP = fFunc->GetNpar();
68 fPmin =
new Double_t[fNP];
69 fPmax =
new Double_t[fNP];
70 fPval =
new Double_t[fNP];
71 fPerr =
new Double_t[fNP];
73 for (Int_t i = 0; i < fNP; i++) {
74 fFunc->GetParLimits(i, fPmin[i], fPmax[i]);
75 fPval[i] = fFunc->GetParameter(i);
76 fPerr[i] = fFunc->GetParError(i);
78 fParNam =
new TGTextEntry*[fNP];
79 fParFix =
new TGCheckButton*[fNP];
80 fParVal =
new TGNumberEntry*[fNP];
81 fParMin =
new TGNumberEntryField*[fNP];
82 fParMax =
new TGNumberEntryField*[fNP];
83 fParSld =
new TGTripleHSlider*[fNP];
85 memset(fParNam, 0,
sizeof(TGTextEntry*)*fNP);
86 memset(fParFix, 0,
sizeof(TGCheckButton*)*fNP);
87 memset(fParVal, 0,
sizeof(TGNumberEntry*)*fNP);
88 memset(fParMin, 0,
sizeof(TGNumberEntryField*)*fNP);
89 memset(fParMax, 0,
sizeof(TGNumberEntryField*)*fNP);
90 memset(fParMax, 0,
sizeof(TGTripleHSlider*)*fNP);
92 TGCompositeFrame *f1 =
new TGCompositeFrame(
this, 80, 20, kHorizontalFrame);
93 AddFrame(f1,
new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
96 fContNam =
new TGCompositeFrame(f1, 80, 20, kVerticalFrame | kFixedWidth);
97 fContNam->AddFrame(
new TGLabel(fContNam,
"Name"),
98 new TGLayoutHints(kLHintsTop, 5, 0, 0, 0));
99 for (Int_t i = 0; i < fNP; i++ ) {
100 fParNam[i] =
new TGTextEntry(fContNam,
new TGTextBuffer(80), kNAME+i);
101 fParNam[i]->SetText(Form(
"%s", fFunc->GetParName(i)));
102 fParNam[i]->SetEnabled(kFALSE);
103 fContNam->AddFrame(fParNam[i],
104 new TGLayoutHints(kLHintsExpandX, 5, 5, 7, 5));
106 f1->AddFrame(fContNam,
new TGLayoutHints(kLHintsExpandX, 5, 5, 5, 5));
109 fContFix =
new TGCompositeFrame(f1, 20, 20, kVerticalFrame | kFixedWidth);
110 fContFix->AddFrame(
new TGLabel(fContFix,
"Fix"),
111 new TGLayoutHints(kLHintsTop, 2, 0, 0, 0));
112 for (Int_t i = 0; i < fNP; i++ ) {
113 fParFix[i] =
new TGCheckButton(fContFix,
"", kFIX*fNP+i);
114 fParFix[i]->SetToolTipText(Form(
"Set %s to fixed", fFunc->GetParName(i)));
115 fContFix->AddFrame(fParFix[i],
new TGLayoutHints(kLHintsLeft | kLHintsCenterY,
117 if ((fPmin[i] == fPmax[i]) && (fPmin[i] || fPmax[i]))
118 fParFix[i]->SetState(kButtonDown);
120 fParFix[i]->SetState(kButtonUp);
121 fParFix[i]->Connect(
"Toggled(Bool_t)",
"TFunctionParametersDialog",
this,
"DoFix(Bool_t)");
123 f1->AddFrame(fContFix,
new TGLayoutHints(kLHintsLeft, 5, 5, 5, 5));
126 fContVal =
new TGCompositeFrame(f1, 80, 20, kVerticalFrame | kFixedWidth);
127 fContVal->AddFrame(
new TGLabel(fContVal,
"Value"),
128 new TGLayoutHints(kLHintsTop, 5, 0, 0, 0));
129 for (Int_t i = 0; i < fNP; i++ ) {
130 fParVal[i] =
new TGNumberEntry(fContVal, 1.2E-12, 15, kVAL*fNP+i,
131 TGNumberFormat::kNESReal);
132 fParVal[i]->SetNumber(fPval[i]);
133 fParVal[i]->SetFormat(TGNumberFormat::kNESReal, TGNumberFormat::kNEAAnyNumber);
134 fContVal->AddFrame(fParVal[i],
new TGLayoutHints(kLHintsExpandX, 5, 5, 7, 5));
135 (fParVal[i]->GetNumberEntry())->SetToolTipText(Form(
"%s", fFunc->GetParName(i)));
136 (fParVal[i]->GetNumberEntry())->Connect(
"ReturnPressed()",
"TFunctionParametersDialog",
137 this,
"DoParValue()");
138 fParVal[i]->Connect(
"ValueSet(Long_t)",
"TFunctionParametersDialog",
this,
"DoParValue()");
140 f1->AddFrame(fContVal,
new TGLayoutHints(kLHintsExpandX, 5, 5, 5, 5));
143 fContMin =
new TGCompositeFrame(f1, 80, 20, kVerticalFrame | kFixedWidth);
144 fContMin->AddFrame(
new TGLabel(fContMin,
"Min"),
145 new TGLayoutHints(kLHintsTop, 5, 0, 0, 0));
146 for (Int_t i = 0; i < fNP; i++ ) {
147 fParMin[i] =
new TGNumberEntryField(fContMin, kMIN*fNP+i, 0.0,
148 TGNumberFormat::kNESReal,
149 TGNumberFormat::kNEAAnyNumber);
150 ((TGTextEntry*)fParMin[i])->SetToolTipText(Form(
"Lower limit of %s",
151 fFunc->GetParName(i)));
152 fContMin->AddFrame(fParMin[i],
new TGLayoutHints(kLHintsExpandX, 5, 5, 7, 5));
154 fParMin[i]->SetNumber(fPmin[i]);
156 fParMin[i]->SetNumber(fPval[i]-3*fPerr[i]);
158 fParMin[i]->SetNumber(fPval[i]-0.1*fPval[i]);
160 fParMin[i]->SetNumber(1.0);
161 fParMin[i]->Connect(
"ReturnPressed()",
"TFunctionParametersDialog",
this,
"DoParMinLimit()");
163 f1->AddFrame(fContMin,
new TGLayoutHints(kLHintsExpandX, 5, 5, 5, 5));
166 fContSld =
new TGCompositeFrame(f1, 120, 20, kVerticalFrame | kFixedWidth);
167 fContSld->AddFrame(
new TGLabel(fContSld,
"Set Range"),
168 new TGLayoutHints(kLHintsTop, 5, 0, 0, 0));
169 for (Int_t i = 0; i < fNP; i++ ) {
170 fParSld[i] =
new TGTripleHSlider(fContSld, 100, kDoubleScaleBoth, kSLD*fNP+i,
171 kHorizontalFrame, GetDefaultFrameBackground(),
172 kFALSE, kFALSE, kFALSE, kFALSE);
173 fContSld->AddFrame(fParSld[i],
new TGLayoutHints(kLHintsExpandX, 5, 5, 5, 5));
174 fParSld[i]->SetConstrained(kTRUE);
176 f1->AddFrame(fContSld,
new TGLayoutHints(kLHintsExpandX, 5, 5, 5, 5));
179 fContMax =
new TGCompositeFrame(f1, 80, 20, kVerticalFrame);
180 fContMax->AddFrame(
new TGLabel(fContMax,
"Max"),
181 new TGLayoutHints(kLHintsTop, 5, 0, 0, 0));
182 for (Int_t i = 0; i < fNP; i++ ) {
183 fParMax[i] =
new TGNumberEntryField(fContMax, kMAX*fNP+i, 0.0,
184 TGNumberFormat::kNESReal,
185 TGNumberFormat::kNEAAnyNumber);
186 ((TGTextEntry*)fParMax[i])->SetToolTipText(Form(
"Upper limit of %s",
187 fFunc->GetParName(i)));
188 fContMax->AddFrame(fParMax[i],
new TGLayoutHints(kLHintsExpandX, 5, 5, 7, 5));
190 fParMax[i]->SetNumber(fPmax[i]);
192 fParMax[i]->SetNumber(fPval[i]+3*fPerr[i]);
194 fParMax[i]->SetNumber(fPval[i]+0.1*fPval[i]);
196 fParMax[i]->SetNumber(1.0);
197 if (fParMax[i]->GetNumber() < fParMin[i]->GetNumber()){
199 temp = fParMax[i]->GetNumber();
200 fParMax[i]->SetNumber(fParMin[i]->GetNumber());
201 fParMin[i]->SetNumber(temp);
203 fParMax[i]->Connect(
"ReturnPressed()",
"TFunctionParametersDialog",
this,
"DoParMaxLimit()");
205 f1->AddFrame(fContMax,
new TGLayoutHints(kLHintsExpandX, 5, 5, 5, 5));
208 fUpdate =
new TGCheckButton(
this,
"&Immediate preview", kUPDATE);
209 fUpdate->SetToolTipText(
"Immediate function redrawing");
210 AddFrame(fUpdate,
new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 5, 5, 5, 5));
211 fUpdate->Connect(
"Toggled(Bool_t)",
"TFunctionParametersDialog",
this,
"HandleButtons(Bool_t)");
213 TGCompositeFrame *f2 =
new TGCompositeFrame(
this, 270, 20, kHorizontalFrame | kFixedWidth);
214 AddFrame(f2,
new TGLayoutHints(kLHintsRight, 20, 20, 5, 1));
216 fReset =
new TGTextButton(f2,
"&Reset", kRESET);
217 f2->AddFrame(fReset,
new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX,5,5,5,5));
218 fReset->SetToolTipText(
"Reset the parameter settings");
219 fReset->SetState(kButtonDisabled);
220 fReset->Connect(
"Clicked()",
"TFunctionParametersDialog",
this,
"DoReset()");
222 fApply =
new TGTextButton(f2,
"&Apply", kAPPLY);
223 f2->AddFrame(fApply,
new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX,5,5,5,5));
224 fApply->SetState(kButtonDisabled);
225 fApply->Connect(
"Clicked()",
"TFunctionParametersDialog",
this,
"DoApply()");
226 fApply->SetToolTipText(
"Apply parameter settings and redraw the function");
228 fOK =
new TGTextButton(f2,
"&OK", kOK);
229 f2->AddFrame(fOK,
new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX,5,5,5,5));
230 fOK->SetToolTipText(
"Apply parameter settings, redraw function and close this dialog");
231 fOK->Connect(
"Clicked()",
"TFunctionParametersDialog",
this,
"DoOK()");
233 fCancel =
new TGTextButton(f2,
"&Cancel", kCANCEL);
234 f2->AddFrame(fCancel,
new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX,5,5,5,5));
235 fCancel->SetToolTipText(
"Close this dialog with no parameter changes");
236 fCancel->Connect(
"Clicked()",
"TFunctionParametersDialog",
this,
"DoCancel()");
239 Resize(GetDefaultSize());
240 CenterOnParent(kFALSE, kBottomLeft);
241 SetWindowName(Form(
"Set Parameters of %s", fFunc->GetTitle()));
244 for (Int_t i = 0; i < fNP; i++ ) {
245 if (fParFix[i]->GetState() == kButtonDown) {
246 fParVal[i]->SetState(kFALSE);
247 fParMin[i]->SetEnabled(kFALSE);
248 fParMax[i]->SetEnabled(kFALSE);
249 fParSld[i]->UnmapWindow();
251 fParSld[i]->SetRange(fParMin[i]->GetNumber(), fParMax[i]->GetNumber());
252 fParSld[i]->SetPosition(fParMin[i]->GetNumber(), fParMax[i]->GetNumber());
253 fParSld[i]->SetPointerPosition(fPval[i]);
254 fParSld[i]->Connect(
"PointerPositionChanged()",
"TFunctionParametersDialog",
256 fParSld[i]->Connect(
"PositionChanged()",
"TFunctionParametersDialog",
261 gClient->WaitFor(
this);
267 TFunctionParametersDialog::~TFunctionParametersDialog()
270 TIter next(GetList());
272 while ((el = (TGFrameElement *)next())) {
273 if (!strcmp(el->fFrame->ClassName(),
"TGCompositeFrame")) {
275 TIter next1(((TGCompositeFrame *)el->fFrame)->GetList());
276 while ((el1 = (TGFrameElement *)next1())) {
277 if (!strcmp(el1->fFrame->ClassName(),
"TGCompositeFrame"))
278 ((TGCompositeFrame *)el1->fFrame)->Cleanup();
280 ((TGCompositeFrame *)el->fFrame)->Cleanup();
293 void TFunctionParametersDialog::CloseWindow()
298 txt =
"Do you want to apply last parameters' setting?";
299 new TGMsgBox(fClient->GetRoot(), GetMainFrame(),
300 "Parameters Have Been Changed", txt, kMBIconExclamation,
301 kMBYes | kMBNo | kMBCancel, &ret);
305 }
else if (ret == kMBNo) {
315 void TFunctionParametersDialog::DoCancel()
319 TTimer::SingleShot(50,
"TFunctionParametersDialog",
this,
"CloseWindow()");
325 void TFunctionParametersDialog::DoFix(Bool_t on)
327 fReset->SetState(kButtonUp);
328 TGButton *bt = (TGButton *) gTQSender;
329 Int_t
id = bt->WidgetId();
331 for (Int_t i = 0; i < fNP; i++ ) {
332 if (
id == kFIX*fNP+i) {
334 if (fParVal[i]->GetNumber() != 0) {
335 fParMin[i]->SetNumber(fParVal[i]->GetNumber());
336 fParMin[i]->SetEnabled(kFALSE);
337 fParMax[i]->SetNumber(fParVal[i]->GetNumber());
338 fParMax[i]->SetEnabled(kFALSE);
340 fParMin[i]->SetNumber(1.);
341 fParMin[i]->SetEnabled(kFALSE);
342 fParMax[i]->SetNumber(1.);
343 fParMax[i]->SetEnabled(kFALSE);
345 fParVal[i]->SetState(kFALSE);
346 fParSld[i]->Disconnect(
"PointerPositionChanged()");
347 fParSld[i]->Disconnect(
"PositionChanged()");
348 fParSld[i]->UnmapWindow();
349 fFunc->FixParameter(i, fParVal[i]->GetNumber());
350 }
else if (!fParMin[i]->IsEnabled()) {
351 if (fPmin[i] != fPmax[i]) {
353 fParMin[i]->SetNumber(fPmin[i]);
355 fParMin[i]->SetNumber(fPval[i]-3*fPerr[i]);
357 fParMin[i]->SetNumber(fPval[i]-0.1*fPval[i]);
359 fParMin[i]->SetNumber(1.0);
361 fParMax[i]->SetNumber(fPmax[i]);
363 fParMax[i]->SetNumber(fPval[i]+3*fPerr[i]);
365 fParMax[i]->SetNumber(fPval[i]+0.1*fPval[i]);
367 fParMax[i]->SetNumber(1.0);
368 }
else if (fPval[i]) {
369 fParMin[i]->SetNumber(fPval[i]-0.1*fPval[i]);
370 fParMax[i]->SetNumber(fPval[i]+0.1*fPval[i]);
372 fParMin[i]->SetNumber(1.0);
373 fParMax[i]->SetNumber(1.0);
375 if (fParMax[i]->GetNumber() < fParMin[i]->GetNumber()){
377 temp = fParMax[i]->GetNumber();
378 fParMax[i]->SetNumber(fParMin[i]->GetNumber());
379 fParMin[i]->SetNumber(temp);
381 fParMax[i]->SetEnabled(kTRUE);
382 fParMin[i]->SetEnabled(kTRUE);
383 fParSld[i]->MapWindow();
384 fParVal[i]->SetState(kTRUE);
385 fParSld[i]->SetRange(fParMin[i]->GetNumber(), fParMax[i]->GetNumber());
386 fParSld[i]->SetPosition(fParMin[i]->GetNumber(), fParMax[i]->GetNumber());
387 fParSld[i]->SetPointerPosition(fPval[i]);
388 fParSld[i]->Connect(
"PointerPositionChanged()",
"TFunctionParametersDialog",
390 fParSld[i]->Connect(
"PositionChanged()",
"TFunctionParametersDialog",
392 fFunc->SetParLimits(i, fParMin[i]->GetNumber(), fParMax[i]->GetNumber());
396 if (fUpdate->GetState() == kButtonDown)
398 else if ((fApply->GetState() == kButtonDisabled) && fHasChanges)
399 fApply->SetState(kButtonUp);
405 void TFunctionParametersDialog::DoOK()
409 fFunc->SetRange(fRangexmin, fRangexmax);
410 TTimer::SingleShot(50,
"TFunctionParametersDialog",
this,
"CloseWindow()");
416 void TFunctionParametersDialog::DoApply()
419 fApply->SetState(kButtonDisabled);
420 if (fReset->GetState() == kButtonDisabled)
421 fReset->SetState(kButtonUp);
427 void TFunctionParametersDialog::DoReset()
431 for (Int_t i = 0; i < fNP; i++) {
432 if (fParVal[i]->GetNumber() == fPval[i])
439 if (fReset->GetState() == kButtonUp)
440 fReset->SetState(kButtonDisabled);
441 fHasChanges = kFALSE;
444 for (Int_t i = 0; i < fNP; i++) {
445 fFunc->SetParameter(i, fPval[i]);
446 fFunc->SetParLimits(i, fPmin[i], fPmax[i]);
447 fFunc->SetParError(i, fPerr[i]);
450 fParMin[i]->SetNumber(fPmin[i]);
452 fParMin[i]->SetNumber(fPval[i]-3*fPerr[i]);
454 fParMin[i]->SetNumber(fPval[i]-0.1*fPval[i]);
456 fParMin[i]->SetNumber(1.0);
459 fParMax[i]->SetNumber(fPmax[i]);
461 fParMax[i]->SetNumber(fPval[i]+3*fPerr[i]);
463 fParMax[i]->SetNumber(fPval[i]+0.1*fPval[i]);
465 fParMax[i]->SetNumber(1.0);
466 if (fParMax[i]->GetNumber() < fParMin[i]->GetNumber()){
468 temp = fParMax[i]->GetNumber();
469 fParMax[i]->SetNumber(fParMin[i]->GetNumber());
470 fParMin[i]->SetNumber(temp);
472 if (fParMin[i]->GetNumber() == fParMax[i]->GetNumber()) {
473 fParVal[i]->SetState(kFALSE);
474 fParMin[i]->SetEnabled(kFALSE);
475 fParMax[i]->SetEnabled(kFALSE);
476 fParSld[i]->Disconnect(
"PointerPositionChanged()");
477 fParSld[i]->Disconnect(
"PositionChanged()");
478 fParSld[i]->UnmapWindow();
479 fFunc->FixParameter(i, fParVal[i]->GetNumber());
480 fParFix[i]->SetState(kButtonDown);
482 fParFix[i]->SetState(kButtonUp);
483 if (!fParMax[i]->IsEnabled()) {
484 fParMax[i]->SetEnabled(kTRUE);
485 fParMin[i]->SetEnabled(kTRUE);
486 fParVal[i]->SetState(kTRUE);
487 fParSld[i]->SetRange(fParMin[i]->GetNumber(), fParMax[i]->GetNumber());
488 fParSld[i]->SetPosition(fParMin[i]->GetNumber(), fParMax[i]->GetNumber());
489 fParSld[i]->SetPointerPosition(fPval[i]);
490 fParSld[i]->MapWindow();
491 fParSld[i]->Connect(
"PointerPositionChanged()",
"TFunctionParametersDialog",
493 fParSld[i]->Connect(
"PositionChanged()",
"TFunctionParametersDialog",
497 fParVal[i]->SetNumber(fPval[i]);
499 fParSld[i]->SetRange(fParMin[i]->GetNumber(), fParMax[i]->GetNumber());
500 fParSld[i]->SetPosition(fParMin[i]->GetNumber(), fParMax[i]->GetNumber());
501 fParSld[i]->SetPointerPosition(fPval[i]);
504 if (fUpdate->GetState() == kButtonDown)
506 else if ((fApply->GetState() == kButtonDisabled) && fHasChanges)
507 fApply->SetState(kButtonUp);
508 fHasChanges = kFALSE;
509 fReset->SetState(kButtonDisabled);
515 void TFunctionParametersDialog::DoSlider()
517 TGTripleHSlider *sl = (TGTripleHSlider *) gTQSender;
518 Int_t
id = sl->WidgetId();
521 for (Int_t i = 0; i < fNP; i++ ) {
522 if (
id == kSLD*fNP+i) {
523 fFunc->SetParameter(i,fParSld[i]->GetPointerPosition());
524 fFunc->SetParLimits(i,fParSld[i]->GetMinPosition(),
525 fParSld[i]->GetMaxPosition());
526 fParMin[i]->SetNumber(fParSld[i]->GetMinPosition());
527 fParMax[i]->SetNumber(fParSld[i]->GetMaxPosition());
528 fParVal[i]->SetNumber(fParSld[i]->GetPointerPosition());
531 if (fUpdate->GetState() == kButtonDown)
533 else if ((fApply->GetState() == kButtonDisabled) && fHasChanges)
534 fApply->SetState(kButtonUp);
535 if (fReset->GetState() == kButtonDisabled)
536 fReset->SetState(kButtonUp);
542 void TFunctionParametersDialog::DoParValue()
544 TGNumberEntry *ne = (TGNumberEntry *) gTQSender;
545 Int_t
id = ne->WidgetId();
547 for (Int_t i = 0; i < fNP; i++ ) {
548 if (
id == kVAL*fNP+i) {
549 fParSld[i]->SetPointerPosition(fParVal[i]->GetNumber());
550 if (fParVal[i]->GetNumber() < fParMin[i]->GetNumber()) {
551 fParMin[i]->SetNumber(fParVal[i]->GetNumber());
552 fClient->NeedRedraw(fParMin[i]);
553 fParSld[i]->SetRange(fParMin[i]->GetNumber(),
554 fParMax[i]->GetNumber());
555 fParSld[i]->SetPosition(fParMin[i]->GetNumber(),
556 fParMax[i]->GetNumber());
558 if (fParVal[i]->GetNumber() > fParMax[i]->GetNumber()) {
559 fParMax[i]->SetNumber(fParVal[i]->GetNumber());
560 fClient->NeedRedraw(fParMax[i]);
561 fParSld[i]->SetRange(fParMin[i]->GetNumber(),
562 fParMax[i]->GetNumber());
563 fParSld[i]->SetPosition(fParMin[i]->GetNumber(),
564 fParMax[i]->GetNumber());
566 fClient->NeedRedraw(fParSld[i]);
567 fFunc->SetParameter(i,fParSld[i]->GetPointerPosition());
568 fFunc->SetParLimits(i,fParSld[i]->GetMinPosition(),
569 fParSld[i]->GetMaxPosition());
573 if (fUpdate->GetState() == kButtonDown)
575 else if ((fApply->GetState() == kButtonDisabled) && fHasChanges)
576 fApply->SetState(kButtonUp);
577 if (fReset->GetState() == kButtonDisabled)
578 fReset->SetState(kButtonUp);
584 void TFunctionParametersDialog::DoParMinLimit()
586 TGNumberEntryField *ne = (TGNumberEntryField *) gTQSender;
587 Int_t
id = ne->WidgetId();
589 for (Int_t i = 0; i < fNP; i++ ) {
590 if (
id == kMIN*fNP+i) {
591 if (fParMin[i]->GetNumber() > fParMax[i]->GetNumber()) {
594 txt =
"The lower parameter bound cannot be bigger then the upper one.";
595 new TGMsgBox(fClient->GetRoot(), GetMainFrame(),
596 "Parameter Limits", txt, kMBIconExclamation,kMBOk,&ret);
597 fParMin[i]->SetNumber(fParVal[i]->GetNumber());
600 fParSld[i]->SetRange(fParMin[i]->GetNumber(),
601 fParMax[i]->GetNumber());
602 fParSld[i]->SetPosition(fParMin[i]->GetNumber(),
603 fParMax[i]->GetNumber());
604 fParSld[i]->SetPointerPosition(fParVal[i]->GetNumber());
605 fClient->NeedRedraw(fParSld[i]);
609 if (fUpdate->GetState() == kButtonDown)
611 else if ((fApply->GetState() == kButtonDisabled) && fHasChanges)
612 fApply->SetState(kButtonUp);
613 if (fReset->GetState() == kButtonDisabled)
614 fReset->SetState(kButtonUp);
620 void TFunctionParametersDialog::DoParMaxLimit()
622 TGNumberEntryField *ne = (TGNumberEntryField *) gTQSender;
623 Int_t
id = ne->WidgetId();
625 for (Int_t i = 0; i < fNP; i++ ) {
626 if (
id == kMAX*fNP+i) {
627 if (fParMin[i]->GetNumber() > fParMax[i]->GetNumber()) {
630 txt =
"The lower parameter bound cannot be bigger then the upper one.";
631 new TGMsgBox(fClient->GetRoot(), GetMainFrame(),
632 "Parameter Limits", txt, kMBIconExclamation,kMBOk,&ret);
633 fParMax[i]->SetNumber(fParVal[i]->GetNumber());
636 fParSld[i]->SetRange(fParMin[i]->GetNumber(),
637 fParMax[i]->GetNumber());
638 fParSld[i]->SetPosition(fParMin[i]->GetNumber(),
639 fParMax[i]->GetNumber());
640 fParSld[i]->SetPointerPosition(fParVal[i]->GetNumber());
641 fClient->NeedRedraw(fParSld[i]);
645 if (fUpdate->GetState() == kButtonDown)
647 else if ((fApply->GetState() == kButtonDisabled) && fHasChanges)
648 fApply->SetState(kButtonUp);
649 if (fReset->GetState() == kButtonDisabled)
650 fReset->SetState(kButtonUp);
656 void TFunctionParametersDialog::RedrawFunction()
658 TString opt = fFunc->GetDrawOption();
660 if (!opt.Contains(
"SAME"))
662 fFunc->SetRange(fRXmin, fRXmax);
666 fHasChanges = kFALSE;
672 void TFunctionParametersDialog::HandleButtons(Bool_t update)
674 if (update && fHasChanges)
676 else if ((fApply->GetState() == kButtonDisabled) && fHasChanges) {
677 fApply->SetState(kButtonUp);