// @(#)root/gui:$Id$
// Author: Fons Rademakers   13/01/98

/*************************************************************************
 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/
/**************************************************************************

    This source is based on Xclass95, a Win95-looking GUI toolkit.
    Copyright (C) 1996, 1997 David Barth, Ricky Ralston, Hector Peraza.

    Xclass95 is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
    version 2 of the License, or (at your option) any later version.

**************************************************************************/

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TGTab, TGTabElement, TGTabLayout                                     //
//                                                                      //
// A tab widget contains a set of composite frames each with a little   //
// tab with a name (like a set of folders with tabs).                   //
//                                                                      //
// The TGTab is user callable. The TGTabElement and TGTabLayout are     //
// service classes of the tab widget.                                   //
//                                                                      //
// Clicking on a tab will bring the associated composite frame to the   //
// front and generate the following event:                              //
// kC_COMMAND, kCM_TAB, tab id, 0.                                      //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "TGTab.h"
#include "TGResourcePool.h"
#include "TList.h"
#include "Riostream.h"
#include "TClass.h"
#include "TGPicture.h"

const TGFont *TGTab::fgDefaultFont = 0;
const TGGC   *TGTab::fgDefaultGC = 0;

ClassImp(TGTabElement)
ClassImp(TGTabLayout)
ClassImp(TGTab)


//______________________________________________________________________________
TGTabElement::TGTabElement(const TGWindow *p, TGString *text, UInt_t w, UInt_t h,
                           GContext_t norm, FontStruct_t font,
                           UInt_t options, ULong_t back) :
   TGFrame(p, w, h, options, back)
{
   // Create a tab element. Text is adopted by tab element.

   fClosePic     = 0;
   fClosePicD    = 0;
   fShowClose    = kFALSE;
   fActive       = kFALSE;
   fText         = text;
   fBorderWidth  = 0;
   fNormGC       = norm;
   fFontStruct   = font;
   fEditDisabled = kEditDisableGrab | kEditDisableBtnEnable;

   fClosePic      = fClient->GetPicture("closetab.png");
   fClosePicD     = fClient->GetPicture("closetab_d.png");
   int max_ascent, max_descent;
   if (fText)
      fTWidth = gVirtualX->TextWidth(fFontStruct, fText->GetString(), fText->GetLength());
   gVirtualX->GetFontProperties(fFontStruct, max_ascent, max_descent);
   fTHeight = max_ascent + max_descent;
   Resize(TMath::Max(fTWidth+12, (UInt_t)45), fTHeight+6);
   fEnabled = kTRUE;
   gVirtualX->GrabButton(fId, kButton1, kAnyModifier, kButtonPressMask, kNone, kNone);
}

//______________________________________________________________________________
TGTabElement::~TGTabElement()
{
   // Delete tab element.

   if (fClosePic) gClient->FreePicture(fClosePic);
   if (fClosePicD) gClient->FreePicture(fClosePicD);
   if (fText) delete fText;
}

//______________________________________________________________________________
void TGTabElement::DrawBorder()
{
   // Draw little tab element.

   gVirtualX->DrawLine(fId, GetHilightGC()(), 0, fHeight-1, 0, 2);
   gVirtualX->DrawLine(fId, GetHilightGC()(), 0, 2, 2, 0);
   gVirtualX->DrawLine(fId, GetHilightGC()(), 2, 0, fWidth-3, 0);
   gVirtualX->DrawLine(fId, GetShadowGC()(),  fWidth-2, 1, fWidth-2, fHeight-1);
   gVirtualX->DrawLine(fId, GetBlackGC()(), fWidth-2, 1, fWidth-1, 2);
   gVirtualX->DrawLine(fId, GetBlackGC()(), fWidth-1, 2, fWidth-1, fHeight-2);
   gVirtualX->DrawLine(fId, GetHilightGC()(), fWidth-1, fHeight-1, fWidth-1, fHeight-1);

   if (fText) {
      int max_ascent, max_descent;
      gVirtualX->GetFontProperties(fFontStruct, max_ascent, max_descent);
      if (fEnabled) {
         fText->Draw(fId, fNormGC, 6, max_ascent+3);
      } else {
         fText->Draw(fId, GetHilightGC()(), 7, max_ascent + 1);
         fText->Draw(fId, GetShadowGC()(), 6, max_ascent);
      }
   }
   if (fShowClose && fClosePic && fClosePicD) {
      if (fEnabled && fActive)
         fClosePic->Draw(fId, fNormGC, fTWidth+12, fHeight/2-7);
      else
         fClosePicD->Draw(fId, fNormGC, fTWidth+12, fHeight/2-7);
   }
}

//______________________________________________________________________________
Bool_t TGTabElement::HandleButton(Event_t *event)
{
   // Handle button event in the tab widget. Basically we only handle
   // button events in the small tabs.

   if (event->fType == kButtonPress) {
      TGTab* main = (TGTab*)fParent;
      if (main) {
         if (fShowClose && event->fWindow == GetId() &&
             (UInt_t)event->fX > fTWidth+12 && (UInt_t)event->fX < fTWidth+26 &&
             (UInt_t)event->fY > fHeight/2-7 && (UInt_t)event->fY < fHeight/2+7) {
            if (main->GetTabTab(main->GetCurrent()) == this) {
               main->CloseTab(main->GetCurrent()); // emit signal
               //main->RemoveTab(main->GetCurrent());
               return kTRUE;
            }
         }
         TGFrameElement *el;
         TIter next(main->GetList());

         next();   // skip first container

         Int_t i = 0;
         Int_t c = main->GetCurrent();
         while ((el = (TGFrameElement *) next())) {
            if (el->fFrame->GetId() == (Window_t)event->fWindow)
               c = i;
            next(); i++;
         }

         // change tab and generate event
         main->SetTab(c);
      }
   }
   return kTRUE;
}

//______________________________________________________________________________
TGDimension TGTabElement::GetDefaultSize() const
{
   // Return default size of tab element.

   if (fShowClose && fClosePic && fClosePicD)
      return TGDimension(TMath::Max(fTWidth+30, (UInt_t)45), fTHeight+6);
   else
      return TGDimension(TMath::Max(fTWidth+12, (UInt_t)45), fTHeight+6);
}

//______________________________________________________________________________
void TGTabElement::SetText(TGString *text)
{
   // Set new tab text.

   if (fText) delete fText;
   fText = text;

   int max_ascent, max_descent;
   fTWidth = gVirtualX->TextWidth(fFontStruct, fText->GetString(), fText->GetLength());
   gVirtualX->GetFontProperties(fFontStruct, max_ascent, max_descent);
   fTHeight = max_ascent + max_descent;

   fClient->NeedRedraw(this);
}

