Index: trunk/MagicSoft/Mars/Changelog
===================================================================
--- trunk/MagicSoft/Mars/Changelog	(revision 954)
+++ trunk/MagicSoft/Mars/Changelog	(revision 956)
@@ -21,4 +21,9 @@
    * mmontecarlo/MMcTriggerRateCalc.cc:
      - removed output stuff from PostProcessing
+
+   * meventdisp/MGFadcDisp.[h,cc]:
+     - reorganized code (constructor)
+     - reorganized deletion of gui objects
+     - fixed many, many memory leaks
 
 
Index: trunk/MagicSoft/Mars/mdatacheck/MDumpEvtHeader.cc
===================================================================
--- trunk/MagicSoft/Mars/mdatacheck/MDumpEvtHeader.cc	(revision 954)
+++ trunk/MagicSoft/Mars/mdatacheck/MDumpEvtHeader.cc	(revision 956)
@@ -28,4 +28,5 @@
 #include "MLog.h"
 #include "MLogManip.h"
+
 #include "MParList.h"
 #include "MRawEvtHeader.h"
@@ -40,5 +41,5 @@
     {
         *fLog << dbginf << " Error: MRawEvtHeader not found... exit." << endl;
-        return kFALSE ;
+        return kFALSE;
     }
 
@@ -47,5 +48,5 @@
     {
         *fLog << dbginf << " Error: MRawEvtData not found... exit." << endl;
-        return kFALSE ;
+        return kFALSE;
     }
 
