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