//______________________________________________________________________________
void TGTabElement::ShowClose(Bool_t show)
{
   // Show/hide close icon on the tab element, then apply layout
   // to compute correct elements size.

   TGTab* main = (TGTab*)fParent;
   fShowClose = show;
   if (fShowClose && fClosePic && fClosePicD)
      Resize(TMath::Max(fTWidth+30, (UInt_t)45), fTHeight+6);
   else
      Resize(TMath::Max(fTWidth+12, (UInt_t)45), fTHeight+6);
   if (main)
      main->GetLayoutManager()->Layout();
}

//______________________________________________________________________________
TGTabLayout::TGTabLayout(TGTab *main)
{
   // Create a tab layout manager.

   fMain = main;
   fList = fMain->GetList();
}

//______________________________________________________________________________
void TGTabLayout::Layout()
{
   // Layout the tab widget.

   Int_t  i, xtab;
   UInt_t tw;
   UInt_t tabh = fMain->GetTabHeight(), bw = fMain->GetBorderWidth();
   UInt_t w = fMain->GetWidth();
   UInt_t h = fMain->GetHeight();

   xtab = 2;

   fMain->GetContainer()->MoveResize(0, tabh, w, h - tabh);

   // first frame is the container, so take next...
   TGFrameElement *el, *elnxt;
   TIter next(fList);
   i = 0;
   next();   // skip first
   while ((el = (TGFrameElement *) next())) {
      elnxt = (TGFrameElement *) next();
      tw = el->fFrame->GetDefaultWidth();
      if (i == fMain->GetCurrent()) {
         el->fFrame->MoveResize(xtab-2, 0, tw+3, tabh+1);
         if (elnxt) elnxt->fFrame->RaiseWindow();
         el->fFrame->RaiseWindow();
      } else {
         el->fFrame->MoveResize(xtab, 2, tw, tabh-1);
         el->fFrame->LowerWindow();
      }
      UInt_t nw = (w - (bw << 1));
      if (nw > 32768) nw = 1;
      UInt_t nh = (h - tabh - (bw << 1));
      if (nh > 32768) nh = 1;
      if (elnxt) {
         elnxt->fFrame->MoveResize(bw, tabh + bw, nw, nh);
         elnxt->fFrame->Layout();
      }
      xtab += (Int_t)tw;
      i++;
   }
}

//______________________________________________________________________________
TGDimension TGTabLayout::GetDefaultSize() const
{
   // Get default size of tab widget.

   TGDimension dsize, dsize_te;
   TGDimension size(0,0), size_te(0,0);

   TGFrameElement *el, *elnxt;
   TIter next(fList);
   next();   // skip first container
   while ((el = (TGFrameElement *)next())) {
      dsize_te = el->fFrame->GetDefaultSize();
      size_te.fWidth += dsize_te.fWidth;
      elnxt = (TGFrameElement *) next();
      if (elnxt) {
         dsize = elnxt->fFrame->GetDefaultSize();
         if (size.fWidth < dsize.fWidth) size.fWidth = dsize.fWidth;
         if (size.fHeight < dsize.fHeight) size.fHeight = dsize.fHeight;
      }
   }

   // check if tab elements make a larger width than the containers
   if (size.fWidth < size_te.fWidth) size.fWidth = size_te.fWidth;

   size.fWidth += fMain->GetBorderWidth() << 1;
   size.fHeight += fMain->GetTabHeight() + (fMain->GetBorderWidth() << 1);

   return size;
}


//______________________________________________________________________________
TGTab::TGTab(const TGWindow *p, UInt_t w, UInt_t h,
             GContext_t norm, FontStruct_t font,
             UInt_t options, ULong_t back) :
   TGCompositeFrame(p, w, h, options, back)
{
   // Create tab widget.

   fMsgWindow  = p;

   fBorderWidth = 2;
   fCurrent     = 0;
   fRemoved     = new TList;

   fNormGC     = norm;
   fFontStruct = font;

   int max_ascent, max_descent;
   gVirtualX->GetFontProperties(fFontStruct, max_ascent, max_descent);
   fTabh = max_ascent + max_descent + 6;

   SetLayoutManager(new TGTabLayout(this));

   // we need this in order to avoid border blinking when switching tabs...
   fContainer = new TGCompositeFrame(this, fWidth, fHeight - fTabh,
                       kVerticalFrame | kRaisedFrame | kDoubleBorder);
   AddFrame(fContainer, 0);

   fEditDisabled = kEditDisable | kEditDisableLayout;
   fContainer->SetEditDisabled(kEditDisable | kEditDisableGrab);
}

//______________________________________________________________________________
TGTab::~TGTab()
{
   // Delete tab widget. This deletes the tab windows and the containers.
   // The tab string is deleted by the TGTabElement dtor.

   Cleanup();
   fRemoved->Delete();
   delete fRemoved;
}

//______________________________________________________________________________
TGCompositeFrame *TGTab::AddTab(TGString *text)
{
   // Add a tab to the tab widget. Returns the new container, which
   // is owned by the tab widget. The text is adopted by the tab widget.

   TGTabElement *te = new TGTabElement(this, text, 50, 20, fNormGC, fFontStruct);
   AddFrame(te, 0);

   TGCompositeFrame* cf = new TGCompositeFrame(this, fWidth, fHeight-21);
   AddFrame(cf, 0);
   cf->SetEditDisabled(kEditDisableResize);

   te->MapWindow();
   cf->MapWindow();

   return cf;
}

//______________________________________________________________________________
TGCompositeFrame *TGTab::AddTab(const char *text)
{
   // Add a tab to the tab widget. Returns the new container. The container
   // is owned by the tab widget.

   return AddTab(new TGString(text));
}

//______________________________________________________________________________
void TGTab::AddTab(const char *text, TGCompositeFrame *cf)
{
   // Add a tab to the tab widget and fill it with given TGCompositeFrame.

   AddTab(new TGString(text), cf);
}

//______________________________________________________________________________
void TGTab::AddTab(TGString *text, TGCompositeFrame *cf)
{
   // Add a tab to the tab widget and fill it with given TGCompositeFrame.

   TGTabElement *te = new TGTabElement(this, text, 50, 20, fNormGC, fFontStruct);
   AddFrame(te, 0);

   AddFrame(cf, 0);
   cf->SetEditDisabled(kEditDisableResize);

   te->MapWindow();
   cf->MapWindow();
}

