From fc8af7521c9ca9907591eb2a239baaa3a61b079a Mon Sep 17 00:00:00 2001
From: Sergey Linev <S.Linev@gsi.de>
Date: Wed, 9 Aug 2017 20:05:04 +0200
Subject: [PATCH] webgui: provide dictionary for drawable and pad

Still some problem to store canvas with any sub-pads inside
---
 core/base/inc/LinkDef3.h         |  4 +++
 graf2d/gpad/inc/LinkDef.h        |  4 +++
 graf2d/gpad/v7/inc/ROOT/TPad.hxx | 44 ++++++++++++++++++--------------
 3 files changed, 33 insertions(+), 19 deletions(-)

diff --git a/core/base/inc/LinkDef3.h b/core/base/inc/LinkDef3.h
index b2ae35584ad..6bf92595e7d 100644
--- a/core/base/inc/LinkDef3.h
+++ b/core/base/inc/LinkDef3.h
@@ -268,4 +268,8 @@
 #pragma link C++ class TParameter<Long_t>+;
 #pragma link C++ class TParameter<Long64_t>+;
 
+#ifdef ROOT7_TDrawable
+#pragma link C++ class ROOT::Experimental::TDrawable+;
+#endif
+
 #endif
diff --git a/graf2d/gpad/inc/LinkDef.h b/graf2d/gpad/inc/LinkDef.h
index 2fdbbe05970..569949431aa 100644
--- a/graf2d/gpad/inc/LinkDef.h
+++ b/graf2d/gpad/inc/LinkDef.h
@@ -48,8 +48,12 @@
 #pragma link C++ class ROOT::Experimental::TMenuItems+;
 #pragma link C++ class ROOT::Experimental::Detail::TPadUserCoordBase+;
 #pragma link C++ class ROOT::Experimental::Detail::TPadLinearUserCoord+;
+#pragma link C++ struct ROOT::Experimental::Internal::TPadHorizVert+;
+#pragma link C++ class ROOT::Experimental::TPadExtent+;
+#pragma link C++ class ROOT::Experimental::TPadPos+;
 #pragma link C++ class ROOT::Experimental::Internal::TPadBase+;
 #pragma link C++ class ROOT::Experimental::TPad+;
+#pragma link C++ class ROOT::Experimental::TPadDrawable+;
 #pragma link C++ class ROOT::Experimental::TCanvas+;
 #pragma link C++ class ROOT::Experimental::TPadCoord::Pixel+;
 #pragma link C++ class ROOT::Experimental::TPadCoord::CoordSysBase<ROOT::Experimental::TPadCoord::Pixel>+;
diff --git a/graf2d/gpad/v7/inc/ROOT/TPad.hxx b/graf2d/gpad/v7/inc/ROOT/TPad.hxx
index 7e40c8ccc96..0dc0ffaa26d 100644
--- a/graf2d/gpad/v7/inc/ROOT/TPad.hxx
+++ b/graf2d/gpad/v7/inc/ROOT/TPad.hxx
@@ -147,6 +147,29 @@ public:
 };
 } // namespace Internal
 
+
+/** \class TPadDrawable
+   Draw a TPad, by drawing its contained graphical elements at the pad offset in the parent pad.'
+   */
+class TPadDrawable: public TDrawable {
+private:
+   const std::unique_ptr<TPad> fPad; ///< The pad to be painted
+   TPadPos fPos;                     ///< Offset with respect to parent TPad.
+
+public:
+   TPadDrawable() = default;
+
+   TPadDrawable(std::unique_ptr<TPad> &&pPad, const TPadPos &pos): fPad(std::move(pPad)), fPos(pos) {}
+
+   /// Paint the pad.
+   void Paint(Internal::TVirtualCanvasPainter & /*canv*/) final
+   {
+      // FIXME: and then what? Something with fPad.GetListOfPrimitives()?
+   }
+
+   TPad *Get() const { return fPad.get(); }
+};
+
 /** \class ROOT::Experimental::TPad
   Graphic container for `TDrawable`-s.
   */
@@ -159,32 +182,15 @@ private:
    /// Size of the pad in the parent's (!) coordinate system.
    TPadExtent fSize;
 
-   /** \class TPadDrawable
-      Draw a TPad, by drawing its contained graphical elements at the pad offset in the parent pad.'
-      */
-   class TPadDrawable: public TDrawable {
-   private:
-      const std::unique_ptr<TPad> fPad; ///< The pad to be painted
-      TPadPos fPos;                     ///< Offset with respect to parent TPad.
-
-   public:
-      TPadDrawable(std::unique_ptr<TPad> &&pPad, const TPadPos &pos): fPad(std::move(pPad)), fPos(pos) {}
 
-      /// Paint the pad.
-      void Paint(Internal::TVirtualCanvasPainter & /*canv*/) final
-      {
-         // FIXME: and then what? Something with fPad.GetListOfPrimitives()?
-      }
-
-      TPad *Get() const { return fPad.get(); }
-   };
+public:
 
    friend std::unique_ptr<TPadDrawable> GetDrawable(std::unique_ptr<TPad> &&pad, const TPadPos &pos)
    {
       return std::make_unique<TPadDrawable>(std::move(pad), pos);
    }
 
-public:
+
    /// Create a child pad.
    TPad(const TPadBase &parent, const TPadExtent &size): fParent(&parent), fSize(size) {}
 
-- 
GitLab