// @(#)root/gui:$Id$
// Author: Bertrand Bellenot + Fons Rademakers   23/04/03

/*************************************************************************
 * Copyright (C) 1995-2004, 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_TGFontDialog
#define ROOT_TGFontDialog

#include "TGFrame.h"

class TGButton;
class TGLabel;
class TGListBox;
class TGComboBox;
class TGColorSelect;
class TGFont;

class TGFontDialog : public TGTransientFrame {

public:
   struct FontProp_t {
      TString     fName;               ///< font name
      Int_t       fSize;               ///< font size
      UInt_t      fAlign;              ///< text alignment
      Pixel_t     fColor;              ///< text color
      Bool_t      fBold;               ///< bold flag
      Bool_t      fItalic;             ///< italic flag
   };

protected:
   TGListBox           *fFontNames;    ///< list of font names
   TGListBox           *fFontSizes;    ///< list of font sizes
   TGListBox           *fFontStyles;   ///< list of font styles
   TGComboBox          *fTextAligns;   ///< font alignment selection
   TGLabel             *fSample;       ///< sample of selected font
   TGColorSelect       *fColorSelect;  ///< color selection dialog
   TString              fName;         ///< font name
   TString              fLName;        ///< logical font name
   FontProp_t          *fFontProp;     ///< font info structure
   Bool_t               fItalic;       ///< italic flag
   Bool_t               fBold;         ///< bold flag
   Int_t                fSize;         ///< font size
   Int_t                fTextAlign;    ///< text alignment
   Pixel_t              fTextColor;    ///< text color
   Pixel_t              fInitColor;    ///< initial value of text color
   Int_t                fInitAlign;    ///< initial value of  text align
   TGFont              *fInitFont;     ///< initial font
   TString              fSampleText;   ///< string used for sample
   TGGC                *fSampleTextGC; ///< GC used for sample text
   TGFont              *fLabelFont;    ///< TGFont used for sample text
   Bool_t               fHitOK;        ///< flag = kTRUE if user press the Ok button
   Int_t                fNumberOfFonts;///< total number of fonts
   Bool_t               fWaitFor;      ///< if kTRUE WaitForUnmap is called in constructor.

   Bool_t               Build(char **fontList, Int_t cnt);
   void                 GetFontName();
   void                 CloseWindow() override;
   Bool_t               ProcessMessage(Longptr_t msg, Longptr_t parm1, Longptr_t parm2) override;

public:
   TGFontDialog(const TGWindow *parent = nullptr, const TGWindow *t = nullptr,
                FontProp_t *fontProp = nullptr, const TString &sample = "",
                char **fontList = nullptr, Bool_t wait = kTRUE);
   ~TGFontDialog() override;

   virtual void SetFont(TGFont *font);
   virtual void SetColor(Pixel_t color);
   virtual void SetAlign(Int_t align);
   virtual void EnableAlign(Bool_t on = kTRUE);
   virtual void UpdateStyleSize(const char *family);

   virtual void FontSelected(char *font)
            { Emit("FontSelected(char*)", font); }  //*SIGNAL*
   virtual void AlignSelected(Int_t a)
            { Emit("AlignSelected(Int_t)", a); }   //*SIGNAL*
   virtual void ColorSelected(Pixel_t c)
            { Emit("ColorSelected(Pixel_t)", c); }  //*SIGNAL*

   ClassDefOverride(TGFontDialog,0)  // Font selection dialog
};

#endif
