40 typedef TGL5DPainter::SurfIter_t    SurfIter_t;
 
   41 typedef std::map<Int_t, SurfIter_t> IterMap_t;
 
   42 typedef IterMap_t::iterator         IterMapIter_t;
 
   49 class TGL5DDataSetEditor::TGL5DEditorPrivate {
 
   52    Bool_t IsValid(Int_t index)
const 
   54       return fIterators.find(index) != fIterators.end();
 
   58 ClassImp(TGL5DDataSetEditor);
 
   62 TGL5DDataSetEditor::TGL5DDataSetEditor(
const TGWindow *p,  Int_t width, Int_t height,
 
   63                                        UInt_t options, Pixel_t back) :
 
   64    TGedFrame(p,  width, height, options | kVerticalFrame, back),
 
  111    fHidden = 
new TGL5DEditorPrivate;
 
  116 TGL5DDataSetEditor::~TGL5DDataSetEditor()
 
  125 void TGL5DDataSetEditor::ConnectSignals2Slots()
 
  128    fShowBoxCut->Connect(
"Toggled(Bool_t)", 
"TGL5DDataSetEditor", 
this, 
"BoxCutToggled()");
 
  129    fAlpha->Connect(
"ValueChanged(Long_t)", 
"TGL5DDataSetEditor", 
this, 
"AlphaChanged()");
 
  130    fAlpha->Connect(
"ValueSet(Long_t)", 
"TGL5DDataSetEditor", 
this, 
"AlphaChanged()");
 
  131    fNumberOfPlanes->Connect(
"ValueChanged(Long_t)", 
"TGL5DDataSetEditor", 
this, 
"NContoursChanged()");
 
  132    fNumberOfPlanes->Connect(
"ValueSet(Long_t)", 
"TGL5DDataSetEditor", 
this, 
"NContoursChanged()");
 
  133    fApplyPlanes->Connect(
"Clicked()", 
"TGL5DDataSetEditor", 
this, 
"ApplyPlanes()");
 
  134    fApplyAlpha->Connect(
"Clicked()", 
"TGL5DDataSetEditor", 
this, 
"ApplyAlpha()");
 
  137    fNCellsXEntry->Connect(
"ValueSet(Long_t)", 
"TGL5DDataSetEditor", 
this, 
"GridParametersChanged()");
 
  138    fNCellsXEntry->Connect(
"ValueChanged(Long_t)", 
"TGL5DDataSetEditor", 
this, 
"GridParametersChanged()");
 
  140    fNCellsYEntry->Connect(
"ValueSet(Long_t)", 
"TGL5DDataSetEditor", 
this, 
"GridParametersChanged()");
 
  141    fNCellsZEntry->Connect(
"ValueSet(Long_t)", 
"TGL5DDataSetEditor", 
this, 
"GridParametersChanged()");
 
  143    fXRangeSlider->Connect(
"PositionChanged()", 
"TGL5DDataSetEditor", 
this, 
"XSliderChanged()");
 
  144    fXRangeSliderMin->Connect(
"ReturnPressed()", 
"TGL5DDataSetEditor", 
this, 
"XSliderSetMin()");
 
  145    fXRangeSliderMax->Connect(
"ReturnPressed()", 
"TGL5DDataSetEditor", 
this, 
"XSliderSetMax()");
 
  147    fYRangeSlider->Connect(
"PositionChanged()", 
"TGL5DDataSetEditor", 
this, 
"YSliderChanged()");
 
  148    fYRangeSliderMin->Connect(
"ReturnPressed()", 
"TGL5DDataSetEditor", 
this, 
"YSliderSetMin()");
 
  149    fYRangeSliderMax->Connect(
"ReturnPressed()", 
"TGL5DDataSetEditor", 
this, 
"YSliderSetMax()");
 
  151    fZRangeSlider->Connect(
"PositionChanged()", 
"TGL5DDataSetEditor", 
this, 
"ZSliderChanged()");
 
  152    fZRangeSliderMin->Connect(
"ReturnPressed()", 
"TGL5DDataSetEditor", 
this, 
"ZSliderSetMin()");
 
  153    fZRangeSliderMax->Connect(
"ReturnPressed()", 
"TGL5DDataSetEditor", 
this, 
"ZSliderSetMax()");
 
  155    fCancelGridBtn->Connect(
"Pressed()", 
"TGL5DDataSetEditor", 
this, 
"RollbackGridParameters()");
 
  156    fOkGridBtn->Connect(
"Pressed()", 
"TGL5DDataSetEditor", 
this, 
"ApplyGridParameters()");
 
  159    fIsoList->Connect(
"Selected(Int_t)", 
"TGL5DDataSetEditor", 
this, 
"SurfaceSelected(Int_t)");
 
  160    fIsoList->GetContainer()->RemoveInput(kKeyPressMask);
 
  162    fHighlightCheck->Connect(
"Clicked()", 
"TGL5DDataSetEditor", 
this, 
"HighlightClicked()");
 
  163    fVisibleCheck->Connect(
"Clicked()", 
"TGL5DDataSetEditor", 
this, 
"VisibleClicked()");
 
  164    fSurfColorSelect->Connect(
"ColorSelected(Pixel_t)", 
"TGL5DDataSetEditor", 
this, 
"ColorChanged(Pixel_t)");
 
  165    fSurfAlphaSlider->Connect(
"PositionChanged(Int_t)", 
"TGL5DDataSetEditor", 
this, 
"AlphaChanged(Int_t)");
 
  166    fSurfRemoveBtn->Connect(
"Pressed()", 
"TGL5DDataSetEditor", 
this, 
"RemoveSurface()");
 
  168    fAddNewIsoBtn->Connect(
"Pressed()", 
"TGL5DDataSetEditor", 
this, 
"AddNewSurface()");
 
  181 void make_slider_range_entries(TGCompositeFrame *parent, TGNumberEntryField *&minEntry,
 
  182                                const TString &minToolTip, TGNumberEntryField *&maxEntry,
 
  183                                const TString &maxToolTip)
 
  185    TGCompositeFrame *frame = 
new TGCompositeFrame(parent, 80, 20, kHorizontalFrame);
 
  187    minEntry = 
new TGNumberEntryField(frame, -1, 0., TGNumberFormat::kNESRealThree,
 
  188                                      TGNumberFormat::kNEAAnyNumber);
 
  189    minEntry->SetToolTipText(minToolTip.Data());
 
  190    minEntry->Resize(57, 20);
 
  191    frame->AddFrame(minEntry, 
new TGLayoutHints(kLHintsLeft, 0, 0, 0, 0));
 
  193    maxEntry = 
new TGNumberEntryField(frame, -1, 0., TGNumberFormat::kNESRealThree,
 
  194                                      TGNumberFormat::kNEAAnyNumber);
 
  195    maxEntry->SetToolTipText(maxToolTip.Data());
 
  196    maxEntry->Resize(57, 20);
 
  197    frame->AddFrame(maxEntry, 
new TGLayoutHints(kLHintsLeft, 0, 0, 0, 0));
 
  198    parent->AddFrame(frame, 
new TGLayoutHints(kLHintsTop, 5, 0, 0, 0));
 
  203 TGHorizontalFrame *make_labeled_hframe(TGCompositeFrame *p, 
const char *text)
 
  205    TGHorizontalFrame *frame = 
new TGHorizontalFrame(p);
 
  206    TGLabel *label = 
new TGLabel(frame, text);
 
  207    frame->AddFrame(label, 
new TGLayoutHints(kLHintsLeft | kLHintsBottom, 0, 0, 0));
 
  208    p->AddFrame(frame, 
new TGLayoutHints(kLHintsLeft, 0, 0, 1, 0));
 
  215 TGDoubleHSlider *make_double_hslider(TGCompositeFrame *parent, 
const char *labelName)
 
  217    TGCompositeFrame *sliderFrame = 
new TGCompositeFrame(parent, 80, 20, kHorizontalFrame);
 
  218    TGLabel *sliderLabel = 
new TGLabel(sliderFrame, labelName);
 
  219    sliderFrame->AddFrame(sliderLabel,
 
  220                          new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 2, 2, 2, 2));
 
  221    TGDoubleHSlider *slider = 
