//Author: Dariusz Mi$kowiec
//Date:   1999

///////////////////////////////////////////////////////////////////////////////
// DGModule is GUI for DModule
// DGModule is parent of DGLogic, DGScaler etc. while DModule is parent of DLogic, DScaler etc. 
///////////////////////////////////////////////////////////////////////////////

#include "DGModule.h"

#ifdef COMPIL 
  ClassImp(DGModule)
#endif

//-----------------------------------------------------------------------------
     DGModule::DGModule(DModule *module)  : 
      TGMainFrame(gClient->GetRoot(), 0, 0) {

  // I use initial width and height of 0, and resize later 

  char str[80];

  cout << "constructing DGModule" << endl;
  fModule = module;
  fMemList = new TObjArray();

  fMenuBar = new TGMenuBar(this, 1, 1,               kHorizontalFrame);
  fComm = new TGGroupFrame(this, "Communication",    kHorizontalFrame);
  fMDes = new TGGroupFrame(this, "Module description", kVerticalFrame);
  fMDat = new TGGroupFrame(this, "Module data",        kVerticalFrame);

  fMenuBarLayout = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX,
                                      0, 0, 1, 1);
  fL1 = new TGLayoutHints(kLHintsCenterX | kLHintsExpandX, 5,5,5,5);
  fL2 = new TGLayoutHints(kLHintsLeft, 2,2,5,0);

  fMDes->SetLayoutManager(new TGMatrixLayout(fMDes, 0, 2, 5));
 
  this->AddFrame(fMenuBar, fMenuBarLayout);
  this->AddFrame(fComm,    fL1);
  this->AddFrame(fMDes,    fL1);
  this->AddFrame(fMDat,    fL1);
  fMemList->Add(fMenuBar);
  fMemList->Add(fComm);
  fMemList->Add(fMDes);
  fMemList->Add(fMDat);
  fMemList->Add(fMenuBarLayout);
  fMemList->Add(fL1);
  fMemList->Add(fL2);

  fMenuFile = new TGPopupMenu(fClient->GetRoot());
  fMenuFile->AddEntry("&Exit", 11);
  fMenuFile->Associate(this);
  fMenuBar->AddPopup("&File", fMenuFile, fL2);
  fMemList->Add(fMenuFile);

  fComm->AddFrame(
         fRefresh = new TGCheckButton(fComm,"Auto refresh (ms) ",20), fL2);
  fRefresh->Associate(this);
  fRefresh->SetToolTipText("Activate automatic refreshing");
  fRefreshTimeBuf = new TGTextBuffer(16);
  fRefreshTimeEnt = new TGTextEntry(fComm, fRefreshTimeBuf, 21);
  fRefreshTimeEnt->Resize(40,fRefreshTimeEnt->GetDefaultHeight());
  fComm->AddFrame(fRefreshTimeEnt,fL2);
  fRefreshTimeEnt->Associate(this);
  fMemList->Add(fRefresh);
  fMemList->Add(fRefreshTimeEnt);

  fMDes->AddFrame(new TGLabel(fMDes, new TGString("Generic type:")));
  fMDes->AddFrame(new TGLabel(fMDes, new TGString(fModule->GetGenTypeDescription())));
  fMDes->AddFrame(new TGLabel(fMDes, new TGString("Actual type:")));
  fMDes->AddFrame(new TGLabel(fMDes, new TGString(fModule->GetActTypeDescription())));
  fMDes->AddFrame(new TGLabel(fMDes, new TGString("Base address:")));
  sprintf(str,"0x%x",fModule->GetAdBase());
  fMDes->AddFrame(new TGLabel(fMDes, new TGString(str)));

  this->SetWindowName("VME module");
  this->SetIconName("VME module");
  this->MapSubwindows();
  this->Layout();
  this->MapWindow();

  fRefreshTimeBuf->Clear();
  fRefreshTimeBuf->AddText(0,"1000");
  fRefreshTime            = 1000;
  fClient->NeedRedraw(fRefreshTimeEnt);
  fTimer = new TTimer(this,fRefreshTime);
}

//-----------------------------------------------------------------------------
 DGModule::~DGModule() {
  cout <<"destroying DGModule" << endl;
  fTimer->TurnOff();
  //  fMemList->Delete();
}
//-----------------------------------------------------------------------------
 Bool_t DGModule::HandleTimer(TTimer *tim) {
  // Actions after timer time-out
  fTimer->Reset();
  return kTRUE;
}
//-----------------------------------------------------------------------------
 Bool_t DGModule::ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2) {
  // Process events generated by the buttons in the frame.

  //  printf("gdmodule process message called %ld %ld %ldn",msg,parm1,parm2);
  
  switch (GET_MSG(msg)) {
  case kC_COMMAND:
    switch (GET_SUBMSG(msg)) {
    case kCM_CHECKBUTTON:
      //      printf("check button id %ld %ld pressedn", parm1, parm2);
      switch (parm1) {
      case 20:
	if (fRefresh->GetState()) {
	  fTimer->SetTime(fRefreshTime);
	  fTimer->TurnOn();
	} else {
	  fTimer->TurnOff();
	}
	break;
      default:
	break;
      }
      break;
    case kCM_MENU:
      if (parm1 == 11) delete this;
    default:
      break;
    }
  case kC_TEXTENTRY:
    switch (GET_SUBMSG(msg)) {
    case kTE_ENTER:
      if (parm1==21) {
	fRefreshTime = atoi(fRefreshTimeBuf->GetString());
	fTimer->SetTime(fRefreshTime);
      }
      break;
    default:
      break;
    }
    break;
  default:
    break;
  }
  return kTRUE;
}
//-----------------------------------------------------------------------------


ROOT page - Class index - Top of the page

This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.