Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-12-15 10:30:28

0001 // @(#)root/base:$Id$
0002 // Author: Rene Brun   05/12/95
0003 
0004 /*************************************************************************
0005  * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
0006  * All rights reserved.                                                  *
0007  *                                                                       *
0008  * For the licensing terms see $ROOTSYS/LICENSE.                         *
0009  * For the list of contributors see $ROOTSYS/README/CREDITS.             *
0010  *************************************************************************/
0011 
0012 #ifndef ROOT_TVirtualPad
0013 #define ROOT_TVirtualPad
0014 
0015 
0016 //////////////////////////////////////////////////////////////////////////
0017 //                                                                      //
0018 // TVirtualPad                                                          //
0019 //                                                                      //
0020 // Abstract base class for Pads and Canvases                            //
0021 //                                                                      //
0022 //                                                                      //
0023 //////////////////////////////////////////////////////////////////////////
0024 
0025 
0026 #include "TObject.h"
0027 #include "TAttLine.h"
0028 #include "TAttFill.h"
0029 #include "TAttPad.h"
0030 #include "TQObject.h"
0031 
0032 #include "GuiTypes.h"
0033 #include "TString.h"
0034 #include "Buttons.h"
0035 
0036 // forward declarations
0037 class TAxis;
0038 class TObject;
0039 class TObjLink;
0040 class TView;
0041 class TCanvas;
0042 class TCanvasImp;
0043 class TH1F;
0044 class TFrame;
0045 class TLegend;
0046 class TBox;
0047 class TVirtualViewer3D;
0048 class TVirtualPadPainter;
0049 
0050 class TVirtualPad : public TObject, public TAttLine, public TAttFill,
0051                     public TAttPad, public TQObject {
0052 
0053 protected:
0054    Bool_t         fResizing;         //!true when resizing the pad
0055 
0056    void  *GetSender() override { return this; }  //used to set gTQSender
0057 
0058 public:
0059 
0060    /** small helper class to store/restore gPad context in TPad methods */
0061    class TContext {
0062        Bool_t fInteractive{kFALSE};
0063        TVirtualPad *fSaved{nullptr};
0064    public:
0065        TContext(Bool_t _interactive = kFALSE);
0066        TContext(TVirtualPad *gpad, Bool_t interactive = kFALSE, Bool_t not_null = kFALSE);
0067        ~TContext();
0068        auto IsInteractive() const { return fInteractive; }
0069        auto GetSaved() const { return fSaved; }
0070        void PadDeleted(TVirtualPad *pad);
0071    };
0072 
0073 
0074    TVirtualPad();
0075    TVirtualPad(const char *name, const char *title, Double_t xlow,
0076                Double_t ylow, Double_t xup, Double_t yup,
0077                Color_t color=19, Short_t bordersize=4, Short_t bordermode=1);
0078    virtual ~TVirtualPad();
0079    virtual void     AbsCoordinates(Bool_t set) = 0;
0080    virtual Double_t AbsPixeltoX(Double_t px) = 0;
0081    virtual Double_t AbsPixeltoY(Double_t py) = 0;
0082    virtual void     AbsPixeltoXY(Double_t xpixel, Double_t ypixel, Double_t &x, Double_t &y) = 0;
0083    virtual void     Add(TObject *obj, Option_t *opt = "", Bool_t modified = kTRUE) = 0;
0084    virtual void     AddFirst(TObject *obj, Option_t *opt = "", Bool_t modified = kTRUE) = 0;
0085    virtual void     AddExec(const char *name, const char *command) = 0;
0086    virtual TLegend *BuildLegend(Double_t x1=0.3, Double_t y1=0.21, Double_t x2=0.3, Double_t y2=0.21, const char *title="", Option_t *option = "") = 0;
0087    virtual TVirtualPad* cd(Int_t subpadnumber=0) = 0;
0088            void     Clear(Option_t *option="") override = 0;
0089    virtual Int_t    Clip(Double_t *x, Double_t *y, Double_t xclipl, Double_t yclipb, Double_t xclipr, Double_t yclipt) = 0;
0090    virtual void     Close(Option_t *option="") = 0;
0091    virtual void     CopyPixmap() = 0;
0092    virtual void     CopyPixmaps() = 0;
0093    virtual void     DeleteExec(const char *name) = 0;
0094    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;
0095            void     Draw(Option_t *option="") override = 0;
0096    virtual void     DrawClassObject(const TObject *obj, Option_t *option="") = 0;
0097    virtual TH1F    *DrawFrame(Double_t xmin, Double_t ymin, Double_t xmax, Double_t ymax, const char *title="") = 0;
0098    virtual void     ExecuteEventAxis(Int_t event, Int_t px, Int_t py, TAxis *axis) = 0;
0099    virtual void     UnZoomed() { Emit("UnZoomed()"); } // *SIGNAL*
0100    virtual Short_t  GetBorderMode() const = 0;
0101    virtual Short_t  GetBorderSize() const = 0;
0102    virtual Int_t    GetCanvasID() const = 0;
0103    virtual TCanvasImp *GetCanvasImp() const = 0;
0104    virtual TCanvas  *GetCanvas() const = 0;
0105    virtual TVirtualPad *GetVirtCanvas() const = 0;
0106    virtual Int_t    GetEvent() const  = 0;
0107    virtual Int_t    GetEventX() const = 0;
0108    virtual Int_t    GetEventY() const = 0;
0109    virtual TFrame   *GetFrame() = 0;
0110    virtual Color_t  GetHighLightColor() const = 0;
0111    virtual Int_t    GetNumber() const = 0;
0112    virtual void     GetRange(Double_t &x1, Double_t &y1, Double_t &x2, Double_t &y2) = 0;
0113    virtual void     GetRangeAxis(Double_t &xmin, Double_t &ymin, Double_t &xmax, Double_t &ymax) = 0;
0114    virtual void     GetPadPar(Double_t &xlow, Double_t &ylow, Double_t &xup, Double_t &yup) = 0;
0115    virtual Double_t GetXlowNDC() const = 0;
0116    virtual Double_t GetYlowNDC() const = 0;
0117    virtual Double_t GetWNDC() const = 0;
0118    virtual Double_t GetHNDC() const = 0;
0119    virtual UInt_t   GetWw() const = 0;
0120    virtual UInt_t   GetWh() const = 0;
0121    virtual Double_t GetAbsXlowNDC() const = 0;
0122    virtual Double_t GetAbsYlowNDC() const = 0;
0123    virtual Double_t GetAbsWNDC() const = 0;
0124    virtual Double_t GetAbsHNDC() const = 0;
0125    virtual Double_t GetAspectRatio() const = 0;
0126    virtual Double_t GetPhi() const = 0;
0127    virtual Double_t GetTheta() const = 0;
0128    virtual Double_t GetUxmin() const = 0;
0129    virtual Double_t GetUymin() const = 0;
0130    virtual Double_t GetUxmax() const = 0;
0131    virtual Double_t GetUymax() const = 0;
0132    virtual Bool_t   GetGridx() const = 0;
0133    virtual Bool_t   GetGridy() const = 0;
0134    virtual Int_t    GetTickx() const = 0;
0135    virtual Int_t    GetTicky() const = 0;
0136    virtual Double_t GetX1() const = 0;
0137    virtual Double_t GetX2() const = 0;
0138    virtual Double_t GetY1() const = 0;
0139    virtual Double_t GetY2() const = 0;
0140    virtual TList    *GetListOfPrimitives() const = 0;
0141    virtual TList    *GetListOfExecs() const = 0;
0142    virtual TObject  *GetPrimitive(const char *name) const = 0;
0143    virtual TObject  *GetSelected() const = 0;
0144    virtual TVirtualPad  *GetPad(Int_t subpadnumber) const = 0;
0145    virtual TObject  *GetPadPointer() const = 0;
0146    virtual TVirtualPad  *GetPadSave() const = 0;
0147    virtual TVirtualPad  *GetSelectedPad() const = 0;
0148    virtual TView    *GetView() const = 0;
0149    virtual Int_t    GetLogx() const = 0;
0150    virtual Int_t    GetLogy() const = 0;
0151    virtual Int_t    GetLogz() const = 0;
0152    virtual TVirtualPad  *GetMother() const = 0;
0153            const char *GetName() const override = 0;
0154            const char *GetTitle() const override = 0;
0155    virtual Int_t    GetPadPaint() const = 0;
0156    virtual Int_t    GetPixmapID() const = 0;
0157    virtual TObject *GetView3D() const = 0;
0158    virtual Bool_t   HasCrosshair() const = 0;
0159    virtual void     HighLight(Color_t col=kRed, Bool_t set=kTRUE) = 0;
0160    virtual Bool_t   HasFixedAspectRatio() const = 0;
0161    virtual Bool_t   IsBatch() const = 0;
0162    Bool_t           IsBeingResized() const { return fResizing; }
0163    virtual Bool_t   IsEditable() const = 0;
0164    virtual Bool_t   IsModified() const = 0;
0165    virtual Bool_t   IsRetained() const = 0;
0166    virtual Bool_t   IsVertical() const = 0;
0167    virtual Bool_t   IsWeb() const { return kFALSE; }
0168            void     ls(Option_t *option="") const override = 0;
0169    virtual void     Modified(Bool_t flag=1) = 0;
0170    virtual void     ModifiedUpdate() = 0;
0171    virtual Bool_t   OpaqueMoving() const = 0;
0172    virtual Bool_t   OpaqueResizing() const = 0;
0173    virtual Double_t PadtoX(Double_t x) const = 0;
0174    virtual Double_t PadtoY(Double_t y) const = 0;
0175            void     Paint(Option_t *option="") override = 0;
0176    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;
0177    virtual void     PaintBox(Double_t x1, Double_t y1, Double_t x2, Double_t y2, Option_t *option="") = 0;
0178    virtual void     PaintFillArea(Int_t n, Float_t *x, Float_t *y, Option_t *option="") = 0;
0179    virtual void     PaintFillArea(Int_t n, Double_t *x, Double_t *y, Option_t *option="") = 0;
0180    virtual void     PaintFillAreaNDC(Int_t n, Double_t *x, Double_t *y, Option_t *option="") = 0;
0181    virtual void     PaintPadFrame(Double_t xmin, Double_t ymin, Double_t xmax, Double_t ymax) = 0;
0182    virtual void     PaintLine(Double_t x1, Double_t y1, Double_t x2, Double_t y2) = 0;
0183    virtual void     PaintLineNDC(Double_t u1, Double_t v1,Double_t u2, Double_t v2) = 0;
0184    virtual void     PaintLine3D(Float_t *p1, Float_t *p2) = 0;
0185    virtual void     PaintLine3D(Double_t *p1, Double_t *p2) = 0;
0186    virtual void     PaintPolyLine(Int_t n, Float_t *x, Float_t *y, Option_t *option="") = 0;
0187    virtual void     PaintPolyLine(Int_t n, Double_t *x, Double_t *y, Option_t *option="") = 0;
0188    virtual void     PaintPolyLine3D(Int_t n, Double_t *p) = 0;
0189    virtual void     PaintPolyLineNDC(Int_t n, Double_t *x, Double_t *y, Option_t *option="") = 0;
0190    virtual void     PaintPolyMarker(Int_t n, Float_t *x, Float_t *y, Option_t *option="") = 0;
0191    virtual void     PaintPolyMarker(Int_t n, Double_t *x, Double_t *y, Option_t *option="") = 0;
0192    virtual void     PaintMarker3D(Double_t x, Double_t y, Double_t z) = 0;
0193    virtual void     PaintModified() = 0;
0194    virtual void     PaintText(Double_t x, Double_t y, const char *text) = 0;
0195    virtual void     PaintText(Double_t x, Double_t y, const wchar_t *text) = 0;
0196    virtual void     PaintTextNDC(Double_t u, Double_t v, const char *text) = 0;
0197    virtual void     PaintTextNDC(Double_t u, Double_t v, const wchar_t *text) = 0;
0198    virtual Double_t PixeltoX(Double_t px) = 0;
0199    virtual Double_t PixeltoY(Double_t py) = 0;
0200    virtual void     PixeltoXY(Double_t xpixel, Double_t ypixel, Double_t &x, Double_t &y) = 0;
0201            void     Pop() override = 0;
0202            void     Print(const char *filename="") const override = 0;
0203    virtual void     Print(const char *filename, Option_t *option) = 0;
0204    virtual void     Range(Double_t x1, Double_t y1, Double_t x2, Double_t y2) = 0;
0205    virtual void     RangeAxis(Double_t xmin, Double_t ymin, Double_t xmax, Double_t ymax) = 0;
0206    virtual void     RangeAxisChanged() { Emit("RangeAxisChanged()"); } // *SIGNAL*
0207            void     RecursiveRemove(TObject *obj) override = 0;
0208    virtual TObject *Remove(TObject *obj, Bool_t modified = kTRUE) = 0;
0209    virtual void     RedrawAxis(Option_t *option="") = 0;
0210    virtual void     ResetView3D(TObject *view = nullptr) = 0;
0211    virtual void     ResizePad(Option_t *option="") = 0;
0212            void     SaveAs(const char *filename="",Option_t *option="") const override = 0;
0213    virtual void     SetBatch(Bool_t batch=kTRUE) = 0;
0214    virtual void     SetBorderMode(Short_t bordermode) = 0;
0215    virtual void     SetBorderSize(Short_t bordersize) = 0;
0216    virtual void     SetCanvas(TCanvas *c) = 0;
0217    virtual void     SetCanvasSize(UInt_t ww, UInt_t wh) = 0;
0218    virtual void     SetCrosshair(Int_t crhair=1) = 0;
0219    virtual void     SetCursor(ECursor cursor) = 0;
0220    virtual void     SetDoubleBuffer(Int_t mode=1) = 0;
0221    virtual void     SetEditable(Bool_t mode=kTRUE) = 0;
0222    virtual void     SetFixedAspectRatio(Bool_t fixed = kTRUE) = 0;
0223    virtual void     SetGrid(Int_t valuex = 1, Int_t valuey = 1) = 0;
0224    virtual void     SetGridx(Int_t value = 1) = 0;
0225    virtual void     SetGridy(Int_t value = 1) = 0;
0226    virtual void     SetLogx(Int_t value = 1) = 0;
0227    virtual void     SetLogy(Int_t value = 1) = 0;
0228    virtual void     SetLogz(Int_t value = 1) = 0;
0229    virtual void     SetPad(const char *name, const char *title,
0230                            Double_t xlow, Double_t ylow, Double_t xup,
0231                            Double_t yup, Color_t color=35,
0232                            Short_t bordersize=5, Short_t bordermode=-1) = 0;
0233    virtual void     SetPad(Double_t xlow, Double_t ylow, Double_t xup, Double_t yup) = 0;
0234    virtual void     SetAttFillPS(Color_t color, Style_t style) = 0;
0235    virtual void     SetAttLinePS(Color_t color, Style_t style, Width_t lwidth) = 0;
0236    virtual void     SetAttMarkerPS(Color_t color, Style_t style, Size_t msize) = 0;
0237    virtual void     SetAttTextPS(Int_t align, Float_t angle, Color_t color, Style_t font, Float_t tsize) = 0;
0238    virtual void     SetName(const char *name) = 0;
0239    virtual void     SetSelected(TObject *obj) = 0;
0240    virtual void     SetTicks(Int_t valuex = 1, Int_t valuey = 1) = 0;
0241    virtual void     SetTickx(Int_t value = 1) = 0;
0242    virtual void     SetTicky(Int_t value = 1) = 0;
0243    virtual void     SetTitle(const char *title="") = 0;
0244    virtual void     SetTheta(Double_t theta=30) = 0;
0245    virtual void     SetPhi(Double_t phi=30) = 0;
0246    virtual void     SetToolTipText(const char *text, Long_t delayms = 1000) = 0;
0247    virtual void     SetVertical(Bool_t vert=kTRUE) = 0;
0248    virtual void     SetView(TView *view = nullptr) = 0;
0249    virtual void     SetViewer3D(TVirtualViewer3D * /*viewer3d*/) {}
0250    virtual void     ShowGuidelines(TObject *object, const Int_t event, const char mode = 'i', const bool cling = true) = 0;
0251    virtual TObject *WaitPrimitive(const char *pname="", const char *emode="") = 0;
0252    virtual void     Update() = 0;
0253    virtual void     UpdateAsync() = 0;
0254    virtual Int_t    UtoAbsPixel(Double_t u) const = 0;
0255    virtual Int_t    VtoAbsPixel(Double_t v) const = 0;
0256    virtual Int_t    UtoPixel(Double_t u) const = 0;
0257    virtual Int_t    VtoPixel(Double_t v) const = 0;
0258    virtual Int_t    XtoAbsPixel(Double_t x) const = 0;
0259    virtual Int_t    YtoAbsPixel(Double_t y) const = 0;
0260    virtual void     XYtoAbsPixel(Double_t x, Double_t y, Int_t &xpixel, Int_t &ypixel) const = 0;
0261    virtual void     XYtoAbsPixel(Double_t x, Double_t y, Double_t &xpixel, Double_t &ypixel) const = 0;
0262    virtual Double_t XtoPad(Double_t x) const = 0;
0263    virtual Double_t YtoPad(Double_t y) const = 0;
0264    virtual Int_t    XtoPixel(Double_t x) const = 0;
0265    virtual Int_t    YtoPixel(Double_t y) const = 0;
0266    virtual void     XYtoPixel(Double_t x, Double_t y, Int_t &xpixel, Int_t &ypixel) const = 0;
0267    virtual void     XYtoPixel(Double_t x, Double_t y, Double_t &xpixel, Double_t &ypixel) const = 0;
0268 
0269    virtual Int_t    IncrementPaletteColor(Int_t i, TString opt) = 0;
0270    virtual Int_t    NextPaletteColor() = 0;
0271 
0272    virtual Bool_t   PlaceBox(TObject *o, Double_t w, Double_t h, Double_t &xl, Double_t &yb, Option_t* opt = "lb") = 0;
0273 
0274    virtual TObject *CreateToolTip(const TBox *b, const char *text, Long_t delayms) = 0;
0275    virtual void     DeleteToolTip(TObject *tip) = 0;
0276    virtual void     ResetToolTip(TObject *tip) = 0;
0277    virtual void     CloseToolTip(TObject *tip) = 0;
0278 
0279    virtual TVirtualViewer3D *GetViewer3D(Option_t * type = "") = 0;
0280    virtual Bool_t            HasViewer3D() const = 0;
0281    virtual void              ReleaseViewer3D(Option_t * type = "")  = 0;
0282 
0283    virtual Int_t               GetGLDevice() = 0;
0284    virtual void                SetCopyGLDevice(Bool_t copy) = 0;
0285    virtual TVirtualPadPainter *GetPainter() = 0;
0286 
0287    virtual Bool_t PadInSelectionMode() const;
0288    virtual Bool_t PadInHighlightMode() const;
0289 
0290    virtual void PushTopLevelSelectable(TObject *top);
0291    virtual void PushSelectableObject(TObject *obj);
0292    virtual void PopTopLevelSelectable();
0293 
0294    static TVirtualPad *&Pad();
0295 
0296    ClassDefOverride(TVirtualPad,3)  //Abstract base class for Pads and Canvases
0297 };
0298 
0299 //
0300 //Small scope-guard class to add/remove object's into pad's stack of selectable objects.
0301 //Does nothing, unless you implement non-standard picking.
0302 //
0303 
0304 class TPickerStackGuard {
0305 public:
0306    TPickerStackGuard(TObject *obj);
0307    ~TPickerStackGuard();
0308 
0309 private:
0310    TPickerStackGuard(const TPickerStackGuard &rhs) = delete;
0311    TPickerStackGuard &operator = (const TPickerStackGuard &rhs) = delete;
0312 };
0313 
0314 
0315 #define gPad (TVirtualPad::Pad())
0316 R__EXTERN Int_t (*gThreadXAR)(const char *xact, Int_t nb, void **ar, Int_t *iret);
0317 
0318 #endif