ROOT logo
#ifndef __DGFMcaDisplayPanel_h__
#define __DGFMcaDisplayPanel_h__

//_________________________________________________[C++ CLASS DEFINITION FILE]
//////////////////////////////////////////////////////////////////////////////
// Name:           DGFMcaDisplayPanel.h
// Purpose:        Class defs for the XIA DGF-4C GUI
// Class:          DGFMcaDisplayPanel
// Description:    A GUI to operate a XIA DGF-4C
// Author:         R. Lutter
// Revision:       $Id: DGFMcaDisplayPanel.h,v 1.11 2008-12-29 13:48:24 Rudolf.Lutter Exp $       
// Date:           
// URL:            
// Keywords:       
//////////////////////////////////////////////////////////////////////////////

#include "TList.h"

#include "TRootEmbeddedCanvas.h"
#include "TTimer.h"
#include "TCanvas.h"
#include "TGWindow.h"
#include "TGFrame.h"
#include "TGButton.h"
#include "TGFileDialog.h"
#include "TGMenu.h"

#include "TMrbLofNamedX.h"
#include "TMrbNamedX.h"
#include "TMrbDGF.h"
#include "TMrbDGFEventBuffer.h"

#include "HistPresent.h"
#include "FitHist.h"

#include "TGMrbTextButton.h"
#include "TGMrbRadioButton.h"
#include "TGMrbPictureButton.h"
#include "TGMrbLabelEntry.h"
#include "TGMrbFileEntry.h"
#include "TGMrbLabelCombo.h"
#include "TGMrbMacroBrowser.h"
#include "TGMrbProgressBar.h"

#include "DGFControlCommon.h"

//______________________________________________________[C++ CLASS DEFINITION]
//////////////////////////////////////////////////////////////////////////////
// Name:           DGFMcaDisplayPanel
// Purpose:        Main frame to accumulate & display histograms
// Constructors:   
// Description:    
// Keywords:       
//////////////////////////////////////////////////////////////////////////////

class DGFMcaDisplayPanel : public TGCompositeFrame {

	public:

				
		// cmd ids to dispatch over X events in this panel
		enum EDGFMcaCmdId		{
									kDGFMcaDisplayRunTime, 			//		runtime
									kDGFMcaDisplayTimeScale,		//				time scale
									kDGFMcaDisplaySelectDisplay, 	//		module/channel
									kDGFMcaDisplayRefreshDisplay, 	//		refresh
									kDGFMcaDisplayAcquire,			//		actions start accu
									kDGFMcaDisplayStop,				//				stop accu
									kDGFMcaDisplayHisto, 			//				display histogram
									kDGFMcaDisplayHistoClear, 		//				... & clear
									kDGFMcaDisplaySelectAll,		//  	select	all
									kDGFMcaDisplaySelectNone,		//				none
									kDGFMcaDisplaySelectColumn,		//				column
									kDGFMcaDisplaySelectChannel,	//		select	channel
									kDGFMcaDisplaySelectTimeScale	//				time scale
								};

		enum EDGFMcaTimeScaleId {
									kDGFMcaTimeScaleSecs =	BIT(0),		//	seconds
									kDGFMcaTimeScaleMins =	BIT(1),		//	minutes
									kDGFMcaTimeScaleHours = BIT(2),		//	hours
									kDGFMcaTimeScaleInfin = BIT(3)		//	infin
								};

		enum EDGFMcaRunState	 {
									kDGFMcaRunStopped = 0,
									kDGFMcaRunPausing,
									kDGFMcaIsRunning
								};

		enum					{	kDGFAccuTimerID,
									kDGFRefreshTimerID
								};

	public:
		DGFMcaDisplayPanel(TGCompositeFrame * TabFrame);
		virtual ~DGFMcaDisplayPanel() { fHeap.Delete(); };

		virtual Bool_t HandleTimer(TTimer * Timer);

		void SelectModule(Int_t FrameId, Int_t Selection);		// slot methods
		void SelectDisplay(Int_t FrameId, Int_t Selection);
		void EntryChanged(Int_t FrameId, Int_t Selection);
		void PerformAction(Int_t FrameId, Int_t Selection);
		void RadioButtonPressed(Int_t FrameId, Int_t Selection);

		Bool_t McaPause();
		Bool_t McaResume();

	protected:
		Bool_t ResetValues();													// clear entry fields
		Bool_t Update(Int_t EntryId);											// update program state on X events
		void MoveFocus(Int_t EntryId);											// move focus to next entry
		Bool_t AcquireHistos(); 												// start accu
		Bool_t StoreHistos();
		Bool_t DisplayHisto(Bool_t ClearMCA = kFALSE);

	protected:
		TList fHeap;								//! list of objects created on heap
		TGGroupFrame * fModules;			 		// module list
		TGMrbCheckButtonList * fCluster[kNofClusters];
		TGHorizontalFrame * fGroupFrame;
		TGMrbPictureButtonList * fGroupSelect[kNofModulesPerCluster];
		TGMrbPictureButtonList * fAllSelect;
		TGHorizontalFrame * fHFrame;
		TGMrbCheckButtonGroup * fSelectChannel;		//		channel

		TGGroupFrame * fAccuFrame;	 				//	accu
		TGMrbLabelEntry * fRunTimeEntry; 			//		runtime
		TGMrbRadioButtonList * fTimeScale; 			//		time scale

		TGGroupFrame * fDisplayFrame; 				// display
		TGMrbLabelCombo * fDisplayModule; 			//		module
		TGMrbRadioButtonList * fDisplayChannel;		//		channel
		TGMrbLabelEntry * fRefreshTimeEntry; 		//		refresh

		TGMrbTextButtonGroup * fButtonFrame;

		TMrbLofNamedX fLofDGFModuleKeys[kNofClusters];
		
		TMrbLofNamedX fMcaTimeScaleButtons;
		TMrbLofNamedX fMcaActions;

		TMrbLofNamedX fLofModuleKeys;				//! ... key list
		TMrbLofNamedX fLofChannels;					//! channel numbers

		TGMrbFocusList fFocusList;

		TGMrbProgressBar * fProgressBar;			// progress bar to show accu state
		TTimer * fAccuTimer;						// accu timer
		Bool_t fStopAccu;							// kTRUE if accu has to be stopped
		EDGFMcaRunState fRunState;					// run state
		Int_t fSecsToWait;							// seconds to wait
		Int_t fStopWatch;							// stopwatch

		TTimer * fRefreshTimer;						// refresh timer

		TGGroupFrame * fCanvasFrame; 				// display
		TRootEmbeddedCanvas * fCanvas;				// canvas to display histogram

		DGFModule * fModuleToBeDisplayed;			// module selected for display

		FitHist * fFitHist; 						// canvas

	ClassDef(DGFMcaDisplayPanel, 0) 	// [DGFControl] Accumulate/display MCA spectra
};

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