ROOT logo
#ifndef __TGMrbLabelEntry_h__
#define __TGMrbLabelEntry_h__

//_________________________________________________[C++ CLASS DEFINITION FILE]
//////////////////////////////////////////////////////////////////////////////
// Name:           gutils/inc/TGMrbLabelEntry.h
// Purpose:        Define utilities to be used with the MARaBOU GUI
// Class:          TGMrbLabelEntry              -- a frame containing a label and
//                                                 an entry
// Description:    Graphic utilities for the MARaBOU GUI.
// Author:         R. Lutter
// Revision:       $Id: TGMrbLabelEntry.h,v 1.18 2008-09-23 10:44:11 Rudolf.Lutter Exp $       
// Date:           
// Keywords:
//////////////////////////////////////////////////////////////////////////////

#include "Rtypes.h"
#include "TSystem.h"
#include "TGWindow.h"
#include "TGFrame.h"
#include "TGButton.h"
#include "TGLabel.h"
#include "TGTextEntry.h"

#include "TMrbNamedX.h"
#include "TMrbLofNamedX.h"
#include "TGMrbTextButton.h"
#include "TGMrbRadioButton.h"
#include "TGMrbCheckButton.h"
#include "TGMrbFocusList.h"
#include "TGMrbObject.h"
#include "TGMrbLayout.h"

//______________________________________________________[C++ CLASS DEFINITION]
//////////////////////////////////////////////////////////////////////////////
// Name:           TGMrbTextEntry
// Purpose:        
// Description:    
// Keywords:
//////////////////////////////////////////////////////////////////////////////

class TGMrbTextEntry: public TGTextEntry {

	public:
		TGMrbTextEntry(const TGWindow * Parent, TGTextBuffer * Text, Int_t Id,
								GContext_t /*Context*/, FontStruct_t Font, UInt_t /*Option*/, ULong_t Back) :
														TGTextEntry(Parent, Text, Id) {
			this->SetFont(Font);
			this->SetBackgroundColor(Back);
		};

		~TGMrbTextEntry() {};
		
		virtual Bool_t HandleButton(Event_t * Event);

	ClassDef(TGMrbTextEntry, 1) 	// [GraphUtils] A text entry
};
			
//______________________________________________________[C++ CLASS DEFINITION]
//////////////////////////////////////////////////////////////////////////////
// Name:           TGMrbLabelEntry
// Purpose:        Define a labelled text entry
// Description:    Defines a label together with a text entry field.
//                 an Up/Down button may be appended to increment entry data.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

class TGMrbLabelEntry: public TGCompositeFrame, public TGMrbObject {

	public:
		enum EGMrbEntryButton	{	kGMrbEntryButtonUp,
									kGMrbEntryButtonDown,
									kGMrbEntryButtonBegin,
									kGMrbEntryButtonEnd,
									kGMrbEntryButtonCheck,
									kGMrbEntryButtonRadio
								};

		enum EGMrbEntryType 	{	kGMrbEntryTypeChar,
									kGMrbEntryTypeInt,
									kGMrbEntryTypeDouble,
									kGMrbEntryTypeCharInt,
									kGMrbEntryTypeCharDouble
								};

		enum					{	kGMrbEntryNofEntries = 10	};

	public:
		TGMrbLabelEntry(const TGWindow * Parent, const Char_t * Label,				// ctor
									Int_t BufferSize, Int_t FrameId,
									Int_t Width, Int_t Height, Int_t EntryWidth,
									TGMrbLayout * FrameGC,
									TGMrbLayout * LabelGC = NULL,
									TGMrbLayout * EntryGC = NULL,
									TGMrbLayout * UpDownBtnGC = NULL,
									Bool_t BeginEndBtns = kFALSE,
									TMrbNamedX * Action = NULL,
									TGMrbLayout * ActionGC = NULL,
									TMrbLofNamedX * CheckBtns = NULL,
									TMrbLofNamedX * RadioBtns = NULL,
									UInt_t FrameOptions = kHorizontalFrame,
									UInt_t EntryOptions = kSunkenFrame | kDoubleBorder,
									Int_t NofEntries = 1);

		~TGMrbLabelEntry() {};				// default dtor

		void SetType(EGMrbEntryType EntryType, Int_t Width = 0, Int_t BaseOrPrec = -1, Bool_t PadZero = kFALSE);
		void SetIncrement(Double_t Increment, Int_t EntryNo = -1);
		Bool_t SetRange(Double_t LowerLimit, Double_t UpperLimit, Int_t EntryNo = -1);
		Bool_t WithinRange(Int_t EntryNo = 0) const;
		Bool_t CheckRange(Double_t Value, Int_t EntryNo = 0, Bool_t Verbose = kFALSE, Bool_t Popup = kFALSE) const;
		Bool_t RangeToBeChecked(Int_t EntryNo = 0) const;

		inline void AddToFocusList(TGMrbFocusList * FocusList, Int_t EntryNo = 0) { fFocusList = FocusList; fFocusList->Add(fEntry[EntryNo]); };
		inline TGMrbFocusList * GetFocusList() const { return(fFocusList); };

