// @(#)root/gui:$Id$
// Author: Valeriy Onuchin & Fons Rademakers   16/10/2000

/*************************************************************************
 * Copyright (C) 1995-2000, 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_TGButtonGroup
#define ROOT_TGButtonGroup

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TGButtonGroup, TGVButtonGroup and TGHButtonGroup                     //
//                                                                      //
// This header defines button group frames.                             //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#ifndef ROOT_TGFrame
#include "TGFrame.h"
#endif
#ifndef ROOT_TMap
#include "TMap.h"
#endif


class TGButton;



class TGButtonGroup : public TGGroupFrame {

friend class TGButton;

private:
   TGButtonGroup(const TGButtonGroup&); // Not implemented
   TGButtonGroup& operator=(const TGButtonGroup&); // Not implemented

protected:
   Bool_t  fState;           // kTRUE if group is enabled
   Bool_t  fExclGroup;       // kTRUE if group is exclusive
   Bool_t  fRadioExcl;       // kTRUE if radio buttons are exclusive
   Bool_t  fDrawBorder;      // kTRUE if border and title are drawn
   TMap   *fMapOfButtons;    // map of button/id pairs in this group

   void Init();
   virtual void DoRedraw();

public:
   TGButtonGroup(const TGWindow *parent = 0,
                 const TString &title = "",
                 UInt_t options = kChildFrame | kVerticalFrame,
                 GContext_t norm = GetDefaultGC()(),
                 FontStruct_t font = GetDefaultFontStruct(),
                 Pixel_t back = GetDefaultFrameBackground());

   TGButtonGroup(const TGWindow *parent,
                 UInt_t r, UInt_t c, Int_t s = 0, Int_t h = 0 ,
                 const TString &title = "",
                 GContext_t norm = GetDefaultGC()(),
                 FontStruct_t font = GetDefaultFontStruct(),
                 Pixel_t back = GetDefaultFrameBackground());

   virtual ~TGButtonGroup();

   virtual void Pressed(Int_t id)  { Emit("Pressed(Int_t)",id); }   //*SIGNAL*
   virtual void Released(Int_t id) { Emit("Released(Int_t)",id);}   //*SIGNAL*
   virtual void Clicked(Int_t id)  { Emit("Clicked(Int_t)",id); }   //*SIGNAL*

   virtual void ButtonPressed();
   virtual void ButtonReleased();
   virtual void ButtonClicked();
   virtual void ReleaseButtons();

   Bool_t IsEnabled() const { return fState; }
   Bool_t IsExclusive() const { return fExclGroup; }
   Bool_t IsRadioButtonExclusive() const  { return fRadioExcl; }
   Bool_t IsBorderDrawn() const { return fDrawBorder; }
   Int_t  GetCount() const { return fMapOfButtons->GetSize(); }
   Int_t  GetId(TGButton *button) const;

   virtual void SetExclusive(Bool_t flag = kTRUE);
   virtual void SetRadioButtonExclusive(Bool_t flag = kTRUE);
   virtual void SetState(Bool_t state = kTRUE);
   virtual void SetBorderDrawn(Bool_t enable = kTRUE);
   virtual void SetButton(Int_t id, Bool_t down = kTRUE);
   virtual void SetTitle(TGString *title);
   virtual void SetTitle(const char *title);

   virtual Int_t     Insert(TGButton *button, int id = -1);
   virtual void      Remove(TGButton *button);
   virtual TGButton *Find(Int_t id) const;
   virtual TGButton *GetButton(Int_t id) const { return Find(id); }
   virtual void      Show();
   virtual void      Hide();
   virtual void      DrawBorder();
   virtual void      SetLayoutHints(TGLayoutHints *l, TGButton *button = 0);
   virtual void      SavePrimitive(std::ostream &out, Option_t *option = "");

   ClassDef(TGButtonGroup,0)  // Organizes TGButtons in a group
};


class TGVButtonGroup : public TGButtonGroup {

public:
   TGVButtonGroup(const TGWindow *parent,
                  const TString &title = "",
                  GContext_t norm = GetDefaultGC()(),
                  FontStruct_t font = GetDefaultFontStruct(),
                  Pixel_t back = GetDefaultFrameBackground()) :
      TGButtonGroup(parent, title, kChildFrame | kVerticalFrame,
                    norm, font, back) { }

   virtual ~TGVButtonGroup() { }
   virtual void SavePrimitive(std::ostream &out, Option_t *option = "");

   ClassDef(TGVButtonGroup,0)  // A button group with one vertical column
};


class TGHButtonGroup : public TGButtonGroup {

public:
   TGHButtonGroup(const TGWindow *parent,
                  const TString &title = "",
                  GContext_t norm = GetDefaultGC()(),
                  FontStruct_t font = GetDefaultFontStruct(),
                  Pixel_t back = GetDefaultFrameBackground()) :
      TGButtonGroup(parent, title, kChildFrame | kHorizontalFrame,
                    norm, font, back) { }

   virtual ~TGHButtonGroup() { }
   virtual void SavePrimitive(std::ostream &out, Option_t *option = "");

   ClassDef(TGHButtonGroup,0)  // A button group with one horizontal row
};

#endif
 TGButtonGroup.h:1
 TGButtonGroup.h:2
 TGButtonGroup.h:3
 TGButtonGroup.h:4
 TGButtonGroup.h:5
 TGButtonGroup.h:6
 TGButtonGroup.h:7
 TGButtonGroup.h:8
 TGButtonGroup.h:9
 TGButtonGroup.h:10
 TGButtonGroup.h:11
 TGButtonGroup.h:12
 TGButtonGroup.h:13
 TGButtonGroup.h:14
 TGButtonGroup.h:15
 TGButtonGroup.h:16
 TGButtonGroup.h:17
 TGButtonGroup.h:18
 TGButtonGroup.h:19
 TGButtonGroup.h:20
 TGButtonGroup.h:21
 TGButtonGroup.h:22
 TGButtonGroup.h:23
 TGButtonGroup.h:24
 TGButtonGroup.h:25
 TGButtonGroup.h:26
 TGButtonGroup.h:27
 TGButtonGroup.h:28
 TGButtonGroup.h:29
 TGButtonGroup.h:30
 TGButtonGroup.h:31
 TGButtonGroup.h:32
 TGButtonGroup.h:33
 TGButtonGroup.h:34
 TGButtonGroup.h:35
 TGButtonGroup.h:36
 TGButtonGroup.h:37
 TGButtonGroup.h:38
 TGButtonGroup.h:39
 TGButtonGroup.h:40
 TGButtonGroup.h:41
 TGButtonGroup.h:42
 TGButtonGroup.h:43
 TGButtonGroup.h:44
 TGButtonGroup.h:45
 TGButtonGroup.h:46
 TGButtonGroup.h:47
 TGButtonGroup.h:48
 TGButtonGroup.h:49
 TGButtonGroup.h:50
 TGButtonGroup.h:51
 TGButtonGroup.h:52
 TGButtonGroup.h:53
 TGButtonGroup.h:54
 TGButtonGroup.h:55
 TGButtonGroup.h:56
 TGButtonGroup.h:57
 TGButtonGroup.h:58
 TGButtonGroup.h:59
 TGButtonGroup.h:60
 TGButtonGroup.h:61
 TGButtonGroup.h:62
 TGButtonGroup.h:63
 TGButtonGroup.h:64
 TGButtonGroup.h:65
 TGButtonGroup.h:66
 TGButtonGroup.h:67
 TGButtonGroup.h:68
 TGButtonGroup.h:69
 TGButtonGroup.h:70
 TGButtonGroup.h:71
 TGButtonGroup.h:72
 TGButtonGroup.h:73
 TGButtonGroup.h:74
 TGButtonGroup.h:75
 TGButtonGroup.h:76
 TGButtonGroup.h:77
 TGButtonGroup.h:78
 TGButtonGroup.h:79
 TGButtonGroup.h:80
 TGButtonGroup.h:81
 TGButtonGroup.h:82
 TGButtonGroup.h:83
 TGButtonGroup.h:84
 TGButtonGroup.h:85
 TGButtonGroup.h:86
 TGButtonGroup.h:87
 TGButtonGroup.h:88
 TGButtonGroup.h:89
 TGButtonGroup.h:90
 TGButtonGroup.h:91
 TGButtonGroup.h:92
 TGButtonGroup.h:93
 TGButtonGroup.h:94
 TGButtonGroup.h:95
 TGButtonGroup.h:96
 TGButtonGroup.h:97
 TGButtonGroup.h:98
 TGButtonGroup.h:99
 TGButtonGroup.h:100
 TGButtonGroup.h:101
 TGButtonGroup.h:102
 TGButtonGroup.h:103
 TGButtonGroup.h:104
 TGButtonGroup.h:105
 TGButtonGroup.h:106
 TGButtonGroup.h:107
 TGButtonGroup.h:108
 TGButtonGroup.h:109
 TGButtonGroup.h:110
 TGButtonGroup.h:111
 TGButtonGroup.h:112
 TGButtonGroup.h:113
 TGButtonGroup.h:114
 TGButtonGroup.h:115
 TGButtonGroup.h:116
 TGButtonGroup.h:117
 TGButtonGroup.h:118
 TGButtonGroup.h:119
 TGButtonGroup.h:120
 TGButtonGroup.h:121
 TGButtonGroup.h:122
 TGButtonGroup.h:123
 TGButtonGroup.h:124
 TGButtonGroup.h:125
 TGButtonGroup.h:126
 TGButtonGroup.h:127
 TGButtonGroup.h:128
 TGButtonGroup.h:129
 TGButtonGroup.h:130
 TGButtonGroup.h:131
 TGButtonGroup.h:132
 TGButtonGroup.h:133
 TGButtonGroup.h:134
 TGButtonGroup.h:135
 TGButtonGroup.h:136
 TGButtonGroup.h:137
 TGButtonGroup.h:138
 TGButtonGroup.h:139
 TGButtonGroup.h:140
 TGButtonGroup.h:141
 TGButtonGroup.h:142
 TGButtonGroup.h:143