new TGDoubleHSlider(sliderFrame, 1, 2);
 
  222    slider->Resize(110, 20);
 
  224    sliderFrame->AddFrame(slider, 
new TGLayoutHints(kLHintsLeft));
 
  225    parent->AddFrame(sliderFrame, 
new TGLayoutHints(kLHintsTop, 2, 2, 2, 2));
 
  235 void TGL5DDataSetEditor::CreateStyleTab()
 
  237    TGHorizontalFrame *f;
 
  239    fShowBoxCut  = 
new TGCheckButton(
this, 
"Show Box Cut");
 
  240    fShowBoxCut->SetToolTipText(
"Box cut. When attached to a plot, cuts away a part of it");
 
  241    AddFrame(fShowBoxCut, 
new TGLayoutHints(kLHintsLeft, 5, 2, 2, 2));
 
  243    MakeTitle(
"isosurfaces");
 
  244    f = 
new TGHorizontalFrame(
this, 200, 50);
 
  245    f->AddFrame(
new TGLabel(f, 
"Number:"), 
new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 5, 2, 2, 2));
 
  246    fNumberOfPlanes = 
new TGNumberEntry(f, 0, 3, -1, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative,
 
  247                                        TGNumberFormat::kNELLimitMinMax, 1, 200);
 
  248    fNumberOfPlanes->GetNumberEntry()->SetToolTipText(
"Set number of isosurfaces");
 
  249    f->AddFrame(fNumberOfPlanes, 
new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 2, 2, 2, 2));
 
  250    fApplyPlanes = 
