ROOT logo
// @(#)root/gl:$Id: TGL5DDataSetEditor.cxx 28870 2009-06-10 09:03:28Z matevz $
// Author: Bertrand Bellenot 2009

/*************************************************************************
 * Copyright (C) 1995-2009, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/
#include "TGedEditor.h"
#include "TGDoubleSlider.h"
#include "TGNumberEntry.h"
#include "TVirtualPad.h"
#include "TGButton.h"
#include "TGLabel.h"
#include "TClass.h"
#include "TGTab.h"

#include "TGL5DDataSetEditor.h"
#include "TGLUtil.h"
#include "TGL5D.h"

//______________________________________________________________________________
//
// GUI editor for OpenGL 5D Painter.

ClassImp(TGL5DDataSetEditor);

//______________________________________________________________________________
TGL5DDataSetEditor::TGL5DDataSetEditor(const TGWindow *p,  Int_t width,
   Int_t height, UInt_t options, Pixel_t back) : TGedFrame(p,  width, height,
   options | kVerticalFrame, back), fShowBoxCut(), fNumberOfPlanes(0), 
   fAlpha(0), fLogScale(0), fSlideRange(0), fApplyAlpha(0), fApplyPlanes(0)
{
  //  Constructor.

   CreateStyleTab();
}

//______________________________________________________________________________

TGL5DDataSetEditor::~TGL5DDataSetEditor()
{
   // Destructor.

}

//______________________________________________________________________________
void TGL5DDataSetEditor::ConnectSignals2Slots()
{
   // Connect signals to slots.

   fShowBoxCut->Connect("Toggled(Bool_t)", "TGL5DDataSetEditor", this, "DoShowBoxCut()");
   fSlideRange->Connect("PositionChanged()","TGL5DDataSetEditor", this,"DoSliderRangeMoved()");
   fLogScale->Connect("Toggled(Bool_t)", "TGL5DDataSetEditor", this, "DoLogScale()");
   fApplyPlanes->Connect("Clicked()", "TGL5DDataSetEditor", this, "DoPlanes()");
   fApplyAlpha->Connect("Clicked()", "TGL5DDataSetEditor", this, "DoAlpha()");
   
   fAlpha->Connect("ValueChanged(Long_t)", "TGL5DDataSetEditor", this, "DoAlphaChanged()");
   fAlpha->Connect("ValueSet(Long_t)", "TGL5DDataSetEditor", this, "DoAlphaChanged()");
   fNumberOfPlanes->Connect("ValueChanged(Long_t)", "TGL5DDataSetEditor", this, "DoNContoursChanged()");
   fNumberOfPlanes->Connect("ValueSet(Long_t)", "TGL5DDataSetEditor", this, "DoNContoursChanged()");

   fInit = kFALSE;
}

//______________________________________________________________________________
void TGL5DDataSetEditor::CreateStyleTab()
{
   // Creates "Style" tab.

   TGHorizontalFrame *f;
   //MakeTitle("Update behaviour");
   fShowBoxCut  = new TGCheckButton(this, "Show Box Cut");
   fShowBoxCut->SetToolTipText("Box cut. When attached to a plot, cuts away a part of it");
   AddFrame(fShowBoxCut, new TGLayoutHints(kLHintsLeft, 5, 2, 2, 2));

   MakeTitle("isosurfaces");
   f = new TGHorizontalFrame(this, 200, 50);
   f->AddFrame(new TGLabel(f, "Number:"), new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 5, 2, 2, 2));
   fNumberOfPlanes = new TGNumberEntry(f, 0, 3, -1, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative,
                                       TGNumberFormat::kNELLimitMinMax, 1, 200);
   fNumberOfPlanes->GetNumberEntry()->SetToolTipText("Set number of isosurfaces");
   f->AddFrame(fNumberOfPlanes, new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 2, 2, 2, 2));
   fApplyPlanes = new TGTextButton(f, "   Apply   ");
   f->AddFrame(fApplyPlanes, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 2, 2, 2, 2));
   AddFrame(f, new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 0, 0, 0, 0));
   fApplyPlanes->SetState(kButtonDisabled);

   MakeTitle("Alpha");
   f = new TGHorizontalFrame(this, 200, 50);
   f->AddFrame(new TGLabel(f, "Value:"), new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 5, 2, 2, 2));
   fAlpha = new TGNumberEntry(f, 0, 1, -1, TGNumberFormat::kNESRealThree, TGNumberFormat::kNEANonNegative, 
                              TGNumberFormat::kNELLimitMinMax, 0.1, 0.5);
   fAlpha->GetNumberEntry()->SetToolTipText("Value of alpha parameter");
   f->AddFrame(fAlpha, new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 2, 2, 2, 2));
   fApplyAlpha = new TGTextButton(f, "   Apply   ");
   f->AddFrame(fApplyAlpha, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 2, 2, 2, 2));
   AddFrame(f, new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 0, 0, 0, 0));
   fApplyAlpha->SetState(kButtonDisabled);

   fLogScale  = new TGCheckButton(this, "Log Scale");
   AddFrame(fLogScale, new TGLayoutHints(kLHintsTop | kLHintsLeft, 5, 2, 2, 2));

   AddFrame(new TGLabel(this, "Slide Range:"), new TGLayoutHints(kLHintsLeft, 5, 2, 2, 2));
   fSlideRange = new TGDoubleHSlider(this, 200, kDoubleScaleDownRight);
   AddFrame(fSlideRange, new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 5, 2, 2, 2));
}

//______________________________________________________________________________
void TGL5DDataSetEditor::DoAlpha()
{
   // Slot connected to the Log Scale check button.

   if (fPainter) {
      fApplyAlpha->SetState(kButtonDisabled);
      fPainter->SetAlpha(fAlpha->GetNumber());
      fAlpha->SetNumber(fPainter->GetAlpha());
   }
   if (gPad) gPad->Update();
}

//______________________________________________________________________________
void TGL5DDataSetEditor::DoLogScale()
{
   // Slot connected to the Log Scale check button.

   if (fPainter) {
   }
   if (gPad) gPad->Update();
}

//______________________________________________________________________________
void TGL5DDataSetEditor::DoPlanes()
{
   // Slot connected to the Apply Planes button.

   if (fPainter) {
      fApplyPlanes->SetState(kButtonDisabled);
      fPainter->SetNContours((Int_t)fNumberOfPlanes->GetIntNumber());
      fNumberOfPlanes->SetIntNumber(fPainter->GetNContours());
   }
   if (gPad) gPad->Update();
}

//______________________________________________________________________________
void TGL5DDataSetEditor::DoShowBoxCut()
{
   // Slot connected to the Show BoxCut check button.

   if (fPainter) fPainter->ShowBoxCut(fShowBoxCut->IsOn());
   if (gPad) gPad->Update();
}

//______________________________________________________________________________
void TGL5DDataSetEditor::DoSliderRangeMoved()
{
   // Slot connected to the Range Slider.

   if (fPainter) {
      fPainter->SetV5SliderMin(fSlideRange->GetMinPosition());
      fPainter->SetV5SliderMax(fSlideRange->GetMaxPosition());
   }
   if (gPad) gPad->Update();
}

//______________________________________________________________________________
void TGL5DDataSetEditor::DoAlphaChanged()
{
   // Slot connected to the Alpha button.

   fApplyAlpha->SetState(kButtonUp);
}

//______________________________________________________________________________
void TGL5DDataSetEditor::DoNContoursChanged()
{
   // Slot connected to the Number of Planes value-entry.

   fApplyPlanes->SetState(kButtonUp);
}

//______________________________________________________________________________
void TGL5DDataSetEditor::SetModel(TObject* obj)
{
   // Sets model or disables/hides viewer.

   fPainter = 0;

   TGL5DDataSet *dset = static_cast<TGL5DDataSet *>(obj);
   fPainter = dset->GetRealPainter();

   fShowBoxCut->SetState(fPainter->IsBoxCutShown() ? kButtonDown : kButtonUp);

   // Replace with real variable values...

   fNumberOfPlanes->SetNumber(fPainter->GetNContours());
   fAlpha->SetNumber(fPainter->GetAlpha());

   fSlideRange->SetRange(fPainter->GetV5PredictedMin(), fPainter->GetV5PredictedMax());
   fSlideRange->SetPosition(fPainter->GetV5SliderMin(), fPainter->GetV5SliderMax());

   //fLogScale->SetState(fPainter->IsLogScale() ? kButtonDown : kButtonUp);

   if (fInit)
      ConnectSignals2Slots();

}
 TGL5DDataSetEditor.cxx:1
 TGL5DDataSetEditor.cxx:2
 TGL5DDataSetEditor.cxx:3
 TGL5DDataSetEditor.cxx:4
 TGL5DDataSetEditor.cxx:5
 TGL5DDataSetEditor.cxx:6
 TGL5DDataSetEditor.cxx:7
 TGL5DDataSetEditor.cxx:8
 TGL5DDataSetEditor.cxx:9
 TGL5DDataSetEditor.cxx:10
 TGL5DDataSetEditor.cxx:11
 TGL5DDataSetEditor.cxx:12
 TGL5DDataSetEditor.cxx:13
 TGL5DDataSetEditor.cxx:14
 TGL5DDataSetEditor.cxx:15
 TGL5DDataSetEditor.cxx:16
 TGL5DDataSetEditor.cxx:17
 TGL5DDataSetEditor.cxx:18
 TGL5DDataSetEditor.cxx:19
 TGL5DDataSetEditor.cxx:20
 TGL5DDataSetEditor.cxx:21
 TGL5DDataSetEditor.cxx:22
 TGL5DDataSetEditor.cxx:23
 TGL5DDataSetEditor.cxx:24
 TGL5DDataSetEditor.cxx:25
 TGL5DDataSetEditor.cxx:26
 TGL5DDataSetEditor.cxx:27
 TGL5DDataSetEditor.cxx:28
 TGL5DDataSetEditor.cxx:29
 TGL5DDataSetEditor.cxx:30
 TGL5DDataSetEditor.cxx:31
 TGL5DDataSetEditor.cxx:32
 TGL5DDataSetEditor.cxx:33
 TGL5DDataSetEditor.cxx:34
 TGL5DDataSetEditor.cxx:35
 TGL5DDataSetEditor.cxx:36
 TGL5DDataSetEditor.cxx:37
 TGL5DDataSetEditor.cxx:38
 TGL5DDataSetEditor.cxx:39
 TGL5DDataSetEditor.cxx:40
 TGL5DDataSetEditor.cxx:41
 TGL5DDataSetEditor.cxx:42
 TGL5DDataSetEditor.cxx:43
 TGL5DDataSetEditor.cxx:44
 TGL5DDataSetEditor.cxx:45
 TGL5DDataSetEditor.cxx:46
 TGL5DDataSetEditor.cxx:47
 TGL5DDataSetEditor.cxx:48
 TGL5DDataSetEditor.cxx:49
 TGL5DDataSetEditor.cxx:50
 TGL5DDataSetEditor.cxx:51
 TGL5DDataSetEditor.cxx:52
 TGL5DDataSetEditor.cxx:53
 TGL5DDataSetEditor.cxx:54
 TGL5DDataSetEditor.cxx:55
 TGL5DDataSetEditor.cxx:56
 TGL5DDataSetEditor.cxx:57
 TGL5DDataSetEditor.cxx:58
 TGL5DDataSetEditor.cxx:59
 TGL5DDataSetEditor.cxx:60
 TGL5DDataSetEditor.cxx:61
 TGL5DDataSetEditor.cxx:62
 TGL5DDataSetEditor.cxx:63
 TGL5DDataSetEditor.cxx:64
 TGL5DDataSetEditor.cxx:65
 TGL5DDataSetEditor.cxx:66
 TGL5DDataSetEditor.cxx:67
 TGL5DDataSetEditor.cxx:68
 TGL5DDataSetEditor.cxx:69
 TGL5DDataSetEditor.cxx:70
 TGL5DDataSetEditor.cxx:71
 TGL5DDataSetEditor.cxx:72
 TGL5DDataSetEditor.cxx:73
 TGL5DDataSetEditor.cxx:74
 TGL5DDataSetEditor.cxx:75
 TGL5DDataSetEditor.cxx:76
 TGL5DDataSetEditor.cxx:77
 TGL5DDataSetEditor.cxx:78
 TGL5DDataSetEditor.cxx:79
 TGL5DDataSetEditor.cxx:80
 TGL5DDataSetEditor.cxx:81
 TGL5DDataSetEditor.cxx:82
 TGL5DDataSetEditor.cxx:83
 TGL5DDataSetEditor.cxx:84
 TGL5DDataSetEditor.cxx:85
 TGL5DDataSetEditor.cxx:86
 TGL5DDataSetEditor.cxx:87
 TGL5DDataSetEditor.cxx:88
 TGL5DDataSetEditor.cxx:89
 TGL5DDataSetEditor.cxx:90
 TGL5DDataSetEditor.cxx:91
 TGL5DDataSetEditor.cxx:92
 TGL5DDataSetEditor.cxx:93
 TGL5DDataSetEditor.cxx:94
 TGL5DDataSetEditor.cxx:95
 TGL5DDataSetEditor.cxx:96
 TGL5DDataSetEditor.cxx:97
 TGL5DDataSetEditor.cxx:98
 TGL5DDataSetEditor.cxx:99
 TGL5DDataSetEditor.cxx:100
 TGL5DDataSetEditor.cxx:101
 TGL5DDataSetEditor.cxx:102
 TGL5DDataSetEditor.cxx:103
 TGL5DDataSetEditor.cxx:104
 TGL5DDataSetEditor.cxx:105
 TGL5DDataSetEditor.cxx:106
 TGL5DDataSetEditor.cxx:107
 TGL5DDataSetEditor.cxx:108
 TGL5DDataSetEditor.cxx:109
 TGL5DDataSetEditor.cxx:110
 TGL5DDataSetEditor.cxx:111
 TGL5DDataSetEditor.cxx:112
 TGL5DDataSetEditor.cxx:113
 TGL5DDataSetEditor.cxx:114
 TGL5DDataSetEditor.cxx:115
 TGL5DDataSetEditor.cxx:116
 TGL5DDataSetEditor.cxx:117
 TGL5DDataSetEditor.cxx:118
 TGL5DDataSetEditor.cxx:119
 TGL5DDataSetEditor.cxx:120
 TGL5DDataSetEditor.cxx:121
 TGL5DDataSetEditor.cxx:122
 TGL5DDataSetEditor.cxx:123
 TGL5DDataSetEditor.cxx:124
 TGL5DDataSetEditor.cxx:125
 TGL5DDataSetEditor.cxx:126
 TGL5DDataSetEditor.cxx:127
 TGL5DDataSetEditor.cxx:128
 TGL5DDataSetEditor.cxx:129
 TGL5DDataSetEditor.cxx:130
 TGL5DDataSetEditor.cxx:131
 TGL5DDataSetEditor.cxx:132
 TGL5DDataSetEditor.cxx:133
 TGL5DDataSetEditor.cxx:134
 TGL5DDataSetEditor.cxx:135
 TGL5DDataSetEditor.cxx:136
 TGL5DDataSetEditor.cxx:137
 TGL5DDataSetEditor.cxx:138
 TGL5DDataSetEditor.cxx:139
 TGL5DDataSetEditor.cxx:140
 TGL5DDataSetEditor.cxx:141
 TGL5DDataSetEditor.cxx:142
 TGL5DDataSetEditor.cxx:143
 TGL5DDataSetEditor.cxx:144
 TGL5DDataSetEditor.cxx:145
 TGL5DDataSetEditor.cxx:146
 TGL5DDataSetEditor.cxx:147
 TGL5DDataSetEditor.cxx:148
 TGL5DDataSetEditor.cxx:149
 TGL5DDataSetEditor.cxx:150
 TGL5DDataSetEditor.cxx:151
 TGL5DDataSetEditor.cxx:152
 TGL5DDataSetEditor.cxx:153
 TGL5DDataSetEditor.cxx:154
 TGL5DDataSetEditor.cxx:155
 TGL5DDataSetEditor.cxx:156
 TGL5DDataSetEditor.cxx:157
 TGL5DDataSetEditor.cxx:158
 TGL5DDataSetEditor.cxx:159
 TGL5DDataSetEditor.cxx:160
 TGL5DDataSetEditor.cxx:161
 TGL5DDataSetEditor.cxx:162
 TGL5DDataSetEditor.cxx:163
 TGL5DDataSetEditor.cxx:164
 TGL5DDataSetEditor.cxx:165
 TGL5DDataSetEditor.cxx:166
 TGL5DDataSetEditor.cxx:167
 TGL5DDataSetEditor.cxx:168
 TGL5DDataSetEditor.cxx:169
 TGL5DDataSetEditor.cxx:170
 TGL5DDataSetEditor.cxx:171
 TGL5DDataSetEditor.cxx:172
 TGL5DDataSetEditor.cxx:173
 TGL5DDataSetEditor.cxx:174
 TGL5DDataSetEditor.cxx:175
 TGL5DDataSetEditor.cxx:176
 TGL5DDataSetEditor.cxx:177
 TGL5DDataSetEditor.cxx:178
 TGL5DDataSetEditor.cxx:179
 TGL5DDataSetEditor.cxx:180
 TGL5DDataSetEditor.cxx:181
 TGL5DDataSetEditor.cxx:182
 TGL5DDataSetEditor.cxx:183
 TGL5DDataSetEditor.cxx:184
 TGL5DDataSetEditor.cxx:185
 TGL5DDataSetEditor.cxx:186
 TGL5DDataSetEditor.cxx:187
 TGL5DDataSetEditor.cxx:188
 TGL5DDataSetEditor.cxx:189
 TGL5DDataSetEditor.cxx:190
 TGL5DDataSetEditor.cxx:191
 TGL5DDataSetEditor.cxx:192
 TGL5DDataSetEditor.cxx:193
 TGL5DDataSetEditor.cxx:194
 TGL5DDataSetEditor.cxx:195
 TGL5DDataSetEditor.cxx:196
 TGL5DDataSetEditor.cxx:197
 TGL5DDataSetEditor.cxx:198
 TGL5DDataSetEditor.cxx:199
 TGL5DDataSetEditor.cxx:200
 TGL5DDataSetEditor.cxx:201
 TGL5DDataSetEditor.cxx:202
 TGL5DDataSetEditor.cxx:203
 TGL5DDataSetEditor.cxx:204
 TGL5DDataSetEditor.cxx:205
 TGL5DDataSetEditor.cxx:206
 TGL5DDataSetEditor.cxx:207
 TGL5DDataSetEditor.cxx:208
 TGL5DDataSetEditor.cxx:209