ROOT logo
// @(#)root/eve:$Id: TEveWindow.cxx 32138 2010-01-28 15:16:30Z matevz $
// Author: Matevz Tadel 2007

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

#include "TEveWindow.h"
#include "TEveWindowManager.h"
#include "TEveManager.h"
#include "TEveSelection.h"

#include "THashList.h"
#include "TContextMenu.h"

#include "TGButton.h"
#include "TContextMenu.h"
#include "TGMenu.h"
#include "TGPack.h"
#include "TGTab.h"

#include <cassert>

//==============================================================================
//==============================================================================
// CompositeFrame classes - slots for TEveWindows
//==============================================================================
//==============================================================================


//==============================================================================
// TEveCompositeFrame
//==============================================================================

//______________________________________________________________________________
//
// Abstract base-class for frame-slots that encompass EVE-windows
// (sub-classes of TEveWindow).
//
// The EVE-frame classes are managed by their embedded EVE-windows and
// mostly serve as an interface to particular ROOT widgets
// (sub-classes of TGCompositeFrame) they are embedded into.
//
// This base-class, a sub-class of a vertical composite-frame, creates
// also the title-bar which can be used to interact with the embedded
// window. Optionally, the title-bar can be replaced with a mini-bar
// (a 4-pixel thin bar at the top). By clicking on the mini-bar, the
// title-bar is restored.
//
// Sub-classes provide for specific behaviour and expectations of
// individual ROOT GUI container frames.
//
//
// POSSIBLE EXTENSIONS
//
// No frame is drawn around this composite-frame - frame style could be
// available as a (static) member.
//
// Menus of embedded windows could also be managed - hidden or transposed
// to a top-level menubar.

ClassImp(TEveCompositeFrame);

TContextMenu* TEveCompositeFrame::fgCtxMenu = 0;

const TString TEveCompositeFrame::fgkEmptyFrameName("<relinquished>");
TList*        TEveCompositeFrame::fgFrameList = new THashList;

TEveCompositeFrame::IconBarCreator_foo TEveCompositeFrame::fgIconBarCreator = 0;

UInt_t             TEveCompositeFrame::fgTopFrameHeight        = 14;
UInt_t             TEveCompositeFrame::fgMiniBarHeight         = 4;
Bool_t             TEveCompositeFrame::fgAllowTopFrameCollapse = kTRUE;

//______________________________________________________________________________
void TEveCompositeFrame::SetupFrameMarkup(IconBarCreator_foo creator,
                                          UInt_t top_frame_height,
                                          UInt_t mini_bar_height,
                                          Bool_t allow_top_collapse)
{
   // Set properties of the EVE frame.
   // Should be called before the windows are created.

   fgIconBarCreator        = creator;
   fgTopFrameHeight        = top_frame_height;
   fgMiniBarHeight         = mini_bar_height;
   fgAllowTopFrameCollapse = allow_top_collapse;
}

//______________________________________________________________________________
TEveCompositeFrame::TEveCompositeFrame(TGCompositeFrame* parent,
                                       TEveWindow*   eve_parent) :
   TGCompositeFrame (parent, 0, 0, kVerticalFrame),

   fTopFrame    (0),
   fToggleBar   (0),
   fTitleBar    (0),
   fIconBar     (0),
   fEveWindowLH (0),

   fMiniBar     (0),

   fEveParent   (eve_parent),
   fEveWindow   (0),

   fShowInSync  (kTRUE)
{
   // Constructor.

   fTopFrame = new TGHorizontalFrame(this, 20, fgTopFrameHeight);

   if (fgAllowTopFrameCollapse)
   {
      fToggleBar = new TGTextButton(fTopFrame, "Hide");
      fToggleBar->ChangeOptions(kRaisedFrame);
      fToggleBar->Resize(40, fgTopFrameHeight);
      fToggleBar->Connect("Clicked()", "TEveCompositeFrame", this, "FlipTitleBarState()");
      fTopFrame->AddFrame(fToggleBar, new TGLayoutHints(kLHintsNormal));
   }

   fTitleBar = new TGTextButton(fTopFrame, "Title Bar");
   fTitleBar->ChangeOptions(kRaisedFrame);
   fTitleBar->Resize(40, fgTopFrameHeight);
   fTitleBar->Connect("Clicked()", "TEveCompositeFrame", this, "TitleBarClicked()");
   fTopFrame->AddFrame(fTitleBar, new TGLayoutHints(kLHintsNormal | kLHintsExpandX));

   if (fgIconBarCreator)
   {
      fIconBar = (fgIconBarCreator)(this, fTopFrame, fgTopFrameHeight);
   }
   else
   {
      TGButton* b = new TGTextButton(fTopFrame, "Actions");
      b->ChangeOptions(kRaisedFrame);
      b->Resize(40, fgTopFrameHeight);
      b->Connect("Pressed()", "TEveCompositeFrame", this, "ActionPressed()");
      fIconBar = b;
   }
   fTopFrame->AddFrame(fIconBar, new TGLayoutHints(kLHintsNormal));

   AddFrame(fTopFrame, new TGLayoutHints(kLHintsNormal | kLHintsExpandX));

   // --- MiniBar
   if (fgAllowTopFrameCollapse)
   {
      fMiniBar = new TGButton(this);
      fMiniBar->ChangeOptions(kRaisedFrame | kFixedHeight);
      fMiniBar->Resize(20, fgMiniBarHeight);
      fMiniBar->SetBackgroundColor(TEveWindow::GetMiniBarBackgroundColor());
      fMiniBar->Connect("Clicked()", "TEveCompositeFrame", this, "FlipTitleBarState()");
      AddFrame(fMiniBar, new TGLayoutHints(kLHintsNormal | kLHintsExpandX));
   }

   // --- Common settings.

   fTopFrame->SetCleanup(kLocalCleanup);
   SetCleanup(kLocalCleanup);

   MapSubwindows();
   HideFrame(fMiniBar);
   SetMapSubwindows(kFALSE);

   // Layout for embedded windows.
   fEveWindowLH = new TGLayoutHints(kLHintsNormal | kLHintsExpandX | kLHintsExpandY);

   // !!! The following should actually be done somewhere else, in
   // some not-yet-existing static method of TEveWindow. Right now the
   // eve-frame-creation code is still a little bit everywhere.
   if (fEveParent == 0)
      fEveParent = gEve->GetWindowManager();

   fgFrameList->Add(this);
}

//______________________________________________________________________________
TEveCompositeFrame::~TEveCompositeFrame()
{
   // If fEveWindow != 0 we are being deleted from the ROOT GUI side.
   // Relinquishe EveWindow and ref-counting should do the rest.

   fgFrameList->Remove(this);

   if (fEveWindow != 0)
   {
      if (gDebug > 0)
         Info("TEveCompositeFrame::~TEveCompositeFrame",
              "EveWindow not null '%s', relinquishing it now.",
              fEveWindow->GetElementName());

      fEveWindow->ClearEveFrame();
      RelinquishEveWindow();
   }

   delete fEveWindowLH;
}

//==============================================================================

//______________________________________________________________________________
void TEveCompositeFrame::WindowNameChanged(const TString& name)
{
   // Update widgets using window's name or title.

   fTitleBar->SetText(name);
}

//==============================================================================

//______________________________________________________________________________
void TEveCompositeFrame::AcquireEveWindow(TEveWindow* ew)
{
   // Accept window and increase its deny-destroy count.
   // Window's gui-frame is embedded and mapped.
   // Layout is not called.
   //
   // Throws an exception if a window is already embedded or if 0 is
   // passed as an argument.

   // Replace current eve-window with the given one.
   // Current GUI window is unmapped, removed and reparented to default-root.
   // New GUI window is reparented to this, added and mapped.

   static const TEveException eh("TEveCompositeFrame::AcquireEveWindow ");

   if (fEveWindow)
      throw eh + "Window already set.";

   if (ew == 0)
      throw eh + "Called with 0 argument.";

   fEveWindow = ew;

   fEveWindow->IncDenyDestroy();
   TGFrame* gui_frame = fEveWindow->GetGUIFrame();
   gui_frame->ReparentWindow(this);
   AddFrame(gui_frame, fEveWindowLH);
   fEveWindow->PostDock();
   gui_frame->MapWindow();

   SetCurrent(fEveWindow->IsCurrent());
   SetShowTitleBar(fEveWindow->GetShowTitleBar());
   WindowNameChanged(fEveWindow->GetElementName());
}

//______________________________________________________________________________
TEveWindow* TEveCompositeFrame::RelinquishEveWindow(Bool_t reparent)
{
   // Remove window and decrease its deny-destroy count.
   // Window's gui-frame is unmapped, removed and, if reparent flag is
   // true (default), reparented to default-root.

   TEveWindow* ex_ew = fEveWindow;

   if (fEveWindow)
   {
      TGFrame* gui_frame = fEveWindow->GetGUIFrame();
      gui_frame->UnmapWindow();
      fEveWindow->PreUndock();
      RemoveFrame(gui_frame);
      if (reparent)
         gui_frame->ReparentWindow(fClient->GetDefaultRoot());
      fEveWindow->DecDenyDestroy();
      fEveWindow = 0;
      SetCurrent(kFALSE);
      WindowNameChanged(fgkEmptyFrameName);
   }

   return ex_ew;
}

//______________________________________________________________________________
TEveWindow* TEveCompositeFrame::GetEveParentAsWindow() const
{
   // Returns eve-parent dynamic-casted to TEveWindow.

   return dynamic_cast<TEveWindow*>(fEveParent);
}

//______________________________________________________________________________
void TEveCompositeFrame::SetCurrent(Bool_t curr)
{
   // Set current state of this frame.
   // This is called by the management functions in TEveWindow.

   if (curr) {
      fTitleBar->SetBackgroundColor(TEveWindow::GetCurrentBackgroundColor());
   } else {
      fTitleBar->SetBackgroundColor(GetDefaultFrameBackground());
   }
   fClient->NeedRedraw(fTitleBar);
}

//______________________________________________________________________________
void TEveCompositeFrame::SetShowTitleBar(Bool_t show)
{
   // Set state of title-bar. This toggles between the display of the full
   // title-bar and 4-pixel-high mini-bar.

   if (show) {
      HideFrame(fMiniBar);
      ShowFrame(fTopFrame);
   } else {
      HideFrame(fTopFrame);
      ShowFrame(fMiniBar);
   }

   fShowInSync = show == fEveWindow->GetShowTitleBar();
}

//______________________________________________________________________________
void TEveCompositeFrame::HideAllDecorations()
{
   // Hide title-bar and mini-bar.

   HideFrame(fTopFrame);
   HideFrame(fMiniBar);

   fShowInSync = kFALSE;
}

//______________________________________________________________________________
void TEveCompositeFrame::ShowNormalDecorations()
{
   // Show title-bar or mini-bar, as dictated by the window.

   SetShowTitleBar(fEveWindow->GetShowTitleBar());
}

//______________________________________________________________________________
void TEveCompositeFrame::ActionPressed()
{
   // The action-button of the title-bar was pressed.
   // This opens context menu of the eve-window.

   if (fgCtxMenu == 0) {
      fgCtxMenu = new TContextMenu("", "");
   }

   Int_t    x, y;
   UInt_t   w, h;
   Window_t childdum;
   gVirtualX->GetWindowSize(fIconBar->GetId(), x, y, w, h);
   gVirtualX->TranslateCoordinates(fIconBar->GetId(),
                                   gClient->GetDefaultRoot()->GetId(),
                                   0, 0, x, y, childdum);

   fgCtxMenu->Popup(x - 2, y + h - 2, fEveWindow);
}

//______________________________________________________________________________
void TEveCompositeFrame::FlipTitleBarState()
{
   // Change display-state of the title-bar / mini-bar.
   // This function is used as a slot and passes the call to eve-window.

   if (fShowInSync)
      fEveWindow->FlipShowTitleBar();
   else
      SetShowTitleBar(fEveWindow->GetShowTitleBar());
}

//______________________________________________________________________________
void TEveCompositeFrame::TitleBarClicked()
{
   // Slot for mouse-click on the central part of the title-bar.
   // The call is passed to eve-window.

   fEveWindow->TitleBarClicked();
}


//==============================================================================
// TEveCompositeFrameInMainFrame
//==============================================================================

//______________________________________________________________________________
//
// An EVE window-slot contained within a TGMainFrame.

ClassImp(TEveCompositeFrameInMainFrame);

