#ifndef SPMRoot_HH
#define SPMRoot_HH
#include "CamacIO.h"
#include "UsbIO.h"
#include "PelTools.h"
#include "ScanRoot.h"
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <TGClient.h>
#include <TGButton.h>
#include <TGMenu.h>
#include "TApplication.h"
#include "TTimer.h"
#include "TString.h"
#include "TGButton.h"
#include "TGLabel.h"
#include "TGTextEntry.h"
#include "TGFileDialog.h"
#include "TROOT.h"
#include "TSystem.h"
#include "TInterpreter.h"
#include "TDatime.h"
#include "TH2.h"
#include "TNamed.h"
#include "TGTextView.h"
#include "TBrowser.h"
#include "TCanvas.h"
#include "TGMsgBox.h"
#include "TFile.h"
#include "TStopwatch.h"
#include "TStyle.h"
#include "TSystemDirectory.h"
#include "TDialog.h"
#include "log.hh"
#include "version.h"
#define NLABELS 13
#define NMENUS 11
#define NBUTTONS 4
#define NFLAGS 9
#define NSTRINGS 7
#define NREGISTERS 12
#define MAXHIST 1000
#define MAXSCALERS 6
#define RUNNINGCOLOR 0x00FF00
#define STOPPEDCOLOR 0xFF0000
#define PAUSEDCOLOR 0x0000FF
#define ID1D 10000
#define ID2D 20000
#define MAXPARAM 8192
using namespace std;
class SPMRoot : public TGMainFrame
{
public:
SPMRoot(const TGWindow*,int,int,bool = false,char* = "/dev/c111a0");
virtual ~SPMRoot();
bool ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2);
virtual Bool_t HandleConfigureNotify(Event_t*);
void CloseWindow();
private:
void setCamac(char* a) { mString[kCAMAC] = a;}
void loadConfig();
void saveConfig();
void updateGUI();
void updateSTATS();
bool HandleTimer(TTimer*);
bool startRun();
bool stopRun(int = 0);
bool pauseRun();
bool loadEVO();
bool loadHist();
bool saveHist(char* = NULL);
bool setAutoSaveHist();
bool setFilMode(int);
bool l2Load();
bool l2Unload();
bool zeroAll();
bool zero(int);
bool about();
bool eventLoop(int = 0);
bool readScalers();
bool zeroScalers();
bool setNScalers();
bool configScalers();
bool setScalersCrate();
bool setCamacBuffer();
bool setMaxNpar();
PelTools* mTools;
PelIO* mIO;
ScanRoot* mSCAN;
TTimer* mAquisTimer;
TTimer* mUpdateTimer;
TDatime* mTimeStart;
TDatime* mTimeStop;
TStopwatch* timing;
bool mDebug;
TString mString[NSTRINGS];
bool mFlag[NFLAGS];
int mRegister[NREGISTERS];
int mScalerId[MAXSCALERS];
short npar;
float par[MAXPARAM];
float mDeadTime;
float mRunTime;
double mNBytesSaved;
double mSplitSize;
TGMenuBar* mMenu;
TGPopupMenu* mPop[NMENUS];
TGTextButton* mButton[NBUTTONS];
TGGroupFrame* mStatFrame;
TGLabel* mLabels[NLABELS];
TGTextEntry* mText[NLABELS];
TGTextView* mTextView;
enum {kFILE,kAQUIS,kTOOLS,kDISPLAY,kHELP,kFIL,
kSPLIT,kLEVEL2,kZERO,kZERO1,kZERO2};
enum {kSTARTB,kSTOPB,kPAUSEB,kSTATUSB};
enum {kEVOLOAD,kHISTLOAD,kL2LOAD,kFILENABLE,kTAPEENABLE,
kHISTAUTOSAVE,kRUNNING,kPAUSED,kSPLITMODE};
enum {kHISTLIB,kEVOFILE,kHISTFILE,kL2FILE,kFILFILE,
kFILFILE2,kCAMAC};
enum {kMAXNPARR,kRUNR,kNEVENTSR,kNSAVEDR,kSPLITR,kNLOSTR,
kNEVENTSLASTR,kNLASTR,kNSCALERSR,kSCALERCRATER,
kBUFFERSIZER,kEVENTLOOPR};
enum {kCmdStart,kCmdStop,kCmdPause,kCmdLoadEvo,kCmdLoadHist,
kCmdSaveHist,kCmdAutoSave,kCmdFilMode1,kCmdFilMode2,
kCmdFilMode3,kCmdExit,kCmdL2Load,kCmdL2Unload,
kCmdSplitNone,kCmdSplit1,kCmdSplit2,kCmdSplit3,
kCmdZeroAll,kCmdReadScalers,kCmdZeroScalers,
kCmdSetNScalers,kCmdConfigScalers,kCmdCamacBuffer,
kCmdNPar,kCmdScalerCrate,kCmdCanvas,kCmdBrowser,
kCmdTools,kCmdHelp,kCmdAbout,kCmdSaveConfig};
ClassDef(SPMRoot,1)
};
#endif