new TGTextButton(f, 
"   Apply   ");
 
  251    f->AddFrame(fApplyPlanes, 
new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 2, 2, 2, 2));
 
  252    AddFrame(f, 
new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 0, 0, 0, 0));
 
  256    f = 
new TGHorizontalFrame(
this, 200, 50);
 
  257    f->AddFrame(
new TGLabel(f, 
"Value:"), 
new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 5, 2, 2, 2));
 
  258    fAlpha = 
new TGNumberEntry(f, 0, 1, -1, TGNumberFormat::kNESRealThree, TGNumberFormat::kNEANonNegative,
 
  259                               TGNumberFormat::kNELLimitMinMax, 0.1, 0.5);
 
  260    fAlpha->GetNumberEntry()->SetToolTipText(
"Value of alpha parameter");
 
  261    f->AddFrame(fAlpha, 
new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 2, 2, 2, 2));
 
  262    fApplyAlpha = 
new TGTextButton(f, 
"   Apply   ");
 
  263    f->AddFrame(fApplyAlpha, 
new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 2, 2, 2, 2));
 
  264    AddFrame(f, 
new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 0, 0, 0, 0));
 
  265    fApplyAlpha->SetState(kButtonDisabled);
 
  267    fLogScale  = 
new TGCheckButton(
this, 
"Log Scale");
 
  268    AddFrame(fLogScale, 
new TGLayoutHints(kLHintsTop | kLHintsLeft, 5, 2, 2, 2));
 
  270    AddFrame(
new TGLabel(
this, 
"Slide Range:"), 
new TGLayoutHints(kLHintsLeft, 5, 2, 2, 2));
 
  271    fSlideRange = 
new TGDoubleHSlider(
this, 200, kDoubleScaleDownRight);
 
  272    AddFrame(fSlideRange, 
new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 5, 2, 2, 2));
 
  279 void TGL5DDataSetEditor::CreateGridTab()
 
  281    TGCompositeFrame *tabFrame = CreateEditorTabSubFrame(
"Grid");
 
  283    TGGroupFrame *gridGroup = 
new TGGroupFrame(tabFrame, 
"Grid parameters", kVerticalFrame);
 
  285    const UInt_t min = 10, max = 300;
 
  286    const UInt_t nDigits = 4;
 
  288    TGHorizontalFrame *frame = make_labeled_hframe(gridGroup, 
"Cells along X:");
 
  289    fNCellsXEntry = 
