ROOT logo
// @(#)root/ged:$Id: TFunctionParametersDialog.cxx 20882 2007-11-19 11:31:26Z rdm $
// Author: Ilka Antcheva   08/05/06

/*************************************************************************
 * Copyright (C) 1995-2006, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

//////////////////////////////////////////////////////////////////////////
//                                                                      //
//  TFunctionParametersDialog                                           //
//                                                                      //
//  This class is used for function parameter settings.                 //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "TFunctionParametersDialog.h"
#include "TTimer.h"
#include "TList.h"
#include "TF1.h"
#include "TGButton.h"
#include "TGFrame.h"
#include "TGLabel.h"
#include "TGLayout.h"
#include "TGTextEntry.h"
#include "TGMsgBox.h"
#include "TGNumberEntry.h"
#include "TGTripleSlider.h"
#include "TVirtualPad.h"


enum EParametersDialogWid {
   kNAME,
   kFIX = 10,
   kVAL = 20,
   kMIN = 30,
   kMAX = 40,
   kSLD = 50,
   kUPDATE = 8888,
   kRESET,
   kAPPLY,
   kOK,
   kCANCEL
};

ClassImp(TFunctionParametersDialog)

//______________________________________________________________________________
TFunctionParametersDialog::TFunctionParametersDialog(const TGWindow *p,
                                                     const TGWindow *main,
                                                     TF1 *func,
                                                     TVirtualPad *pad,
                                                     Double_t rx, Double_t ry) :
   TGTransientFrame(p, main, 10, 10, kVerticalFrame)
{
   // Create the parameters' dialog of currently selected function 'func'.

   fFunc = func;
   fFpad = pad;
   fRXmin = rx;
   fRXmax = ry;
   fFunc->GetRange(fRangexmin, fRangexmax);
   fNP = fFunc->GetNpar();
   fHasChanges = kFALSE;
   fPmin = new Double_t[fNP];
   fPmax = new Double_t[fNP];
   fPval = new Double_t[fNP];
   fPerr = new Double_t[fNP];

   for (Int_t i = 0; i < fNP; i++) {
      fFunc->GetParLimits(i, fPmin[i], fPmax[i]);
      fPval[i] = fFunc->GetParameter(i);
      fPerr[i] = fFunc->GetParError(i);
   }
   fParNam = new TGTextEntry*[fNP];
   fParFix = new TGCheckButton*[fNP];
   fParVal = new TGNumberEntry*[fNP];
   fParMin = new TGNumberEntryField*[fNP];
   fParMax = new TGNumberEntryField*[fNP];
   fParSld = new TGTripleHSlider*[fNP];

   memset(fParNam, 0, sizeof(TGTextEntry*)*fNP);
   memset(fParFix, 0, sizeof(TGCheckButton*)*fNP);
   memset(fParVal, 0, sizeof(TGNumberEntry*)*fNP);
   memset(fParMin, 0, sizeof(TGNumberEntryField*)*fNP);
   memset(fParMax, 0, sizeof(TGNumberEntryField*)*fNP);
   memset(fParMax, 0, sizeof(TGTripleHSlider*)*fNP);

   TGCompositeFrame *f1 = new TGCompositeFrame(this, 80, 20, kHorizontalFrame);
   AddFrame(f1, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));

   // column 'Name'
   fContNam = new TGCompositeFrame(f1, 80, 20, kVerticalFrame | kFixedWidth);
   fContNam->AddFrame(new TGLabel(fContNam,"Name"),
                      new TGLayoutHints(kLHintsTop, 5, 0, 0, 0));
   for (Int_t i = 0; i < fNP; i++ ) {
      fParNam[i] = new TGTextEntry(fContNam, new TGTextBuffer(80), kNAME+i);
      fParNam[i]->SetText(Form("%s", fFunc->GetParName(i)));
      fParNam[i]->SetEnabled(kFALSE);
      fContNam->AddFrame(fParNam[i],
                         new TGLayoutHints(kLHintsExpandX, 5, 5, 7, 5));
   }
   f1->AddFrame(fContNam, new TGLayoutHints(kLHintsExpandX, 5, 5, 5, 5));

   // column 'Fix'
   fContFix = new TGCompositeFrame(f1, 20, 20, kVerticalFrame | kFixedWidth);
   fContFix->AddFrame(new TGLabel(fContFix,"Fix"),
                      new TGLayoutHints(kLHintsTop, 2, 0, 0, 0));
   for (Int_t i = 0; i < fNP; i++ ) {
      fParFix[i] = new TGCheckButton(fContFix, "", kFIX*fNP+i);
      fParFix[i]->SetToolTipText(Form("Set %s to fixed", fFunc->GetParName(i)));
      fContFix->AddFrame(fParFix[i], new TGLayoutHints(kLHintsLeft | kLHintsCenterY,
                                                       5, 5, 10, 7));
      if ((fPmin[i] == fPmax[i]) && (fPmin[i] || fPmax[i]))
         fParFix[i]->SetState(kButtonDown);
      else
         fParFix[i]->SetState(kButtonUp);
      fParFix[i]->Connect("Toggled(Bool_t)", "TFunctionParametersDialog", this, "DoFix(Bool_t)");
   }
   f1->AddFrame(fContFix, new TGLayoutHints(kLHintsLeft, 5, 5, 5, 5));

   // column 'Value'
   fContVal = new TGCompositeFrame(f1, 80, 20, kVerticalFrame | kFixedWidth);
   fContVal->AddFrame(new TGLabel(fContVal,"Value"),
                      new TGLayoutHints(kLHintsTop, 5, 0, 0, 0));
   for (Int_t i = 0; i < fNP; i++ ) {
      fParVal[i] = new TGNumberEntry(fContVal, 1.2E-12, 15, kVAL*fNP+i,
                                     TGNumberFormat::kNESReal);
      fParVal[i]->SetNumber(fPval[i]);
      fParVal[i]->SetFormat(TGNumberFormat::kNESReal, TGNumberFormat::kNEAAnyNumber); //tbs
      fContVal->AddFrame(fParVal[i], new TGLayoutHints(kLHintsExpandX, 5, 5, 7, 5));
      (fParVal[i]->GetNumberEntry())->SetToolTipText(Form("%s", fFunc->GetParName(i)));
      (fParVal[i]->GetNumberEntry())->Connect("ReturnPressed()", "TFunctionParametersDialog",
                                              this, "DoParValue()");
      fParVal[i]->Connect("ValueSet(Long_t)", "TFunctionParametersDialog", this, "DoParValue()");
   }
   f1->AddFrame(fContVal, new TGLayoutHints(kLHintsExpandX, 5, 5, 5, 5));

   // column 'Min'
   fContMin = new TGCompositeFrame(f1, 80, 20, kVerticalFrame | kFixedWidth);
   fContMin->AddFrame(new TGLabel(fContMin,"Min"),
                      new TGLayoutHints(kLHintsTop, 5, 0, 0, 0));
   for (Int_t i = 0; i < fNP; i++ ) {
      fParMin[i] = new TGNumberEntryField(fContMin, kMIN*fNP+i, 0.0,
                                          TGNumberFormat::kNESReal,
                                          TGNumberFormat::kNEAAnyNumber);
      ((TGTextEntry*)fParMin[i])->SetToolTipText(Form("Lower limit of %s",
                                                 fFunc->GetParName(i)));
      fContMin->AddFrame(fParMin[i], new TGLayoutHints(kLHintsExpandX, 5, 5, 7, 5));
      if (fPmin[i])
         fParMin[i]->SetNumber(fPmin[i]);
      else if (fPerr[i])
         fParMin[i]->SetNumber(fPval[i]-3*fPerr[i]);
      else if (fPval[i])
         fParMin[i]->SetNumber(fPval[i]-0.1*fPval[i]);
      else
         fParMin[i]->SetNumber(1.0);
      fParMin[i]->Connect("ReturnPressed()", "TFunctionParametersDialog", this, "DoParMinLimit()");
   }
   f1->AddFrame(fContMin, new TGLayoutHints(kLHintsExpandX, 5, 5, 5, 5));

   // column 'Set Range'
   fContSld = new TGCompositeFrame(f1, 120, 20, kVerticalFrame | kFixedWidth);
   fContSld->AddFrame(new TGLabel(fContSld,"Set Range"),
                      new TGLayoutHints(kLHintsTop, 5, 0, 0, 0));
   for (Int_t i = 0; i < fNP; i++ ) {
      fParSld[i] = new TGTripleHSlider(fContSld, 100, kDoubleScaleBoth, kSLD*fNP+i,
                                       kHorizontalFrame, GetDefaultFrameBackground(),
                                       kFALSE, kFALSE, kFALSE, kFALSE);
      fContSld->AddFrame(fParSld[i], new TGLayoutHints(kLHintsExpandX, 5, 5, 5, 5));
      fParSld[i]->SetConstrained(kTRUE);
   }
   f1->AddFrame(fContSld,  new TGLayoutHints(kLHintsExpandX, 5, 5, 5, 5));

   // column 'Max'
   fContMax = new TGCompositeFrame(f1, 80, 20, kVerticalFrame);
   fContMax->AddFrame(new TGLabel(fContMax,"Max"),
                      new TGLayoutHints(kLHintsTop, 5, 0, 0, 0));
   for (Int_t i = 0; i < fNP; i++ ) {
      fParMax[i] = new TGNumberEntryField(fContMax, kMAX*fNP+i, 0.0,
                                          TGNumberFormat::kNESReal,
                                          TGNumberFormat::kNEAAnyNumber);
      ((TGTextEntry*)fParMax[i])->SetToolTipText(Form("Upper limit of %s",
                                                 fFunc->GetParName(i)));
      fContMax->AddFrame(fParMax[i], new TGLayoutHints(kLHintsExpandX, 5, 5, 7, 5));
      if (fPmax[i])
         fParMax[i]->SetNumber(fPmax[i]);
      else if (fPerr[i])
         fParMax[i]->SetNumber(fPval[i]+3*fPerr[i]);
      else if (fPval[i])
         fParMax[i]->SetNumber(fPval[i]+0.1*fPval[i]);
      else
         fParMax[i]->SetNumber(1.0);
      if (fParMax[i]->GetNumber() < fParMin[i]->GetNumber()){
         Double_t temp;
         temp = fParMax[i]->GetNumber();
         fParMax[i]->SetNumber(fParMin[i]->GetNumber());
         fParMin[i]->SetNumber(temp);
      }
      fParMax[i]->Connect("ReturnPressed()", "TFunctionParametersDialog", this, "DoParMaxLimit()");
   }
   f1->AddFrame(fContMax, new TGLayoutHints(kLHintsExpandX, 5, 5, 5, 5));


   fUpdate = new TGCheckButton(this, "&Immediate preview", kUPDATE);
   fUpdate->SetToolTipText("Immediate function redrawing");
   AddFrame(fUpdate, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 5, 5, 5, 5));
   fUpdate->Connect("Toggled(Bool_t)", "TFunctionParametersDialog", this, "HandleButtons(Bool_t)");

   TGCompositeFrame *f2 = new TGCompositeFrame(this, 270, 20, kHorizontalFrame | kFixedWidth);
   AddFrame(f2, new TGLayoutHints(kLHintsRight, 20, 20, 5, 1));

   fReset = new TGTextButton(f2, "&Reset", kRESET);
   f2->AddFrame(fReset, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX,5,5,5,5));
   fReset->SetToolTipText("Reset the parameter settings");
   fReset->SetState(kButtonDisabled);
   fReset->Connect("Clicked()", "TFunctionParametersDialog", this, "DoReset()");

   fApply = new TGTextButton(f2, "&Apply", kAPPLY);
   f2->AddFrame(fApply, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX,5,5,5,5));
   fApply->SetState(kButtonDisabled);
   fApply->Connect("Clicked()", "TFunctionParametersDialog", this, "DoApply()");
   fApply->SetToolTipText("Apply parameter settings and redraw the function");

   fOK = new TGTextButton(f2, "&OK", kOK);
   f2->AddFrame(fOK, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX,5,5,5,5));
   fOK->SetToolTipText("Apply parameter settings, redraw function and close this dialog");
   fOK->Connect("Clicked()", "TFunctionParametersDialog", this, "DoOK()");

   fCancel = new TGTextButton(f2, "&Cancel", kCANCEL);
   f2->AddFrame(fCancel, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX,5,5,5,5));
   fCancel->SetToolTipText("Close this dialog with no parameter changes");
   fCancel->Connect("Clicked()", "TFunctionParametersDialog", this, "DoCancel()");

   MapSubwindows();
   Resize(GetDefaultSize());
   CenterOnParent(kFALSE, kBottomLeft);
   SetWindowName(Form("Set Parameters of %s", fFunc->GetTitle()));
   MapWindow();

   for (Int_t i = 0; i < fNP; i++ ) {
      if (fParFix[i]->GetState() == kButtonDown) {
         fParVal[i]->SetState(kFALSE);
         fParMin[i]->SetEnabled(kFALSE);
         fParMax[i]->SetEnabled(kFALSE);
         fParSld[i]->UnmapWindow();
      } else {
         fParSld[i]->SetRange(fParMin[i]->GetNumber(), fParMax[i]->GetNumber());
         fParSld[i]->SetPosition(fParMin[i]->GetNumber(), fParMax[i]->GetNumber());
         fParSld[i]->SetPointerPosition(fPval[i]);
         fParSld[i]->Connect("PointerPositionChanged()", "TFunctionParametersDialog",
                             this, "DoSlider()");
         fParSld[i]->Connect("PositionChanged()", "TFunctionParametersDialog",
                             this, "DoSlider()");
      }
   }

   gClient->WaitFor(this);
}

//______________________________________________________________________________
TFunctionParametersDialog::~TFunctionParametersDialog()
{
   // Destructor.

   TGFrameElement *el;
   TIter next(GetList());

   while ((el = (TGFrameElement *)next())) {
      if (!strcmp(el->fFrame->ClassName(), "TGCompositeFrame")) {
         TGFrameElement *el1;
         TIter next1(((TGCompositeFrame *)el->fFrame)->GetList());
         while ((el1 = (TGFrameElement *)next1())) {
            if (!strcmp(el1->fFrame->ClassName(), "TGCompositeFrame"))
               ((TGCompositeFrame *)el1->fFrame)->Cleanup();
         }
         ((TGCompositeFrame *)el->fFrame)->Cleanup();
      }
   }
   Cleanup();
   delete [] fPval;
   delete [] fPmin;
   delete [] fPmax;
   delete [] fPerr;
}

//______________________________________________________________________________
void TFunctionParametersDialog::CloseWindow()
{
   // Close parameters' dialog.

   if (fHasChanges) {
      Int_t ret;
      const char *txt;
      txt = "Do you want to apply last parameters' setting?";
      new TGMsgBox(fClient->GetRoot(), GetMainFrame(),
                   "Parameters Have Been Changed", txt, kMBIconExclamation,
                   kMBYes | kMBNo | kMBCancel, &ret);
      if (ret == kMBYes) {
         DoOK();
         return;
      } else if (ret == kMBNo) {
         DoReset();
      } else return;
   }
   DeleteWindow();
}

//______________________________________________________________________________
void TFunctionParametersDialog::DoCancel()
{
   // Slot related to the Cancel button.

   if (fHasChanges)
      DoReset();
   TTimer::SingleShot(50, "TFunctionParametersDialog", this, "CloseWindow()");
}

//______________________________________________________________________________
void TFunctionParametersDialog::DoFix(Bool_t on)
{
   // Slot related to the Fix check button.

   fReset->SetState(kButtonUp);
   TGButton *bt = (TGButton *) gTQSender;
   Int_t id = bt->WidgetId();
   fHasChanges = kTRUE;
   for (Int_t i = 0; i < fNP; i++ ) {
      if (id == kFIX*fNP+i) {
         if (on) {
            if (fParVal[i]->GetNumber() != 0) {
               fParMin[i]->SetNumber(fParVal[i]->GetNumber());
               fParMin[i]->SetEnabled(kFALSE);
               fParMax[i]->SetNumber(fParVal[i]->GetNumber());
               fParMax[i]->SetEnabled(kFALSE);
            } else {
               fParMin[i]->SetNumber(1.);
               fParMin[i]->SetEnabled(kFALSE);
               fParMax[i]->SetNumber(1.);
               fParMax[i]->SetEnabled(kFALSE);
            }
            fParVal[i]->SetState(kFALSE);
            fParSld[i]->Disconnect("PointerPositionChanged()");
            fParSld[i]->Disconnect("PositionChanged()");
            fParSld[i]->UnmapWindow();
            fFunc->FixParameter(i, fParVal[i]->GetNumber());
         } else if (!fParMin[i]->IsEnabled()) {
            if (fPmin[i] != fPmax[i]) {
               if (fPmin[i])
                  fParMin[i]->SetNumber(fPmin[i]);
               else if (fPerr[i])
                  fParMin[i]->SetNumber(fPval[i]-3*fPerr[i]);
               else if (fPval[i])
                  fParMin[i]->SetNumber(fPval[i]-0.1*fPval[i]);
               else
                  fParMin[i]->SetNumber(1.0);
               if (fPmax[i])
                  fParMax[i]->SetNumber(fPmax[i]);
               else if (fPerr[i])
                  fParMax[i]->SetNumber(fPval[i]+3*fPerr[i]);
               else if (fPval[i])
                  fParMax[i]->SetNumber(fPval[i]+0.1*fPval[i]);
               else
                  fParMax[i]->SetNumber(1.0);
            } else if (fPval[i]) {
               fParMin[i]->SetNumber(fPval[i]-0.1*fPval[i]);
               fParMax[i]->SetNumber(fPval[i]+0.1*fPval[i]);
            } else {
               fParMin[i]->SetNumber(1.0);
               fParMax[i]->SetNumber(1.0);
            }
            if (fParMax[i]->GetNumber() < fParMin[i]->GetNumber()){
               Double_t temp;
               temp = fParMax[i]->GetNumber();
               fParMax[i]->SetNumber(fParMin[i]->GetNumber());
               fParMin[i]->SetNumber(temp);
            }
            fParMax[i]->SetEnabled(kTRUE);
            fParMin[i]->SetEnabled(kTRUE);
            fParSld[i]->MapWindow();
            fParVal[i]->SetState(kTRUE);
            fParSld[i]->SetRange(fParMin[i]->GetNumber(), fParMax[i]->GetNumber());
            fParSld[i]->SetPosition(fParMin[i]->GetNumber(), fParMax[i]->GetNumber());
            fParSld[i]->SetPointerPosition(fPval[i]);
            fParSld[i]->Connect("PointerPositionChanged()", "TFunctionParametersDialog",
                                this, "DoSlider()");
            fParSld[i]->Connect("PositionChanged()", "TFunctionParametersDialog",
                                this, "DoSlider()");
            fFunc->SetParLimits(i, fParMin[i]->GetNumber(), fParMax[i]->GetNumber());
         }
      }
   }
   if (fUpdate->GetState() == kButtonDown)
      RedrawFunction();
   else if ((fApply->GetState() == kButtonDisabled) && fHasChanges)
      fApply->SetState(kButtonUp);
}

//______________________________________________________________________________
void TFunctionParametersDialog::DoOK()
{
   // Slot related to the OK button.

   if (fHasChanges)
      RedrawFunction();
   fFunc->SetRange(fRangexmin, fRangexmax);
   TTimer::SingleShot(50, "TFunctionParametersDialog", this, "CloseWindow()");
}

//______________________________________________________________________________
void TFunctionParametersDialog::DoApply()
{
   // Slot related to the Preview button.

   RedrawFunction();
   fApply->SetState(kButtonDisabled);
   if (fReset->GetState() == kButtonDisabled)
      fReset->SetState(kButtonUp);
}

//______________________________________________________________________________
void TFunctionParametersDialog::DoReset()
{
   // Slot related to the Reset button.

   fHasChanges = kTRUE;
   Int_t k = fNP;
   for (Int_t i = 0; i < fNP; i++) {
      if (fParVal[i]->GetNumber() == fPval[i])
         k--;
      else
         break;
   }

   if (!k) {
      if (fReset->GetState() == kButtonUp)
         fReset->SetState(kButtonDisabled);
      fHasChanges = kFALSE;
      return;
   }
   for (Int_t i = 0; i < fNP; i++) {
      fFunc->SetParameter(i, fPval[i]);
      fFunc->SetParLimits(i, fPmin[i], fPmax[i]);
      fFunc->SetParError(i, fPerr[i]);

      if (fPmin[i])
         fParMin[i]->SetNumber(fPmin[i]);
      else if (fPerr[i])
         fParMin[i]->SetNumber(fPval[i]-3*fPerr[i]);
      else if (fPval[i])
         fParMin[i]->SetNumber(fPval[i]-0.1*fPval[i]);
      else
         fParMin[i]->SetNumber(1.0);

      if (fPmax[i])
         fParMax[i]->SetNumber(fPmax[i]);
      else if (fPerr[i])
         fParMax[i]->SetNumber(fPval[i]+3*fPerr[i]);
      else if (fPval[i])
         fParMax[i]->SetNumber(fPval[i]+0.1*fPval[i]);
      else
         fParMax[i]->SetNumber(1.0);
      if (fParMax[i]->GetNumber() < fParMin[i]->GetNumber()){
         Double_t temp;
         temp = fParMax[i]->GetNumber();
         fParMax[i]->SetNumber(fParMin[i]->GetNumber());
         fParMin[i]->SetNumber(temp);
      }
      if (fParMin[i]->GetNumber() == fParMax[i]->GetNumber()) {
         fParVal[i]->SetState(kFALSE);
         fParMin[i]->SetEnabled(kFALSE);
         fParMax[i]->SetEnabled(kFALSE);
         fParSld[i]->Disconnect("PointerPositionChanged()");
         fParSld[i]->Disconnect("PositionChanged()");
         fParSld[i]->UnmapWindow();
         fFunc->FixParameter(i, fParVal[i]->GetNumber());
         fParFix[i]->SetState(kButtonDown);
      } else {
         fParFix[i]->SetState(kButtonUp);
         if (!fParMax[i]->IsEnabled()) {
            fParMax[i]->SetEnabled(kTRUE);
            fParMin[i]->SetEnabled(kTRUE);
            fParVal[i]->SetState(kTRUE);
            fParSld[i]->SetRange(fParMin[i]->GetNumber(), fParMax[i]->GetNumber());
            fParSld[i]->SetPosition(fParMin[i]->GetNumber(), fParMax[i]->GetNumber());
            fParSld[i]->SetPointerPosition(fPval[i]);
            fParSld[i]->MapWindow();
            fParSld[i]->Connect("PointerPositionChanged()", "TFunctionParametersDialog",
                                this, "DoSlider()");
            fParSld[i]->Connect("PositionChanged()", "TFunctionParametersDialog",
                                this, "DoSlider()");
         }
      }
      fParVal[i]->SetNumber(fPval[i]);

      fParSld[i]->SetRange(fParMin[i]->GetNumber(), fParMax[i]->GetNumber());
      fParSld[i]->SetPosition(fParMin[i]->GetNumber(), fParMax[i]->GetNumber());
      fParSld[i]->SetPointerPosition(fPval[i]);
   }

   if (fUpdate->GetState() == kButtonDown)
      RedrawFunction();
   else if ((fApply->GetState() == kButtonDisabled) && fHasChanges)
      fApply->SetState(kButtonUp);
   fHasChanges = kFALSE;
   fReset->SetState(kButtonDisabled);
}

//______________________________________________________________________________
void TFunctionParametersDialog::DoSlider()
{
   // Slot related to the parameters' value settings.

   TGTripleHSlider *sl = (TGTripleHSlider *) gTQSender;
   Int_t id = sl->WidgetId();

   fHasChanges = kTRUE;
   for (Int_t i = 0; i < fNP; i++ ) {
      if (id == kSLD*fNP+i) {
         fFunc->SetParameter(i,fParSld[i]->GetPointerPosition());
         fFunc->SetParLimits(i,fParSld[i]->GetMinPosition(),
                               fParSld[i]->GetMaxPosition());
         fParMin[i]->SetNumber(fParSld[i]->GetMinPosition());
         fParMax[i]->SetNumber(fParSld[i]->GetMaxPosition());
         fParVal[i]->SetNumber(fParSld[i]->GetPointerPosition());
      }
   }
   if (fUpdate->GetState() == kButtonDown)
      RedrawFunction();
   else if ((fApply->GetState() == kButtonDisabled) && fHasChanges)
      fApply->SetState(kButtonUp);
   if (fReset->GetState() == kButtonDisabled)
      fReset->SetState(kButtonUp);
}

//______________________________________________________________________________
void TFunctionParametersDialog::DoParValue()
{
   // Slot related to the parameter value settings.

   TGNumberEntry *ne = (TGNumberEntry *) gTQSender;
   Int_t id = ne->WidgetId();

   for (Int_t i = 0; i < fNP; i++ ) {
      if (id == kVAL*fNP+i)  {
         fParSld[i]->SetPointerPosition(fParVal[i]->GetNumber());
         if (fParVal[i]->GetNumber() < fParMin[i]->GetNumber()) {
            fParMin[i]->SetNumber(fParVal[i]->GetNumber());
            fClient->NeedRedraw(fParMin[i]);
            fParSld[i]->SetRange(fParMin[i]->GetNumber(),
                                 fParMax[i]->GetNumber());
            fParSld[i]->SetPosition(fParMin[i]->GetNumber(),
                                    fParMax[i]->GetNumber());
         }
         if (fParVal[i]->GetNumber() > fParMax[i]->GetNumber()) {
            fParMax[i]->SetNumber(fParVal[i]->GetNumber());
            fClient->NeedRedraw(fParMax[i]);
            fParSld[i]->SetRange(fParMin[i]->GetNumber(),
                                 fParMax[i]->GetNumber());
            fParSld[i]->SetPosition(fParMin[i]->GetNumber(),
                                    fParMax[i]->GetNumber());
         }
         fClient->NeedRedraw(fParSld[i]);
         fFunc->SetParameter(i,fParSld[i]->GetPointerPosition());
         fFunc->SetParLimits(i,fParSld[i]->GetMinPosition(),
                               fParSld[i]->GetMaxPosition());
      }
   }
   fHasChanges = kTRUE;
   if (fUpdate->GetState() == kButtonDown)
      RedrawFunction();
   else if ((fApply->GetState() == kButtonDisabled) && fHasChanges)
      fApply->SetState(kButtonUp);
   if (fReset->GetState() == kButtonDisabled)
      fReset->SetState(kButtonUp);
}

//______________________________________________________________________________
void TFunctionParametersDialog::DoParMinLimit()
{
   // Slot related to the minumum parameter limit settings.

   TGNumberEntryField *ne = (TGNumberEntryField *) gTQSender;
   Int_t id = ne->WidgetId();

   for (Int_t i = 0; i < fNP; i++ ) {
      if (id == kMIN*fNP+i) {
         if (fParMin[i]->GetNumber() > fParMax[i]->GetNumber()) {
            Int_t ret;
            const char *txt;
            txt = "The lower parameter bound cannot be bigger then the upper one.";
            new TGMsgBox(fClient->GetRoot(), GetMainFrame(),
                         "Parameter Limits", txt, kMBIconExclamation,kMBOk,&ret);
            fParMin[i]->SetNumber(fParVal[i]->GetNumber());
            return;
         }
         fParSld[i]->SetRange(fParMin[i]->GetNumber(),
                              fParMax[i]->GetNumber());
         fParSld[i]->SetPosition(fParMin[i]->GetNumber(),
                                 fParMax[i]->GetNumber());
         fParSld[i]->SetPointerPosition(fParVal[i]->GetNumber());
         fClient->NeedRedraw(fParSld[i]);
      }
   }
   fHasChanges = kTRUE;
   if (fUpdate->GetState() == kButtonDown)
      RedrawFunction();
   else if ((fApply->GetState() == kButtonDisabled) && fHasChanges)
      fApply->SetState(kButtonUp);
   if (fReset->GetState() == kButtonDisabled)
      fReset->SetState(kButtonUp);
}

//______________________________________________________________________________
void TFunctionParametersDialog::DoParMaxLimit()
{
   // Slot related to the maximum parameter limit settings.

   TGNumberEntryField *ne = (TGNumberEntryField *) gTQSender;
   Int_t id = ne->WidgetId();

   for (Int_t i = 0; i < fNP; i++ ) {
      if (id == kMAX*fNP+i) {
         if (fParMin[i]->GetNumber() > fParMax[i]->GetNumber()) {
            Int_t ret;
            const char *txt;
            txt = "The lower parameter bound cannot be bigger then the upper one.";
            new TGMsgBox(fClient->GetRoot(), GetMainFrame(),
                         "Parameter Limits", txt, kMBIconExclamation,kMBOk,&ret);
            fParMax[i]->SetNumber(fParVal[i]->GetNumber());
            return;
         }
         fParSld[i]->SetRange(fParMin[i]->GetNumber(),
                              fParMax[i]->GetNumber());
         fParSld[i]->SetPosition(fParMin[i]->GetNumber(),
                                 fParMax[i]->GetNumber());
         fParSld[i]->SetPointerPosition(fParVal[i]->GetNumber());
         fClient->NeedRedraw(fParSld[i]);
      }
   }
   fHasChanges = kTRUE;
   if (fUpdate->GetState() == kButtonDown)
      RedrawFunction();
   else if ((fApply->GetState() == kButtonDisabled) && fHasChanges)
      fApply->SetState(kButtonUp);
   if (fReset->GetState() == kButtonDisabled)
      fReset->SetState(kButtonUp);
}

//______________________________________________________________________________
void TFunctionParametersDialog::RedrawFunction()
{
   // Redraw function graphics.

   TString opt = fFunc->GetDrawOption();
   opt.ToUpper();
   if (!opt.Contains("SAME"))
      opt += "SAME";
   fFunc->SetRange(fRXmin, fRXmax);
   fFunc->Draw(opt);
   fFpad->Modified();
   fFpad->Update();
   fHasChanges = kFALSE;
}

//______________________________________________________________________________
void TFunctionParametersDialog::HandleButtons(Bool_t update)
{
   // Handle the button dependent states in this dialog.

   if (update && fHasChanges)
      RedrawFunction();
   else if ((fApply->GetState() == kButtonDisabled) && fHasChanges) {
      fApply->SetState(kButtonUp);
   }
}
 TFunctionParametersDialog.cxx:1
 TFunctionParametersDialog.cxx:2
 TFunctionParametersDialog.cxx:3
 TFunctionParametersDialog.cxx:4
 TFunctionParametersDialog.cxx:5
 TFunctionParametersDialog.cxx:6
 TFunctionParametersDialog.cxx:7
 TFunctionParametersDialog.cxx:8
 TFunctionParametersDialog.cxx:9
 TFunctionParametersDialog.cxx:10
 TFunctionParametersDialog.cxx:11
 TFunctionParametersDialog.cxx:12
 TFunctionParametersDialog.cxx:13
 TFunctionParametersDialog.cxx:14
 TFunctionParametersDialog.cxx:15
 TFunctionParametersDialog.cxx:16
 TFunctionParametersDialog.cxx:17
 TFunctionParametersDialog.cxx:18
 TFunctionParametersDialog.cxx:19
 TFunctionParametersDialog.cxx:20
 TFunctionParametersDialog.cxx:21
 TFunctionParametersDialog.cxx:22
 TFunctionParametersDialog.cxx:23
 TFunctionParametersDialog.cxx:24
 TFunctionParametersDialog.cxx:25
 TFunctionParametersDialog.cxx:26
 TFunctionParametersDialog.cxx:27
 TFunctionParametersDialog.cxx:28
 TFunctionParametersDialog.cxx:29
 TFunctionParametersDialog.cxx:30
 TFunctionParametersDialog.cxx:31
 TFunctionParametersDialog.cxx:32
 TFunctionParametersDialog.cxx:33
 TFunctionParametersDialog.cxx:34
 TFunctionParametersDialog.cxx:35
 TFunctionParametersDialog.cxx:36
 TFunctionParametersDialog.cxx:37
 TFunctionParametersDialog.cxx:38
 TFunctionParametersDialog.cxx:39
 TFunctionParametersDialog.cxx:40
 TFunctionParametersDialog.cxx:41
 TFunctionParametersDialog.cxx:42
 TFunctionParametersDialog.cxx:43
 TFunctionParametersDialog.cxx:44
 TFunctionParametersDialog.cxx:45
 TFunctionParametersDialog.cxx:46
 TFunctionParametersDialog.cxx:47
 TFunctionParametersDialog.cxx:48
 TFunctionParametersDialog.cxx:49
 TFunctionParametersDialog.cxx:50
 TFunctionParametersDialog.cxx:51
 TFunctionParametersDialog.cxx:52
 TFunctionParametersDialog.cxx:53
 TFunctionParametersDialog.cxx:54
 TFunctionParametersDialog.cxx:55
 TFunctionParametersDialog.cxx:56
 TFunctionParametersDialog.cxx:57
 TFunctionParametersDialog.cxx:58
 TFunctionParametersDialog.cxx:59
 TFunctionParametersDialog.cxx:60
 TFunctionParametersDialog.cxx:61
 TFunctionParametersDialog.cxx:62
 TFunctionParametersDialog.cxx:63
 TFunctionParametersDialog.cxx:64
 TFunctionParametersDialog.cxx:65
 TFunctionParametersDialog.cxx:66
 TFunctionParametersDialog.cxx:67
 TFunctionParametersDialog.cxx:68
 TFunctionParametersDialog.cxx:69
 TFunctionParametersDialog.cxx:70
 TFunctionParametersDialog.cxx:71
 TFunctionParametersDialog.cxx:72
 TFunctionParametersDialog.cxx:73
 TFunctionParametersDialog.cxx:74
 TFunctionParametersDialog.cxx:75
 TFunctionParametersDialog.cxx:76
 TFunctionParametersDialog.cxx:77
 TFunctionParametersDialog.cxx:78
 TFunctionParametersDialog.cxx:79
 TFunctionParametersDialog.cxx:80
 TFunctionParametersDialog.cxx:81
 TFunctionParametersDialog.cxx:82
 TFunctionParametersDialog.cxx:83
 TFunctionParametersDialog.cxx:84
 TFunctionParametersDialog.cxx:85
 TFunctionParametersDialog.cxx:86
 TFunctionParametersDialog.cxx:87
 TFunctionParametersDialog.cxx:88
 TFunctionParametersDialog.cxx:89
 TFunctionParametersDialog.cxx:90
 TFunctionParametersDialog.cxx:91
 TFunctionParametersDialog.cxx:92
 TFunctionParametersDialog.cxx:93
 TFunctionParametersDialog.cxx:94
 TFunctionParametersDialog.cxx:95
 TFunctionParametersDialog.cxx:96
 TFunctionParametersDialog.cxx:97
 TFunctionParametersDialog.cxx:98
 TFunctionParametersDialog.cxx:99
 TFunctionParametersDialog.cxx:100
 TFunctionParametersDialog.cxx:101
 TFunctionParametersDialog.cxx:102
 TFunctionParametersDialog.cxx:103
 TFunctionParametersDialog.cxx:104
 TFunctionParametersDialog.cxx:105
 TFunctionParametersDialog.cxx:106
 TFunctionParametersDialog.cxx:107
 TFunctionParametersDialog.cxx:108
 TFunctionParametersDialog.cxx:109
 TFunctionParametersDialog.cxx:110
 TFunctionParametersDialog.cxx:111
 TFunctionParametersDialog.cxx:112
 TFunctionParametersDialog.cxx:113
 TFunctionParametersDialog.cxx:114
 TFunctionParametersDialog.cxx:115
 TFunctionParametersDialog.cxx:116
 TFunctionParametersDialog.cxx:117
 TFunctionParametersDialog.cxx:118
 TFunctionParametersDialog.cxx:119
 TFunctionParametersDialog.cxx:120
 TFunctionParametersDialog.cxx:121
 TFunctionParametersDialog.cxx:122
 TFunctionParametersDialog.cxx:123
 TFunctionParametersDialog.cxx:124
 TFunctionParametersDialog.cxx:125
 TFunctionParametersDialog.cxx:126
 TFunctionParametersDialog.cxx:127
 TFunctionParametersDialog.cxx:128
 TFunctionParametersDialog.cxx:129
 TFunctionParametersDialog.cxx:130
 TFunctionParametersDialog.cxx:131
 TFunctionParametersDialog.cxx:132
 TFunctionParametersDialog.cxx:133
 TFunctionParametersDialog.cxx:134
 TFunctionParametersDialog.cxx:135
 TFunctionParametersDialog.cxx:136
 TFunctionParametersDialog.cxx:137
 TFunctionParametersDialog.cxx:138
 TFunctionParametersDialog.cxx:139
 TFunctionParametersDialog.cxx:140
 TFunctionParametersDialog.cxx:141
 TFunctionParametersDialog.cxx:142
 TFunctionParametersDialog.cxx:143
 TFunctionParametersDialog.cxx:144
 TFunctionParametersDialog.cxx:145
 TFunctionParametersDialog.cxx:146
 TFunctionParametersDialog.cxx:147
 TFunctionParametersDialog.cxx:148
 TFunctionParametersDialog.cxx:149
 TFunctionParametersDialog.cxx:150
 TFunctionParametersDialog.cxx:151
 TFunctionParametersDialog.cxx:152
 TFunctionParametersDialog.cxx:153
 TFunctionParametersDialog.cxx:154
 TFunctionParametersDialog.cxx:155
 TFunctionParametersDialog.cxx:156
 TFunctionParametersDialog.cxx:157
 TFunctionParametersDialog.cxx:158
 TFunctionParametersDialog.cxx:159
 TFunctionParametersDialog.cxx:160
 TFunctionParametersDialog.cxx:161
 TFunctionParametersDialog.cxx:162
 TFunctionParametersDialog.cxx:163
 TFunctionParametersDialog.cxx:164
 TFunctionParametersDialog.cxx:165
 TFunctionParametersDialog.cxx:166
 TFunctionParametersDialog.cxx:167
 TFunctionParametersDialog.cxx:168
 TFunctionParametersDialog.cxx:169
 TFunctionParametersDialog.cxx:170
 TFunctionParametersDialog.cxx:171
 TFunctionParametersDialog.cxx:172
 TFunctionParametersDialog.cxx:173
 TFunctionParametersDialog.cxx:174
 TFunctionParametersDialog.cxx:175
 TFunctionParametersDialog.cxx:176
 TFunctionParametersDialog.cxx:177
 TFunctionParametersDialog.cxx:178
 TFunctionParametersDialog.cxx:179
 TFunctionParametersDialog.cxx:180
 TFunctionParametersDialog.cxx:181
 TFunctionParametersDialog.cxx:182
 TFunctionParametersDialog.cxx:183
 TFunctionParametersDialog.cxx:184
 TFunctionParametersDialog.cxx:185
 TFunctionParametersDialog.cxx:186
 TFunctionParametersDialog.cxx:187
 TFunctionParametersDialog.cxx:188
 TFunctionParametersDialog.cxx:189
 TFunctionParametersDialog.cxx:190
 TFunctionParametersDialog.cxx:191
 TFunctionParametersDialog.cxx:192
 TFunctionParametersDialog.cxx:193
 TFunctionParametersDialog.cxx:194
 TFunctionParametersDialog.cxx:195
 TFunctionParametersDialog.cxx:196
 TFunctionParametersDialog.cxx:197
 TFunctionParametersDialog.cxx:198
 TFunctionParametersDialog.cxx:199
 TFunctionParametersDialog.cxx:200
 TFunctionParametersDialog.cxx:201
 TFunctionParametersDialog.cxx:202
 TFunctionParametersDialog.cxx:203
 TFunctionParametersDialog.cxx:204
 TFunctionParametersDialog.cxx:205
 TFunctionParametersDialog.cxx:206
 TFunctionParametersDialog.cxx:207
 TFunctionParametersDialog.cxx:208
 TFunctionParametersDialog.cxx:209
 TFunctionParametersDialog.cxx:210
 TFunctionParametersDialog.cxx:211
 TFunctionParametersDialog.cxx:212
 TFunctionParametersDialog.cxx:213
 TFunctionParametersDialog.cxx:214
 TFunctionParametersDialog.cxx:215
 TFunctionParametersDialog.cxx:216
 TFunctionParametersDialog.cxx:217
 TFunctionParametersDialog.cxx:218
 TFunctionParametersDialog.cxx:219
 TFunctionParametersDialog.cxx:220
 TFunctionParametersDialog.cxx:221
 TFunctionParametersDialog.cxx:222
 TFunctionParametersDialog.cxx:223
 TFunctionParametersDialog.cxx:224
 TFunctionParametersDialog.cxx:225
 TFunctionParametersDialog.cxx:226
 TFunctionParametersDialog.cxx:227
 TFunctionParametersDialog.cxx:228
 TFunctionParametersDialog.cxx:229
 TFunctionParametersDialog.cxx:230
 TFunctionParametersDialog.cxx:231
 TFunctionParametersDialog.cxx:232
 TFunctionParametersDialog.cxx:233
 TFunctionParametersDialog.cxx:234
 TFunctionParametersDialog.cxx:235
 TFunctionParametersDialog.cxx:236
 TFunctionParametersDialog.cxx:237
 TFunctionParametersDialog.cxx:238
 TFunctionParametersDialog.cxx:239
 TFunctionParametersDialog.cxx:240
 TFunctionParametersDialog.cxx:241
 TFunctionParametersDialog.cxx:242
 TFunctionParametersDialog.cxx:243
 TFunctionParametersDialog.cxx:244
 TFunctionParametersDialog.cxx:245
 TFunctionParametersDialog.cxx:246
 TFunctionParametersDialog.cxx:247
 TFunctionParametersDialog.cxx:248
 TFunctionParametersDialog.cxx:249
 TFunctionParametersDialog.cxx:250
 TFunctionParametersDialog.cxx:251
 TFunctionParametersDialog.cxx:252
 TFunctionParametersDialog.cxx:253
 TFunctionParametersDialog.cxx:254
 TFunctionParametersDialog.cxx:255
 TFunctionParametersDialog.cxx:256
 TFunctionParametersDialog.cxx:257
 TFunctionParametersDialog.cxx:258
 TFunctionParametersDialog.cxx:259
 TFunctionParametersDialog.cxx:260
 TFunctionParametersDialog.cxx:261
 TFunctionParametersDialog.cxx:262
 TFunctionParametersDialog.cxx:263
 TFunctionParametersDialog.cxx:264
 TFunctionParametersDialog.cxx:265
 TFunctionParametersDialog.cxx:266
 TFunctionParametersDialog.cxx:267
 TFunctionParametersDialog.cxx:268
 TFunctionParametersDialog.cxx:269
 TFunctionParametersDialog.cxx:270
 TFunctionParametersDialog.cxx:271
 TFunctionParametersDialog.cxx:272
 TFunctionParametersDialog.cxx:273
 TFunctionParametersDialog.cxx:274
 TFunctionParametersDialog.cxx:275
 TFunctionParametersDialog.cxx:276
 TFunctionParametersDialog.cxx:277
 TFunctionParametersDialog.cxx:278
 TFunctionParametersDialog.cxx:279
 TFunctionParametersDialog.cxx:280
 TFunctionParametersDialog.cxx:281
 TFunctionParametersDialog.cxx:282
 TFunctionParametersDialog.cxx:283
 TFunctionParametersDialog.cxx:284
 TFunctionParametersDialog.cxx:285
 TFunctionParametersDialog.cxx:286
 TFunctionParametersDialog.cxx:287
 TFunctionParametersDialog.cxx:288
 TFunctionParametersDialog.cxx:289
 TFunctionParametersDialog.cxx:290
 TFunctionParametersDialog.cxx:291
 TFunctionParametersDialog.cxx:292
 TFunctionParametersDialog.cxx:293
 TFunctionParametersDialog.cxx:294
 TFunctionParametersDialog.cxx:295
 TFunctionParametersDialog.cxx:296
 TFunctionParametersDialog.cxx:297
 TFunctionParametersDialog.cxx:298
 TFunctionParametersDialog.cxx:299
 TFunctionParametersDialog.cxx:300
 TFunctionParametersDialog.cxx:301
 TFunctionParametersDialog.cxx:302
 TFunctionParametersDialog.cxx:303
 TFunctionParametersDialog.cxx:304
 TFunctionParametersDialog.cxx:305
 TFunctionParametersDialog.cxx:306
 TFunctionParametersDialog.cxx:307
 TFunctionParametersDialog.cxx:308
 TFunctionParametersDialog.cxx:309
 TFunctionParametersDialog.cxx:310
 TFunctionParametersDialog.cxx:311
 TFunctionParametersDialog.cxx:312
 TFunctionParametersDialog.cxx:313
 TFunctionParametersDialog.cxx:314
 TFunctionParametersDialog.cxx:315
 TFunctionParametersDialog.cxx:316
 TFunctionParametersDialog.cxx:317
 TFunctionParametersDialog.cxx:318
 TFunctionParametersDialog.cxx:319
 TFunctionParametersDialog.cxx:320
 TFunctionParametersDialog.cxx:321
 TFunctionParametersDialog.cxx:322
 TFunctionParametersDialog.cxx:323
 TFunctionParametersDialog.cxx:324
 TFunctionParametersDialog.cxx:325
 TFunctionParametersDialog.cxx:326
 TFunctionParametersDialog.cxx:327
 TFunctionParametersDialog.cxx:328
 TFunctionParametersDialog.cxx:329
 TFunctionParametersDialog.cxx:330
 TFunctionParametersDialog.cxx:331
 TFunctionParametersDialog.cxx:332
 TFunctionParametersDialog.cxx:333
 TFunctionParametersDialog.cxx:334
 TFunctionParametersDialog.cxx:335
 TFunctionParametersDialog.cxx:336
 TFunctionParametersDialog.cxx:337
 TFunctionParametersDialog.cxx:338
 TFunctionParametersDialog.cxx:339
 TFunctionParametersDialog.cxx:340
 TFunctionParametersDialog.cxx:341
 TFunctionParametersDialog.cxx:342
 TFunctionParametersDialog.cxx:343
 TFunctionParametersDialog.cxx:344
 TFunctionParametersDialog.cxx:345
 TFunctionParametersDialog.cxx:346
 TFunctionParametersDialog.cxx:347
 TFunctionParametersDialog.cxx:348
 TFunctionParametersDialog.cxx:349
 TFunctionParametersDialog.cxx:350
 TFunctionParametersDialog.cxx:351
 TFunctionParametersDialog.cxx:352
 TFunctionParametersDialog.cxx:353
 TFunctionParametersDialog.cxx:354
 TFunctionParametersDialog.cxx:355
 TFunctionParametersDialog.cxx:356
 TFunctionParametersDialog.cxx:357
 TFunctionParametersDialog.cxx:358
 TFunctionParametersDialog.cxx:359
 TFunctionParametersDialog.cxx:360
 TFunctionParametersDialog.cxx:361
 TFunctionParametersDialog.cxx:362
 TFunctionParametersDialog.cxx:363
 TFunctionParametersDialog.cxx:364
 TFunctionParametersDialog.cxx:365
 TFunctionParametersDialog.cxx:366
 TFunctionParametersDialog.cxx:367
 TFunctionParametersDialog.cxx:368
 TFunctionParametersDialog.cxx:369
 TFunctionParametersDialog.cxx:370
 TFunctionParametersDialog.cxx:371
 TFunctionParametersDialog.cxx:372
 TFunctionParametersDialog.cxx:373
 TFunctionParametersDialog.cxx:374
 TFunctionParametersDialog.cxx:375
 TFunctionParametersDialog.cxx:376
 TFunctionParametersDialog.cxx:377
 TFunctionParametersDialog.cxx:378
 TFunctionParametersDialog.cxx:379
 TFunctionParametersDialog.cxx:380
 TFunctionParametersDialog.cxx:381
 TFunctionParametersDialog.cxx:382
 TFunctionParametersDialog.cxx:383
 TFunctionParametersDialog.cxx:384
 TFunctionParametersDialog.cxx:385
 TFunctionParametersDialog.cxx:386
 TFunctionParametersDialog.cxx:387
 TFunctionParametersDialog.cxx:388
 TFunctionParametersDialog.cxx:389
 TFunctionParametersDialog.cxx:390
 TFunctionParametersDialog.cxx:391
 TFunctionParametersDialog.cxx:392
 TFunctionParametersDialog.cxx:393
 TFunctionParametersDialog.cxx:394
 TFunctionParametersDialog.cxx:395
 TFunctionParametersDialog.cxx:396
 TFunctionParametersDialog.cxx:397
 TFunctionParametersDialog.cxx:398
 TFunctionParametersDialog.cxx:399
 TFunctionParametersDialog.cxx:400
 TFunctionParametersDialog.cxx:401
 TFunctionParametersDialog.cxx:402
 TFunctionParametersDialog.cxx:403
 TFunctionParametersDialog.cxx:404
 TFunctionParametersDialog.cxx:405
 TFunctionParametersDialog.cxx:406
 TFunctionParametersDialog.cxx:407
 TFunctionParametersDialog.cxx:408
 TFunctionParametersDialog.cxx:409
 TFunctionParametersDialog.cxx:410
 TFunctionParametersDialog.cxx:411
 TFunctionParametersDialog.cxx:412
 TFunctionParametersDialog.cxx:413
 TFunctionParametersDialog.cxx:414
 TFunctionParametersDialog.cxx:415
 TFunctionParametersDialog.cxx:416
 TFunctionParametersDialog.cxx:417
 TFunctionParametersDialog.cxx:418
 TFunctionParametersDialog.cxx:419
 TFunctionParametersDialog.cxx:420
 TFunctionParametersDialog.cxx:421
 TFunctionParametersDialog.cxx:422
 TFunctionParametersDialog.cxx:423
 TFunctionParametersDialog.cxx:424
 TFunctionParametersDialog.cxx:425
 TFunctionParametersDialog.cxx:426
 TFunctionParametersDialog.cxx:427
 TFunctionParametersDialog.cxx:428
 TFunctionParametersDialog.cxx:429
 TFunctionParametersDialog.cxx:430
 TFunctionParametersDialog.cxx:431
 TFunctionParametersDialog.cxx:432
 TFunctionParametersDialog.cxx:433
 TFunctionParametersDialog.cxx:434
 TFunctionParametersDialog.cxx:435
 TFunctionParametersDialog.cxx:436
 TFunctionParametersDialog.cxx:437
 TFunctionParametersDialog.cxx:438
 TFunctionParametersDialog.cxx:439
 TFunctionParametersDialog.cxx:440
 TFunctionParametersDialog.cxx:441
 TFunctionParametersDialog.cxx:442
 TFunctionParametersDialog.cxx:443
 TFunctionParametersDialog.cxx:444
 TFunctionParametersDialog.cxx:445
 TFunctionParametersDialog.cxx:446
 TFunctionParametersDialog.cxx:447
 TFunctionParametersDialog.cxx:448
 TFunctionParametersDialog.cxx:449
 TFunctionParametersDialog.cxx:450
 TFunctionParametersDialog.cxx:451
 TFunctionParametersDialog.cxx:452
 TFunctionParametersDialog.cxx:453
 TFunctionParametersDialog.cxx:454
 TFunctionParametersDialog.cxx:455
 TFunctionParametersDialog.cxx:456
 TFunctionParametersDialog.cxx:457
 TFunctionParametersDialog.cxx:458
 TFunctionParametersDialog.cxx:459
 TFunctionParametersDialog.cxx:460
 TFunctionParametersDialog.cxx:461
 TFunctionParametersDialog.cxx:462
 TFunctionParametersDialog.cxx:463
 TFunctionParametersDialog.cxx:464
 TFunctionParametersDialog.cxx:465
 TFunctionParametersDialog.cxx:466
 TFunctionParametersDialog.cxx:467
 TFunctionParametersDialog.cxx:468
 TFunctionParametersDialog.cxx:469
 TFunctionParametersDialog.cxx:470
 TFunctionParametersDialog.cxx:471
 TFunctionParametersDialog.cxx:472
 TFunctionParametersDialog.cxx:473
 TFunctionParametersDialog.cxx:474
 TFunctionParametersDialog.cxx:475
 TFunctionParametersDialog.cxx:476
 TFunctionParametersDialog.cxx:477
 TFunctionParametersDialog.cxx:478
 TFunctionParametersDialog.cxx:479
 TFunctionParametersDialog.cxx:480
 TFunctionParametersDialog.cxx:481
 TFunctionParametersDialog.cxx:482
 TFunctionParametersDialog.cxx:483
 TFunctionParametersDialog.cxx:484
 TFunctionParametersDialog.cxx:485
 TFunctionParametersDialog.cxx:486
 TFunctionParametersDialog.cxx:487
 TFunctionParametersDialog.cxx:488
 TFunctionParametersDialog.cxx:489
 TFunctionParametersDialog.cxx:490
 TFunctionParametersDialog.cxx:491
 TFunctionParametersDialog.cxx:492
 TFunctionParametersDialog.cxx:493
 TFunctionParametersDialog.cxx:494
 TFunctionParametersDialog.cxx:495
 TFunctionParametersDialog.cxx:496
 TFunctionParametersDialog.cxx:497
 TFunctionParametersDialog.cxx:498
 TFunctionParametersDialog.cxx:499
 TFunctionParametersDialog.cxx:500
 TFunctionParametersDialog.cxx:501
 TFunctionParametersDialog.cxx:502
 TFunctionParametersDialog.cxx:503
 TFunctionParametersDialog.cxx:504
 TFunctionParametersDialog.cxx:505
 TFunctionParametersDialog.cxx:506
 TFunctionParametersDialog.cxx:507
 TFunctionParametersDialog.cxx:508
 TFunctionParametersDialog.cxx:509
 TFunctionParametersDialog.cxx:510
 TFunctionParametersDialog.cxx:511
 TFunctionParametersDialog.cxx:512
 TFunctionParametersDialog.cxx:513
 TFunctionParametersDialog.cxx:514
 TFunctionParametersDialog.cxx:515
 TFunctionParametersDialog.cxx:516
 TFunctionParametersDialog.cxx:517
 TFunctionParametersDialog.cxx:518
 TFunctionParametersDialog.cxx:519
 TFunctionParametersDialog.cxx:520
 TFunctionParametersDialog.cxx:521
 TFunctionParametersDialog.cxx:522
 TFunctionParametersDialog.cxx:523
 TFunctionParametersDialog.cxx:524
 TFunctionParametersDialog.cxx:525
 TFunctionParametersDialog.cxx:526
 TFunctionParametersDialog.cxx:527
 TFunctionParametersDialog.cxx:528
 TFunctionParametersDialog.cxx:529
 TFunctionParametersDialog.cxx:530
 TFunctionParametersDialog.cxx:531
 TFunctionParametersDialog.cxx:532
 TFunctionParametersDialog.cxx:533
 TFunctionParametersDialog.cxx:534
 TFunctionParametersDialog.cxx:535
 TFunctionParametersDialog.cxx:536
 TFunctionParametersDialog.cxx:537
 TFunctionParametersDialog.cxx:538
 TFunctionParametersDialog.cxx:539
 TFunctionParametersDialog.cxx:540
 TFunctionParametersDialog.cxx:541
 TFunctionParametersDialog.cxx:542
 TFunctionParametersDialog.cxx:543
 TFunctionParametersDialog.cxx:544
 TFunctionParametersDialog.cxx:545
 TFunctionParametersDialog.cxx:546
 TFunctionParametersDialog.cxx:547
 TFunctionParametersDialog.cxx:548
 TFunctionParametersDialog.cxx:549
 TFunctionParametersDialog.cxx:550
 TFunctionParametersDialog.cxx:551
 TFunctionParametersDialog.cxx:552
 TFunctionParametersDialog.cxx:553
 TFunctionParametersDialog.cxx:554
 TFunctionParametersDialog.cxx:555
 TFunctionParametersDialog.cxx:556
 TFunctionParametersDialog.cxx:557
 TFunctionParametersDialog.cxx:558
 TFunctionParametersDialog.cxx:559
 TFunctionParametersDialog.cxx:560
 TFunctionParametersDialog.cxx:561
 TFunctionParametersDialog.cxx:562
 TFunctionParametersDialog.cxx:563
 TFunctionParametersDialog.cxx:564
 TFunctionParametersDialog.cxx:565
 TFunctionParametersDialog.cxx:566
 TFunctionParametersDialog.cxx:567
 TFunctionParametersDialog.cxx:568
 TFunctionParametersDialog.cxx:569
 TFunctionParametersDialog.cxx:570
 TFunctionParametersDialog.cxx:571
 TFunctionParametersDialog.cxx:572
 TFunctionParametersDialog.cxx:573
 TFunctionParametersDialog.cxx:574
 TFunctionParametersDialog.cxx:575
 TFunctionParametersDialog.cxx:576
 TFunctionParametersDialog.cxx:577
 TFunctionParametersDialog.cxx:578
 TFunctionParametersDialog.cxx:579
 TFunctionParametersDialog.cxx:580
 TFunctionParametersDialog.cxx:581
 TFunctionParametersDialog.cxx:582
 TFunctionParametersDialog.cxx:583
 TFunctionParametersDialog.cxx:584
 TFunctionParametersDialog.cxx:585
 TFunctionParametersDialog.cxx:586
 TFunctionParametersDialog.cxx:587
 TFunctionParametersDialog.cxx:588
 TFunctionParametersDialog.cxx:589
 TFunctionParametersDialog.cxx:590
 TFunctionParametersDialog.cxx:591
 TFunctionParametersDialog.cxx:592
 TFunctionParametersDialog.cxx:593
 TFunctionParametersDialog.cxx:594
 TFunctionParametersDialog.cxx:595
 TFunctionParametersDialog.cxx:596
 TFunctionParametersDialog.cxx:597
 TFunctionParametersDialog.cxx:598
 TFunctionParametersDialog.cxx:599
 TFunctionParametersDialog.cxx:600
 TFunctionParametersDialog.cxx:601
 TFunctionParametersDialog.cxx:602
 TFunctionParametersDialog.cxx:603
 TFunctionParametersDialog.cxx:604
 TFunctionParametersDialog.cxx:605
 TFunctionParametersDialog.cxx:606
 TFunctionParametersDialog.cxx:607
 TFunctionParametersDialog.cxx:608
 TFunctionParametersDialog.cxx:609
 TFunctionParametersDialog.cxx:610
 TFunctionParametersDialog.cxx:611
 TFunctionParametersDialog.cxx:612
 TFunctionParametersDialog.cxx:613
 TFunctionParametersDialog.cxx:614
 TFunctionParametersDialog.cxx:615
 TFunctionParametersDialog.cxx:616
 TFunctionParametersDialog.cxx:617
 TFunctionParametersDialog.cxx:618
 TFunctionParametersDialog.cxx:619
 TFunctionParametersDialog.cxx:620
 TFunctionParametersDialog.cxx:621
 TFunctionParametersDialog.cxx:622
 TFunctionParametersDialog.cxx:623
 TFunctionParametersDialog.cxx:624
 TFunctionParametersDialog.cxx:625
 TFunctionParametersDialog.cxx:626
 TFunctionParametersDialog.cxx:627
 TFunctionParametersDialog.cxx:628
 TFunctionParametersDialog.cxx:629
 TFunctionParametersDialog.cxx:630
 TFunctionParametersDialog.cxx:631
 TFunctionParametersDialog.cxx:632
 TFunctionParametersDialog.cxx:633
 TFunctionParametersDialog.cxx:634
 TFunctionParametersDialog.cxx:635
 TFunctionParametersDialog.cxx:636
 TFunctionParametersDialog.cxx:637
 TFunctionParametersDialog.cxx:638
 TFunctionParametersDialog.cxx:639
 TFunctionParametersDialog.cxx:640
 TFunctionParametersDialog.cxx:641
 TFunctionParametersDialog.cxx:642
 TFunctionParametersDialog.cxx:643
 TFunctionParametersDialog.cxx:644
 TFunctionParametersDialog.cxx:645
 TFunctionParametersDialog.cxx:646
 TFunctionParametersDialog.cxx:647
 TFunctionParametersDialog.cxx:648
 TFunctionParametersDialog.cxx:649
 TFunctionParametersDialog.cxx:650
 TFunctionParametersDialog.cxx:651
 TFunctionParametersDialog.cxx:652
 TFunctionParametersDialog.cxx:653
 TFunctionParametersDialog.cxx:654
 TFunctionParametersDialog.cxx:655
 TFunctionParametersDialog.cxx:656
 TFunctionParametersDialog.cxx:657
 TFunctionParametersDialog.cxx:658
 TFunctionParametersDialog.cxx:659
 TFunctionParametersDialog.cxx:660
 TFunctionParametersDialog.cxx:661
 TFunctionParametersDialog.cxx:662
 TFunctionParametersDialog.cxx:663
 TFunctionParametersDialog.cxx:664
 TFunctionParametersDialog.cxx:665
 TFunctionParametersDialog.cxx:666
 TFunctionParametersDialog.cxx:667
 TFunctionParametersDialog.cxx:668
 TFunctionParametersDialog.cxx:669
 TFunctionParametersDialog.cxx:670
 TFunctionParametersDialog.cxx:671
 TFunctionParametersDialog.cxx:672
 TFunctionParametersDialog.cxx:673
 TFunctionParametersDialog.cxx:674
 TFunctionParametersDialog.cxx:675
 TFunctionParametersDialog.cxx:676
 TFunctionParametersDialog.cxx:677
 TFunctionParametersDialog.cxx:678
 TFunctionParametersDialog.cxx:679