// @(#)root/gui:$Id: ca18aae7f02ae8574b0c5414c78ede465425855d $
// Author: Bertrand Bellenot   20/06/06

/*************************************************************************
 * 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.

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

//////////////////////////////////////////////////////////////////////////
//                                                                      //
//  TGTextEditor                                                        //
//                                                                      //
//  A simple text editor that uses the TGTextEdit widget.               //
//  It provides all functionalities of TGTextEdit as copy, paste, cut,  //
//  search, go to a given line number. In addition, it provides the     //
//  possibilities for compiling, executing or interrupting a running    //
//  macro.                                                              //
//                                                                      //
//  This class can be used in following ways:                           //
//  - with file name as argument:                                       //
//    new TGTextEditor("hsimple.C");                                    //
//  - with a TMacro* as argument:                                       //
//    TMacro *macro = new TMacro("hsimple.C");                          //
//    new TGTextEditor(macro);                                          //
//                                                                      //
//  Basic Features:                                                     //
//                                                                      //
//  New Document                                                        //
//                                                                      //
//  To create a new blank document, select File menu / New, or click    //
//  the New toolbar button. It will create a new instance of            //
//  TGTextEditor.                                                       //
//                                                                      //
//  Open/Save File                                                      //
//                                                                      //
//  To open a file, select File menu / Open or click on the Open        //
//  toolbar button. This will bring up the standard File Dialog for     //
//  opening files.                                                      //
//  If the current document has not been saved yet, you will be asked   //
//  either to save or abandon the changes.                              //
//  To save the file using the same name, select File menu / Save or    //
//  the toolbar Save button. To change the file name use File menu /    //
//  Save As... or corresponding SaveAs button on the toolbar.           //
//                                                                      //
//  Text Selection                                                      //
//                                                                      //
//  You can move the cursor by simply clicking on the desired location  //
//  with the left mouse button. To highlight some text, press the mouse //
//  and drag the mouse while holding the left button pressed.           //
//  To select a word, double-click on it;                               //
//  to select the text line - triple-click on it;                       //
//  to select all  do quadruple-click.                                  //
//                                                                      //
//  Cut, Copy, Paste                                                    //
//                                                                      //
//  After selecting some text, you can cut or copy it to the clipboard. //
//  A subsequent paste operation will insert the contents of the        //
//  clipboard at the current cursor location.                           //
//                                                                      //
//  Text Search                                                         //
//                                                                      //
//  The editor uses a standard Search dialog. You can specify a forward //
//  or backward search direction starting from the current cursor       //
//  location according to the selection made of a case sensitive mode   //
//  or not. The last search can be repeated by pressing F3.             //
//                                                                      //
//  Text Font                                                           //
//                                                                      //
//  You can change the text font by selecting Edit menu / Set Font.     //
//  The Font Dialog pops up and shows the Name, Style, and Size of any  //
//  available font. The selected font sample is shown in the preview    //
//  area.                                                               //
//                                                                      //
//  Executing Macros                                                    //
//                                                                      //
//  You can execute the currently loaded macro in the editor by         //
//  selecting Tools menu / Execute Macro; by clicking on the            //
//  corresponding toolbar button, or by using Ctrl+F5 accelerator keys. //
//  This is identical to the command ".x macro.C" in the root prompt    //
//  command line.                                                       //
//                                                                      //
//  Compiling Macros                                                    //
//                                                                      //
//  The currently loaded macro can be compiled with ACLiC if you select //
//  Tools menu / Compile Macro; by clicking on the corresponding        //
//  toolbar button, or by using Ctrl+F7 accelerator keys.               //
//  This is identical to the command ".L macro.C++" in the root prompt  //
//  command line.                                                       //
//                                                                      //
//  Interrupting a Running Macro                                        //
//                                                                      //
//  You can interrupt a running macro by selecting the Tools menu /     //
//  Interrupt; by clicking on the corresponding toolbar button, or by   //
//  using Shift+F5 accelerator keys.                                    //
//                                                                      //
//  Interface to CINT Interpreter                                       //
//                                                                      //
//  Any command entered in the Command combo box will be passed to      //
//  the CINT interpreter. This combo box will keep the commands history //
//  and will allow you to re-execute the same commands during an editor //
//  session.                                                            //
//                                                                      //
//  Keyboard Bindings                                                   //
//                                                                      //
//  The following table lists the keyboard shortcuts and accelerator    //
//  keys.                                                               //
//                                                                      //
//  Key:              Action:                                           //
//  ====              =======                                           //
//                                                                      //
//  Up                Move cursor up.                                   //
//  Shift+Up          Move cursor up and extend selection.              //
//  Down              Move cursor down.                                 //
//  Shift+Down        Move cursor down and extend selection.            //
//  Left              Move cursor left.                                 //
//  Shift+Left        Move cursor left and extend selection.            //
//  Right             Move cursor right.                                //
//  Shift+Right       Move cursor right and extend selection.           //
//  Home              Move cursor to begin of line.                     //
//  Shift+Home        Move cursor to begin of line and extend selection.//
//  Ctrl+Home         Move cursor to top of page.                       //
//  End               Move cursor to end of line.                       //
//  Shift+End         Move cursor to end of line and extend selection.  //
//  Ctrl+End          Move cursor to end of page.                       //
//  PgUp              Move cursor up one page.                          //
//  Shift+PgUp        Move cursor up one page and extend selection.     //
//  PgDn              Move cursor down one page.                        //
//  Shift+PgDn        Move cursor down one page and extend selection.   //
//  Delete            Delete character after cursor, or text selection. //
//  BackSpace         Delete character before cursor, or text selection.//
//  Ctrl+B            Move cursor left.                                 //
//  Ctrl+D            Delete character after cursor, or text selection. //
//  Ctrl+E            Move cursor to end of line.                       //
//  Ctrl+H            Delete character before cursor, or text selection.//
//  Ctrl+K            Delete characters from current position to the    //
//                    end of line.                                      //
//  Ctrl+U            Delete current line.                              //
//                                                                      //
//Begin_Html
/*
<img src="gif/TGTextEditor.gif">
*/
//End_Html
//                                                                      //
//////////////////////////////////////////////////////////////////////////


#include "TROOT.h"
#include "TApplication.h"
#include "TSystem.h"
#include "TMacro.h"
#include "TInterpreter.h"
#include "TGMsgBox.h"
#include "TGFileDialog.h"
#include "TGFontDialog.h"
#include "TGTextEdit.h"
#include "TGMenu.h"
#include "TGButton.h"
#include "TGStatusBar.h"
#include "KeySymbols.h"
#include "TGToolBar.h"
#include "TG3DLine.h"
#include "TGLabel.h"
#include "TGTextEntry.h"
#include "TGTextEditDialogs.h"
#include "TGTextEditor.h"
#include "TGComboBox.h"
#include "TObjString.h"
#include "TRootHelpDialog.h"
#include "HelpText.h"
#ifdef WIN32
#include "TWin32SplashThread.h"
#endif

const char *ed_filetypes[] = {
   "ROOT Macros",  "*.C",
   "Source files", "*.cxx",
   "Text files",   "*.txt",
   "All files",    "*",
   0, 0
};

enum ETextEditorCommands {
   kM_FILE_NEW, kM_FILE_OPEN, kM_FILE_SAVE, kM_FILE_SAVEAS, kM_FILE_CLOSE,
   kM_FILE_PRINT, kM_FILE_EXIT, kM_EDIT_CUT, kM_EDIT_COPY, kM_EDIT_PASTE,
   kM_EDIT_DELETE, kM_EDIT_SELECTALL, kM_SEARCH_FIND, kM_SEARCH_FINDNEXT,
   kM_SEARCH_GOTO, kM_TOOLS_COMPILE, kM_TOOLS_EXECUTE, kM_TOOLS_INTERRUPT,
   kM_HELP_CONTENTS, kM_HELP_ABOUT, kM_EDIT_SELFONT
};

ToolBarData_t fTbData[] = {
  { "ed_new.png",       "New File",         kFALSE, kM_FILE_NEW,         0 },
  { "ed_open.png",      "Open File",        kFALSE, kM_FILE_OPEN,        0 },
  { "ed_save.png",      "Save File",        kFALSE, kM_FILE_SAVE,        0 },
  { "ed_saveas.png",    "Save File As...",  kFALSE, kM_FILE_SAVEAS,      0 },
  { "",                 0,                  0,      -1,                  0 },
  { "ed_print.png",     "Print",            kFALSE, kM_FILE_PRINT,       0 },
  { "",                 0,                  0,      -1,                  0 },
  { "ed_cut.png",       "Cut selection",    kFALSE, kM_EDIT_CUT,         0 },
  { "ed_copy.png",      "Copy selection",   kFALSE, kM_EDIT_COPY,        0 },
  { "ed_paste.png",     "Paste selection",  kFALSE, kM_EDIT_PASTE,       0 },
  { "ed_delete.png",    "Delete selection", kFALSE, kM_EDIT_DELETE,      0 },
  { "",                 0,                  0,      -1,                  0 },
  { "ed_find.png",      "Find...",          kFALSE, kM_SEARCH_FIND,      0 },
  { "ed_findnext.png",  "Find next",        kFALSE, kM_SEARCH_FINDNEXT,  0 },
  { "ed_goto.png",      "Goto...",          kFALSE, kM_SEARCH_GOTO,      0 },
  { "",                 0,                  0,      -1,                  0 },
  { "ed_compile.png",   "Compile Macro",    kFALSE, kM_TOOLS_COMPILE,    0 },
  { "ed_execute.png",   "Execute Macro",    kFALSE, kM_TOOLS_EXECUTE,    0 },
  { "ed_interrupt.png", "Interrupt",        kFALSE, kM_TOOLS_INTERRUPT,  0 },
  { "",                 0,                  0,      -1,                  0 },
  { "ed_help.png",      "Help Contents",    kFALSE, kM_HELP_CONTENTS,    0 },
  { "",                 0,                  0,      -1,                  0 },
  { "ed_quit.png",      "Close Editor",     kFALSE, kM_FILE_EXIT,        0 },
  {  0,                 0,                  0,      0,                   0 }
};

