text: // @(#)root/gui:$Id$
  // Author: Marek Biskup, Ilka Antcheva   24/07/03
  
  /*************************************************************************
   * Copyright (C) 1995-2002, 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_TGedPatternSelect
  #define ROOT_TGedPatternSelect
  
  //////////////////////////////////////////////////////////////////////////
  //                                                                      //
  // TGedPatternFrame, TGedPatternSelector, TGedPatternPopup              //
  // and TGedPatternColor.                                                //
  //                                                                      //
  // The TGedPatternFrame is a small frame with border showing a          //
  // specific pattern (fill style).                                       //
  //                                                                      //
  // The TGedPatternSelector is a composite frame with TGedPatternFrames  //
  // of all diferent styles                                               //
  //                                                                      //
  // The TGedPattern is a popup containing a TGPatternSelector.           //
  //                                                                      //
  // The TGedPatternSelect widget is a button with pattern area with      //
  // a little down arrow. When clicked on the arrow the                   //
  // TGedPatternPopup pops up.                                            //
  //                                                                      //
  // Selecting a pattern in this widget will generate the event:          //
  // kC_PATTERNSEL, kPAT_SELCHANGED, widget id, style.                    //
  //                                                                      //
  // and the signal:                                                      //
  // PatternSelected(Style_t pattern)                                     //
  //                                                                      //
  // TGedSelect is button that shows popup window when clicked.           //
  // TGedPopup is a popup window.                                         //
  //                                                                      //
  //////////////////////////////////////////////////////////////////////////
  
  #include "TGButton.h"
  #include "TGToolTip.h"
  
  
  class TGedPopup : public TGCompositeFrame {
  
  protected:
     const TGWindow  *fMsgWindow;
  
  public:
     TGedPopup(const TGWindow* p, const TGWindow *m, UInt_t w, UInt_t h,
               UInt_t options = 0, Pixel_t back = GetDefaultFrameBackground());
     virtual ~TGedPopup() { }
  
     virtual Bool_t HandleButton(Event_t *event);
     virtual Bool_t ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2);
     void           PlacePopup(Int_t x, Int_t y, UInt_t w, UInt_t h);
     void           EndPopup();
  
     ClassDef(TGedPopup,0)  //popup window
  };
  
  class TGedPatternFrame : public TGFrame {
  
  protected:
     const TGWindow *fMsgWindow;
     Bool_t          fActive;
     Style_t         fPattern;
     static TGGC    *fgGC;
     TGToolTip      *fTip;         // tool tip associated with a button
     char            fTipText[7];
  
     virtual void    DoRedraw();
  
  public:
     TGedPatternFrame(const TGWindow *p, Style_t pattern, Int_t width = 40,
                      Int_t height = 20);
     virtual ~TGedPatternFrame() { delete fTip; }
  
     virtual Bool_t  HandleButton(Event_t *event);
     virtual Bool_t  HandleCrossing(Event_t *event);
     virtual void    DrawBorder();
  
     void            SetActive(Bool_t in) { fActive = in; gClient->NeedRedraw(this); }
     Style_t         GetPattern() const { return fPattern; }
     static void     SetFillStyle(TGGC* gc, Style_t fstyle); //set fill style for given GC
  
     ClassDef(TGedPatternFrame,0)  //pattern frame
  };
  
  class TGedPatternSelector : public TGCompositeFrame {
  
  protected:
     Int_t              fActive;
     const TGWindow    *fMsgWindow;
     TGedPatternFrame  *fCe[27];
  
  public:
     TGedPatternSelector(const TGWindow *p);
     virtual ~TGedPatternSelector();
  
     virtual Bool_t ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2);
     void           SetActive(Int_t newat);
     Int_t          GetActive() const { return fActive; }
  
     ClassDef(TGedPatternSelector,0)  //select pattern frame
  };
  
  class TGedPatternPopup : public TGedPopup {
  
  protected:
     Style_t  fCurrentPattern;
  
  public:
     TGedPatternPopup(const TGWindow *p, const TGWindow *m, Style_t pattern);
     virtual ~TGedPatternPopup();
  
     virtual Bool_t ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2);
  
     ClassDef(TGedPatternPopup,0)  // Color selector popup
  };
  
  class TGedSelect : public TGCheckButton {
  
  protected:
     TGGC           *fDrawGC;
     TGedPopup      *fPopup;
  
     virtual void   DoRedraw();
     void           DrawTriangle(GContext_t gc, Int_t x, Int_t y);
  
  public:
     TGedSelect(const TGWindow *p, Int_t id);
     virtual ~TGedSelect();
  
     virtual Bool_t HandleButton(Event_t *event);
  
     virtual void   Enable();
     virtual void   Disable();
     virtual void   SetPopup(TGedPopup* p) { fPopup = p; }  // popup will be deleted in destructor.
  
     ClassDef(TGedSelect,0)  //selection check-button
  };
  
  class TGedPatternSelect : public TGedSelect {
  
  protected:
     Style_t      fPattern;
  
     virtual void DoRedraw();
  
  public:
     TGedPatternSelect(const TGWindow *p, Style_t pattern, Int_t id);
     virtual ~TGedPatternSelect() {}
  
     void           SetPattern(Style_t pattern, Bool_t emit=kTRUE);
     Style_t        GetPattern() const { return fPattern; }
     virtual        TGDimension GetDefaultSize() const { return TGDimension(55, 21); }
     virtual void   PatternSelected(Style_t pattern = 0)
                    { Emit("PatternSelected(Style_t)", pattern ? pattern : GetPattern()); }  // *SIGNAL*
     virtual Bool_t ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2);
     virtual void   SavePrimitive(std::ostream &out, Option_t * = "");
  
     ClassDef(TGedPatternSelect,0)  //pattern selection check-button
  };
  
  #endif
  