//______________________________________________________________________________
TEveCompositeFrameInMainFrame::TEveCompositeFrameInMainFrame(TGCompositeFrame* parent,
                                                             TEveWindow*  eve_parent,
                                                             TGMainFrame* mf) :
   TEveCompositeFrame(parent, eve_parent),
   fMainFrame         (mf),
   fOriginalSlot      (0),
   fOriginalContainer (0)
{
   // Constructor.

   fMainFrame->Connect("CloseWindow()", "TEveCompositeFrameInMainFrame", this, "MainFrameClosed()");
   gEve->GetWindowManager()->Connect("WindowDeleted(TEveWindow*)", "TEveCompositeFrameInMainFrame", this, "SomeWindowClosed(TEveWindow*)");
}

//______________________________________________________________________________
TEveCompositeFrameInMainFrame::~TEveCompositeFrameInMainFrame()
{
   // Destructor.

   if (gDebug > 0)
      Info("~TEveCompositeFrameInMainFrame", "Destructor.");

   // MainFrames get deleted with a time-out. So, during EVE manager
   // shutdown, it might happen that this gets called when gEve is null.
   if (gEve && gEve->GetWindowManager())
   {
      gEve->GetWindowManager()->Disconnect("WindowDeleted(TEveWindow*)", this, "SomeWindowClosed(TEveWindow*)");
   }
   else
   {
      Info("~TEveCompositeFrameInMainFrame", "gEve null - OK if it was terminated.");
   }
}

//______________________________________________________________________________
void TEveCompositeFrameInMainFrame::WindowNameChanged(const TString& name)
{
   // Update widgets using window's name or title.

   fMainFrame->SetWindowName(name);

   TEveCompositeFrame::WindowNameChanged(name);
}

//______________________________________________________________________________
void TEveCompositeFrameInMainFrame::Destroy()
{
   // Virtual function called from eve side when the frame should be
   // destroyed. This means we expect that fEveWindow is null.
   //
   // We simply call CloseWindow() on the main-frame which will in
   // turn generate the "CloseWindow()" signal.
   // This is then handled in MainFrameClosed().

   if (gDebug > 0)
      Info("TEveCompositeFrameInMainFrame::Destroy()",
           "Propagating call to main-frame.");

   assert (fEveWindow == 0);

   fMainFrame->CloseWindow();
}

//______________________________________________________________________________
void TEveCompositeFrameInMainFrame::SetOriginalSlotAndContainer(TEveWindow* slot,
                                                                TEveWindow* container)
{
   // Set the container where to return the contained window on destruction.

   static const TEveException kEH("TEveCompositeFrameInMainFrame::SetOriginalSlotAndContainer ");

   if (container && ! container->CanMakeNewSlots())
      throw kEH + "Given window can not make new slots.";

   fOriginalSlot      = slot;
   fOriginalContainer = container;
}

//______________________________________________________________________________
void TEveCompositeFrameInMainFrame::SomeWindowClosed(TEveWindow* w)
{
   // Slot called when a window is closed ... we check that this was
   // not our original container.

   if (w == fOriginalSlot)
      fOriginalSlot = 0;

   if (w == fOriginalContainer)
      fOriginalContainer = 0;
}

//______________________________________________________________________________
void TEveCompositeFrameInMainFrame::MainFrameClosed()
{
   // Slot for main-frame's "CloseWindow()" signal.
   // If an eve window is still present, it will be put into:
   //   - original-container, if it is set;
   ///  - into window-managers default-container.

   if (fEveWindow != 0)
   {
      TEveWindow* swapCandidate = 0;
      if (fOriginalSlot)
      {
         // if use pack, show hidden slot
         TEveCompositeFrameInPack* packFrame = dynamic_cast<TEveCompositeFrameInPack*>(fOriginalSlot->GetEveFrame());
         if (packFrame) {
            TGPack* pack = (TGPack*)(packFrame->GetParent());
            pack->ShowFrame(packFrame);
         }
         swapCandidate = fOriginalSlot;
      }
      else if (fOriginalContainer)
      {
         swapCandidate = fOriginalContainer->NewSlot();
      }
      else if (gEve->GetWindowManager()->HasDefaultContainer())
      {
         swapCandidate =  gEve->GetWindowManager()->GetDefaultContainer()->NewSlot();
      }

      if (swapCandidate)
      {
         TEveWindow::SwapWindows(fEveWindow, swapCandidate);
         gEve->GetWindowManager()->WindowDocked(fEveWindow );
      }
   }

   fMainFrame->DontCallClose();

   if (fEveWindow != 0)
      fEveWindow->DestroyWindowAndSlot();

   if (gDebug > 0)
      Info("TEveCompositeFrameInMainFrame::MainFrameClosed()",
           "Expecting destructor call soon.");
}


//==============================================================================
// TEveCompositeFrameInPack
//==============================================================================

//______________________________________________________________________________
//
// An EVE window-slot contained within one frame of a TGPack.

ClassImp(TEveCompositeFrameInPack);

//______________________________________________________________________________
TEveCompositeFrameInPack::TEveCompositeFrameInPack(TGCompositeFrame* parent,
                                                   TEveWindow* eve_parent,
                                                   TGPack*     pack) :
   TEveCompositeFrame(parent, eve_parent),
   fPack (pack)
{
   // Constructor.
}

//______________________________________________________________________________
TEveCompositeFrameInPack::~TEveCompositeFrameInPack()
{
   // Destructor.
}

//______________________________________________________________________________
void TEveCompositeFrameInPack::Destroy()
{
   // Virtual function called from eve side when the frame should be
   // destroyed. This means we expect that fEveWindow is null.
   //
   // Remove the frame from pack and delete it.

   if (gDebug > 0)
      Info("TEveCompositeFrameInPack::Destroy()", "Removing from pack and deleting.");

   assert(fEveWindow == 0);

   fPack->RemoveFrame(this);
   delete this;
}

//==============================================================================
// TEveCompositeFrameInTab
//==============================================================================

//______________________________________________________________________________
//
// An EVE window-slot contained within one tab of a TGTab.

ClassImp(TEveCompositeFrameInTab);

//______________________________________________________________________________
TEveCompositeFrameInTab::TEveCompositeFrameInTab(TGCompositeFrame* parent,
                                                 TEveWindow* eve_parent,
                                                 TGTab*      tab) :
   TEveCompositeFrame(parent, eve_parent),
   fTab         (tab),
   fParentInTab (parent)
{
   // Constructor.
}

//______________________________________________________________________________
TEveCompositeFrameInTab::~TEveCompositeFrameInTab()
{
   // Destructor.
}

//______________________________________________________________________________
void TEveCompositeFrameInTab::WindowNameChanged(const TString& name)
{
   // Update widgets using window's name or title.

   Int_t t = FindTabIndex();
   fTab->GetTabTab(t)->SetText(new TGString(name));
   fTab->Layout();

   TEveCompositeFrame::WindowNameChanged(name);
}

//______________________________________________________________________________
Int_t TEveCompositeFrameInTab::FindTabIndex()
{
   // Return index of this frame in the tab.
   // Throws an exception if it is not found.

   static const TEveException eh("TEveCompositeFrameInTab::FindTabIndex ");

   Int_t nt = fTab->GetNumberOfTabs();
   for (Int_t t = 0; t < nt; ++t)
   {
      if (fTab->GetTabContainer(t) == fParentInTab)
      {
         return t;
      }
   }

   throw eh + "parent frame not found in tab.";
}

//______________________________________________________________________________
void TEveCompositeFrameInTab::Destroy()
{
   // Virtual function called from eve side when the frame should be
   // destroyed. This means we expect that fEveWindow is null.
   //
   // Remove the frame from tab and delete it.

   if (gDebug > 0)
      Info("TEveCompositeFrameInTab::Destroy()", "Removing from tab and deleting.");

   assert (fEveWindow == 0);

   Int_t t = FindTabIndex();

   // disconnect form Removed() if / when connected
   fTab->RemoveTab(t, kFALSE);
   fParentInTab->DestroyWindow();
   fParentInTab->SetCleanup(kNoCleanup);
   delete fParentInTab;
   delete this;
}

//______________________________________________________________________________
void TEveCompositeFrameInTab::SetCurrent(Bool_t curr)
{
   // Set current state of this frame.
   // Virtual from TEveCompositeFrame.

   TEveCompositeFrame::SetCurrent(curr);

   Int_t t = FindTabIndex();
   TGTabElement* te = fTab->GetTabTab(t);
   if (curr) {
      te->SetBackgroundColor(TEveWindow::GetCurrentBackgroundColor());
   } else {
      te->SetBackgroundColor(GetDefaultFrameBackground());
   }
   fClient->NeedRedraw(te);
}


//==============================================================================
//==============================================================================
// TEveWindow classes
//==============================================================================
//==============================================================================


//==============================================================================
// TEveWindow
//==============================================================================

//______________________________________________________________________________
//
// Abstract base-class for representing eve-windows.
// Sub-classes define a particular GUI frame that gets show
// in the window.
//

ClassImp(TEveWindow);

UInt_t      TEveWindow::fgMainFrameDefWidth  = 640;
UInt_t      TEveWindow::fgMainFrameDefHeight = 480;
Pixel_t     TEveWindow::fgCurrentBackgroundColor = 0x80A0C0;
Pixel_t     TEveWindow::fgMiniBarBackgroundColor = 0x80C0A0;

//______________________________________________________________________________
TEveWindow::TEveWindow(const char* n, const char* t) :
   TEveElementList(n, t),

   fEveFrame     (0),
   fShowTitleBar (kTRUE)
{
   // Constructor.

   // Override from TEveElementList.
   fChildClass = TEveWindow::Class();
}

//______________________________________________________________________________
TEveWindow::~TEveWindow()
{
   // Destructor.

   if (gDebug > 0)
      Info("~TEveWindow", "name='%s', deny-destroy=%d.",
           GetElementName(), fDenyDestroy);
}

//______________________________________________________________________________
void TEveWindow::PreDeleteElement()
{
   // Called before the element is deleted, thus offering the last chance
   // to detach from acquired resources and from the framework itself.
   // Here the request is just passed to TEveManager.
   // If you override it, make sure to call base-class version.

   gEve->GetWindowManager()->DeleteWindow(this);
   TEveElementList::PreDeleteElement();
}

//==============================================================================

//______________________________________________________________________________
void TEveWindow::PreUndock()
{
   // Virtual function called before a window is undocked.

   for (List_ci i=fChildren.begin(); i!=fChildren.end(); ++i)
   {
      TEveWindow* w = dynamic_cast<TEveWindow*>(*i);
      if (w)
         w->PreUndock();
   }
}

//______________________________________________________________________________
void TEveWindow::PostDock()
{
   // Virtual function called after a window is docked.

   for (List_ci i=fChildren.begin(); i!=fChildren.end(); ++i)
   {
      TEveWindow* w = dynamic_cast<TEveWindow*>(*i);
      if (w)
         w->PostDock();
   }
}

//==============================================================================

//______________________________________________________________________________
void TEveWindow::NameTitleChanged()
{
   // Name or title of the window changed - propagate to frames.
   // Virtual from TEveElement.

   fEveFrame->WindowNameChanged(GetElementName());
}

//______________________________________________________________________________
void TEveWindow::PopulateEmptyFrame(TEveCompositeFrame* ef)
{
   // Populate given frame-slot - intended for initial population
   // of a new slot or low-level window-swapping.
   // No layout or window-mapping is done.

   ef->fEveParent->AddElement(this);
   ef->AcquireEveWindow(this);
   fEveFrame = ef;
}

//______________________________________________________________________________
void TEveWindow::SwapWindow(TEveWindow* w)
{
   // Swap frames with the given window.

   static const TEveException eh("TEveWindow::SwapWindow ");

   if (w == 0)
      throw eh + "Called with null argument.";

   SwapWindows(this, w);
}

//______________________________________________________________________________
void TEveWindow::SwapWindowWithCurrent()
{
   // Swap frames with the current window.

   static const TEveException eh("TEveWindow::SwapWindowWithCurrent ");

   TEveWindow* current = gEve->GetWindowManager()->GetCurrentWindow();

   if (current == 0)
      throw eh + "Current eve-window is not set.";

   if (current == this)
      throw eh + "This is the current window ... nothing changed.";

   SwapWindows(this, current);
}