static char *gEPrinter      = 0;
static char *gEPrintCommand = 0;

ClassImp(TGTextEditor)

//______________________________________________________________________________
TGTextEditor::TGTextEditor(const char *filename, const TGWindow *p, UInt_t w,
                           UInt_t h) : TGMainFrame(p, w, h)
{
   // TGTextEditor constructor with file name as first argument.

   Build();
   if (p && p != gClient->GetDefaultRoot()) {
      // special case for TRootBrowser
      // remove the command line combo box and its associated label
      fComboCmd->UnmapWindow();
      fToolBar->RemoveFrame(fComboCmd);
      fLabel->UnmapWindow();
      fToolBar->RemoveFrame(fLabel);
      fToolBar->GetButton(kM_FILE_EXIT)->SetState(kButtonDisabled);
      fToolBar->Layout();
   }
   if (filename) {
      LoadFile(filename);
   }
   MapWindow();
}

//______________________________________________________________________________
TGTextEditor::TGTextEditor(TMacro *macro, const TGWindow *p, UInt_t w, UInt_t h) :
              TGMainFrame(p, w, h)
{
   // TGTextEditor constructor with pointer to a TMacro as first argument.

   TString tmp;
   Build();
   if (p && p != gClient->GetDefaultRoot()) {
      // special case for TRootBrowser
      // remove the command line combo box and its associated label
      fComboCmd->UnmapWindow();
      fLabel->UnmapWindow();
      if (fToolBar->GetButton(kM_FILE_EXIT))
         fToolBar->GetButton(kM_FILE_EXIT)->SetState(kButtonDisabled);
      fToolBar->Layout();
   }
   if (macro) {
      fMacro = macro;
      TIter next(macro->GetListOfLines());
      TObjString *obj;
      while ((obj = (TObjString*) next())) {
         fTextEdit->AddLine(obj->GetName());
      }
      tmp.Form("TMacro : %s: %ld lines read.",
               macro->GetName(), fTextEdit->ReturnLineCount());
      fStatusBar->SetText(tmp.Data(), 0);
      fFilename = macro->GetName();
      fFilename += ".C";
      tmp.Form("TMacro : %s - TGTextEditor", macro->GetName());
      SetWindowName(tmp.Data());
   }
   MapWindow();
}

//______________________________________________________________________________
TGTextEditor::~TGTextEditor()
{
   // TGTextEditor destructor.

   gApplication->Disconnect("Terminate(Int_t)");
   if (fTimer) delete fTimer;
   if (fMenuFile) delete fMenuFile;
   if (fMenuEdit) delete fMenuEdit;
   if (fMenuSearch) delete fMenuSearch;
   if (fMenuTools) delete fMenuTools;
   if (fMenuHelp) delete fMenuHelp;
}

//______________________________________________________________________________
void TGTextEditor::DeleteWindow()
{
   // Delete TGTextEditor Window.

   gApplication->Disconnect("Terminate(Int_t)");
   delete fTimer; fTimer = 0;
   delete fMenuFile; fMenuFile = 0;
   delete fMenuEdit; fMenuEdit = 0;
   delete fMenuSearch; fMenuSearch = 0;
   delete fMenuTools; fMenuTools = 0;
   delete fMenuHelp; fMenuHelp = 0;
   Cleanup();
   TGMainFrame::DeleteWindow();
}

//______________________________________________________________________________
void TGTextEditor::Build()
{
   // Build TGTextEditor widget.

   SetCleanup(kDeepCleanup);
   fMenuBarLayout = new TGLayoutHints(kLHintsTop | kLHintsExpandX, 0, 0, 1, 1);
   fMenuBarItemLayout = new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 0, 0);

   fMenuFile = new TGPopupMenu(fClient->GetDefaultRoot());
   fMenuFile->AddEntry("&New", kM_FILE_NEW);
   fMenuFile->AddSeparator();
   fMenuFile->AddEntry("&Open...", kM_FILE_OPEN);
   fMenuFile->AddEntry("&Close", kM_FILE_CLOSE);
   fMenuFile->AddEntry("&Save", kM_FILE_SAVE);
   fMenuFile->AddEntry("Save &As...", kM_FILE_SAVEAS);
   fMenuFile->AddSeparator();
   fMenuFile->AddEntry("&Print...", kM_FILE_PRINT);
   fMenuFile->AddSeparator();
   fMenuFile->AddEntry("E&xit", kM_FILE_EXIT);

   fMenuEdit = new TGPopupMenu(fClient->GetDefaultRoot());
   fMenuEdit->AddEntry("Cu&t\tCtrl+X", kM_EDIT_CUT);
   fMenuEdit->AddEntry("&Copy\tCtrl+C", kM_EDIT_COPY);
   fMenuEdit->AddEntry("&Paste\tCtrl+V", kM_EDIT_PASTE);
   fMenuEdit->AddEntry("De&lete\tDel", kM_EDIT_DELETE);
   fMenuEdit->AddSeparator();
   fMenuEdit->AddEntry("Select &All\tCtrl+A", kM_EDIT_SELECTALL);
   fMenuEdit->AddSeparator();
   fMenuEdit->AddEntry("Set &Font", kM_EDIT_SELFONT);

   fMenuTools = new TGPopupMenu(fClient->GetDefaultRoot());
   fMenuTools->AddEntry("&Compile Macro\tCtrl+F7", kM_TOOLS_COMPILE);
   fMenuTools->AddEntry("&Execute Macro\tCtrl+F5", kM_TOOLS_EXECUTE);
   fMenuTools->AddEntry("&Interrupt\tShift+F5", kM_TOOLS_INTERRUPT);

   fMenuEdit->DisableEntry(kM_EDIT_CUT);
   fMenuEdit->DisableEntry(kM_EDIT_COPY);
   fMenuEdit->DisableEntry(kM_EDIT_DELETE);
   fMenuEdit->DisableEntry(kM_EDIT_PASTE);

   fMenuSearch = new TGPopupMenu(fClient->GetDefaultRoot());
   fMenuSearch->AddEntry("&Find...\tCtrl+F", kM_SEARCH_FIND);
   fMenuSearch->AddEntry("Find &Next\tF3", kM_SEARCH_FINDNEXT);
   fMenuSearch->AddSeparator();
   fMenuSearch->AddEntry("&Goto Line...\tCtrl+L", kM_SEARCH_GOTO);

   fMenuHelp = new TGPopupMenu(fClient->GetDefaultRoot());
   fMenuHelp->AddEntry("&Help Topics\tF1", kM_HELP_CONTENTS);
   fMenuHelp->AddSeparator();
   fMenuHelp->AddEntry("&About...", kM_HELP_ABOUT);

   fMenuFile->Associate(this);
   fMenuEdit->Associate(this);
   fMenuSearch->Associate(this);
   fMenuTools->Associate(this);
   fMenuHelp->Associate(this);

   fMenuBar = new TGMenuBar(this, 1, 1, kHorizontalFrame);
   fMenuBar->SetCleanup(kDeepCleanup);
   fMenuBar->AddPopup("&File", fMenuFile, fMenuBarItemLayout);
   fMenuBar->AddPopup("&Edit", fMenuEdit, fMenuBarItemLayout);
   fMenuBar->AddPopup("&Search", fMenuSearch, fMenuBarItemLayout);
   fMenuBar->AddPopup("&Tools", fMenuTools, fMenuBarItemLayout);
   fMenuBar->AddPopup("&Help", fMenuHelp, new TGLayoutHints(kLHintsTop |
                      kLHintsRight));
   AddFrame(fMenuBar, fMenuBarLayout);

   //---- toolbar

   AddFrame(new TGHorizontal3DLine(this),
            new TGLayoutHints(kLHintsTop | kLHintsExpandX, 0,0,2,2));
   Int_t i,spacing = 8;
   fToolBar = new TGToolBar(this, 60, 20, kHorizontalFrame);
   fToolBar->SetCleanup(kDeepCleanup);
   for (i = 0; fTbData[i].fPixmap; i++) {
      if (strlen(fTbData[i].fPixmap) == 0) {
         spacing = 8;
         continue;
      }
      fToolBar->AddButton(this, &fTbData[i], spacing);
      spacing = 0;
   }
   fComboCmd   = new TGComboBox(fToolBar, "");
   fCommand    = fComboCmd->GetTextEntry();
   fCommandBuf = fCommand->GetBuffer();
   fCommand->Associate(this);
   fComboCmd->Resize(200, fCommand->GetDefaultHeight());
   fToolBar->AddFrame(fComboCmd, new TGLayoutHints(kLHintsCenterY |
            kLHintsRight, 5, 5, 1, 1));

   fToolBar->AddFrame(fLabel = new TGLabel(fToolBar, "Command :"),
            new TGLayoutHints(kLHintsCenterY | kLHintsRight, 5, 5, 1, 1));
   AddFrame(fToolBar, new TGLayoutHints(kLHintsTop | kLHintsExpandX,
            0, 0, 0, 0));
   AddFrame(new TGHorizontal3DLine(this),
            new TGLayoutHints(kLHintsTop | kLHintsExpandX, 0,0,2,2));

   fToolBar->GetButton(kM_EDIT_CUT)->SetState(kButtonDisabled);
   fToolBar->GetButton(kM_EDIT_COPY)->SetState(kButtonDisabled);
   fToolBar->GetButton(kM_EDIT_DELETE)->SetState(kButtonDisabled);
   fToolBar->GetButton(kM_EDIT_PASTE)->SetState(kButtonDisabled);

   fTextEdit = new TGTextEdit(this, 10, 10, 1);
   if (gClient->GetStyle() < 2) {
      Pixel_t pxl;
      gClient->GetColorByName("#3399ff", pxl);
      fTextEdit->SetSelectBack(pxl);
      fTextEdit->SetSelectFore(TGFrame::GetWhitePixel());
   }
   fTextEdit->Associate(this);
   AddFrame(fTextEdit, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY));

   Int_t parts[] = { 75, 25 };
   fStatusBar = new TGStatusBar(this);
   fStatusBar->SetCleanup(kDeepCleanup);
   fStatusBar->SetParts(parts, 2);
   AddFrame(fStatusBar, new TGLayoutHints(kLHintsBottom | kLHintsExpandX, 0, 0, 3, 0));

   SetClassHints("ROOT", "TGTextEditor");
   SetWindowName("Untitled - TGTextEditor");

   fMacro = 0;
   fFilename = "Untitled";
   fStatusBar->SetText(fFilename.Data(), 0);

   fTextEdit->SetFocus();
   fTextEdit->GetMenu()->DisableEntry(TGTextEdit::kM_FILE_NEW);
   fTextEdit->GetMenu()->DisableEntry(TGTextEdit::kM_FILE_OPEN);
   fTextEdit->Connect("DataChanged()", "TGTextEditor", this, "DataChanged()");
   fTextEdit->Connect("Closed()", "TGTextEditor", this, "ClearText()");
   fTextEdit->Connect("Opened()", "TGTextEditor", this, "ClearText()");
   fTextEdit->Connect("DataDropped(char *)", "TGTextEditor", this, "DataDropped(char *)");
   fTextEdit->MapWindow();

   MapSubwindows();
   Resize(GetDefaultWidth() + 50, GetDefaultHeight() > 500 ? GetDefaultHeight() : 500);
   Layout();

   gApplication->Connect("Terminate(Int_t)", "TGTextEditor", this, "ClearText()");
   gVirtualX->GrabKey(fId, gVirtualX->KeysymToKeycode(kKey_F3), 0, kTRUE);

   AddInput(kKeyPressMask | kEnterWindowMask | kLeaveWindowMask |
            kFocusChangeMask | kStructureNotifyMask);

   fTimer = new TTimer(this, 250);
   fTimer->Reset();
   fTimer->TurnOn();

   fExiting = kFALSE;
   fTextChanged = kFALSE;
}