@@ -55,14 +56,12 @@
 Bool_t MDumpEvtHeader::Process()
 {
-  fRawEvtHeader->Print() ; 
+  fRawEvtHeader->Print();
 
-  MRawEvtPixelIter pixel( fRawEvtData );
+  MRawEvtPixelIter pixel(fRawEvtData);
 
-  while ( pixel.Next() )
-  {
-      *fLog << " " << pixel.GetPixelId() ;
-  }
+  while (pixel.Next())
+      *fLog << " " << pixel.GetPixelId();
 
-  *fLog << endl ;
+  *fLog << endl;
   
   return kTRUE;
Index: trunk/MagicSoft/Mars/mdatacheck/MDumpEvtHeader.h
===================================================================
--- trunk/MagicSoft/Mars/mdatacheck/MDumpEvtHeader.h	(revision 954)
+++ trunk/MagicSoft/Mars/mdatacheck/MDumpEvtHeader.h	(revision 956)
@@ -14,15 +14,15 @@
 class MParList;
 
-class MDumpEvtHeader : public MTask {
- private:
-  MRawEvtHeader    *fRawEvtHeader;
+class MDumpEvtHeader : public MTask
+{
+private:
+    MRawEvtHeader *fRawEvtHeader;
+    MRawEvtData   *fRawEvtData;
 
-  MRawEvtData      *fRawEvtData;
-
- public:
-  MDumpEvtHeader () : fRawEvtHeader(NULL) { } ;
+public:
+  MDumpEvtHeader () : fRawEvtHeader(NULL) { };
 
   Bool_t PreProcess(MParList *pList);
-  Bool_t Process() ;
+  Bool_t Process();
   
   ClassDef(MDumpEvtHeader, 0)	// Class to dump the pixel ids of a raw evt to the screen
Index: trunk/MagicSoft/Mars/meventdisp/MGFadcDisp.cc
===================================================================
--- trunk/MagicSoft/Mars/meventdisp/MGFadcDisp.cc	(revision 954)
+++ trunk/MagicSoft/Mars/meventdisp/MGFadcDisp.cc	(revision 956)
@@ -26,210 +26,347 @@
 #include "MGFadcDisp.h"
 
-#include <stdlib.h>
-#include <iostream.h>
-
-#include <TGButton.h>      // TGPictureButton
-#include <TGLabel.h>       // TGLabel
-#include <TGTab.h>         // TGTab
-#include <TGListBox.h>     // TGListBox
-#include <TGSlider.h>      // TGVSlider
-#include <TRootEmbeddedCanvas.h>      // TRootEmbeddedCanvas
-#include <TCanvas.h>
-#include <TGTextEntry.h>   
-#include <TGMsgBox.h>
-#include <TG3DLine.h>      // TGHorizontal3DLine
-                           // use TGSplitter instead for root<3.00
-
-
+#include <stdlib.h>               // atoi
+#include <iostream.h>             // cout for debugging
+
+#include <TList.h>                // TList
+#include <TCanvas.h>              // TCanvas
+#include <TRootEmbeddedCanvas.h>  // TRootEmbeddedCanvas
+
+#include <TGTab.h>                // TGTab
+#include <TGLabel.h>              // TGLabel
+#include <TGButton.h>             // TGPictureButton
+#include <TGSlider.h>             // TGVSlider
+#include <TGMsgBox.h>             // TGMsgBox
+#include <TGListBox.h>            // TGListBox
+#include <TGTextEntry.h>          // TGTextEntry
+
+#include <TG3DLine.h>             // TGHorizontal3DLine
+                                  // use TGSplitter instead for root<3.00
 #include "MParList.h"
-#include "MRawRunHeader.h"
-#include "MRawEvtHeader.h"
-#include "MTime.h"
+#include "MReadTree.h"
 #include "MRawEvtData.h"
-#include "MRawCrateArray.h"
-#include "MReadTree.h"
 #include "MRawEvtPixelIter.h"
 
-ClassImp(MGFadcDisp)
-
-
-MGFadcDisp::MGFadcDisp(char *filename, char *treename, 
-		       const TGWindow *p, const TGWindow *main, 
-		       UInt_t w, UInt_t h ) 
-        : TGTransientFrame(p, main, w, h )  
-{
-  //   default constructor 
-
-  //   first connect the file with this Object
+ClassImp(MGFadcDisp);
+
+enum MGFadcDispCommand
+{
+    M_PIXELLIST = 4201,
+    M_PREVEVT,
+    M_NEXTEVT,
+    M_EVTNUMBER,
+
+    M_PREVPIXEL,
+    M_NEXTPIXEL,
+
+    M_PRINT,
+    M_CLOSE
+}; 
+
+void MGFadcDisp::AddTopFramePart1(TGVerticalFrame *frame,
+                                  const char *filename,
+                                  const char *treename)
+{
+    //
+    //  --- the top1 part of the window ---
+    //
+    TGHorizontalFrame *top1 = new TGHorizontalFrame(frame, 300, 100);
+    fList->Add(top1);
+
+    //
+    // create gui elements
+    //
+    TGLabel *lfile = new TGLabel(top1, new TGString("File:"));
+    TGLabel *file  = new TGLabel(top1, new TGString(filename));
+    TGLabel *ltree = new TGLabel(top1, new TGString("Tree:"));
+    TGLabel *tree  = new TGLabel(top1, new TGString(treename));
+
+    fList->Add(lfile);
+    fList->Add(file);
+    fList->Add(ltree);
+    fList->Add(tree);
+
+    //
+    // layout and add gui elements in/to frame
+    //
+    TGLayoutHints *laystd = new TGLayoutHints(kLHintsLeft, 10, 10, 10, 10);
+    fList->Add(laystd);
+
+    top1->AddFrame(lfile, laystd);
+    top1->AddFrame(file,  laystd);
+    top1->AddFrame(ltree, laystd);
+    top1->AddFrame(tree,  laystd);
+
+    //
+    // layout and add frame
+    //
+    TGLayoutHints *laytop1 = new TGLayoutHints(kLHintsTop);
+    fList->Add(laytop1);
+
+    frame->AddFrame(top1, laytop1);
+}
+
+void MGFadcDisp::AddTopFramePart2(TGVerticalFrame *frame)
+{
+    //
+    // --- the top2 part of the window ---
+    //
+    TGHorizontalFrame *top2 = new TGHorizontalFrame(frame, 300, 100);
+    fList->Add(top2);
+
+    //
+    // Create the gui elements
+    //
+    TGTextButton *prevevt = new TGTextButton(top2, "<< Previous Event", M_PREVEVT);
+    prevevt->Associate(this);
+
+    TGLabel *evtnr = new TGLabel(top2, new TGString("Event: "));
+
+    fTxtEvtNr = new TGTextEntry(top2, new TGTextBuffer(100), M_EVTNUMBER);
+    fTxtEvtNr->Resize(60, fTxtEvtNr->GetDefaultHeight());
+    fTxtEvtNr->Associate(this);
+
+    char wortdummy[100];
+    sprintf(wortdummy, "out of %d Events", fReadTree->GetEntries());
+    TGLabel *totnr = new TGLabel(top2, new TGString(wortdummy));
+
+    TGTextButton *nextevt = new TGTextButton (top2, "Next Event >>", M_NEXTEVT);
+    nextevt->Associate(this);
+
+    //
+    // Add gui elements to 'atotodel'
+    //
+    fList->Add(prevevt);
+    fList->Add(evtnr);
+    fList->Add(fTxtEvtNr);
+    fList->Add(totnr);
+    fList->Add(nextevt);
+
+    //
+    // add the gui elements to the frame
+    //
+    TGLayoutHints *laystd    = new TGLayoutHints(kLHintsLeft, 10, 10, 10, 10);
+    TGLayoutHints *laytentry = new TGLayoutHints(kLHintsNormal, 5, 5, 5, 5);
+
+    fList->Add(laystd);
+    fList->Add(laytentry);
+
+    top2->AddFrame(prevevt,   laystd);
+    top2->AddFrame(evtnr,     laystd);
+    top2->AddFrame(fTxtEvtNr, laytentry);
+    top2->AddFrame(totnr,     laystd);
+    top2->AddFrame(nextevt,   laystd);
+
+    frame->AddFrame(top2, new TGLayoutHints(kLHintsCenterX));
+}
+
+void MGFadcDisp::AddMidFrame(TGHorizontalFrame *frame)
+{
+    //
+    // create tab control
+    //
+    TGTab *tabs = new TGTab(frame, 300, 300);
+
+    //
+    // Create Tab1
+    //
+    TGCompositeFrame *tab1 = tabs->AddTab("PixelList");
+    tab1->ChangeOptions(kHorizontalFrame);
+
+    //
+    // Create first gui element for tab1
+    //
+    fPixelList = new TGListBox(tab1, M_PIXELLIST);
+    fPixelList->Associate(this);
+    fPixelList->Resize(80, 230);
+
+    TGLayoutHints *layplist = new TGLayoutHints(kLHintsExpandY|kLHintsLeft, 5, 5, 5, 5);
+    tab1->AddFrame(fPixelList, layplist);
+
+    //
+    // Crete second gui elemet for tab1 (TGVertical Frame)
+    //
+    TGVerticalFrame *mid1 = new TGVerticalFrame(tab1, 300, 100);
+
+    //
+    // Create gui elements for vertical frame
+    //
+    TGTextButton *prevpix = new TGTextButton(mid1, "<< Prev Pixel", M_PREVPIXEL);
+    TGTextButton *nextpix = new TGTextButton(mid1, "Next Pixel >>", M_NEXTPIXEL);
+    prevpix->Associate(this);
+    nextpix->Associate(this);
+
+    TGVSlider *slider = new TGVSlider(mid1, 200, kSlider1|kScaleBoth);
+    slider->Associate(this);
+    slider->SetRange(0, 576);
+
+    //
+    // Layout gui elements
+    //
+    TGLayoutHints *laybut    = new TGLayoutHints(kLHintsRight);
+    TGLayoutHints *layslider = new TGLayoutHints(kLHintsCenterX|kLHintsExpandY);
+
+    mid1->AddFrame(prevpix, laybut);
+    mid1->AddFrame(slider,  layslider);
+    mid1->AddFrame(nextpix, laybut);
+
+    TGLayoutHints *laytab    = new TGLayoutHints(kLHintsRight|kLHintsExpandY, 5, 5, 5, 5);
+    tab1->AddFrame(mid1, laytab);
+
+    TGLayoutHints *laytabs   = new TGLayoutHints(kLHintsNormal|kLHintsExpandY, 10, 10, 10, 10);
+    frame->AddFrame(tabs, laytabs);
+
+    //
+    // Create second part of frame
+    // 
+    TGTab *tabdisp = new TGTab(frame, 300, 300);
+
+    TGCompositeFrame *tab2 = tabdisp->AddTab("Digital Scope");
+
+    TRootEmbeddedCanvas *canvas = new TRootEmbeddedCanvas("Digi Scope", tab2, 400, 400);
+
+    TGLayoutHints *laycanvas = new TGLayoutHints(kLHintsCenterX|kLHintsCenterY|kLHintsExpandX|kLHintsExpandY);
+    tab2->AddFrame(canvas, laycanvas);
+
+    fCanvas = canvas->GetCanvas();
+
+    //
+    // Add second part to frame
+    //
+    TGLayoutHints *laydisp = new TGLayoutHints(kLHintsNormal|kLHintsExpandY|kLHintsExpandX, 10, 10, 10, 10);
+    frame->AddFrame(tabdisp, laydisp);
+
+    //
+    // Now add all gui elements to 'autodel'-list
+    //
+    fList->Add(tabdisp);
+    fList->Add(canvas);
+    fList->Add(laycanvas);
+    fList->Add(laydisp);
+    fList->Add(fPixelList);
+    fList->Add(layplist);
+    fList->Add(mid1);
+    fList->Add(prevpix);
+    fList->Add(laybut);
+    fList->Add(slider);
+    fList->Add(layslider);
+    fList->Add(nextpix);
+    fList->Add(laytab);
+    fList->Add(laytabs);
+
+}
+
+void MGFadcDisp::AddLowFrame(TGHorizontalFrame *frame)
+{
+    TGTextButton *but1 = new TGTextButton(frame, "Print", M_PRINT);
+    TGTextButton *but2 = new TGTextButton(frame, "Close", M_CLOSE);
+
+    but1->Associate(this);
+    but2->Associate(this);
+
+    fList->Add(but1);
+    fList->Add(but2);
+
+    TGLayoutHints *laybut = new TGLayoutHints(kLHintsLeft, 10, 10, 10, 10);
+    fList->Add(laybut);
+
+    frame->AddFrame(but1, laybut);
+    frame->AddFrame(but2, laybut);
+}
+
+void MGFadcDisp::CreateGui(const char *filename, const char *treename)
+{
+    //
+    // Create the frame elements and add gui elements to it
+    //
+    TGVerticalFrame *frametop = new TGVerticalFrame(this, 300, 100);
+    AddTopFramePart1(frametop, filename, treename);
+    AddTopFramePart2(frametop);
+
+    TGHorizontal3DLine *line1   = new TGHorizontal3DLine(this);
+
+    TGHorizontalFrame *framemid = new TGHorizontalFrame(this, 300, 100);
+    AddMidFrame(framemid);
+
+    TGHorizontal3DLine *line2   = new TGHorizontal3DLine(this);
+
+    TGHorizontalFrame *framelow = new TGHorizontalFrame(this, 300, 100);
+    AddLowFrame(framelow);
+
+    //
+    // add frame elements to 'autodel'
+    //
+    fList->Add(frametop);
+    fList->Add(line1);
+    fList->Add(framemid);
+    fList->Add(line2);
+    fList->Add(framelow);
+
+    //
+    // Layout frame elements and add elements to frame
+    //
+    TGLayoutHints *laytop  = new TGLayoutHints(kLHintsTop|kLHintsCenterX);
+    TGLayoutHints *layline = new TGLayoutHints(kLHintsTop|kLHintsExpandX);
+    TGLayoutHints *laymid  = new TGLayoutHints(kLHintsExpandY|kLHintsExpandX);
+    TGLayoutHints *laylow  = new TGLayoutHints(kLHintsTop);
+
+    fList->Add(laytop);
+    fList->Add(layline);
+    fList->Add(laymid);
+    fList->Add(laylow);
+
+    AddFrame(frametop, laytop);
+    AddFrame(line1,    layline);
+    AddFrame(framemid, laymid);
+    AddFrame(line2,    layline);
+    AddFrame(framelow, laylow);
+}
+
+void MGFadcDisp::SetupFileAccess(const char *filename, const char *treename)
+{
+    //
+    // Create the file access elements
+    //
+    fEvtData = new MRawEvtData();
 
     pList = new MParList();
-
-  fRunHeader = new MRawRunHeader();
-  pList->AddToList(fRunHeader);
-
-  fEvtHeader = new MRawEvtHeader();
-  pList->AddToList(fEvtHeader);
-  fEvtTime   = new MTime();
-  pList->AddToList(fEvtTime);
-  fEvtData   = new MRawEvtData();
-  pList->AddToList(fEvtData);
-  fEvtCrate  = new MRawCrateArray();
-  pList->AddToList(fEvtCrate);
-
-  
-  fReadTree  =  new MReadTree ( treename, filename ) ;
-  fReadTree->PreProcess( pList ) ; 
-
-  //
-  //   the top part of the window
-  //
-  fFrameTop = new TGVerticalFrame (this, 300, 100 ) ; 
-
-  fTop1 = new TGHorizontalFrame (fFrameTop, 300, 100 ) ;
-  
-  fLabelFile = new TGLabel(fTop1, new TGString("File:") );
-  fTop1->AddFrame( fLabelFile, new TGLayoutHints (kLHintsLeft, 10, 10, 10, 10)) ; 
-
-  fNameFile = new TGLabel(fTop1, new TGString( filename ) );
-  fTop1->AddFrame( fNameFile, new TGLayoutHints (kLHintsLeft, 10, 10, 10, 10)) ; 
-
-  fLabelTree = new TGLabel(fTop1, new TGString("Tree:") );
-  fTop1->AddFrame( fLabelTree, new TGLayoutHints (kLHintsLeft, 10, 10, 10, 10)) ; 
-
-  fNameTree = new TGLabel(fTop1, new TGString( treename ) );
-  fTop1->AddFrame( fNameTree, new TGLayoutHints (kLHintsLeft, 10, 10, 10, 10)) ;
-
-  fFrameTop->AddFrame(fTop1,new TGLayoutHints (kLHintsTop ) ) ; 
-
-  fTop2 = new TGHorizontalFrame (fFrameTop, 300, 100 ) ;
-  
-  fButtonPrevEvt = new TGTextButton (fTop2, "<< Previous Event", M_PREVEVT ) ;
-  fButtonPrevEvt->Associate(this) ; 
-  fTop2->AddFrame (fButtonPrevEvt, new TGLayoutHints (kLHintsLeft, 10, 10, 10, 10  ) ) ; 
-  
-  fLabelEvtNr = new TGLabel(fTop2, new TGString("Event: ") );
-  fTop2->AddFrame( fLabelEvtNr, new TGLayoutHints (kLHintsLeft, 10, 10, 10, 10)) ; 
-
-  fTxtEvtNr = new TGTextEntry(fTop2, fTxtBufEvtNr = new TGTextBuffer(100), M_EVTNUMBER);
-  fTxtEvtNr->Resize(60, fTxtEvtNr->GetDefaultHeight());
-  fTxtEvtNr->Associate(this) ; 
-  fTop2->AddFrame(fTxtEvtNr, new TGLayoutHints(kLHintsTop | kLHintsLeft,
-                                                       5, 5, 5, 5)); 
-
-  char wortdummy[100] ; 
-  sprintf (wortdummy, "out of %d Events", fReadTree->GetEntries() ) ; 
-  fLabelTotNr = new TGLabel(fTop2, new TGString( wortdummy ) );
-  fTop2->AddFrame( fLabelTotNr, new TGLayoutHints (kLHintsLeft, 10, 10, 10, 10)) ; 
-  
-  fButtonNextEvt = new TGTextButton (fTop2, "Next Event >>", M_NEXTEVT ) ; 
-  fButtonNextEvt->Associate(this) ; 
-  fTop2->AddFrame (fButtonNextEvt, new TGLayoutHints (kLHintsLeft, 10, 10, 10, 10  ) ) ; 
-
-  
-  fFrameTop->AddFrame(fTop2,new TGLayoutHints ( kLHintsCenterX ) ) ; 
-
-  
-
-  AddFrame(fFrameTop, new TGLayoutHints (kLHintsTop | kLHintsCenterX ) ) ;   
-  
-  //   a line between top and mid frame
-
-  fLineSep1 = new TGHorizontal3DLine(this) ; 
-  AddFrame(fLineSep1, new TGLayoutHints(kLHintsTop | kLHintsExpandX) );
-
-  //
-  //   the middle part of the window
-  //
-  
-  fFrameMid = new TGHorizontalFrame (this, 300, 100 ) ; 
-  
-  //   the left part is the control tab enviroment
-  
-  fTabControl = new TGTab(fFrameMid, 300, 300);
-  TGCompositeFrame *tControl = fTabControl->AddTab("PixelList");     
-  tControl->ChangeOptions ( kHorizontalFrame ) ; 
-
-
-  fPixelList = new TGListBox(tControl, M_PIXELLIST ) ; 
-  fPixelList->Associate(this) ; 
-  tControl->AddFrame(fPixelList, new TGLayoutHints(kLHintsExpandY | kLHintsLeft, 5, 5, 5, 5 ) ) ; 
-  fPixelList->Resize(80, 230 ) ;
-
-  fMid1 = new TGVerticalFrame (tControl, 300, 100 ) ; 
-  
-  
-  fButtonPrevPix = new TGTextButton (fMid1, "<< Prev Pixel", 9999 ) ; 
-  fMid1->AddFrame(fButtonPrevPix, new TGLayoutHints(kLHintsRight) ) ; 
-
-  fPixSlider = new TGVSlider (fMid1, 200, kSlider1 | kScaleBoth, 9999 );
-  fPixSlider->Associate(this);
-  fPixSlider->SetRange(0, 576);
-  fMid1->AddFrame(fPixSlider, new TGLayoutHints(kLHintsCenterX | kLHintsExpandY));
-  
-  fButtonNextPix = new TGTextButton (fMid1, "Next Pixel >>", 9999 ) ; 
-  fMid1->AddFrame(fButtonNextPix, new TGLayoutHints(kLHintsRight) ) ; 
-
-  tControl->AddFrame(fMid1, new TGLayoutHints(kLHintsRight | kLHintsExpandY, 5, 5, 5, 5)) ; 
-  
-  fFrameMid-> AddFrame(fTabControl, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandY, 10, 10, 10 ,10 ) );  
-
-  //   the right part is the display tab enviroment
-  
-  fTabDisplay = new TGTab(fFrameMid, 300, 300);
-  TGCompositeFrame *tDisplay = fTabDisplay->AddTab("Digital Scope");     
-
-  fECanDigScope = new TRootEmbeddedCanvas("fECanDigScope", tDisplay, 400, 400 ) ;
-  tDisplay->AddFrame( fECanDigScope, new TGLayoutHints ( kLHintsCenterX | kLHintsCenterY | kLHintsExpandX | kLHintsExpandY ) ) ; 
-
-  fCan = fECanDigScope->GetCanvas() ;
-        
-
-  fFrameMid-> AddFrame(fTabDisplay, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandY | kLHintsExpandX  , 10, 10, 10 ,10 ) );  
-  
-  
-  AddFrame(fFrameMid, new TGLayoutHints (kLHintsExpandY | kLHintsExpandX ) ) ;   
-
-  //   a line between mid and low frame
-  
-  fLineSep2 = new TGHorizontal3DLine(this) ; 
-  AddFrame(fLineSep2, new TGLayoutHints(kLHintsTop | kLHintsExpandX) );
-
-   //   the low part of the window
-  //
-  fFrameLow = new TGHorizontalFrame (this, 300, 100 ) ; 
- 
-  
-  fButtonPrint = new TGTextButton(fFrameLow, "Print", M_PRINT) ; 
-  fButtonPrint->Associate(this) ; 
-  fFrameLow->AddFrame( fButtonPrint, new TGLayoutHints(kLHintsLeft , 10, 10, 10, 10 ) )  ; 
-
-  fButtonClose = new TGTextButton(fFrameLow, "Close", M_CLOSE) ; 
-  fButtonClose->Associate(this) ; 
-  fFrameLow->AddFrame( fButtonClose, new TGLayoutHints(kLHintsLeft, 10, 10, 10, 10 ) )  ; 
-
- 
-  AddFrame(fFrameLow, new TGLayoutHints (kLHintsTop ) ) ;   
-
-  //
-  //   Map the window, set up the layout, etc. 
-  //
-  SetWMSizeHints(450, 400, 1000, 1000, 10, 10 ) ;      // set the smallest and biggest size of the Main frame
-
-  MapSubwindows();
-  
-  Layout();
-  
-  SetWindowName("FadcDisplay");
-  SetIconName("FadcDisp");
-  
-  MapWindow();
-
-  //
-  //   fReadTree the first event and update the window
-  //
-  fReadTree->GetEvent() ; 
-  CreatePixelList() ; 
-  UpdateEventCounter() ; 
-
+    pList->AddToList(fEvtData);
+
+    fReadTree = new MReadTree(treename, filename);
+    fReadTree->PreProcess(pList);
+    fReadTree->GetEvent();
+}
+
+MGFadcDisp::MGFadcDisp(char *filename, char *treename,
+                       const TGWindow *p, const TGWindow *main,
+                       UInt_t w, UInt_t h)
+    : TGTransientFrame(p, main, w, h)
+{
+
+    //
+    //  create an autodelete-list for the gui elements
+    //
+    fList = new TList;
+    fList->SetOwner();
+
+    SetupFileAccess(filename, treename);
+    CreateGui(filename, treename);
+
+    //
+    //   Map the window, set up the layout, etc.
+    //
+    SetWMSizeHints(450, 400, 1000, 1000, 10, 10 );      // set the smallest and biggest size of the Main frame
+
+    MapSubwindows();
+
+    Layout();
+
+    SetWindowName("FadcDisplay");
+    SetIconName("FadcDisp");
+
+    MapWindow();
+
+    CreatePixelList();
+    UpdateEventCounter();
 }
 
@@ -237,52 +374,18 @@
 MGFadcDisp::~MGFadcDisp()
 {
-  // close the file 
-
-  fReadTree->PostProcess() ; 
-
-  delete  fRunHeader ; 
-  delete  fEvtHeader ;
-  delete  fEvtTime   ;
-  delete  fEvtData ; 
-  delete  fEvtCrate  ; 
-
-  delete  pList ;
-
-  delete  fReadTree ; 
-
-  //   destruct the graphical members  
-
-  delete  fButtonPrint ; 
-  delete  fButtonClose ; 
- 
-  //  delete  fCan ; 
-  delete  fECanDigScope ; 
-  delete  fTabDisplay ; 
- 
-  delete  fPixSlider ; 
-  delete  fButtonPrevPix ; 
-  delete  fButtonNextPix ; 
-  delete  fMid1 ; 
-  delete  fPixelList; 
-  delete  fTabControl  ; 
- 
-  delete  fLabelEvtNr ; 
-  delete  fLabelTotNr ; 
-  //delete  fTxtBufEvtNr ; 
-  delete  fTxtEvtNr ; 
-  delete  fButtonNextEvt ; 
-  delete  fButtonPrevEvt ; 
-  delete  fLabelTree ; 
-  delete  fNameTree ; 
-  delete  fNameFile ; 
-  delete  fLabelFile ; 
-  delete  fTop2 ; 
-  delete  fTop1 ; 
-  
-  delete  fFrameLow ; 
-  delete  fLineSep2 ; 
-  delete  fFrameMid ; 
-  delete  fLineSep1 ; 
-  delete  fFrameTop ; 
+    //
+    // close the file
+    //
+    fReadTree->PostProcess();
+
+    delete fEvtData;
+    delete pList;
+
+    delete fReadTree;
+
+    //
+    //   destruct the graphical members
+    //
+    delete fList;
 }
 
@@ -295,5 +398,5 @@
    // window menu item is selected.
 
-    delete this ;
+    delete this;
 }
        
@@ -312,5 +415,5 @@
     while (pixel.Next())
     {
-        char wortdummy[100] ;
+        char wortdummy[100];
         sprintf(wortdummy, "%d", pixel.GetPixelId());
         fPixelList->AddEntry(wortdummy, pixel.GetPixelId());
@@ -323,6 +426,6 @@
     // check if the pixel from last event also occurs in this event
     //
-    fCan->Clear() ;
-    fCan->cd() ;
+    fCanvas->Clear();
+    fCanvas->cd();
 
     if (lastsel<0 || !pixel.Jump(lastsel))
@@ -333,22 +436,22 @@
     }
 
-    char wortdummy[100] ;
+    char wortdummy[100];
     sprintf(wortdummy, "GRAPH%d", lastsel);
     fEvtData->Draw(wortdummy);
     fPixelList->Select(lastsel, kTRUE);
 
-    fCan->Modified();
-    fCan->Update();
+    fCanvas->Modified();
+    fCanvas->Update();
 }
 
 void MGFadcDisp::UpdateEventCounter() 
 {
-  //     Update the event counter 
-  
-  char wortdummy[256] ; 
-    
-  sprintf (wortdummy, "%d", fReadTree->GetEventNum() )  ; 
-  
-  fTxtEvtNr->SetText(wortdummy) ; 
+    //     Update the event counter
+
+    char wortdummy[256];
+
+    sprintf(wortdummy, "%d", fReadTree->GetEventNum());
+
+    fTxtEvtNr->SetText(wortdummy);
 }
 