//______________________________________________________________________________
void TEveWindow::UndockWindow()
{
   // Undock the window - put it into a dedicated main-frame.

   TEveWindow* return_cont = fEveFrame->GetEveParentAsWindow();
   if (return_cont && ! return_cont->CanMakeNewSlots())
      return_cont = 0;

   // hide slot if in pack
   TEveCompositeFrameInPack* packFrame = dynamic_cast<TEveCompositeFrameInPack*>(fEveFrame);
   if (packFrame) {
      TGPack* pack = (TGPack*)(packFrame->GetParent());
      pack->HideFrame(fEveFrame);
   }

   TEveWindowSlot* ew_slot = TEveWindow::CreateWindowMainFrame(0);

   TEveWindow::SwapWindows(ew_slot, this);

   ((TEveCompositeFrameInMainFrame*) fEveFrame)->
      SetOriginalSlotAndContainer(ew_slot, return_cont);

   gEve->GetWindowManager()->WindowUndocked(this );
}

//______________________________________________________________________________
void TEveWindow::UndockWindowDestroySlot()
{
   // Undock the window - put it into a dedicated main-frame.
   // The old window slot is destroyed.

   TEveWindow* return_cont = fEveFrame->GetEveParentAsWindow();
   if (return_cont && ! return_cont->CanMakeNewSlots())
      return_cont = 0;

   TEveWindowSlot* ew_slot = TEveWindow::CreateWindowMainFrame(0);

   TEveWindow::SwapWindows(ew_slot, this);

   ((TEveCompositeFrameInMainFrame*) fEveFrame)->
      SetOriginalSlotAndContainer(0, return_cont);

   ew_slot->DestroyWindowAndSlot();

   gEve->GetWindowManager()->WindowUndocked(this);
}

//______________________________________________________________________________
void TEveWindow::ReplaceWindow(TEveWindow* w)
{
   // Replace this window with the passed one.
   // Eve parentship is properly handled.
   // This will most likely lead to the destruction of this window.
   // Layout is called on the frame.

   fEveFrame->RelinquishEveWindow();

   fEveFrame->fEveParent->AddElement(w);
   fEveFrame->AcquireEveWindow(w);
   w->fEveFrame = fEveFrame;

   fEveFrame->fEveParent->RemoveElement(this);

   w->fEveFrame->Layout();
}

//______________________________________________________________________________
void TEveWindow::DestroyWindow()
{
   // Destroy eve-window - replace it with an empty frame-slot.

   if (gDebug > 0)
      Info("TEveWindow::DestroyWindow()", "name='%s', class='%s', deny-destroy=%d.",
           GetElementName(), ClassName(), fDenyDestroy);

   if (fEveFrame != 0 && fDenyDestroy == 1)
   {
      TEveWindowSlot* ew_slot = TEveWindow::CreateDefaultWindowSlot();

      fEveFrame->UnmapWindow();

      Bool_t dozrc = fDestroyOnZeroRefCnt;
      fDestroyOnZeroRefCnt = kFALSE;

      fEveFrame->RelinquishEveWindow();
      ew_slot->PopulateEmptyFrame(fEveFrame);
      fEveFrame->fEveParent->RemoveElement(this);

      fDestroyOnZeroRefCnt = dozrc;

      fEveFrame->Layout();
      fEveFrame->MapWindow();
      fEveFrame = 0;
   }

   TEveElementList::Destroy();
}

//______________________________________________________________________________
void TEveWindow::DestroyWindowAndSlot()
{
   // Destroy eve-window and its frame-slot.

   if (gDebug > 0)
      Info("TEveWindow::DestroyWindowAndSlot()", "'name=%s', class= '%s', deny-destroy=%d.",
           GetElementName(), ClassName(), fDenyDestroy);

   if (fEveFrame != 0 && fDenyDestroy == 1)
   {
      fEveFrame->RelinquishEveWindow();
      fEveFrame->Destroy();
      fEveFrame = 0;
   }

   TEveElementList::Destroy();
}

//______________________________________________________________________________
void TEveWindow::ClearEveFrame()
{
   // Clears eve-frame associated with this window.
   // This is used in special case when the window is embedded in a foreign
   // GUI container and gets deleted from this side.
   // In particular, this happens when TRootBrowser closes a tab.

   fEveFrame = 0;
}

//______________________________________________________________________________
void TEveWindow::SetShowTitleBar(Bool_t x)
{
   // Set display state of the title-bar.
   // This is forwarded to eve-frame.

   if (fShowTitleBar == x)
      return;

   fShowTitleBar = x;
   fEveFrame->SetShowTitleBar(fShowTitleBar);
   fEveFrame->Layout();
}

//______________________________________________________________________________
Bool_t TEveWindow::IsCurrent() const
{
   // Returns true if this window is the current one.

   return gEve->GetWindowManager()->IsCurrentWindow(this);
}

//______________________________________________________________________________
void TEveWindow::MakeCurrent()
{
   // Make this window current.

   if ( ! gEve->GetWindowManager()->IsCurrentWindow(this))
      gEve->GetWindowManager()->SelectWindow(this);
}

//______________________________________________________________________________
void TEveWindow::SetCurrent(Bool_t curr)
{
   // Set current state of this eve-window.
   // Protected method - called by window-manager.

   fEveFrame->SetCurrent(curr);
}

//______________________________________________________________________________
Bool_t TEveWindow::IsAncestorOf(TEveWindow* win)
{
   // Returns true if this is an ancestor of win.

   TEveWindow* parent = dynamic_cast<TEveWindow*>(win->fEveFrame->fEveParent);
   if (parent)
   {
      if (parent == this)
         return kTRUE;
      else
         return IsAncestorOf(parent);
   }
   else
   {
      return kFALSE;
   }
}

//______________________________________________________________________________
void TEveWindow::TitleBarClicked()
{
   // Slot for clicking on the title-bar.
   // The wish that this window becomes the current one is sent to
   // the window-manager.

   gEve->GetWindowManager()->SelectWindow(this);
}

//------------------------------------------------------------------------------
// Static helper functions.
//------------------------------------------------------------------------------

//______________________________________________________________________________
TEveWindowSlot* TEveWindow::CreateDefaultWindowSlot()
{
   // Create a default window slot.
   // Static helper.

   return new TEveWindowSlot("Free Window Slot", "A free window slot, can become a container or swallow a window.");
}

//______________________________________________________________________________
TEveWindowSlot* TEveWindow::CreateWindowMainFrame(TEveWindow* eve_parent)
{
   // Create a new main-frame and populate it with a default window-slot.
   // The main-frame is mapped.
   // Static helper.

   TGMainFrame* mf = new TGMainFrame(gClient->GetRoot(), fgMainFrameDefWidth, fgMainFrameDefHeight);
   mf->SetCleanup(kLocalCleanup);

   TEveCompositeFrameInMainFrame *slot = new TEveCompositeFrameInMainFrame
      (mf, eve_parent, mf);

   TEveWindowSlot* ew_slot = TEveWindow::CreateDefaultWindowSlot();
   ew_slot->PopulateEmptyFrame(slot);

   mf->AddFrame(slot, new TGLayoutHints(kLHintsNormal | kLHintsExpandX | kLHintsExpandY));
   slot->MapWindow();

   mf->Layout();
   mf->MapWindow();

   return ew_slot;
}

//______________________________________________________________________________
TEveWindowSlot* TEveWindow::CreateWindowInTab(TGTab* tab, TEveWindow* eve_parent)
{
   // Create a new tab in a given tab-widget and populate it with a
   // default window-slot.
   // Static helper.

   TGCompositeFrame *parent = tab->AddTab("<unused>");
   parent->SetCleanup(kLocalCleanup);

   TEveCompositeFrameInTab *slot = new TEveCompositeFrameInTab(parent, eve_parent, tab);

   TEveWindowSlot* ew_slot = TEveWindow::CreateDefaultWindowSlot();

   ew_slot->PopulateEmptyFrame(slot);

   parent->AddFrame(slot, new TGLayoutHints(kLHintsNormal | kLHintsExpandX | kLHintsExpandY));

   tab->Layout();

   slot->MapWindow();

   return ew_slot;
}

//______________________________________________________________________________
void TEveWindow::SwapWindows(TEveWindow* w1, TEveWindow* w2)
{
   // Swap windows w1 and w2. They are properly reparented in the eve
   // hierarch as well.
   // Layout is called on both frames.

   static const TEveException eh("TEveWindow::SwapWindows ");

   if (w1 == 0 || w2 == 0)
      throw eh + "Called with null window.";

   if (w1 == w2)
      throw eh + "Windows are equal ... nothing to change.";

   if (w1->IsAncestorOf(w2) || w2->IsAncestorOf(w1))
      throw eh + "Windows are in direct ancestry.";

   TEveCompositeFrame *f1 = w1->fEveFrame,  *f2 = w2->fEveFrame;
   TEveElement        *p1 = f1->fEveParent, *p2 = f2->fEveParent;

   if (p1 != p2)
   {
      p1->AddElement(w2);
      p2->AddElement(w1);
   }

   f1->RelinquishEveWindow(kFALSE);
   f2->RelinquishEveWindow(kFALSE);
   f1->AcquireEveWindow(w2); w2->fEveFrame = f1;
   f2->AcquireEveWindow(w1); w1->fEveFrame = f2;

   if (p1 != p2)
   {
      p1->RemoveElement(w1);
      p2->RemoveElement(w2);
   }

   f1->Layout(); f2->Layout();
}

//==============================================================================

//______________________________________________________________________________
UInt_t TEveWindow::GetMainFrameDefWidth()
{
   // Get default width for new main-frame windows. Static.

   return fgMainFrameDefWidth;
}

//______________________________________________________________________________
UInt_t TEveWindow::GetMainFrameDefHeight()
{
   // Get default heigth for new main-frame windows. Static.

   return fgMainFrameDefHeight;
}

//______________________________________________________________________________
void TEveWindow::SetMainFrameDefWidth (UInt_t x)
{
   // Set default width for new main-frame windows. Static.

   fgMainFrameDefWidth  = x;
}

//______________________________________________________________________________
void TEveWindow::SetMainFrameDefHeight(UInt_t x)
{
   // Set default height for new main-frame windows. Static.

   fgMainFrameDefHeight = x;
}

//______________________________________________________________________________
Pixel_t TEveWindow::GetCurrentBackgroundColor()
{
   // Get background-color for marking the title-bar of current window. Static.

   return fgCurrentBackgroundColor;
}

//______________________________________________________________________________
Pixel_t TEveWindow::GetMiniBarBackgroundColor()
{
   // Get background-color for mini-bar (collapsed title-bar). Static.

   return fgMiniBarBackgroundColor;
}

//______________________________________________________________________________
void TEveWindow::SetCurrentBackgroundColor(Pixel_t p)
{
   // Set background-color for marking the title-bar of current window. Static.

   fgCurrentBackgroundColor = p;
}

//______________________________________________________________________________
void TEveWindow::SetMiniBarBackgroundColor(Pixel_t p)
{
   // Set background-color for mini-bar (collapsed title-bar). Static.

   fgMiniBarBackgroundColor = p;
}


//==============================================================================
// TEveWindowSlot
//==============================================================================

//______________________________________________________________________________
// Description of TEveWindowSlot
//

ClassImp(TEveWindowSlot);

//______________________________________________________________________________
TEveWindowSlot::TEveWindowSlot(const char* n, const char* t) :
   TEveWindow (n, t),
   fEmptyButt   (0),
   fEmbedBuffer (0)
{
   // Constructor.

   fEmptyButt = new TGTextButton(0, "    <empty>\nclick to select");
   fEmptyButt->ChangeOptions(kRaisedFrame);
   fEmptyButt->SetTextJustify(kTextCenterX | kTextCenterY);

   fEmptyButt->Connect("Clicked()", "TEveWindow", this, "TitleBarClicked()");
}

//______________________________________________________________________________
TEveWindowSlot::~TEveWindowSlot()
{
   // Destructor.

   fEmptyButt->DeleteWindow();
}

//______________________________________________________________________________
TGFrame* TEveWindowSlot::GetGUIFrame()
{
   // Return top-frame of this eve-window - the big button to make slot current.

   return fEmptyButt;
}

//______________________________________________________________________________
void TEveWindowSlot::SetCurrent(Bool_t curr)
{
   // Set current state of this window-slot.
   // Virtual from TEveWindow.

   TEveWindow::SetCurrent(curr);

   if (curr)
      fEmptyButt->SetBackgroundColor(fgCurrentBackgroundColor);
   else
      fEmptyButt->SetBackgroundColor(fEmptyButt->GetDefaultFrameBackground());
   gClient->NeedRedraw(fEmptyButt);
}

