ROOT logo
// @(#)root/gui:$Id: TGMenu.cxx 28270 2009-04-17 10:22:29Z bellenot $
// Author: Fons Rademakers   09/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.

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

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TGMenuBar, TGPopupMenu, TGMenuTitle and TGMenuEntry                  //
//                                                                      //
// The TGMenu.h header contains all different menu classes.             //
//                                                                      //
// The TGMenuBar class implements a menu bar widget. It is used to      //
// specify and provide access to common and frequently used application //
// actions grouped under menu titles (TGMenuTitle class). The menu bar  //
// takes the highest-level of the menu system and it is a starting      //
// point for many interactions. It is always visible and allows using   //
// the keyboard equivalents. The geometry of the menu bar is            //
// automatically set to the parent widget, i.e. the menu bar            //
// automatically resizes itself so that it has the same width as its    //
// parent (typically TGMainFrame). A menu bar contains one or more      //
// popup menus and usually is placed along the top of the application   //
// window. Any popup menu is invisible until the user invokes it by     //
// using the mouse pointer or the keyboard.                             //
//                                                                      //
// Popup menus implemented by TGPopupMenu class are unique in that,     //
// by convention, they are not placed with the other GUI components in  //
// the user interfaces. Instead, a popup menu usually appears either in //
// a menu bar or as a context menu on the TOP of the GUI. For that      //
// reason it needs gClient->GetDefaultRoot() as a parent to get the     //
// pointer to the root (i.e. desktop) window. This way a popup menu     //
// will never be embedded.                                              //
// NOTE: Using gClient->GetRoot() as a parent of TGPopupMenu will not   //
// avoid the possibility of embedding the corresponding popup menu      //
// because the current window hierarchy can be changed by using         //
// gClient->SetRoot() method.                                           //
//                                                                      //
// As a context menus TGPopupMenu shows up after pressing the right     //
// mouse button, over a popup-enabled component. The popup menu then    //
// appears under the mouse pointer.                                     //
//                                                                      //
// Selecting a menu item will generate the event:                       //
// kC_COMMAND, kCM_MENU, menu id, user data.                            //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "TGMenu.h"
#include "TGResourcePool.h"
#include "TTimer.h"
#include "TMath.h"
#include "TSystem.h"
#include "TList.h"
#include "Riostream.h"
#include "KeySymbols.h"
#include "TGButton.h"
#include "TQConnection.h"
#include "TParameter.h"

const TGGC   *TGPopupMenu::fgDefaultGC = 0;
const TGGC   *TGPopupMenu::fgDefaultSelectedGC = 0;
const TGGC   *TGPopupMenu::fgDefaultSelectedBackgroundGC = 0;
const TGFont *TGPopupMenu::fgDefaultFont = 0;
const TGFont *TGPopupMenu::fgHilightFont = 0;

const TGGC   *TGMenuTitle::fgDefaultGC = 0;
const TGGC   *TGMenuTitle::fgDefaultSelectedGC = 0;
const TGFont *TGMenuTitle::fgDefaultFont = 0;


ClassImp(TGMenuBar)
ClassImp(TGMenuTitle)
ClassImpQ(TGPopupMenu)


//______________________________________________________________________________
class TPopupDelayTimer : public TTimer {
private:
   TGPopupMenu   *fPopup;   // popup menu
public:
   TPopupDelayTimer(TGPopupMenu *p, Long_t ms) : TTimer(ms, kTRUE) { fPopup = p; }
   Bool_t Notify();
};

//______________________________________________________________________________
Bool_t TPopupDelayTimer::Notify()
{
   // Notify when timer times out and reset the timer.

   fPopup->HandleTimer(0);
   Reset();
   return kFALSE;
}


//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TGMenuBar member functions.                                          //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

//______________________________________________________________________________
TGMenuBar::TGMenuBar(const TGWindow *p, UInt_t w, UInt_t h, UInt_t options)
   : TGHorizontalFrame(p, w, h, options | kHorizontalFrame)
{
   // Create a menu bar object.

   fCurrent       = 0;
   fTitles        = new TList;
   fStick         = kTRUE;
   fDefaultCursor = fClient->GetResourcePool()->GetGrabCursor();
   fTrash         = new TList();

   gVirtualX->GrabButton(fId, kButton1, kAnyModifier,
                       kButtonPressMask | kButtonReleaseMask | kEnterWindowMask,
                       kNone, kNone);

   fKeyNavigate = kFALSE;

   fMenuMore = new TGPopupMenu(gClient->GetDefaultRoot());
   fMenuMore->AddLabel("Hidden Menus");
   fMenuMore->AddSeparator();
   fMenuBarMoreLayout = new TGLayoutHints(kLHintsTop | kLHintsRight);

   fWithExt = kFALSE;
   fOutLayouts = new TList();
   fNeededSpace = new TList();
}

//______________________________________________________________________________
TGMenuBar::~TGMenuBar()
{
   // Delete menu bar object. Removes also the hot keys from the main frame,
   // so hitting them will not cause the menus to popup.

   TGFrameElement *el;
   TGMenuTitle    *t;
   Int_t           keycode;

   if (!MustCleanup()) {
      fTrash->Delete();
   }
   delete fTrash;

   const TGMainFrame *main = (TGMainFrame *)GetMainFrame();

   if (!MustCleanup()) {
      TIter next(fList);
      while ((el = (TGFrameElement *) next())) {
         t = (TGMenuTitle *) el->fFrame;
         if ((keycode = t->GetHotKeyCode()) != 0 && main) {
            main->RemoveBind(this, keycode, kKeyMod1Mask);
         }
      }
   }

   // delete TGMenuTitles
   if (fTitles && !MustCleanup()) fTitles->Delete();
   delete fTitles;

   delete fOutLayouts;
   fNeededSpace->Delete();
   delete fNeededSpace;
   delete fMenuMore;
   delete fMenuBarMoreLayout;
}

//______________________________________________________________________________
void TGMenuBar::Layout()
{
   // Clculates whether the >> menu must be shown or not and 
   // which menu titles are hidden. 

   if (GetDefaultWidth() > GetWidth()) {
      while (!(GetDefaultWidth() < GetWidth() || 
               GetList()->GetSize() <= 1)) {
         TGFrameElement* entry = GetLastOnLeft();
         TGMenuTitle* menuTitle = (TGMenuTitle*) entry->fFrame;
         fNeededSpace->AddLast(new TParameter<Int_t>("", menuTitle->GetWidth() + 
                                                         entry->fLayout->GetPadLeft() + 
                                                         entry->fLayout->GetPadRight() ) );
         fOutLayouts->AddLast( entry->fLayout );
         fMenuMore->AddPopup( menuTitle->GetName(), menuTitle->GetMenu() );
         menuTitle->GetMenu()->Connect("PoppedUp()", "TGMenuBar", this, "PopupConnection()");
         RemovePopup( menuTitle->GetName() );
      }
   }

   if (fNeededSpace->GetSize() > 0) {
      Int_t neededWidth = ((TParameter<Int_t>*) fNeededSpace->Last())->GetVal();
      Bool_t fit = kFALSE;
      if (fNeededSpace->GetSize() > 1)
         fit = GetDefaultWidth() + neededWidth + 5 < GetWidth();
      else 
         fit = GetDefaultWidth() + neededWidth - 7 < GetWidth();
      while (fit) {
         TGMenuEntry* menu = (TGMenuEntry*) fMenuMore->GetListOfEntries()->Last();
         TGLayoutHints* layout = (TGLayoutHints*) fOutLayouts->Last();
         ULong_t  hints = layout->GetLayoutHints();
         TGPopupMenu* beforeMenu = 0;
         if (hints & kLHintsRight) {
            TGFrameElement* entry = GetLastOnLeft();
            TGMenuTitle* beforeMenuTitle = (TGMenuTitle*) entry->fFrame;
            beforeMenu = beforeMenuTitle->GetMenu();
         }

         menu->GetPopup()->Disconnect("PoppedUp()", this, "PopupConnection()");
         AddPopup( menu->GetName(), menu->GetPopup(), layout, beforeMenu );
         fOutLayouts->Remove( fOutLayouts->Last() );
         fNeededSpace->Remove( fNeededSpace->Last() );
         fMenuMore->DeleteEntry(menu);

         if (fNeededSpace->GetSize() > 0) {
            neededWidth = ((TParameter<Int_t>*)fNeededSpace->Last())->GetVal();
            if (fNeededSpace->GetSize() > 1)
               fit = GetDefaultWidth() + neededWidth + 5 < GetWidth();
            else 
               fit = GetDefaultWidth() + neededWidth - 7 < GetWidth();
         } else 
            fit = kFALSE;
      }
   }

   if (fNeededSpace->GetSize() > 0) {
      if (!fWithExt) {
         AddPopup(">>", fMenuMore, fMenuBarMoreLayout,
                  ((TGMenuTitle*)((TGFrameElement*)GetList()->First())->fFrame)->GetMenu());
         fWithExt = kTRUE;
      }
   } else {
      RemovePopup(">>");
      fWithExt = kFALSE;
   }

   MapSubwindows();
   TGHorizontalFrame::Layout();
}

//______________________________________________________________________________
TGFrameElement* TGMenuBar::GetLastOnLeft()
{
   // Returns the last visible menu title on the left of the '>>' 
   // in the menu bar.

   TIter next(GetList());
   while (TGFrameElement *entry = (TGFrameElement*) next()) {
   
      TGMenuTitle* menuTitle = (TGMenuTitle*) entry->fFrame;
      TGLayoutHints* tmpLayout = (TGLayoutHints*) entry->fLayout;
      ULong_t  hints = tmpLayout->GetLayoutHints();

      if (hints & kLHintsRight && menuTitle->GetMenu() != fMenuMore) {
         return entry;
      }
   }

   return ((TGFrameElement*)GetList()->Last());
}

//______________________________________________________________________________
void TGMenuBar::PopupConnection()
{
   // Connects the corresponding cascaded menu to the proper slots,
   // according to the highlighted menu entry in '>>' menu.

   // Disconnect all previous signals
   TList* slots = fMenuMore->GetListOfSignals();
   TIter next (slots);
   while (TList* connlist = (TList*) next()) {
   
      const char* signal_name = connlist->GetName();
      TIter next2(connlist);
      while (TQConnection* conn = (TQConnection*) next2()) {
         const char* slot_name = conn->GetName();
         void* receiver = conn->GetReceiver();
         fMenuMore->Disconnect(signal_name, receiver, slot_name);
      }
   }
   fMenuMore->fMsgWindow = 0;

   // Check wheter the current entry is a menu or not (just in case)
   TGMenuEntry* currentEntry = fMenuMore->GetCurrent();
   if (currentEntry->GetType() != kMenuPopup) return;

   // Connect the corresponding active signals to the >> menu
   TGPopupMenu* currentMenu = currentEntry->GetPopup();

   slots = currentMenu->GetListOfSignals();
   TIter next3 (slots);
   while (TList* connlist = (TList*) next3()) {
   
      const char* signal_name = connlist->GetName();
      if (strcmp(signal_name, "Activated(int)") == 0) {
         TIter next2(connlist);
         while (TQConnection* conn = (TQConnection*) next2()) {

            const char* slot_name = conn->GetName();
            const char* class_name = conn->GetClassName();
            void* receiver = conn->GetReceiver();
            fMenuMore->Connect(signal_name, class_name, receiver, slot_name);
         }
      }
   }

   fMenuMore->fMsgWindow = currentMenu->fMsgWindow;
}

//______________________________________________________________________________
void TGMenuBar::BindKeys(Bool_t on)
{
   // If on kTRUE bind arrow, popup menu hot keys, otherwise
   // remove key bindings.

   gVirtualX->GrabKey(fId, gVirtualX->KeysymToKeycode(kKey_Left), kAnyModifier, on);
   gVirtualX->GrabKey(fId, gVirtualX->KeysymToKeycode(kKey_Right), kAnyModifier, on);
   gVirtualX->GrabKey(fId, gVirtualX->KeysymToKeycode(kKey_Up), kAnyModifier, on);
   gVirtualX->GrabKey(fId, gVirtualX->KeysymToKeycode(kKey_Down), kAnyModifier, on);
   gVirtualX->GrabKey(fId, gVirtualX->KeysymToKeycode(kKey_Enter), kAnyModifier, on);
   gVirtualX->GrabKey(fId, gVirtualX->KeysymToKeycode(kKey_Return), kAnyModifier, on);
   gVirtualX->GrabKey(fId, gVirtualX->KeysymToKeycode(kKey_Escape), kAnyModifier, on);

   if (fCurrent && fCurrent->GetMenu()) {
      BindMenu(fCurrent->GetMenu(), on);
   }
}

//______________________________________________________________________________
void TGMenuBar::BindMenu(TGPopupMenu* subMenu, Bool_t on) 
{
   // If on kTRUE bind subMenu hot keys, otherwise remove key bindings.

   TGMenuEntry *e;
   TIter next(subMenu->GetListOfEntries());
   
   while ((e = (TGMenuEntry*)next())) {
      Int_t hot = 0;
      if ( e->GetType() == kMenuPopup )
         BindMenu(e->GetPopup(), on);
      if (e->GetLabel()) {
         hot = e->GetLabel()->GetHotChar();
      }
      if (!hot) continue;
      gVirtualX->GrabKey(fId, gVirtualX->KeysymToKeycode(hot), 0, on);
      gVirtualX->GrabKey(fId, gVirtualX->KeysymToKeycode(hot), kKeyShiftMask, on);
      gVirtualX->GrabKey(fId, gVirtualX->KeysymToKeycode(hot), kKeyLockMask, on);
      gVirtualX->GrabKey(fId, gVirtualX->KeysymToKeycode(hot), kKeyMod2Mask, on);
      gVirtualX->GrabKey(fId, gVirtualX->KeysymToKeycode(hot), kKeyShiftMask | kKeyLockMask, on);
      gVirtualX->GrabKey(fId, gVirtualX->KeysymToKeycode(hot), kKeyShiftMask | kKeyMod2Mask, on);
      gVirtualX->GrabKey(fId, gVirtualX->KeysymToKeycode(hot), kKeyLockMask  | kKeyMod2Mask, on);
      gVirtualX->GrabKey(fId, gVirtualX->KeysymToKeycode(hot), kKeyShiftMask | kKeyLockMask | kKeyMod2Mask, on);
   }
}


//______________________________________________________________________________
void TGMenuBar::BindHotKey(Int_t keycode, Bool_t on)
{
   // If on kTRUE bind hot keys, otherwise remove key binding.

   const TGMainFrame *main = (TGMainFrame *) GetMainFrame();

   if (!main || !main->InheritsFrom("TGMainFrame")) return;

   if (on) {
      // case unsensitive bindings
      main->BindKey(this, keycode, kKeyMod1Mask);
      main->BindKey(this, keycode, kKeyMod1Mask | kKeyShiftMask);
      main->BindKey(this, keycode, kKeyMod1Mask | kKeyLockMask);
      main->BindKey(this, keycode, kKeyMod1Mask | kKeyShiftMask | kKeyLockMask);

      main->BindKey(this, keycode, kKeyMod1Mask | kKeyMod2Mask);
      main->BindKey(this, keycode, kKeyMod1Mask | kKeyShiftMask | kKeyMod2Mask);
      main->BindKey(this, keycode, kKeyMod1Mask | kKeyMod2Mask | kKeyLockMask);
      main->BindKey(this, keycode, kKeyMod1Mask | kKeyShiftMask | kKeyMod2Mask | kKeyLockMask);
   } else {
      main->RemoveBind(this, keycode, kKeyMod1Mask);
      main->RemoveBind(this, keycode, kKeyMod1Mask | kKeyShiftMask);
      main->RemoveBind(this, keycode, kKeyMod1Mask | kKeyLockMask);
      main->RemoveBind(this, keycode, kKeyMod1Mask | kKeyShiftMask | kKeyLockMask);

      main->RemoveBind(this, keycode, kKeyMod1Mask | kKeyMod2Mask);
      main->RemoveBind(this, keycode, kKeyMod1Mask | kKeyShiftMask | kKeyMod2Mask);
      main->RemoveBind(this, keycode, kKeyMod1Mask | kKeyMod2Mask | kKeyLockMask);
      main->RemoveBind(this, keycode, kKeyMod1Mask | kKeyShiftMask | kKeyMod2Mask | kKeyLockMask);
   }
}

//______________________________________________________________________________
void TGMenuBar::AddPopup(TGHotString *s, TGPopupMenu *menu, TGLayoutHints *l,
                         TGPopupMenu *before)
{
   // Add popup menu to menu bar. The hot string will be adopted by the
   // menubar (actually the menu title) and deleted when possible.
   // If before is not 0 the menu will be added before it.

   TGMenuTitle *t;
   Int_t keycode;

   AddFrameBefore(t = new TGMenuTitle(this, s, menu), l, before);
   fTitles->Add(t);  // keep track of menu titles for later cleanup in dtor

   if ((keycode = t->GetHotKeyCode()) != 0) {
      BindHotKey(keycode, kTRUE);
   }
}

//______________________________________________________________________________
void TGMenuBar::AddTitle(TGMenuTitle *title, TGLayoutHints *l, TGPopupMenu *before)
{
   // Add popup via created before menu title.

   Int_t keycode;

   AddFrameBefore(title, l, before);
   fTitles->Add(title);  // keep track of menu titles for later cleanup in dtor

   if ((keycode = title->GetHotKeyCode()) != 0) {
      BindHotKey(keycode, kTRUE);
   }
}

//______________________________________________________________________________
void TGMenuBar::AddPopup(const char *s, TGPopupMenu *menu, TGLayoutHints *l,
                         TGPopupMenu *before)
{
   // Add popup menu to menu bar. If before is not 0 the menu will be
   // added before it.

   AddPopup(new TGHotString(s), menu, l, before);
}

//______________________________________________________________________________
TGPopupMenu *TGMenuBar::AddPopup(const TString &s, Int_t padleft, Int_t padright,
                                 Int_t padtop, Int_t padbottom)
{
   // Add popup menu to menu bar.
   //
   // Comment:
   //    This method is valid  only for horizontal menu bars.
   //    The most common case is menu bar containing equidistant titles padding left side.
   //       TGMenuBar *bar;
   //       bar->AddPopup("title1", 10);
   //       bar->AddPopup("title2", 10);
   //       ...
   //
   //    To add equidistant titles  padding right side padleft must be 0.
   //       TGMenuBar *bar;
   //       bar->AddPopup("title1", 0, 10);
   //       bar->AddPopup("title2", 0, 10);
   //       ...
   //
   //    This method guarantee automatic cleanup when menu bar is destroyed.
   //    Do not delete returned popup-menu

   ULong_t hints = kLHintsTop;

   if (padleft)  {
      hints |= kLHintsLeft;
   } else {
      hints |= kLHintsRight;
   }

   TGLayoutHints *l = new TGLayoutHints(hints, padleft, padright,
                                               padtop, padbottom);
   fTrash->Add(l);

   TGPopupMenu *menu = new TGPopupMenu(fClient->GetDefaultRoot());
   AddPopup(new TGHotString(s), menu, l, 0);
   fTrash->Add(menu);
   return menu;
}

