Logo ROOT  
Reference Guide
TSlider.cxx
Go to the documentation of this file.
1// @(#)root/gpad:$Id$
2// Author: Rene Brun 23/11/96
3
4/*************************************************************************
5 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
6 * All rights reserved. *
7 * *
8 * For the licensing terms see $ROOTSYS/LICENSE. *
9 * For the list of contributors see $ROOTSYS/README/CREDITS. *
10 *************************************************************************/
11
12#include "TROOT.h"
13#include "TSlider.h"
14#include "TSliderBox.h"
15
16#include <cstring>
17#include <iostream>
18
20
21/** \class TSlider
22\ingroup gpad
23
24A specialized TPad including a TSliderBox object.
25The TSliderBox can be moved in the pad.
26
27Slider drawing options include the possibility to change the slider
28starting and ending positions or only one of them.
29
30The current slider position can be retrieved via the functions
31TSlider::GetMinimum and TSlider::GetMaximum
32 These two functions return numbers in the range [0,1].
33
34If a method has been set (via TSlider::SetMethod), the expression is
35executed via the interpreter when the button 1 is released.
36
37 if no method has been set, and an object is referenced (TSlider::SetObject
38 has been called), while the slider is being moved/resized,
39 the object ExecuteEvent function is called.
40
41### Example 1 using TSlider::SetMethod
42
43#### macro xyslider.C
44
45~~~ {.cpp}
46void xyslider()
47{
48 // Example of macro featuring two sliders
49 TFile *f = new TFile("hsimple.root");
50 TH2F *hpxpy = (TH2F*)f->Get("hpxpy");
51 TCanvas *c1 = new TCanvas("c1");
52 TPad *pad = new TPad("pad","Color plot pad",0.1,0.1,0.98,0.98);
53 pad->Draw();
54 pad->cd();
55 hpxpy->Draw("COLZ");
56 c1->cd();
57
58 // Create two sliders in main canvas. When button1 will be released
59 // the macro action.C will be called.
60 TSlider *xslider = new TSlider("xslider","x",0.1,0.02,0.98,0.08);
61 xslider->SetMethod(".x action.C");
62 TSlider *yslider = new TSlider("yslider","y",0.02,0.1,0.06,0.98);
63 yslider->SetMethod(".x action.C");
64}
65~~~
66
67#### macro action.C
68
69~~~ {.cpp}
70void action()
71{
72 Int_t nx = hpxpy->GetXaxis()->GetNbins();
73 Int_t ny = hpxpy->GetYaxis()->GetNbins();
74 Int_t binxmin = nx*xslider->GetMinimum();
75 Int_t binxmax = nx*xslider->GetMaximum();
76 hpxpy->GetXaxis()->SetRange(binxmin,binxmax);
77 Int_t binymin = ny*yslider->GetMinimum();
78 Int_t binymax = ny*yslider->GetMaximum();
79 hpxpy->GetYaxis()->SetRange(binymin,binymax);
80 pad->cd();
81 hpxpy->Draw("COLZ");
82 c1->Update();
83}
84~~~
85
86The canvas and the sliders created in the above macro are shown in the picture
87below.
88
89\image html gpad_slider.png
90
91### Example 2 using TSlider::SetObject macro xyslider.C
92
93 Same example as above. Instead of TSlider::SetMethod:
94~~~ {.cpp}
95 Myclass *obj = new Myclass(); // Myclass derived from TObject
96 xslider->SetObject(obj);
97 yslider->SetObject(obj);
98~~~
99
100When the slider will be changed, MyClass::ExecuteEvent will be called with px=0
101and py = 0
102*/
103
104////////////////////////////////////////////////////////////////////////////////
105/// slider default constructor.
106
108{
109}
110
111////////////////////////////////////////////////////////////////////////////////
112/// Slider normal constructor.
113///
114/// x1,y1,x2,y2 are in pad user coordinates
115
116TSlider::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)
117 :TPad(name,title,0.1,0.1,0.9,0.9,color,bordersize,bordermode)
118{
119 if (!gPad) return;
120
121 Double_t x1pad = gPad->GetX1();
122 Double_t x2pad = gPad->GetX2();
123 Double_t y1pad = gPad->GetY1();
124 Double_t y2pad = gPad->GetY2();
125 Double_t xmin = (x1-x1pad)/(x2pad-x1pad);
126 Double_t ymin = (y1-y1pad)/(y2pad-y1pad);
127 Double_t xmax = (x2-x1pad)/(x2pad-x1pad);
128 Double_t ymax = (y2-y1pad)/(y2pad-y1pad);
130 Range(0,0,1,1);
131
134
135 Double_t dx = PixeltoX(bordersize);
136 Double_t dy = PixeltoY(-bordersize);
137 TSliderBox *sbox = new TSliderBox(dx,dy,1-dx,1-dy,color,bordersize,-bordermode);
138 sbox->SetSlider(this);
139 fPrimitives->Add(sbox);
140 AppendPad();
141}
142
143////////////////////////////////////////////////////////////////////////////////
144/// slider default destructor.
145
147{
148}
149
150////////////////////////////////////////////////////////////////////////////////
151/// Save primitive as a C++ statement(s) on output stream out
152
153void TSlider::SavePrimitive(std::ostream &out, Option_t * /*= ""*/)
154{
155 char quote = '"';
156 if (gROOT->ClassSaved(TSlider::Class()))
157 out<<" ";
158 else
159 out<<" TSlider *";
160
161 auto sbox = dynamic_cast<TSliderBox*>(fPrimitives->FindObject("TSliderBox"));
162
163 out<<"slider = new TSlider("<<quote<<GetName()<<quote<<", "<<quote<<GetTitle()<<quote
164 <<", "<< gPad->GetX1() + (gPad->GetX2() - gPad->GetX1()) * GetXlowNDC()
165 <<", "<< gPad->GetY1() + (gPad->GetY2() - gPad->GetY1()) * GetYlowNDC()
166 <<", "<< gPad->GetX1() + (gPad->GetX2() - gPad->GetX1()) * (GetXlowNDC() + GetWNDC())
167 <<", "<< gPad->GetY1() + (gPad->GetY2() - gPad->GetY1()) * (GetYlowNDC() + GetHNDC())
168 <<", "<< (sbox ? sbox->GetFillColor() : GetFillColor()) <<", "<< GetBorderSize() <<", "<< GetBorderMode() <<");"<<std::endl;
169
170 SaveFillAttributes(out, "slider", 16, 1001);
171 SaveLineAttributes(out, "slider", 1, 1, 1);
172
173 out<<" slider->SetRange("<< fMinimum <<", "<< fMaximum <<");"<<std::endl;
174
175 TString cmethod = GetMethod();
176 if (cmethod.Length() > 0)
177 out<<" slider->SetMethod("<<quote<<cmethod.ReplaceSpecialCppChars()<<quote<<");"<<std::endl;
178}
179
180////////////////////////////////////////////////////////////////////////////////
181/// Set Slider range in [0,1]
182
184{
185 auto sbox = dynamic_cast<TSliderBox*>(fPrimitives->FindObject("TSliderBox"));
186
187 if (sbox) {
188 if (fAbsWNDC > fAbsHNDC) {
189 sbox->SetX1(xmin);
190 sbox->SetX2(xmax);
191 } else {
192 sbox->SetY1(xmin);
193 sbox->SetY2(xmax);
194 }
195 }
196 fMinimum = xmin;
197 fMaximum = xmax;
198 Modified();
199}
short Color_t
Definition: RtypesCore.h:92
short Short_t
Definition: RtypesCore.h:39
const Bool_t kTRUE
Definition: RtypesCore.h:100
const char Option_t
Definition: RtypesCore.h:66
#define ClassImp(name)
Definition: Rtypes.h:375
Option_t Option_t TPoint TPoint const char x2
Option_t Option_t TPoint TPoint const char x1
Option_t Option_t TPoint TPoint const char y2
Option_t Option_t TPoint TPoint const char y1
char name[80]
Definition: TGX11.cxx:110
float xmin
Definition: THbookFile.cxx:95
float ymin
Definition: THbookFile.cxx:95
float xmax
Definition: THbookFile.cxx:95
float ymax
Definition: THbookFile.cxx:95
#define gROOT
Definition: TROOT.h:405
#define gPad
Definition: TVirtualPad.h:302
virtual Color_t GetFillColor() const
Return the fill area color.
Definition: TAttFill.h:30
virtual void SaveFillAttributes(std::ostream &out, const char *name, Int_t coldef=1, Int_t stydef=1001)
Save fill attributes as C++ statement(s) on output stream out.
Definition: TAttFill.cxx:236
virtual void SaveLineAttributes(std::ostream &out, const char *name, Int_t coldef=1, Int_t stydef=1, Int_t widdef=1)
Save line attributes as C++ statement(s) on output stream out.
Definition: TAttLine.cxx:273
virtual void SetX1(Double_t x1)
Definition: TBox.h:62
TObject * FindObject(const char *name) const override
Find an object in this list using its name.
Definition: TList.cxx:578
void Add(TObject *obj) override
Definition: TList.h:81
virtual void AppendPad(Option_t *option="")
Append graphics object to current pad.
Definition: TObject.cxx:184
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
Definition: TObject.cxx:774
@ kCanDelete
if object in a list can be deleted
Definition: TObject.h:62
The most important graphics class in the ROOT system.
Definition: TPad.h:28
Short_t GetBorderMode() const override
Definition: TPad.h:197
Double_t fAbsWNDC
Absolute Width of pad along X in NDC.
Definition: TPad.h:71
const char * GetTitle() const override
Returns title of object.
Definition: TPad.h:259
void SetPad(const char *name, const char *title, Double_t xlow, Double_t ylow, Double_t xup, Double_t yup, Color_t color=35, Short_t bordersize=5, Short_t bordermode=-1) override
Set all pad parameters.
Definition: TPad.cxx:6005
void Range(Double_t x1, Double_t y1, Double_t x2, Double_t y2) override
Set world coordinate system for the pad.
Definition: TPad.cxx:5193
Double_t PixeltoX(Int_t px) override
Definition: TPad.h:433
void Modified(Bool_t flag=1) override
Definition: TPad.h:417
Double_t fAbsHNDC
Absolute Height of pad along Y in NDC.
Definition: TPad.h:72
Short_t GetBorderSize() const override
Definition: TPad.h:198
TList * fPrimitives
->List of primitives (subpads)
Definition: TPad.h:107
Double_t GetXlowNDC() const override
Definition: TPad.h:210
Double_t GetYlowNDC() const override
Definition: TPad.h:211
Double_t PixeltoY(Int_t py) override
Definition: TPad.h:441
Double_t GetWNDC() const override
Get width of pad along X in Normalized Coordinates (NDC)
Definition: TPad.h:213
Double_t GetHNDC() const override
Get height of pad along Y in Normalized Coordinates (NDC)
Definition: TPad.h:215
const char * GetName() const override
Returns name of object.
Definition: TPad.h:258
The moving box in a TSlider.
Definition: TSliderBox.h:20
void SetSlider(TSlider *slider)
Definition: TSliderBox.h:38
A specialized TPad including a TSliderBox object.
Definition: TSlider.h:17
TSlider()
slider default constructor.
Definition: TSlider.cxx:107
static TClass * Class()
virtual const char * GetMethod() const
Definition: TSlider.h:36
Double_t fMaximum
Slider maximum value in [0,1].
Definition: TSlider.h:21
void SavePrimitive(std::ostream &out, Option_t *option="") override
Save primitive as a C++ statement(s) on output stream out.
Definition: TSlider.cxx:153
virtual ~TSlider()
slider default destructor.
Definition: TSlider.cxx:146
virtual void SetRange(Double_t xmin=0, Double_t xmax=1)
Set Slider range in [0,1].
Definition: TSlider.cxx:183
Double_t fMinimum
Slider minimum value in [0,1].
Definition: TSlider.h:20
Basic string class.
Definition: TString.h:136
Ssiz_t Length() const
Definition: TString.h:410
TString & ReplaceSpecialCppChars()
Find special characters which are typically used in printf() calls and replace them by appropriate es...
Definition: TString.cxx:1103