//______________________________________________________________________________
void TGTextEditor::DataDropped(char *fname)
{
   // Update file information when receiving the signal
   // DataDropped from TGTextEdit widget.

   TString tmp;
   fFilename = fname;
   tmp.Form("%s: %ld lines read.", fname, fTextEdit->ReturnLineCount());
   fStatusBar->SetText(tmp, 0);
   tmp.Form("%s - TGTextEditor", fname);
   SetWindowName(tmp.Data());
}

//______________________________________________________________________________
void TGTextEditor::DataChanged()
{
   // Slot setting the fTextChanged flag to true when the text has been
   // modified in fTextEdit

   fTextChanged = kTRUE;
}

//______________________________________________________________________________
void TGTextEditor::LoadFile(const char *fname)
{
   // Load a file into the editor. If fname is 0, a TGFileDialog will popup.

   TString tmp;
   TGFileInfo fi;
   fi.fFileTypes = ed_filetypes;
   switch (IsSaved()) {
      case kMBCancel:
         return;
      case kMBYes:
         if (!fFilename.CompareTo("Untitled"))
            SaveFileAs();
         else
            SaveFile(fFilename.Data());
         if (fTextChanged) {
            return;
         }
         break;
      case kMBNo:
         break;
      default:
         return;
   }
   if (fname == 0) {
      new TGFileDialog(fClient->GetDefaultRoot(), this, kFDOpen, &fi);
      if (fi.fFilename && strlen(fi.fFilename)) {
         fname = fi.fFilename;
      }
   }
   if (fname) {
      if (!fTextEdit->LoadFile(fname)) {
         tmp.Form("Error opening file \"%s\"", fname);
         new TGMsgBox(fClient->GetRoot(), this, "TGTextEditor",
                      tmp.Data(), kMBIconExclamation, kMBOk);
      } else {
         fFilename = fname;
         tmp.Form("%s: %ld lines read.", fname, fTextEdit->ReturnLineCount());
         fStatusBar->SetText(tmp.Data(), 0);
         tmp.Form("%s - TGTextEditor", fname);
         SetWindowName(tmp.Data());
         fTextChanged = kFALSE;
      }
   }
   fTextEdit->Layout();
}

//______________________________________________________________________________
void TGTextEditor::SaveFile(const char *fname)
{
   // Save the edited text in the file "fname".

   char *p;
   TString tmp;

   if (!fTextEdit->SaveFile(fname)) {
      tmp.Form("Error saving file \"%s\"", fname);
      new TGMsgBox(fClient->GetRoot(), this, "TGTextEditor",
                   tmp.Data(), kMBIconExclamation, kMBOk);
      return;
   }
   if ((p = (char *)strrchr(fname, '/')) == 0) {
      p = (char *)fname;
   } else {
      ++p;
   }
   tmp.Form("%s: %ld lines written.", p, fTextEdit->ReturnLineCount());
   fStatusBar->SetText(tmp.Data(), 0);

   tmp.Form("%s - TGTextEditor", p);
   SetWindowName(tmp.Data());
   fTextChanged = kFALSE;
}

//______________________________________________________________________________
Bool_t TGTextEditor::SaveFileAs()
{
   // Save the edited text in a file selected with TGFileDialog.
   // Shouldn't we create a backup file?

   TString workdir = gSystem->WorkingDirectory();
   static TString dir(".");
   static Bool_t overwr = kFALSE;
   TGFileInfo fi;
   fi.fFileTypes = ed_filetypes;
   fi.fIniDir    = StrDup(dir);
   fi.fOverwrite = overwr;
   new TGFileDialog(fClient->GetDefaultRoot(), this, kFDSave, &fi);
   gSystem->ChangeDirectory(workdir.Data());
   overwr = fi.fOverwrite;
   if (fi.fFilename && strlen(fi.fFilename)) {
      SaveFile(fi.fFilename);
      fFilename = fi.fFilename;
      return kTRUE;
   }
   return kFALSE;
}

//______________________________________________________________________________
Int_t TGTextEditor::IsSaved()
{
   // Check if file has to be saved in case of modifications.

   Int_t ret;
   TString tmp;
   Int_t opt = (kMBYes | kMBNo);

   tmp.Form("The text has been modified. Do you want to save the changes?");

   if (!fTextChanged) {
      return kMBNo;
   } else {
      if (fParent == gClient->GetDefaultRoot())
         opt |= kMBCancel;
      new TGMsgBox(fClient->GetRoot(), this, "TGTextEditor",
                   tmp.Data(), kMBIconExclamation, opt, &ret);
      return ret;
   }
}

//______________________________________________________________________________
void TGTextEditor::PrintText()
{
   // Open the print dialog and send current buffer to printer.

   TString tmp;
   Int_t ret = 0;
   if (!gEPrinter) {
      gEPrinter = StrDup("892_2_cor"); // use gEnv
      gEPrintCommand = StrDup("xprint");
   }
   new TGPrintDialog(fClient->GetDefaultRoot(), this, 400, 150,
                     &gEPrinter, &gEPrintCommand, &ret);
   if (ret) {
      fTextEdit->Print();
      tmp.Form("Printed: %s", fFilename.Data());
      fStatusBar->SetText(tmp.Data(), 0);
   }
}

//______________________________________________________________________________
void TGTextEditor::CloseWindow()
{
   // Close TGTextEditor window.

   if (fExiting) {
      return;
   }
   fExiting = kTRUE;
   switch (IsSaved()) {
      case kMBYes:
         if (!fFilename.CompareTo("Untitled"))
            SaveFileAs();
         else
            SaveFile(fFilename.Data());
         if ((fTextChanged) && (fParent == gClient->GetDefaultRoot()))
            break;
      case kMBCancel:
         if (fParent == gClient->GetDefaultRoot())
            break;
      case kMBNo:
         gApplication->Disconnect("Terminate(Int_t)");
         TGMainFrame::CloseWindow();
   }
   fExiting = kFALSE;
}

//______________________________________________________________________________
Bool_t TGTextEditor::HandleKey(Event_t *event)
{
   // Keyboard event handler.

   char   input[10];
   UInt_t keysym;

   if (event->fType == kGKeyPress) {
      gVirtualX->LookupString(event, input, sizeof(input), keysym);

      switch ((EKeySym)keysym) {   // ignore these keys
         case kKey_Shift:
         case kKey_Control:
         case kKey_Meta:
         case kKey_Alt:
         case kKey_CapsLock:
         case kKey_NumLock:
         case kKey_ScrollLock:
            return kTRUE;
         case kKey_F1:
            SendMessage(this, MK_MSG(kC_COMMAND, kCM_MENU),
                        kM_HELP_CONTENTS, 0);
            return kTRUE;
         case kKey_F3:
            Search(kTRUE);
            return kTRUE;
         default:
            break;
      }
      if (event->fState & kKeyControlMask) {   // Ctrl key modifier pressed
         switch((EKeySym)keysym) {
            case kKey_F5:
               ExecuteMacro();
               return kTRUE;
            case kKey_F7:
               CompileMacro();
               return kTRUE;
            default:
               break;
         }
      }
      if (event->fState & kKeyShiftMask) {   // Shift key modifier pressed
         switch((EKeySym)keysym) {
            case kKey_F5:
               InterruptMacro();
               return kTRUE;
            default:
               break;
         }
      }
   }
   return TGMainFrame::HandleKey(event);
}

//______________________________________________________________________________
void TGTextEditor::ClearText()
{
   // Clear text edit widget.

   fTextEdit->Clear();
   fMacro = 0;
   fFilename = "Untitled";
   SetWindowName("Untitled - TGTextEditor");
   fStatusBar->SetText("New File", 0);
   fTextChanged = kFALSE;
}

//______________________________________________________________________________
void TGTextEditor::Search(Bool_t again)
{
   // Invokes search dialog, or just search previous string if again is true.

   if (again) {
      SendMessage(fTextEdit, MK_MSG(kC_COMMAND, kCM_MENU),
                  TGTextEdit::kM_SEARCH_FINDAGAIN, 0);
   }
   else {
      fTextEdit->Search(kFALSE);
   }
}

//______________________________________________________________________________
void TGTextEditor::Goto()
{
   // Invokes goto dialog, and go to the specified line.

   Long_t ret;

   new TGGotoDialog(fClient->GetDefaultRoot(), this, 400, 150, &ret);

   if (ret >= 0)
      fTextEdit->Goto(ret-1);
}

