// Author: Roel Aaij   14/08/2007

/*************************************************************************
 * Copyright (C) 1995-2007, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#ifndef ROOT_TGTableCell
#define ROOT_TGTableCell

#include "TGFrame.h"

class TGTable;
class TGString;
class TGTooltip;
class TGPicture;
class TObjArray;
class TGWindow;
class TGToolTip;

class TGTableCell : public TGFrame {

friend class TGTable;

protected:
   TGString      *fLabel;      ///< Text as shown in the cell
   TGToolTip     *fTip;        ///< Possible Tooltip
   Bool_t         fReadOnly;   ///< Cell readonly state
   Bool_t         fEnabled;    ///< Cell enabled state
   Int_t          fTMode;      ///< Text justify mode
   TGPicture     *fImage;      ///< Image or icon
   UInt_t         fTWidth;     ///< Label width
   UInt_t         fTHeight;    ///< Label height
   FontStruct_t   fFontStruct; ///< Font of the label
   Bool_t         fHasOwnFont; ///< Does the cell have it's own font
   GContext_t     fNormGC;     ///< graphics context used to draw the cell
   UInt_t         fColumn;     ///< Column this cell belongs to
   UInt_t         fRow;        ///< Row this cell belongs to
   TGTable       *fTable;      ///< TGTable that a cell belongs to

   static const TGGC   *fgDefaultGC;   ///< Default graphics context
   static const TGFont *fgDefaultFont; ///< Default font

   void DoRedraw() override;
   void DrawBorder() override;
   virtual void DrawBorder(Handle_t id, Int_t x, Int_t y);
   virtual void MoveDraw(Int_t x, Int_t y);
   void Resize(UInt_t width, UInt_t height) override;
   void Resize(TGDimension newsize) override;

   virtual void Highlight();
   void         Init(Bool_t resize);

public:
   static FontStruct_t GetDefaultFontStruct();
   static const TGGC   &GetDefaultGC();

   TGTableCell(const TGWindow *p = nullptr, TGTable *table = nullptr, TGString *label = nullptr,
               UInt_t row = 0, UInt_t column = 0, UInt_t width = 80,
               UInt_t height = 25, GContext_t norm = GetDefaultGC()(),
               FontStruct_t font = GetDefaultFontStruct(), UInt_t option = 0,
               Bool_t resize = kTRUE);
   TGTableCell(const TGWindow *p, TGTable *table, const char *label,
               UInt_t row = 0, UInt_t column = 0, UInt_t width = 80,
               UInt_t height = 25, GContext_t norm = GetDefaultGC()(),
               FontStruct_t font = GetDefaultFontStruct(),
               UInt_t option = 0, Bool_t resize =  kTRUE);

   ~TGTableCell() override;

           void DrawCopy(Handle_t id, Int_t x, Int_t y) override;

   virtual void SetLabel(const char *label);

   virtual void SetImage(TGPicture *image);
   //   virtual void SetBckgndGC(TGGC *gc);

   virtual void SetTextJustify(Int_t tmode);
   virtual void SetFont(FontStruct_t font);
   virtual void SetFont(const char *fontName);

   virtual void Select();
   virtual void SelectRow();
   virtual void SelectColumn();

   virtual UInt_t      GetColumn() const { return fColumn; }
   virtual UInt_t      GetRow() const { return fRow; };
   virtual TGString*   GetLabel() const { return fLabel; }
   virtual TGPicture*  GetImage() const { return fImage; }
   virtual UInt_t      GetWidth() const { return fWidth; }
   virtual UInt_t      GetHeight() const {return fHeight; }
   virtual TGDimension GetSize() const { return TGDimension(fWidth, fHeight); }
   virtual Int_t       GetTextJustify() const { return fTMode; }

   ClassDefOverride(TGTableCell, 0) // A single cell in a TGTable.
};

#endif