//______________________________________________________________________________
void TGTab::RemoveTab(Int_t tabIndex, Bool_t storeRemoved)
{
   // Remove container and tab of tab with index tabIndex.
   // Does NOT remove the container contents!

   if (tabIndex < 0) {
      tabIndex = fCurrent;
   }

   TGFrameElement *elTab, *elCont;
   Int_t  count = 0;

   // Notify (signal) for removed tab "tabIndex"
   Removed(tabIndex);

   TIter next(fList) ;
   next() ; // skip first container

   while ((elTab = (TGFrameElement *) next())) {
      elCont = (TGFrameElement *) next();

      if (count == tabIndex) {
         elCont->fFrame->UnmapWindow();   // will be destroyed later
         TGFrame *frame = elTab->fFrame;
         RemoveFrame(elTab->fFrame);
         frame->DestroyWindow();
         delete frame;
         if (storeRemoved)
            fRemoved->Add(elCont->fFrame);   // delete only in dtor
         RemoveFrame(elCont->fFrame);
         if (tabIndex == fCurrent) {
            // select another tab only if the current is the one we delete
            SetTab(0);
         } else
            fCurrent--;
         break;
      }
      count++;
   }

   GetLayoutManager()->Layout();
}

//______________________________________________________________________________
void TGTab::SetEnabled(Int_t tabIndex, Bool_t on)
{
   // Enable or disable tab.

   TGTabElement *te = GetTabTab(tabIndex);
   if (te) {
      te->SetEnabled(on);
      fClient->NeedRedraw(te);
   }
}

//______________________________________________________________________________
Bool_t TGTab::IsEnabled(Int_t tabIndex) const
{
   // Returns true if tab is enabled.

   TGTabElement *te = GetTabTab(tabIndex);

   return te ? te->IsEnabled() : kFALSE;
}

//______________________________________________________________________________
void TGTab::ChangeTab(Int_t tabIndex, Bool_t emit)
{
   // Make tabIdx the current tab. Utility method called by SetTab and
   // HandleButton().

   TGTabElement *te = GetTabTab(tabIndex);
   if (!te || !te->IsEnabled()) return;

   if (tabIndex != fCurrent) {
      if (GetTabTab(fCurrent)) {
         GetTabTab(fCurrent)->SetActive(kFALSE);
         fClient->NeedRedraw(GetTabTab(fCurrent));
      }
      TGFrameElement *el, *elnxt;
      UInt_t tw;
      Int_t  xtab  = 2;
      Int_t  count = 0;

      TIter next(fList);
      next();           // skip first container

      fCurrent = tabIndex;
      while ((el = (TGFrameElement *) next())) {
         elnxt = (TGFrameElement *) next();
         tw = el->fFrame->GetDefaultWidth();
         if (count == fCurrent) {
            el->fFrame->MoveResize(xtab-2, 0, tw+3, fTabh+1);
            if (elnxt) elnxt->fFrame->RaiseWindow();
            el->fFrame->RaiseWindow();
         } else {
            el->fFrame->MoveResize(xtab, 2, tw, fTabh-1);
            el->fFrame->LowerWindow();
         }
         xtab += tw;
         count++;
      }
      if (emit) {
         SendMessage(fMsgWindow, MK_MSG(kC_COMMAND, kCM_TAB), fCurrent, 0);
         fClient->ProcessLine(fCommand, MK_MSG(kC_COMMAND, kCM_TAB), fCurrent, 0);
         Selected(fCurrent);
      }
      GetTabTab(fCurrent)->SetActive(kTRUE);
      fClient->NeedRedraw(GetTabTab(fCurrent));
   }
}

