1    	// @(#)root/base:$Id$
2    	// Author: Rene Brun   05/12/95
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   	#ifndef ROOT_TVirtualPad
13   	#define ROOT_TVirtualPad
14   	
15   	
16   	//////////////////////////////////////////////////////////////////////////
17   	//                                                                      //
18   	// TVirtualPad                                                          //
19   	//                                                                      //
20   	// Abstract base class for Pads and Canvases                            //
21   	//                                                                      //
22   	//                                                                      //
23   	//////////////////////////////////////////////////////////////////////////
24   	
25   	#ifndef ROOT_TAttPad
26   	#include "TAttPad.h"
27   	#endif
28   	
29   	#ifndef ROOT_TVirtualX
30   	#include "TVirtualX.h"
31   	#endif
32   	
33   	#ifndef ROOT_TString
34   	#include "TString.h"
35   	#endif
36   	
37   	#ifndef ROOT_Buttons
38   	#include "Buttons.h"
39   	#endif
40   	
41   	#ifndef ROOT_TQObject
42   	#include "TQObject.h"
43   	#endif
44   	
45   	// forward declarations
46   	class TAxis;
47   	class TObject;
48   	class TObjLink;
49   	class TView;
50   	class TCanvas;
51   	class TCanvasImp;
52   	class TH1F;
53   	class TFrame;
54   	class TLegend;
55   	class TBox;
56   	class TVirtualViewer3D;
57   	class TVirtualPadPainter;
58   	
59   	class TVirtualPad : public TObject, public TAttLine, public TAttFill,
60   	                    public TAttPad, public TQObject {
61   	
62   	protected:
63   	   Bool_t         fResizing;         //!true when resizing the pad
64   	
65   	   virtual void  *GetSender() { return this; }  //used to set gTQSender
66   	
67   	public:
68   	   TVirtualPad();
69   	   TVirtualPad(const char *name, const char *title, Double_t xlow,
70   	               Double_t ylow, Double_t xup, Double_t yup,
71   	               Color_t color=19, Short_t bordersize=4, Short_t bordermode=1);
72   	   virtual ~TVirtualPad();
73   	   virtual void     AbsCoordinates(Bool_t set) = 0;
74   	   virtual Double_t AbsPixeltoX(Int_t px) = 0;
75   	   virtual Double_t AbsPixeltoY(Int_t py) = 0;
76   	   virtual void     AddExec(const char *name, const char *command) = 0;
77   	   virtual TLegend *BuildLegend(Double_t x1=0.5, Double_t y1=0.67, Double_t x2=0.88, Double_t y2=0.88, const char *title="") = 0;
78   	   virtual TVirtualPad* cd(Int_t subpadnumber=0) = 0;
79   	   virtual void     Clear(Option_t *option="") = 0;
80   	   virtual void     Close(Option_t *option="") = 0;
81   	   virtual void     CopyPixmap() = 0;
82   	   virtual void     CopyPixmaps() = 0;
83   	   virtual void     DeleteExec(const char *name) = 0;
84   	   virtual void     Divide(Int_t nx=1, Int_t ny=1, Float_t xmargin=0.01, Float_t ymargin=0.01, Int_t color=0) = 0;
85   	   virtual void     Draw(Option_t *option="") = 0;
86   	   virtual void     DrawClassObject(const TObject *obj, Option_t *option="") = 0;
87   	   virtual TH1F    *DrawFrame(Double_t xmin, Double_t ymin, Double_t xmax, Double_t ymax, const char *title="") = 0;
88   	   virtual void     ExecuteEventAxis(Int_t event, Int_t px, Int_t py, TAxis *axis) = 0;
89   	   virtual Short_t  GetBorderMode() const = 0;
90   	   virtual Short_t  GetBorderSize() const = 0;
91   	   virtual Int_t    GetCanvasID() const = 0;
92   	   virtual TCanvasImp *GetCanvasImp() const = 0;
93   	   virtual TCanvas  *GetCanvas() const = 0;
94   	   virtual TVirtualPad *GetVirtCanvas() const = 0;
95   	   virtual Int_t    GetEvent() const  = 0;
96   	   virtual Int_t    GetEventX() const = 0;
97   	   virtual Int_t    GetEventY() const = 0;
98   	   virtual TFrame   *GetFrame() = 0;
99   	   virtual Color_t  GetHighLightColor() const = 0;
100  	   virtual Int_t    GetNumber() const = 0;
101  	   virtual void     GetRange(Double_t &x1, Double_t &y1, Double_t &x2, Double_t &y2) = 0;
102  	   virtual void     GetRangeAxis(Double_t &xmin, Double_t &ymin, Double_t &xmax, Double_t &ymax) = 0;
103  	   virtual void     GetPadPar(Double_t &xlow, Double_t &ylow, Double_t &xup, Double_t &yup) = 0;
104  	   virtual Double_t GetXlowNDC() const = 0;
105  	   virtual Double_t GetYlowNDC() const = 0;
106  	   virtual Double_t GetWNDC() const = 0;
107  	   virtual Double_t GetHNDC() const = 0;
108  	   virtual UInt_t   GetWw() const = 0;
109  	   virtual UInt_t   GetWh() const = 0;
110  	   virtual Double_t GetAbsXlowNDC() const = 0;
111  	   virtual Double_t GetAbsYlowNDC() const = 0;
112  	   virtual Double_t GetAbsWNDC() const = 0;
113  	   virtual Double_t GetAbsHNDC() const = 0;
114  	   virtual Double_t GetAspectRatio() const = 0;
115  	   virtual Double_t GetPhi() const = 0;
116  	   virtual Double_t GetTheta() const = 0;
117  	   virtual Double_t GetUxmin() const = 0;
118  	   virtual Double_t GetUymin() const = 0;
119  	   virtual Double_t GetUxmax() const = 0;
120  	   virtual Double_t GetUymax() const = 0;
121  	   virtual Bool_t   GetGridx() const = 0;
122  	   virtual Bool_t   GetGridy() const = 0;
123  	   virtual Int_t    GetTickx() const = 0;
124  	   virtual Int_t    GetTicky() const = 0;
125  	   virtual Double_t GetX1() const = 0;
126  	   virtual Double_t GetX2() const = 0;
127  	   virtual Double_t GetY1() const = 0;
128  	   virtual Double_t GetY2() const = 0;
129  	   virtual TList    *GetListOfPrimitives() const = 0;
130  	   virtual TList    *GetListOfExecs() const = 0;
131  	   virtual TObject  *GetPrimitive(const char *name) const = 0;
132  	   virtual TObject  *GetSelected() const = 0;
133  	   virtual TVirtualPad  *GetPad(Int_t subpadnumber) const = 0;
134  	   virtual TObject  *GetPadPointer() const = 0;
135  	   virtual TVirtualPad  *GetPadSave() const = 0;
136  	   virtual TVirtualPad  *GetSelectedPad() const = 0;
137  	   virtual TView    *GetView() const = 0;
138  	   virtual Int_t    GetLogx() const = 0;
139  	   virtual Int_t    GetLogy() const = 0;
140  	   virtual Int_t    GetLogz() const = 0;
141  	   virtual TVirtualPad  *GetMother() const = 0;
142  	   virtual const char *GetName() const = 0;
143  	   virtual const char *GetTitle() const = 0;
144  	   virtual Int_t    GetPadPaint() const = 0;
145  	   virtual Int_t    GetPixmapID() const = 0;
146  	   virtual TObject *GetView3D() const = 0;
147  	   virtual Bool_t   HasCrosshair() const = 0;
148  	   virtual void     HighLight(Color_t col=kRed, Bool_t set=kTRUE) = 0;
149  	   virtual Bool_t   HasFixedAspectRatio() const = 0;
150  	   virtual Bool_t   IsBatch() const = 0;
151  	   Bool_t           IsBeingResized() const { return fResizing; }
152  	   virtual Bool_t   IsEditable() const = 0;
153  	   virtual Bool_t   IsModified() const = 0;
154  	   virtual Bool_t   IsRetained() const = 0;
155  	   virtual Bool_t   IsVertical() const = 0;
156  	   virtual void     ls(Option_t *option="") const = 0;
157  	   virtual void     Modified(Bool_t flag=1) = 0;
158  	   virtual Bool_t   OpaqueMoving() const = 0;
159  	   virtual Bool_t   OpaqueResizing() const = 0;
160  	   virtual Double_t PadtoX(Double_t x) const = 0;
161  	   virtual Double_t PadtoY(Double_t y) const = 0;
162  	   virtual void     Paint(Option_t *option="") = 0;
163  	   virtual void     PaintBorderPS(Double_t xl,Double_t yl,Double_t xt,Double_t yt,Int_t bmode,Int_t bsize,Int_t dark,Int_t light) = 0;
164  	   virtual void     PaintBox(Double_t x1, Double_t y1, Double_t x2, Double_t y2, Option_t *option="") = 0;
165  	   virtual void     PaintFillArea(Int_t n, Float_t *x, Float_t *y, Option_t *option="") = 0;
166  	   virtual void     PaintFillArea(Int_t n, Double_t *x, Double_t *y, Option_t *option="") = 0;
167  	   virtual void     PaintPadFrame(Double_t xmin, Double_t ymin, Double_t xmax, Double_t ymax) = 0;
168  	   virtual void     PaintLine(Double_t x1, Double_t y1, Double_t x2, Double_t y2) = 0;
169  	   virtual void     PaintLineNDC(Double_t u1, Double_t v1,Double_t u2, Double_t v2) = 0;
170  	   virtual void     PaintLine3D(Float_t *p1, Float_t *p2) = 0;
171  	   virtual void     PaintLine3D(Double_t *p1, Double_t *p2) = 0;
172  	   virtual void     PaintPolyLine(Int_t n, Float_t *x, Float_t *y, Option_t *option="") = 0;
173  	   virtual void     PaintPolyLine(Int_t n, Double_t *x, Double_t *y, Option_t *option="") = 0;
174  	   virtual void     PaintPolyLine3D(Int_t n, Double_t *p) = 0;
175  	   virtual void     PaintPolyLineNDC(Int_t n, Double_t *x, Double_t *y, Option_t *option="") = 0;
176  	   virtual void     PaintPolyMarker(Int_t n, Float_t *x, Float_t *y, Option_t *option="") = 0;
177  	   virtual void     PaintPolyMarker(Int_t n, Double_t *x, Double_t *y, Option_t *option="") = 0;
178  	   virtual void     PaintModified() = 0;
179  	   virtual void     PaintText(Double_t x, Double_t y, const char *text) = 0;
180  	   virtual void     PaintText(Double_t x, Double_t y, const wchar_t *text) = 0;
181  	   virtual void     PaintTextNDC(Double_t u, Double_t v, const char *text) = 0;
182  	   virtual void     PaintTextNDC(Double_t u, Double_t v, const wchar_t *text) = 0;
183  	   virtual Double_t PixeltoX(Int_t px) = 0;
184  	   virtual Double_t PixeltoY(Int_t py) = 0;
185  	   virtual void     Pop() = 0;
186  	   virtual void     Print(const char *filename="") const = 0;
187  	   virtual void     Print(const char *filename, Option_t *option) = 0;
188  	   virtual void     Range(Double_t x1, Double_t y1, Double_t x2, Double_t y2) = 0;
189  	   virtual void     RangeAxis(Double_t xmin, Double_t ymin, Double_t xmax, Double_t ymax) = 0;
190  	   virtual void     RecursiveRemove(TObject *obj) = 0;
191  	   virtual void     RedrawAxis(Option_t *option="") = 0;
192  	   virtual void     ResetView3D(TObject *view=0) = 0;
193  	   virtual void     ResizePad(Option_t *option="") = 0;
194  	   virtual void     SaveAs(const char *filename="",Option_t *option="") const = 0;
195  	   virtual void     SetBatch(Bool_t batch=kTRUE) = 0;
196  	   virtual void     SetBorderMode(Short_t bordermode) = 0;
197  	   virtual void     SetBorderSize(Short_t bordersize) = 0;
198  	   virtual void     SetCanvas(TCanvas *c) = 0;
199  	   virtual void     SetCanvasSize(UInt_t ww, UInt_t wh) = 0;
200  	   virtual void     SetCrosshair(Int_t crhair=1) = 0;
201  	   virtual void     SetCursor(ECursor cursor) = 0;
202  	   virtual void     SetDoubleBuffer(Int_t mode=1) = 0;
203  	   virtual void     SetEditable(Bool_t mode=kTRUE) = 0;
204  	   virtual void     SetFixedAspectRatio(Bool_t fixed = kTRUE) = 0;
205  	   virtual void     SetGrid(Int_t valuex = 1, Int_t valuey = 1) = 0;
206  	   virtual void     SetGridx(Int_t value = 1) = 0;
207  	   virtual void     SetGridy(Int_t value = 1) = 0;
208  	   virtual void     SetLogx(Int_t value = 1) = 0;
209  	   virtual void     SetLogy(Int_t value = 1) = 0;
210  	   virtual void     SetLogz(Int_t value = 1) = 0;
211  	   virtual void     SetPad(const char *name, const char *title,
212  	                           Double_t xlow, Double_t ylow, Double_t xup,
213  	                           Double_t yup, Color_t color=35,
214  	                           Short_t bordersize=5, Short_t bordermode=-1) = 0;
215  	   virtual void     SetPad(Double_t xlow, Double_t ylow, Double_t xup, Double_t yup) = 0;
216  	   virtual void     SetAttFillPS(Color_t color, Style_t style) = 0;
217  	   virtual void     SetAttLinePS(Color_t color, Style_t style, Width_t lwidth) = 0;
218  	   virtual void     SetAttMarkerPS(Color_t color, Style_t style, Size_t msize) = 0;
219  	   virtual void     SetAttTextPS(Int_t align, Float_t angle, Color_t color, Style_t font, Float_t tsize) = 0;
220  	   virtual void     SetName(const char *name) = 0;
221  	   virtual void     SetSelected(TObject *obj) = 0;
222  	   virtual void     SetTicks(Int_t valuex = 1, Int_t valuey = 1) = 0;
223  	   virtual void     SetTickx(Int_t value = 1) = 0;
224  	   virtual void     SetTicky(Int_t value = 1) = 0;
225  	   virtual void     SetTitle(const char *title="") = 0;
226  	   virtual void     SetTheta(Double_t theta=30) = 0;
227  	   virtual void     SetPhi(Double_t phi=30) = 0;
228  	   virtual void     SetToolTipText(const char *text, Long_t delayms = 1000) = 0;
229  	   virtual void     SetVertical(Bool_t vert=kTRUE) = 0;
230  	   virtual void     SetView(TView *view=0) = 0;
231  	   virtual void     SetViewer3D(TVirtualViewer3D * /*viewer3d*/) {}
232  	   virtual void     ShowGuidelines(TObject *object, const Int_t event, const char mode = 'i', const bool cling = true) = 0;
233  	   virtual TObject *WaitPrimitive(const char *pname="", const char *emode="") = 0;
234  	   virtual void     Update() = 0;
235  	   virtual Int_t    UtoAbsPixel(Double_t u) const = 0;
236  	   virtual Int_t    VtoAbsPixel(Double_t v) const = 0;
237  	   virtual Int_t    UtoPixel(Double_t u) const = 0;
238  	   virtual Int_t    VtoPixel(Double_t v) const = 0;
239  	   virtual Int_t    XtoAbsPixel(Double_t x) const = 0;
240  	   virtual Int_t    YtoAbsPixel(Double_t y) const = 0;
241  	   virtual Double_t XtoPad(Double_t x) const = 0;
242  	   virtual Double_t YtoPad(Double_t y) const = 0;
243  	   virtual Int_t    XtoPixel(Double_t x) const = 0;
244  	   virtual Int_t    YtoPixel(Double_t y) const = 0;
245  	
246  	   virtual TObject *CreateToolTip(const TBox *b, const char *text, Long_t delayms) = 0;
247  	   virtual void     DeleteToolTip(TObject *tip) = 0;
248  	   virtual void     ResetToolTip(TObject *tip) = 0;
249  	   virtual void     CloseToolTip(TObject *tip) = 0;
250  	
251  	   virtual TVirtualViewer3D *GetViewer3D(Option_t * type = "") = 0;
252  	   virtual Bool_t            HasViewer3D() const = 0;
253  	   virtual void              ReleaseViewer3D(Option_t * type = "")  = 0;
254  	
255  	   virtual Int_t               GetGLDevice() = 0;
256  	   virtual void                SetCopyGLDevice(Bool_t copy) = 0;
257  	   virtual TVirtualPadPainter *GetPainter() = 0;
258  	   
259  	   virtual Bool_t PadInSelectionMode() const;
260  	   virtual Bool_t PadInHighlightMode() const;
261  	   
262  	   virtual void PushTopLevelSelectable(TObject *top);
263  	   virtual void PushSelectableObject(TObject *obj);
264  	   virtual void PopTopLevelSelectable();
265  	
266  	   static TVirtualPad *&Pad();
267  	
268  	   ClassDef(TVirtualPad,2)  //Abstract base class for Pads and Canvases
269  	};
270  	
271  	//
272  	//Small scope-guard class to add/remove object's into pad's stack of selectable objects.
273  	//Does nothing, unless you implement non-standard picking.
274  	//
275  	
276  	class TPickerStackGuard {
277  	public:
278  	   TPickerStackGuard(TObject *obj);
279  	   ~TPickerStackGuard();
280  	   
281  	private:
282  	   TPickerStackGuard(const TPickerStackGuard &rhs);
283  	   TPickerStackGuard &operator = (const TPickerStackGuard &rhs);
284  	};
285  	
286  	
287  	#ifndef __CINT__
288  	#define gPad (TVirtualPad::Pad())
289  	#endif
290  	R__EXTERN Int_t (*gThreadXAR)(const char *xact, Int_t nb, void **ar, Int_t *iret);
291  	
292  	#endif
293