// @(#)root/gpad:$Name: $:$Id: TSlider.cxx,v 1.4 2002/01/24 11:39:28 rdm Exp $
// Author: Rene Brun 23/11/96
/*************************************************************************
* Copyright (C) 1995-2000, 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 "Riostream.h"
#include "TROOT.h"
#include "TSlider.h"
#include "TSliderBox.h"
#include <string.h>
ClassImp(TSlider)
//______________________________________________________________________________
//////////////////////////////////////////////////////////////////////////
// //
// TSlider //
// //
// A TSlider object is a specialized TPad including a TSliderBox object//
// The TSliderBox can be moved in the pad. //
// Slider drawing options include the possibility to change the slider //
// starting and ending positions or only one of them. //
// //
// The current slider position can be retrieved via the functions //
// TSlider::GetMinimum and TSlider::GetMaximum //
// These two functions return numbers in the range [0,1]. //
// //
// if a method has been set (via SetMethod), the expression is //
// executed via the interpreter when the button 1 is released. //
// //
// if no method has been set, and an object is referenced (SetObject //
// has been called), while the slider is being moved/resized, //
// the object ExecuteEvent function is called. // //
// //
// Example 1 using SetMethod macro xyslider.C //
// ========================= //
//{ //
// //Example of macro featuring two sliders //
// TFile *f = new TFile("hsimple.root"); //
// TH2F *hpxpy = (TH2F*)f->Get("hpxpy"); //
// TCanvas *c1 = new TCanvas("c1"); //
// TPad *pad = new TPad("pad","lego pad",0.1,0.1,0.98,0.98); //
// pad->SetFillColor(33); //
// pad->Draw(); //
// pad->cd(); //
// gStyle->SetFrameFillColor(42); //
// hpxpy->SetFillColor(46); //
// hpxpy->Draw("lego1"); //
// c1->cd(); //
// //
// //Create two sliders in main canvas. When button1 //
// //of the mouse will be released, action.C will be called //
// TSlider *xslider = new TSlider("xslider","x",0.1,0.02,0.98,0.08); //
// xslider->SetMethod(".x action.C"); //
// TSlider *yslider = new TSlider("yslider","y",0.02,0.1,0.06,0.98); //
// yslider->SetMethod(".x action.C"); //
//} //
// //
// macro action.C //
//{ //
// Int_t nx = hpxpy->GetXaxis()->GetNbins(); //
// Int_t ny = hpxpy->GetYaxis()->GetNbins(); //
// Int_t binxmin = nx*xslider->GetMinimum(); //
// Int_t binxmax = nx*xslider->GetMaximum(); //
// hpxpy->GetXaxis()->SetRange(binxmin,binxmax); //
// Int_t binymin = ny*yslider->GetMinimum(); //
// Int_t binymax = ny*yslider->GetMaximum(); //
// hpxpy->GetYaxis()->SetRange(binymin,binymax); //
// pad->cd(); //
// hpxpy->Draw("lego1"); //
// c1->Update(); //
//} //
// The canvas and the sliders created in the above macro are shown //
// in the picture below. //
//
//
/*
*/
//
// //
// Example 2 using SetObject macro xyslider.C //
// ========================= //
// //
// Same example as above. Instead of SetMethod: //
// Myclass *obj = new Myclass(); // Myclass derived from TObject //
// xslider->SetObject(obj); //
// yslider->SetObject(obj); //
// //
// When the slider will be changed, MyClass::ExecuteEvent will be //
// called with px=0 and py = 0 //
//////////////////////////////////////////////////////////////////////////
//______________________________________________________________________________
TSlider::TSlider(): TPad()
{
//*-*-*-*-*-*-*-*-*-*-*slider default constructor*-*-*-*-*-*-*-*-*-*-*-*-*
//*-* ==========================
fObject = 0;
fMethod = "";
}
//______________________________________________________________________________
TSlider::TSlider(const char *name, const char *title, Double_t x1, Double_t y1,Double_t x2, Double_t y2, Color_t color, Short_t bordersize, Short_t bordermode)
:TPad(name,title,0.1,0.1,0.9,0.9,color,bordersize,bordermode)
{
//*-*-*-*-*-*-*-*-*-*-*Slider normal constructor*-*-*-*-*-*-*-*-*-*-*-*-*-*
//*-* =========================
//
// x1,y1,x2,y2 are in pad user coordinates
Double_t x1pad = gPad->GetX1();
Double_t x2pad = gPad->GetX2();
Double_t y1pad = gPad->GetY1();
Double_t y2pad = gPad->GetY2();
Double_t xmin = (x1-x1pad)/(x2pad-x1pad);
Double_t ymin = (y1-y1pad)/(y2pad-y1pad);
Double_t xmax = (x2-x1pad)/(x2pad-x1pad);
Double_t ymax = (y2-y1pad)/(y2pad-y1pad);
SetPad(xmin,ymin,xmax,ymax);
Range(0,0,1,1);
SetBit(kCanDelete);
Modified(kTRUE);
fMinimum = 0;
fMaximum = 1;
fObject = 0;
fMethod = "";
Double_t dx = PixeltoX(bordersize);
Double_t dy = PixeltoY(-bordersize);
TSliderBox *sbox = new TSliderBox(dx,dy,1-dx,1-dy,color,bordersize,-bordermode);
sbox->SetSlider(this);
fPrimitives->Add(sbox);
AppendPad();
}
//______________________________________________________________________________
TSlider::~TSlider()
{
//*-*-*-*-*-*-*-*-*-*-*slider default destructor*-*-*-*-*-*-*-*-*-*-*-*-*-*
//*-* =========================
}
//______________________________________________________________________________
void TSlider::Paint(Option_t *option)
{
//*-*-*-*-*-*-*-*-*-*-*Paint this slider with its current attributes*-*-*-*
//*-* =============================================
TPad::Paint(option);
}
//______________________________________________________________________________
void TSlider::SavePrimitive(ofstream &out, Option_t *)
{
// Save primitive as a C++ statement(s) on output stream out
TPad *padsav = (TPad*)gPad;
char quote = '"';
if (gROOT->ClassSaved(TSlider::Class())) {
out<<" ";
} else {
out<<" TSlider *";
}
out<<"slider = new TSlider("<<quote<<GetName()<<quote<<", "<<quote<<GetTitle()
<<quote
<<","<<fXlowNDC
<<","<<fYlowNDC
<<","<<fXlowNDC+fWNDC
<<","<<fYlowNDC+fHNDC
<<");"<<endl;
SaveFillAttributes(out,"slider",0,1001);
SaveLineAttributes(out,"slider",1,1,1);
if (GetBorderSize() != 2) {
out<<" slider->SetBorderSize("<<GetBorderSize()<<");"<<endl;
}
if (GetBorderMode() != -1) {
out<<" slider->SetBorderMode("<<GetBorderMode()<<");"<<endl;
}
Int_t lenMethod = strlen(GetMethod());
if (lenMethod > 0) {
out<<" slider->SetMethod("<<quote<<GetMethod()<<quote<<");"<<endl;
}
out<<" "<<padsav->GetName()<<"->cd();"<<endl;
padsav->cd();
}
//______________________________________________________________________________
void TSlider::SetRange(Double_t xmin, Double_t xmax)
{
//*-*-*-*-*-*-*-*-*-*-*Set Slider range in [0,1]*-*-*-*-*
//*-* =========================
TSliderBox *sbox = (TSliderBox*)fPrimitives->FindObject("TSliderBox");
if (sbox) {
if (fAbsWNDC > fAbsHNDC) {
sbox->SetX1(xmin);
sbox->SetX2(xmax);
} else {
sbox->SetY1(xmin);
sbox->SetY2(xmax);
}
}
fMinimum = xmin;
fMaximum = xmax;
Modified();
}
ROOT page - Class index - Class Hierarchy - Top of the page
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.