//______________________________________________________________________________
TEveWindowPack* TEveWindowSlot::MakePack()
{
   // A pack is created in place of this window-slot.
   // This window-slot will auto-destruct.

   TEveWindowPack* eve_pack = new TEveWindowPack
      (0, "Pack", "Window container for horizontal and vertical stacking.");

   ReplaceWindow(eve_pack);

   return eve_pack;
}

//______________________________________________________________________________
TEveWindowTab* TEveWindowSlot::MakeTab()
{
   // A tab is created in place of this window-slot.
   // This window-slot will auto-destruct.

   TEveWindowTab* eve_tab = new TEveWindowTab
      (0, "Tab", "Window container for horizontal and vertical stacking.");

   ReplaceWindow(eve_tab);

   return eve_tab;
}

//______________________________________________________________________________
TEveWindowFrame* TEveWindowSlot::MakeFrame(TGFrame* frame)
{
   // An eve-window-frame is created and frame is passed into it.
   // If frame is 0 (the default), a default composite-frame will be created
   // in TEveWindowFrame() constructor.
   // This window-slot will auto-destruct.

   TEveWindowFrame* eve_frame = new TEveWindowFrame
      (frame, "External frame", "");

   ReplaceWindow(eve_frame);

   return eve_frame;
}

//______________________________________________________________________________
TGCompositeFrame* TEveWindowSlot::StartEmbedding()
{
   // Start embedding a window that will replace the current slot.
   // It is expected that a main-frame will be created and then
   // StopEmbedding() will be called.

   static const TEveException eh("TEveWindowSlot::StartEmbedding ");

   if (fEmbedBuffer != 0)
      throw eh + "Already embedding.";

   fEmbedBuffer = new TGCompositeFrame(gClient->GetDefaultRoot());
   fEmbedBuffer->SetEditable(kTRUE);

   return fEmbedBuffer;
}

//______________________________________________________________________________
TEveWindowFrame* TEveWindowSlot::StopEmbedding(const char* name)
{
   // An embedded window is created in place of this window-slot.
   // This window-slot will auto-destruct.

   static const TEveException eh("TEveWindowSlot::StopEmbedding ");

   if (fEmbedBuffer == 0) {
      Warning(eh, "Embedding not in progress.");
      return 0;
   }

   fEmbedBuffer->SetEditable(kFALSE);

   Int_t size = fEmbedBuffer->GetList()->GetSize();

   if (size == 0) {
      Warning(eh, "Frame has not been registered.");
      delete fEmbedBuffer;
      fEmbedBuffer = 0;
      return 0;
   }

   if (size > 1) {
      Warning(eh, "Several frames have been registered (%d). Only the first one will be taken.", size);
   }

   TGFrame *f = ((TGFrameElement*)fEmbedBuffer->GetList()->First())->fFrame;
   fEmbedBuffer->RemoveFrame(f);
   f->UnmapWindow();
   f->ReparentWindow(gClient->GetDefaultRoot());
   delete fEmbedBuffer;
   fEmbedBuffer = 0;

   TGMainFrame *mf = dynamic_cast<TGMainFrame*>(f);
   assert(mf != 0);

   if (name) {
      mf->SetWindowName(name);
   }

   TEveWindowFrame* eve_frame = new TEveWindowFrame
      (f, mf->GetWindowName(), mf->ClassName());

   ReplaceWindow(eve_frame);

   return eve_frame;
}


//==============================================================================
// TEveWindowFrame
//==============================================================================

//______________________________________________________________________________
//
// Encapsulates TGFrame into an eve-window.
// The frame is owned by the eve-window.

ClassImp(TEveWindowFrame);

//______________________________________________________________________________
TEveWindowFrame::TEveWindowFrame(TGFrame* frame, const char* n, const char* t) :
   TEveWindow (n, t),
   fGUIFrame  (frame)
{
   // Constructor.
   // If the passed frame is 0, a default TGCompositeFrame frame is instantiated
   // and set to local-cleanup.

   if (fGUIFrame == 0)
   {
      fGUIFrame = new TGCompositeFrame();
      fGUIFrame->SetCleanup(kLocalCleanup);
   }
}

//______________________________________________________________________________
TEveWindowFrame::~TEveWindowFrame()
{
   // Destructor.

   fGUIFrame->DeleteWindow();
}

//______________________________________________________________________________
TGCompositeFrame* TEveWindowFrame::GetGUICompositeFrame()
{
   // Returns the registered top-frame of this eve-window dynamic-casted
   // to composite-frame.
   // Throws an execption if the cast fails.

   static const TEveException kEH("TEveWindowFrame::GetGUICompositeFrame ");

   TGCompositeFrame *cf = dynamic_cast<TGCompositeFrame*>(fGUIFrame);
   if (cf == 0)
      throw kEH + "The registered frame is not a composite-frame.";

   return cf;
}

//==============================================================================
// TEveWindowPack
//==============================================================================

//______________________________________________________________________________
//
// Encapsulates TGPack into an eve-window.
// The pack is owned by the eve-window.

ClassImp(TEveWindowPack);

//______________________________________________________________________________
TEveWindowPack::TEveWindowPack(TGPack* p, const char* n, const char* t) :
   TEveWindow   (n, t),
   fPack        (p ? p : new TGPack())
{
   // Constructor.
   // If passed pack is 0, a defualt one is instantiated.
}

//______________________________________________________________________________
TEveWindowPack::~TEveWindowPack()
{
   // Destructor.

   fPack->DeleteWindow();
}

//______________________________________________________________________________
TGFrame* TEveWindowPack::GetGUIFrame()
{
   // Return top-frame of this eve-window - the pack.

   return fPack;
}

//______________________________________________________________________________
TEveWindowSlot* TEveWindowPack::NewSlot()
{
   // Create a new frame-slot at the last position of the pack.

   return NewSlotWithWeight(1.f);
}

//______________________________________________________________________________
TEveWindowSlot* TEveWindowPack::NewSlotWithWeight(Float_t w)
{
   // Create a new weighted frame-slot at the last position of the pack.

   TEveCompositeFrame* slot = new TEveCompositeFrameInPack(fPack, this, fPack);

   TEveWindowSlot* ew_slot = TEveWindow::CreateDefaultWindowSlot();
   ew_slot->PopulateEmptyFrame(slot);

   fPack->AddFrameWithWeight(slot, 0, w);
   slot->MapWindow();

   fPack->Layout();

   return ew_slot;
}

//______________________________________________________________________________
void TEveWindowPack::FlipOrientation()
{
   // Flip orientation of the pack (vertical / horizontal).

   fPack->SetVertical( ! fPack->GetVertical());
}

//______________________________________________________________________________
void TEveWindowPack::SetVertical(Bool_t x)
{
   // Set orientation of the pack (vertical / horizontal).

   fPack->SetVertical(x);
}

//______________________________________________________________________________
void TEveWindowPack::EqualizeFrames()
{
   // Refit existing frames so that their lengths are equal.

   fPack->EqualizeFrames();
   fPack->Layout();
}

//==============================================================================
// TEveWindowTab
//==============================================================================

//______________________________________________________________________________
//
// Encapsulates TGTab into an eve-window.
// The tab is owned by the eve-window.

ClassImp(TEveWindowTab);

//______________________________________________________________________________
TEveWindowTab::TEveWindowTab(TGTab* tab, const char* n, const char* t) :
   TEveWindow(n, t),
   fTab (tab ? tab : new TGTab())
{
   // Constructor.
   // If passed tab is 0, a defualt one is instantiated.
}

//______________________________________________________________________________
TEveWindowTab::~TEveWindowTab()
{
   // Destructor.

   fTab->DeleteWindow();
}

//______________________________________________________________________________
TGFrame* TEveWindowTab::GetGUIFrame()
{
   // Return top-frame of this eve-window - the tab.

   return fTab;
}