//______________________________________________________________________________
void TGMenuBar::AddFrameBefore(TGFrame *f, TGLayoutHints *l,
                               TGPopupMenu *before)
{
   // Private version of AddFrame for menubar, to make sure that we
   // indeed only add TGMenuTitle objects to it. If before is not 0
   // the menu will be added before it.

   if (!f->InheritsFrom("TGMenuTitle")) {
      Error("AddFrameBefore", "may only add TGMenuTitle objects to a menu bar");
      return;
   }

   if (!before) {
      AddFrame(f, l);
      return;
   }

   TGFrameElement *nw;

   nw = new TGFrameElement;
   nw->fFrame  = f;
   nw->fLayout = l ? l : fgDefaultHints;
   nw->fState  = 1;

   TGFrameElement *el;
   TIter next(fList);
   while ((el = (TGFrameElement *) next())) {
      TGMenuTitle *t = (TGMenuTitle *) el->fFrame;
      if (t->GetMenu() == before) {
         fList->AddBefore(el, nw);
         return;
      }
   }
   fList->Add(nw);
}

//______________________________________________________________________________
TGPopupMenu *TGMenuBar::GetPopup(const char *s)
{
   // Return popup menu with the specified name. Returns 0 if menu is
   // not found. Returnes menu can be used as "before" in AddPopup().
   // Don't use hot key (&) in name.

   if (!GetList()) return 0;

   TGFrameElement *el;
   TIter next(GetList());
   TString str = s;

   while ((el = (TGFrameElement *) next())) {
      TGMenuTitle *t = (TGMenuTitle *) el->fFrame;
      if (str == t->GetName())
         return t->GetMenu();
   }
   return 0;
}

//______________________________________________________________________________
TGPopupMenu *TGMenuBar::RemovePopup(const char *s)
{
   // Remove popup menu from menu bar. Returned menu has to be deleted by
   // the user, or can be re-used in another AddPopup(). Returns 0 if
   // menu is not found. Don't use hot key (&) in name.

   if (!GetList()) return 0;

   TGFrameElement *el;
   TIter next(GetList());
   TString str = s;

   while ((el = (TGFrameElement *) next())) {
      TGMenuTitle *t = (TGMenuTitle *) el->fFrame;
      if (str == t->GetName()) {
         Int_t keycode;
         if ((keycode = t->GetHotKeyCode())) {
            BindHotKey(keycode, kFALSE);  // remove bind
         }
         TGPopupMenu *m = t->GetMenu();
         fTitles->Remove(t);
         t->DestroyWindow();
         RemoveFrame(t);
         delete t;
         return m;
      }
   }
   return 0;
}