@@ -356,9 +459,9 @@
 {
     Int_t buttons = 4;
-    Int_t retval = 0 ;
+    Int_t retval  = 0;
 
     //  first check if the new event is in the range of possible events
   
-    if ( iEvt >= fReadTree->GetEntries() )
+    if (iEvt >= fReadTree->GetEntries())
     {
         new TGMsgBox(fClient->GetRoot(), this,
@@ -382,92 +485,88 @@
 }
 
+void MGFadcDisp::DisplayPix(UInt_t i)
+{
+    char wortdummy[256];
+
+    sprintf(wortdummy, "GRAPH%d", i);
+
+    fCanvas->Clear();
+    fCanvas->cd();
+
+    fEvtData->Draw(wortdummy);
+
+    fCanvas->Modified();
+    fCanvas->Update();
+
+    //
+    // FIXME: too complicated!
+    //
+    fPixelList->RemoveEntries(0, fEvtData->GetNumPixels());
+    CreatePixelList(i);
+}
+
 Bool_t MGFadcDisp::ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2) 
 {
-  //------------------------------------------------------------------
-  //
-  //    ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2)
-  //
-  // Processes information from all GUI items.
-  // Selecting an item usually generates an event with 4 parameters.
-  // The first two are packed into msg (first and second bytes).
-  // The other two are parm1 and parm2.
-  //
-  //------------------------------------------------------------------
-  char wortdummy[256] ; 
-  Int_t   buttons = 4, retval = 0 ;
-
-  switch(GET_MSG(msg)) 
+    //------------------------------------------------------------------
+    //
+    //    ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2)
+    //
+    // Processes information from all GUI items.
+    // Selecting an item usually generates an event with 4 parameters.
+    // The first two are packed into msg (first and second bytes).
+    // The other two are parm1 and parm2.
+    //
+    //------------------------------------------------------------------
+
+    switch(GET_MSG(msg))
     {
     case kC_COMMAND:
-    
-      switch(GET_SUBMSG(msg)) 
-	{
-	  
-	case kCM_BUTTON:
-	  
-	  switch (parm1)
-	    {
-	    case M_PREVEVT:
-	      ReadinEvent(fReadTree->GetEventNum()-1 ) ; 
-	      break; 
-	      
-	    case M_NEXTEVT:
-	      ReadinEvent(fReadTree->GetEventNum()+1 ) ; 
-	      break; 
-
-
-	    case M_PRINT:
-	      new TGMsgBox(fClient->GetRoot(), this,
-			   "INFORMATION!",
-			   "Your are invited to program that!!",
-			   kMBIconExclamation, buttons, &retval); 
-	      
-              break ;
-
-	    case M_CLOSE:
-	      CloseWindow() ; 
-	      break; 
-
-	    }
-	  
-	case kCM_LISTBOX:
-	  switch (parm1) 
-	    {
-	    case M_PIXELLIST:
-	      sprintf(wortdummy, "GRAPH%d", fPixelList->GetSelected());
-
-	      fCan->Clear() ;
-	      fCan->cd() ; 
-
-	      fEvtData->Draw(wortdummy) ; 
-	      
-	      fCan->Modified() ; 
-	      fCan->Update() ; 
-	      break; 
-	    }
-	  break; 
-	  
-	}
-    
+        switch(GET_SUBMSG(msg))
+        {
+        case kCM_BUTTON:
+            switch (parm1)
+            {
+            case M_PREVEVT:
+                ReadinEvent(fReadTree->GetEventNum()-1);
+                return kTRUE;
+
+            case M_NEXTEVT:
+                ReadinEvent(fReadTree->GetEventNum()+1);
+                return kTRUE;
+
+            case M_PREVPIXEL:
+                DisplayPix(fPixelList->GetSelected()-1);
+                return kTRUE;
+
+            case M_NEXTPIXEL:
+                DisplayPix(fPixelList->GetSelected()+1);
+                return kTRUE;
+
+            case M_PRINT:
+                cout << "Sorry, not yet implemented!" << endl;
+                return kTRUE;
+
+            case M_CLOSE:
+                CloseWindow();
+                return kTRUE;
+            }
+            return kTRUE;
+
+        case kCM_LISTBOX:
+            if (parm1 != M_PIXELLIST)
+                return kTRUE;
+
+            DisplayPix(fPixelList->GetSelected());
+            return kTRUE;
+        }
+        return kTRUE;
+
     case kC_TEXTENTRY:
-      
-      switch(GET_SUBMSG(msg)) 
-	{
-	case kTE_TEXTCHANGED:
-            break ;
-
-        case kTE_ENTER:
-            {
-                const char *txt = fTxtEvtNr->GetText();
-                ReadinEvent(atoi(txt));
-            }
-	  break; 
-	}
-      break; 
-      
-    default:
-      break;     
+        if (GET_SUBMSG(msg) == kTE_ENTER)
+            ReadinEvent(atoi(fTxtEvtNr->GetText()));
+
+        return kTRUE;
     }
 
-  return kTRUE ; 
-}
+    return kTRUE;
+}
Index: trunk/MagicSoft/Mars/meventdisp/MGFadcDisp.h
===================================================================
--- trunk/MagicSoft/Mars/meventdisp/MGFadcDisp.h	(revision 954)
+++ trunk/MagicSoft/Mars/meventdisp/MGFadcDisp.h	(revision 956)
@@ -10,114 +10,62 @@
 #endif
 