//______________________________________________________________________________
Bool_t TGTab::SetTab(Int_t tabIndex, Bool_t emit)
{
   // Brings the composite frame with the index tabIndex to the
   // front and generate the following event if the front tab has changed:
   // kC_COMMAND, kCM_TAB, tab id, 0.
   // Returns kFALSE if tabIndex is a not valid index

   // check if tabIndex is a valid index
   if (tabIndex < 0)
      return kFALSE;

   // count the tabs
   TIter next(fList);
   Int_t count = 0;
   while (next())
      count++;

   count = count / 2 - 1;
   if (tabIndex > count)
      return kFALSE;

   // change tab and generate event
   ChangeTab(tabIndex, emit);

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TGTab::SetTab(const char *name, Bool_t emit)
{
   // Brings the composite frame with the name to the
   // front and generate the following event if the front tab has changed:
   // kC_COMMAND, kCM_TAB, tab id, 0.
   // Returns kFALSE if tab with name does not exist.

   TGFrameElement *el;
   Int_t  count = 0;
   TGTabElement *tab = 0;

   TIter next(fList);
   next();           // skip first container

   while ((el = (TGFrameElement *) next())) {
      next();        // skip tab containter
      tab = (TGTabElement *)el->fFrame;

      if (*(tab->GetText()) == name) {
         // change tab and generate event
         ChangeTab(count, emit);
         return kTRUE;
      }
      count++;
   }

   return kFALSE;
}

//______________________________________________________________________________
TGCompositeFrame *TGTab::GetTabContainer(Int_t tabIndex) const
{
   // Return container of tab with index tabIndex.
   // Return 0 in case tabIndex is out of range.

   if (tabIndex < 0) return 0;

   TGFrameElement *el;
   Int_t  count = 0;

   TIter next(fList);
   next();           // skip first container

   while (next()) {
      el = (TGFrameElement *) next();
      if (el && count == tabIndex)
         return (TGCompositeFrame *) el->fFrame;
      count++;
   }

   return 0;
}

//______________________________________________________________________________
TGCompositeFrame *TGTab::GetTabContainer(const char *name) const
{
   // Return the tab container of tab with string name.
   // Returns 0 in case name is not found.

   TGFrameElement *el;
   TGTabElement *tab = 0;
   TGCompositeFrame *comp = 0;

   TIter next(fList);
   next();

   while ((el = (TGFrameElement *) next())) {
      tab  = (TGTabElement *) el->fFrame;
      el   = (TGFrameElement *) next();
      comp = (TGCompositeFrame *) el->fFrame;
      if (*tab->GetText() == name){
         return comp;
      }
   }

   return 0;
}

//______________________________________________________________________________
TGTabElement *TGTab::GetTabTab(Int_t tabIndex) const
{
   // Return the tab element of tab with index tabIndex.
   // Returns 0 in case tabIndex is out of range.

   if (tabIndex < 0) return 0;

   TGFrameElement *el;
   Int_t  count = 0;

   TIter next(fList);
   next();           // skip first container

   while ((el = (TGFrameElement *) next())) {
      next();
      if (count == tabIndex)
         return (TGTabElement *) el->fFrame;
      count++;
   }

   return 0;
}

//______________________________________________________________________________
TGTabElement *TGTab::GetTabTab(const char *name) const
{
   // Return the tab element of tab with string name.
   // Returns 0 in case name is not found.

   TGFrameElement *el;
   TGTabElement *tab = 0;

   TIter next(fList);
   next();

   while ((el = (TGFrameElement *) next())) {
      tab = (TGTabElement *)el->fFrame;
      if (name == *(tab->GetText())) {
         return tab;
      }
      next();
   }

   return 0;
}

//______________________________________________________________________________
Int_t TGTab::GetNumberOfTabs() const
{
   // Return number of tabs.

   Int_t count = 0;

   TIter next(fList);
   next();           // skip first container

   while (next()) {
      next();
      count++;
   }

   return count;
}

//______________________________________________________________________________
FontStruct_t TGTab::GetDefaultFontStruct()
{
   // Return default font structure in use.

   if (!fgDefaultFont)
      fgDefaultFont = gClient->GetResourcePool()->GetDefaultFont();
   return fgDefaultFont->GetFontStruct();
}

//______________________________________________________________________________
const TGGC &TGTab::GetDefaultGC()
{
   // Return default graphics context in use.

   if (!fgDefaultGC)
      fgDefaultGC = gClient->GetResourcePool()->GetFrameGC();
   return *fgDefaultGC;
}

//______________________________________________________________________________
void TGTab::NewTab(const char *text)
{
   // Create new tab. Used in context menu.

   TString name;
   if (text)
      name = text;
   else
      name = TString::Format("tab%d", GetNumberOfTabs()+1);
   AddTab(name.Data());

   GetLayoutManager()->Layout();
}

//______________________________________________________________________________
void TGTab::SetText(const char *text)
{
   // Set text to current tab.

   if (GetCurrentTab()) GetCurrentTab()->SetText(new TGString(text));
   GetLayoutManager()->Layout();
}

//______________________________________________________________________________
TGLayoutManager *TGTab::GetLayoutManager() const
{
   // Return layout manager.

   TGTab *tab = (TGTab*)this;

   if (tab->fLayoutManager->IsA() != TGTabLayout::Class()) {
      tab->SetLayoutManager(new TGTabLayout(tab));
   }

   return tab->fLayoutManager;
}

//______________________________________________________________________________
void TGTab::SavePrimitive(std::ostream &out, Option_t *option /*= ""*/)
{
   // Save a tab widget as a C++ statement(s) on output stream out.

   char quote = '"';

   // font + GC
   option = GetName()+5;         // unique digit id of the name
   TString parGC, parFont;
   parFont.Form("%s::GetDefaultFontStruct()",IsA()->GetName());
   parGC.Form("%s::GetDefaultGC()()",IsA()->GetName());

   if ((GetDefaultFontStruct() != fFontStruct) || (GetDefaultGC()() != fNormGC)) {
      TGFont *ufont = gClient->GetResourcePool()->GetFontPool()->FindFont(fFontStruct);
      if (ufont) {
         ufont->SavePrimitive(out, option);
         parFont.Form("ufont->GetFontStruct()");
      }

      TGGC *userGC = gClient->GetResourcePool()->GetGCPool()->FindGC(fNormGC);
      if (userGC) {
         userGC->SavePrimitive(out, option);
         parGC.Form("uGC->GetGC()");
      }
   }

   if (fBackground != GetDefaultFrameBackground()) SaveUserColor(out, option);

   out << std::endl << "   // tab widget" << std::endl;

   out << "   TGTab *";
   out << GetName() << " = new TGTab(" << fParent->GetName()
       << "," << GetWidth() << "," << GetHeight();

   if (fBackground == GetDefaultFrameBackground()) {
      if (GetOptions() == kChildFrame) {
         if (fFontStruct == GetDefaultFontStruct()) {
            if (fNormGC == GetDefaultGC()()) {
               out <<");" << std::endl;
            } else {
               out << "," << parGC.Data() <<");" << std::endl;
            }
         } else {
            out << "," << parGC.Data() << "," << parFont.Data() <<");" << std::endl;
         }
      } else {
         out << "," << parGC.Data() << "," << parFont.Data() << "," << GetOptionString() <<");" << std::endl;
      }
   } else {
      out << "," << parGC.Data() << "," << parFont.Data() << "," << GetOptionString()  << ",ucolor);" << std::endl;
   }
   if (option && strstr(option, "keep_names"))
      out << "   " << GetName() << "->SetName(\"" << GetName() << "\");" << std::endl;

   TGCompositeFrame *cf;
   TGLayoutManager * lm;
   for (Int_t i=0; i<GetNumberOfTabs(); i++) {
      cf = GetTabContainer(i);
      if (!cf || !GetTabTab(i)) continue;
      out << std::endl << "   // container of " << quote
          << GetTabTab(i)->GetString() << quote << std::endl;
      out << "   TGCompositeFrame *" << cf->GetName() << ";" << std::endl;
      out << "   " << cf->GetName() << " = " << GetName()
                   << "->AddTab(" << quote << GetTabTab(i)->GetString()
                   << quote << ");" << std::endl;
      lm = cf->GetLayoutManager();
      if (lm) {
         if ((cf->GetOptions() & kHorizontalFrame) &&
            (lm->InheritsFrom(TGHorizontalLayout::Class()))) {
            ;
         } else if ((GetOptions() & kVerticalFrame) &&
            (lm->InheritsFrom(TGVerticalLayout::Class()))) {
            ;
         } else {
            out << "   " << cf->GetName() <<"->SetLayoutManager(";
            lm->SavePrimitive(out, option);
            out << ");" << std::endl;
         }
         if (!IsEnabled(i)) {
            out << "   " << GetName() << "->SetEnabled(" << i << ", kFALSE);" << std::endl;
         }
      }
      cf->SavePrimitiveSubframes(out, option);

      if (GetTabTab(i)->IsCloseShown()) {
         out << "   TGTabElement *tab" << i << " = "
             << GetName() << "->GetTabTab(" << i << ");" << std::endl;
         out << "   tab" << i << "->ShowClose(kTRUE);" << std::endl;
      }
      if (GetTabTab(i)->GetBackground() != GetTabTab(i)->GetDefaultFrameBackground()) {
         GetTabTab(i)->SaveUserColor(out, option);
         out << "   TGTabElement *tab" << i << " = "
             << GetName() << "->GetTabTab(" << i << ");" << std::endl;
         out << "   tab" << i << "->ChangeBackground(ucolor);" << std::endl;
      }

   }
   out << std::endl << "   " << GetName() << "->SetTab(" << GetCurrent() << ");" << std::endl;
   out << std::endl << "   " << GetName() << "->Resize(" << GetName()
       << "->GetDefaultSize());" << std::endl;
}

// __________________________________________________________________________
void TGTabLayout::SavePrimitive(std::ostream &out, Option_t * /*= ""*/)
{
   // Save tab layout manager as a C++ statement(s) on out stream.

   out << "new TGTabLayout(" << fMain->GetName() << ")";

}
 TGTab.cxx:1
 TGTab.cxx:2
 TGTab.cxx:3
 TGTab.cxx:4
 TGTab.cxx:5
 TGTab.cxx:6
 TGTab.cxx:7
 TGTab.cxx:8
 TGTab.cxx:9
 TGTab.cxx:10
 TGTab.cxx:11
 TGTab.cxx:12
 TGTab.cxx:13
 TGTab.cxx:14
 TGTab.cxx:15
 TGTab.cxx:16
 TGTab.cxx:17
 TGTab.cxx:18
 TGTab.cxx:19
 TGTab.cxx:20
 TGTab.cxx:21
 TGTab.cxx:22
 TGTab.cxx:23
 TGTab.cxx:24
 TGTab.cxx:25
 TGTab.cxx:26
 TGTab.cxx:27
 TGTab.cxx:28
 TGTab.cxx:29
 TGTab.cxx:30
 TGTab.cxx:31
 TGTab.cxx:32
 TGTab.cxx:33
 TGTab.cxx:34
 TGTab.cxx:35
 TGTab.cxx:36
 TGTab.cxx:37
 TGTab.cxx:38
 TGTab.cxx:39
 TGTab.cxx:40
 TGTab.cxx:41
 TGTab.cxx:42
 TGTab.cxx:43
 TGTab.cxx:44
 TGTab.cxx:45
 TGTab.cxx:46
 TGTab.cxx:47
 TGTab.cxx:48
 TGTab.cxx:49
 TGTab.cxx:50
 TGTab.cxx:51
 TGTab.cxx:52
 TGTab.cxx:53
 TGTab.cxx:54
 TGTab.cxx:55
 TGTab.cxx:56
 TGTab.cxx:57
 TGTab.cxx:58
 TGTab.cxx:59
 TGTab.cxx:60
 TGTab.cxx:61
 TGTab.cxx:62
 TGTab.cxx:63
 TGTab.cxx:64
 TGTab.cxx:65
 TGTab.cxx:66
 TGTab.cxx:67
 TGTab.cxx:68
 TGTab.cxx:69
 TGTab.cxx:70
 TGTab.cxx:71
 TGTab.cxx:72
 TGTab.cxx:73
 TGTab.cxx:74
 TGTab.cxx:75
 TGTab.cxx:76
 TGTab.cxx:77
 TGTab.cxx:78
 TGTab.cxx:79
 TGTab.cxx:80
 TGTab.cxx:81
 TGTab.cxx:82
 TGTab.cxx:83
 TGTab.cxx:84
 TGTab.cxx:85
 TGTab.cxx:86
 TGTab.cxx:87
 TGTab.cxx:88
 TGTab.cxx:89
 TGTab.cxx:90
 TGTab.cxx:91
 TGTab.cxx:92
 TGTab.cxx:93
 TGTab.cxx:94
 TGTab.cxx:95
 TGTab.cxx:96
 TGTab.cxx:97
 TGTab.cxx:98
 TGTab.cxx:99
 TGTab.cxx:100
 TGTab.cxx:101
 TGTab.cxx:102
 TGTab.cxx:103
 TGTab.cxx:104
 TGTab.cxx:105
 TGTab.cxx:106
 TGTab.cxx:107
 TGTab.cxx:108
 TGTab.cxx:109
 TGTab.cxx:110
 TGTab.cxx:111
 TGTab.cxx:112
 TGTab.cxx:113
 TGTab.cxx:114
 TGTab.cxx:115
 TGTab.cxx:116
 TGTab.cxx:117
 TGTab.cxx:118
 TGTab.cxx:119
 TGTab.cxx:120
 TGTab.cxx:121
 TGTab.cxx:122
 TGTab.cxx:123
 TGTab.cxx:124
 TGTab.cxx:125
 TGTab.cxx:126
 TGTab.cxx:127
 TGTab.cxx:128
 TGTab.cxx:129
 TGTab.cxx:130
 TGTab.cxx:131
 TGTab.cxx:132
 TGTab.cxx:133
 TGTab.cxx:134
 TGTab.cxx:135
 TGTab.cxx:136
 TGTab.cxx:137
 TGTab.cxx:138
 TGTab.cxx:139
 TGTab.cxx:140
 TGTab.cxx:141
 TGTab.cxx:142
 TGTab.cxx:143
 TGTab.cxx:144
 TGTab.cxx:145
 TGTab.cxx:146
 TGTab.cxx:147
 TGTab.cxx:148
 TGTab.cxx:149
 TGTab.cxx:150
 TGTab.cxx:151
 TGTab.cxx:152
 TGTab.cxx:153
 TGTab.cxx:154
 TGTab.cxx:155
 TGTab.cxx:156
 TGTab.cxx:157
 TGTab.cxx:158
 TGTab.cxx:159
 TGTab.cxx:160
 TGTab.cxx:161
 TGTab.cxx:162
 TGTab.cxx:163
 TGTab.cxx:164
 TGTab.cxx:165
 TGTab.cxx:166
 TGTab.cxx:167
 TGTab.cxx:168
 TGTab.cxx:169
 TGTab.cxx:170
 TGTab.cxx:171
 TGTab.cxx:172
 TGTab.cxx:173
 TGTab.cxx:174
 TGTab.cxx:175
 TGTab.cxx:176
 TGTab.cxx:177
 TGTab.cxx:178
 TGTab.cxx:179
 TGTab.cxx:180
 TGTab.cxx:181
 TGTab.cxx:182
 TGTab.cxx:183
 TGTab.cxx:184
 TGTab.cxx:185
 TGTab.cxx:186
 TGTab.cxx:187
 TGTab.cxx:188
 TGTab.cxx:189
 TGTab.cxx:190
 TGTab.cxx:191
 TGTab.cxx:192
 TGTab.cxx:193
 TGTab.cxx:194
 TGTab.cxx:195
 TGTab.cxx:196
 TGTab.cxx:197
 TGTab.cxx:198
 TGTab.cxx:199
 TGTab.cxx:200
 TGTab.cxx:201
 TGTab.cxx:202
 TGTab.cxx:203
 TGTab.cxx:204
 TGTab.cxx:205
 TGTab.cxx:206
 TGTab.cxx:207
 TGTab.cxx:208
 TGTab.cxx:209
 TGTab.cxx:210
 TGTab.cxx:211
 TGTab.cxx:212
 TGTab.cxx:213
 TGTab.cxx:214
 TGTab.cxx:215
 TGTab.cxx:216
 TGTab.cxx:217
 TGTab.cxx:218
 TGTab.cxx:219
 TGTab.cxx:220
 TGTab.cxx:221
 TGTab.cxx:222
 TGTab.cxx:223
 TGTab.cxx:224
 TGTab.cxx:225
 TGTab.cxx:226
 TGTab.cxx:227
 TGTab.cxx:228
 TGTab.cxx:229
 TGTab.cxx:230
 TGTab.cxx:231
 TGTab.cxx:232
 TGTab.cxx:233
 TGTab.cxx:234
 TGTab.cxx:235
 TGTab.cxx:236
 TGTab.cxx:237
 TGTab.cxx:238
 TGTab.cxx:239
 TGTab.cxx:240
 TGTab.cxx:241
 TGTab.cxx:242
 TGTab.cxx:243
 TGTab.cxx:244
 TGTab.cxx:245
 TGTab.cxx:246
 TGTab.cxx:247
 TGTab.cxx:248
 TGTab.cxx:249
 TGTab.cxx:250
 TGTab.cxx:251
 TGTab.cxx:252
 TGTab.cxx:253
 TGTab.cxx:254
 TGTab.cxx:255
 TGTab.cxx:256
 TGTab.cxx:257
 TGTab.cxx:258
 TGTab.cxx:259
 TGTab.cxx:260
 TGTab.cxx:261
 TGTab.cxx:262
 TGTab.cxx:263
 TGTab.cxx:264
 TGTab.cxx:265
 TGTab.cxx:266
 TGTab.cxx:267
 TGTab.cxx:268
 TGTab.cxx:269
 TGTab.cxx:270
 TGTab.cxx:271
 TGTab.cxx:272
 TGTab.cxx:273
 TGTab.cxx:274
 TGTab.cxx:275
 TGTab.cxx:276
 TGTab.cxx:277
 TGTab.cxx:278
 TGTab.cxx:279
 TGTab.cxx:280
 TGTab.cxx:281
 TGTab.cxx:282
 TGTab.cxx:283
 TGTab.cxx:284
 TGTab.cxx:285
 TGTab.cxx:286
 TGTab.cxx:287
 TGTab.cxx:288
 TGTab.cxx:289
 TGTab.cxx:290
 TGTab.cxx:291
 TGTab.cxx:292
 TGTab.cxx:293
 TGTab.cxx:294
 TGTab.cxx:295
 TGTab.cxx:296
 TGTab.cxx:297
 TGTab.cxx:298
 TGTab.cxx:299
 TGTab.cxx:300
 TGTab.cxx:301
 TGTab.cxx:302
 TGTab.cxx:303
 TGTab.cxx:304
 TGTab.cxx:305
 TGTab.cxx:306
 TGTab.cxx:307
 TGTab.cxx:308
 TGTab.cxx:309
 TGTab.cxx:310
 TGTab.cxx:311
 TGTab.cxx:312
 TGTab.cxx:313
 TGTab.cxx:314
 TGTab.cxx:315
 TGTab.cxx:316
 TGTab.cxx:317
 TGTab.cxx:318
 TGTab.cxx:319
 TGTab.cxx:320
 TGTab.cxx:321
 TGTab.cxx:322
 TGTab.cxx:323
 TGTab.cxx:324
 TGTab.cxx:325
 TGTab.cxx:326
 TGTab.cxx:327
 TGTab.cxx:328
 TGTab.cxx:329
 TGTab.cxx:330
 TGTab.cxx:331
 TGTab.cxx:332
 TGTab.cxx:333
 TGTab.cxx:334
 TGTab.cxx:335
 TGTab.cxx:336
 TGTab.cxx:337
 TGTab.cxx:338
 TGTab.cxx:339
 TGTab.cxx:340
 TGTab.cxx:341
 TGTab.cxx:342
 TGTab.cxx:343
 TGTab.cxx:344
 TGTab.cxx:345
 TGTab.cxx:346
 TGTab.cxx:347
 TGTab.cxx:348
 TGTab.cxx:349
 TGTab.cxx:350
 TGTab.cxx:351
 TGTab.cxx:352
 TGTab.cxx:353
 TGTab.cxx:354
 TGTab.cxx:355
 TGTab.cxx:356
 TGTab.cxx:357
 TGTab.cxx:358
 TGTab.cxx:359
 TGTab.cxx:360
 TGTab.cxx:361
 TGTab.cxx:362
 TGTab.cxx:363
 TGTab.cxx:364
 TGTab.cxx:365
 TGTab.cxx:366
 TGTab.cxx:367
 TGTab.cxx:368
 TGTab.cxx:369
 TGTab.cxx:370
 TGTab.cxx:371
 TGTab.cxx:372
 TGTab.cxx:373
 TGTab.cxx:374
 TGTab.cxx:375
 TGTab.cxx:376
 TGTab.cxx:377
 TGTab.cxx:378
 TGTab.cxx:379
 TGTab.cxx:380
 TGTab.cxx:381
 TGTab.cxx:382
 TGTab.cxx:383
 TGTab.cxx:384
 TGTab.cxx:385
 TGTab.cxx:386
 TGTab.cxx:387
 TGTab.cxx:388
 TGTab.cxx:389
 TGTab.cxx:390
 TGTab.cxx:391
 TGTab.cxx:392
 TGTab.cxx:393
 TGTab.cxx:394
 TGTab.cxx:395
 TGTab.cxx:396
 TGTab.cxx:397
 TGTab.cxx:398
 TGTab.cxx:399
 TGTab.cxx:400
 TGTab.cxx:401
 TGTab.cxx:402
 TGTab.cxx:403
 TGTab.cxx:404
 TGTab.cxx:405
 TGTab.cxx:406
 TGTab.cxx:407
 TGTab.cxx:408
 TGTab.cxx:409
 TGTab.cxx:410
 TGTab.cxx:411
 TGTab.cxx:412
 TGTab.cxx:413
 TGTab.cxx:414
 TGTab.cxx:415
 TGTab.cxx:416
 TGTab.cxx:417
 TGTab.cxx:418
 TGTab.cxx:419
 TGTab.cxx:420
 TGTab.cxx:421
 TGTab.cxx:422
 TGTab.cxx:423
 TGTab.cxx:424
 TGTab.cxx:425
 TGTab.cxx:426
 TGTab.cxx:427
 TGTab.cxx:428
 TGTab.cxx:429
 TGTab.cxx:430
 TGTab.cxx:431
 TGTab.cxx:432
 TGTab.cxx:433
 TGTab.cxx:434
 TGTab.cxx:435
 TGTab.cxx:436
 TGTab.cxx:437
 TGTab.cxx:438
 TGTab.cxx:439
 TGTab.cxx:440
 TGTab.cxx:441
 TGTab.cxx:442
 TGTab.cxx:443
 TGTab.cxx:444
 TGTab.cxx:445
 TGTab.cxx:446
 TGTab.cxx:447
 TGTab.cxx:448
 TGTab.cxx:449
 TGTab.cxx:450
 TGTab.cxx:451
 TGTab.cxx:452
 TGTab.cxx:453
 TGTab.cxx:454
 TGTab.cxx:455
 TGTab.cxx:456
 TGTab.cxx:457
 TGTab.cxx:458
 TGTab.cxx:459
 TGTab.cxx:460
 TGTab.cxx:461
 TGTab.cxx:462
 TGTab.cxx:463
 TGTab.cxx:464
 TGTab.cxx:465
 TGTab.cxx:466
 TGTab.cxx:467
 TGTab.cxx:468
 TGTab.cxx:469
 TGTab.cxx:470
 TGTab.cxx:471
 TGTab.cxx:472
 TGTab.cxx:473
 TGTab.cxx:474
 TGTab.cxx:475
 TGTab.cxx:476
 TGTab.cxx:477
 TGTab.cxx:478
 TGTab.cxx:479
 TGTab.cxx:480
 TGTab.cxx:481
 TGTab.cxx:482
 TGTab.cxx:483
 TGTab.cxx:484
 TGTab.cxx:485
 TGTab.cxx:486
 TGTab.cxx:487
 TGTab.cxx:488
 TGTab.cxx:489
 TGTab.cxx:490
 TGTab.cxx:491
 TGTab.cxx:492
 TGTab.cxx:493
 TGTab.cxx:494
 TGTab.cxx:495
 TGTab.cxx:496
 TGTab.cxx:497
 TGTab.cxx:498
 TGTab.cxx:499
 TGTab.cxx:500
 TGTab.cxx:501
 TGTab.cxx:502
 TGTab.cxx:503
 TGTab.cxx:504
 TGTab.cxx:505
 TGTab.cxx:506
 TGTab.cxx:507
 TGTab.cxx:508
 TGTab.cxx:509
 TGTab.cxx:510
 TGTab.cxx:511
 TGTab.cxx:512
 TGTab.cxx:513
 TGTab.cxx:514
 TGTab.cxx:515
 TGTab.cxx:516
 TGTab.cxx:517
 TGTab.cxx:518
 TGTab.cxx:519
 TGTab.cxx:520
 TGTab.cxx:521
 TGTab.cxx:522
 TGTab.cxx:523
 TGTab.cxx:524
 TGTab.cxx:525
 TGTab.cxx:526
 TGTab.cxx:527
 TGTab.cxx:528
 TGTab.cxx:529
 TGTab.cxx:530
 TGTab.cxx:531
 TGTab.cxx:532
 TGTab.cxx:533
 TGTab.cxx:534
 TGTab.cxx:535
 TGTab.cxx:536
 TGTab.cxx:537
 TGTab.cxx:538
 TGTab.cxx:539
 TGTab.cxx:540
 TGTab.cxx:541
 TGTab.cxx:542
 TGTab.cxx:543
 TGTab.cxx:544
 TGTab.cxx:545
 TGTab.cxx:546
 TGTab.cxx:547
 TGTab.cxx:548
 TGTab.cxx:549
 TGTab.cxx:550
 TGTab.cxx:551
 TGTab.cxx:552
 TGTab.cxx:553
 TGTab.cxx:554
 TGTab.cxx:555
 TGTab.cxx:556
 TGTab.cxx:557
 TGTab.cxx:558
 TGTab.cxx:559
 TGTab.cxx:560
 TGTab.cxx:561
 TGTab.cxx:562
 TGTab.cxx:563
 TGTab.cxx:564
 TGTab.cxx:565
 TGTab.cxx:566
 TGTab.cxx:567
 TGTab.cxx:568
 TGTab.cxx:569
 TGTab.cxx:570
 TGTab.cxx:571
 TGTab.cxx:572
 TGTab.cxx:573
 TGTab.cxx:574
 TGTab.cxx:575
 TGTab.cxx:576
 TGTab.cxx:577
 TGTab.cxx:578
 TGTab.cxx:579
 TGTab.cxx:580
 TGTab.cxx:581
 TGTab.cxx:582
 TGTab.cxx:583
 TGTab.cxx:584
 TGTab.cxx:585
 TGTab.cxx:586
 TGTab.cxx:587
 TGTab.cxx:588
 TGTab.cxx:589
 TGTab.cxx:590
 TGTab.cxx:591
 TGTab.cxx:592
 TGTab.cxx:593
 TGTab.cxx:594
 TGTab.cxx:595
 TGTab.cxx:596
 TGTab.cxx:597
 TGTab.cxx:598
 TGTab.cxx:599
 TGTab.cxx:600
 TGTab.cxx:601
 TGTab.cxx:602
 TGTab.cxx:603
 TGTab.cxx:604
 TGTab.cxx:605
 TGTab.cxx:606
 TGTab.cxx:607
 TGTab.cxx:608
 TGTab.cxx:609
 TGTab.cxx:610
 TGTab.cxx:611
 TGTab.cxx:612
 TGTab.cxx:613
 TGTab.cxx:614
 TGTab.cxx:615
 TGTab.cxx:616
 TGTab.cxx:617
 TGTab.cxx:618
 TGTab.cxx:619
 TGTab.cxx:620
 TGTab.cxx:621
 TGTab.cxx:622
 TGTab.cxx:623
 TGTab.cxx:624
 TGTab.cxx:625
 TGTab.cxx:626
 TGTab.cxx:627
 TGTab.cxx:628
 TGTab.cxx:629
 TGTab.cxx:630
 TGTab.cxx:631
 TGTab.cxx:632
 TGTab.cxx:633
 TGTab.cxx:634
 TGTab.cxx:635
 TGTab.cxx:636
 TGTab.cxx:637
 TGTab.cxx:638
 TGTab.cxx:639
 TGTab.cxx:640
 TGTab.cxx:641
 TGTab.cxx:642
 TGTab.cxx:643
 TGTab.cxx:644
 TGTab.cxx:645
 TGTab.cxx:646
 TGTab.cxx:647
 TGTab.cxx:648
 TGTab.cxx:649
 TGTab.cxx:650
 TGTab.cxx:651
 TGTab.cxx:652
 TGTab.cxx:653
 TGTab.cxx:654
 TGTab.cxx:655
 TGTab.cxx:656
 TGTab.cxx:657
 TGTab.cxx:658
 TGTab.cxx:659
 TGTab.cxx:660
 TGTab.cxx:661
 TGTab.cxx:662
 TGTab.cxx:663
 TGTab.cxx:664
 TGTab.cxx:665
 TGTab.cxx:666
 TGTab.cxx:667
 TGTab.cxx:668
 TGTab.cxx:669
 TGTab.cxx:670
 TGTab.cxx:671
 TGTab.cxx:672
 TGTab.cxx:673
 TGTab.cxx:674
 TGTab.cxx:675
 TGTab.cxx:676
 TGTab.cxx:677
 TGTab.cxx:678
 TGTab.cxx:679
 TGTab.cxx:680
 TGTab.cxx:681
 TGTab.cxx:682
 TGTab.cxx:683
 TGTab.cxx:684
 TGTab.cxx:685
 TGTab.cxx:686
 TGTab.cxx:687
 TGTab.cxx:688
 TGTab.cxx:689
 TGTab.cxx:690
 TGTab.cxx:691
 TGTab.cxx:692
 TGTab.cxx:693
 TGTab.cxx:694
 TGTab.cxx:695
 TGTab.cxx:696
 TGTab.cxx:697
 TGTab.cxx:698
 TGTab.cxx:699
 TGTab.cxx:700
 TGTab.cxx:701
 TGTab.cxx:702
 TGTab.cxx:703
 TGTab.cxx:704
 TGTab.cxx:705
 TGTab.cxx:706
 TGTab.cxx:707
 TGTab.cxx:708
 TGTab.cxx:709
 TGTab.cxx:710
 TGTab.cxx:711
 TGTab.cxx:712
 TGTab.cxx:713
 TGTab.cxx:714
 TGTab.cxx:715
 TGTab.cxx:716
 TGTab.cxx:717
 TGTab.cxx:718
 TGTab.cxx:719
 TGTab.cxx:720
 TGTab.cxx:721
 TGTab.cxx:722
 TGTab.cxx:723
 TGTab.cxx:724
 TGTab.cxx:725
 TGTab.cxx:726
 TGTab.cxx:727
 TGTab.cxx:728
 TGTab.cxx:729
 TGTab.cxx:730
 TGTab.cxx:731
 TGTab.cxx:732
 TGTab.cxx:733
 TGTab.cxx:734
 TGTab.cxx:735
 TGTab.cxx:736
 TGTab.cxx:737
 TGTab.cxx:738
 TGTab.cxx:739
 TGTab.cxx:740
 TGTab.cxx:741
 TGTab.cxx:742
 TGTab.cxx:743
 TGTab.cxx:744
 TGTab.cxx:745
 TGTab.cxx:746
 TGTab.cxx:747
 TGTab.cxx:748
 TGTab.cxx:749
 TGTab.cxx:750
 TGTab.cxx:751
 TGTab.cxx:752
 TGTab.cxx:753
 TGTab.cxx:754
 TGTab.cxx:755
 TGTab.cxx:756
 TGTab.cxx:757
 TGTab.cxx:758
 TGTab.cxx:759
 TGTab.cxx:760
 TGTab.cxx:761
 TGTab.cxx:762
 TGTab.cxx:763
 TGTab.cxx:764
 TGTab.cxx:765
 TGTab.cxx:766
 TGTab.cxx:767
 TGTab.cxx:768
 TGTab.cxx:769
 TGTab.cxx:770
 TGTab.cxx:771
 TGTab.cxx:772
 TGTab.cxx:773
 TGTab.cxx:774
 TGTab.cxx:775
 TGTab.cxx:776
 TGTab.cxx:777
 TGTab.cxx:778
 TGTab.cxx:779
 TGTab.cxx:780
 TGTab.cxx:781
 TGTab.cxx:782
 TGTab.cxx:783
 TGTab.cxx:784
 TGTab.cxx:785
 TGTab.cxx:786
 TGTab.cxx:787
 TGTab.cxx:788
 TGTab.cxx:789
 TGTab.cxx:790
 TGTab.cxx:791
 TGTab.cxx:792
 TGTab.cxx:793
 TGTab.cxx:794
 TGTab.cxx:795
 TGTab.cxx:796
 TGTab.cxx:797
 TGTab.cxx:798
 TGTab.cxx:799
 TGTab.cxx:800
 TGTab.cxx:801
 TGTab.cxx:802
 TGTab.cxx:803
 TGTab.cxx:804
 TGTab.cxx:805
 TGTab.cxx:806
 TGTab.cxx:807
 TGTab.cxx:808
 TGTab.cxx:809
 TGTab.cxx:810
 TGTab.cxx:811
 TGTab.cxx:812
 TGTab.cxx:813
 TGTab.cxx:814
 TGTab.cxx:815
 TGTab.cxx:816
 TGTab.cxx:817
 TGTab.cxx:818
 TGTab.cxx:819
 TGTab.cxx:820
 TGTab.cxx:821
 TGTab.cxx:822
 TGTab.cxx:823
 TGTab.cxx:824
 TGTab.cxx:825
 TGTab.cxx:826
 TGTab.cxx:827
 TGTab.cxx:828
 TGTab.cxx:829
 TGTab.cxx:830
 TGTab.cxx:831
 TGTab.cxx:832
 TGTab.cxx:833
 TGTab.cxx:834
 TGTab.cxx:835
 TGTab.cxx:836
 TGTab.cxx:837
 TGTab.cxx:838