new TGNumberEntry(frame, 0., nDigits, -1, TGNumberFormat::kNESInteger,
 
  290                                      TGNumberFormat::kNEAPositive, TGNumberFormat::kNELLimitMinMax,
 
  292    frame->AddFrame(fNCellsXEntry,
 
  293                    new TGLayoutHints(kLHintsLeft | kLHintsExpandX | kLHintsBottom, 2, 0, 0));
 
  295    frame = make_labeled_hframe(gridGroup, 
"Cells along Y:");
 
  296    fNCellsYEntry = 
new TGNumberEntry(frame, 0., nDigits, -1, TGNumberFormat::kNESInteger,
 
  297                                      TGNumberFormat::kNEAPositive, TGNumberFormat::kNELLimitMinMax,
 
  299    frame->AddFrame(fNCellsYEntry,
 
  300                    new TGLayoutHints(kLHintsLeft | kLHintsExpandX | kLHintsBottom, 2, 0, 0));
 
  302    frame = make_labeled_hframe(gridGroup, 
"Cells along Z:");
 
  303    fNCellsZEntry = 
new TGNumberEntry(frame, 0., nDigits, -1, TGNumberFormat::kNESInteger,
 
  304                                      TGNumberFormat::kNEAPositive, TGNumberFormat::kNELLimitMinMax,
 
  306    frame->AddFrame(fNCellsZEntry,
 
  307                    new TGLayoutHints(kLHintsLeft | kLHintsExpandX | kLHintsBottom, 2, 0, 0));
 
  308    tabFrame->AddFrame(gridGroup, 
new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 2, 3, 3, 0));
 
  311    TGGroupFrame *rangeGroup = 
new TGGroupFrame(tabFrame, 
"Ranges", kVerticalFrame);
 
  313    fXRangeSlider = make_double_hslider(rangeGroup, 
"X:");
 
  314    make_slider_range_entries(rangeGroup, fXRangeSliderMin, 
"Set the minimum value of the x-axis",
 
  315                           fXRangeSliderMax, 
"Set the maximum value of the x-axis");
 
  316    fYRangeSlider = make_double_hslider(rangeGroup, 
"Y:");
 
  317    make_slider_range_entries(rangeGroup, fYRangeSliderMin, 
"Set the minimum value of the y-axis",
 
  318                           fYRangeSliderMax, 
"Set the maximum value of the y-axis");
 
  319    fZRangeSlider = make_double_hslider(rangeGroup, 
"Z:");
 
  320    make_slider_range_entries(rangeGroup, fZRangeSliderMin, 
"Set the minimum value of the z-axis",
 
  321                           fZRangeSliderMax, 
"Set the maximum value of the z-axis");
 
  323    tabFrame->AddFrame(rangeGroup, 
new TGLayoutHints(kLHintsTop | kLHintsCenterX | kLHintsExpandX, 2, 3, 0, 0));
 
  326    TGHorizontalFrame *horizontalFrame = 
new TGHorizontalFrame(tabFrame, 200, 50);
 
  327    fCancelGridBtn = 
new TGTextButton(horizontalFrame, 
"  Cancel  ");
 
  328    horizontalFrame->AddFrame(fCancelGridBtn, 
new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 2, 2, 2, 2));
 
  329    fOkGridBtn = 
new TGTextButton(horizontalFrame, 
"  Apply  ");
 
  330    horizontalFrame->AddFrame(fOkGridBtn, 
new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 2, 2, 2, 2));
 
  331    tabFrame->AddFrame(horizontalFrame, 
new TGLayoutHints(kLHintsTop | kLHintsCenterX, 2, 3, 0, 0));
 
  337 void TGL5DDataSetEditor::CreateIsoTab()
 
  339    TGCompositeFrame *tabFrame = CreateEditorTabSubFrame(
"Surfaces");
 
  342    TGGroupFrame *v4Group = 
new TGGroupFrame(tabFrame, 
"V4 Range", kVerticalFrame);
 
  344    make_slider_range_entries(v4Group, fV4MinEntry, 
"Minimum value of V4",
 
  345                              fV4MaxEntry, 
"Maximum value of V4");
 
  347    tabFrame->AddFrame(v4Group, 
new TGLayoutHints(kLHintsTop | kLHintsCenterX | kLHintsExpandX, 2, 3, 0, 0));
 
  349    fV4MinEntry->SetState(kFALSE);
 
  350    fV4MaxEntry->SetState(kFALSE);
 
  354    TGGroupFrame *isoGroup = 
new TGGroupFrame(tabFrame, 
"Iso-surfaces", kVerticalFrame);
 
  356    fHighlightCheck = 
new TGCheckButton(isoGroup, 
"Highlight selected");
 
  357    fHighlightCheck->SetToolTipText(
"Highlight selected surface");
 
  358    fHighlightCheck->SetState(kButtonDown);
 
  359    isoGroup->AddFrame(fHighlightCheck, 
new TGLayoutHints(kLHintsLeft, 4, 1, 1, 1));
 
  361    TGHorizontalFrame *hf = 