//______________________________________________________________________________
void TGTextEditor::CompileMacro()
{
   // Save the edited text in a temporary macro, then compile it.

   if (fTextEdit->ReturnLineCount() < 3)
      return;
   if ((fMacro) || (!fFilename.CompareTo("Untitled"))) {
      if (!SaveFileAs())
         return;
   }
   char *tmpfile = gSystem->ConcatFileName(gSystem->TempDirectory(),
                                gSystem->BaseName(fFilename.Data()));
   fTextEdit->SaveFile(tmpfile, kFALSE);
   gSystem->CompileMacro(tmpfile);
   gSystem->Unlink(tmpfile);
   delete [] tmpfile;
}

//______________________________________________________________________________
void TGTextEditor::ExecuteMacro()
{
   // Save the edited text in a temporary macro, execute it, and then delete
   // the temporary file.

   if (fTextEdit->ReturnLineCount() < 3)
      return;
   if (fMacro) {
      fMacro->Exec();
      return;
   }
   if (fTextChanged) {
      Int_t ret;
      new TGMsgBox(fClient->GetRoot(), this, "TGTextEditor",
            "The text has been modified. Do you want to save the changes?",
            kMBIconExclamation, kMBYes | kMBNo | kMBCancel, &ret);
      if (ret == kMBYes) {
         if (!fFilename.CompareTo("Untitled"))
            SaveFileAs();
         else
            SaveFile(fFilename.Data());
         fTextChanged = kFALSE;
      }
      if (ret == kMBCancel)
         return;
   }
   if (!fFilename.CompareTo("Untitled")) {
      //if (!SaveFileAs())
      //   return;
      fFilename += ".C";
   }
   gInterpreter->SaveContext();
   TString savdir = gSystem->WorkingDirectory();
   TString tmpfile = gSystem->BaseName(fFilename.Data());
   tmpfile += "_exec";
   gSystem->ChangeDirectory(gSystem->DirName(fFilename.Data()));
   fTextEdit->SaveFile(tmpfile.Data(), kFALSE);
   gROOT->SetExecutingMacro(kTRUE);
   gROOT->Macro(tmpfile.Data());
   gROOT->SetExecutingMacro(kFALSE);
   if (gInterpreter->IsLoaded(tmpfile.Data()))
      gInterpreter->UnloadFile(tmpfile.Data());
   gSystem->Unlink(tmpfile.Data());
   gSystem->ChangeDirectory(savdir.Data());
   gInterpreter->Reset();
}

//______________________________________________________________________________
void TGTextEditor::InterruptMacro()
{
   // Interrupt execution of a macro.

   gROOT->SetInterrupt(kTRUE);
}

//______________________________________________________________________________
void TGTextEditor::About()
{
   // Display ROOT splash screen.

#ifdef R__UNIX
   TString rootx;
# ifdef ROOTBINDIR
   rootx = ROOTBINDIR;
# else
   rootx = gSystem->Getenv("ROOTSYS");
   if (!rootx.IsNull()) rootx += "/bin";
# endif
   rootx += "/root -a &";
   gSystem->Exec(rootx);
#else
#ifdef WIN32
   new TWin32SplashThread(kTRUE);
#else
   char str[32];
   sprintf(str, "About ROOT %s...", gROOT->GetVersion());
   TRootHelpDialog *hd = new TRootHelpDialog(this, str, 600, 400);
   hd->SetText(gHelpAbout);
   hd->Popup();
#endif
#endif
}

//______________________________________________________________________________
Bool_t TGTextEditor::HandleTimer(TTimer *t)
{
   // Handle timer event.

   TString tmp;
   if (t != fTimer) return kTRUE;
   // check if some text is available in the clipboard
   if ((gVirtualX->InheritsFrom("TGX11")) &&
      (gVirtualX->GetPrimarySelectionOwner() == kNone)) {
      fMenuEdit->DisableEntry(kM_EDIT_PASTE);
      fToolBar->GetButton(kM_EDIT_PASTE)->SetState(kButtonDisabled);
   }
   else {
      fMenuEdit->EnableEntry(kM_EDIT_PASTE);
      if (fToolBar->GetButton(kM_EDIT_PASTE)->GetState() == kButtonDisabled)
         fToolBar->GetButton(kM_EDIT_PASTE)->SetState(kButtonUp);
   }
   // check if text is selected in the editor
   if (fTextEdit->IsMarked()) {
      fMenuEdit->EnableEntry(kM_EDIT_CUT);
      fMenuEdit->EnableEntry(kM_EDIT_COPY);
      fMenuEdit->EnableEntry(kM_EDIT_DELETE);
      if (fToolBar->GetButton(kM_EDIT_CUT)->GetState() == kButtonDisabled) {
         fToolBar->GetButton(kM_EDIT_CUT)->SetState(kButtonUp);
         fToolBar->GetButton(kM_EDIT_COPY)->SetState(kButtonUp);
         fToolBar->GetButton(kM_EDIT_DELETE)->SetState(kButtonUp);
      }
   }
   else {
      fMenuEdit->DisableEntry(kM_EDIT_CUT);
      fMenuEdit->DisableEntry(kM_EDIT_COPY);
      fMenuEdit->DisableEntry(kM_EDIT_DELETE);
      if (fToolBar->GetButton(kM_EDIT_CUT)->GetState() == kButtonUp) {
         fToolBar->GetButton(kM_EDIT_CUT)->SetState(kButtonDisabled);
         fToolBar->GetButton(kM_EDIT_COPY)->SetState(kButtonDisabled);
         fToolBar->GetButton(kM_EDIT_DELETE)->SetState(kButtonDisabled);
      }
   }
   // get cursor position
   TGLongPosition pos = fTextEdit->GetCurrentPos();
   tmp.Form("Ln %ld, Ch %ld", pos.fY, pos.fX);
   fStatusBar->SetText(tmp.Data(), 1);
   fTimer->Reset();
   return kTRUE;
}

