// @(#)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.                                         //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#ifndef ROOT_TGButton
#include "TGButton.h"
#endif
#ifndef ROOT_TGToolTip
#include "TGToolTip.h"
#endif


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[5];

   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
 TGedPatternSelect.h:1
 TGedPatternSelect.h:2
 TGedPatternSelect.h:3
 TGedPatternSelect.h:4
 TGedPatternSelect.h:5
 TGedPatternSelect.h:6
 TGedPatternSelect.h:7
 TGedPatternSelect.h:8
 TGedPatternSelect.h:9
 TGedPatternSelect.h:10
 TGedPatternSelect.h:11
 TGedPatternSelect.h:12
 TGedPatternSelect.h:13
 TGedPatternSelect.h:14
 TGedPatternSelect.h:15
 TGedPatternSelect.h:16
 TGedPatternSelect.h:17
 TGedPatternSelect.h:18
 TGedPatternSelect.h:19
 TGedPatternSelect.h:20
 TGedPatternSelect.h:21
 TGedPatternSelect.h:22
 TGedPatternSelect.h:23
 TGedPatternSelect.h:24
 TGedPatternSelect.h:25
 TGedPatternSelect.h:26
 TGedPatternSelect.h:27
 TGedPatternSelect.h:28
 TGedPatternSelect.h:29
 TGedPatternSelect.h:30
 TGedPatternSelect.h:31
 TGedPatternSelect.h:32
 TGedPatternSelect.h:33
 TGedPatternSelect.h:34
 TGedPatternSelect.h:35
 TGedPatternSelect.h:36
 TGedPatternSelect.h:37
 TGedPatternSelect.h:38
 TGedPatternSelect.h:39
 TGedPatternSelect.h:40
 TGedPatternSelect.h:41
 TGedPatternSelect.h:42
 TGedPatternSelect.h:43
 TGedPatternSelect.h:44
 TGedPatternSelect.h:45
 TGedPatternSelect.h:46
 TGedPatternSelect.h:47
 TGedPatternSelect.h:48
 TGedPatternSelect.h:49
 TGedPatternSelect.h:50
 TGedPatternSelect.h:51
 TGedPatternSelect.h:52
 TGedPatternSelect.h:53
 TGedPatternSelect.h:54
 TGedPatternSelect.h:55
 TGedPatternSelect.h:56
 TGedPatternSelect.h:57
 TGedPatternSelect.h:58
 TGedPatternSelect.h:59
 TGedPatternSelect.h:60
 TGedPatternSelect.h:61
 TGedPatternSelect.h:62
 TGedPatternSelect.h:63
 TGedPatternSelect.h:64
 TGedPatternSelect.h:65
 TGedPatternSelect.h:66
 TGedPatternSelect.h:67
 TGedPatternSelect.h:68
 TGedPatternSelect.h:69
 TGedPatternSelect.h:70
 TGedPatternSelect.h:71
 TGedPatternSelect.h:72
 TGedPatternSelect.h:73
 TGedPatternSelect.h:74
 TGedPatternSelect.h:75
 TGedPatternSelect.h:76
 TGedPatternSelect.h:77
 TGedPatternSelect.h:78
 TGedPatternSelect.h:79
 TGedPatternSelect.h:80
 TGedPatternSelect.h:81
 TGedPatternSelect.h:82
 TGedPatternSelect.h:83
 TGedPatternSelect.h:84
 TGedPatternSelect.h:85
 TGedPatternSelect.h:86
 TGedPatternSelect.h:87
 TGedPatternSelect.h:88
 TGedPatternSelect.h:89
 TGedPatternSelect.h:90
 TGedPatternSelect.h:91
 TGedPatternSelect.h:92
 TGedPatternSelect.h:93
 TGedPatternSelect.h:94
 TGedPatternSelect.h:95
 TGedPatternSelect.h:96
 TGedPatternSelect.h:97
 TGedPatternSelect.h:98
 TGedPatternSelect.h:99
 TGedPatternSelect.h:100
 TGedPatternSelect.h:101
 TGedPatternSelect.h:102
 TGedPatternSelect.h:103
 TGedPatternSelect.h:104
 TGedPatternSelect.h:105
 TGedPatternSelect.h:106
 TGedPatternSelect.h:107
 TGedPatternSelect.h:108
 TGedPatternSelect.h:109
 TGedPatternSelect.h:110
 TGedPatternSelect.h:111
 TGedPatternSelect.h:112
 TGedPatternSelect.h:113
 TGedPatternSelect.h:114
 TGedPatternSelect.h:115
 TGedPatternSelect.h:116
 TGedPatternSelect.h:117
 TGedPatternSelect.h:118
 TGedPatternSelect.h:119
 TGedPatternSelect.h:120
 TGedPatternSelect.h:121
 TGedPatternSelect.h:122
 TGedPatternSelect.h:123
 TGedPatternSelect.h:124
 TGedPatternSelect.h:125
 TGedPatternSelect.h:126
 TGedPatternSelect.h:127
 TGedPatternSelect.h:128
 TGedPatternSelect.h:129
 TGedPatternSelect.h:130
 TGedPatternSelect.h:131
 TGedPatternSelect.h:132
 TGedPatternSelect.h:133
 TGedPatternSelect.h:134
 TGedPatternSelect.h:135
 TGedPatternSelect.h:136
 TGedPatternSelect.h:137
 TGedPatternSelect.h:138
 TGedPatternSelect.h:139
 TGedPatternSelect.h:140
 TGedPatternSelect.h:141
 TGedPatternSelect.h:142
 TGedPatternSelect.h:143
 TGedPatternSelect.h:144
 TGedPatternSelect.h:145
 TGedPatternSelect.h:146
 TGedPatternSelect.h:147
 TGedPatternSelect.h:148
 TGedPatternSelect.h:149
 TGedPatternSelect.h:150
 TGedPatternSelect.h:151
 TGedPatternSelect.h:152
 TGedPatternSelect.h:153
 TGedPatternSelect.h:154
 TGedPatternSelect.h:155
 TGedPatternSelect.h:156
 TGedPatternSelect.h:157
 TGedPatternSelect.h:158
 TGedPatternSelect.h:159
 TGedPatternSelect.h:160
 TGedPatternSelect.h:161
 TGedPatternSelect.h:162
 TGedPatternSelect.h:163
 TGedPatternSelect.h:164
 TGedPatternSelect.h:165
 TGedPatternSelect.h:166
 TGedPatternSelect.h:167
 TGedPatternSelect.h:168
 TGedPatternSelect.h:169
 TGedPatternSelect.h:170
 TGedPatternSelect.h:171
 TGedPatternSelect.h:172
 TGedPatternSelect.h:173