#ifndef ROOT_TGButton
#define ROOT_TGButton
#ifndef ROOT_TGFrame
#include "TGFrame.h"
#endif
#ifndef ROOT_TGWidget
#include "TGWidget.h"
#endif
enum EButtonState {
kButtonUp,
kButtonDown,
kButtonEngaged,
kButtonDisabled
};
class TGWidget;
class TGHotString;
class TGPicture;
class TGToolTip;
class TGButtonGroup;
class TGPopupMenu;
class TGTextLayout;
class TGButton : public TGFrame, public TGWidget {
friend class TGButtonGroup;
protected:
UInt_t fTWidth;
UInt_t fTHeight;
EButtonState fState;
Bool_t fStayDown;
GContext_t fNormGC;
void *fUserData;
TGToolTip *fTip;
TGButtonGroup *fGroup;
virtual void SetToggleButton(Bool_t) { }
virtual void EmitSignals(Bool_t wasUp);
static const TGGC *fgDefaultGC;
static const TGGC *fgHibckgndGC;
static Window_t fgReleaseBtn;
private:
TGButton(const TGButton&);
TGButton& operator=(const TGButton&);
public:
static const TGGC &GetDefaultGC();
static const TGGC &GetHibckgndGC();
TGButton(const TGWindow *p = 0, Int_t id = -1, GContext_t norm = GetDefaultGC()(),
UInt_t option = kRaisedFrame | kDoubleBorder);
virtual ~TGButton();
virtual Bool_t HandleButton(Event_t *event);
virtual Bool_t HandleCrossing(Event_t *event);
virtual void SetUserData(void *userData) { fUserData = userData; }
virtual void *GetUserData() const { return fUserData; }
virtual void SetToolTipText(const char *text, Long_t delayms = 400);
virtual TGToolTip *GetToolTip() const { return fTip; }
virtual void SetState(EButtonState state, Bool_t emit = kFALSE);
virtual EButtonState GetState() const { return fState; }
virtual void AllowStayDown(Bool_t a) { fStayDown = a; }
virtual void SetGroup(TGButtonGroup *gr);
TGButtonGroup *GetGroup() const { return fGroup; }
virtual Bool_t IsDown() const { return !(fOptions & kRaisedFrame); }
virtual void SetDown(Bool_t on = kTRUE, Bool_t emit = kFALSE);
virtual Bool_t IsOn() const { return IsDown(); }
virtual void SetOn(Bool_t on = kTRUE, Bool_t emit = kFALSE) { SetDown(on, emit); }
virtual Bool_t IsToggleButton() const { return kFALSE; }
virtual Bool_t IsExclusiveToggle() const { return kFALSE; }
virtual void Toggle(Bool_t emit = kFALSE) { SetDown(IsDown() ? kFALSE : kTRUE, emit); }
virtual void SetEnabled(Bool_t e = kTRUE);
virtual void SavePrimitive(ostream &out, Option_t *option = "");
GContext_t GetNormGC() const { return fNormGC; }
virtual void Pressed() { Emit("Pressed()"); }
virtual void Released() { Emit("Released()"); }
virtual void Clicked() { Emit("Clicked()"); }
virtual void Toggled(Bool_t on) { Emit("Toggled(Bool_t)", on); }
ClassDef(TGButton,0)
};
class TGTextButton : public TGButton {
protected:
TGHotString *fLabel;
Int_t fMLeft;
Int_t fMRight;
Int_t fMTop;
Int_t fMBottom;
Int_t fTMode;
Int_t fWrapLength;
Int_t fHKeycode;
TGTextLayout *fTLayout;
FontStruct_t fFontStruct;
Bool_t fHasOwnFont;
Bool_t fStateOn;
Bool_t fPrevStateOn;
static const TGFont *fgDefaultFont;
void Init();
virtual void DoRedraw();
private:
TGTextButton(const TGTextButton&);
TGTextButton& operator=(const TGTextButton&);
public:
static FontStruct_t GetDefaultFontStruct();
TGTextButton(const TGWindow *p, TGHotString *s, Int_t id = -1,
GContext_t norm = GetDefaultGC()(),
FontStruct_t font = GetDefaultFontStruct(),
UInt_t option = kRaisedFrame | kDoubleBorder);
TGTextButton(const TGWindow *p = 0, const char *s = 0, Int_t id = -1,
GContext_t norm = GetDefaultGC()(),
FontStruct_t font = GetDefaultFontStruct(),
UInt_t option = kRaisedFrame | kDoubleBorder);
TGTextButton(const TGWindow *p, const char *s, const char *cmd,
Int_t id = -1, GContext_t norm = GetDefaultGC()(),
FontStruct_t font = GetDefaultFontStruct(),
UInt_t option = kRaisedFrame | kDoubleBorder);
virtual ~TGTextButton();
virtual TGDimension GetDefaultSize() const;
virtual Bool_t HandleKey(Event_t *event);
const TGHotString *GetText() const { return fLabel; }
virtual const char *GetTitle() const { return fLabel->Data(); }
TString GetString() const { return TString(fLabel->GetString()); }
virtual void SetTextJustify(Int_t tmode);
Int_t GetTextJustify() const { return fTMode; }
virtual void SetText(TGHotString *new_label);
virtual void SetText(const TString &new_label);
virtual void SetTitle(const char *label) { SetText(label); }
virtual void SetFont(FontStruct_t font, Bool_t global = kFALSE);
virtual void SetFont(const char *fontName, Bool_t global = kFALSE);
virtual void SetTextColor(Pixel_t color, Bool_t global = kFALSE);
virtual void SetForegroundColor(Pixel_t fore) { SetTextColor(fore); }
Bool_t HasOwnFont() const;
void SetWrapLength(Int_t wl) { fWrapLength = wl; Layout(); }
Int_t GetWrapLength() const { return fWrapLength; }
void SetMargins(Int_t left=0, Int_t right=0, Int_t top=0, Int_t bottom=0)
{ fMLeft = left; fMRight = right; fMTop = top; fMBottom = bottom; }
virtual void SetLeftMargin(Int_t val) { fMLeft = val; }
virtual void SetRightMargin(Int_t val) { fMRight = val; }
virtual void SetTopMargin(Int_t val) { fMTop = val; }
virtual void SetBottomMargin(Int_t val) { fMBottom = val; }
Int_t GetLeftMargin() const { return fMLeft; }
Int_t GetRightMargin() const { return fMRight; }
Int_t GetTopMargin() const { return fMTop; }
Int_t GetBottomMargin() const { return fMBottom; }
void ChangeText(const char *title) { SetTitle(title); }
FontStruct_t GetFontStruct() const { return fFontStruct; }
virtual void Layout();
virtual void SavePrimitive(ostream &out, Option_t *option = "");
ClassDef(TGTextButton,0)
};
class TGPictureButton : public TGButton {
protected:
const TGPicture *fPic;
const TGPicture *fPicD;
Bool_t fOwnDisabledPic;
virtual void DoRedraw();
virtual void CreateDisabledPicture();
private:
TGPictureButton(const TGPictureButton&);
TGPictureButton& operator=(const TGPictureButton&);
public:
TGPictureButton(const TGWindow *p, const TGPicture *pic, Int_t id = -1,
GContext_t norm = GetDefaultGC()(),
UInt_t option = kRaisedFrame | kDoubleBorder);
TGPictureButton(const TGWindow *p, const TGPicture *pic, const char *cmd,
Int_t id = -1, GContext_t norm = GetDefaultGC()(),
UInt_t option = kRaisedFrame | kDoubleBorder);
TGPictureButton(const TGWindow *p = 0, const char* pic = 0, Int_t id = -1,
GContext_t norm = GetDefaultGC()(),
UInt_t option = kRaisedFrame | kDoubleBorder);
virtual ~TGPictureButton();
virtual void SetPicture(const TGPicture *new_pic);
virtual void SetDisabledPicture(const TGPicture *pic);
const TGPicture *GetPicture() const { return fPic; };
const TGPicture *GetDisabledPicture() const { return fPicD; };
virtual void SavePrimitive(ostream &out, Option_t *option = "");
ClassDef(TGPictureButton,0)
};
class TGCheckButton : public TGTextButton {
private:
TGCheckButton(const TGCheckButton&);
TGCheckButton& operator=(const TGCheckButton&);
protected:
EButtonState fPrevState;
const TGPicture *fOn;
const TGPicture *fOff;
const TGPicture *fDisOn;
const TGPicture *fDisOff;
void Init();
void PSetState(EButtonState state, Bool_t emit);
virtual void DoRedraw();
virtual void EmitSignals(Bool_t wasUp = kTRUE);
static const TGFont *fgDefaultFont;
static const TGGC *fgDefaultGC;
public:
static FontStruct_t GetDefaultFontStruct();
static const TGGC &GetDefaultGC();
TGCheckButton(const TGWindow *p, TGHotString *s, Int_t id = -1,
GContext_t norm = GetDefaultGC()(),
FontStruct_t font = GetDefaultFontStruct(),
UInt_t option = 0);
TGCheckButton(const TGWindow *p = 0, const char *s = 0, Int_t id = -1,
GContext_t norm = GetDefaultGC()(),
FontStruct_t font = GetDefaultFontStruct(),
UInt_t option = 0);
TGCheckButton(const TGWindow *p, const char *s, const char *cmd, Int_t id = -1,
GContext_t norm = GetDefaultGC()(),
FontStruct_t font = GetDefaultFontStruct(),
UInt_t option = 0);
virtual ~TGCheckButton();
virtual TGDimension GetDefaultSize() const;
virtual Bool_t HandleButton(Event_t *event);
virtual Bool_t HandleKey(Event_t *event);
virtual Bool_t HandleCrossing(Event_t *event);
virtual Bool_t IsToggleButton() const { return kTRUE; }
virtual Bool_t IsOn() const { return fState == kButtonDown; }
virtual Bool_t IsDown() const { return fState == kButtonDown; }
virtual Bool_t IsDisabledAndSelected() const { return kButtonDisabled && fStateOn; }
virtual void SetDisabledAndSelected(Bool_t);
virtual void SetState(EButtonState state, Bool_t emit = kFALSE);
virtual void SavePrimitive(ostream &out, Option_t *option = "");
ClassDef(TGCheckButton,0)
};
class TGRadioButton : public TGTextButton {
private:
TGRadioButton(const TGRadioButton&);
TGRadioButton& operator=(const TGRadioButton&);
protected:
EButtonState fPrevState;
const TGPicture *fOn;
const TGPicture *fOff;
const TGPicture *fDisOn;
const TGPicture *fDisOff;
void Init();
void PSetState(EButtonState state, Bool_t emit);
virtual void DoRedraw();
virtual void EmitSignals(Bool_t wasUp = kTRUE);
static const TGFont *fgDefaultFont;
static const TGGC *fgDefaultGC;
public:
static FontStruct_t GetDefaultFontStruct();
static const TGGC &GetDefaultGC();
TGRadioButton(const TGWindow *p, TGHotString *s, Int_t id = -1,
GContext_t norm = GetDefaultGC()(),
FontStruct_t font = GetDefaultFontStruct(),
UInt_t option = 0);
TGRadioButton(const TGWindow *p = 0, const char *s = 0, Int_t id = -1,
GContext_t norm = GetDefaultGC()(),
FontStruct_t font = GetDefaultFontStruct(),
UInt_t option = 0);
TGRadioButton(const TGWindow *p, const char *s, const char *cmd, Int_t id = -1,
GContext_t norm = GetDefaultGC()(),
FontStruct_t font = GetDefaultFontStruct(),
UInt_t option = 0);
virtual ~TGRadioButton();
virtual TGDimension GetDefaultSize() const;
virtual Bool_t HandleButton(Event_t *event);
virtual Bool_t HandleKey(Event_t *event);
virtual Bool_t HandleCrossing(Event_t *event);
virtual void SetState(EButtonState state, Bool_t emit = kFALSE);
virtual void SetDisabledAndSelected(Bool_t);
virtual Bool_t IsToggleButton() const { return kTRUE; }
virtual Bool_t IsExclusiveToggle() const { return kTRUE; }
virtual Bool_t IsOn() const { return fStateOn; }
virtual Bool_t IsDown() const { return fStateOn; }
virtual Bool_t IsDisabledAndSelected() const { return kButtonDisabled && fStateOn; }
virtual void SavePrimitive(ostream &out, Option_t *option = "");
ClassDef(TGRadioButton,0)
};
class TGSplitButton : public TGTextButton {
friend class TGPopupMenu;
private:
TGSplitButton(const TGSplitButton&);
TGSplitButton& operator=(const TGSplitButton&);
void CalcSize();
void DrawTriangle(const GContext_t gc, Int_t x, Int_t y);
Bool_t HandleSButton(Event_t *event);
Bool_t HandleSCrossing(Event_t *event);
Bool_t HandleSKey(Event_t *event);
void SetMenuState(Bool_t state) ;
protected:
Bool_t fSplit;
EButtonState fMBState;
UInt_t fTBWidth;
UInt_t fMBWidth;
TGPopupMenu *fPopMenu;
Int_t fEntryId;
TGHotString *fMenuLabel;
Cursor_t fDefaultCursor;
Bool_t fKeyNavigate;
TGString fWidestLabel;
TGString fHeighestLabel;
virtual void DoRedraw();
void Init();
void BindKeys(Bool_t on = kTRUE);
void BindMenuKeys(Bool_t on = kTRUE);
public:
TGSplitButton(const TGWindow *p, TGHotString *menulabel,
TGPopupMenu *popmenu, Bool_t split = kTRUE,
Int_t id = -1, GContext_t norm = GetDefaultGC()(),
FontStruct_t fontstruct = GetDefaultFontStruct(),
UInt_t option = kRaisedFrame | kDoubleBorder);
virtual ~TGSplitButton();
virtual TGDimension GetDefaultSize() const ;
virtual void SetText(TGHotString *new_label);
virtual void SetText(const TString &new_label);
virtual void SetFont(FontStruct_t font, Bool_t global = kFALSE);
virtual void SetFont(const char *fontName, Bool_t global = kFALSE);
virtual void SetMBState(EButtonState state);
virtual void SetSplit(Bool_t split);
Bool_t IsSplit() { return fSplit; }
virtual Bool_t HandleButton(Event_t *event);
virtual Bool_t HandleCrossing(Event_t *event);
virtual Bool_t HandleKey(Event_t *event);
virtual Bool_t HandleMotion(Event_t *event);
virtual void Layout();
virtual void MBPressed() { Emit("MBPressed()"); }
virtual void MBReleased() { Emit("MBReleased()"); }
virtual void MBClicked() { Emit("MBClicked()"); }
virtual void ItemClicked(Int_t id) { Emit("ItemClicked(Int_t)", id); }
void HandleMenu(Int_t id) ;
ClassDef(TGSplitButton, 0)
};
#endif