//______________________________________________________________________________
Bool_t TGTextEditor::ProcessMessage(Long_t msg, Long_t parm1, Long_t)
{
   // Handle menu and other command generated by the user.

   TRootHelpDialog *hd;

   switch(GET_MSG(msg)) {
      case kC_COMMAND:
         switch(GET_SUBMSG(msg)) {
            case kCM_BUTTON:
            case kCM_MENU:
               switch (parm1) {
                  // "File" menu related events
                  case kM_FILE_NEW:
                     new TGTextEditor();
                     break;
                  case kM_FILE_OPEN:
                     LoadFile();
                     break;
                  case kM_FILE_CLOSE:
                     ClearText();
                     break;
                  case kM_FILE_SAVE:
                     if (!fFilename.CompareTo("Untitled"))
                        SaveFileAs();
                     else
                        SaveFile(fFilename.Data());
                     break;
                  case kM_FILE_SAVEAS:
                     SaveFileAs();
                     break;
                  case kM_FILE_PRINT:
                     PrintText();
                     break;
                  case kM_FILE_EXIT:
                     CloseWindow();
                     break;

                  // "Edit" menu related events
                  case kM_EDIT_CUT:
                     fTextEdit->Cut();
                     break;
                  case kM_EDIT_COPY:
                     fTextEdit->Copy();
                     break;
                  case kM_EDIT_PASTE:
                     fTextEdit->Paste();
                     break;
                  case kM_EDIT_DELETE:
                     fTextEdit->Delete();
                     break;
                  case kM_EDIT_SELECTALL:
                     fTextEdit->SelectAll();
                     if (fTextEdit->IsMarked()) {
                        fMenuEdit->EnableEntry(kM_EDIT_CUT);
                        fMenuEdit->EnableEntry(kM_EDIT_COPY);
                        fMenuEdit->EnableEntry(kM_EDIT_DELETE);
                        if (fToolBar->GetButton(kM_EDIT_CUT)->GetState() == kButtonDisabled) {
                           fToolBar->GetButton(kM_EDIT_CUT)->SetState(kButtonUp);
                           fToolBar->GetButton(kM_EDIT_COPY)->SetState(kButtonUp);
                           fToolBar->GetButton(kM_EDIT_DELETE)->SetState(kButtonUp);
                        }
                     }
                     break;
                  case kM_EDIT_SELFONT:
                     {
                        Int_t count;
                        TString fontname;
                        TGFontDialog::FontProp_t prop;
                        new TGFontDialog(fClient->GetRoot(), this, &prop);
                        if (prop.fName != "") {
                           fontname.Form("-*-%s-%s-%c-*-*-%d-*-*-*-*-*-*-*",
                                         prop.fName.Data(),
                                         prop.fBold ? "bold" : "medium",
                                         prop.fItalic ? 'i' : 'r',
                                         prop.fSize);
                           if (!gVirtualX->ListFonts(fontname, 10, count)) {
                              fontname.Form("-*-%s-%s-%c-*-*-%d-*-*-*-*-*-*-*",
                                            prop.fName.Data(),
                                            prop.fBold ? "bold" : "medium",
                                            prop.fItalic ? 'o' : 'r',
                                            prop.fSize);
                           }
                           TGFont *font = fClient->GetFont(fontname);
                           if (font) {
                              FontStruct_t editorfont = font->GetFontStruct();
                              fTextEdit->SetFont(editorfont);
                              fTextEdit->Update();
                           }
                        }
                     }
                     break;

                  // "Tools" menu related events
                  case kM_TOOLS_COMPILE:
                     CompileMacro();
                     break;
                  case kM_TOOLS_EXECUTE:
                     ExecuteMacro();
                     break;
                  case kM_TOOLS_INTERRUPT:
                     InterruptMacro();
                     break;

                  // "Search" menu related events
                  case kM_SEARCH_FIND:
                     Search(kFALSE);
                     break;
                  case kM_SEARCH_FINDNEXT:
                     Search(kTRUE);
                     break;
                  case kM_SEARCH_GOTO:
                     Goto();
                     break;

                  // "Help" menu related events
                  case kM_HELP_CONTENTS:
                     hd = new TRootHelpDialog(this, "Help on Editor...", 600, 400);
                     hd->SetText(gHelpTextEditor);
                     hd->Popup();
                     break;
                  case kM_HELP_ABOUT:
                     About();
                     break;
               }
               break;
         }
         break;
      case kC_TEXTENTRY:
         switch (GET_SUBMSG(msg)) {
            case kTE_ENTER:
               {
                  // here copy the string from text buffer to return variable
                  const char *string = fCommandBuf->GetString();
                  if(strlen(string) > 1) {
                     gROOT->ProcessLine(string);
                     fComboCmd->ReturnPressed();
                  }
               }
               break;
            default:
               break;
         }
         break;

      default:
         break;
   }
   return kTRUE;
}
 TGTextEditor.cxx:1
 TGTextEditor.cxx:2
 TGTextEditor.cxx:3
 TGTextEditor.cxx:4
 TGTextEditor.cxx:5
 TGTextEditor.cxx:6
 TGTextEditor.cxx:7
 TGTextEditor.cxx:8
 TGTextEditor.cxx:9
 TGTextEditor.cxx:10
 TGTextEditor.cxx:11
 TGTextEditor.cxx:12
 TGTextEditor.cxx:13
 TGTextEditor.cxx:14
 TGTextEditor.cxx:15
 TGTextEditor.cxx:16
 TGTextEditor.cxx:17
 TGTextEditor.cxx:18
 TGTextEditor.cxx:19
 TGTextEditor.cxx:20
 TGTextEditor.cxx:21
 TGTextEditor.cxx:22
 TGTextEditor.cxx:23
 TGTextEditor.cxx:24
 TGTextEditor.cxx:25
 TGTextEditor.cxx:26
 TGTextEditor.cxx:27
 TGTextEditor.cxx:28
 TGTextEditor.cxx:29
 TGTextEditor.cxx:30
 TGTextEditor.cxx:31
 TGTextEditor.cxx:32
 TGTextEditor.cxx:33
 TGTextEditor.cxx:34
 TGTextEditor.cxx:35
 TGTextEditor.cxx:36
 TGTextEditor.cxx:37
 TGTextEditor.cxx:38
 TGTextEditor.cxx:39
 TGTextEditor.cxx:40
 TGTextEditor.cxx:41
 TGTextEditor.cxx:42
 TGTextEditor.cxx:43
 TGTextEditor.cxx:44
 TGTextEditor.cxx:45
 TGTextEditor.cxx:46
 TGTextEditor.cxx:47
 TGTextEditor.cxx:48
 TGTextEditor.cxx:49
 TGTextEditor.cxx:50
 TGTextEditor.cxx:51
 TGTextEditor.cxx:52
 TGTextEditor.cxx:53
 TGTextEditor.cxx:54
 TGTextEditor.cxx:55
 TGTextEditor.cxx:56
 TGTextEditor.cxx:57
 TGTextEditor.cxx:58
 TGTextEditor.cxx:59
 TGTextEditor.cxx:60
 TGTextEditor.cxx:61
 TGTextEditor.cxx:62
 TGTextEditor.cxx:63
 TGTextEditor.cxx:64
 TGTextEditor.cxx:65
 TGTextEditor.cxx:66
 TGTextEditor.cxx:67
 TGTextEditor.cxx:68
 TGTextEditor.cxx:69
 TGTextEditor.cxx:70
 TGTextEditor.cxx:71
 TGTextEditor.cxx:72
 TGTextEditor.cxx:73
 TGTextEditor.cxx:74
 TGTextEditor.cxx:75
 TGTextEditor.cxx:76
 TGTextEditor.cxx:77
 TGTextEditor.cxx:78
 TGTextEditor.cxx:79
 TGTextEditor.cxx:80
 TGTextEditor.cxx:81
 TGTextEditor.cxx:82
 TGTextEditor.cxx:83
 TGTextEditor.cxx:84
 TGTextEditor.cxx:85
 TGTextEditor.cxx:86
 TGTextEditor.cxx:87
 TGTextEditor.cxx:88
 TGTextEditor.cxx:89
 TGTextEditor.cxx:90
 TGTextEditor.cxx:91
 TGTextEditor.cxx:92
 TGTextEditor.cxx:93
 TGTextEditor.cxx:94
 TGTextEditor.cxx:95
 TGTextEditor.cxx:96
 TGTextEditor.cxx:97
 TGTextEditor.cxx:98
 TGTextEditor.cxx:99
 TGTextEditor.cxx:100
 TGTextEditor.cxx:101
 TGTextEditor.cxx:102
 TGTextEditor.cxx:103
 TGTextEditor.cxx:104
 TGTextEditor.cxx:105
 TGTextEditor.cxx:106
 TGTextEditor.cxx:107
 TGTextEditor.cxx:108
 TGTextEditor.cxx:109
 TGTextEditor.cxx:110
 TGTextEditor.cxx:111
 TGTextEditor.cxx:112
 TGTextEditor.cxx:113
 TGTextEditor.cxx:114
 TGTextEditor.cxx:115
 TGTextEditor.cxx:116
 TGTextEditor.cxx:117
 TGTextEditor.cxx:118
 TGTextEditor.cxx:119
 TGTextEditor.cxx:120
 TGTextEditor.cxx:121
 TGTextEditor.cxx:122
 TGTextEditor.cxx:123
 TGTextEditor.cxx:124
 TGTextEditor.cxx:125
 TGTextEditor.cxx:126
 TGTextEditor.cxx:127
 TGTextEditor.cxx:128
 TGTextEditor.cxx:129
 TGTextEditor.cxx:130
 TGTextEditor.cxx:131
 TGTextEditor.cxx:132
 TGTextEditor.cxx:133
 TGTextEditor.cxx:134
 TGTextEditor.cxx:135
 TGTextEditor.cxx:136
 TGTextEditor.cxx:137
 TGTextEditor.cxx:138
 TGTextEditor.cxx:139
 TGTextEditor.cxx:140
 TGTextEditor.cxx:141
 TGTextEditor.cxx:142
 TGTextEditor.cxx:143
 TGTextEditor.cxx:144
 TGTextEditor.cxx:145
 TGTextEditor.cxx:146
 TGTextEditor.cxx:147
 TGTextEditor.cxx:148
 TGTextEditor.cxx:149
 TGTextEditor.cxx:150
 TGTextEditor.cxx:151
 TGTextEditor.cxx:152
 TGTextEditor.cxx:153
 TGTextEditor.cxx:154
 TGTextEditor.cxx:155
 TGTextEditor.cxx:156
 TGTextEditor.cxx:157
 TGTextEditor.cxx:158
 TGTextEditor.cxx:159
 TGTextEditor.cxx:160
 TGTextEditor.cxx:161
 TGTextEditor.cxx:162
 TGTextEditor.cxx:163
 TGTextEditor.cxx:164
 TGTextEditor.cxx:165
 TGTextEditor.cxx:166
 TGTextEditor.cxx:167
 TGTextEditor.cxx:168
 TGTextEditor.cxx:169
 TGTextEditor.cxx:170
 TGTextEditor.cxx:171
 TGTextEditor.cxx:172
 TGTextEditor.cxx:173
 TGTextEditor.cxx:174
 TGTextEditor.cxx:175
 TGTextEditor.cxx:176
 TGTextEditor.cxx:177
 TGTextEditor.cxx:178
 TGTextEditor.cxx:179
 TGTextEditor.cxx:180
 TGTextEditor.cxx:181
 TGTextEditor.cxx:182
 TGTextEditor.cxx:183
 TGTextEditor.cxx:184
 TGTextEditor.cxx:185
 TGTextEditor.cxx:186
 TGTextEditor.cxx:187
 TGTextEditor.cxx:188
 TGTextEditor.cxx:189
 TGTextEditor.cxx:190
 TGTextEditor.cxx:191
 TGTextEditor.cxx:192
 TGTextEditor.cxx:193
 TGTextEditor.cxx:194
 TGTextEditor.cxx:195
 TGTextEditor.cxx:196
 TGTextEditor.cxx:197
 TGTextEditor.cxx:198
 TGTextEditor.cxx:199
 TGTextEditor.cxx:200
 TGTextEditor.cxx:201
 TGTextEditor.cxx:202
 TGTextEditor.cxx:203
 TGTextEditor.cxx:204
 TGTextEditor.cxx:205
 TGTextEditor.cxx:206
 TGTextEditor.cxx:207
 TGTextEditor.cxx:208
 TGTextEditor.cxx:209
 TGTextEditor.cxx:210
 TGTextEditor.cxx:211
 TGTextEditor.cxx:212
 TGTextEditor.cxx:213
 TGTextEditor.cxx:214
 TGTextEditor.cxx:215
 TGTextEditor.cxx:216
 TGTextEditor.cxx:217
 TGTextEditor.cxx:218
 TGTextEditor.cxx:219
 TGTextEditor.cxx:220
 TGTextEditor.cxx:221
 TGTextEditor.cxx:222
 TGTextEditor.cxx:223
 TGTextEditor.cxx:224
 TGTextEditor.cxx:225
 TGTextEditor.cxx:226
 TGTextEditor.cxx:227
 TGTextEditor.cxx:228
 TGTextEditor.cxx:229
 TGTextEditor.cxx:230
 TGTextEditor.cxx:231
 TGTextEditor.cxx:232
 TGTextEditor.cxx:233
 TGTextEditor.cxx:234
 TGTextEditor.cxx:235
 TGTextEditor.cxx:236
 TGTextEditor.cxx:237
 TGTextEditor.cxx:238
 TGTextEditor.cxx:239
 TGTextEditor.cxx:240
 TGTextEditor.cxx:241
 TGTextEditor.cxx:242
 TGTextEditor.cxx:243
 TGTextEditor.cxx:244
 TGTextEditor.cxx:245
 TGTextEditor.cxx:246
 TGTextEditor.cxx:247
 TGTextEditor.cxx:248
 TGTextEditor.cxx:249
 TGTextEditor.cxx:250
 TGTextEditor.cxx:251
 TGTextEditor.cxx:252
 TGTextEditor.cxx:253
 TGTextEditor.cxx:254
 TGTextEditor.cxx:255
 TGTextEditor.cxx:256
 TGTextEditor.cxx:257
 TGTextEditor.cxx:258
 TGTextEditor.cxx:259
 TGTextEditor.cxx:260
 TGTextEditor.cxx:261
 TGTextEditor.cxx:262
 TGTextEditor.cxx:263
 TGTextEditor.cxx:264
 TGTextEditor.cxx:265
 TGTextEditor.cxx:266
 TGTextEditor.cxx:267
 TGTextEditor.cxx:268
 TGTextEditor.cxx:269
 TGTextEditor.cxx:270
 TGTextEditor.cxx:271
 TGTextEditor.cxx:272
 TGTextEditor.cxx:273
 TGTextEditor.cxx:274
 TGTextEditor.cxx:275
 TGTextEditor.cxx:276
 TGTextEditor.cxx:277
 TGTextEditor.cxx:278
 TGTextEditor.cxx:279
 TGTextEditor.cxx:280
 TGTextEditor.cxx:281
 TGTextEditor.cxx:282
 TGTextEditor.cxx:283
 TGTextEditor.cxx:284
 TGTextEditor.cxx:285
 TGTextEditor.cxx:286
 TGTextEditor.cxx:287
 TGTextEditor.cxx:288
 TGTextEditor.cxx:289
 TGTextEditor.cxx:290
 TGTextEditor.cxx:291
 TGTextEditor.cxx:292
 TGTextEditor.cxx:293
 TGTextEditor.cxx:294
 TGTextEditor.cxx:295
 TGTextEditor.cxx:296
 TGTextEditor.cxx:297
 TGTextEditor.cxx:298
 TGTextEditor.cxx:299
 TGTextEditor.cxx:300
 TGTextEditor.cxx:301
 TGTextEditor.cxx:302
 TGTextEditor.cxx:303
 TGTextEditor.cxx:304
 TGTextEditor.cxx:305
 TGTextEditor.cxx:306
 TGTextEditor.cxx:307
 TGTextEditor.cxx:308
 TGTextEditor.cxx:309
 TGTextEditor.cxx:310
 TGTextEditor.cxx:311
 TGTextEditor.cxx:312
 TGTextEditor.cxx:313
 TGTextEditor.cxx:314
 TGTextEditor.cxx:315
 TGTextEditor.cxx:316
 TGTextEditor.cxx:317
 TGTextEditor.cxx:318
 TGTextEditor.cxx:319
 TGTextEditor.cxx:320
 TGTextEditor.cxx:321
 TGTextEditor.cxx:322
 TGTextEditor.cxx:323
 TGTextEditor.cxx:324
 TGTextEditor.cxx:325
 TGTextEditor.cxx:326
 TGTextEditor.cxx:327
 TGTextEditor.cxx:328
 TGTextEditor.cxx:329
 TGTextEditor.cxx:330
 TGTextEditor.cxx:331
 TGTextEditor.cxx:332
 TGTextEditor.cxx:333
 TGTextEditor.cxx:334
 TGTextEditor.cxx:335
 TGTextEditor.cxx:336
 TGTextEditor.cxx:337
 TGTextEditor.cxx:338
 TGTextEditor.cxx:339
 TGTextEditor.cxx:340
 TGTextEditor.cxx:341
 TGTextEditor.cxx:342
 TGTextEditor.cxx:343
 TGTextEditor.cxx:344
 TGTextEditor.cxx:345
 TGTextEditor.cxx:346
 TGTextEditor.cxx:347
 TGTextEditor.cxx:348
 TGTextEditor.cxx:349
 TGTextEditor.cxx:350
 TGTextEditor.cxx:351
 TGTextEditor.cxx:352
 TGTextEditor.cxx:353
 TGTextEditor.cxx:354
 TGTextEditor.cxx:355
 TGTextEditor.cxx:356
 TGTextEditor.cxx:357
 TGTextEditor.cxx:358
 TGTextEditor.cxx:359
 TGTextEditor.cxx:360
 TGTextEditor.cxx:361
 TGTextEditor.cxx:362
 TGTextEditor.cxx:363
 TGTextEditor.cxx:364
 TGTextEditor.cxx:365
 TGTextEditor.cxx:366
 TGTextEditor.cxx:367
 TGTextEditor.cxx:368
 TGTextEditor.cxx:369
 TGTextEditor.cxx:370
 TGTextEditor.cxx:371
 TGTextEditor.cxx:372
 TGTextEditor.cxx:373
 TGTextEditor.cxx:374
 TGTextEditor.cxx:375
 TGTextEditor.cxx:376
 TGTextEditor.cxx:377
 TGTextEditor.cxx:378
 TGTextEditor.cxx:379
 TGTextEditor.cxx:380
 TGTextEditor.cxx:381
 TGTextEditor.cxx:382
 TGTextEditor.cxx:383
 TGTextEditor.cxx:384
 TGTextEditor.cxx:385
 TGTextEditor.cxx:386
 TGTextEditor.cxx:387
 TGTextEditor.cxx:388
 TGTextEditor.cxx:389
 TGTextEditor.cxx:390
 TGTextEditor.cxx:391
 TGTextEditor.cxx:392
 TGTextEditor.cxx:393
 TGTextEditor.cxx:394
 TGTextEditor.cxx:395
 TGTextEditor.cxx:396
 TGTextEditor.cxx:397
 TGTextEditor.cxx:398
 TGTextEditor.cxx:399
 TGTextEditor.cxx:400
 TGTextEditor.cxx:401
 TGTextEditor.cxx:402
 TGTextEditor.cxx:403
 TGTextEditor.cxx:404
 TGTextEditor.cxx:405
 TGTextEditor.cxx:406
 TGTextEditor.cxx:407
 TGTextEditor.cxx:408
 TGTextEditor.cxx:409
 TGTextEditor.cxx:410
 TGTextEditor.cxx:411
 TGTextEditor.cxx:412
 TGTextEditor.cxx:413
 TGTextEditor.cxx:414
 TGTextEditor.cxx:415
 TGTextEditor.cxx:416
 TGTextEditor.cxx:417
 TGTextEditor.cxx:418
 TGTextEditor.cxx:419
 TGTextEditor.cxx:420
 TGTextEditor.cxx:421
 TGTextEditor.cxx:422
 TGTextEditor.cxx:423
 TGTextEditor.cxx:424
 TGTextEditor.cxx:425
 TGTextEditor.cxx:426
 TGTextEditor.cxx:427
 TGTextEditor.cxx:428
 TGTextEditor.cxx:429
 TGTextEditor.cxx:430
 TGTextEditor.cxx:431
 TGTextEditor.cxx:432
 TGTextEditor.cxx:433
 TGTextEditor.cxx:434
 TGTextEditor.cxx:435
 TGTextEditor.cxx:436
 TGTextEditor.cxx:437
 TGTextEditor.cxx:438
 TGTextEditor.cxx:439
 TGTextEditor.cxx:440
 TGTextEditor.cxx:441
 TGTextEditor.cxx:442
 TGTextEditor.cxx:443
 TGTextEditor.cxx:444
 TGTextEditor.cxx:445
 TGTextEditor.cxx:446
 TGTextEditor.cxx:447
 TGTextEditor.cxx:448
 TGTextEditor.cxx:449
 TGTextEditor.cxx:450
 TGTextEditor.cxx:451
 TGTextEditor.cxx:452
 TGTextEditor.cxx:453
 TGTextEditor.cxx:454
 TGTextEditor.cxx:455
 TGTextEditor.cxx:456
 TGTextEditor.cxx:457
 TGTextEditor.cxx:458
 TGTextEditor.cxx:459
 TGTextEditor.cxx:460
 TGTextEditor.cxx:461
 TGTextEditor.cxx:462
 TGTextEditor.cxx:463
 TGTextEditor.cxx:464
 TGTextEditor.cxx:465
 TGTextEditor.cxx:466
 TGTextEditor.cxx:467
 TGTextEditor.cxx:468
 TGTextEditor.cxx:469
 TGTextEditor.cxx:470
 TGTextEditor.cxx:471
 TGTextEditor.cxx:472
 TGTextEditor.cxx:473
 TGTextEditor.cxx:474
 TGTextEditor.cxx:475
 TGTextEditor.cxx:476
 TGTextEditor.cxx:477
 TGTextEditor.cxx:478
 TGTextEditor.cxx:479
 TGTextEditor.cxx:480
 TGTextEditor.cxx:481
 TGTextEditor.cxx:482
 TGTextEditor.cxx:483
 TGTextEditor.cxx:484
 TGTextEditor.cxx:485
 TGTextEditor.cxx:486
 TGTextEditor.cxx:487
 TGTextEditor.cxx:488
 TGTextEditor.cxx:489
 TGTextEditor.cxx:490
 TGTextEditor.cxx:491
 TGTextEditor.cxx:492
 TGTextEditor.cxx:493
 TGTextEditor.cxx:494
 TGTextEditor.cxx:495
 TGTextEditor.cxx:496
 TGTextEditor.cxx:497
 TGTextEditor.cxx:498
 TGTextEditor.cxx:499
 TGTextEditor.cxx:500
 TGTextEditor.cxx:501
 TGTextEditor.cxx:502
 TGTextEditor.cxx:503
 TGTextEditor.cxx:504
 TGTextEditor.cxx:505
 TGTextEditor.cxx:506
 TGTextEditor.cxx:507
 TGTextEditor.cxx:508
 TGTextEditor.cxx:509
 TGTextEditor.cxx:510
 TGTextEditor.cxx:511
 TGTextEditor.cxx:512
 TGTextEditor.cxx:513
 TGTextEditor.cxx:514
 TGTextEditor.cxx:515
 TGTextEditor.cxx:516
 TGTextEditor.cxx:517
 TGTextEditor.cxx:518
 TGTextEditor.cxx:519
 TGTextEditor.cxx:520
 TGTextEditor.cxx:521
 TGTextEditor.cxx:522
 TGTextEditor.cxx:523
 TGTextEditor.cxx:524
 TGTextEditor.cxx:525
 TGTextEditor.cxx:526
 TGTextEditor.cxx:527
 TGTextEditor.cxx:528
 TGTextEditor.cxx:529
 TGTextEditor.cxx:530
 TGTextEditor.cxx:531
 TGTextEditor.cxx:532
 TGTextEditor.cxx:533
 TGTextEditor.cxx:534
 TGTextEditor.cxx:535
 TGTextEditor.cxx:536
 TGTextEditor.cxx:537
 TGTextEditor.cxx:538
 TGTextEditor.cxx:539
 TGTextEditor.cxx:540
 TGTextEditor.cxx:541
 TGTextEditor.cxx:542
 TGTextEditor.cxx:543
 TGTextEditor.cxx:544
 TGTextEditor.cxx:545
 TGTextEditor.cxx:546
 TGTextEditor.cxx:547
 TGTextEditor.cxx:548
 TGTextEditor.cxx:549
 TGTextEditor.cxx:550
 TGTextEditor.cxx:551
 TGTextEditor.cxx:552
 TGTextEditor.cxx:553
 TGTextEditor.cxx:554
 TGTextEditor.cxx:555
 TGTextEditor.cxx:556
 TGTextEditor.cxx:557
 TGTextEditor.cxx:558
 TGTextEditor.cxx:559
 TGTextEditor.cxx:560
 TGTextEditor.cxx:561
 TGTextEditor.cxx:562
 TGTextEditor.cxx:563
 TGTextEditor.cxx:564
 TGTextEditor.cxx:565
 TGTextEditor.cxx:566
 TGTextEditor.cxx:567
 TGTextEditor.cxx:568
 TGTextEditor.cxx:569
 TGTextEditor.cxx:570
 TGTextEditor.cxx:571
 TGTextEditor.cxx:572
 TGTextEditor.cxx:573
 TGTextEditor.cxx:574
 TGTextEditor.cxx:575
 TGTextEditor.cxx:576
 TGTextEditor.cxx:577
 TGTextEditor.cxx:578
 TGTextEditor.cxx:579
 TGTextEditor.cxx:580
 TGTextEditor.cxx:581
 TGTextEditor.cxx:582
 TGTextEditor.cxx:583
 TGTextEditor.cxx:584
 TGTextEditor.cxx:585
 TGTextEditor.cxx:586
 TGTextEditor.cxx:587
 TGTextEditor.cxx:588
 TGTextEditor.cxx:589
 TGTextEditor.cxx:590
 TGTextEditor.cxx:591
 TGTextEditor.cxx:592
 TGTextEditor.cxx:593
 TGTextEditor.cxx:594
 TGTextEditor.cxx:595
 TGTextEditor.cxx:596
 TGTextEditor.cxx:597
 TGTextEditor.cxx:598
 TGTextEditor.cxx:599
 TGTextEditor.cxx:600
 TGTextEditor.cxx:601
 TGTextEditor.cxx:602
 TGTextEditor.cxx:603
 TGTextEditor.cxx:604
 TGTextEditor.cxx:605
 TGTextEditor.cxx:606
 TGTextEditor.cxx:607
 TGTextEditor.cxx:608
 TGTextEditor.cxx:609
 TGTextEditor.cxx:610
 TGTextEditor.cxx:611
 TGTextEditor.cxx:612
 TGTextEditor.cxx:613
 TGTextEditor.cxx:614
 TGTextEditor.cxx:615
 TGTextEditor.cxx:616
 TGTextEditor.cxx:617
 TGTextEditor.cxx:618
 TGTextEditor.cxx:619
 TGTextEditor.cxx:620
 TGTextEditor.cxx:621
 TGTextEditor.cxx:622
 TGTextEditor.cxx:623
 TGTextEditor.cxx:624
 TGTextEditor.cxx:625
 TGTextEditor.cxx:626
 TGTextEditor.cxx:627
 TGTextEditor.cxx:628
 TGTextEditor.cxx:629
 TGTextEditor.cxx:630
 TGTextEditor.cxx:631
 TGTextEditor.cxx:632
 TGTextEditor.cxx:633
 TGTextEditor.cxx:634
 TGTextEditor.cxx:635
 TGTextEditor.cxx:636
 TGTextEditor.cxx:637
 TGTextEditor.cxx:638
 TGTextEditor.cxx:639
 TGTextEditor.cxx:640
 TGTextEditor.cxx:641
 TGTextEditor.cxx:642
 TGTextEditor.cxx:643
 TGTextEditor.cxx:644
 TGTextEditor.cxx:645
 TGTextEditor.cxx:646
 TGTextEditor.cxx:647
 TGTextEditor.cxx:648
 TGTextEditor.cxx:649
 TGTextEditor.cxx:650
 TGTextEditor.cxx:651
 TGTextEditor.cxx:652
 TGTextEditor.cxx:653
 TGTextEditor.cxx:654
 TGTextEditor.cxx:655
 TGTextEditor.cxx:656
 TGTextEditor.cxx:657
 TGTextEditor.cxx:658
 TGTextEditor.cxx:659
 TGTextEditor.cxx:660
 TGTextEditor.cxx:661
 TGTextEditor.cxx:662
 TGTextEditor.cxx:663
 TGTextEditor.cxx:664
 TGTextEditor.cxx:665
 TGTextEditor.cxx:666
 TGTextEditor.cxx:667
 TGTextEditor.cxx:668
 TGTextEditor.cxx:669
 TGTextEditor.cxx:670
 TGTextEditor.cxx:671
 TGTextEditor.cxx:672
 TGTextEditor.cxx:673
 TGTextEditor.cxx:674
 TGTextEditor.cxx:675
 TGTextEditor.cxx:676
 TGTextEditor.cxx:677
 TGTextEditor.cxx:678
 TGTextEditor.cxx:679
 TGTextEditor.cxx:680
 TGTextEditor.cxx:681
 TGTextEditor.cxx:682
 TGTextEditor.cxx:683
 TGTextEditor.cxx:684
 TGTextEditor.cxx:685
 TGTextEditor.cxx:686
 TGTextEditor.cxx:687
 TGTextEditor.cxx:688
 TGTextEditor.cxx:689
 TGTextEditor.cxx:690
 TGTextEditor.cxx:691
 TGTextEditor.cxx:692
 TGTextEditor.cxx:693
 TGTextEditor.cxx:694
 TGTextEditor.cxx:695
 TGTextEditor.cxx:696
 TGTextEditor.cxx:697
 TGTextEditor.cxx:698
 TGTextEditor.cxx:699
 TGTextEditor.cxx:700
 TGTextEditor.cxx:701
 TGTextEditor.cxx:702
 TGTextEditor.cxx:703
 TGTextEditor.cxx:704
 TGTextEditor.cxx:705
 TGTextEditor.cxx:706
 TGTextEditor.cxx:707
 TGTextEditor.cxx:708
 TGTextEditor.cxx:709
 TGTextEditor.cxx:710
 TGTextEditor.cxx:711
 TGTextEditor.cxx:712
 TGTextEditor.cxx:713
 TGTextEditor.cxx:714
 TGTextEditor.cxx:715
 TGTextEditor.cxx:716
 TGTextEditor.cxx:717
 TGTextEditor.cxx:718
 TGTextEditor.cxx:719
 TGTextEditor.cxx:720
 TGTextEditor.cxx:721
 TGTextEditor.cxx:722
 TGTextEditor.cxx:723
 TGTextEditor.cxx:724
 TGTextEditor.cxx:725
 TGTextEditor.cxx:726
 TGTextEditor.cxx:727
 TGTextEditor.cxx:728
 TGTextEditor.cxx:729
 TGTextEditor.cxx:730
 TGTextEditor.cxx:731
 TGTextEditor.cxx:732
 TGTextEditor.cxx:733
 TGTextEditor.cxx:734
 TGTextEditor.cxx:735
 TGTextEditor.cxx:736
 TGTextEditor.cxx:737
 TGTextEditor.cxx:738
 TGTextEditor.cxx:739
 TGTextEditor.cxx:740
 TGTextEditor.cxx:741
 TGTextEditor.cxx:742
 TGTextEditor.cxx:743
 TGTextEditor.cxx:744
 TGTextEditor.cxx:745
 TGTextEditor.cxx:746
 TGTextEditor.cxx:747
 TGTextEditor.cxx:748
 TGTextEditor.cxx:749
 TGTextEditor.cxx:750
 TGTextEditor.cxx:751
 TGTextEditor.cxx:752
 TGTextEditor.cxx:753
 TGTextEditor.cxx:754
 TGTextEditor.cxx:755
 TGTextEditor.cxx:756
 TGTextEditor.cxx:757
 TGTextEditor.cxx:758
 TGTextEditor.cxx:759
 TGTextEditor.cxx:760
 TGTextEditor.cxx:761
 TGTextEditor.cxx:762
 TGTextEditor.cxx:763
 TGTextEditor.cxx:764
 TGTextEditor.cxx:765
 TGTextEditor.cxx:766
 TGTextEditor.cxx:767
 TGTextEditor.cxx:768
 TGTextEditor.cxx:769
 TGTextEditor.cxx:770
 TGTextEditor.cxx:771
 TGTextEditor.cxx:772
 TGTextEditor.cxx:773
 TGTextEditor.cxx:774
 TGTextEditor.cxx:775
 TGTextEditor.cxx:776
 TGTextEditor.cxx:777
 TGTextEditor.cxx:778
 TGTextEditor.cxx:779
 TGTextEditor.cxx:780
 TGTextEditor.cxx:781
 TGTextEditor.cxx:782
 TGTextEditor.cxx:783
 TGTextEditor.cxx:784
 TGTextEditor.cxx:785
 TGTextEditor.cxx:786
 TGTextEditor.cxx:787
 TGTextEditor.cxx:788
 TGTextEditor.cxx:789
 TGTextEditor.cxx:790
 TGTextEditor.cxx:791
 TGTextEditor.cxx:792
 TGTextEditor.cxx:793
 TGTextEditor.cxx:794
 TGTextEditor.cxx:795
 TGTextEditor.cxx:796
 TGTextEditor.cxx:797
 TGTextEditor.cxx:798
 TGTextEditor.cxx:799
 TGTextEditor.cxx:800
 TGTextEditor.cxx:801
 TGTextEditor.cxx:802
 TGTextEditor.cxx:803
 TGTextEditor.cxx:804
 TGTextEditor.cxx:805
 TGTextEditor.cxx:806
 TGTextEditor.cxx:807
 TGTextEditor.cxx:808
 TGTextEditor.cxx:809
 TGTextEditor.cxx:810
 TGTextEditor.cxx:811
 TGTextEditor.cxx:812
 TGTextEditor.cxx:813
 TGTextEditor.cxx:814
 TGTextEditor.cxx:815
 TGTextEditor.cxx:816
 TGTextEditor.cxx:817
 TGTextEditor.cxx:818
 TGTextEditor.cxx:819
 TGTextEditor.cxx:820
 TGTextEditor.cxx:821
 TGTextEditor.cxx:822
 TGTextEditor.cxx:823
 TGTextEditor.cxx:824
 TGTextEditor.cxx:825
 TGTextEditor.cxx:826
 TGTextEditor.cxx:827
 TGTextEditor.cxx:828
 TGTextEditor.cxx:829
 TGTextEditor.cxx:830
 TGTextEditor.cxx:831
 TGTextEditor.cxx:832
 TGTextEditor.cxx:833
 TGTextEditor.cxx:834
 TGTextEditor.cxx:835
 TGTextEditor.cxx:836
 TGTextEditor.cxx:837
 TGTextEditor.cxx:838
 TGTextEditor.cxx:839
 TGTextEditor.cxx:840
 TGTextEditor.cxx:841
 TGTextEditor.cxx:842
 TGTextEditor.cxx:843
 TGTextEditor.cxx:844
 TGTextEditor.cxx:845
 TGTextEditor.cxx:846
 TGTextEditor.cxx:847
 TGTextEditor.cxx:848
 TGTextEditor.cxx:849
 TGTextEditor.cxx:850
 TGTextEditor.cxx:851
 TGTextEditor.cxx:852
 TGTextEditor.cxx:853
 TGTextEditor.cxx:854
 TGTextEditor.cxx:855
 TGTextEditor.cxx:856
 TGTextEditor.cxx:857
 TGTextEditor.cxx:858
 TGTextEditor.cxx:859
 TGTextEditor.cxx:860
 TGTextEditor.cxx:861
 TGTextEditor.cxx:862
 TGTextEditor.cxx:863
 TGTextEditor.cxx:864
 TGTextEditor.cxx:865
 TGTextEditor.cxx:866
 TGTextEditor.cxx:867
 TGTextEditor.cxx:868
 TGTextEditor.cxx:869
 TGTextEditor.cxx:870
 TGTextEditor.cxx:871
 TGTextEditor.cxx:872
 TGTextEditor.cxx:873
 TGTextEditor.cxx:874
 TGTextEditor.cxx:875
 TGTextEditor.cxx:876
 TGTextEditor.cxx:877
 TGTextEditor.cxx:878
 TGTextEditor.cxx:879
 TGTextEditor.cxx:880
 TGTextEditor.cxx:881
 TGTextEditor.cxx:882
 TGTextEditor.cxx:883
 TGTextEditor.cxx:884
 TGTextEditor.cxx:885
 TGTextEditor.cxx:886
 TGTextEditor.cxx:887
 TGTextEditor.cxx:888
 TGTextEditor.cxx:889
 TGTextEditor.cxx:890
 TGTextEditor.cxx:891
 TGTextEditor.cxx:892
 TGTextEditor.cxx:893
 TGTextEditor.cxx:894
 TGTextEditor.cxx:895
 TGTextEditor.cxx:896
 TGTextEditor.cxx:897
 TGTextEditor.cxx:898
 TGTextEditor.cxx:899
 TGTextEditor.cxx:900
 TGTextEditor.cxx:901
 TGTextEditor.cxx:902
 TGTextEditor.cxx:903
 TGTextEditor.cxx:904
 TGTextEditor.cxx:905
 TGTextEditor.cxx:906
 TGTextEditor.cxx:907
 TGTextEditor.cxx:908
 TGTextEditor.cxx:909
 TGTextEditor.cxx:910
 TGTextEditor.cxx:911
 TGTextEditor.cxx:912
 TGTextEditor.cxx:913
 TGTextEditor.cxx:914
 TGTextEditor.cxx:915
 TGTextEditor.cxx:916
 TGTextEditor.cxx:917
 TGTextEditor.cxx:918
 TGTextEditor.cxx:919
 TGTextEditor.cxx:920
 TGTextEditor.cxx:921
 TGTextEditor.cxx:922
 TGTextEditor.cxx:923
 TGTextEditor.cxx:924
 TGTextEditor.cxx:925
 TGTextEditor.cxx:926
 TGTextEditor.cxx:927
 TGTextEditor.cxx:928
 TGTextEditor.cxx:929
 TGTextEditor.cxx:930
 TGTextEditor.cxx:931
 TGTextEditor.cxx:932
 TGTextEditor.cxx:933
 TGTextEditor.cxx:934
 TGTextEditor.cxx:935
 TGTextEditor.cxx:936
 TGTextEditor.cxx:937
 TGTextEditor.cxx:938
 TGTextEditor.cxx:939
 TGTextEditor.cxx:940
 TGTextEditor.cxx:941
 TGTextEditor.cxx:942
 TGTextEditor.cxx:943
 TGTextEditor.cxx:944
 TGTextEditor.cxx:945
 TGTextEditor.cxx:946
 TGTextEditor.cxx:947
 TGTextEditor.cxx:948
 TGTextEditor.cxx:949
 TGTextEditor.cxx:950
 TGTextEditor.cxx:951
 TGTextEditor.cxx:952
 TGTextEditor.cxx:953
 TGTextEditor.cxx:954
 TGTextEditor.cxx:955
 TGTextEditor.cxx:956
 TGTextEditor.cxx:957
 TGTextEditor.cxx:958
 TGTextEditor.cxx:959
 TGTextEditor.cxx:960
 TGTextEditor.cxx:961
 TGTextEditor.cxx:962
 TGTextEditor.cxx:963
 TGTextEditor.cxx:964
 TGTextEditor.cxx:965
 TGTextEditor.cxx:966
 TGTextEditor.cxx:967
 TGTextEditor.cxx:968
 TGTextEditor.cxx:969
 TGTextEditor.cxx:970
 TGTextEditor.cxx:971
 TGTextEditor.cxx:972
 TGTextEditor.cxx:973
 TGTextEditor.cxx:974
 TGTextEditor.cxx:975
 TGTextEditor.cxx:976
 TGTextEditor.cxx:977
 TGTextEditor.cxx:978
 TGTextEditor.cxx:979
 TGTextEditor.cxx:980
 TGTextEditor.cxx:981
 TGTextEditor.cxx:982
 TGTextEditor.cxx:983
 TGTextEditor.cxx:984
 TGTextEditor.cxx:985
 TGTextEditor.cxx:986
 TGTextEditor.cxx:987
 TGTextEditor.cxx:988
 TGTextEditor.cxx:989
 TGTextEditor.cxx:990
 TGTextEditor.cxx:991
 TGTextEditor.cxx:992
 TGTextEditor.cxx:993
 TGTextEditor.cxx:994
 TGTextEditor.cxx:995
 TGTextEditor.cxx:996
 TGTextEditor.cxx:997
 TGTextEditor.cxx:998
 TGTextEditor.cxx:999
 TGTextEditor.cxx:1000
 TGTextEditor.cxx:1001
 TGTextEditor.cxx:1002
 TGTextEditor.cxx:1003
 TGTextEditor.cxx:1004
 TGTextEditor.cxx:1005
 TGTextEditor.cxx:1006
 TGTextEditor.cxx:1007
 TGTextEditor.cxx:1008
 TGTextEditor.cxx:1009
 TGTextEditor.cxx:1010
 TGTextEditor.cxx:1011
 TGTextEditor.cxx:1012
 TGTextEditor.cxx:1013
 TGTextEditor.cxx:1014
 TGTextEditor.cxx:1015
 TGTextEditor.cxx:1016
 TGTextEditor.cxx:1017
 TGTextEditor.cxx:1018
 TGTextEditor.cxx:1019
 TGTextEditor.cxx:1020
 TGTextEditor.cxx:1021
 TGTextEditor.cxx:1022
 TGTextEditor.cxx:1023
 TGTextEditor.cxx:1024
 TGTextEditor.cxx:1025
 TGTextEditor.cxx:1026
 TGTextEditor.cxx:1027
 TGTextEditor.cxx:1028
 TGTextEditor.cxx:1029
 TGTextEditor.cxx:1030
 TGTextEditor.cxx:1031
 TGTextEditor.cxx:1032
 TGTextEditor.cxx:1033
 TGTextEditor.cxx:1034
 TGTextEditor.cxx:1035
 TGTextEditor.cxx:1036
 TGTextEditor.cxx:1037
 TGTextEditor.cxx:1038
 TGTextEditor.cxx:1039
 TGTextEditor.cxx:1040
 TGTextEditor.cxx:1041
 TGTextEditor.cxx:1042
 TGTextEditor.cxx:1043
 TGTextEditor.cxx:1044
 TGTextEditor.cxx:1045
 TGTextEditor.cxx:1046
 TGTextEditor.cxx:1047
 TGTextEditor.cxx:1048
 TGTextEditor.cxx:1049
 TGTextEditor.cxx:1050
 TGTextEditor.cxx:1051
 TGTextEditor.cxx:1052
 TGTextEditor.cxx:1053
 TGTextEditor.cxx:1054
 TGTextEditor.cxx:1055
 TGTextEditor.cxx:1056
 TGTextEditor.cxx:1057
 TGTextEditor.cxx:1058
 TGTextEditor.cxx:1059
 TGTextEditor.cxx:1060
 TGTextEditor.cxx:1061
 TGTextEditor.cxx:1062
 TGTextEditor.cxx:1063
 TGTextEditor.cxx:1064