//______________________________________________________________________________
TEveWindowSlot* TEveWindowTab::NewSlot()
{
   // Create new frame-slot - a new tab.

   return TEveWindow::CreateWindowInTab(fTab, this);
}
 TEveWindow.cxx:1
 TEveWindow.cxx:2
 TEveWindow.cxx:3
 TEveWindow.cxx:4
 TEveWindow.cxx:5
 TEveWindow.cxx:6
 TEveWindow.cxx:7
 TEveWindow.cxx:8
 TEveWindow.cxx:9
 TEveWindow.cxx:10
 TEveWindow.cxx:11
 TEveWindow.cxx:12
 TEveWindow.cxx:13
 TEveWindow.cxx:14
 TEveWindow.cxx:15
 TEveWindow.cxx:16
 TEveWindow.cxx:17
 TEveWindow.cxx:18
 TEveWindow.cxx:19
 TEveWindow.cxx:20
 TEveWindow.cxx:21
 TEveWindow.cxx:22
 TEveWindow.cxx:23
 TEveWindow.cxx:24
 TEveWindow.cxx:25
 TEveWindow.cxx:26
 TEveWindow.cxx:27
 TEveWindow.cxx:28
 TEveWindow.cxx:29
 TEveWindow.cxx:30
 TEveWindow.cxx:31
 TEveWindow.cxx:32
 TEveWindow.cxx:33
 TEveWindow.cxx:34
 TEveWindow.cxx:35
 TEveWindow.cxx:36
 TEveWindow.cxx:37
 TEveWindow.cxx:38
 TEveWindow.cxx:39
 TEveWindow.cxx:40
 TEveWindow.cxx:41
 TEveWindow.cxx:42
 TEveWindow.cxx:43
 TEveWindow.cxx:44
 TEveWindow.cxx:45
 TEveWindow.cxx:46
 TEveWindow.cxx:47
 TEveWindow.cxx:48
 TEveWindow.cxx:49
 TEveWindow.cxx:50
 TEveWindow.cxx:51
 TEveWindow.cxx:52
 TEveWindow.cxx:53
 TEveWindow.cxx:54
 TEveWindow.cxx:55
 TEveWindow.cxx:56
 TEveWindow.cxx:57
 TEveWindow.cxx:58
 TEveWindow.cxx:59
 TEveWindow.cxx:60
 TEveWindow.cxx:61
 TEveWindow.cxx:62
 TEveWindow.cxx:63
 TEveWindow.cxx:64
 TEveWindow.cxx:65
 TEveWindow.cxx:66
 TEveWindow.cxx:67
 TEveWindow.cxx:68
 TEveWindow.cxx:69
 TEveWindow.cxx:70
 TEveWindow.cxx:71
 TEveWindow.cxx:72
 TEveWindow.cxx:73
 TEveWindow.cxx:74
 TEveWindow.cxx:75
 TEveWindow.cxx:76
 TEveWindow.cxx:77
 TEveWindow.cxx:78
 TEveWindow.cxx:79
 TEveWindow.cxx:80
 TEveWindow.cxx:81
 TEveWindow.cxx:82
 TEveWindow.cxx:83
 TEveWindow.cxx:84
 TEveWindow.cxx:85
 TEveWindow.cxx:86
 TEveWindow.cxx:87
 TEveWindow.cxx:88
 TEveWindow.cxx:89
 TEveWindow.cxx:90
 TEveWindow.cxx:91
 TEveWindow.cxx:92
 TEveWindow.cxx:93
 TEveWindow.cxx:94
 TEveWindow.cxx:95
 TEveWindow.cxx:96
 TEveWindow.cxx:97
 TEveWindow.cxx:98
 TEveWindow.cxx:99
 TEveWindow.cxx:100
 TEveWindow.cxx:101
 TEveWindow.cxx:102
 TEveWindow.cxx:103
 TEveWindow.cxx:104
 TEveWindow.cxx:105
 TEveWindow.cxx:106
 TEveWindow.cxx:107
 TEveWindow.cxx:108
 TEveWindow.cxx:109
 TEveWindow.cxx:110
 TEveWindow.cxx:111
 TEveWindow.cxx:112
 TEveWindow.cxx:113
 TEveWindow.cxx:114
 TEveWindow.cxx:115
 TEveWindow.cxx:116
 TEveWindow.cxx:117
 TEveWindow.cxx:118
 TEveWindow.cxx:119
 TEveWindow.cxx:120
 TEveWindow.cxx:121
 TEveWindow.cxx:122
 TEveWindow.cxx:123
 TEveWindow.cxx:124
 TEveWindow.cxx:125
 TEveWindow.cxx:126
 TEveWindow.cxx:127
 TEveWindow.cxx:128
 TEveWindow.cxx:129
 TEveWindow.cxx:130
 TEveWindow.cxx:131
 TEveWindow.cxx:132
 TEveWindow.cxx:133
 TEveWindow.cxx:134
 TEveWindow.cxx:135
 TEveWindow.cxx:136
 TEveWindow.cxx:137
 TEveWindow.cxx:138
 TEveWindow.cxx:139
 TEveWindow.cxx:140
 TEveWindow.cxx:141
 TEveWindow.cxx:142
 TEveWindow.cxx:143
 TEveWindow.cxx:144
 TEveWindow.cxx:145
 TEveWindow.cxx:146
 TEveWindow.cxx:147
 TEveWindow.cxx:148
 TEveWindow.cxx:149
 TEveWindow.cxx:150
 TEveWindow.cxx:151
 TEveWindow.cxx:152
 TEveWindow.cxx:153
 TEveWindow.cxx:154
 TEveWindow.cxx:155
 TEveWindow.cxx:156
 TEveWindow.cxx:157
 TEveWindow.cxx:158
 TEveWindow.cxx:159
 TEveWindow.cxx:160
 TEveWindow.cxx:161
 TEveWindow.cxx:162
 TEveWindow.cxx:163
 TEveWindow.cxx:164
 TEveWindow.cxx:165
 TEveWindow.cxx:166
 TEveWindow.cxx:167
 TEveWindow.cxx:168
 TEveWindow.cxx:169
 TEveWindow.cxx:170
 TEveWindow.cxx:171
 TEveWindow.cxx:172
 TEveWindow.cxx:173
 TEveWindow.cxx:174
 TEveWindow.cxx:175
 TEveWindow.cxx:176
 TEveWindow.cxx:177
 TEveWindow.cxx:178
 TEveWindow.cxx:179
 TEveWindow.cxx:180
 TEveWindow.cxx:181
 TEveWindow.cxx:182
 TEveWindow.cxx:183
 TEveWindow.cxx:184
 TEveWindow.cxx:185
 TEveWindow.cxx:186
 TEveWindow.cxx:187
 TEveWindow.cxx:188
 TEveWindow.cxx:189
 TEveWindow.cxx:190
 TEveWindow.cxx:191
 TEveWindow.cxx:192
 TEveWindow.cxx:193
 TEveWindow.cxx:194
 TEveWindow.cxx:195
 TEveWindow.cxx:196
 TEveWindow.cxx:197
 TEveWindow.cxx:198
 TEveWindow.cxx:199
 TEveWindow.cxx:200
 TEveWindow.cxx:201
 TEveWindow.cxx:202
 TEveWindow.cxx:203
 TEveWindow.cxx:204
 TEveWindow.cxx:205
 TEveWindow.cxx:206
 TEveWindow.cxx:207
 TEveWindow.cxx:208
 TEveWindow.cxx:209
 TEveWindow.cxx:210
 TEveWindow.cxx:211
 TEveWindow.cxx:212
 TEveWindow.cxx:213
 TEveWindow.cxx:214
 TEveWindow.cxx:215
 TEveWindow.cxx:216
 TEveWindow.cxx:217
 TEveWindow.cxx:218
 TEveWindow.cxx:219
 TEveWindow.cxx:220
 TEveWindow.cxx:221
 TEveWindow.cxx:222
 TEveWindow.cxx:223
 TEveWindow.cxx:224
 TEveWindow.cxx:225
 TEveWindow.cxx:226
 TEveWindow.cxx:227
 TEveWindow.cxx:228
 TEveWindow.cxx:229
 TEveWindow.cxx:230
 TEveWindow.cxx:231
 TEveWindow.cxx:232
 TEveWindow.cxx:233
 TEveWindow.cxx:234
 TEveWindow.cxx:235
 TEveWindow.cxx:236
 TEveWindow.cxx:237
 TEveWindow.cxx:238
 TEveWindow.cxx:239
 TEveWindow.cxx:240
 TEveWindow.cxx:241
 TEveWindow.cxx:242
 TEveWindow.cxx:243
 TEveWindow.cxx:244
 TEveWindow.cxx:245
 TEveWindow.cxx:246
 TEveWindow.cxx:247
 TEveWindow.cxx:248
 TEveWindow.cxx:249
 TEveWindow.cxx:250
 TEveWindow.cxx:251
 TEveWindow.cxx:252
 TEveWindow.cxx:253
 TEveWindow.cxx:254
 TEveWindow.cxx:255
 TEveWindow.cxx:256
 TEveWindow.cxx:257
 TEveWindow.cxx:258
 TEveWindow.cxx:259
 TEveWindow.cxx:260
 TEveWindow.cxx:261
 TEveWindow.cxx:262
 TEveWindow.cxx:263
 TEveWindow.cxx:264
 TEveWindow.cxx:265
 TEveWindow.cxx:266
 TEveWindow.cxx:267
 TEveWindow.cxx:268
 TEveWindow.cxx:269
 TEveWindow.cxx:270
 TEveWindow.cxx:271
 TEveWindow.cxx:272
 TEveWindow.cxx:273
 TEveWindow.cxx:274
 TEveWindow.cxx:275
 TEveWindow.cxx:276
 TEveWindow.cxx:277
 TEveWindow.cxx:278
 TEveWindow.cxx:279
 TEveWindow.cxx:280
 TEveWindow.cxx:281
 TEveWindow.cxx:282
 TEveWindow.cxx:283
 TEveWindow.cxx:284
 TEveWindow.cxx:285
 TEveWindow.cxx:286
 TEveWindow.cxx:287
 TEveWindow.cxx:288
 TEveWindow.cxx:289
 TEveWindow.cxx:290
 TEveWindow.cxx:291
 TEveWindow.cxx:292
 TEveWindow.cxx:293
 TEveWindow.cxx:294
 TEveWindow.cxx:295
 TEveWindow.cxx:296
 TEveWindow.cxx:297
 TEveWindow.cxx:298
 TEveWindow.cxx:299
 TEveWindow.cxx:300
 TEveWindow.cxx:301
 TEveWindow.cxx:302
 TEveWindow.cxx:303
 TEveWindow.cxx:304
 TEveWindow.cxx:305
 TEveWindow.cxx:306
 TEveWindow.cxx:307
 TEveWindow.cxx:308
 TEveWindow.cxx:309
 TEveWindow.cxx:310
 TEveWindow.cxx:311
 TEveWindow.cxx:312
 TEveWindow.cxx:313
 TEveWindow.cxx:314
 TEveWindow.cxx:315
 TEveWindow.cxx:316
 TEveWindow.cxx:317
 TEveWindow.cxx:318
 TEveWindow.cxx:319
 TEveWindow.cxx:320
 TEveWindow.cxx:321
 TEveWindow.cxx:322
 TEveWindow.cxx:323
 TEveWindow.cxx:324
 TEveWindow.cxx:325
 TEveWindow.cxx:326
 TEveWindow.cxx:327
 TEveWindow.cxx:328
 TEveWindow.cxx:329
 TEveWindow.cxx:330
 TEveWindow.cxx:331
 TEveWindow.cxx:332
 TEveWindow.cxx:333
 TEveWindow.cxx:334
 TEveWindow.cxx:335
 TEveWindow.cxx:336
 TEveWindow.cxx:337
 TEveWindow.cxx:338
 TEveWindow.cxx:339
 TEveWindow.cxx:340
 TEveWindow.cxx:341
 TEveWindow.cxx:342
 TEveWindow.cxx:343
 TEveWindow.cxx:344
 TEveWindow.cxx:345
 TEveWindow.cxx:346
 TEveWindow.cxx:347
 TEveWindow.cxx:348
 TEveWindow.cxx:349
 TEveWindow.cxx:350
 TEveWindow.cxx:351
 TEveWindow.cxx:352
 TEveWindow.cxx:353
 TEveWindow.cxx:354
 TEveWindow.cxx:355
 TEveWindow.cxx:356
 TEveWindow.cxx:357
 TEveWindow.cxx:358
 TEveWindow.cxx:359
 TEveWindow.cxx:360
 TEveWindow.cxx:361
 TEveWindow.cxx:362
 TEveWindow.cxx:363
 TEveWindow.cxx:364
 TEveWindow.cxx:365
 TEveWindow.cxx:366
 TEveWindow.cxx:367
 TEveWindow.cxx:368
 TEveWindow.cxx:369
 TEveWindow.cxx:370
 TEveWindow.cxx:371
 TEveWindow.cxx:372
 TEveWindow.cxx:373
 TEveWindow.cxx:374
 TEveWindow.cxx:375
 TEveWindow.cxx:376
 TEveWindow.cxx:377
 TEveWindow.cxx:378
 TEveWindow.cxx:379
 TEveWindow.cxx:380
 TEveWindow.cxx:381
 TEveWindow.cxx:382
 TEveWindow.cxx:383
 TEveWindow.cxx:384
 TEveWindow.cxx:385
 TEveWindow.cxx:386
 TEveWindow.cxx:387
 TEveWindow.cxx:388
 TEveWindow.cxx:389
 TEveWindow.cxx:390
 TEveWindow.cxx:391
 TEveWindow.cxx:392
 TEveWindow.cxx:393
 TEveWindow.cxx:394
 TEveWindow.cxx:395
 TEveWindow.cxx:396
 TEveWindow.cxx:397
 TEveWindow.cxx:398
 TEveWindow.cxx:399
 TEveWindow.cxx:400
 TEveWindow.cxx:401
 TEveWindow.cxx:402
 TEveWindow.cxx:403
 TEveWindow.cxx:404
 TEveWindow.cxx:405
 TEveWindow.cxx:406
 TEveWindow.cxx:407
 TEveWindow.cxx:408
 TEveWindow.cxx:409
 TEveWindow.cxx:410
 TEveWindow.cxx:411
 TEveWindow.cxx:412
 TEveWindow.cxx:413
 TEveWindow.cxx:414
 TEveWindow.cxx:415
 TEveWindow.cxx:416
 TEveWindow.cxx:417
 TEveWindow.cxx:418
 TEveWindow.cxx:419
 TEveWindow.cxx:420
 TEveWindow.cxx:421
 TEveWindow.cxx:422
 TEveWindow.cxx:423
 TEveWindow.cxx:424
 TEveWindow.cxx:425
 TEveWindow.cxx:426
 TEveWindow.cxx:427
 TEveWindow.cxx:428
 TEveWindow.cxx:429
 TEveWindow.cxx:430
 TEveWindow.cxx:431
 TEveWindow.cxx:432
 TEveWindow.cxx:433
 TEveWindow.cxx:434
 TEveWindow.cxx:435
 TEveWindow.cxx:436
 TEveWindow.cxx:437
 TEveWindow.cxx:438
 TEveWindow.cxx:439
 TEveWindow.cxx:440
 TEveWindow.cxx:441
 TEveWindow.cxx:442
 TEveWindow.cxx:443
 TEveWindow.cxx:444
 TEveWindow.cxx:445
 TEveWindow.cxx:446
 TEveWindow.cxx:447
 TEveWindow.cxx:448
 TEveWindow.cxx:449
 TEveWindow.cxx:450
 TEveWindow.cxx:451
 TEveWindow.cxx:452
 TEveWindow.cxx:453
 TEveWindow.cxx:454
 TEveWindow.cxx:455
 TEveWindow.cxx:456
 TEveWindow.cxx:457
 TEveWindow.cxx:458
 TEveWindow.cxx:459
 TEveWindow.cxx:460
 TEveWindow.cxx:461
 TEveWindow.cxx:462
 TEveWindow.cxx:463
 TEveWindow.cxx:464
 TEveWindow.cxx:465
 TEveWindow.cxx:466
 TEveWindow.cxx:467
 TEveWindow.cxx:468
 TEveWindow.cxx:469
 TEveWindow.cxx:470
 TEveWindow.cxx:471
 TEveWindow.cxx:472
 TEveWindow.cxx:473
 TEveWindow.cxx:474
 TEveWindow.cxx:475
 TEveWindow.cxx:476
 TEveWindow.cxx:477
 TEveWindow.cxx:478
 TEveWindow.cxx:479
 TEveWindow.cxx:480
 TEveWindow.cxx:481
 TEveWindow.cxx:482
 TEveWindow.cxx:483
 TEveWindow.cxx:484
 TEveWindow.cxx:485
 TEveWindow.cxx:486
 TEveWindow.cxx:487
 TEveWindow.cxx:488
 TEveWindow.cxx:489
 TEveWindow.cxx:490
 TEveWindow.cxx:491
 TEveWindow.cxx:492
 TEveWindow.cxx:493
 TEveWindow.cxx:494
 TEveWindow.cxx:495
 TEveWindow.cxx:496
 TEveWindow.cxx:497
 TEveWindow.cxx:498
 TEveWindow.cxx:499
 TEveWindow.cxx:500
 TEveWindow.cxx:501
 TEveWindow.cxx:502
 TEveWindow.cxx:503
 TEveWindow.cxx:504
 TEveWindow.cxx:505
 TEveWindow.cxx:506
 TEveWindow.cxx:507
 TEveWindow.cxx:508
 TEveWindow.cxx:509
 TEveWindow.cxx:510
 TEveWindow.cxx:511
 TEveWindow.cxx:512
 TEveWindow.cxx:513
 TEveWindow.cxx:514
 TEveWindow.cxx:515
 TEveWindow.cxx:516
 TEveWindow.cxx:517
 TEveWindow.cxx:518
 TEveWindow.cxx:519
 TEveWindow.cxx:520
 TEveWindow.cxx:521
 TEveWindow.cxx:522
 TEveWindow.cxx:523
 TEveWindow.cxx:524
 TEveWindow.cxx:525
 TEveWindow.cxx:526
 TEveWindow.cxx:527
 TEveWindow.cxx:528
 TEveWindow.cxx:529
 TEveWindow.cxx:530
 TEveWindow.cxx:531
 TEveWindow.cxx:532
 TEveWindow.cxx:533
 TEveWindow.cxx:534
 TEveWindow.cxx:535
 TEveWindow.cxx:536
 TEveWindow.cxx:537
 TEveWindow.cxx:538
 TEveWindow.cxx:539
 TEveWindow.cxx:540
 TEveWindow.cxx:541
 TEveWindow.cxx:542
 TEveWindow.cxx:543
 TEveWindow.cxx:544
 TEveWindow.cxx:545
 TEveWindow.cxx:546
 TEveWindow.cxx:547
 TEveWindow.cxx:548
 TEveWindow.cxx:549
 TEveWindow.cxx:550
 TEveWindow.cxx:551
 TEveWindow.cxx:552
 TEveWindow.cxx:553
 TEveWindow.cxx:554
 TEveWindow.cxx:555
 TEveWindow.cxx:556
 TEveWindow.cxx:557
 TEveWindow.cxx:558
 TEveWindow.cxx:559
 TEveWindow.cxx:560
 TEveWindow.cxx:561
 TEveWindow.cxx:562
 TEveWindow.cxx:563
 TEveWindow.cxx:564
 TEveWindow.cxx:565
 TEveWindow.cxx:566
 TEveWindow.cxx:567
 TEveWindow.cxx:568
 TEveWindow.cxx:569
 TEveWindow.cxx:570
 TEveWindow.cxx:571
 TEveWindow.cxx:572
 TEveWindow.cxx:573
 TEveWindow.cxx:574
 TEveWindow.cxx:575
 TEveWindow.cxx:576
 TEveWindow.cxx:577
 TEveWindow.cxx:578
 TEveWindow.cxx:579
 TEveWindow.cxx:580
 TEveWindow.cxx:581
 TEveWindow.cxx:582
 TEveWindow.cxx:583
 TEveWindow.cxx:584
 TEveWindow.cxx:585
 TEveWindow.cxx:586
 TEveWindow.cxx:587
 TEveWindow.cxx:588
 TEveWindow.cxx:589
 TEveWindow.cxx:590
 TEveWindow.cxx:591
 TEveWindow.cxx:592
 TEveWindow.cxx:593
 TEveWindow.cxx:594
 TEveWindow.cxx:595
 TEveWindow.cxx:596
 TEveWindow.cxx:597
 TEveWindow.cxx:598
 TEveWindow.cxx:599
 TEveWindow.cxx:600
 TEveWindow.cxx:601
 TEveWindow.cxx:602
 TEveWindow.cxx:603
 TEveWindow.cxx:604
 TEveWindow.cxx:605
 TEveWindow.cxx:606
 TEveWindow.cxx:607
 TEveWindow.cxx:608
 TEveWindow.cxx:609
 TEveWindow.cxx:610
 TEveWindow.cxx:611
 TEveWindow.cxx:612
 TEveWindow.cxx:613
 TEveWindow.cxx:614
 TEveWindow.cxx:615
 TEveWindow.cxx:616
 TEveWindow.cxx:617
 TEveWindow.cxx:618
 TEveWindow.cxx:619
 TEveWindow.cxx:620
 TEveWindow.cxx:621
 TEveWindow.cxx:622
 TEveWindow.cxx:623
 TEveWindow.cxx:624
 TEveWindow.cxx:625
 TEveWindow.cxx:626
 TEveWindow.cxx:627
 TEveWindow.cxx:628
 TEveWindow.cxx:629
 TEveWindow.cxx:630
 TEveWindow.cxx:631
 TEveWindow.cxx:632
 TEveWindow.cxx:633
 TEveWindow.cxx:634
 TEveWindow.cxx:635
 TEveWindow.cxx:636
 TEveWindow.cxx:637
 TEveWindow.cxx:638
 TEveWindow.cxx:639
 TEveWindow.cxx:640
 TEveWindow.cxx:641
 TEveWindow.cxx:642
 TEveWindow.cxx:643
 TEveWindow.cxx:644
 TEveWindow.cxx:645
 TEveWindow.cxx:646
 TEveWindow.cxx:647
 TEveWindow.cxx:648
 TEveWindow.cxx:649
 TEveWindow.cxx:650
 TEveWindow.cxx:651
 TEveWindow.cxx:652
 TEveWindow.cxx:653
 TEveWindow.cxx:654
 TEveWindow.cxx:655
 TEveWindow.cxx:656
 TEveWindow.cxx:657
 TEveWindow.cxx:658
 TEveWindow.cxx:659
 TEveWindow.cxx:660
 TEveWindow.cxx:661
 TEveWindow.cxx:662
 TEveWindow.cxx:663
 TEveWindow.cxx:664
 TEveWindow.cxx:665
 TEveWindow.cxx:666
 TEveWindow.cxx:667
 TEveWindow.cxx:668
 TEveWindow.cxx:669
 TEveWindow.cxx:670
 TEveWindow.cxx:671
 TEveWindow.cxx:672
 TEveWindow.cxx:673
 TEveWindow.cxx:674
 TEveWindow.cxx:675
 TEveWindow.cxx:676
 TEveWindow.cxx:677
 TEveWindow.cxx:678
 TEveWindow.cxx:679
 TEveWindow.cxx:680
 TEveWindow.cxx:681
 TEveWindow.cxx:682
 TEveWindow.cxx:683
 TEveWindow.cxx:684
 TEveWindow.cxx:685
 TEveWindow.cxx:686
 TEveWindow.cxx:687
 TEveWindow.cxx:688
 TEveWindow.cxx:689
 TEveWindow.cxx:690
 TEveWindow.cxx:691
 TEveWindow.cxx:692
 TEveWindow.cxx:693
 TEveWindow.cxx:694
 TEveWindow.cxx:695
 TEveWindow.cxx:696
 TEveWindow.cxx:697
 TEveWindow.cxx:698
 TEveWindow.cxx:699
 TEveWindow.cxx:700
 TEveWindow.cxx:701
 TEveWindow.cxx:702
 TEveWindow.cxx:703
 TEveWindow.cxx:704
 TEveWindow.cxx:705
 TEveWindow.cxx:706
 TEveWindow.cxx:707
 TEveWindow.cxx:708
 TEveWindow.cxx:709
 TEveWindow.cxx:710
 TEveWindow.cxx:711
 TEveWindow.cxx:712
 TEveWindow.cxx:713
 TEveWindow.cxx:714
 TEveWindow.cxx:715
 TEveWindow.cxx:716
 TEveWindow.cxx:717
 TEveWindow.cxx:718
 TEveWindow.cxx:719
 TEveWindow.cxx:720
 TEveWindow.cxx:721
 TEveWindow.cxx:722
 TEveWindow.cxx:723
 TEveWindow.cxx:724
 TEveWindow.cxx:725
 TEveWindow.cxx:726
 TEveWindow.cxx:727
 TEveWindow.cxx:728
 TEveWindow.cxx:729
 TEveWindow.cxx:730
 TEveWindow.cxx:731
 TEveWindow.cxx:732
 TEveWindow.cxx:733
 TEveWindow.cxx:734
 TEveWindow.cxx:735
 TEveWindow.cxx:736
 TEveWindow.cxx:737
 TEveWindow.cxx:738
 TEveWindow.cxx:739
 TEveWindow.cxx:740
 TEveWindow.cxx:741
 TEveWindow.cxx:742
 TEveWindow.cxx:743
 TEveWindow.cxx:744
 TEveWindow.cxx:745
 TEveWindow.cxx:746
 TEveWindow.cxx:747
 TEveWindow.cxx:748
 TEveWindow.cxx:749
 TEveWindow.cxx:750
 TEveWindow.cxx:751
 TEveWindow.cxx:752
 TEveWindow.cxx:753
 TEveWindow.cxx:754
 TEveWindow.cxx:755
 TEveWindow.cxx:756
 TEveWindow.cxx:757
 TEveWindow.cxx:758
 TEveWindow.cxx:759
 TEveWindow.cxx:760
 TEveWindow.cxx:761
 TEveWindow.cxx:762
 TEveWindow.cxx:763
 TEveWindow.cxx:764
 TEveWindow.cxx:765
 TEveWindow.cxx:766
 TEveWindow.cxx:767
 TEveWindow.cxx:768
 TEveWindow.cxx:769
 TEveWindow.cxx:770
 TEveWindow.cxx:771
 TEveWindow.cxx:772
 TEveWindow.cxx:773
 TEveWindow.cxx:774
 TEveWindow.cxx:775
 TEveWindow.cxx:776
 TEveWindow.cxx:777
 TEveWindow.cxx:778
 TEveWindow.cxx:779
 TEveWindow.cxx:780
 TEveWindow.cxx:781
 TEveWindow.cxx:782
 TEveWindow.cxx:783
 TEveWindow.cxx:784
 TEveWindow.cxx:785
 TEveWindow.cxx:786
 TEveWindow.cxx:787
 TEveWindow.cxx:788
 TEveWindow.cxx:789
 TEveWindow.cxx:790
 TEveWindow.cxx:791
 TEveWindow.cxx:792
 TEveWindow.cxx:793
 TEveWindow.cxx:794
 TEveWindow.cxx:795
 TEveWindow.cxx:796
 TEveWindow.cxx:797
 TEveWindow.cxx:798
 TEveWindow.cxx:799
 TEveWindow.cxx:800
 TEveWindow.cxx:801
 TEveWindow.cxx:802
 TEveWindow.cxx:803
 TEveWindow.cxx:804
 TEveWindow.cxx:805
 TEveWindow.cxx:806
 TEveWindow.cxx:807
 TEveWindow.cxx:808
 TEveWindow.cxx:809
 TEveWindow.cxx:810
 TEveWindow.cxx:811
 TEveWindow.cxx:812
 TEveWindow.cxx:813
 TEveWindow.cxx:814
 TEveWindow.cxx:815
 TEveWindow.cxx:816
 TEveWindow.cxx:817
 TEveWindow.cxx:818
 TEveWindow.cxx:819
 TEveWindow.cxx:820
 TEveWindow.cxx:821
 TEveWindow.cxx:822
 TEveWindow.cxx:823
 TEveWindow.cxx:824
 TEveWindow.cxx:825
 TEveWindow.cxx:826
 TEveWindow.cxx:827
 TEveWindow.cxx:828
 TEveWindow.cxx:829
 TEveWindow.cxx:830
 TEveWindow.cxx:831
 TEveWindow.cxx:832
 TEveWindow.cxx:833
 TEveWindow.cxx:834
 TEveWindow.cxx:835
 TEveWindow.cxx:836
 TEveWindow.cxx:837
 TEveWindow.cxx:838
 TEveWindow.cxx:839
 TEveWindow.cxx:840
 TEveWindow.cxx:841
 TEveWindow.cxx:842
 TEveWindow.cxx:843
 TEveWindow.cxx:844
 TEveWindow.cxx:845
 TEveWindow.cxx:846
 TEveWindow.cxx:847
 TEveWindow.cxx:848
 TEveWindow.cxx:849
 TEveWindow.cxx:850
 TEveWindow.cxx:851
 TEveWindow.cxx:852
 TEveWindow.cxx:853
 TEveWindow.cxx:854
 TEveWindow.cxx:855
 TEveWindow.cxx:856
 TEveWindow.cxx:857
 TEveWindow.cxx:858
 TEveWindow.cxx:859
 TEveWindow.cxx:860
 TEveWindow.cxx:861
 TEveWindow.cxx:862
 TEveWindow.cxx:863
 TEveWindow.cxx:864
 TEveWindow.cxx:865
 TEveWindow.cxx:866
 TEveWindow.cxx:867
 TEveWindow.cxx:868
 TEveWindow.cxx:869
 TEveWindow.cxx:870
 TEveWindow.cxx:871
 TEveWindow.cxx:872
 TEveWindow.cxx:873
 TEveWindow.cxx:874
 TEveWindow.cxx:875
 TEveWindow.cxx:876
 TEveWindow.cxx:877
 TEveWindow.cxx:878
 TEveWindow.cxx:879
 TEveWindow.cxx:880
 TEveWindow.cxx:881
 TEveWindow.cxx:882
 TEveWindow.cxx:883
 TEveWindow.cxx:884
 TEveWindow.cxx:885
 TEveWindow.cxx:886
 TEveWindow.cxx:887
 TEveWindow.cxx:888
 TEveWindow.cxx:889
 TEveWindow.cxx:890
 TEveWindow.cxx:891
 TEveWindow.cxx:892
 TEveWindow.cxx:893
 TEveWindow.cxx:894
 TEveWindow.cxx:895
 TEveWindow.cxx:896
 TEveWindow.cxx:897
 TEveWindow.cxx:898
 TEveWindow.cxx:899
 TEveWindow.cxx:900
 TEveWindow.cxx:901
 TEveWindow.cxx:902
 TEveWindow.cxx:903
 TEveWindow.cxx:904
 TEveWindow.cxx:905
 TEveWindow.cxx:906
 TEveWindow.cxx:907
 TEveWindow.cxx:908
 TEveWindow.cxx:909
 TEveWindow.cxx:910
 TEveWindow.cxx:911
 TEveWindow.cxx:912
 TEveWindow.cxx:913
 TEveWindow.cxx:914
 TEveWindow.cxx:915
 TEveWindow.cxx:916
 TEveWindow.cxx:917
 TEveWindow.cxx:918
 TEveWindow.cxx:919
 TEveWindow.cxx:920
 TEveWindow.cxx:921
 TEveWindow.cxx:922
 TEveWindow.cxx:923
 TEveWindow.cxx:924
 TEveWindow.cxx:925
 TEveWindow.cxx:926
 TEveWindow.cxx:927
 TEveWindow.cxx:928
 TEveWindow.cxx:929
 TEveWindow.cxx:930
 TEveWindow.cxx:931
 TEveWindow.cxx:932
 TEveWindow.cxx:933
 TEveWindow.cxx:934
 TEveWindow.cxx:935
 TEveWindow.cxx:936
 TEveWindow.cxx:937
 TEveWindow.cxx:938
 TEveWindow.cxx:939
 TEveWindow.cxx:940
 TEveWindow.cxx:941
 TEveWindow.cxx:942
 TEveWindow.cxx:943
 TEveWindow.cxx:944
 TEveWindow.cxx:945
 TEveWindow.cxx:946
 TEveWindow.cxx:947
 TEveWindow.cxx:948
 TEveWindow.cxx:949
 TEveWindow.cxx:950
 TEveWindow.cxx:951
 TEveWindow.cxx:952
 TEveWindow.cxx:953
 TEveWindow.cxx:954
 TEveWindow.cxx:955
 TEveWindow.cxx:956
 TEveWindow.cxx:957
 TEveWindow.cxx:958
 TEveWindow.cxx:959
 TEveWindow.cxx:960
 TEveWindow.cxx:961
 TEveWindow.cxx:962
 TEveWindow.cxx:963
 TEveWindow.cxx:964
 TEveWindow.cxx:965
 TEveWindow.cxx:966
 TEveWindow.cxx:967
 TEveWindow.cxx:968
 TEveWindow.cxx:969
 TEveWindow.cxx:970
 TEveWindow.cxx:971
 TEveWindow.cxx:972
 TEveWindow.cxx:973
 TEveWindow.cxx:974
 TEveWindow.cxx:975
 TEveWindow.cxx:976
 TEveWindow.cxx:977
 TEveWindow.cxx:978
 TEveWindow.cxx:979
 TEveWindow.cxx:980
 TEveWindow.cxx:981
 TEveWindow.cxx:982
 TEveWindow.cxx:983
 TEveWindow.cxx:984
 TEveWindow.cxx:985
 TEveWindow.cxx:986
 TEveWindow.cxx:987
 TEveWindow.cxx:988
 TEveWindow.cxx:989
 TEveWindow.cxx:990
 TEveWindow.cxx:991
 TEveWindow.cxx:992
 TEveWindow.cxx:993
 TEveWindow.cxx:994
 TEveWindow.cxx:995
 TEveWindow.cxx:996
 TEveWindow.cxx:997
 TEveWindow.cxx:998
 TEveWindow.cxx:999
 TEveWindow.cxx:1000
 TEveWindow.cxx:1001
 TEveWindow.cxx:1002
 TEveWindow.cxx:1003
 TEveWindow.cxx:1004
 TEveWindow.cxx:1005
 TEveWindow.cxx:1006
 TEveWindow.cxx:1007
 TEveWindow.cxx:1008
 TEveWindow.cxx:1009
 TEveWindow.cxx:1010
 TEveWindow.cxx:1011
 TEveWindow.cxx:1012
 TEveWindow.cxx:1013
 TEveWindow.cxx:1014
 TEveWindow.cxx:1015
 TEveWindow.cxx:1016
 TEveWindow.cxx:1017
 TEveWindow.cxx:1018
 TEveWindow.cxx:1019
 TEveWindow.cxx:1020
 TEveWindow.cxx:1021
 TEveWindow.cxx:1022
 TEveWindow.cxx:1023
 TEveWindow.cxx:1024
 TEveWindow.cxx:1025
 TEveWindow.cxx:1026
 TEveWindow.cxx:1027
 TEveWindow.cxx:1028
 TEveWindow.cxx:1029
 TEveWindow.cxx:1030
 TEveWindow.cxx:1031
 TEveWindow.cxx:1032
 TEveWindow.cxx:1033
 TEveWindow.cxx:1034
 TEveWindow.cxx:1035
 TEveWindow.cxx:1036
 TEveWindow.cxx:1037
 TEveWindow.cxx:1038
 TEveWindow.cxx:1039
 TEveWindow.cxx:1040
 TEveWindow.cxx:1041
 TEveWindow.cxx:1042
 TEveWindow.cxx:1043
 TEveWindow.cxx:1044
 TEveWindow.cxx:1045
 TEveWindow.cxx:1046
 TEveWindow.cxx:1047
 TEveWindow.cxx:1048
 TEveWindow.cxx:1049
 TEveWindow.cxx:1050
 TEveWindow.cxx:1051
 TEveWindow.cxx:1052
 TEveWindow.cxx:1053
 TEveWindow.cxx:1054
 TEveWindow.cxx:1055
 TEveWindow.cxx:1056
 TEveWindow.cxx:1057
 TEveWindow.cxx:1058
 TEveWindow.cxx:1059
 TEveWindow.cxx:1060
 TEveWindow.cxx:1061
 TEveWindow.cxx:1062
 TEveWindow.cxx:1063
 TEveWindow.cxx:1064
 TEveWindow.cxx:1065
 TEveWindow.cxx:1066
 TEveWindow.cxx:1067
 TEveWindow.cxx:1068
 TEveWindow.cxx:1069
 TEveWindow.cxx:1070
 TEveWindow.cxx:1071
 TEveWindow.cxx:1072
 TEveWindow.cxx:1073
 TEveWindow.cxx:1074
 TEveWindow.cxx:1075
 TEveWindow.cxx:1076
 TEveWindow.cxx:1077
 TEveWindow.cxx:1078
 TEveWindow.cxx:1079
 TEveWindow.cxx:1080
 TEveWindow.cxx:1081
 TEveWindow.cxx:1082
 TEveWindow.cxx:1083
 TEveWindow.cxx:1084
 TEveWindow.cxx:1085
 TEveWindow.cxx:1086
 TEveWindow.cxx:1087
 TEveWindow.cxx:1088
 TEveWindow.cxx:1089
 TEveWindow.cxx:1090
 TEveWindow.cxx:1091
 TEveWindow.cxx:1092
 TEveWindow.cxx:1093
 TEveWindow.cxx:1094
 TEveWindow.cxx:1095
 TEveWindow.cxx:1096
 TEveWindow.cxx:1097
 TEveWindow.cxx:1098
 TEveWindow.cxx:1099
 TEveWindow.cxx:1100
 TEveWindow.cxx:1101
 TEveWindow.cxx:1102
 TEveWindow.cxx:1103
 TEveWindow.cxx:1104
 TEveWindow.cxx:1105
 TEveWindow.cxx:1106
 TEveWindow.cxx:1107
 TEveWindow.cxx:1108
 TEveWindow.cxx:1109
 TEveWindow.cxx:1110
 TEveWindow.cxx:1111
 TEveWindow.cxx:1112
 TEveWindow.cxx:1113
 TEveWindow.cxx:1114
 TEveWindow.cxx:1115
 TEveWindow.cxx:1116
 TEveWindow.cxx:1117
 TEveWindow.cxx:1118
 TEveWindow.cxx:1119
 TEveWindow.cxx:1120
 TEveWindow.cxx:1121
 TEveWindow.cxx:1122
 TEveWindow.cxx:1123
 TEveWindow.cxx:1124
 TEveWindow.cxx:1125
 TEveWindow.cxx:1126
 TEveWindow.cxx:1127
 TEveWindow.cxx:1128
 TEveWindow.cxx:1129
 TEveWindow.cxx:1130
 TEveWindow.cxx:1131
 TEveWindow.cxx:1132
 TEveWindow.cxx:1133
 TEveWindow.cxx:1134
 TEveWindow.cxx:1135
 TEveWindow.cxx:1136
 TEveWindow.cxx:1137
 TEveWindow.cxx:1138
 TEveWindow.cxx:1139
 TEveWindow.cxx:1140
 TEveWindow.cxx:1141
 TEveWindow.cxx:1142
 TEveWindow.cxx:1143
 TEveWindow.cxx:1144
 TEveWindow.cxx:1145
 TEveWindow.cxx:1146
 TEveWindow.cxx:1147
 TEveWindow.cxx:1148
 TEveWindow.cxx:1149
 TEveWindow.cxx:1150
 TEveWindow.cxx:1151
 TEveWindow.cxx:1152
 TEveWindow.cxx:1153
 TEveWindow.cxx:1154
 TEveWindow.cxx:1155
 TEveWindow.cxx:1156
 TEveWindow.cxx:1157
 TEveWindow.cxx:1158
 TEveWindow.cxx:1159
 TEveWindow.cxx:1160
 TEveWindow.cxx:1161
 TEveWindow.cxx:1162
 TEveWindow.cxx:1163
 TEveWindow.cxx:1164
 TEveWindow.cxx:1165
 TEveWindow.cxx:1166
 TEveWindow.cxx:1167
 TEveWindow.cxx:1168
 TEveWindow.cxx:1169
 TEveWindow.cxx:1170
 TEveWindow.cxx:1171
 TEveWindow.cxx:1172
 TEveWindow.cxx:1173
 TEveWindow.cxx:1174
 TEveWindow.cxx:1175
 TEveWindow.cxx:1176
 TEveWindow.cxx:1177
 TEveWindow.cxx:1178
 TEveWindow.cxx:1179
 TEveWindow.cxx:1180
 TEveWindow.cxx:1181
 TEveWindow.cxx:1182
 TEveWindow.cxx:1183
 TEveWindow.cxx:1184
 TEveWindow.cxx:1185
 TEveWindow.cxx:1186
 TEveWindow.cxx:1187
 TEveWindow.cxx:1188
 TEveWindow.cxx:1189
 TEveWindow.cxx:1190
 TEveWindow.cxx:1191
 TEveWindow.cxx:1192
 TEveWindow.cxx:1193
 TEveWindow.cxx:1194
 TEveWindow.cxx:1195
 TEveWindow.cxx:1196
 TEveWindow.cxx:1197
 TEveWindow.cxx:1198
 TEveWindow.cxx:1199
 TEveWindow.cxx:1200
 TEveWindow.cxx:1201
 TEveWindow.cxx:1202
 TEveWindow.cxx:1203
 TEveWindow.cxx:1204
 TEveWindow.cxx:1205
 TEveWindow.cxx:1206
 TEveWindow.cxx:1207
 TEveWindow.cxx:1208
 TEveWindow.cxx:1209
 TEveWindow.cxx:1210
 TEveWindow.cxx:1211
 TEveWindow.cxx:1212
 TEveWindow.cxx:1213
 TEveWindow.cxx:1214
 TEveWindow.cxx:1215
 TEveWindow.cxx:1216
 TEveWindow.cxx:1217
 TEveWindow.cxx:1218
 TEveWindow.cxx:1219
 TEveWindow.cxx:1220
 TEveWindow.cxx:1221
 TEveWindow.cxx:1222
 TEveWindow.cxx:1223
 TEveWindow.cxx:1224
 TEveWindow.cxx:1225
 TEveWindow.cxx:1226
 TEveWindow.cxx:1227
 TEveWindow.cxx:1228
 TEveWindow.cxx:1229
 TEveWindow.cxx:1230
 TEveWindow.cxx:1231
 TEveWindow.cxx:1232
 TEveWindow.cxx:1233
 TEveWindow.cxx:1234
 TEveWindow.cxx:1235
 TEveWindow.cxx:1236
 TEveWindow.cxx:1237
 TEveWindow.cxx:1238
 TEveWindow.cxx:1239
 TEveWindow.cxx:1240
 TEveWindow.cxx:1241
 TEveWindow.cxx:1242
 TEveWindow.cxx:1243
 TEveWindow.cxx:1244
 TEveWindow.cxx:1245
 TEveWindow.cxx:1246
 TEveWindow.cxx:1247
 TEveWindow.cxx:1248
 TEveWindow.cxx:1249
 TEveWindow.cxx:1250
 TEveWindow.cxx:1251
 TEveWindow.cxx:1252
 TEveWindow.cxx:1253
 TEveWindow.cxx:1254
 TEveWindow.cxx:1255
 TEveWindow.cxx:1256
 TEveWindow.cxx:1257
 TEveWindow.cxx:1258
 TEveWindow.cxx:1259
 TEveWindow.cxx:1260
 TEveWindow.cxx:1261
 TEveWindow.cxx:1262
 TEveWindow.cxx:1263
 TEveWindow.cxx:1264
 TEveWindow.cxx:1265
 TEveWindow.cxx:1266
 TEveWindow.cxx:1267
 TEveWindow.cxx:1268
 TEveWindow.cxx:1269
 TEveWindow.cxx:1270
 TEveWindow.cxx:1271
 TEveWindow.cxx:1272
 TEveWindow.cxx:1273
 TEveWindow.cxx:1274
 TEveWindow.cxx:1275
 TEveWindow.cxx:1276
 TEveWindow.cxx:1277
 TEveWindow.cxx:1278
 TEveWindow.cxx:1279
 TEveWindow.cxx:1280
 TEveWindow.cxx:1281
 TEveWindow.cxx:1282
 TEveWindow.cxx:1283
 TEveWindow.cxx:1284
 TEveWindow.cxx:1285
 TEveWindow.cxx:1286
 TEveWindow.cxx:1287
 TEveWindow.cxx:1288
 TEveWindow.cxx:1289
 TEveWindow.cxx:1290
 TEveWindow.cxx:1291
 TEveWindow.cxx:1292
 TEveWindow.cxx:1293
 TEveWindow.cxx:1294
 TEveWindow.cxx:1295
 TEveWindow.cxx:1296
 TEveWindow.cxx:1297
 TEveWindow.cxx:1298
 TEveWindow.cxx:1299
 TEveWindow.cxx:1300
 TEveWindow.cxx:1301
 TEveWindow.cxx:1302
 TEveWindow.cxx:1303
 TEveWindow.cxx:1304
 TEveWindow.cxx:1305
 TEveWindow.cxx:1306
 TEveWindow.cxx:1307
 TEveWindow.cxx:1308
 TEveWindow.cxx:1309
 TEveWindow.cxx:1310
 TEveWindow.cxx:1311
 TEveWindow.cxx:1312
 TEveWindow.cxx:1313
 TEveWindow.cxx:1314
 TEveWindow.cxx:1315
 TEveWindow.cxx:1316
 TEveWindow.cxx:1317
 TEveWindow.cxx:1318
 TEveWindow.cxx:1319
 TEveWindow.cxx:1320
 TEveWindow.cxx:1321
 TEveWindow.cxx:1322
 TEveWindow.cxx:1323
 TEveWindow.cxx:1324
 TEveWindow.cxx:1325
 TEveWindow.cxx:1326
 TEveWindow.cxx:1327
 TEveWindow.cxx:1328
 TEveWindow.cxx:1329
 TEveWindow.cxx:1330
 TEveWindow.cxx:1331
 TEveWindow.cxx:1332
 TEveWindow.cxx:1333
 TEveWindow.cxx:1334
 TEveWindow.cxx:1335
 TEveWindow.cxx:1336
 TEveWindow.cxx:1337
 TEveWindow.cxx:1338
 TEveWindow.cxx:1339
 TEveWindow.cxx:1340
 TEveWindow.cxx:1341
 TEveWindow.cxx:1342
 TEveWindow.cxx:1343
 TEveWindow.cxx:1344
 TEveWindow.cxx:1345
 TEveWindow.cxx:1346
 TEveWindow.cxx:1347
 TEveWindow.cxx:1348
 TEveWindow.cxx:1349
 TEveWindow.cxx:1350
 TEveWindow.cxx:1351
 TEveWindow.cxx:1352
 TEveWindow.cxx:1353
 TEveWindow.cxx:1354
 TEveWindow.cxx:1355
 TEveWindow.cxx:1356
 TEveWindow.cxx:1357
 TEveWindow.cxx:1358
 TEveWindow.cxx:1359
 TEveWindow.cxx:1360
 TEveWindow.cxx:1361
 TEveWindow.cxx:1362
 TEveWindow.cxx:1363
 TEveWindow.cxx:1364
 TEveWindow.cxx:1365
 TEveWindow.cxx:1366
 TEveWindow.cxx:1367
 TEveWindow.cxx:1368
 TEveWindow.cxx:1369
 TEveWindow.cxx:1370
 TEveWindow.cxx:1371
 TEveWindow.cxx:1372
 TEveWindow.cxx:1373
 TEveWindow.cxx:1374
 TEveWindow.cxx:1375
 TEveWindow.cxx:1376
 TEveWindow.cxx:1377
 TEveWindow.cxx:1378
 TEveWindow.cxx:1379
 TEveWindow.cxx:1380
 TEveWindow.cxx:1381
 TEveWindow.cxx:1382
 TEveWindow.cxx:1383
 TEveWindow.cxx:1384
 TEveWindow.cxx:1385
 TEveWindow.cxx:1386
 TEveWindow.cxx:1387
 TEveWindow.cxx:1388
 TEveWindow.cxx:1389
 TEveWindow.cxx:1390
 TEveWindow.cxx:1391
 TEveWindow.cxx:1392
 TEveWindow.cxx:1393
 TEveWindow.cxx:1394
 TEveWindow.cxx:1395
 TEveWindow.cxx:1396
 TEveWindow.cxx:1397
 TEveWindow.cxx:1398
 TEveWindow.cxx:1399
 TEveWindow.cxx:1400
 TEveWindow.cxx:1401
 TEveWindow.cxx:1402
 TEveWindow.cxx:1403
 TEveWindow.cxx:1404
 TEveWindow.cxx:1405
 TEveWindow.cxx:1406
 TEveWindow.cxx:1407
 TEveWindow.cxx:1408
 TEveWindow.cxx:1409
 TEveWindow.cxx:1410
 TEveWindow.cxx:1411
 TEveWindow.cxx:1412
 TEveWindow.cxx:1413
 TEveWindow.cxx:1414
 TEveWindow.cxx:1415
 TEveWindow.cxx:1416
 TEveWindow.cxx:1417
 TEveWindow.cxx:1418
 TEveWindow.cxx:1419
 TEveWindow.cxx:1420
 TEveWindow.cxx:1421
 TEveWindow.cxx:1422
 TEveWindow.cxx:1423
 TEveWindow.cxx:1424
 TEveWindow.cxx:1425
 TEveWindow.cxx:1426
 TEveWindow.cxx:1427
 TEveWindow.cxx:1428
 TEveWindow.cxx:1429
 TEveWindow.cxx:1430
 TEveWindow.cxx:1431
 TEveWindow.cxx:1432
 TEveWindow.cxx:1433
 TEveWindow.cxx:1434
 TEveWindow.cxx:1435
 TEveWindow.cxx:1436
 TEveWindow.cxx:1437
 TEveWindow.cxx:1438
 TEveWindow.cxx:1439
 TEveWindow.cxx:1440
 TEveWindow.cxx:1441
 TEveWindow.cxx:1442
 TEveWindow.cxx:1443
 TEveWindow.cxx:1444
 TEveWindow.cxx:1445
 TEveWindow.cxx:1446
 TEveWindow.cxx:1447
 TEveWindow.cxx:1448
 TEveWindow.cxx:1449
 TEveWindow.cxx:1450
 TEveWindow.cxx:1451
 TEveWindow.cxx:1452
 TEveWindow.cxx:1453
 TEveWindow.cxx:1454
 TEveWindow.cxx:1455
 TEveWindow.cxx:1456
 TEveWindow.cxx:1457
 TEveWindow.cxx:1458
 TEveWindow.cxx:1459
 TEveWindow.cxx:1460
 TEveWindow.cxx:1461
 TEveWindow.cxx:1462
 TEveWindow.cxx:1463
 TEveWindow.cxx:1464
 TEveWindow.cxx:1465
 TEveWindow.cxx:1466
 TEveWindow.cxx:1467
 TEveWindow.cxx:1468
 TEveWindow.cxx:1469
 TEveWindow.cxx:1470
 TEveWindow.cxx:1471
 TEveWindow.cxx:1472
 TEveWindow.cxx:1473
 TEveWindow.cxx:1474
 TEveWindow.cxx:1475
 TEveWindow.cxx:1476
 TEveWindow.cxx:1477
 TEveWindow.cxx:1478
 TEveWindow.cxx:1479
 TEveWindow.cxx:1480
 TEveWindow.cxx:1481
 TEveWindow.cxx:1482
 TEveWindow.cxx:1483
 TEveWindow.cxx:1484
 TEveWindow.cxx:1485
 TEveWindow.cxx:1486
 TEveWindow.cxx:1487
 TEveWindow.cxx:1488
 TEveWindow.cxx:1489
 TEveWindow.cxx:1490
 TEveWindow.cxx:1491
 TEveWindow.cxx:1492
 TEveWindow.cxx:1493
 TEveWindow.cxx:1494
 TEveWindow.cxx:1495
 TEveWindow.cxx:1496
 TEveWindow.cxx:1497
 TEveWindow.cxx:1498
 TEveWindow.cxx:1499
 TEveWindow.cxx:1500
 TEveWindow.cxx:1501
 TEveWindow.cxx:1502
 TEveWindow.cxx:1503
 TEveWindow.cxx:1504
 TEveWindow.cxx:1505
 TEveWindow.cxx:1506
 TEveWindow.cxx:1507
 TEveWindow.cxx:1508
 TEveWindow.cxx:1509
 TEveWindow.cxx:1510
 TEveWindow.cxx:1511
 TEveWindow.cxx:1512
 TEveWindow.cxx:1513
 TEveWindow.cxx:1514
 TEveWindow.cxx:1515
 TEveWindow.cxx:1516
 TEveWindow.cxx:1517
 TEveWindow.cxx:1518
 TEveWindow.cxx:1519
 TEveWindow.cxx:1520
 TEveWindow.cxx:1521
 TEveWindow.cxx:1522
 TEveWindow.cxx:1523
 TEveWindow.cxx:1524
 TEveWindow.cxx:1525
 TEveWindow.cxx:1526
 TEveWindow.cxx:1527
 TEveWindow.cxx:1528
 TEveWindow.cxx:1529
 TEveWindow.cxx:1530