new TGHorizontalFrame(isoGroup);
 
  362    fIsoList = 
new TGListBox(hf);
 
  363    fIsoList->Resize(120, 120);
 
  364    hf->AddFrame(fIsoList, 
new TGLayoutHints(kLHintsTop | kLHintsLeft, 5, 5, 5, 5));
 
  365    isoGroup->AddFrame(hf, 
new TGLayoutHints(kLHintsLeft, 2, 1, 1, 1));
 
  367    fVisibleCheck = 
new TGCheckButton(isoGroup, 
"Visible");
 
  368    fVisibleCheck->SetToolTipText(
"Show/hide surface");
 
  369    isoGroup->AddFrame(fVisibleCheck, 
new TGLayoutHints(kLHintsLeft, 4, 1, 1, 1));
 
  371    fShowCloud = 
new TGCheckButton(isoGroup, 
"Show cloud");
 
  372    fShowCloud->SetToolTipText(
"Show/hide cloud for surface");
 
  373    isoGroup->AddFrame(fShowCloud, 
new TGLayoutHints(kLHintsLeft, 4, 1, 1, 1));
 
  376    hf = 
new TGHorizontalFrame(isoGroup);
 
  377    TGLabel* lab = 
new TGLabel(hf, 
"Color");
 
  378    hf->AddFrame(lab, 
new TGLayoutHints(kLHintsLeft|kLHintsBottom, 1, 4, 8, 3));
 
  379    fSurfColorSelect = 
new TGColorSelect(hf, 0, -1);
 
  380    hf->AddFrame(fSurfColorSelect, 
new TGLayoutHints(kLHintsLeft, 1, 1, 8, 1));
 
  381    isoGroup->AddFrame(hf, 
new TGLayoutHints(kLHintsLeft, 2, 1, 1, 1));
 
  383    TGHorizontalFrame *frame = make_labeled_hframe(isoGroup, 
"Opacity: ");
 
  384    fSurfAlphaSlider = 
new TGHSlider(frame, 80);
 
  385    fSurfAlphaSlider->SetRange(0, 100);
 
  386    frame->AddFrame(fSurfAlphaSlider, 
new TGLayoutHints(kLHintsLeft));
 
  388    fSurfRemoveBtn = 
new TGTextButton(isoGroup, 
"  Remove surface  ");
 
  389    isoGroup->AddFrame(fSurfRemoveBtn, 
new TGLayoutHints(kLHintsLeft, 2, 2, 2, 2));
 
  390    tabFrame->AddFrame(isoGroup, 
new TGLayoutHints(kLHintsTop | kLHintsCenterX | kLHintsExpandX, 2, 3, 0, 0));
 
  393    TGGroupFrame *newGroup = 
new TGGroupFrame(tabFrame, 
"New iso-surface", kVerticalFrame);
 
  394    hf = 
new TGHorizontalFrame(newGroup);
 
  395    fNewIsoEntry = 
new TGNumberEntry(hf, 0., 12, -1, TGNumberFormat::kNESReal);
 
  396    hf->AddFrame(fNewIsoEntry, 
new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 2, 2, 2, 2));
 
  397    fNewIsoEntry->Resize(60, 20);
 
  398    fAddNewIsoBtn = 