//______________________________________________________________________________
Bool_t TGMenuBar::HandleMotion(Event_t *event)
{
   // Handle a mouse motion event in a menu bar.

   if (fKeyNavigate) return kTRUE;

   Int_t        dummy;
   Window_t     wtarget;
   TGMenuTitle *target = 0;

   if (!(event->fState & kButton1Mask))
      fStick = kFALSE; // use some threshold!

   gVirtualX->TranslateCoordinates(fId, fId, event->fX, event->fY,
                                   dummy, dummy, wtarget);
   if (wtarget) target = (TGMenuTitle*) fClient->GetWindowById(wtarget);

   if (fCurrent && target && (target != fCurrent)) {
      // deactivate all others
      TGFrameElement *el;
      TIter next(fList);
      while ((el = (TGFrameElement *) next()))
         ((TGMenuTitle*)el->fFrame)->SetState(kFALSE);

      fStick   = kTRUE;
      fCurrent = target;
      target->SetState(kTRUE);
   }

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TGMenuBar::HandleButton(Event_t *event)
{
   // Handle a mouse button event in a menubar.

   Int_t        dummy;
   Window_t     wtarget;
   TGMenuTitle *target;

   // We don't need to check the button number as GrabButton will
   // only allow button1 events

   if (event->fType == kButtonPress) {

      gVirtualX->TranslateCoordinates(fId, fId, event->fX, event->fY,
                                      dummy, dummy, wtarget);
      target = (TGMenuTitle*) fClient->GetWindowById(wtarget);

      if (target != 0) {
         fStick = kTRUE;

         if (target != fCurrent) {
            // deactivate all others
            TGFrameElement *el;
            TIter next(fList);
            while ((el = (TGFrameElement *) next()))
               ((TGMenuTitle*)el->fFrame)->SetState(kFALSE);

            fStick   = kTRUE;
            fCurrent = target;
            target->SetState(kTRUE);

            gVirtualX->GrabPointer(fId, kButtonPressMask | kButtonReleaseMask |
                                   kPointerMotionMask, kNone, fDefaultCursor);
         }
      }
   }

   if (event->fType == kButtonRelease) {
      if (fStick) {
         fStick = kFALSE;
         return kTRUE;
      }

      TGFrameElement *el;
      TIter next(fList);
      while ((el = (TGFrameElement *) next()))
         ((TGMenuTitle*)el->fFrame)->SetState(kFALSE);

      gVirtualX->GrabPointer(0, 0, 0, 0, kFALSE);  // ungrab pointer

      if (fCurrent != 0) {
         target   = fCurrent; // tricky, because WaitFor
         fCurrent = 0;
         if (!fKeyNavigate)
            target->DoSendMessage();
      }
      fKeyNavigate = kFALSE;
   }

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TGMenuBar::HandleKey(Event_t *event)
{
   // Handle keyboard events in a menu bar.

   TGMenuTitle *target = 0;
   TGFrameElement *el;
   void *dummy;
   Int_t    ax, ay;
   Window_t wdummy;
   TIter next(fList);

   if (event->fType == kGKeyPress) {
      UInt_t keysym;
      char tmp[2];

      gVirtualX->LookupString(event, tmp, sizeof(tmp), keysym);

      if (event->fState & kKeyMod1Mask) {
         while ((el = (TGFrameElement *) next())) {
            target = (TGMenuTitle *) el->fFrame;
            if ((Int_t)event->fCode == target->GetHotKeyCode()) {
               RequestFocus();
               fKeyNavigate = kTRUE;
               break;
            }
         }
         if (el == 0) target = 0;
      } else {
         fKeyNavigate = kTRUE;

         if (fCurrent) {
            TGFrameElement *cur  = 0;
            TGPopupMenu    *menu = 0;
            next.Reset();
            el = 0;
            while ((el = (TGFrameElement *) next())) {
               if (el->fFrame == fCurrent) {
                  cur = el;
                  menu = ((TGMenuTitle*)el->fFrame)->GetMenu();
                  break;
               }
            }

            if (!menu || !menu->fPoppedUp) return kFALSE;

            TGMenuEntry *ce = 0;

            TGPopupMenu* currentMenu = fCurrent->GetMenu();
            TGMenuEntry* currentEntry = currentMenu->GetCurrent();
            while ( currentEntry ) {
               if ( currentEntry->GetType() == kMenuPopup )
                  currentMenu = currentEntry->GetPopup();
               if ( currentEntry != currentMenu->GetCurrent() )
                  currentEntry = currentMenu->GetCurrent();
               else
                  currentEntry = 0;
            }

            TIter next2(currentMenu->GetListOfEntries());

            while ((ce = (TGMenuEntry*)next2())) {
               UInt_t hot = 0;
               if (ce->GetLabel()) hot = ce->GetLabel()->GetHotChar();
               if (!hot || (hot != keysym)) continue;

               currentMenu->Activate(ce);
               if (ce->GetType() != kMenuPopup) {
                  gVirtualX->GrabPointer(0, 0, 0, 0, kFALSE);
                  fCurrent->SetState(kFALSE);
                  currentMenu->fStick = kFALSE;
                  Event_t ev;
                  ev.fType = kButtonRelease;
                  ev.fWindow = currentMenu->GetId();
                  fCurrent = 0;
                  return currentMenu->HandleButton(&ev);
               }
               else {
                  gVirtualX->TranslateCoordinates(currentMenu->fId,
                                 (ce->fPopup->GetParent())->GetId(),
                                  ce->fEx+currentMenu->fMenuWidth, ce->fEy,
                                  ax, ay, wdummy);
                  ce->fPopup->PlaceMenu(ax-5, ay-1, kFALSE, kFALSE);
               }
            }

            ce = menu->GetCurrent();
            TGPopupMenu *submenu = 0;

            while (ce && (ce->GetType() == kMenuPopup)) {
               submenu = ce->GetPopup();
               if (!submenu->fPoppedUp) break;
               ce =  submenu->GetCurrent();
               menu = submenu;
            }
            switch ((EKeySym)keysym) {
               case kKey_Left:
                  if ((submenu) && (submenu->fPoppedUp)) {
                     submenu->EndMenu(dummy);
                     break;
                  }
                  el = (TGFrameElement*)fList->Before(cur);
                  if (!el) el = (TGFrameElement*)fList->Last();
                  break;
               case kKey_Right:
                  if (submenu) {
                     if (submenu->fPoppedUp) {
                        if (!submenu->GetCurrent()) {
                           ce = (TGMenuEntry*)submenu->GetListOfEntries()->First();
                        } else {
                           submenu->EndMenu(dummy);
                        }
                     }
                     else {
                        gVirtualX->TranslateCoordinates(menu->fId,
                                       (submenu->GetParent())->GetId(),
                                       ce->fEx+menu->fMenuWidth, ce->fEy,
                                       ax, ay, wdummy);

                        submenu->PlaceMenu(ax-5, ay-1, kFALSE, kFALSE);
                     }
                     break;
                  }
                  el = (TGFrameElement*)fList->After(cur);
                  if (!el) el = (TGFrameElement*)fList->First();
                  break;
               case kKey_Up:
                  if (ce) ce = (TGMenuEntry*)menu->GetListOfEntries()->Before(ce);
                  while (ce && ((ce->GetType() == kMenuSeparator) ||
                         (ce->GetType() == kMenuLabel) ||
                         !(ce->GetStatus() & kMenuEnableMask))) {
                     ce = (TGMenuEntry*)menu->GetListOfEntries()->Before(ce);
                  }
                  if (!ce) ce = (TGMenuEntry*)menu->GetListOfEntries()->Last();
                  break;
               case kKey_Down:
                  if (ce) ce = (TGMenuEntry*)menu->GetListOfEntries()->After(ce);
                  while (ce && ((ce->GetType() == kMenuSeparator) ||
                         (ce->GetType() == kMenuLabel) ||
                         !(ce->GetStatus() & kMenuEnableMask))) {
                     ce = (TGMenuEntry*)menu->GetListOfEntries()->After(ce);
                  }
                  if (!ce) ce = (TGMenuEntry*)menu->GetListOfEntries()->First();
                  break;
               case kKey_Enter:
               case kKey_Return: {
                  gVirtualX->GrabPointer(0, 0, 0, 0, kFALSE);
                  fCurrent->SetState(kFALSE);
                  menu->fStick = kFALSE;
                  Event_t ev;
                  ev.fType = kButtonRelease;
                  ev.fWindow = menu->GetId();
                  fCurrent = 0;
                  return menu->HandleButton(&ev);
               }
               case kKey_Escape:
                  gVirtualX->GrabPointer(0, 0, 0, 0, kFALSE);
                  fCurrent->SetState(kFALSE);
                  fStick = kFALSE;
                  fCurrent = 0;
                  return menu->EndMenu(dummy);
               default:
                  break;
            }
            if (ce) menu->Activate(ce);

            el = el ? el : cur;
            if (el) target = (TGMenuTitle*)el->fFrame;
         } else {
            return kFALSE;
         }
      }

      if (target != 0) {
         fStick = kTRUE;

         if (target != fCurrent) {
            // deactivate all others
            next.Reset();
            while ((el = (TGFrameElement *) next()))
               ((TGMenuTitle*)el->fFrame)->SetState(kFALSE);

            fCurrent = target;
            target->SetState(kTRUE);
            fStick   = kTRUE;

            gVirtualX->GrabPointer(fId, kButtonPressMask | kButtonReleaseMask |
                                   kPointerMotionMask, kNone, fDefaultCursor);

            TGMenuEntry *ptr;
            TIter nexte(target->GetMenu()->GetListOfEntries());

            while ((ptr = (TGMenuEntry *) nexte())) {
               if ((ptr->GetStatus() & kMenuEnableMask) &&
                  !(ptr->GetStatus() & kMenuHideMask) &&
                   (ptr->GetType() != kMenuSeparator) &&
                   (ptr->GetType() != kMenuLabel)) break;
            }
            if (ptr)
               target->GetMenu()->Activate(ptr);

            return kTRUE;
         }
      } else {
         return kFALSE;
      }
   }

   if (event->fType == kKeyRelease) {
      if (fStick) {
         fStick = kFALSE;
         return kTRUE;
      }
      gVirtualX->GrabPointer(0, 0, 0, 0, kFALSE);  // ungrab pointer

      next.Reset();
      while ((el = (TGFrameElement *) next()))
         ((TGMenuTitle*)el->fFrame)->SetState(kFALSE);

      if (fCurrent != 0) {
         target   = fCurrent; // tricky, because WaitFor
         fCurrent = 0;
         target->DoSendMessage();
      }
   }

   return kTRUE;
}


//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TGPopupMenu member functions.                                        //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

//______________________________________________________________________________
TGPopupMenu::TGPopupMenu(const TGWindow *p, UInt_t w, UInt_t h, UInt_t options)
    : TGFrame(p, w, h, options | kOwnBackground)
{
   // Create a popup menu.

   fNormGC        = GetDefaultGC()();
   fSelGC         = GetDefaultSelectedGC()();
   fSelbackGC     = GetDefaultSelectedBackgroundGC()();
   fFontStruct    = GetDefaultFontStruct();
   fHifontStruct  = GetHilightFontStruct();
   fDefaultCursor = fClient->GetResourcePool()->GetGrabCursor();

   // We need to change the default context to actually use the
   // Menu Fonts.  [Are we actually changing the global settings?]
   GCValues_t    gcval;
   gcval.fMask = kGCFont;
   gcval.fFont = gVirtualX->GetFontHandle(fFontStruct);
   gVirtualX->ChangeGC(fNormGC, &gcval);
   gVirtualX->ChangeGC(fSelGC, &gcval);

   fDelay     = 0;
   fEntryList = new TList;

   // in case any of these magic values is changes, check also Reposition()
   fBorderWidth = 3;
   fMenuHeight  = 6;
   fMenuWidth   = 8;
   fXl          = 16;
   fMsgWindow   = p;
   fStick       = kTRUE;
   fCurrent     = 0;
   fHasGrab     = kFALSE;
   fPoppedUp    = kFALSE;
   fMenuBar     = 0;
   fSplitButton = 0;
   fEntrySep    = 3;

   SetWindowAttributes_t wattr;
   wattr.fMask             = kWAOverrideRedirect | kWASaveUnder;
   wattr.fOverrideRedirect = kTRUE;
   wattr.fSaveUnder        = kTRUE;

   gVirtualX->ChangeWindowAttributes(fId, &wattr);

   AddInput(kPointerMotionMask | kEnterWindowMask | kLeaveWindowMask);
}

//______________________________________________________________________________
TGPopupMenu::~TGPopupMenu()
{
   // Delete a popup menu.

   if (fEntryList) fEntryList->Delete();
   delete fEntryList;
   delete fDelay;
}

//______________________________________________________________________________
void TGPopupMenu::AddEntry(TGHotString *s, Int_t id, void *ud,
                           const TGPicture *p, TGMenuEntry *before)
{
   // Add a menu entry. The hotstring is adopted by the menu (actually by
   // the TGMenuEntry) and deleted when possible. A possible picture is
   // borrowed from the picture pool and therefore not adopted.
   // If before is not 0, the entry will be added before it.

   TGMenuEntry *nw = new TGMenuEntry;
   Ssiz_t tab = s->Index('\t');
   if (tab > 0) {
      TString ts(s->Data());
      TString shortcut = ts(tab+1, s->Length());
      nw->fShortcut = new TGString(shortcut.Data());
      nw->fLabel = new TGHotString(*s);
      nw->fLabel->Remove(tab);
   }
   else {
      nw->fLabel = s;
   }
   nw->fPic      = p;
   nw->fType     = kMenuEntry;
   nw->fEntryId  = id;
   nw->fUserData = ud;
   nw->fPopup    = 0;
   nw->fStatus   = kMenuEnableMask;
   nw->fEx       = 2;
   nw->fEy       = fMenuHeight-2;

   if (before)
      fEntryList->AddBefore(before, nw);
   else
      fEntryList->Add(nw);

   UInt_t tw, ph = 0, pw = 0;
   tw = gVirtualX->TextWidth(fHifontStruct, s->GetString(), s->GetLength());
   if (p) {
      ph = p->GetHeight();
      pw = p->GetWidth();
      if (pw+12 > fXl) { fMenuWidth += pw+12-fXl; fXl = pw+12; }
   }
   if (nw->fShortcut) {
      tw += 10;
      if (s) delete s;
   }

   Int_t max_ascent, max_descent;
   nw->fEw = tw + pw /*+8*/+18+12;
   fMenuWidth = TMath::Max(fMenuWidth, nw->fEw);
   gVirtualX->GetFontProperties(fHifontStruct, max_ascent, max_descent);
   nw->fEh = max_ascent + max_descent + fEntrySep;
   if (nw->fEh < ph+fEntrySep) nw->fEh = ph+fEntrySep; 
   fMenuHeight += nw->fEh;

   if (before)
      Reposition();
   else
      Resize(fMenuWidth, fMenuHeight);
}

//______________________________________________________________________________
void TGPopupMenu::AddEntry(const char *s, Int_t id, void *ud,
                           const TGPicture *p, TGMenuEntry *before)
{
   // Add a menu entry. The string s in not adopted.
   // If before is not 0, the entry will be added before it.

   AddEntry(new TGHotString(s), id, ud, p, before);
}

//______________________________________________________________________________
void TGPopupMenu::AddSeparator(TGMenuEntry *before)
{
   // Add a menu separator to the menu.
   // If before is not 0, the entry will be added before it.

   TGMenuEntry *nw = new TGMenuEntry;

   nw->fLabel    = 0;
   nw->fPic      = 0;
   nw->fType     = kMenuSeparator;
   nw->fEntryId  = -1;
   nw->fUserData = 0;
   nw->fPopup    = 0;
   nw->fStatus   = kMenuEnableMask;
   nw->fEx       = 2;
   nw->fEy       = fMenuHeight-2;

   if (before)
      fEntryList->AddBefore(before, nw);
   else
      fEntryList->Add(nw);

   nw->fEw = 0;
   nw->fEh = 4;
   fMenuHeight += nw->fEh;

   if (before)
      Reposition();
   else
      Resize(fMenuWidth, fMenuHeight);
}

//______________________________________________________________________________
void TGPopupMenu::AddLabel(TGHotString *s, const TGPicture *p,
                           TGMenuEntry *before)
{
   // Add a menu label to the menu. The hotstring is adopted by the menu
   // (actually by the TGMenuEntry) and deleted when possible. A possible
   // picture is borrowed from the picture pool and therefore not adopted.
   // If before is not 0, the entry will be added before it.

   TGMenuEntry *nw = new TGMenuEntry;

   nw->fLabel    = s;
   nw->fPic      = p;
   nw->fType     = kMenuLabel;
   nw->fEntryId  = -1;
   nw->fUserData = 0;
   nw->fPopup    = 0;
   nw->fStatus   = kMenuEnableMask | kMenuDefaultMask;
   nw->fEx       = 2;
   nw->fEy       = fMenuHeight-2;

   if (before)
      fEntryList->AddBefore(before, nw);
   else
      fEntryList->Add(nw);

   UInt_t tw, ph = 0, pw = 0;
   tw = gVirtualX->TextWidth(fHifontStruct, s->GetString(), s->GetLength());
   if (p) {
      ph = p->GetHeight();
      pw = p->GetWidth();
      if (pw+12 > fXl) { fMenuWidth += pw+12-fXl; fXl = pw+12; }
   }

   Int_t max_ascent, max_descent;
   nw->fEw = tw + pw /*+8*/+18+12;
   fMenuWidth = TMath::Max(fMenuWidth, nw->fEw);
   gVirtualX->GetFontProperties(fHifontStruct, max_ascent, max_descent);
   nw->fEh = max_ascent + max_descent + fEntrySep;
   if (nw->fEh < ph+fEntrySep) nw->fEh = ph+fEntrySep; 
   fMenuHeight += nw->fEh;

   if (before)
      Reposition();
   else
      Resize(fMenuWidth, fMenuHeight);
}

//______________________________________________________________________________
void TGPopupMenu::AddLabel(const char *s, const TGPicture *p,
                           TGMenuEntry *before)
{
   // Add a menu label to the menu. The string s in not adopted.
   // If before is not 0, the entry will be added before it.

   AddLabel(new TGHotString(s), p, before);
}

//______________________________________________________________________________
void TGPopupMenu::AddPopup(TGHotString *s, TGPopupMenu *popup,
                           TGMenuEntry *before, const TGPicture *p)
{
   // Add a (cascading) popup menu to a popup menu. The hotstring is adopted
   // by the menu (actually by the TGMenuEntry) and deleted when possible.
   // If before is not 0, the entry will be added before it.

   TGMenuEntry *nw = new TGMenuEntry;

   nw->fLabel    = s;
   nw->fPic      = p;
   nw->fType     = kMenuPopup;
   nw->fEntryId  = -2;
   nw->fUserData = 0;
   nw->fPopup    = popup;
   nw->fStatus   = kMenuEnableMask;
   nw->fEx       = 2;
   nw->fEy       = fMenuHeight-2;

   if (before)
      fEntryList->AddBefore(before, nw);
   else
      fEntryList->Add(nw);

   UInt_t tw = gVirtualX->TextWidth(fHifontStruct, s->GetString(),
                                    s->GetLength());

   UInt_t ph = 0, pw = 8;
   if (p) {
      ph = p->GetHeight();
      pw = p->GetWidth();
      if (pw+12 > fXl) { fMenuWidth += pw+12-fXl; fXl = pw+12; }
   }
   Int_t max_ascent, max_descent;
   nw->fEw = tw + pw+18+12;
   fMenuWidth = TMath::Max(fMenuWidth, nw->fEw);
   gVirtualX->GetFontProperties(fHifontStruct, max_ascent, max_descent);
   nw->fEh = max_ascent + max_descent + fEntrySep;
   if (nw->fEh < ph+fEntrySep) nw->fEh = ph+fEntrySep; 
   fMenuHeight += nw->fEh;

   if (before)
      Reposition();
   else
      Resize(fMenuWidth, fMenuHeight);
}

//______________________________________________________________________________
void TGPopupMenu::AddPopup(const char *s, TGPopupMenu *popup,
                           TGMenuEntry *before, const TGPicture *p)
{
   // Add a (cascading) popup menu to a popup menu. The string s is not
   // adopted. If before is not 0, the entry will be added before it.

   AddPopup(new TGHotString(s), popup, before, p);
}

//______________________________________________________________________________
void TGPopupMenu::Reposition()
{
   // Reposition entries in popup menu. Called after menu item has been
   // hidden or removed or inserted at a specified location.

   // in case any of these magic values is changes, check also the ctor.
   fMenuHeight = 6;
   fMenuWidth  = 8;
   fXl         = 16;

   TGMenuEntry *ptr;
   TIter next(fEntryList);

   while ((ptr = (TGMenuEntry *) next())) {

      if (ptr->fStatus & kMenuHideMask) continue;

      if (ptr->fPic) {
         UInt_t pw = ptr->fPic->GetWidth();
         if (pw+12 > fXl) { fMenuWidth += pw+12-fXl; fXl = pw+12; }
      }
      ptr->fEx     = 2;
      ptr->fEy     = fMenuHeight-2;
      fMenuWidth   = TMath::Max(fMenuWidth, ptr->fEw);
      fMenuHeight += ptr->fEh;
   }
   Resize(fMenuWidth, fMenuHeight);
}

//______________________________________________________________________________
void TGPopupMenu::PlaceMenu(Int_t x, Int_t y, Bool_t stick_mode, Bool_t grab_pointer)
{
   // Popup a popup menu. If stick mode is true keep the menu up. If
   // grab_pointer is true the pointer will be grabbed, which means that
   // all pointer events will go to the popup menu, independent of in
   // which window the pointer is.

   void *ud;
   EndMenu(ud);

   Int_t  rx, ry;
   UInt_t rw, rh;

   fStick = stick_mode;
   fCurrent = 0;

   // Parent is root window for a popup menu
   gVirtualX->GetWindowSize(fParent->GetId(), rx, ry, rw, rh);

   if (x < 0) x = 0;
   if (x + fMenuWidth > rw) x = rw - fMenuWidth;
   if (y < 0) y = 0;
   if (y + fMenuHeight > rh) y = rh - fMenuHeight;

   Move(x, y);
   MapRaised();

   if (grab_pointer) {
      gVirtualX->GrabPointer(fId, kButtonPressMask | kButtonReleaseMask |
                             kPointerMotionMask, kNone, fDefaultCursor);
      fHasGrab = kTRUE;
   } else {
      fHasGrab = kFALSE;
   }

   fPoppedUp = kTRUE;
   PoppedUp();
   if (fMenuBar) fMenuBar->BindKeys(kTRUE);

   fClient->RegisterPopup(this);
}

//______________________________________________________________________________
Int_t TGPopupMenu::EndMenu(void *&userData)
{
   // Close menu and return ID of selected menu item.
   // In case of cascading menus, recursively close all menus.

   Int_t id;

   if (fDelay) fDelay->Remove();

   // destroy any cascaded childs and get any ID

   if (fCurrent != 0) {

      // deactivate the entry
      fCurrent->fStatus &= ~kMenuActiveMask;

      if ((fCurrent->fType == kMenuPopup) && fCurrent->fPopup) {
         id = fCurrent->fPopup->EndMenu(userData);
      } else {
         // return the ID if the entry is enabled, otherwise -1
         if (fCurrent->fStatus & kMenuEnableMask) {
            id       = fCurrent->fEntryId;
            userData = fCurrent->fUserData;
         } else {
            id       = -1;
            userData = 0;
         }
      }

   } else {
      // if no entry selected...
      id       = -1;
      userData = 0;
   }

   // then unmap itself
   UnmapWindow();

   gClient->UnregisterPopup(this);
   if (fMenuBar) fMenuBar->BindKeys(kFALSE);

   if (fPoppedUp) {
      fPoppedUp = kFALSE;
      PoppedDown();
   }

   return id;
}

//______________________________________________________________________________
Bool_t TGPopupMenu::HandleButton(Event_t *event)
{
   // Handle button event in the popup menu.

   int   id;
   void *ud;

   if (event->fType == kButtonRelease) {
      if (fStick) {
         fStick = kFALSE;
         return kTRUE;
      }
      //if (fCurrent != 0)
      //   if (fCurrent->fType == kMenuPopup) return kTRUE;
      id = EndMenu(ud);
      if (fHasGrab) gVirtualX->GrabPointer(0, 0, 0, 0, kFALSE);  // ungrab
      if (fCurrent != 0) {
         fCurrent->fStatus &= ~kMenuActiveMask;
         if (fCurrent->fStatus & kMenuEnableMask) {
            SendMessage(fMsgWindow, MK_MSG(kC_COMMAND, kCM_MENU), id,
                        (Long_t)ud);
            Activated(id);
         }
      }
   }
   return kTRUE;
}

//______________________________________________________________________________
Bool_t TGPopupMenu::HandleCrossing(Event_t *event)
{
   // Handle pointer crossing event in popup menu.

   if (event->fType == kEnterNotify) {

      TGMenuEntry *ptr;
      TIter next(fEntryList);

      while ((ptr = (TGMenuEntry *) next())) {
         if (ptr->fStatus & kMenuHideMask) continue;

         if ((event->fX >= ptr->fEx) && (event->fX <= ptr->fEx+(Int_t)fMenuWidth-10) &&
             (event->fY >= ptr->fEy) && (event->fY <= ptr->fEy+(Int_t)ptr->fEh))
            break;
      }
      Activate(ptr);
   } else {
      Activate((TGMenuEntry*)0);
   }
   if (fMenuBar) fMenuBar->fKeyNavigate = kFALSE;
   if (fSplitButton) fSplitButton->fKeyNavigate = kFALSE;

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TGPopupMenu::HandleMotion(Event_t *event)
{
   // Handle pointer motion event in popup menu.

   TGFrame::HandleMotion(event);

   TGMenuEntry *ptr;
   TIter next(fEntryList);

   fStick = kFALSE;   // be careful with this, use some threshold
   while ((ptr = (TGMenuEntry *) next())) {
      if (ptr->fStatus & kMenuHideMask) continue;

      if ((event->fX >= ptr->fEx) && (event->fX <= ptr->fEx+(Int_t)fMenuWidth-4) &&  //fMenuWidth-10??
          (event->fY >= ptr->fEy) && (event->fY <= ptr->fEy+(Int_t)ptr->fEh))
         break;
   }
   Activate(ptr);

   return kTRUE;
}

//______________________________________________________________________________
void TGPopupMenu::Activate(TGMenuEntry *entry)
{
   // Activate a menu entry in a popup menu.

   if (entry == fCurrent) return;

   //-- Deactivate the current entry

   if (fCurrent != 0) {
      void *ud;
      if (entry == 0 && fCurrent->fType == kMenuPopup) return;
      if ((fCurrent->fType == kMenuPopup) && fCurrent->fPopup) 
         fCurrent->fPopup->EndMenu(ud);
      fCurrent->fStatus &= ~kMenuActiveMask;
      DrawEntry(fCurrent);
   }

   if (fDelay) fDelay->Remove();

   //-- Activate the new one

   if (entry) {
      entry->fStatus |= kMenuActiveMask;
      DrawEntry(entry);
      if (entry->fType == kMenuPopup) {
         if (!fDelay) fDelay = new TPopupDelayTimer(this, 350);
         fDelay->Reset();
         gSystem->AddTimer(fDelay);
         // after delay expires it will popup the cascading popup menu
         // iff it is still the current entry
      } else if (entry->fType == kMenuEntry) {
         // test...
         SendMessage(fMsgWindow, MK_MSG(kC_COMMAND, kCM_MENUSELECT),
                     entry->fEntryId, (Long_t)entry->fUserData);
         Highlighted(entry->fEntryId);
      }
   }
   fCurrent = entry;
}

//______________________________________________________________________________
Bool_t TGPopupMenu::HandleTimer(TTimer *)
{
   // If TPopupDelayTimer times out popup cascading popup menu (if it is
   // still the current entry).

   if (fCurrent != 0) {
      if ((fCurrent->fType == kMenuPopup) && fCurrent->fPopup) {
         Int_t    ax, ay;
         Window_t wdummy;

         gVirtualX->TranslateCoordinates(fId,
                                       (fCurrent->fPopup->GetParent())->GetId(),
                                       fCurrent->fEx+fMenuWidth, fCurrent->fEy,
                                       ax, ay, wdummy);

         fCurrent->fPopup->PlaceMenu(ax-5, ay-1, kFALSE, kFALSE);
      }
   }
   fDelay->Remove();

   return kTRUE;
}

//______________________________________________________________________________
void TGPopupMenu::DoRedraw()
{
   // Draw popup menu.

   TGFrame::DoRedraw();

   TGMenuEntry *ptr;
   TIter next(fEntryList);

   while ((ptr = (TGMenuEntry *) next()))
      DrawEntry(ptr);
}

//______________________________________________________________________________
void TGPopupMenu::DrawEntry(TGMenuEntry *entry)
{
   // Draw popup menu entry.

   FontStruct_t  font;
   GCValues_t    gcval;

   if (entry->fStatus & kMenuHideMask)
      return;

   if (entry->fStatus & kMenuDefaultMask) {
      font = fHifontStruct;
      gcval.fMask = kGCFont;
      gcval.fFont = gVirtualX->GetFontHandle(font);
      gVirtualX->ChangeGC(fNormGC, &gcval);
      gVirtualX->ChangeGC(fSelGC, &gcval);
   } else {
      font = fFontStruct;
   }

   UInt_t tw = 0;
   int max_ascent, max_descent;
   gVirtualX->GetFontProperties(font, max_ascent, max_descent);
   int tx = entry->fEx + fXl;
   // center text
   int offset = (entry->fEh - (max_ascent + max_descent)) / 2;
   int ty = entry->fEy + max_ascent + offset - 1;
   if (entry->fShortcut)
      tw = 7 + gVirtualX->TextWidth(fFontStruct, entry->fShortcut->Data(), entry->fShortcut->Length());

   switch (entry->fType) {
      case kMenuPopup:
      case kMenuLabel:
      case kMenuEntry:
         if ((entry->fStatus & kMenuActiveMask) && entry->fType != kMenuLabel) {
            gVirtualX->FillRectangle(fId, fSelbackGC, entry->fEx+1, entry->fEy-1,
                                     fMenuWidth-6, entry->fEh);
            if (entry->fType == kMenuPopup)
               DrawTrianglePattern(fSelGC, fMenuWidth-10, entry->fEy+fEntrySep, fMenuWidth-6, entry->fEy+11);
            if (entry->fStatus & kMenuCheckedMask)
               DrawCheckMark(fSelGC, 6, entry->fEy+fEntrySep, 14, entry->fEy+11);
            if (entry->fStatus & kMenuRadioMask)
               DrawRCheckMark(fSelGC, 6, entry->fEy+fEntrySep, 14, entry->fEy+11);
            if (entry->fPic != 0)
               entry->fPic->Draw(fId, fSelGC, 8, entry->fEy+1);
            entry->fLabel->Draw(fId,
                           (entry->fStatus & kMenuEnableMask) ? fSelGC : GetShadowGC()(),
                           tx, ty);
            if (entry->fShortcut)
               entry->fShortcut->Draw(fId, (entry->fStatus & kMenuEnableMask) ? fSelGC : GetShadowGC()(),
                                      fMenuWidth - tw, ty);
         } else {
            gVirtualX->FillRectangle(fId, GetBckgndGC()(), entry->fEx+1, entry->fEy-1,
                                     fMenuWidth-6, entry->fEh);
            if (entry->fType == kMenuPopup)
               DrawTrianglePattern(fNormGC, fMenuWidth-10, entry->fEy+fEntrySep, fMenuWidth-6, entry->fEy+11);
            if (entry->fStatus & kMenuCheckedMask)
               DrawCheckMark(fNormGC, 6, entry->fEy+fEntrySep, 14, entry->fEy+11);
            if (entry->fStatus & kMenuRadioMask)
               DrawRCheckMark(fNormGC, 6, entry->fEy+fEntrySep, 14, entry->fEy+11);
            if (entry->fPic != 0)
               entry->fPic->Draw(fId, fNormGC, 8, entry->fEy+1);
            if (entry->fStatus & kMenuEnableMask) {
               entry->fLabel->Draw(fId, fNormGC, tx, ty);
               if (entry->fShortcut)
                  entry->fShortcut->Draw(fId, fNormGC, fMenuWidth - tw, ty);
            } else {
               entry->fLabel->Draw(fId, GetHilightGC()(), tx+1, ty+1);
               entry->fLabel->Draw(fId, GetShadowGC()(), tx, ty);
               if (entry->fShortcut) {
                  entry->fShortcut->Draw(fId, GetHilightGC()(), fMenuWidth - tw+1, ty+1);
                  entry->fShortcut->Draw(fId, GetShadowGC()(), fMenuWidth - tw, ty);
               }
            }
         }
         break;

      case kMenuSeparator:
         gVirtualX->DrawLine(fId, GetShadowGC()(),  2, entry->fEy, fMenuWidth-fEntrySep, entry->fEy);
         gVirtualX->DrawLine(fId, GetHilightGC()(), 2, entry->fEy+1, fMenuWidth-fEntrySep, entry->fEy+1);
         break;
   }

   // restore font
   if (entry->fStatus & kMenuDefaultMask) {
      gcval.fFont = gVirtualX->GetFontHandle(fFontStruct);
      gVirtualX->ChangeGC(fNormGC, &gcval);
      gVirtualX->ChangeGC(fSelGC, &gcval);
   }
}

//______________________________________________________________________________
void TGPopupMenu::DrawBorder()
{
   // Draw border round popup menu.

   gVirtualX->DrawLine(fId, GetBckgndGC()(), 0, 0, fMenuWidth-2, 0);
   gVirtualX->DrawLine(fId, GetBckgndGC()(), 0, 0, 0, fMenuHeight-2);
   gVirtualX->DrawLine(fId, GetHilightGC()(), 1, 1, fMenuWidth-fEntrySep, 1);
   gVirtualX->DrawLine(fId, GetHilightGC()(), 1, 1, 1, fMenuHeight-fEntrySep);

   gVirtualX->DrawLine(fId, GetShadowGC()(),  1, fMenuHeight-2, fMenuWidth-2, fMenuHeight-2);
   gVirtualX->DrawLine(fId, GetShadowGC()(),  fMenuWidth-2, fMenuHeight-2, fMenuWidth-2, 1);
   gVirtualX->DrawLine(fId, GetBlackGC()(), 0, fMenuHeight-1, fMenuWidth-1, fMenuHeight-1);
   gVirtualX->DrawLine(fId, GetBlackGC()(), fMenuWidth-1, fMenuHeight-1, fMenuWidth-1, 0);
}

//______________________________________________________________________________
void TGPopupMenu::DrawTrianglePattern(GContext_t gc, Int_t l, Int_t t,
                                      Int_t r, Int_t b)
{
   // Draw triangle pattern. Used for menu entries that are of type
   // kMenuPopup (i.e. cascading menus).

   Point_t  points[3];

   int m = (t + b) >> 1;

   points[0].fX = l;
   points[0].fY = t;
   points[1].fX = l;
   points[1].fY = b;
   points[2].fX = r;
   points[2].fY = m;

   gVirtualX->FillPolygon(fId, gc, points, 3);
}

//______________________________________________________________________________
void TGPopupMenu::DrawCheckMark(GContext_t gc, Int_t l, Int_t t, Int_t, Int_t b)
{
   // Draw check mark. Used for checked button type menu entries.

   Segment_t seg[6];

   t = (t + b - 8) >> 1; ++t;

   seg[0].fX1 = 1+l; seg[0].fY1 = 3+t; seg[0].fX2 = 3+l; seg[0].fY2 = 5+t;
   seg[1].fX1 = 1+l; seg[1].fY1 = 4+t; seg[1].fX2 = 3+l; seg[1].fY2 = 6+t;
   seg[2].fX1 = 1+l; seg[2].fY1 = 5+t; seg[2].fX2 = 3+l; seg[2].fY2 = 7+t;
   seg[3].fX1 = 3+l; seg[3].fY1 = 5+t; seg[3].fX2 = 7+l; seg[3].fY2 = 1+t;
   seg[4].fX1 = 3+l; seg[4].fY1 = 6+t; seg[4].fX2 = 7+l; seg[4].fY2 = 2+t;
   seg[5].fX1 = 3+l; seg[5].fY1 = 7+t; seg[5].fX2 = 7+l; seg[5].fY2 = 3+t;

   gVirtualX->DrawSegments(fId, gc, seg, 6);
}

//______________________________________________________________________________
void TGPopupMenu::DrawRCheckMark(GContext_t gc, Int_t l, Int_t t, Int_t r, Int_t b)
{
   // Draw radio check mark. Used for radio button type menu entries.

   Segment_t seg[5];

   t = (t + b - 5) >> 1; ++t;
   l = (l + r - 5) >> 1; ++l;

   seg[0].fX1 = 1+l; seg[0].fY1 = 0+t; seg[0].fX2 = 3+l; seg[0].fY2 = 0+t;
   seg[1].fX1 = 0+l; seg[1].fY1 = 1+t; seg[1].fX2 = 4+l; seg[1].fY2 = 1+t;
   seg[2].fX1 = 0+l; seg[2].fY1 = 2+t; seg[2].fX2 = 4+l; seg[2].fY2 = 2+t;
   seg[3].fX1 = 0+l; seg[3].fY1 = 3+t; seg[3].fX2 = 4+l; seg[3].fY2 = 3+t;
   seg[4].fX1 = 1+l; seg[4].fY1 = 4+t; seg[4].fX2 = 3+l; seg[4].fY2 = 4+t;

   gVirtualX->DrawSegments(fId, gc, seg, 5);
}

//______________________________________________________________________________
void TGPopupMenu::DefaultEntry(Int_t id)
{
   // Set default entry (default entries are drawn with bold text).

   TGMenuEntry *ptr;
   TIter next(fEntryList);

   while ((ptr = (TGMenuEntry *) next())) {
      if (ptr->fEntryId == id)
         ptr->fStatus |= kMenuDefaultMask;
      else
         ptr->fStatus &= ~kMenuDefaultMask;
   }
}

//______________________________________________________________________________
void TGPopupMenu::EnableEntry(Int_t id)
{
   // Enable entry. By default entries are enabled.

   TGMenuEntry *ptr;
   TIter next(fEntryList);

   while ((ptr = (TGMenuEntry *) next()))
      if (ptr->fEntryId == id) {
         ptr->fStatus |= kMenuEnableMask;
         if (ptr->fStatus & kMenuHideMask) {
            ptr->fStatus &= ~kMenuHideMask;
            Reposition();
         }
         break;
      }
}

//______________________________________________________________________________
void TGPopupMenu::DisableEntry(Int_t id)
{
   // Disable entry (disabled entries appear in a sunken relieve).

   TGMenuEntry *ptr;
   TIter next(fEntryList);

   while ((ptr = (TGMenuEntry *) next()))
      if (ptr->fEntryId == id) { ptr->fStatus &= ~kMenuEnableMask; break; }
}

//______________________________________________________________________________
Bool_t TGPopupMenu::IsEntryEnabled(Int_t id)
{
   // Return true if menu entry is enabled.

   TGMenuEntry *ptr;
   TIter next(fEntryList);

   while ((ptr = (TGMenuEntry *) next()))
      if (ptr->fEntryId == id)
         return (ptr->fStatus & kMenuEnableMask) ? kTRUE : kFALSE;
   return kFALSE;
}

//______________________________________________________________________________
void TGPopupMenu::HideEntry(Int_t id)
{
   // Hide entry (hidden entries are not shown in the menu).
   // To enable a hidden entry call EnableEntry().

   TGMenuEntry *ptr;
   TIter next(fEntryList);

   while ((ptr = (TGMenuEntry *) next()))
      if (ptr->fEntryId == id) {
         ptr->fStatus |=  kMenuHideMask;
         ptr->fStatus &= ~kMenuEnableMask;
         Reposition();
         break;
      }
}

//______________________________________________________________________________
Bool_t TGPopupMenu::IsEntryHidden(Int_t id)
{
   // Return true if menu entry is hidden.

   TGMenuEntry *ptr;
   TIter next(fEntryList);

   while ((ptr = (TGMenuEntry *) next()))
      if (ptr->fEntryId == id)
         return (ptr->fStatus & kMenuHideMask) ? kTRUE : kFALSE;
   return kFALSE;
}

//______________________________________________________________________________
void TGPopupMenu::CheckEntry(Int_t id)
{
   // Check a menu entry (i.e. add a check mark in front of it).

   TGMenuEntry *ptr;
   TIter next(fEntryList);

   while ((ptr = (TGMenuEntry *) next()))
      if (ptr->fEntryId == id) { ptr->fStatus |= kMenuCheckedMask; break; }
}

//______________________________________________________________________________
void TGPopupMenu::CheckEntryByData(void *user_data)
{
   // Check a menu entry (i.e. add a check mark in front of it).
   // The input argument is user data associated with entry

   TGMenuEntry *ptr;
   TIter next(fEntryList);

   while ((ptr = (TGMenuEntry *) next()))
      if (ptr->fUserData == user_data) { ptr->fStatus |= kMenuCheckedMask; break; }
}

//______________________________________________________________________________
void TGPopupMenu::UnCheckEntry(Int_t id)
{
   // Uncheck menu entry (i.e. remove check mark).

   TGMenuEntry *ptr;
   TIter next(fEntryList);

   while ((ptr = (TGMenuEntry *) next()))
      if (ptr->fEntryId == id) { ptr->fStatus &= ~kMenuCheckedMask; break; }
}

//______________________________________________________________________________
void TGPopupMenu::UnCheckEntries()
{
   // Uncheck all entries.

   TGMenuEntry *ptr;
   TIter next(fEntryList);

   while ((ptr = (TGMenuEntry *) next())) {
      ptr->fStatus &= ~kMenuCheckedMask;
   }
}

//______________________________________________________________________________
void TGPopupMenu::UnCheckEntryByData(void *user_data)
{
   // Uncheck a menu entry (i.e. remove check mark in front of it).
   // The input argument is user data associated with entry

   TGMenuEntry *ptr;
   TIter next(fEntryList);

   while ((ptr = (TGMenuEntry *) next()))
      if (ptr->fUserData == user_data) { ptr->fStatus  &= ~kMenuCheckedMask; break; }
}

//______________________________________________________________________________
Bool_t TGPopupMenu::IsEntryChecked(Int_t id)
{
   // Return true if menu item is checked.

   TGMenuEntry *ptr;
   TIter next(fEntryList);

   while ((ptr = (TGMenuEntry *) next()))
      if (ptr->fEntryId == id)
         return (ptr->fStatus & kMenuCheckedMask) ? kTRUE : kFALSE;
   return kFALSE;
}

//______________________________________________________________________________
void TGPopupMenu::RCheckEntry(Int_t id, Int_t IDfirst, Int_t IDlast)
{
   // Radio-select entry (note that they cannot be unselected,
   // the selection must be moved to another entry instead).

   TGMenuEntry *ptr;
   TIter next(fEntryList);

   while ((ptr = (TGMenuEntry *) next()))
      if (ptr->fEntryId == id)
         ptr->fStatus |= kMenuRadioMask | kMenuRadioEntryMask;
      else
         if (ptr->fEntryId >= IDfirst && ptr->fEntryId <= IDlast) {
            ptr->fStatus &= ~kMenuRadioMask;
            ptr->fStatus |=  kMenuRadioEntryMask;
         }
}

//______________________________________________________________________________
Bool_t TGPopupMenu::IsEntryRChecked(Int_t id)
{
   // Return true if menu item has radio check mark.

   TGMenuEntry *ptr;
   TIter next(fEntryList);

   while ((ptr = (TGMenuEntry *) next()))
      if (ptr->fEntryId == id)
         return (ptr->fStatus & kMenuRadioMask) ? kTRUE : kFALSE;
   return kFALSE;
}

//______________________________________________________________________________
TGMenuEntry *TGPopupMenu::GetEntry(Int_t id)
{
   // Find entry with specified id. Use the returned entry in DeleteEntry()
   // or as the "before" item in the AddXXXX() methods. Returns 0 if entry
   // is not found. To find entries that don't have an id like the separators,
   // use the GetListOfEntries() method to get the complete entry
   // list and iterate over it and check the type of each entry
   // to find the separators.

   TGMenuEntry *ptr;
   TIter next(fEntryList);

   while ((ptr = (TGMenuEntry *) next()))
      if (ptr->fEntryId == id)
         return ptr;
   return 0;
}

//______________________________________________________________________________
TGMenuEntry *TGPopupMenu::GetEntry(const char *s)
{
   // Find entry with specified name. Name must match the original
   // name without hot key symbol, like "Print" and not "&Print".
   // Use the returned entry in DeleteEntry() or as the "before" item
   // in the AddXXXX() methods. Returns 0 if entry is not found.
   // To find entries that don't have a name like the separators,
   // use the GetListOfEntries() method to get the complete entry
   // list and iterate over it and check the type of each entry
   // to find the separators.

   return (TGMenuEntry*) fEntryList->FindObject(s);
}

//______________________________________________________________________________
void TGPopupMenu::DeleteEntry(Int_t id)
{
   // Delete entry with specified id from menu.

   TGMenuEntry *ptr;
   TIter next(fEntryList);

   while ((ptr = (TGMenuEntry *) next()))
      if (ptr->fEntryId == id) {
         fEntryList->Remove(ptr);
         delete ptr;
         Reposition();
         if (fCurrent == ptr)
            fCurrent = 0;
         return;
      }
}

//______________________________________________________________________________
void TGPopupMenu::DeleteEntry(TGMenuEntry *entry)
{
   // Delete specified entry from menu.

   TGMenuEntry *ptr;
   TIter next(fEntryList);

   while ((ptr = (TGMenuEntry *) next()))
      if (ptr == entry) {
         fEntryList->Remove(ptr);
         delete ptr;
         Reposition();
         if (fCurrent == ptr)
            fCurrent = 0;
         return;
      }
}

//______________________________________________________________________________
const TGGC &TGPopupMenu::GetDefaultGC()
{
   // Return default graphics context.

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

//______________________________________________________________________________
const TGGC &TGPopupMenu::GetDefaultSelectedGC()
{
   // Return the selection graphics context in use.

   if (!fgDefaultSelectedGC)
      fgDefaultSelectedGC = gClient->GetResourcePool()->GetSelectedGC();
   return *fgDefaultSelectedGC;
}

//______________________________________________________________________________
const TGGC &TGPopupMenu::GetDefaultSelectedBackgroundGC()
{
   // Return the selection background graphics context in use.

   if (!fgDefaultSelectedBackgroundGC)
      fgDefaultSelectedBackgroundGC = gClient->GetResourcePool()->GetSelectedBckgndGC();
   return *fgDefaultSelectedBackgroundGC;
}

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

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

//______________________________________________________________________________
FontStruct_t TGPopupMenu::GetHilightFontStruct()
{
   // Return the font structure in use for highlighted menu entries.

   if (!fgHilightFont)
      fgHilightFont = gClient->GetResourcePool()->GetMenuHiliteFont();
   return fgHilightFont->GetFontStruct();
}


//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TGMenuTitle member functions.                                        //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

//______________________________________________________________________________
TGMenuTitle::TGMenuTitle(const TGWindow *p, TGHotString *s, TGPopupMenu *menu,
                         GContext_t norm, FontStruct_t font, UInt_t options)
    : TGFrame(p, 1, 1, options)
{
   // Create a menu title. This object is created by a menu bar when adding
   // a popup menu. The menu title adopts the hotstring.

   fLabel      = s;
   fMenu       = menu;
   fFontStruct = font;
   fSelGC      = GetDefaultSelectedGC()();
   fNormGC     = norm;
   fState      = kFALSE;
   fTitleId    = -1;
   fTextColor  = GetForeground();

   Int_t hotchar;
   if (s && (hotchar = s->GetHotChar()) != 0)
      fHkeycode = gVirtualX->KeysymToKeycode(hotchar);
   else
      fHkeycode = 0;

   UInt_t tw = 0;
   Int_t  max_ascent, max_descent;
   if (fLabel)
      tw = gVirtualX->TextWidth(fFontStruct, fLabel->GetString(), fLabel->GetLength());
   gVirtualX->GetFontProperties(fFontStruct, max_ascent, max_descent);

   Resize(tw + 8, max_ascent + max_descent + 7);

   if (p && p->InheritsFrom(TGMenuBar::Class())) {
      TGMenuBar *bar = (TGMenuBar*)p;
      fMenu->SetMenuBar(bar);
   }
}

//______________________________________________________________________________
void TGMenuTitle::SetState(Bool_t state)
{
   // Set state of menu title.

   fState = state;
   if (state) {
      if (fMenu != 0) {
         Int_t    ax, ay;
         Window_t wdummy;

         gVirtualX->TranslateCoordinates(fId, (fMenu->GetParent())->GetId(),
                                         0, 0, ax, ay, wdummy);

         // place the menu just under the window:
         fMenu->PlaceMenu(ax-1, ay+fHeight, kTRUE, kFALSE); //kTRUE);
      }
   } else {
      if (fMenu != 0) {
         fTitleId = fMenu->EndMenu(fTitleData);
      }
   }
   fOptions &= ~(kSunkenFrame | kRaisedFrame);
   fClient->NeedRedraw(this);
}

//______________________________________________________________________________
void TGMenuTitle::DoRedraw()
{
   // Draw a menu title.

   TGFrame::DoRedraw();

   int x, y, max_ascent, max_descent;
   x = y = 4;

   gVirtualX->GetFontProperties(fFontStruct, max_ascent, max_descent);

   if (fState) {
      gVirtualX->SetForeground(fNormGC, GetDefaultSelectedBackground());
      gVirtualX->FillRectangle(fId,fNormGC, 0, 0, fWidth, fHeight);
      gVirtualX->SetForeground(fNormGC, GetForeground());
      fLabel->Draw(fId, fSelGC, x, y + max_ascent);
   } else {
      // Use same background color than the menu bar
      Pixel_t back = GetDefaultFrameBackground();
      if (fMenu && fMenu->fMenuBar && fMenu->fMenuBar->GetBackground() != back)
         back = fMenu->fMenuBar->GetBackground();
      gVirtualX->SetForeground(fNormGC, back);
      gVirtualX->FillRectangle(fId,fNormGC, 0, 0, fWidth, fHeight);
      gVirtualX->SetForeground(fNormGC, fTextColor);
      fLabel->Draw(fId, fNormGC, x, y + max_ascent);
      if (fTextColor != GetForeground())
         gVirtualX->SetForeground(fNormGC, GetForeground());
   }
}

//______________________________________________________________________________
void TGMenuTitle::DoSendMessage()
{
   // Send final selected menu item to be processed.

   if (fMenu)
      if (fTitleId != -1) {
         SendMessage(fMenu->fMsgWindow, MK_MSG(kC_COMMAND, kCM_MENU), fTitleId,
                     (Long_t)fTitleData);
         fMenu->Activated(fTitleId);
      }
}

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

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

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

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

//______________________________________________________________________________
const TGGC &TGMenuTitle::GetDefaultSelectedGC()
{
   // Return default selection graphics context in use.

   if (!fgDefaultSelectedGC)
      fgDefaultSelectedGC = gClient->GetResourcePool()->GetSelectedGC();
   return *fgDefaultSelectedGC;
}

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

   char quote = '"';

   out << "   TGPopupMenu *";
   out << GetName() << " = new TGPopupMenu(gClient->GetDefaultRoot()"
       << "," << GetWidth() << "," << GetHeight() << "," << GetOptionString() << ");" << endl;

   Bool_t hasradio = kFALSE;
   Int_t r_first, r_last, r_active;
   r_active = r_first = r_last = -1;

   TGMenuEntry *mentry;
   TIter next(GetListOfEntries());

   while ((mentry = (TGMenuEntry *) next())) {
      const char *text;
      Int_t i, lentext, hotpos;
      char shortcut[80];
      char *outext;

      switch (mentry->GetType()) {
         case kMenuEntry:
            text = mentry->GetName();
            lentext = mentry->fLabel->GetLength();
            hotpos = mentry->fLabel->GetHotPos();
            outext = new char[lentext+2];
            i=0;
            while (lentext) {
               if (i == hotpos-1) {
                  outext[i] = '&';
                  i++;
               }
               outext[i] = *text;
               i++; text++; lentext--;
            }
            outext[i]=0;
            if (mentry->fShortcut) {
               sprintf(shortcut, "\\t%s", mentry->GetShortcutText());
            }
            else {
               memset(shortcut, 0, 80);
            }

            out << "   " << GetName() << "->AddEntry(" << quote
                << gSystem->ExpandPathName(gSystem->UnixPathName(outext)) // can be a file name
                << shortcut
                << quote << "," << mentry->GetEntryId();
            if (mentry->fUserData) {
               out << "," << mentry->fUserData;
            }
            if (mentry->fPic) {
               out << ",gClient->GetPicture(" << quote
                   << gSystem->ExpandPathName(gSystem->UnixPathName(mentry->fPic->GetName()))
                   << quote << ")";
            }
            out << ");" << endl;
            delete [] outext;
            break;
         case kMenuPopup:
            out << endl;
            out << "   // cascaded menu " << quote << mentry->GetName() << quote <<endl;
            mentry->fPopup->SavePrimitive(out, option);
            text = mentry->GetName();
            lentext = mentry->fLabel->GetLength();
            hotpos = mentry->fLabel->GetHotPos();
            outext = new char[lentext+2];
            i=0;
            while (lentext) {
               if (i == hotpos-1) {
                  outext[i] = '&';
                  i++;
               }
               outext[i] = *text;
               i++; text++; lentext--;
            }
            outext[i]=0;

            out << "   " << GetName() << "->AddPopup(" << quote
                << outext << quote << "," << mentry->fPopup->GetName()
                << ");" << endl;
            delete [] outext;
            break;
         case kMenuLabel:
            out << "   " << GetName() << "->AddLabel(" << quote
                << mentry->GetName() << quote;
            if (mentry->fPic) {
               out << ",gClient->GetPicture(" << quote
                   << mentry->fPic->GetName()
                   << quote << ")";
            }
            out << ");" << endl;
            break;
         case kMenuSeparator:
            out << "   " << GetName() << "->AddSeparator();" << endl;
            break;
      }

      if (!(mentry->GetStatus() & kMenuEnableMask)) {
         out<< "   " << GetName() << "->DisableEntry(" << mentry->GetEntryId()
            << ");" << endl;
      }
      if (mentry->GetStatus() & kMenuHideMask) {
         out<< "   " << GetName() << "->HideEntry(" << mentry->GetEntryId()
            << ");" << endl;
      }
      if (mentry->GetStatus() & kMenuCheckedMask) {
         out<< "   " << GetName() << "->CheckEntry(" << mentry->GetEntryId()
            << ");" << endl;
      }
      if (mentry->GetStatus() & kMenuDefaultMask) {
         out<< "   "<< GetName() << "->DefaultEntry(" << mentry->GetEntryId()
            << ");" << endl;
      }
      if (mentry->GetStatus() & kMenuRadioEntryMask) {
         switch (hasradio) {
            case kFALSE:
               r_first = mentry->GetEntryId();
               hasradio = kTRUE;
               if (IsEntryRChecked(mentry->GetEntryId())) r_active = mentry->GetEntryId();
               break;
            case kTRUE:
               r_last = mentry->GetEntryId();
               if (IsEntryRChecked(mentry->GetEntryId())) r_active = mentry->GetEntryId();
            break;
         }
      } else if (hasradio) {
         out << "   " << GetName() << "->RCheckEntry(" << r_active << "," << r_first
             << "," << r_last << ");" << endl;
         hasradio = kFALSE;
         r_active = r_first = r_last = -1;
      }
   }
}

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

   char quote = '"';

   out << endl;
   out << "   // " << quote << fLabel->GetString() << quote <<" menu" << endl;

   fMenu->SavePrimitive(out, option);

   const char *text = fLabel->GetString();
   Int_t lentext = fLabel->GetLength();
   Int_t hotpos = fLabel->GetHotPos();
   char *outext = new char[lentext+2];
   Int_t i=0;
   while (lentext) {
      if (i == hotpos-1) {
         outext[i] = '&';
         i++;
      }
      outext[i] = *text;
      i++; text++; lentext--;
   }
   outext[i]=0;
   out << "   " << fParent->GetName() << "->AddPopup(" << quote << outext
       << quote << "," << fMenu->GetName();

   delete [] outext;
}

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

   out << endl;
   out << "   // menu bar" << endl;

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

   if (!fList) return;

   TGFrameElement *el;
   TIter next(fList);

   while ((el = (TGFrameElement *)next())) {
      el->fFrame->SavePrimitive(out, option);
      el->fLayout->SavePrimitive(out, option);
      out << ");" << endl;
   }
}
 TGMenu.cxx:1
 TGMenu.cxx:2
 TGMenu.cxx:3
 TGMenu.cxx:4
 TGMenu.cxx:5
 TGMenu.cxx:6
 TGMenu.cxx:7
 TGMenu.cxx:8
 TGMenu.cxx:9
 TGMenu.cxx:10
 TGMenu.cxx:11
 TGMenu.cxx:12
 TGMenu.cxx:13
 TGMenu.cxx:14
 TGMenu.cxx:15
 TGMenu.cxx:16
 TGMenu.cxx:17
 TGMenu.cxx:18
 TGMenu.cxx:19
 TGMenu.cxx:20
 TGMenu.cxx:21
 TGMenu.cxx:22
 TGMenu.cxx:23
 TGMenu.cxx:24
 TGMenu.cxx:25
 TGMenu.cxx:26
 TGMenu.cxx:27
 TGMenu.cxx:28
 TGMenu.cxx:29
 TGMenu.cxx:30
 TGMenu.cxx:31
 TGMenu.cxx:32
 TGMenu.cxx:33
 TGMenu.cxx:34
 TGMenu.cxx:35
 TGMenu.cxx:36
 TGMenu.cxx:37
 TGMenu.cxx:38
 TGMenu.cxx:39
 TGMenu.cxx:40
 TGMenu.cxx:41
 TGMenu.cxx:42
 TGMenu.cxx:43
 TGMenu.cxx:44
 TGMenu.cxx:45
 TGMenu.cxx:46
 TGMenu.cxx:47
 TGMenu.cxx:48
 TGMenu.cxx:49
 TGMenu.cxx:50
 TGMenu.cxx:51
 TGMenu.cxx:52
 TGMenu.cxx:53
 TGMenu.cxx:54
 TGMenu.cxx:55
 TGMenu.cxx:56
 TGMenu.cxx:57
 TGMenu.cxx:58
 TGMenu.cxx:59
 TGMenu.cxx:60
 TGMenu.cxx:61
 TGMenu.cxx:62
 TGMenu.cxx:63
 TGMenu.cxx:64
 TGMenu.cxx:65
 TGMenu.cxx:66
 TGMenu.cxx:67
 TGMenu.cxx:68
 TGMenu.cxx:69
 TGMenu.cxx:70
 TGMenu.cxx:71
 TGMenu.cxx:72
 TGMenu.cxx:73
 TGMenu.cxx:74
 TGMenu.cxx:75
 TGMenu.cxx:76
 TGMenu.cxx:77
 TGMenu.cxx:78
 TGMenu.cxx:79
 TGMenu.cxx:80
 TGMenu.cxx:81
 TGMenu.cxx:82
 TGMenu.cxx:83
 TGMenu.cxx:84
 TGMenu.cxx:85
 TGMenu.cxx:86
 TGMenu.cxx:87
 TGMenu.cxx:88
 TGMenu.cxx:89
 TGMenu.cxx:90
 TGMenu.cxx:91
 TGMenu.cxx:92
 TGMenu.cxx:93
 TGMenu.cxx:94
 TGMenu.cxx:95
 TGMenu.cxx:96
 TGMenu.cxx:97
 TGMenu.cxx:98
 TGMenu.cxx:99
 TGMenu.cxx:100
 TGMenu.cxx:101
 TGMenu.cxx:102
 TGMenu.cxx:103
 TGMenu.cxx:104
 TGMenu.cxx:105
 TGMenu.cxx:106
 TGMenu.cxx:107
 TGMenu.cxx:108
 TGMenu.cxx:109
 TGMenu.cxx:110
 TGMenu.cxx:111
 TGMenu.cxx:112
 TGMenu.cxx:113
 TGMenu.cxx:114
 TGMenu.cxx:115
 TGMenu.cxx:116
 TGMenu.cxx:117
 TGMenu.cxx:118
 TGMenu.cxx:119
 TGMenu.cxx:120
 TGMenu.cxx:121
 TGMenu.cxx:122
 TGMenu.cxx:123
 TGMenu.cxx:124
 TGMenu.cxx:125
 TGMenu.cxx:126
 TGMenu.cxx:127
 TGMenu.cxx:128
 TGMenu.cxx:129
 TGMenu.cxx:130
 TGMenu.cxx:131
 TGMenu.cxx:132
 TGMenu.cxx:133
 TGMenu.cxx:134
 TGMenu.cxx:135
 TGMenu.cxx:136
 TGMenu.cxx:137
 TGMenu.cxx:138
 TGMenu.cxx:139
 TGMenu.cxx:140
 TGMenu.cxx:141
 TGMenu.cxx:142
 TGMenu.cxx:143
 TGMenu.cxx:144
 TGMenu.cxx:145
 TGMenu.cxx:146
 TGMenu.cxx:147
 TGMenu.cxx:148
 TGMenu.cxx:149
 TGMenu.cxx:150
 TGMenu.cxx:151
 TGMenu.cxx:152
 TGMenu.cxx:153
 TGMenu.cxx:154
 TGMenu.cxx:155
 TGMenu.cxx:156
 TGMenu.cxx:157
 TGMenu.cxx:158
 TGMenu.cxx:159
 TGMenu.cxx:160
 TGMenu.cxx:161
 TGMenu.cxx:162
 TGMenu.cxx:163
 TGMenu.cxx:164
 TGMenu.cxx:165
 TGMenu.cxx:166
 TGMenu.cxx:167
 TGMenu.cxx:168
 TGMenu.cxx:169
 TGMenu.cxx:170
 TGMenu.cxx:171
 TGMenu.cxx:172
 TGMenu.cxx:173
 TGMenu.cxx:174
 TGMenu.cxx:175
 TGMenu.cxx:176
 TGMenu.cxx:177
 TGMenu.cxx:178
 TGMenu.cxx:179
 TGMenu.cxx:180
 TGMenu.cxx:181
 TGMenu.cxx:182
 TGMenu.cxx:183
 TGMenu.cxx:184
 TGMenu.cxx:185
 TGMenu.cxx:186
 TGMenu.cxx:187
 TGMenu.cxx:188
 TGMenu.cxx:189
 TGMenu.cxx:190
 TGMenu.cxx:191
 TGMenu.cxx:192
 TGMenu.cxx:193
 TGMenu.cxx:194
 TGMenu.cxx:195
 TGMenu.cxx:196
 TGMenu.cxx:197
 TGMenu.cxx:198
 TGMenu.cxx:199
 TGMenu.cxx:200
 TGMenu.cxx:201
 TGMenu.cxx:202
 TGMenu.cxx:203
 TGMenu.cxx:204
 TGMenu.cxx:205
 TGMenu.cxx:206
 TGMenu.cxx:207
 TGMenu.cxx:208
 TGMenu.cxx:209
 TGMenu.cxx:210
 TGMenu.cxx:211
 TGMenu.cxx:212
 TGMenu.cxx:213
 TGMenu.cxx:214
 TGMenu.cxx:215
 TGMenu.cxx:216
 TGMenu.cxx:217
 TGMenu.cxx:218
 TGMenu.cxx:219
 TGMenu.cxx:220
 TGMenu.cxx:221
 TGMenu.cxx:222
 TGMenu.cxx:223
 TGMenu.cxx:224
 TGMenu.cxx:225
 TGMenu.cxx:226
 TGMenu.cxx:227
 TGMenu.cxx:228
 TGMenu.cxx:229
 TGMenu.cxx:230
 TGMenu.cxx:231
 TGMenu.cxx:232
 TGMenu.cxx:233
 TGMenu.cxx:234
 TGMenu.cxx:235
 TGMenu.cxx:236
 TGMenu.cxx:237
 TGMenu.cxx:238
 TGMenu.cxx:239
 TGMenu.cxx:240
 TGMenu.cxx:241
 TGMenu.cxx:242
 TGMenu.cxx:243
 TGMenu.cxx:244
 TGMenu.cxx:245
 TGMenu.cxx:246
 TGMenu.cxx:247
 TGMenu.cxx:248
 TGMenu.cxx:249
 TGMenu.cxx:250
 TGMenu.cxx:251
 TGMenu.cxx:252
 TGMenu.cxx:253
 TGMenu.cxx:254
 TGMenu.cxx:255
 TGMenu.cxx:256
 TGMenu.cxx:257
 TGMenu.cxx:258
 TGMenu.cxx:259
 TGMenu.cxx:260
 TGMenu.cxx:261
 TGMenu.cxx:262
 TGMenu.cxx:263
 TGMenu.cxx:264
 TGMenu.cxx:265
 TGMenu.cxx:266
 TGMenu.cxx:267
 TGMenu.cxx:268
 TGMenu.cxx:269
 TGMenu.cxx:270
 TGMenu.cxx:271
 TGMenu.cxx:272
 TGMenu.cxx:273
 TGMenu.cxx:274
 TGMenu.cxx:275
 TGMenu.cxx:276
 TGMenu.cxx:277
 TGMenu.cxx:278
 TGMenu.cxx:279
 TGMenu.cxx:280
 TGMenu.cxx:281
 TGMenu.cxx:282
 TGMenu.cxx:283
 TGMenu.cxx:284
 TGMenu.cxx:285
 TGMenu.cxx:286
 TGMenu.cxx:287
 TGMenu.cxx:288
 TGMenu.cxx:289
 TGMenu.cxx:290
 TGMenu.cxx:291
 TGMenu.cxx:292
 TGMenu.cxx:293
 TGMenu.cxx:294
 TGMenu.cxx:295
 TGMenu.cxx:296
 TGMenu.cxx:297
 TGMenu.cxx:298
 TGMenu.cxx:299
 TGMenu.cxx:300
 TGMenu.cxx:301
 TGMenu.cxx:302
 TGMenu.cxx:303
 TGMenu.cxx:304
 TGMenu.cxx:305
 TGMenu.cxx:306
 TGMenu.cxx:307
 TGMenu.cxx:308
 TGMenu.cxx:309
 TGMenu.cxx:310
 TGMenu.cxx:311
 TGMenu.cxx:312
 TGMenu.cxx:313
 TGMenu.cxx:314
 TGMenu.cxx:315
 TGMenu.cxx:316
 TGMenu.cxx:317
 TGMenu.cxx:318
 TGMenu.cxx:319
 TGMenu.cxx:320
 TGMenu.cxx:321
 TGMenu.cxx:322
 TGMenu.cxx:323
 TGMenu.cxx:324
 TGMenu.cxx:325
 TGMenu.cxx:326
 TGMenu.cxx:327
 TGMenu.cxx:328
 TGMenu.cxx:329
 TGMenu.cxx:330
 TGMenu.cxx:331
 TGMenu.cxx:332
 TGMenu.cxx:333
 TGMenu.cxx:334
 TGMenu.cxx:335
 TGMenu.cxx:336
 TGMenu.cxx:337
 TGMenu.cxx:338
 TGMenu.cxx:339
 TGMenu.cxx:340
 TGMenu.cxx:341
 TGMenu.cxx:342
 TGMenu.cxx:343
 TGMenu.cxx:344
 TGMenu.cxx:345
 TGMenu.cxx:346
 TGMenu.cxx:347
 TGMenu.cxx:348
 TGMenu.cxx:349
 TGMenu.cxx:350
 TGMenu.cxx:351
 TGMenu.cxx:352
 TGMenu.cxx:353
 TGMenu.cxx:354
 TGMenu.cxx:355
 TGMenu.cxx:356
 TGMenu.cxx:357
 TGMenu.cxx:358
 TGMenu.cxx:359
 TGMenu.cxx:360
 TGMenu.cxx:361
 TGMenu.cxx:362
 TGMenu.cxx:363
 TGMenu.cxx:364
 TGMenu.cxx:365
 TGMenu.cxx:366
 TGMenu.cxx:367
 TGMenu.cxx:368
 TGMenu.cxx:369
 TGMenu.cxx:370
 TGMenu.cxx:371
 TGMenu.cxx:372
 TGMenu.cxx:373
 TGMenu.cxx:374
 TGMenu.cxx:375
 TGMenu.cxx:376
 TGMenu.cxx:377
 TGMenu.cxx:378
 TGMenu.cxx:379
 TGMenu.cxx:380
 TGMenu.cxx:381
 TGMenu.cxx:382
 TGMenu.cxx:383
 TGMenu.cxx:384
 TGMenu.cxx:385
 TGMenu.cxx:386
 TGMenu.cxx:387
 TGMenu.cxx:388
 TGMenu.cxx:389
 TGMenu.cxx:390
 TGMenu.cxx:391
 TGMenu.cxx:392
 TGMenu.cxx:393
 TGMenu.cxx:394
 TGMenu.cxx:395
 TGMenu.cxx:396
 TGMenu.cxx:397
 TGMenu.cxx:398
 TGMenu.cxx:399
 TGMenu.cxx:400
 TGMenu.cxx:401
 TGMenu.cxx:402
 TGMenu.cxx:403
 TGMenu.cxx:404
 TGMenu.cxx:405
 TGMenu.cxx:406
 TGMenu.cxx:407
 TGMenu.cxx:408
 TGMenu.cxx:409
 TGMenu.cxx:410
 TGMenu.cxx:411
 TGMenu.cxx:412
 TGMenu.cxx:413
 TGMenu.cxx:414
 TGMenu.cxx:415
 TGMenu.cxx:416
 TGMenu.cxx:417
 TGMenu.cxx:418
 TGMenu.cxx:419
 TGMenu.cxx:420
 TGMenu.cxx:421
 TGMenu.cxx:422
 TGMenu.cxx:423
 TGMenu.cxx:424
 TGMenu.cxx:425
 TGMenu.cxx:426
 TGMenu.cxx:427
 TGMenu.cxx:428
 TGMenu.cxx:429
 TGMenu.cxx:430
 TGMenu.cxx:431
 TGMenu.cxx:432
 TGMenu.cxx:433
 TGMenu.cxx:434
 TGMenu.cxx:435
 TGMenu.cxx:436
 TGMenu.cxx:437
 TGMenu.cxx:438
 TGMenu.cxx:439
 TGMenu.cxx:440
 TGMenu.cxx:441
 TGMenu.cxx:442
 TGMenu.cxx:443
 TGMenu.cxx:444
 TGMenu.cxx:445
 TGMenu.cxx:446
 TGMenu.cxx:447
 TGMenu.cxx:448
 TGMenu.cxx:449
 TGMenu.cxx:450
 TGMenu.cxx:451
 TGMenu.cxx:452
 TGMenu.cxx:453
 TGMenu.cxx:454
 TGMenu.cxx:455
 TGMenu.cxx:456
 TGMenu.cxx:457
 TGMenu.cxx:458
 TGMenu.cxx:459
 TGMenu.cxx:460
 TGMenu.cxx:461
 TGMenu.cxx:462
 TGMenu.cxx:463
 TGMenu.cxx:464
 TGMenu.cxx:465
 TGMenu.cxx:466
 TGMenu.cxx:467
 TGMenu.cxx:468
 TGMenu.cxx:469
 TGMenu.cxx:470
 TGMenu.cxx:471
 TGMenu.cxx:472
 TGMenu.cxx:473
 TGMenu.cxx:474
 TGMenu.cxx:475
 TGMenu.cxx:476
 TGMenu.cxx:477
 TGMenu.cxx:478
 TGMenu.cxx:479
 TGMenu.cxx:480
 TGMenu.cxx:481
 TGMenu.cxx:482
 TGMenu.cxx:483
 TGMenu.cxx:484
 TGMenu.cxx:485
 TGMenu.cxx:486
 TGMenu.cxx:487
 TGMenu.cxx:488
 TGMenu.cxx:489
 TGMenu.cxx:490
 TGMenu.cxx:491
 TGMenu.cxx:492
 TGMenu.cxx:493
 TGMenu.cxx:494
 TGMenu.cxx:495
 TGMenu.cxx:496
 TGMenu.cxx:497
 TGMenu.cxx:498
 TGMenu.cxx:499
 TGMenu.cxx:500
 TGMenu.cxx:501
 TGMenu.cxx:502
 TGMenu.cxx:503
 TGMenu.cxx:504
 TGMenu.cxx:505
 TGMenu.cxx:506
 TGMenu.cxx:507
 TGMenu.cxx:508
 TGMenu.cxx:509
 TGMenu.cxx:510
 TGMenu.cxx:511
 TGMenu.cxx:512
 TGMenu.cxx:513
 TGMenu.cxx:514
 TGMenu.cxx:515
 TGMenu.cxx:516
 TGMenu.cxx:517
 TGMenu.cxx:518
 TGMenu.cxx:519
 TGMenu.cxx:520
 TGMenu.cxx:521
 TGMenu.cxx:522
 TGMenu.cxx:523
 TGMenu.cxx:524
 TGMenu.cxx:525
 TGMenu.cxx:526
 TGMenu.cxx:527
 TGMenu.cxx:528
 TGMenu.cxx:529
 TGMenu.cxx:530
 TGMenu.cxx:531
 TGMenu.cxx:532
 TGMenu.cxx:533
 TGMenu.cxx:534
 TGMenu.cxx:535
 TGMenu.cxx:536
 TGMenu.cxx:537
 TGMenu.cxx:538
 TGMenu.cxx:539
 TGMenu.cxx:540
 TGMenu.cxx:541
 TGMenu.cxx:542
 TGMenu.cxx:543
 TGMenu.cxx:544
 TGMenu.cxx:545
 TGMenu.cxx:546
 TGMenu.cxx:547
 TGMenu.cxx:548
 TGMenu.cxx:549
 TGMenu.cxx:550
 TGMenu.cxx:551
 TGMenu.cxx:552
 TGMenu.cxx:553
 TGMenu.cxx:554
 TGMenu.cxx:555
 TGMenu.cxx:556
 TGMenu.cxx:557
 TGMenu.cxx:558
 TGMenu.cxx:559
 TGMenu.cxx:560
 TGMenu.cxx:561
 TGMenu.cxx:562
 TGMenu.cxx:563
 TGMenu.cxx:564
 TGMenu.cxx:565
 TGMenu.cxx:566
 TGMenu.cxx:567
 TGMenu.cxx:568
 TGMenu.cxx:569
 TGMenu.cxx:570
 TGMenu.cxx:571
 TGMenu.cxx:572
 TGMenu.cxx:573
 TGMenu.cxx:574
 TGMenu.cxx:575
 TGMenu.cxx:576
 TGMenu.cxx:577
 TGMenu.cxx:578
 TGMenu.cxx:579
 TGMenu.cxx:580
 TGMenu.cxx:581
 TGMenu.cxx:582
 TGMenu.cxx:583
 TGMenu.cxx:584
 TGMenu.cxx:585
 TGMenu.cxx:586
 TGMenu.cxx:587
 TGMenu.cxx:588
 TGMenu.cxx:589
 TGMenu.cxx:590
 TGMenu.cxx:591
 TGMenu.cxx:592
 TGMenu.cxx:593
 TGMenu.cxx:594
 TGMenu.cxx:595
 TGMenu.cxx:596
 TGMenu.cxx:597
 TGMenu.cxx:598
 TGMenu.cxx:599
 TGMenu.cxx:600
 TGMenu.cxx:601
 TGMenu.cxx:602
 TGMenu.cxx:603
 TGMenu.cxx:604
 TGMenu.cxx:605
 TGMenu.cxx:606
 TGMenu.cxx:607
 TGMenu.cxx:608
 TGMenu.cxx:609
 TGMenu.cxx:610
 TGMenu.cxx:611
 TGMenu.cxx:612
 TGMenu.cxx:613
 TGMenu.cxx:614
 TGMenu.cxx:615
 TGMenu.cxx:616
 TGMenu.cxx:617
 TGMenu.cxx:618
 TGMenu.cxx:619
 TGMenu.cxx:620
 TGMenu.cxx:621
 TGMenu.cxx:622
 TGMenu.cxx:623
 TGMenu.cxx:624
 TGMenu.cxx:625
 TGMenu.cxx:626
 TGMenu.cxx:627
 TGMenu.cxx:628
 TGMenu.cxx:629
 TGMenu.cxx:630
 TGMenu.cxx:631
 TGMenu.cxx:632
 TGMenu.cxx:633
 TGMenu.cxx:634
 TGMenu.cxx:635
 TGMenu.cxx:636
 TGMenu.cxx:637
 TGMenu.cxx:638
 TGMenu.cxx:639
 TGMenu.cxx:640
 TGMenu.cxx:641
 TGMenu.cxx:642
 TGMenu.cxx:643
 TGMenu.cxx:644
 TGMenu.cxx:645
 TGMenu.cxx:646
 TGMenu.cxx:647
 TGMenu.cxx:648
 TGMenu.cxx:649
 TGMenu.cxx:650
 TGMenu.cxx:651
 TGMenu.cxx:652
 TGMenu.cxx:653
 TGMenu.cxx:654
 TGMenu.cxx:655
 TGMenu.cxx:656
 TGMenu.cxx:657
 TGMenu.cxx:658
 TGMenu.cxx:659
 TGMenu.cxx:660
 TGMenu.cxx:661
 TGMenu.cxx:662
 TGMenu.cxx:663
 TGMenu.cxx:664
 TGMenu.cxx:665
 TGMenu.cxx:666
 TGMenu.cxx:667
 TGMenu.cxx:668
 TGMenu.cxx:669
 TGMenu.cxx:670
 TGMenu.cxx:671
 TGMenu.cxx:672
 TGMenu.cxx:673
 TGMenu.cxx:674
 TGMenu.cxx:675
 TGMenu.cxx:676
 TGMenu.cxx:677
 TGMenu.cxx:678
 TGMenu.cxx:679
 TGMenu.cxx:680
 TGMenu.cxx:681
 TGMenu.cxx:682
 TGMenu.cxx:683
 TGMenu.cxx:684
 TGMenu.cxx:685
 TGMenu.cxx:686
 TGMenu.cxx:687
 TGMenu.cxx:688
 TGMenu.cxx:689
 TGMenu.cxx:690
 TGMenu.cxx:691
 TGMenu.cxx:692
 TGMenu.cxx:693
 TGMenu.cxx:694
 TGMenu.cxx:695
 TGMenu.cxx:696
 TGMenu.cxx:697
 TGMenu.cxx:698
 TGMenu.cxx:699
 TGMenu.cxx:700
 TGMenu.cxx:701
 TGMenu.cxx:702
 TGMenu.cxx:703
 TGMenu.cxx:704
 TGMenu.cxx:705
 TGMenu.cxx:706
 TGMenu.cxx:707
 TGMenu.cxx:708
 TGMenu.cxx:709
 TGMenu.cxx:710
 TGMenu.cxx:711
 TGMenu.cxx:712
 TGMenu.cxx:713
 TGMenu.cxx:714
 TGMenu.cxx:715
 TGMenu.cxx:716
 TGMenu.cxx:717
 TGMenu.cxx:718
 TGMenu.cxx:719
 TGMenu.cxx:720
 TGMenu.cxx:721
 TGMenu.cxx:722
 TGMenu.cxx:723
 TGMenu.cxx:724
 TGMenu.cxx:725
 TGMenu.cxx:726
 TGMenu.cxx:727
 TGMenu.cxx:728
 TGMenu.cxx:729
 TGMenu.cxx:730
 TGMenu.cxx:731
 TGMenu.cxx:732
 TGMenu.cxx:733
 TGMenu.cxx:734
 TGMenu.cxx:735
 TGMenu.cxx:736
 TGMenu.cxx:737
 TGMenu.cxx:738
 TGMenu.cxx:739
 TGMenu.cxx:740
 TGMenu.cxx:741
 TGMenu.cxx:742
 TGMenu.cxx:743
 TGMenu.cxx:744
 TGMenu.cxx:745
 TGMenu.cxx:746
 TGMenu.cxx:747
 TGMenu.cxx:748
 TGMenu.cxx:749
 TGMenu.cxx:750
 TGMenu.cxx:751
 TGMenu.cxx:752
 TGMenu.cxx:753
 TGMenu.cxx:754
 TGMenu.cxx:755
 TGMenu.cxx:756
 TGMenu.cxx:757
 TGMenu.cxx:758
 TGMenu.cxx:759
 TGMenu.cxx:760
 TGMenu.cxx:761
 TGMenu.cxx:762
 TGMenu.cxx:763
 TGMenu.cxx:764
 TGMenu.cxx:765
 TGMenu.cxx:766
 TGMenu.cxx:767
 TGMenu.cxx:768
 TGMenu.cxx:769
 TGMenu.cxx:770
 TGMenu.cxx:771
 TGMenu.cxx:772
 TGMenu.cxx:773
 TGMenu.cxx:774
 TGMenu.cxx:775
 TGMenu.cxx:776
 TGMenu.cxx:777
 TGMenu.cxx:778
 TGMenu.cxx:779
 TGMenu.cxx:780
 TGMenu.cxx:781
 TGMenu.cxx:782
 TGMenu.cxx:783
 TGMenu.cxx:784
 TGMenu.cxx:785
 TGMenu.cxx:786
 TGMenu.cxx:787
 TGMenu.cxx:788
 TGMenu.cxx:789
 TGMenu.cxx:790
 TGMenu.cxx:791
 TGMenu.cxx:792
 TGMenu.cxx:793
 TGMenu.cxx:794
 TGMenu.cxx:795
 TGMenu.cxx:796
 TGMenu.cxx:797
 TGMenu.cxx:798
 TGMenu.cxx:799
 TGMenu.cxx:800
 TGMenu.cxx:801
 TGMenu.cxx:802
 TGMenu.cxx:803
 TGMenu.cxx:804
 TGMenu.cxx:805
 TGMenu.cxx:806
 TGMenu.cxx:807
 TGMenu.cxx:808
 TGMenu.cxx:809
 TGMenu.cxx:810
 TGMenu.cxx:811
 TGMenu.cxx:812
 TGMenu.cxx:813
 TGMenu.cxx:814
 TGMenu.cxx:815
 TGMenu.cxx:816
 TGMenu.cxx:817
 TGMenu.cxx:818
 TGMenu.cxx:819
 TGMenu.cxx:820
 TGMenu.cxx:821
 TGMenu.cxx:822
 TGMenu.cxx:823
 TGMenu.cxx:824
 TGMenu.cxx:825
 TGMenu.cxx:826
 TGMenu.cxx:827
 TGMenu.cxx:828
 TGMenu.cxx:829
 TGMenu.cxx:830
 TGMenu.cxx:831
 TGMenu.cxx:832
 TGMenu.cxx:833
 TGMenu.cxx:834
 TGMenu.cxx:835
 TGMenu.cxx:836
 TGMenu.cxx:837
 TGMenu.cxx:838
 TGMenu.cxx:839
 TGMenu.cxx:840
 TGMenu.cxx:841
 TGMenu.cxx:842
 TGMenu.cxx:843
 TGMenu.cxx:844
 TGMenu.cxx:845
 TGMenu.cxx:846
 TGMenu.cxx:847
 TGMenu.cxx:848
 TGMenu.cxx:849
 TGMenu.cxx:850
 TGMenu.cxx:851
 TGMenu.cxx:852
 TGMenu.cxx:853
 TGMenu.cxx:854
 TGMenu.cxx:855
 TGMenu.cxx:856
 TGMenu.cxx:857
 TGMenu.cxx:858
 TGMenu.cxx:859
 TGMenu.cxx:860
 TGMenu.cxx:861
 TGMenu.cxx:862
 TGMenu.cxx:863
 TGMenu.cxx:864
 TGMenu.cxx:865
 TGMenu.cxx:866
 TGMenu.cxx:867
 TGMenu.cxx:868
 TGMenu.cxx:869
 TGMenu.cxx:870
 TGMenu.cxx:871
 TGMenu.cxx:872
 TGMenu.cxx:873
 TGMenu.cxx:874
 TGMenu.cxx:875
 TGMenu.cxx:876
 TGMenu.cxx:877
 TGMenu.cxx:878
 TGMenu.cxx:879
 TGMenu.cxx:880
 TGMenu.cxx:881
 TGMenu.cxx:882
 TGMenu.cxx:883
 TGMenu.cxx:884
 TGMenu.cxx:885
 TGMenu.cxx:886
 TGMenu.cxx:887
 TGMenu.cxx:888
 TGMenu.cxx:889
 TGMenu.cxx:890
 TGMenu.cxx:891
 TGMenu.cxx:892
 TGMenu.cxx:893
 TGMenu.cxx:894
 TGMenu.cxx:895
 TGMenu.cxx:896
 TGMenu.cxx:897
 TGMenu.cxx:898
 TGMenu.cxx:899
 TGMenu.cxx:900
 TGMenu.cxx:901
 TGMenu.cxx:902
 TGMenu.cxx:903
 TGMenu.cxx:904
 TGMenu.cxx:905
 TGMenu.cxx:906
 TGMenu.cxx:907
 TGMenu.cxx:908
 TGMenu.cxx:909
 TGMenu.cxx:910
 TGMenu.cxx:911
 TGMenu.cxx:912
 TGMenu.cxx:913
 TGMenu.cxx:914
 TGMenu.cxx:915
 TGMenu.cxx:916
 TGMenu.cxx:917
 TGMenu.cxx:918
 TGMenu.cxx:919
 TGMenu.cxx:920
 TGMenu.cxx:921
 TGMenu.cxx:922
 TGMenu.cxx:923
 TGMenu.cxx:924
 TGMenu.cxx:925
 TGMenu.cxx:926
 TGMenu.cxx:927
 TGMenu.cxx:928
 TGMenu.cxx:929
 TGMenu.cxx:930
 TGMenu.cxx:931
 TGMenu.cxx:932
 TGMenu.cxx:933
 TGMenu.cxx:934
 TGMenu.cxx:935
 TGMenu.cxx:936
 TGMenu.cxx:937
 TGMenu.cxx:938
 TGMenu.cxx:939
 TGMenu.cxx:940
 TGMenu.cxx:941
 TGMenu.cxx:942
 TGMenu.cxx:943
 TGMenu.cxx:944
 TGMenu.cxx:945
 TGMenu.cxx:946
 TGMenu.cxx:947
 TGMenu.cxx:948
 TGMenu.cxx:949
 TGMenu.cxx:950
 TGMenu.cxx:951
 TGMenu.cxx:952
 TGMenu.cxx:953
 TGMenu.cxx:954
 TGMenu.cxx:955
 TGMenu.cxx:956
 TGMenu.cxx:957
 TGMenu.cxx:958
 TGMenu.cxx:959
 TGMenu.cxx:960
 TGMenu.cxx:961
 TGMenu.cxx:962
 TGMenu.cxx:963
 TGMenu.cxx:964
 TGMenu.cxx:965
 TGMenu.cxx:966
 TGMenu.cxx:967
 TGMenu.cxx:968
 TGMenu.cxx:969
 TGMenu.cxx:970
 TGMenu.cxx:971
 TGMenu.cxx:972
 TGMenu.cxx:973
 TGMenu.cxx:974
 TGMenu.cxx:975
 TGMenu.cxx:976
 TGMenu.cxx:977
 TGMenu.cxx:978
 TGMenu.cxx:979
 TGMenu.cxx:980
 TGMenu.cxx:981
 TGMenu.cxx:982
 TGMenu.cxx:983
 TGMenu.cxx:984
 TGMenu.cxx:985
 TGMenu.cxx:986
 TGMenu.cxx:987
 TGMenu.cxx:988
 TGMenu.cxx:989
 TGMenu.cxx:990
 TGMenu.cxx:991
 TGMenu.cxx:992
 TGMenu.cxx:993
 TGMenu.cxx:994
 TGMenu.cxx:995
 TGMenu.cxx:996
 TGMenu.cxx:997
 TGMenu.cxx:998
 TGMenu.cxx:999
 TGMenu.cxx:1000
 TGMenu.cxx:1001
 TGMenu.cxx:1002
 TGMenu.cxx:1003
 TGMenu.cxx:1004
 TGMenu.cxx:1005
 TGMenu.cxx:1006
 TGMenu.cxx:1007
 TGMenu.cxx:1008
 TGMenu.cxx:1009
 TGMenu.cxx:1010
 TGMenu.cxx:1011
 TGMenu.cxx:1012
 TGMenu.cxx:1013
 TGMenu.cxx:1014
 TGMenu.cxx:1015
 TGMenu.cxx:1016
 TGMenu.cxx:1017
 TGMenu.cxx:1018
 TGMenu.cxx:1019
 TGMenu.cxx:1020
 TGMenu.cxx:1021
 TGMenu.cxx:1022
 TGMenu.cxx:1023
 TGMenu.cxx:1024
 TGMenu.cxx:1025
 TGMenu.cxx:1026
 TGMenu.cxx:1027
 TGMenu.cxx:1028
 TGMenu.cxx:1029
 TGMenu.cxx:1030
 TGMenu.cxx:1031
 TGMenu.cxx:1032
 TGMenu.cxx:1033
 TGMenu.cxx:1034
 TGMenu.cxx:1035
 TGMenu.cxx:1036
 TGMenu.cxx:1037
 TGMenu.cxx:1038
 TGMenu.cxx:1039
 TGMenu.cxx:1040
 TGMenu.cxx:1041
 TGMenu.cxx:1042
 TGMenu.cxx:1043
 TGMenu.cxx:1044
 TGMenu.cxx:1045
 TGMenu.cxx:1046
 TGMenu.cxx:1047
 TGMenu.cxx:1048
 TGMenu.cxx:1049
 TGMenu.cxx:1050
 TGMenu.cxx:1051
 TGMenu.cxx:1052
 TGMenu.cxx:1053
 TGMenu.cxx:1054
 TGMenu.cxx:1055
 TGMenu.cxx:1056
 TGMenu.cxx:1057
 TGMenu.cxx:1058
 TGMenu.cxx:1059
 TGMenu.cxx:1060
 TGMenu.cxx:1061
 TGMenu.cxx:1062
 TGMenu.cxx:1063
 TGMenu.cxx:1064
 TGMenu.cxx:1065
 TGMenu.cxx:1066
 TGMenu.cxx:1067
 TGMenu.cxx:1068
 TGMenu.cxx:1069
 TGMenu.cxx:1070
 TGMenu.cxx:1071
 TGMenu.cxx:1072
 TGMenu.cxx:1073
 TGMenu.cxx:1074
 TGMenu.cxx:1075
 TGMenu.cxx:1076
 TGMenu.cxx:1077
 TGMenu.cxx:1078
 TGMenu.cxx:1079
 TGMenu.cxx:1080
 TGMenu.cxx:1081
 TGMenu.cxx:1082
 TGMenu.cxx:1083
 TGMenu.cxx:1084
 TGMenu.cxx:1085
 TGMenu.cxx:1086
 TGMenu.cxx:1087
 TGMenu.cxx:1088
 TGMenu.cxx:1089
 TGMenu.cxx:1090
 TGMenu.cxx:1091
 TGMenu.cxx:1092
 TGMenu.cxx:1093
 TGMenu.cxx:1094
 TGMenu.cxx:1095
 TGMenu.cxx:1096
 TGMenu.cxx:1097
 TGMenu.cxx:1098
 TGMenu.cxx:1099
 TGMenu.cxx:1100
 TGMenu.cxx:1101
 TGMenu.cxx:1102
 TGMenu.cxx:1103
 TGMenu.cxx:1104
 TGMenu.cxx:1105
 TGMenu.cxx:1106
 TGMenu.cxx:1107
 TGMenu.cxx:1108
 TGMenu.cxx:1109
 TGMenu.cxx:1110
 TGMenu.cxx:1111
 TGMenu.cxx:1112
 TGMenu.cxx:1113
 TGMenu.cxx:1114
 TGMenu.cxx:1115
 TGMenu.cxx:1116
 TGMenu.cxx:1117
 TGMenu.cxx:1118
 TGMenu.cxx:1119
 TGMenu.cxx:1120
 TGMenu.cxx:1121
 TGMenu.cxx:1122
 TGMenu.cxx:1123
 TGMenu.cxx:1124
 TGMenu.cxx:1125
 TGMenu.cxx:1126
 TGMenu.cxx:1127
 TGMenu.cxx:1128
 TGMenu.cxx:1129
 TGMenu.cxx:1130
 TGMenu.cxx:1131
 TGMenu.cxx:1132
 TGMenu.cxx:1133
 TGMenu.cxx:1134
 TGMenu.cxx:1135
 TGMenu.cxx:1136
 TGMenu.cxx:1137
 TGMenu.cxx:1138
 TGMenu.cxx:1139
 TGMenu.cxx:1140
 TGMenu.cxx:1141
 TGMenu.cxx:1142
 TGMenu.cxx:1143
 TGMenu.cxx:1144
 TGMenu.cxx:1145
 TGMenu.cxx:1146
 TGMenu.cxx:1147
 TGMenu.cxx:1148
 TGMenu.cxx:1149
 TGMenu.cxx:1150
 TGMenu.cxx:1151
 TGMenu.cxx:1152
 TGMenu.cxx:1153
 TGMenu.cxx:1154
 TGMenu.cxx:1155
 TGMenu.cxx:1156
 TGMenu.cxx:1157
 TGMenu.cxx:1158
 TGMenu.cxx:1159
 TGMenu.cxx:1160
 TGMenu.cxx:1161
 TGMenu.cxx:1162
 TGMenu.cxx:1163
 TGMenu.cxx:1164
 TGMenu.cxx:1165
 TGMenu.cxx:1166
 TGMenu.cxx:1167
 TGMenu.cxx:1168
 TGMenu.cxx:1169
 TGMenu.cxx:1170
 TGMenu.cxx:1171
 TGMenu.cxx:1172
 TGMenu.cxx:1173
 TGMenu.cxx:1174
 TGMenu.cxx:1175
 TGMenu.cxx:1176
 TGMenu.cxx:1177
 TGMenu.cxx:1178
 TGMenu.cxx:1179
 TGMenu.cxx:1180
 TGMenu.cxx:1181
 TGMenu.cxx:1182
 TGMenu.cxx:1183
 TGMenu.cxx:1184
 TGMenu.cxx:1185
 TGMenu.cxx:1186
 TGMenu.cxx:1187
 TGMenu.cxx:1188
 TGMenu.cxx:1189
 TGMenu.cxx:1190
 TGMenu.cxx:1191
 TGMenu.cxx:1192
 TGMenu.cxx:1193
 TGMenu.cxx:1194
 TGMenu.cxx:1195
 TGMenu.cxx:1196
 TGMenu.cxx:1197
 TGMenu.cxx:1198
 TGMenu.cxx:1199
 TGMenu.cxx:1200
 TGMenu.cxx:1201
 TGMenu.cxx:1202
 TGMenu.cxx:1203
 TGMenu.cxx:1204
 TGMenu.cxx:1205
 TGMenu.cxx:1206
 TGMenu.cxx:1207
 TGMenu.cxx:1208
 TGMenu.cxx:1209
 TGMenu.cxx:1210
 TGMenu.cxx:1211
 TGMenu.cxx:1212
 TGMenu.cxx:1213
 TGMenu.cxx:1214
 TGMenu.cxx:1215
 TGMenu.cxx:1216
 TGMenu.cxx:1217
 TGMenu.cxx:1218
 TGMenu.cxx:1219
 TGMenu.cxx:1220
 TGMenu.cxx:1221
 TGMenu.cxx:1222
 TGMenu.cxx:1223
 TGMenu.cxx:1224
 TGMenu.cxx:1225
 TGMenu.cxx:1226
 TGMenu.cxx:1227
 TGMenu.cxx:1228
 TGMenu.cxx:1229
 TGMenu.cxx:1230
 TGMenu.cxx:1231
 TGMenu.cxx:1232
 TGMenu.cxx:1233
 TGMenu.cxx:1234
 TGMenu.cxx:1235
 TGMenu.cxx:1236
 TGMenu.cxx:1237
 TGMenu.cxx:1238
 TGMenu.cxx:1239
 TGMenu.cxx:1240
 TGMenu.cxx:1241
 TGMenu.cxx:1242
 TGMenu.cxx:1243
 TGMenu.cxx:1244
 TGMenu.cxx:1245
 TGMenu.cxx:1246
 TGMenu.cxx:1247
 TGMenu.cxx:1248
 TGMenu.cxx:1249
 TGMenu.cxx:1250
 TGMenu.cxx:1251
 TGMenu.cxx:1252
 TGMenu.cxx:1253
 TGMenu.cxx:1254
 TGMenu.cxx:1255
 TGMenu.cxx:1256
 TGMenu.cxx:1257
 TGMenu.cxx:1258
 TGMenu.cxx:1259
 TGMenu.cxx:1260
 TGMenu.cxx:1261
 TGMenu.cxx:1262
 TGMenu.cxx:1263
 TGMenu.cxx:1264
 TGMenu.cxx:1265
 TGMenu.cxx:1266
 TGMenu.cxx:1267
 TGMenu.cxx:1268
 TGMenu.cxx:1269
 TGMenu.cxx:1270
 TGMenu.cxx:1271
 TGMenu.cxx:1272
 TGMenu.cxx:1273
 TGMenu.cxx:1274
 TGMenu.cxx:1275
 TGMenu.cxx:1276
 TGMenu.cxx:1277
 TGMenu.cxx:1278
 TGMenu.cxx:1279
 TGMenu.cxx:1280
 TGMenu.cxx:1281
 TGMenu.cxx:1282
 TGMenu.cxx:1283
 TGMenu.cxx:1284
 TGMenu.cxx:1285
 TGMenu.cxx:1286
 TGMenu.cxx:1287
 TGMenu.cxx:1288
 TGMenu.cxx:1289
 TGMenu.cxx:1290
 TGMenu.cxx:1291
 TGMenu.cxx:1292
 TGMenu.cxx:1293
 TGMenu.cxx:1294
 TGMenu.cxx:1295
 TGMenu.cxx:1296
 TGMenu.cxx:1297
 TGMenu.cxx:1298
 TGMenu.cxx:1299
 TGMenu.cxx:1300
 TGMenu.cxx:1301
 TGMenu.cxx:1302
 TGMenu.cxx:1303
 TGMenu.cxx:1304
 TGMenu.cxx:1305
 TGMenu.cxx:1306
 TGMenu.cxx:1307
 TGMenu.cxx:1308
 TGMenu.cxx:1309
 TGMenu.cxx:1310
 TGMenu.cxx:1311
 TGMenu.cxx:1312
 TGMenu.cxx:1313
 TGMenu.cxx:1314
 TGMenu.cxx:1315
 TGMenu.cxx:1316
 TGMenu.cxx:1317
 TGMenu.cxx:1318
 TGMenu.cxx:1319
 TGMenu.cxx:1320
 TGMenu.cxx:1321
 TGMenu.cxx:1322
 TGMenu.cxx:1323
 TGMenu.cxx:1324
 TGMenu.cxx:1325
 TGMenu.cxx:1326
 TGMenu.cxx:1327
 TGMenu.cxx:1328
 TGMenu.cxx:1329
 TGMenu.cxx:1330
 TGMenu.cxx:1331
 TGMenu.cxx:1332
 TGMenu.cxx:1333
 TGMenu.cxx:1334
 TGMenu.cxx:1335
 TGMenu.cxx:1336
 TGMenu.cxx:1337
 TGMenu.cxx:1338
 TGMenu.cxx:1339
 TGMenu.cxx:1340
 TGMenu.cxx:1341
 TGMenu.cxx:1342
 TGMenu.cxx:1343
 TGMenu.cxx:1344
 TGMenu.cxx:1345
 TGMenu.cxx:1346
 TGMenu.cxx:1347
 TGMenu.cxx:1348
 TGMenu.cxx:1349
 TGMenu.cxx:1350
 TGMenu.cxx:1351
 TGMenu.cxx:1352
 TGMenu.cxx:1353
 TGMenu.cxx:1354
 TGMenu.cxx:1355
 TGMenu.cxx:1356
 TGMenu.cxx:1357
 TGMenu.cxx:1358
 TGMenu.cxx:1359
 TGMenu.cxx:1360
 TGMenu.cxx:1361
 TGMenu.cxx:1362
 TGMenu.cxx:1363
 TGMenu.cxx:1364
 TGMenu.cxx:1365
 TGMenu.cxx:1366
 TGMenu.cxx:1367
 TGMenu.cxx:1368
 TGMenu.cxx:1369
 TGMenu.cxx:1370
 TGMenu.cxx:1371
 TGMenu.cxx:1372
 TGMenu.cxx:1373
 TGMenu.cxx:1374
 TGMenu.cxx:1375
 TGMenu.cxx:1376
 TGMenu.cxx:1377
 TGMenu.cxx:1378
 TGMenu.cxx:1379
 TGMenu.cxx:1380
 TGMenu.cxx:1381
 TGMenu.cxx:1382
 TGMenu.cxx:1383
 TGMenu.cxx:1384
 TGMenu.cxx:1385
 TGMenu.cxx:1386
 TGMenu.cxx:1387
 TGMenu.cxx:1388
 TGMenu.cxx:1389
 TGMenu.cxx:1390
 TGMenu.cxx:1391
 TGMenu.cxx:1392
 TGMenu.cxx:1393
 TGMenu.cxx:1394
 TGMenu.cxx:1395
 TGMenu.cxx:1396
 TGMenu.cxx:1397
 TGMenu.cxx:1398
 TGMenu.cxx:1399
 TGMenu.cxx:1400
 TGMenu.cxx:1401
 TGMenu.cxx:1402
 TGMenu.cxx:1403
 TGMenu.cxx:1404
 TGMenu.cxx:1405
 TGMenu.cxx:1406
 TGMenu.cxx:1407
 TGMenu.cxx:1408
 TGMenu.cxx:1409
 TGMenu.cxx:1410
 TGMenu.cxx:1411
 TGMenu.cxx:1412
 TGMenu.cxx:1413
 TGMenu.cxx:1414
 TGMenu.cxx:1415
 TGMenu.cxx:1416
 TGMenu.cxx:1417
 TGMenu.cxx:1418
 TGMenu.cxx:1419
 TGMenu.cxx:1420
 TGMenu.cxx:1421
 TGMenu.cxx:1422
 TGMenu.cxx:1423
 TGMenu.cxx:1424
 TGMenu.cxx:1425
 TGMenu.cxx:1426
 TGMenu.cxx:1427
 TGMenu.cxx:1428
 TGMenu.cxx:1429
 TGMenu.cxx:1430
 TGMenu.cxx:1431
 TGMenu.cxx:1432
 TGMenu.cxx:1433
 TGMenu.cxx:1434
 TGMenu.cxx:1435
 TGMenu.cxx:1436
 TGMenu.cxx:1437
 TGMenu.cxx:1438
 TGMenu.cxx:1439
 TGMenu.cxx:1440
 TGMenu.cxx:1441
 TGMenu.cxx:1442
 TGMenu.cxx:1443
 TGMenu.cxx:1444
 TGMenu.cxx:1445
 TGMenu.cxx:1446
 TGMenu.cxx:1447
 TGMenu.cxx:1448
 TGMenu.cxx:1449
 TGMenu.cxx:1450
 TGMenu.cxx:1451
 TGMenu.cxx:1452
 TGMenu.cxx:1453
 TGMenu.cxx:1454
 TGMenu.cxx:1455
 TGMenu.cxx:1456
 TGMenu.cxx:1457
 TGMenu.cxx:1458
 TGMenu.cxx:1459
 TGMenu.cxx:1460
 TGMenu.cxx:1461
 TGMenu.cxx:1462
 TGMenu.cxx:1463
 TGMenu.cxx:1464
 TGMenu.cxx:1465
 TGMenu.cxx:1466
 TGMenu.cxx:1467
 TGMenu.cxx:1468
 TGMenu.cxx:1469
 TGMenu.cxx:1470
 TGMenu.cxx:1471
 TGMenu.cxx:1472
 TGMenu.cxx:1473
 TGMenu.cxx:1474
 TGMenu.cxx:1475
 TGMenu.cxx:1476
 TGMenu.cxx:1477
 TGMenu.cxx:1478
 TGMenu.cxx:1479
 TGMenu.cxx:1480
 TGMenu.cxx:1481
 TGMenu.cxx:1482
 TGMenu.cxx:1483
 TGMenu.cxx:1484
 TGMenu.cxx:1485
 TGMenu.cxx:1486
 TGMenu.cxx:1487
 TGMenu.cxx:1488
 TGMenu.cxx:1489
 TGMenu.cxx:1490
 TGMenu.cxx:1491
 TGMenu.cxx:1492
 TGMenu.cxx:1493
 TGMenu.cxx:1494
 TGMenu.cxx:1495
 TGMenu.cxx:1496
 TGMenu.cxx:1497
 TGMenu.cxx:1498
 TGMenu.cxx:1499
 TGMenu.cxx:1500
 TGMenu.cxx:1501
 TGMenu.cxx:1502
 TGMenu.cxx:1503
 TGMenu.cxx:1504
 TGMenu.cxx:1505
 TGMenu.cxx:1506
 TGMenu.cxx:1507
 TGMenu.cxx:1508
 TGMenu.cxx:1509
 TGMenu.cxx:1510
 TGMenu.cxx:1511
 TGMenu.cxx:1512
 TGMenu.cxx:1513
 TGMenu.cxx:1514
 TGMenu.cxx:1515
 TGMenu.cxx:1516
 TGMenu.cxx:1517
 TGMenu.cxx:1518
 TGMenu.cxx:1519
 TGMenu.cxx:1520
 TGMenu.cxx:1521
 TGMenu.cxx:1522
 TGMenu.cxx:1523
 TGMenu.cxx:1524
 TGMenu.cxx:1525
 TGMenu.cxx:1526
 TGMenu.cxx:1527
 TGMenu.cxx:1528
 TGMenu.cxx:1529
 TGMenu.cxx:1530
 TGMenu.cxx:1531
 TGMenu.cxx:1532
 TGMenu.cxx:1533
 TGMenu.cxx:1534
 TGMenu.cxx:1535
 TGMenu.cxx:1536
 TGMenu.cxx:1537
 TGMenu.cxx:1538
 TGMenu.cxx:1539
 TGMenu.cxx:1540
 TGMenu.cxx:1541
 TGMenu.cxx:1542
 TGMenu.cxx:1543
 TGMenu.cxx:1544
 TGMenu.cxx:1545
 TGMenu.cxx:1546
 TGMenu.cxx:1547
 TGMenu.cxx:1548
 TGMenu.cxx:1549
 TGMenu.cxx:1550
 TGMenu.cxx:1551
 TGMenu.cxx:1552
 TGMenu.cxx:1553
 TGMenu.cxx:1554
 TGMenu.cxx:1555
 TGMenu.cxx:1556
 TGMenu.cxx:1557
 TGMenu.cxx:1558
 TGMenu.cxx:1559
 TGMenu.cxx:1560
 TGMenu.cxx:1561
 TGMenu.cxx:1562
 TGMenu.cxx:1563
 TGMenu.cxx:1564
 TGMenu.cxx:1565
 TGMenu.cxx:1566
 TGMenu.cxx:1567
 TGMenu.cxx:1568
 TGMenu.cxx:1569
 TGMenu.cxx:1570
 TGMenu.cxx:1571
 TGMenu.cxx:1572
 TGMenu.cxx:1573
 TGMenu.cxx:1574
 TGMenu.cxx:1575
 TGMenu.cxx:1576
 TGMenu.cxx:1577
 TGMenu.cxx:1578
 TGMenu.cxx:1579
 TGMenu.cxx:1580
 TGMenu.cxx:1581
 TGMenu.cxx:1582
 TGMenu.cxx:1583
 TGMenu.cxx:1584
 TGMenu.cxx:1585
 TGMenu.cxx:1586
 TGMenu.cxx:1587
 TGMenu.cxx:1588
 TGMenu.cxx:1589
 TGMenu.cxx:1590
 TGMenu.cxx:1591
 TGMenu.cxx:1592
 TGMenu.cxx:1593
 TGMenu.cxx:1594
 TGMenu.cxx:1595
 TGMenu.cxx:1596
 TGMenu.cxx:1597
 TGMenu.cxx:1598
 TGMenu.cxx:1599
 TGMenu.cxx:1600
 TGMenu.cxx:1601
 TGMenu.cxx:1602
 TGMenu.cxx:1603
 TGMenu.cxx:1604
 TGMenu.cxx:1605
 TGMenu.cxx:1606
 TGMenu.cxx:1607
 TGMenu.cxx:1608
 TGMenu.cxx:1609
 TGMenu.cxx:1610
 TGMenu.cxx:1611
 TGMenu.cxx:1612
 TGMenu.cxx:1613
 TGMenu.cxx:1614
 TGMenu.cxx:1615
 TGMenu.cxx:1616
 TGMenu.cxx:1617
 TGMenu.cxx:1618
 TGMenu.cxx:1619
 TGMenu.cxx:1620
 TGMenu.cxx:1621
 TGMenu.cxx:1622
 TGMenu.cxx:1623
 TGMenu.cxx:1624
 TGMenu.cxx:1625
 TGMenu.cxx:1626
 TGMenu.cxx:1627
 TGMenu.cxx:1628
 TGMenu.cxx:1629
 TGMenu.cxx:1630
 TGMenu.cxx:1631
 TGMenu.cxx:1632
 TGMenu.cxx:1633
 TGMenu.cxx:1634
 TGMenu.cxx:1635
 TGMenu.cxx:1636
 TGMenu.cxx:1637
 TGMenu.cxx:1638
 TGMenu.cxx:1639
 TGMenu.cxx:1640
 TGMenu.cxx:1641
 TGMenu.cxx:1642
 TGMenu.cxx:1643
 TGMenu.cxx:1644
 TGMenu.cxx:1645
 TGMenu.cxx:1646
 TGMenu.cxx:1647
 TGMenu.cxx:1648
 TGMenu.cxx:1649
 TGMenu.cxx:1650
 TGMenu.cxx:1651
 TGMenu.cxx:1652
 TGMenu.cxx:1653
 TGMenu.cxx:1654
 TGMenu.cxx:1655
 TGMenu.cxx:1656
 TGMenu.cxx:1657
 TGMenu.cxx:1658
 TGMenu.cxx:1659
 TGMenu.cxx:1660
 TGMenu.cxx:1661
 TGMenu.cxx:1662
 TGMenu.cxx:1663
 TGMenu.cxx:1664
 TGMenu.cxx:1665
 TGMenu.cxx:1666
 TGMenu.cxx:1667
 TGMenu.cxx:1668
 TGMenu.cxx:1669
 TGMenu.cxx:1670
 TGMenu.cxx:1671
 TGMenu.cxx:1672
 TGMenu.cxx:1673
 TGMenu.cxx:1674
 TGMenu.cxx:1675
 TGMenu.cxx:1676
 TGMenu.cxx:1677
 TGMenu.cxx:1678
 TGMenu.cxx:1679
 TGMenu.cxx:1680
 TGMenu.cxx:1681
 TGMenu.cxx:1682
 TGMenu.cxx:1683
 TGMenu.cxx:1684
 TGMenu.cxx:1685
 TGMenu.cxx:1686
 TGMenu.cxx:1687
 TGMenu.cxx:1688
 TGMenu.cxx:1689
 TGMenu.cxx:1690
 TGMenu.cxx:1691
 TGMenu.cxx:1692
 TGMenu.cxx:1693
 TGMenu.cxx:1694
 TGMenu.cxx:1695
 TGMenu.cxx:1696
 TGMenu.cxx:1697
 TGMenu.cxx:1698
 TGMenu.cxx:1699
 TGMenu.cxx:1700
 TGMenu.cxx:1701
 TGMenu.cxx:1702
 TGMenu.cxx:1703
 TGMenu.cxx:1704
 TGMenu.cxx:1705
 TGMenu.cxx:1706
 TGMenu.cxx:1707
 TGMenu.cxx:1708
 TGMenu.cxx:1709
 TGMenu.cxx:1710
 TGMenu.cxx:1711
 TGMenu.cxx:1712
 TGMenu.cxx:1713
 TGMenu.cxx:1714
 TGMenu.cxx:1715
 TGMenu.cxx:1716
 TGMenu.cxx:1717
 TGMenu.cxx:1718
 TGMenu.cxx:1719
 TGMenu.cxx:1720
 TGMenu.cxx:1721
 TGMenu.cxx:1722
 TGMenu.cxx:1723
 TGMenu.cxx:1724
 TGMenu.cxx:1725
 TGMenu.cxx:1726
 TGMenu.cxx:1727
 TGMenu.cxx:1728
 TGMenu.cxx:1729
 TGMenu.cxx:1730
 TGMenu.cxx:1731
 TGMenu.cxx:1732
 TGMenu.cxx:1733
 TGMenu.cxx:1734
 TGMenu.cxx:1735
 TGMenu.cxx:1736
 TGMenu.cxx:1737
 TGMenu.cxx:1738
 TGMenu.cxx:1739
 TGMenu.cxx:1740
 TGMenu.cxx:1741
 TGMenu.cxx:1742
 TGMenu.cxx:1743
 TGMenu.cxx:1744
 TGMenu.cxx:1745
 TGMenu.cxx:1746
 TGMenu.cxx:1747
 TGMenu.cxx:1748
 TGMenu.cxx:1749
 TGMenu.cxx:1750
 TGMenu.cxx:1751
 TGMenu.cxx:1752
 TGMenu.cxx:1753
 TGMenu.cxx:1754
 TGMenu.cxx:1755
 TGMenu.cxx:1756
 TGMenu.cxx:1757
 TGMenu.cxx:1758
 TGMenu.cxx:1759
 TGMenu.cxx:1760
 TGMenu.cxx:1761
 TGMenu.cxx:1762
 TGMenu.cxx:1763
 TGMenu.cxx:1764
 TGMenu.cxx:1765
 TGMenu.cxx:1766
 TGMenu.cxx:1767
 TGMenu.cxx:1768
 TGMenu.cxx:1769
 TGMenu.cxx:1770
 TGMenu.cxx:1771
 TGMenu.cxx:1772
 TGMenu.cxx:1773
 TGMenu.cxx:1774
 TGMenu.cxx:1775
 TGMenu.cxx:1776
 TGMenu.cxx:1777
 TGMenu.cxx:1778
 TGMenu.cxx:1779
 TGMenu.cxx:1780
 TGMenu.cxx:1781
 TGMenu.cxx:1782
 TGMenu.cxx:1783
 TGMenu.cxx:1784
 TGMenu.cxx:1785
 TGMenu.cxx:1786
 TGMenu.cxx:1787
 TGMenu.cxx:1788
 TGMenu.cxx:1789
 TGMenu.cxx:1790
 TGMenu.cxx:1791
 TGMenu.cxx:1792
 TGMenu.cxx:1793
 TGMenu.cxx:1794
 TGMenu.cxx:1795
 TGMenu.cxx:1796
 TGMenu.cxx:1797
 TGMenu.cxx:1798
 TGMenu.cxx:1799
 TGMenu.cxx:1800
 TGMenu.cxx:1801
 TGMenu.cxx:1802
 TGMenu.cxx:1803
 TGMenu.cxx:1804
 TGMenu.cxx:1805
 TGMenu.cxx:1806
 TGMenu.cxx:1807
 TGMenu.cxx:1808
 TGMenu.cxx:1809
 TGMenu.cxx:1810
 TGMenu.cxx:1811
 TGMenu.cxx:1812
 TGMenu.cxx:1813
 TGMenu.cxx:1814
 TGMenu.cxx:1815
 TGMenu.cxx:1816
 TGMenu.cxx:1817
 TGMenu.cxx:1818
 TGMenu.cxx:1819
 TGMenu.cxx:1820
 TGMenu.cxx:1821
 TGMenu.cxx:1822
 TGMenu.cxx:1823
 TGMenu.cxx:1824
 TGMenu.cxx:1825
 TGMenu.cxx:1826
 TGMenu.cxx:1827
 TGMenu.cxx:1828
 TGMenu.cxx:1829
 TGMenu.cxx:1830
 TGMenu.cxx:1831
 TGMenu.cxx:1832
 TGMenu.cxx:1833
 TGMenu.cxx:1834
 TGMenu.cxx:1835
 TGMenu.cxx:1836
 TGMenu.cxx:1837
 TGMenu.cxx:1838
 TGMenu.cxx:1839
 TGMenu.cxx:1840
 TGMenu.cxx:1841
 TGMenu.cxx:1842
 TGMenu.cxx:1843
 TGMenu.cxx:1844
 TGMenu.cxx:1845
 TGMenu.cxx:1846
 TGMenu.cxx:1847
 TGMenu.cxx:1848
 TGMenu.cxx:1849
 TGMenu.cxx:1850
 TGMenu.cxx:1851
 TGMenu.cxx:1852
 TGMenu.cxx:1853
 TGMenu.cxx:1854
 TGMenu.cxx:1855
 TGMenu.cxx:1856
 TGMenu.cxx:1857
 TGMenu.cxx:1858
 TGMenu.cxx:1859
 TGMenu.cxx:1860
 TGMenu.cxx:1861
 TGMenu.cxx:1862
 TGMenu.cxx:1863
 TGMenu.cxx:1864
 TGMenu.cxx:1865
 TGMenu.cxx:1866
 TGMenu.cxx:1867
 TGMenu.cxx:1868
 TGMenu.cxx:1869
 TGMenu.cxx:1870
 TGMenu.cxx:1871
 TGMenu.cxx:1872
 TGMenu.cxx:1873
 TGMenu.cxx:1874
 TGMenu.cxx:1875
 TGMenu.cxx:1876
 TGMenu.cxx:1877
 TGMenu.cxx:1878
 TGMenu.cxx:1879
 TGMenu.cxx:1880
 TGMenu.cxx:1881
 TGMenu.cxx:1882
 TGMenu.cxx:1883
 TGMenu.cxx:1884
 TGMenu.cxx:1885
 TGMenu.cxx:1886
 TGMenu.cxx:1887
 TGMenu.cxx:1888
 TGMenu.cxx:1889
 TGMenu.cxx:1890
 TGMenu.cxx:1891
 TGMenu.cxx:1892
 TGMenu.cxx:1893
 TGMenu.cxx:1894
 TGMenu.cxx:1895
 TGMenu.cxx:1896
 TGMenu.cxx:1897
 TGMenu.cxx:1898
 TGMenu.cxx:1899
 TGMenu.cxx:1900
 TGMenu.cxx:1901
 TGMenu.cxx:1902
 TGMenu.cxx:1903
 TGMenu.cxx:1904
 TGMenu.cxx:1905
 TGMenu.cxx:1906
 TGMenu.cxx:1907
 TGMenu.cxx:1908
 TGMenu.cxx:1909
 TGMenu.cxx:1910
 TGMenu.cxx:1911
 TGMenu.cxx:1912
 TGMenu.cxx:1913
 TGMenu.cxx:1914
 TGMenu.cxx:1915
 TGMenu.cxx:1916
 TGMenu.cxx:1917
 TGMenu.cxx:1918
 TGMenu.cxx:1919
 TGMenu.cxx:1920
 TGMenu.cxx:1921
 TGMenu.cxx:1922
 TGMenu.cxx:1923
 TGMenu.cxx:1924
 TGMenu.cxx:1925
 TGMenu.cxx:1926
 TGMenu.cxx:1927
 TGMenu.cxx:1928
 TGMenu.cxx:1929
 TGMenu.cxx:1930
 TGMenu.cxx:1931
 TGMenu.cxx:1932
 TGMenu.cxx:1933
 TGMenu.cxx:1934
 TGMenu.cxx:1935
 TGMenu.cxx:1936
 TGMenu.cxx:1937
 TGMenu.cxx:1938
 TGMenu.cxx:1939
 TGMenu.cxx:1940
 TGMenu.cxx:1941
 TGMenu.cxx:1942
 TGMenu.cxx:1943
 TGMenu.cxx:1944
 TGMenu.cxx:1945
 TGMenu.cxx:1946
 TGMenu.cxx:1947
 TGMenu.cxx:1948
 TGMenu.cxx:1949
 TGMenu.cxx:1950
 TGMenu.cxx:1951
 TGMenu.cxx:1952
 TGMenu.cxx:1953
 TGMenu.cxx:1954
 TGMenu.cxx:1955
 TGMenu.cxx:1956
 TGMenu.cxx:1957
 TGMenu.cxx:1958
 TGMenu.cxx:1959
 TGMenu.cxx:1960
 TGMenu.cxx:1961
 TGMenu.cxx:1962
 TGMenu.cxx:1963
 TGMenu.cxx:1964
 TGMenu.cxx:1965
 TGMenu.cxx:1966
 TGMenu.cxx:1967
 TGMenu.cxx:1968
 TGMenu.cxx:1969
 TGMenu.cxx:1970
 TGMenu.cxx:1971
 TGMenu.cxx:1972
 TGMenu.cxx:1973
 TGMenu.cxx:1974
 TGMenu.cxx:1975
 TGMenu.cxx:1976
 TGMenu.cxx:1977
 TGMenu.cxx:1978
 TGMenu.cxx:1979
 TGMenu.cxx:1980
 TGMenu.cxx:1981
 TGMenu.cxx:1982
 TGMenu.cxx:1983
 TGMenu.cxx:1984
 TGMenu.cxx:1985
 TGMenu.cxx:1986
 TGMenu.cxx:1987
 TGMenu.cxx:1988
 TGMenu.cxx:1989
 TGMenu.cxx:1990
 TGMenu.cxx:1991
 TGMenu.cxx:1992
 TGMenu.cxx:1993
 TGMenu.cxx:1994
 TGMenu.cxx:1995
 TGMenu.cxx:1996
 TGMenu.cxx:1997
 TGMenu.cxx:1998
 TGMenu.cxx:1999
 TGMenu.cxx:2000
 TGMenu.cxx:2001
 TGMenu.cxx:2002
 TGMenu.cxx:2003
 TGMenu.cxx:2004
 TGMenu.cxx:2005
 TGMenu.cxx:2006
 TGMenu.cxx:2007
 TGMenu.cxx:2008
 TGMenu.cxx:2009
 TGMenu.cxx:2010
 TGMenu.cxx:2011
 TGMenu.cxx:2012
 TGMenu.cxx:2013
 TGMenu.cxx:2014
 TGMenu.cxx:2015
 TGMenu.cxx:2016
 TGMenu.cxx:2017
 TGMenu.cxx:2018
 TGMenu.cxx:2019
 TGMenu.cxx:2020
 TGMenu.cxx:2021
 TGMenu.cxx:2022
 TGMenu.cxx:2023
 TGMenu.cxx:2024
 TGMenu.cxx:2025
 TGMenu.cxx:2026
 TGMenu.cxx:2027
 TGMenu.cxx:2028
 TGMenu.cxx:2029
 TGMenu.cxx:2030
 TGMenu.cxx:2031
 TGMenu.cxx:2032
 TGMenu.cxx:2033
 TGMenu.cxx:2034
 TGMenu.cxx:2035
 TGMenu.cxx:2036
 TGMenu.cxx:2037
 TGMenu.cxx:2038
 TGMenu.cxx:2039
 TGMenu.cxx:2040
 TGMenu.cxx:2041
 TGMenu.cxx:2042
 TGMenu.cxx:2043
 TGMenu.cxx:2044
 TGMenu.cxx:2045
 TGMenu.cxx:2046
 TGMenu.cxx:2047
 TGMenu.cxx:2048
 TGMenu.cxx:2049
 TGMenu.cxx:2050
 TGMenu.cxx:2051
 TGMenu.cxx:2052
 TGMenu.cxx:2053
 TGMenu.cxx:2054
 TGMenu.cxx:2055
 TGMenu.cxx:2056
 TGMenu.cxx:2057
 TGMenu.cxx:2058
 TGMenu.cxx:2059
 TGMenu.cxx:2060
 TGMenu.cxx:2061
 TGMenu.cxx:2062
 TGMenu.cxx:2063
 TGMenu.cxx:2064
 TGMenu.cxx:2065
 TGMenu.cxx:2066
 TGMenu.cxx:2067
 TGMenu.cxx:2068
 TGMenu.cxx:2069
 TGMenu.cxx:2070
 TGMenu.cxx:2071
 TGMenu.cxx:2072
 TGMenu.cxx:2073
 TGMenu.cxx:2074
 TGMenu.cxx:2075
 TGMenu.cxx:2076
 TGMenu.cxx:2077
 TGMenu.cxx:2078
 TGMenu.cxx:2079
 TGMenu.cxx:2080
 TGMenu.cxx:2081
 TGMenu.cxx:2082
 TGMenu.cxx:2083
 TGMenu.cxx:2084
 TGMenu.cxx:2085
 TGMenu.cxx:2086
 TGMenu.cxx:2087
 TGMenu.cxx:2088
 TGMenu.cxx:2089
 TGMenu.cxx:2090
 TGMenu.cxx:2091
 TGMenu.cxx:2092
 TGMenu.cxx:2093
 TGMenu.cxx:2094
 TGMenu.cxx:2095
 TGMenu.cxx:2096
 TGMenu.cxx:2097
 TGMenu.cxx:2098
 TGMenu.cxx:2099
 TGMenu.cxx:2100
 TGMenu.cxx:2101
 TGMenu.cxx:2102
 TGMenu.cxx:2103
 TGMenu.cxx:2104
 TGMenu.cxx:2105
 TGMenu.cxx:2106
 TGMenu.cxx:2107
 TGMenu.cxx:2108
 TGMenu.cxx:2109
 TGMenu.cxx:2110
 TGMenu.cxx:2111
 TGMenu.cxx:2112
 TGMenu.cxx:2113
 TGMenu.cxx:2114
 TGMenu.cxx:2115
 TGMenu.cxx:2116
 TGMenu.cxx:2117
 TGMenu.cxx:2118
 TGMenu.cxx:2119
 TGMenu.cxx:2120
 TGMenu.cxx:2121
 TGMenu.cxx:2122
 TGMenu.cxx:2123
 TGMenu.cxx:2124
 TGMenu.cxx:2125
 TGMenu.cxx:2126
 TGMenu.cxx:2127
 TGMenu.cxx:2128
 TGMenu.cxx:2129
 TGMenu.cxx:2130
 TGMenu.cxx:2131
 TGMenu.cxx:2132
 TGMenu.cxx:2133
 TGMenu.cxx:2134
 TGMenu.cxx:2135
 TGMenu.cxx:2136
 TGMenu.cxx:2137
 TGMenu.cxx:2138
 TGMenu.cxx:2139
 TGMenu.cxx:2140
 TGMenu.cxx:2141
 TGMenu.cxx:2142
 TGMenu.cxx:2143
 TGMenu.cxx:2144
 TGMenu.cxx:2145
 TGMenu.cxx:2146
 TGMenu.cxx:2147
 TGMenu.cxx:2148
 TGMenu.cxx:2149
 TGMenu.cxx:2150
 TGMenu.cxx:2151
 TGMenu.cxx:2152
 TGMenu.cxx:2153
 TGMenu.cxx:2154
 TGMenu.cxx:2155
 TGMenu.cxx:2156
 TGMenu.cxx:2157
 TGMenu.cxx:2158
 TGMenu.cxx:2159
 TGMenu.cxx:2160
 TGMenu.cxx:2161
 TGMenu.cxx:2162
 TGMenu.cxx:2163
 TGMenu.cxx:2164
 TGMenu.cxx:2165
 TGMenu.cxx:2166
 TGMenu.cxx:2167
 TGMenu.cxx:2168
 TGMenu.cxx:2169
 TGMenu.cxx:2170
 TGMenu.cxx:2171
 TGMenu.cxx:2172
 TGMenu.cxx:2173
 TGMenu.cxx:2174
 TGMenu.cxx:2175
 TGMenu.cxx:2176
 TGMenu.cxx:2177
 TGMenu.cxx:2178
 TGMenu.cxx:2179
 TGMenu.cxx:2180
 TGMenu.cxx:2181
 TGMenu.cxx:2182
 TGMenu.cxx:2183
 TGMenu.cxx:2184
 TGMenu.cxx:2185
 TGMenu.cxx:2186
 TGMenu.cxx:2187
 TGMenu.cxx:2188
 TGMenu.cxx:2189
 TGMenu.cxx:2190
 TGMenu.cxx:2191
 TGMenu.cxx:2192
 TGMenu.cxx:2193
 TGMenu.cxx:2194
 TGMenu.cxx:2195
 TGMenu.cxx:2196
 TGMenu.cxx:2197
 TGMenu.cxx:2198
 TGMenu.cxx:2199
 TGMenu.cxx:2200
 TGMenu.cxx:2201
 TGMenu.cxx:2202
 TGMenu.cxx:2203
 TGMenu.cxx:2204
 TGMenu.cxx:2205
 TGMenu.cxx:2206
 TGMenu.cxx:2207
 TGMenu.cxx:2208
 TGMenu.cxx:2209
 TGMenu.cxx:2210
 TGMenu.cxx:2211
 TGMenu.cxx:2212
 TGMenu.cxx:2213
 TGMenu.cxx:2214
 TGMenu.cxx:2215
 TGMenu.cxx:2216
 TGMenu.cxx:2217
 TGMenu.cxx:2218
 TGMenu.cxx:2219
 TGMenu.cxx:2220
 TGMenu.cxx:2221
 TGMenu.cxx:2222
 TGMenu.cxx:2223
 TGMenu.cxx:2224
 TGMenu.cxx:2225
 TGMenu.cxx:2226
 TGMenu.cxx:2227
 TGMenu.cxx:2228
 TGMenu.cxx:2229
 TGMenu.cxx:2230
 TGMenu.cxx:2231
 TGMenu.cxx:2232
 TGMenu.cxx:2233
 TGMenu.cxx:2234
 TGMenu.cxx:2235
 TGMenu.cxx:2236
 TGMenu.cxx:2237
 TGMenu.cxx:2238
 TGMenu.cxx:2239
 TGMenu.cxx:2240
 TGMenu.cxx:2241
 TGMenu.cxx:2242
 TGMenu.cxx:2243
 TGMenu.cxx:2244
 TGMenu.cxx:2245
 TGMenu.cxx:2246
 TGMenu.cxx:2247
 TGMenu.cxx:2248
 TGMenu.cxx:2249
 TGMenu.cxx:2250
 TGMenu.cxx:2251
 TGMenu.cxx:2252
 TGMenu.cxx:2253
 TGMenu.cxx:2254
 TGMenu.cxx:2255
 TGMenu.cxx:2256
 TGMenu.cxx:2257
 TGMenu.cxx:2258
 TGMenu.cxx:2259
 TGMenu.cxx:2260
 TGMenu.cxx:2261
 TGMenu.cxx:2262
 TGMenu.cxx:2263
 TGMenu.cxx:2264
 TGMenu.cxx:2265
 TGMenu.cxx:2266
 TGMenu.cxx:2267
 TGMenu.cxx:2268
 TGMenu.cxx:2269
 TGMenu.cxx:2270
 TGMenu.cxx:2271
 TGMenu.cxx:2272
 TGMenu.cxx:2273
 TGMenu.cxx:2274
 TGMenu.cxx:2275
 TGMenu.cxx:2276
 TGMenu.cxx:2277
 TGMenu.cxx:2278
 TGMenu.cxx:2279
 TGMenu.cxx:2280
 TGMenu.cxx:2281
 TGMenu.cxx:2282
 TGMenu.cxx:2283
 TGMenu.cxx:2284
 TGMenu.cxx:2285
 TGMenu.cxx:2286
 TGMenu.cxx:2287
 TGMenu.cxx:2288
 TGMenu.cxx:2289
 TGMenu.cxx:2290
 TGMenu.cxx:2291
 TGMenu.cxx:2292
 TGMenu.cxx:2293
 TGMenu.cxx:2294
 TGMenu.cxx:2295
 TGMenu.cxx:2296