#include "MGDisplayAdc.h" MGDisplayAdc::MGDisplayAdc ( MHistosAdc *Histos, const TGWindow *p, const TGWindow *main, UInt_t w, UInt_t h, UInt_t options) : TGTransientFrame(p, main, w, h, options ) { // default constructor // fHists = Histos ; // the top frame for the list and some buttons and the Canvas fFrameTop = new TGHorizontalFrame (this, 60,20, kFitWidth ) ; // left part of top frame fFT1 = new TGVerticalFrame (fFrameTop, 80,300, kFitWidth ) ; fHistoList = new TGListBox ( fFT1, M_LIST_HISTO ) ; fHistoList->Associate( this ) ; fFT1->AddFrame ( fHistoList, new TGLayoutHints (kLHintsLeft | kLHintsTop, 10, 10, 10, 10 ) ) ; fHistoList->Resize(80, 300 ) ; fFrameTop->AddFrame (fFT1, new TGLayoutHints ( kLHintsTop , 10, 10, 10, 10 ) ) ; // middle part of top frame // fFT2 = new TGVerticalFrame (fFrameTop, 80,20, kFitWidth ) ; fButtonPrev = new TGTextButton ( fFT2, "Prev Histo", M_BUTTON_PREV ) ; fButtonPrev->Associate (this) ; fFT2->AddFrame ( fButtonPrev, new TGLayoutHints (kLHintsLeft | kLHintsTop,10, 10, 0, 10 ) ) ; fVslider1 = new TGVSlider (fFT2, 250, kSlider1 | kScaleBoth, VSId1); fVslider1->Associate(this); fVslider1->SetRange(0, 576); fFT2->AddFrame(fVslider1); fButtonNext = new TGTextButton ( fFT2, "Next Histo", M_BUTTON_NEXT ) ; fButtonNext->Associate (this) ; fFT2->AddFrame ( fButtonNext, new TGLayoutHints (kLHintsLeft | kLHintsTop, 10, 10, 10, 5 ) ) ; fFrameTop->AddFrame (fFT2, new TGLayoutHints ( kLHintsTop , 10, 10, 10, 10 ) ) ; // right part of top frame // fFT3 = new TGVerticalFrame (fFrameTop, 60, 60, kFitWidth ) ; fECanv = new TRootEmbeddedCanvas("fECanv", fFT3, 400, 400 ) ; fFT3->AddFrame( fECanv, new TGLayoutHints ( kLHintsCenterX | kLHintsCenterY | kLHintsExpandX | kLHintsExpandY , 10, 10, 10, 10 ) ) ; fCanv = fECanv->GetCanvas() ; fFrameTop->AddFrame (fFT3, new TGLayoutHints ( kLHintsCenterX | kLHintsCenterY | kLHintsExpandX | kLHintsExpandY , 10, 10, 10, 10 ) ) ; AddFrame ( fFrameTop, new TGLayoutHints ( kLHintsTop | kLHintsExpandX , 10, 10, 10, 10 ) ) ; // // the low frame for the control buttons // fFrameLow = new TGHorizontalFrame (this, 60,20, kFixedWidth ) ; fButtonSave = new TGTextButton ( fFrameLow, "Save", M_BUTTON_SAVE ) ; fButtonSave->Associate (this) ; fFrameLow->AddFrame ( fButtonSave, new TGLayoutHints (kLHintsLeft | kLHintsTop, 10, 10, 5, 5 ) ) ; fButtonPrint = new TGTextButton ( fFrameLow, "Print", M_BUTTON_PRINT ) ; fButtonPrint->Associate (this) ; fFrameLow->AddFrame ( fButtonPrint, new TGLayoutHints (kLHintsLeft | kLHintsTop, 10, 10, 5, 5 ) ) ; fButtonPrintAll = new TGTextButton ( fFrameLow, "PrintAll", M_BUTTON_PRINTALL ) ; fButtonPrintAll->Associate (this) ; fFrameLow->AddFrame ( fButtonPrintAll, new TGLayoutHints (kLHintsLeft | kLHintsTop, 10, 10, 5, 5 ) ) ; fButtonClose = new TGTextButton ( fFrameLow, "Close", M_BUTTON_CLOSE ) ; fButtonClose->Associate (this) ; fFrameLow->AddFrame ( fButtonClose, new TGLayoutHints (kLHintsLeft | kLHintsTop, 10, 10, 5, 5 ) ) ; AddFrame ( fFrameLow, new TGLayoutHints ( kLHintsBottom | kLHintsExpandX , 10, 10, 10, 10 ) ) ; // // // BuildHistoList() ; MapSubwindows(); Layout(); SetWindowName("ADC Spectra"); SetIconName("ADC Spectra"); MapWindow(); SetWMSizeHints(400, 470, 1000, 1000, 10, 10); } // ====================================================================== // ====================================================================== // // MGDisplayAdc::~MGDisplayAdc () { delete fButtonSave ; delete fButtonPrint ; delete fButtonPrintAll ; delete fButtonClose ; delete fButtonPrev; delete fButtonNext ; delete fECanv ; delete fHistoList ; delete fFT1 ; delete fFT2 ; delete fFT3 ; delete fFrameLow ; delete fFrameTop ; } // ====================================================================== // ====================================================================== void MGDisplayAdc::CloseWindow() { // Got close message for this MainFrame. Calls parent CloseWindow() // (which destroys the window) and terminate the application. // The close message is generated by the window manager when its close // window menu item is selected. // delete this ; // TGTransientFrame::CloseWindow(); // TGMainFrame::CloseWindow(); // gROOT->GetApplication()->Terminate(0) ; } // ====================================================================== // ====================================================================== Bool_t MGDisplayAdc::BuildHistoList() { // looks in the container of the AdcSpectra and reads in the // Histogramms in there. // // In the class MHistosAdc are in fact two lists. One for the high and // one for the low gain. Here we will use only the high gain list!!! // With some special options (settings in the gui) we will also be able // to plot the low gain // for ( Int_t i=0 ; i < fHists->GetHighEntries(); i++ ) { fHistoList->AddEntry(fHists->GetHighList()->At(i)->GetName(), i+1) ; } fHistoList->MapSubwindows() ; fHistoList->Layout() ; return (kTRUE) ; } // ====================================================================== // ====================================================================== Bool_t MGDisplayAdc::ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2) { // cout <<"Entering process method." << endl; // Process events generated by the buttons in the frame. // Int_t buttons = 4, retval = 0 ; Char_t wort[100] ; Char_t extens[5] ; Char_t command[110] ; TGFileItem *item ; // to process items in the file view container void *np = NULL ; // null pointer switch (GET_MSG(msg)) { case kC_COMMAND: switch (GET_SUBMSG(msg)) { case kCM_BUTTON: switch (parm1) { case M_BUTTON_SAVE: new TGMsgBox(fClient->GetRoot(), this, "WARNING!", "Not implemented yet.", kMBIconExclamation, buttons, &retval); break ; case M_BUTTON_PRINT: break; case M_BUTTON_CLOSE: CloseWindow() ; break ; case M_BUTTON_PREV: fCanv->cd() ; fHists->GetHighList()->At( fHistoList->GetSelected()-1-1)->Draw() ; fCanv->Modified() ; fCanv->Update() ; fVslider1->SetPosition( fHistoList->GetSelected()-1); break; default: break ; } case kCM_MENU: switch (parm1) { } break ; default: break ; } case kCM_LISTBOX: switch (GET_SUBMSG(msg)) { case M_LIST_HISTO: fCanv->cd() ; fHists->GetHighList()->At( fHistoList->GetSelected()-1)->Draw() ; fCanv->Modified() ; fCanv->Update() ; fVslider1->SetPosition( fHistoList->GetSelected()-1); default: break ; } case kC_CONTAINER: switch (GET_SUBMSG(msg)) { case kCT_ITEMDBLCLICK: break; default: break ; } default: break; case kC_VSLIDER: switch(GET_SUBMSG(msg)) { case kSL_POS: { switch(parm1) { case VSId1: fCanv->cd() ; fHists->GetHighList()->At(parm2)->Draw() ; fCanv->Modified() ; fCanv->Update() ; break; } break; } break; } break; } return kTRUE; }