-class MParList ; 
-class MRawRunHeader ; 
-class MRawEvtHeader ; 
-class MTime ; 
-class MRawEvtData ; 
-class MRawCrateArray ; 
+class MParList; 
+class MReadTree; 
+class MRawEvtData; 
 
-class MReadTree ; 
+class TList;
+class TCanvas; 
+class TGListBox; 
+class TGTextEntry; 
 
-class TGHorizontal3DLine;
-class TGLabel ; 
-class TGTextButton ; 
-class TGTab ; 
-class TGListBox ; 
-class TGVSlider; 
-class TRootEmbeddedCanvas ; 
-class TCanvas ; 
-class TGTextEntry ; 
-class TGTextBuffer ; 
+class MGFadcDisp : public TGTransientFrame
+{
+private:
+    //
+    // GUI stuff
+    //
+    TList       *fList;
 
-enum MGFadcDispCommand {
-  
-  M_PIXELLIST = 4201 , 
-  M_PREVEVT, 
-  M_NEXTEVT,
-  M_EVTNUMBER, 
+    TGTextEntry *fTxtEvtNr;
+    TGListBox   *fPixelList;
 
-  M_PREVPIXEL, 
-  M_NEXTPIXEL, 
+    TCanvas     *fCanvas;
 
-  M_PRINT, 
-  M_CLOSE 
-  
+    void AddTopFramePart1(TGVerticalFrame *frame,
+                          const char *filename,
+                          const char *treename);
+    void AddTopFramePart2(TGVerticalFrame *frame);
+    void AddMidFrame(TGHorizontalFrame *frame);
+    void AddLowFrame(TGHorizontalFrame *frame);
 
-}; 
+    void CreateGui(const char *filename, const char *treename);
+    void SetupFileAccess(const char *filename, const char *treename);
 
-//
-//
+    //
+    // File Access stuff
+    //
+    MParList    *pList;
+    MRawEvtData *fEvtData;
+    MReadTree   *fReadTree;
 
-class MGFadcDisp : public TGTransientFrame {
+    void ReadinEvent(UInt_t iEvt);
+    void DisplayPix(UInt_t i);
 
- private: 
+public:
 
-  //
-  //     members to read in the file
-  //
+    MGFadcDisp(char *filename, char *treename,
+               const TGWindow *p, const TGWindow *main, UInt_t w, UInt_t h);
 
-  MParList       *pList ;
-  MRawRunHeader  *fRunHeader ;
-  MRawEvtHeader  *fEvtHeader ;
-  MTime          *fEvtTime   ;
-  MRawEvtData    *fEvtData    ;
-  MRawCrateArray *fEvtCrate  ;
+    ~MGFadcDisp();
 
-  MReadTree *fReadTree ;
-  
-  //
-  //     members for the gui 
-  // 
-  
-  //    divide the whole frame in three subframes
-  
-  TGVerticalFrame    *fFrameTop ; 
-  TGHorizontalFrame  *fFrameMid, *fFrameLow ; 
-  TGHorizontal3DLine *fLineSep1, *fLineSep2 ;
+    void CloseWindow();
 
-  //    members in the top frame
+    void CreatePixelList(Int_t lastsel=-1);
+    void UpdateEventCounter();
 
-  TGHorizontalFrame  *fTop1, *fTop2 ; 
-  TGLabel       *fLabelFile, *fNameFile,  *fLabelTree, *fNameTree ; 
-  TGTextButton  *fButtonPrevEvt, *fButtonNextEvt ; 
-  TGLabel       *fLabelEvtNr, *fLabelTotNr ; 
-  TGTextEntry          *fTxtEvtNr ;
-  TGTextBuffer         *fTxtBufEvtNr ; //!  no output for this member  
-                                       //   neccessary to compile  H.K.
+    virtual Bool_t ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2);
 
-  //    members in the mid frame
-  
-  TGTab            *fTabControl ; 
-  TGListBox        *fPixelList  ; 
-  TGVerticalFrame  *fMid1 ; 
-  TGTextButton     *fButtonPrevPix, *fButtonNextPix ; 
-  TGVSlider        *fPixSlider ; 
-  
-  TGTab   *fTabDisplay ; 
-  TRootEmbeddedCanvas  *fECanDigScope ; 
-
-  TCanvas               *fCan ;
-  
-  //    members in the low frame
-
-  TGTextButton  *fButtonPrint, *fButtonClose ; 
-
- public:
-  
-  MGFadcDisp(char *filename, char *treename, 
-	     const TGWindow *p, const TGWindow *main, UInt_t w, UInt_t h ) ; 
-
-  ~MGFadcDisp()  ; 
-
-  void CloseWindow() ; 
-
-  void CreatePixelList(Int_t lastsel=-1) ;
-  void UpdateEventCounter() ; 
-  void ReadinEvent(UInt_t iEvt) ;
-
-  virtual Bool_t ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2);
- 
-  ClassDef(MGFadcDisp, 0)
-}; 
+    ClassDef(MGFadcDisp, 0)
+};
 
 #endif