		inline TGMrbTextEntry * GetEntry(Int_t EntryNo = 0) const { return(fEntry[EntryNo]); };
		inline TGPictureButton * GetUpButton(Int_t EntryNo = 0) const { return(fUp[EntryNo]); };
		inline TGPictureButton * GetDownButton(Int_t EntryNo = 0) const { return(fDown[EntryNo]); };
		inline TGPictureButton * GetBeginButton(Int_t EntryNo = 0) const { return(fBegin[EntryNo]); };
		inline TGPictureButton * GetEndButton(Int_t EntryNo = 0) const { return(fEnd[EntryNo]); };
		inline TGTextButton * GetActionButton() const { return(fAction); };
		inline TGMrbCheckButtonList * GetLofCheckButtons() const { return(fCheckBtns); };
		inline TGMrbRadioButtonList * GetLofRadioButtons() const { return(fRadioBtns); };

		inline TGMrbCheckButtonList * CheckBtns() { return(fCheckBtns); };
		inline TGMrbRadioButtonList * RadioBtns() { return(fRadioBtns); };
		inline TGTextButton * ActionBtn() { return(fAction); };

		inline void SetCheckButtonBits(UInt_t Bits) { if (fCheckBtns) fCheckBtns->SetState(Bits, kButtonDown); };
		inline void SetRadioButtonBits(UInt_t Bits) { if (fRadioBtns) fRadioBtns->SetState(Bits, kButtonDown); };
		inline UInt_t GetCheckButtonBits() { return(fCheckBtns ? fCheckBtns->GetActive() : 0); };
		inline UInt_t GetRadioButtonBits() { return(fRadioBtns ? fRadioBtns->GetActive() : 0); };

		void UpDownButtonEnable(Bool_t Flag = kTRUE);			// enable/disable up/down buttons
		void ActionButtonEnable(Bool_t Flag = kTRUE);			// enable/disable action button

		TGMrbTextEntry * GetTextEntry(Int_t EntryNo = 0);		// get text entry
		const Char_t * GetText(Int_t EntryNo = 0);				// get text, update tooltip if necessary
		Int_t GetText2Int(Int_t EntryNo = 0);					// get text, convert to integer
		Double_t GetText2Double(Int_t EntryNo = 0);				// ... convert to integer
		void SetText(const Char_t * Text, Int_t EntryNo = 0);	// set text, update tooltip if necessary
		void SetText(Int_t Value, Int_t EntryNo = 0);			// ... convert from integer
		void SetText(Double_t Value, Int_t EntryNo = 0);		// ... from double

		void SetTextAlignment(ETextJustification Align, Int_t EntryNo = -1);		// set text alignment

		void SetState(Bool_t Flag, Int_t EntryNo = -1); 		// enable/disable

		inline TGLabel * GetLabel() { return(fLabel); };

		void ShowToolTip(Bool_t Flag = kTRUE, Bool_t ShowRange = kFALSE);

		void BeginButtonPressed(Int_t EntryNo);		// slot methods called upon ButtonPressed() signals
		void EndButtonPressed(Int_t EntryNo);
		void UpButtonPressed(Int_t EntryNo);
		void DownButtonPressed(Int_t EntryNo);
		inline void EntryChanged(Int_t EntryNo) { this->EntryChanged(fFrameId, EntryNo); };

		void EntryChanged(Int_t FrameId, Int_t EntryNo);			// *SIGNAL*

		inline void Help() { gSystem->Exec(Form("mrbHelp %s", this->ClassName())); };

	protected:
		void CreateToolTip(Int_t EntryNo = 0);

	protected:
		Int_t fFrameId;										// id
		Int_t fNofEntries;									// number of entries
		TGLabel * fLabel;									//! label
		TGMrbTextEntry * fEntry[kGMrbEntryNofEntries];		//! entry widget(s)
		TGPictureButton * fUp[kGMrbEntryNofEntries]; 		//! button ">", increment
		TGPictureButton * fDown[kGMrbEntryNofEntries];		//! button "<", decrement
		TGPictureButton * fBegin[kGMrbEntryNofEntries]; 	//! button "<<", begin
		TGPictureButton * fEnd[kGMrbEntryNofEntries]; 		//! button ">>", end
		TGTextButton * fAction; 							//! textbutton
		TGMrbCheckButtonList * fCheckBtns;					//!checkbuttons
		TGMrbRadioButtonList * fRadioBtns;					//!radiobuttons
		EGMrbEntryType fType;								// entry type: char, char + int, ...
		Int_t fWidth;										// number of digits to be displayed
		Int_t fBase;										// numerical base if of type int or charint (2, 8, 10, 16)
		Int_t fPrecision;									// precision if type double
		Bool_t fPadZero; 									// should we pad with 0?
		Double_t fLowerLimit[kGMrbEntryNofEntries];			// lower limit
		Double_t fUpperLimit[kGMrbEntryNofEntries];			// upper limit
		Double_t fIncrement[kGMrbEntryNofEntries];			// increment

		Bool_t fShowToolTip;			// kTRUE if tooltip has to be shown
		Bool_t fShowRange;				// kTRUE if range has to be shown in tooltip

	TGMrbFocusList * fFocusList;	//! list of focusable entries

	ClassDef(TGMrbLabelEntry, 1)		// [GraphUtils] An entry field with a label
};

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