new TGTextButton(hf, 
"    Add    ");
 
  399    hf->AddFrame(fAddNewIsoBtn, 
new TGLayoutHints(kLHintsLeft | kLHintsCenterY | kLHintsExpandX, 2, 2, 2, 2));
 
  400    newGroup->AddFrame(hf, 
new TGLayoutHints(kLHintsLeft, 0, 0, 0, 0));
 
  402    tabFrame->AddFrame(newGroup, 
new TGLayoutHints(kLHintsTop | kLHintsExpandX, 2, 3, 0, 0));
 
  408 void TGL5DDataSetEditor::SetModel(TObject* obj)
 
  411    Bool_t needUpdate = fSelectedSurface != -1;
 
  413    if ((fDataSet = dynamic_cast<TGL5DDataSet *>(obj))) {
 
  414       fPainter = fDataSet->GetRealPainter();
 
  416       SetStyleTabWidgets();
 
  420       DisableGridTabButtons();
 
  421       DisableSurfaceControls();
 
  424          ConnectSignals2Slots();
 
  427    if (needUpdate && gPad)
 
  433 void set_grid_range_widgets(
const TAxis *a, 
const Rgl::Range_t r, TGDoubleHSlider *slider,
 
  434                             TGNumberEntryField *eMin, TGNumberEntryField *eMax)
 
  436    slider->SetRange(r.first, r.second);
 
  437    slider->SetPosition(a->GetBinLowEdge(1), a->GetBinUpEdge(a->GetLast()));
 
  439    eMin->SetNumber(a->GetBinLowEdge(1));
 
  440    eMin->SetLimits(TGNumberFormat::kNELLimitMinMax, r.first, r.second);
 
  441    eMax->SetNumber(a->GetBinUpEdge(a->GetLast()));
 
  442    eMax->SetLimits(TGNumberFormat::kNELLimitMinMax, r.first, r.second);
 
  450 void TGL5DDataSetEditor::SetStyleTabWidgets()
 
  452    fShowBoxCut->SetState(fPainter->IsBoxCutShown() ? kButtonDown : kButtonUp);
 
  453    fNumberOfPlanes->SetNumber(fPainter->GetNContours());
 
  454    fAlpha->SetNumber(fPainter->GetAlpha());
 
  460 void TGL5DDataSetEditor::SetGridTabWidgets()
 
  462    const TAxis *xA = fDataSet->GetXAxis();
 
  463    const TAxis *yA = fDataSet->GetYAxis();
 
  464    const TAxis *zA = fDataSet->GetZAxis();
 
  465    const Rgl::Range_t &xR = fDataSet->GetXRange();
 
  466    const Rgl::Range_t &yR = fDataSet->GetYRange();
 
  467    const Rgl::Range_t &zR = fDataSet->GetZRange();
 
  469    fNCellsXEntry->SetIntNumber(xA->GetNbins());
 
  470    fNCellsYEntry->SetIntNumber(yA->GetNbins());
 
  471    fNCellsZEntry->SetIntNumber(zA->GetNbins());
 
  473    set_grid_range_widgets(xA, xR, fXRangeSlider, fXRangeSliderMin, fXRangeSliderMax);
 
  475    set_grid_range_widgets(yA, yR, fYRangeSlider, fYRangeSliderMin, fYRangeSliderMax);
 
  477    set_grid_range_widgets(zA, zR, fZRangeSlider, fZRangeSliderMin, fZRangeSliderMax);
 
  483 void TGL5DDataSetEditor::SetIsoTabWidgets()
 
  485    const Rgl::Range_t &v4R = fDataSet->GetV4Range();
 
  487    fV4MinEntry->SetNumber(v4R.first);
 
  488    fV4MaxEntry->SetNumber(v4R.second);
 
  490    fIsoList->RemoveAll();
 
  491    fHidden->fIterators.clear();
 
  493    SurfIter_t curr = fPainter->SurfacesBegin();
 
  495    for (Int_t ind = 0; curr != fPainter->SurfacesEnd(); ++curr, ++ind) {
 
  496       TString entry(TString::Format(
"Level: %f", curr->f4D));
 
  497       fIsoList->AddEntry(entry.Data(), ind);
 
  499       curr->fHighlight = kFALSE;
 
  505       fHidden->fIterators[ind] = curr;
 
  508    fNewIsoEntry->SetLimits(TGNumberFormat::kNELLimitMinMax, v4R.first, v4R.second);
 
  509    fNewIsoEntry->SetNumber(v4R.first);
 
  511    fSelectedSurface = -1;
 
  517 void TGL5DDataSetEditor::GridParametersChanged()
 
  519    EnableGridTabButtons();
 
  525 void TGL5DDataSetEditor::EnableGridTabButtons()
 
  527    fCancelGridBtn->SetState(kButtonUp);
 
  528    fOkGridBtn->SetState(kButtonUp);
 
  534 void TGL5DDataSetEditor::DisableGridTabButtons()
 
  536    fCancelGridBtn->SetState(kButtonDisabled);
 
  537    fOkGridBtn->SetState(kButtonDisabled);
 
  543 void TGL5DDataSetEditor::EnableSurfaceControls()
 
  545    fVisibleCheck->SetState(kButtonUp);
 
  548    fSurfRemoveBtn->SetState(kButtonUp);
 
  554 void TGL5DDataSetEditor::DisableSurfaceControls()
 
  556    fVisibleCheck->SetState(kButtonDisabled);
 
  557    fShowCloud->SetState(kButtonDisabled);
 
  559    fSurfRemoveBtn->SetState(kButtonDisabled);
 
  565 void TGL5DDataSetEditor::XSliderChanged()
 
  567    fXRangeSliderMin->SetNumber(fXRangeSlider->GetMinPosition());
 
  568    fXRangeSliderMax->SetNumber(fXRangeSlider->GetMaxPosition());
 
  570    EnableGridTabButtons();
 
  576 void TGL5DDataSetEditor::YSliderChanged()
 
  578    fYRangeSliderMin->SetNumber(fYRangeSlider->GetMinPosition());
 
  579    fYRangeSliderMax->SetNumber(fYRangeSlider->GetMaxPosition());
 
  581    EnableGridTabButtons();
 
  587 void TGL5DDataSetEditor::ZSliderChanged()
 
  589    fZRangeSliderMin->SetNumber(fZRangeSlider->GetMinPosition());
 
  590    fZRangeSliderMax->SetNumber(fZRangeSlider->GetMaxPosition());
 
  592    EnableGridTabButtons();
 
  598 void TGL5DDataSetEditor::XSliderSetMin()
 
  600    if (fXRangeSliderMin->GetNumber() < fXRangeSliderMax->GetNumber()) {
 
  601       fXRangeSlider->SetPosition(fXRangeSliderMin->GetNumber(),
 
  602                                  fXRangeSliderMax->GetNumber());
 
  603       EnableGridTabButtons();
 
  605       fXRangeSliderMin->SetNumber(fXRangeSlider->GetMinPosition());
 
  611 void TGL5DDataSetEditor::XSliderSetMax()
 
  613    if (fXRangeSliderMin->GetNumber() < fXRangeSliderMax->GetNumber()) {
 
  614       fXRangeSlider->SetPosition(fXRangeSliderMin->GetNumber(),
 
  615                                  fXRangeSliderMax->GetNumber());
 
  616       EnableGridTabButtons();
 
  618       fXRangeSliderMax->SetNumber(fXRangeSlider->GetMaxPosition());
 
  625 void TGL5DDataSetEditor::YSliderSetMin()
 
  627    if (fYRangeSliderMin->GetNumber() < fYRangeSliderMax->GetNumber()) {
 
  628       fYRangeSlider->SetPosition(fYRangeSliderMin->GetNumber(),
 
  629                                  fYRangeSliderMax->GetNumber());
 
  630       EnableGridTabButtons();
 
  632       fYRangeSliderMin->SetNumber(fYRangeSlider->GetMinPosition());
 
  638 void TGL5DDataSetEditor::YSliderSetMax()
 
  640    if (fYRangeSliderMin->GetNumber() < fYRangeSliderMax->GetNumber()) {
 
  641       fYRangeSlider->SetPosition(fYRangeSliderMin->GetNumber(),
 
  642                                  fYRangeSliderMax->GetNumber());
 
  643       EnableGridTabButtons();
 
  645       fYRangeSliderMax->SetNumber(fYRangeSlider->GetMaxPosition());
 
  651 void TGL5DDataSetEditor::ZSliderSetMin()
 
  653    if (fZRangeSliderMin->GetNumber() < fZRangeSliderMax->GetNumber()) {
 
  654       fZRangeSlider->SetPosition(fZRangeSliderMin->GetNumber(),
 
  655                                  fZRangeSliderMax->GetNumber());
 
  656       EnableGridTabButtons();
 
  658       fZRangeSliderMin->SetNumber(fZRangeSlider->GetMinPosition());
 
  665 void TGL5DDataSetEditor::ZSliderSetMax()
 
  667    if (fZRangeSliderMin->GetNumber() < fZRangeSliderMax->GetNumber()) {
 
  668       fZRangeSlider->SetPosition(fZRangeSliderMin->GetNumber(),
 
  669                                  fZRangeSliderMax->GetNumber());
 
  670       EnableGridTabButtons();
 
  672       fYRangeSliderMax->SetNumber(fZRangeSlider->GetMaxPosition());
 
  679 void TGL5DDataSetEditor::RollbackGridParameters()
 
  682    DisableGridTabButtons();
 
  689 void TGL5DDataSetEditor::ApplyGridParameters()
 
  691    DisableGridTabButtons();
 
  693    fDataSet->GetXAxis()->Set(fNCellsXEntry->GetIntNumber(),
 
  694                              fXRangeSlider->GetMinPosition(),
 
  695                              fXRangeSlider->GetMaxPosition());
 
  697    fDataSet->GetYAxis()->Set(fNCellsYEntry->GetIntNumber(),
 
  698                              fYRangeSlider->GetMinPosition(),
 
  699                              fYRangeSlider->GetMaxPosition());
 
  701    fDataSet->GetZAxis()->Set(fNCellsZEntry->GetIntNumber(),
 
  702                              fZRangeSlider->GetMinPosition(),
 
  703                              fZRangeSlider->GetMaxPosition());
 
  705    fPainter->ResetGeometryRanges();
 
  713 void TGL5DDataSetEditor::HighlightClicked()
 
  715    if (fSelectedSurface == -1)
 
  718    fHidden->fIterators[fSelectedSurface]->fHighlight = fHighlightCheck->IsOn();
 
  729 void TGL5DDataSetEditor::SurfaceSelected(Int_t 
id)
 
  733       if (!fHidden->IsValid(
id)) {
 
  734          Error(
"SurfaceSelected", 
"Got wrong index %d", 
id);
 
  738       if (fSelectedSurface != -1) {
 
  741          fHidden->fIterators[fSelectedSurface]->fHighlight = kFALSE;
 
  744       EnableSurfaceControls();
 
  747       SurfIter_t surf = fHidden->fIterators[fSelectedSurface = id];
 
  748       surf->fHighlight = fHighlightCheck->IsOn();
 
  750       fVisibleCheck->SetOn(!surf->fHide);
 
  751       fSurfColorSelect->SetColor(TColor::Number2Pixel(surf->fColor), kFALSE);
 
  752       fSurfAlphaSlider->SetPosition(surf->fAlpha);
 
  756    } 
else if (fSelectedSurface != -1) {
 
  758       fHidden->fIterators[fSelectedSurface]->fHighlight = kFALSE;
 
  759       fSelectedSurface = -1;
 
  760       DisableSurfaceControls();
 
  769 void TGL5DDataSetEditor::VisibleClicked()
 
  775    if (fSelectedSurface != -1) {
 
  776       fHidden->fIterators[fSelectedSurface]->fHide = !(fVisibleCheck->IsOn());
 
  785 void TGL5DDataSetEditor::ColorChanged(Pixel_t pixel)
 
  787    if (fSelectedSurface != -1) {
 
  788       fHidden->fIterators[fSelectedSurface]->fColor = Color_t(TColor::GetColor(pixel));
 
  797 void TGL5DDataSetEditor::AlphaChanged(Int_t alpha)
 
  799    if (fSelectedSurface != -1) {
 
  800       fHidden->fIterators[fSelectedSurface]->fAlpha = alpha;
 
  809 void TGL5DDataSetEditor::RemoveSurface()
 
  811    if (fSelectedSurface != -1) {
 
  813       SurfIter_t it = fHidden->fIterators[fSelectedSurface];
 
  814       fHidden->fIterators.erase(fSelectedSurface);
 
  815       fIsoList->RemoveEntry(fSelectedSurface);
 
  817       fPainter->RemoveSurface(it);
 
  818       DisableSurfaceControls();
 
  819       fSelectedSurface = -1;
 
  829 void TGL5DDataSetEditor::AddNewSurface()
 
  831    fPainter->AddSurface(fNewIsoEntry->GetNumber());
 
  841 void TGL5DDataSetEditor::ApplyAlpha()
 
  844       fApplyAlpha->SetState(kButtonDisabled);
 
  845       fPainter->SetAlpha(fAlpha->GetNumber());
 
  846       fAlpha->SetNumber(fPainter->GetAlpha());
 
  860 void TGL5DDataSetEditor::ApplyPlanes()
 
  864       fPainter->SetNContours((Int_t)fNumberOfPlanes->GetIntNumber());
 
  865       fNumberOfPlanes->SetIntNumber(fPainter->GetNContours());
 
  878 void TGL5DDataSetEditor::BoxCutToggled()
 
  881       fPainter->ShowBoxCut(fShowBoxCut->IsOn());
 
  889 void TGL5DDataSetEditor::AlphaChanged()
 
  891    fApplyAlpha->SetState(kButtonUp);
 
  897 void TGL5DDataSetEditor::NContoursChanged()