ROOT logo
// @(#)root/gui:$Id$
// Author: Fons Rademakers   3/7/2000

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

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

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TGTextEdit                                                           //
//                                                                      //
// A TGTextEdit is a specialization of TGTextView. It provides the      //
// text edit functionality to the static text viewing widget.           //
// For the messages supported by this widget see the TGView class.      //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "TGTextEdit.h"
#include "TGTextEditDialogs.h"
#include "TGResourcePool.h"
#include "TSystem.h"
#include "TMath.h"
#include "TTimer.h"
#include "TGMenu.h"
#include "TGMsgBox.h"
#include "TGFileDialog.h"
#include "TGScrollBar.h"
#include "KeySymbols.h"
#include "Riostream.h"
#include "RConfigure.h"


static const char *gFiletypes[] = { "All files",     "*",
                                    "Text files",    "*.txt",
                                    "ROOT macros",   "*.C",
                                    0,               0 };
static char *gPrinter      = 0;
static char *gPrintCommand = 0;


TGGC *TGTextEdit::fgCursor0GC;
TGGC *TGTextEdit::fgCursor1GC;


///////////////////////////////////////////////////////////////////////////////
class TGTextEditHist : public TList {

public:
   TGTextEditHist() {}
   virtual ~TGTextEditHist() { Delete(); }

   Bool_t Notify() { // 
      TObject *obj = Last();
      if (!obj) return kFALSE;

      obj->Notify(); // execute undo action
      RemoveLast();
      delete obj;
      return kTRUE;
   }
};

///////////////////////////////////////////////////////////////////////////////
class TGTextEditCommand : public TObject {
protected:
   TGTextEdit     *fEdit;
   TGLongPosition  fPos;

public:
   TGTextEditCommand(TGTextEdit *te) : fEdit(te) {
      fPos = fEdit->GetCurrentPos();
      fEdit->GetHistory()->Add(this);
   }
   void SetPos(TGLongPosition pos) { fPos = pos; }
};

///////////////////////////////////////////////////////////////////////////////
class TInsCharCom : public TGTextEditCommand {

public:
   TInsCharCom(TGTextEdit *te, char ch) : TGTextEditCommand(te) {
      fEdit->InsChar(ch);
   }
   Bool_t Notify() { // 
      fEdit->SetCurrent(fPos);
      fEdit->NextChar();
      fEdit->DelChar();
      return kTRUE;
   }
};

///////////////////////////////////////////////////////////////////////////////
class TDelCharCom : public TGTextEditCommand {

private:
   char fChar;

public:
   TDelCharCom(TGTextEdit *te) : TGTextEditCommand(te)  {
      fPos.fX--;
      fChar = fEdit->GetText()->GetChar(fPos);
      fEdit->DelChar();
   }
   Bool_t Notify() { // 
      if (fChar > 0) {
         fEdit->SetCurrent(fPos);
         fEdit->InsChar(fChar);
      } else {
         fPos.fY--;
         fEdit->BreakLine();
      }
      return kTRUE;
   }
};

///////////////////////////////////////////////////////////////////////////////
class TBreakLineCom : public TGTextEditCommand {

public:
   TBreakLineCom(TGTextEdit *te) : TGTextEditCommand(te)  {
      fEdit->BreakLine();
      fPos.fX = 0;
      fPos.fY++;
   }

   Bool_t Notify() { //
      fEdit->SetCurrent(fPos);
      fEdit->DelChar();
      return kTRUE;
   }
};

///////////////////////////////////////////////////////////////////////////////
class TInsTextCom : public TGTextEditCommand {
private:
   TGLongPosition  fEndPos;

public:
   char            fChar;

   TInsTextCom(TGTextEdit *te) : TGTextEditCommand(te), fChar(0)  {
   }

   void SetEndPos(TGLongPosition end) {
      fEndPos = end;
   }

   Bool_t Notify() { //
      fEdit->GetText()->DelText(fPos, fEndPos);

      if (fChar > 0) {
         fEdit->GetText()->InsChar(fPos, fChar);
      } else if (fPos.fY != fEndPos.fY) {
         fEdit->GetText()->BreakLine(fPos);
      }
      fEdit->SetCurrent(fPos);
      fEdit->Update();
      return kTRUE;
   }
};

///////////////////////////////////////////////////////////////////////////////
class TDelTextCom : public TGTextEditCommand {

private:
   TGText         *fText;
   TGLongPosition  fEndPos;
   Bool_t          fBreakLine;

public:
   TDelTextCom(TGTextEdit *te, TGText *txt) : TGTextEditCommand(te)  {
      fText = new TGText(txt);
      fBreakLine = kFALSE;
   }
   TDelTextCom(const TDelTextCom &dtc) : TGTextEditCommand(dtc) {
      fText = new TGText(dtc.fText);
      fBreakLine = dtc.fBreakLine;
   }
   virtual ~TDelTextCom() { delete fText; }

   TDelTextCom &operator=(const TDelTextCom &dtc) {
      if (this != &dtc) {
         if (fText) delete fText;
         fText = new TGText(dtc.fText);
         fBreakLine = dtc.fBreakLine;
      }
      return *this;
   }

   void SetEndPos(TGLongPosition end) {
      fEndPos = end;
   }

   void SetBreakLine(Bool_t on) { fBreakLine = on; }

   Bool_t Notify() { //
      TGLongPosition start_src, end_src;
      start_src.fX = start_src.fY = 0;
      end_src.fY   = fText->RowCount() - 1;
      end_src.fX   = fText->GetLineLength(end_src.fY) - 1;

      fEdit->GetText()->InsText(fPos, fText, start_src, end_src);

      if (fBreakLine) {
         fEndPos.fY++;
         fEdit->GetText()->BreakLine(fEndPos);
         fEndPos.fX = fEdit->GetText()->GetLineLength(fEndPos.fY);
      } else {
         fEndPos.fX++;
      }

      fEdit->SetCurrent(fEndPos);
      fEdit->Update();
      return kTRUE;
   }
};


ClassImp(TGTextEdit)


//______________________________________________________________________________
TGTextEdit::TGTextEdit(const TGWindow *parent, UInt_t w, UInt_t h, Int_t id,
                       UInt_t sboptions, ULong_t back) :
     TGTextView(parent, w, h, id, sboptions, back)
{
   // Create a text edit widget.

   Init();
}

//______________________________________________________________________________
TGTextEdit::TGTextEdit(const TGWindow *parent, UInt_t w, UInt_t h, TGText *text,
                       Int_t id, UInt_t sboptions, ULong_t back) :
     TGTextView(parent, w, h, text, id, sboptions, back)
{
   // Create a text edit widget. Initialize it with the specified text buffer.

   Init();
}

//______________________________________________________________________________
TGTextEdit::TGTextEdit(const TGWindow *parent, UInt_t w, UInt_t h,
                       const char *string, Int_t id, UInt_t sboptions,
                       ULong_t back) :
     TGTextView(parent, w, h, string, id, sboptions, back)
{
   // Create a text edit widget. Initialize it with the specified string.

   Init();
}

//______________________________________________________________________________
TGTextEdit::~TGTextEdit()
{
   // Cleanup text edit widget.

   if (TGSearchDialog::SearchDialog()) {
      TQObject::Disconnect(TGSearchDialog::SearchDialog(), 0, this);
   }
   delete fCurBlink;
   delete fMenu;
   delete fHistory;
}

//______________________________________________________________________________
void TGTextEdit::Init()
{
   // Initiliaze a text edit widget.

   fCursor0GC   = GetCursor0GC()();
   fCursor1GC   = GetCursor1GC()();
   fCursorState = 1;
   fCurrent.fY  = fCurrent.fX = 0;
   fInsertMode  = kInsert;
   fCurBlink    = 0;
   fSearch      = 0;
   fEnableMenu  = kTRUE;
   fEnableCursorWithoutFocus = kTRUE;

   gVirtualX->SetCursor(fCanvas->GetId(), fClient->GetResourcePool()->GetTextCursor());

   // create popup menu with default editor actions
   fMenu = new TGPopupMenu(fClient->GetDefaultRoot());
   fMenu->AddEntry("New", kM_FILE_NEW);
   fMenu->AddEntry("Open...", kM_FILE_OPEN);
   fMenu->AddSeparator();
   fMenu->AddEntry("Close", kM_FILE_CLOSE);
   fMenu->AddEntry("Save", kM_FILE_SAVE);
   fMenu->AddEntry("Save As...", kM_FILE_SAVEAS);
   fMenu->AddSeparator();
   fMenu->AddEntry("Print...", kM_FILE_PRINT);
   fMenu->AddSeparator();
   fMenu->AddEntry("Cut", kM_EDIT_CUT);
   fMenu->AddEntry("Copy", kM_EDIT_COPY);
   fMenu->AddEntry("Paste", kM_EDIT_PASTE);
   fMenu->AddEntry("Select All", kM_EDIT_SELECTALL);
   fMenu->AddSeparator();
   fMenu->AddEntry("Find...", kM_SEARCH_FIND);
   fMenu->AddEntry("Find Again", kM_SEARCH_FINDAGAIN);
   fMenu->AddEntry("Goto...", kM_SEARCH_GOTO);

   fMenu->Associate(this);

   fHistory = new TGTextEditHist();
}

//______________________________________________________________________________
void TGTextEdit::SetMenuState()
{
   // Enable/disable menu items in function of what is possible.

   if (fText->RowCount() == 1 && fText->GetLineLength(0) <= 0) {
      fMenu->DisableEntry(kM_FILE_CLOSE);
      fMenu->DisableEntry(kM_FILE_SAVE);
      fMenu->DisableEntry(kM_FILE_SAVEAS);
      fMenu->DisableEntry(kM_FILE_PRINT);
      fMenu->DisableEntry(kM_EDIT_SELECTALL);
      fMenu->DisableEntry(kM_SEARCH_FIND);
      fMenu->DisableEntry(kM_SEARCH_FINDAGAIN);
      fMenu->DisableEntry(kM_SEARCH_GOTO);
   } else {
      fMenu->EnableEntry(kM_FILE_CLOSE);
      fMenu->EnableEntry(kM_FILE_SAVE);
      fMenu->EnableEntry(kM_FILE_SAVEAS);
      fMenu->EnableEntry(kM_FILE_PRINT);
      fMenu->EnableEntry(kM_EDIT_SELECTALL);
      fMenu->EnableEntry(kM_SEARCH_FIND);
      fMenu->EnableEntry(kM_SEARCH_FINDAGAIN);
      fMenu->EnableEntry(kM_SEARCH_GOTO);
   }

   if (IsSaved())
      fMenu->DisableEntry(kM_FILE_SAVE);
   else
      fMenu->EnableEntry(kM_FILE_SAVE);

   if (fIsMarked) {
      fMenu->EnableEntry(kM_EDIT_CUT);
      fMenu->EnableEntry(kM_EDIT_COPY);
   } else {
      fMenu->DisableEntry(kM_EDIT_CUT);
      fMenu->DisableEntry(kM_EDIT_COPY);
   }
}

//______________________________________________________________________________
Long_t TGTextEdit::ReturnLongestLineWidth()
{
   // Return width of longest line in widget.

   Long_t linewidth = TGTextView::ReturnLongestLineWidth();
   linewidth += 3*fScrollVal.fX;
   return linewidth;
}

//______________________________________________________________________________
void TGTextEdit::Clear(Option_t *)
{
   // Clear text edit widget.

   fCursorState = 1;
   fCurrent.fY = fCurrent.fX = 0;
   TGTextView::Clear();
}

//______________________________________________________________________________
Bool_t TGTextEdit::SaveFile(const char *filename, Bool_t saveas)
{
   // Save file. If filename==0 ask user via dialog for a filename, if in
   // addition saveas==kTRUE always ask for new filename. Returns
   // kTRUE if file was correctly saved, kFALSE otherwise.

   if (!filename) {
      Bool_t untitled = !strlen(fText->GetFileName()) ? kTRUE : kFALSE;
      if (untitled || saveas) {
         static TString dir(".");
         static Bool_t overwr = kFALSE;
         TGFileInfo fi;
         fi.fFileTypes = gFiletypes;
         fi.fIniDir    = StrDup(dir);
         fi.fOverwrite = overwr;
         new TGFileDialog(fClient->GetDefaultRoot(), this, kFDSave, &fi);
         overwr = fi.fOverwrite;
         if (fi.fFilename && strlen(fi.fFilename)) {
            dir = fi.fIniDir;
            return fText->Save(fi.fFilename);
         }
         return kFALSE;
      }
      return fText->Save(fText->GetFileName());
   }

   return fText->Save(filename);
}

//______________________________________________________________________________
Bool_t TGTextEdit::Copy()
{
   // Copy text.

   if (!fIsMarked || ((fMarkedStart.fX == fMarkedEnd.fX) && 
       (fMarkedStart.fY == fMarkedEnd.fY))) {
      return kFALSE;
   }

   TGTextView::Copy();

   Bool_t del = !fCurrent.fX && (fCurrent.fY == fMarkedEnd.fY) && !fMarkedEnd.fX;
   del = del || (!fMarkedEnd.fX && (fCurrent.fY != fMarkedEnd.fY));
   del = del && fClipText->AsString().Length() > 0;

   if (del) {
      TGLongPosition pos;
      pos.fY = fClipText->RowCount();
      pos.fX = 0;
      fClipText->InsText(pos, 0);
   }

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TGTextEdit::Cut()
{
   // Cut text.

   if (!Copy()) {
      return kFALSE;
   }
   Delete();

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TGTextEdit::Paste()
{
   // Paste text into widget.

   if (fReadOnly) {
      return kFALSE;
   }

   if (fIsMarked) {
      TString sav = fClipText->AsString();
      TGTextView::Copy();
      Delete();
      fClipText->Clear();
      fClipText->LoadBuffer(sav.Data());
   }

   gVirtualX->ConvertPrimarySelection(fId, fClipboard, 0);

   return kTRUE;
}

//______________________________________________________________________________
void TGTextEdit::Print(Option_t *) const
{
   // Send current buffer to printer.

   TString msg;

   msg.Form("%s -P%s\n", gPrintCommand, gPrinter);
   FILE *p = gSystem->OpenPipe(msg.Data(), "w");
   if (p) {
      char   *buf1, *buf2;
      Long_t  len;
      ULong_t i = 0;
      TGLongPosition pos;

      pos.fX = pos.fY = 0;
      while (pos.fY < fText->RowCount()) {
         len = fText->GetLineLength(pos.fY);
         if (len < 0) len = 0;
         buf1 = fText->GetLine(pos, len);
         buf2 = new char[len + 2];
         strncpy(buf2, buf1, (UInt_t)len);
         buf2[len]   = '\n';
         buf2[len+1] = '\0';
         while (buf2[i] != '\0') {
            if (buf2[i] == '\t') {
               ULong_t j = i+1;
               while (buf2[j] == 16)
                  j++;
               // coverity[secure_coding]
               strcpy(buf2+i+1, buf2+j);
            }
            i++;
         }
         fwrite(buf2, sizeof(char), strlen(buf2)+1, p);

         delete [] buf1;
         delete [] buf2;
         pos.fY++;
      }
      gSystem->ClosePipe(p);

      Bool_t untitled = !strlen(fText->GetFileName()) ? kTRUE : kFALSE;
      msg.Form("Printed: %s\nLines: %ld\nUsing: %s -P%s",
               untitled ? "Untitled" : fText->GetFileName(),
               fText->RowCount() - 1, gPrintCommand, gPrinter);
      new TGMsgBox(fClient->GetDefaultRoot(), this, "Editor", msg.Data(),
                   kMBIconAsterisk, kMBOk, 0);
   } else {
      msg.Form("Could not execute: %s -P%s\n", gPrintCommand, gPrinter);
      new TGMsgBox(fClient->GetDefaultRoot(), this, "Editor", msg.Data(),
                   kMBIconExclamation, kMBOk, 0);
   }
}

//______________________________________________________________________________
void TGTextEdit::Delete(Option_t *)
{
   // Delete selection.

   if (!fIsMarked || fReadOnly) {
      return;
   }

   if (fMarkedStart.fX == fMarkedEnd.fX &&
       fMarkedStart.fY == fMarkedEnd.fY) {
      Long_t len = fText->GetLineLength(fCurrent.fY);

      if (fCurrent.fY == fText->RowCount()-1 && fCurrent.fX == len) {
         gVirtualX->Bell(0);
         return;
      }

      new TDelCharCom(this);
      return;
   }

   TGLongPosition pos, endPos;
   Bool_t delast = kFALSE;

   endPos.fX = fMarkedEnd.fX - 1;
   endPos.fY = fMarkedEnd.fY;

   if (endPos.fX == -1) {
      pos = fCurrent;
      if (endPos.fY > 0) {
         SetCurrent(endPos);
         DelChar();
         endPos.fY--;
         SetCurrent(pos);
      }
      endPos.fX = fText->GetLineLength(endPos.fY);
      if (endPos.fX < 0) {
         endPos.fX = 0;
      }
      delast = kTRUE;
   }

   // delete command for undo
   TDelTextCom *dcom = new TDelTextCom(this, fClipText);
   dcom->SetPos(fMarkedStart);
   dcom->SetEndPos(endPos);

   if (delast || ((fText->GetLineLength(endPos.fY) == endPos.fX+1) && 
       (fClipText->RowCount() > 1))) {
      TGLongPosition p = endPos;

      p.fY--;
      if (!delast) p.fX++;
      dcom->SetEndPos(p);
      dcom->SetBreakLine(kTRUE);
   }

   fText->DelText(fMarkedStart, endPos);

   pos.fY = ToObjYCoord(fVisible.fY);

   if (fMarkedStart.fY < pos.fY) {
      pos.fY = fMarkedStart.fY;
   }
   pos.fX = ToObjXCoord(fVisible.fX, pos.fY);
   if (fMarkedStart.fX < pos.fX) {
      pos.fX = fMarkedStart.fX;
   }

   Int_t th = (Int_t)ToScrYCoord(fText->RowCount());
   Int_t ys = (Int_t)ToScrYCoord(fMarkedStart.fY);
   th = th < 0 ? 0 : th;
   ys = ys < 0 ? 0 : ys;

   // clear
   if ((th < 0) || (th < (Int_t)fCanvas->GetHeight())) {
      gVirtualX->ClearArea(fCanvas->GetId(), 0, ys,
                               fCanvas->GetWidth(), fCanvas->GetHeight() - ys);
   }

   UpdateRegion(0, ys, fCanvas->GetWidth(), UInt_t(fCanvas->GetHeight() - ys));

   SetVsbPosition((ToScrYCoord(pos.fY) + fVisible.fY)/fScrollVal.fY);
   SetHsbPosition((ToScrXCoord(pos.fX, pos.fY) + fVisible.fX)/fScrollVal.fX);
   SetSBRange(kHorizontal);
   SetSBRange(kVertical);
   SetCurrent(fMarkedStart);

   SendMessage(fMsgWindow, MK_MSG(kC_TEXTVIEW, kTXT_ISMARKED), fWidgetId, kFALSE);
   UnMark();

   // only to make sure that IsSaved() returns true in case everything has
   // been deleted
   if (fText->RowCount() == 1 && fText->GetLineLength(0) == 0) {
      delete fText;
      fText = new TGText();
      fText->Clear();
   }
}

//______________________________________________________________________________
Bool_t TGTextEdit::Search(const char *string, Bool_t direction,
                          Bool_t caseSensitive)
{
   // Search for string in the specified direction. If direction is true
   // the search will be in forward direction.

   if (!IsMapped()) return kFALSE;

   if (gTQSender && (gTQSender == TGSearchDialog::SearchDialog())) {
      caseSensitive = TGSearchDialog::SearchDialog()->GetType()->fCaseSensitive;
      direction = TGSearchDialog::SearchDialog()->GetType()->fDirection;
      fSearch = TGSearchDialog::SearchDialog()->GetType();
   }

   TGLongPosition pos;
   if (!fText->Search(&pos, fCurrent, string, direction, caseSensitive)) {
      fCurrent.fX = 1;
      fCurrent.fY = 1;

      if (!fText->Search(&pos, fCurrent, string, direction, caseSensitive)) { //try again
         TString msg;
         msg.Form("Couldn't find \"%s\"", string);
         gVirtualX->Bell(20);
         new TGMsgBox(fClient->GetDefaultRoot(), fCanvas, "TextEdit",
                      msg.Data(), kMBIconExclamation, kMBOk, 0);
         return kFALSE;
      }
      return kTRUE;
   }
   UnMark();
   fIsMarked = kTRUE;
   fMarkedStart.fY = fMarkedEnd.fY = pos.fY;
   fMarkedStart.fX = pos.fX;
   fMarkedEnd.fX = fMarkedStart.fX + strlen(string);

   if (direction) {
      SetCurrent(fMarkedEnd);
   } else {
      SetCurrent(fMarkedStart);
   }

   pos.fY = ToObjYCoord(fVisible.fY);
   if (fCurrent.fY < pos.fY ||
       ToScrYCoord(fCurrent.fY) >= (Int_t)fCanvas->GetHeight()) {
      pos.fY = fMarkedStart.fY;
   }
   pos.fX = ToObjXCoord(fVisible.fX, pos.fY);

   if (fCurrent.fX < pos.fX ||
       ToScrXCoord(fCurrent.fX, pos.fY) >= (Int_t)fCanvas->GetWidth()) {
      pos.fX = fMarkedStart.fX;
   }

   SetVsbPosition((ToScrYCoord(pos.fY)+fVisible.fY)/fScrollVal.fY);
   SetHsbPosition((ToScrXCoord(pos.fX, pos.fY)+fVisible.fX)/fScrollVal.fX);

   UpdateRegion(0, (Int_t)ToScrYCoord(fMarkedStart.fY), fCanvas->GetWidth(),
                UInt_t(ToScrYCoord(fMarkedEnd.fY+1)-ToScrYCoord(fMarkedEnd.fY)));

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TGTextEdit::Replace(TGLongPosition textPos, const char *oldText,
                           const char *newText, Bool_t direction, Bool_t caseSensitive)
{
   // Replace text starting at textPos.

   TGLongPosition pos;
   if (!fText->Replace(textPos, oldText, newText, direction, caseSensitive)) {
      return kFALSE;
   }
   UnMark();
   fIsMarked = kTRUE;
   fMarkedStart.fY = fMarkedEnd.fY = textPos.fY;
   fMarkedStart.fX = textPos.fX;
   fMarkedEnd.fX = fMarkedStart.fX + strlen(newText);

   if (direction) {
      SetCurrent(fMarkedEnd);
   } else {
      SetCurrent(fMarkedStart);
   }

   pos.fY = ToObjYCoord(fVisible.fY);
   if (fCurrent.fY < pos.fY ||
       ToScrYCoord(fCurrent.fY) >= (Int_t)fCanvas->GetHeight()) {
      pos.fY = fMarkedStart.fY;
   }
   pos.fX = ToObjXCoord(fVisible.fX, pos.fY);
   if (fCurrent.fX < pos.fX ||
       ToScrXCoord(fCurrent.fX, pos.fY) >= (Int_t)fCanvas->GetWidth()) {
      pos.fX = fMarkedStart.fX;
   }

   SetVsbPosition((ToScrYCoord(pos.fY)+fVisible.fY)/fScrollVal.fY);
   SetHsbPosition((ToScrXCoord(pos.fX, pos.fY)+fVisible.fX)/fScrollVal.fX);

   UpdateRegion(0, (Int_t)ToScrYCoord(fMarkedStart.fY), fCanvas->GetWidth(),
                UInt_t(ToScrYCoord(fMarkedEnd.fY+1)-ToScrYCoord(fMarkedEnd.fY)));

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TGTextEdit::Goto(Long_t line, Long_t column)
{
   // Goto the specified line.

   if (line < 0)
      line = 0;
   if (line >= fText->RowCount())
      line = fText->RowCount() - 1;
   if (column < 0)
      column = 0;
   if (column > fText->GetLineLength(line))
      column = fText->GetLineLength(line);

   TGLongPosition gotopos, pos;
   gotopos.fY = line;
   gotopos.fX = column;
   SetCurrent(gotopos);

   pos.fY = ToObjYCoord(fVisible.fY);
   if (fCurrent.fY < pos.fY ||
       ToScrYCoord(fCurrent.fY) >= (Int_t)fCanvas->GetHeight())
      pos.fY = gotopos.fY;

   SetVsbPosition((ToScrYCoord(pos.fY)+fVisible.fY)/fScrollVal.fY);
   SetHsbPosition(0);

   UnMark();
   fIsMarked = kTRUE;
   fMarkedStart.fY = fMarkedEnd.fY = line;
   fMarkedStart.fX = 0;
   fMarkedEnd.fX = fCanvas->GetWidth();

   return kTRUE;
}

//______________________________________________________________________________
void TGTextEdit::SetInsertMode(EInsertMode mode)
{
   // Sets the mode how characters are entered.

   if (fInsertMode == mode) return;

   fInsertMode = mode;
}

//______________________________________________________________________________
void TGTextEdit::CursorOff()
{
   // If cursor if on, turn it off.

   if (fCursorState == 1) {
      DrawCursor(2);
   }
   fCursorState = 2;
}

//______________________________________________________________________________
void TGTextEdit::CursorOn()
{
   // Turn cursor on.

   DrawCursor(1);
   fCursorState = 1;

   if (fCurBlink) {
      fCurBlink->Reset();
   }
}

//______________________________________________________________________________
void TGTextEdit::SetCurrent(TGLongPosition new_coord)
{
   // Make the specified position the current position.

   CursorOff();

   fCurrent.fY = new_coord.fY;
   fCurrent.fX = new_coord.fX;

   CursorOn();

   SendMessage(fMsgWindow, MK_MSG(kC_TEXTVIEW, kTXT_DATACHANGE), fWidgetId, 0);
   DataChanged();
}

//______________________________________________________________________________
void TGTextEdit::DrawCursor(Int_t mode)
{
   // Draw cursor. If mode = 1 draw cursor, if mode = 2 erase cursor.

   char count = -1;
   char cursor = ' ';
   if (fCurrent.fY >= fText->RowCount() || fCurrent.fX > fText->GetLineLength(fCurrent.fY) || fReadOnly) {
      return;
   }

   if (fCurrent.fY >= ToObjYCoord(fVisible.fY) &&
       fCurrent.fY <= ToObjYCoord(fVisible.fY+fCanvas->GetHeight()) &&
       fCurrent.fX >= ToObjXCoord(fVisible.fX, fCurrent.fY) &&
       fCurrent.fX <= ToObjXCoord(fVisible.fX+fCanvas->GetWidth(),fCurrent.fY)) {
      if (fCurrent.fY < fText->RowCount()) {
         count = fText->GetChar(fCurrent);
      }
      if (count == -1 || count == '\t') {
         cursor = ' ';
      } else {
         cursor = count;
      }

      if (mode == 2) {
         if (fIsMarked && count != -1) {
            if ((fCurrent.fY > fMarkedStart.fY && fCurrent.fY < fMarkedEnd.fY) ||
                (fCurrent.fY == fMarkedStart.fY && fCurrent.fX >= fMarkedStart.fX &&
                 fCurrent.fY < fMarkedEnd.fY) ||
                (fCurrent.fY == fMarkedEnd.fY && fCurrent.fX < fMarkedEnd.fX &&
                 fCurrent.fY > fMarkedStart.fY) ||
                (fCurrent.fY == fMarkedStart.fY && fCurrent.fY == fMarkedEnd.fY &&
                 fCurrent.fX >= fMarkedStart.fX && fCurrent.fX < fMarkedEnd.fX &&
                 fMarkedStart.fX != fMarkedEnd.fX)) {
               // back ground fillrectangle
               gVirtualX->FillRectangle(fCanvas->GetId(), fSelbackGC(),
                                     Int_t(ToScrXCoord(fCurrent.fX, fCurrent.fY)),
                                     Int_t(ToScrYCoord(fCurrent.fY)),
                                     UInt_t(ToScrXCoord(fCurrent.fX+1, fCurrent.fY) -
                                     ToScrXCoord(fCurrent.fX, fCurrent.fY)),
                                     UInt_t(ToScrYCoord(fCurrent.fY+1)-ToScrYCoord(fCurrent.fY)));
               if (count != -1)
                  gVirtualX->DrawString(fCanvas->GetId(), fSelGC(), (Int_t)ToScrXCoord(fCurrent.fX,fCurrent.fY),
                       Int_t(ToScrYCoord(fCurrent.fY+1) - fMaxDescent), &cursor, 1);
            } else {
               gVirtualX->ClearArea(fCanvas->GetId(),
                                    Int_t(ToScrXCoord(fCurrent.fX, fCurrent.fY)),
                                    Int_t(ToScrYCoord(fCurrent.fY)),
                                    UInt_t(ToScrXCoord(fCurrent.fX+1, fCurrent.fY) -
                                    ToScrXCoord(fCurrent.fX, fCurrent.fY)),
                                    UInt_t(ToScrYCoord(fCurrent.fY+1)-ToScrYCoord(fCurrent.fY)));
               if (count != -1)
                  gVirtualX->DrawString(fCanvas->GetId(), fNormGC(), (Int_t)ToScrXCoord(fCurrent.fX,fCurrent.fY),
                       Int_t(ToScrYCoord(fCurrent.fY+1) - fMaxDescent), &cursor, 1);
            }
         } else {
            gVirtualX->ClearArea(fCanvas->GetId(),
                                 Int_t(ToScrXCoord(fCurrent.fX, fCurrent.fY)),
                                 Int_t(ToScrYCoord(fCurrent.fY)),
                                 UInt_t(ToScrXCoord(fCurrent.fX+1, fCurrent.fY) -
                                 ToScrXCoord(fCurrent.fX, fCurrent.fY)),
                                 UInt_t(ToScrYCoord(fCurrent.fY+1)-ToScrYCoord(fCurrent.fY)));
            gVirtualX->DrawString(fCanvas->GetId(), fNormGC(), (Int_t)ToScrXCoord(fCurrent.fX,fCurrent.fY),
                       Int_t(ToScrYCoord(fCurrent.fY+1) - fMaxDescent), &cursor, 1);
         }
      } else {
         if (mode == 1) {
            gVirtualX->FillRectangle(fCanvas->GetId(), fCursor1GC,
                                     Int_t(ToScrXCoord(fCurrent.fX, fCurrent.fY)),
                                     Int_t(ToScrYCoord(fCurrent.fY)),
                                     2,
                                     UInt_t(ToScrYCoord(fCurrent.fY+1)-ToScrYCoord(fCurrent.fY)));
         }
      }
   }
}

//______________________________________________________________________________
void TGTextEdit::AdjustPos()
{
   // Adjust current position.

   TGLongPosition pos;
   pos.fY = fCurrent.fY;
   pos.fX = fCurrent.fX;

   if (pos.fY < ToObjYCoord(fVisible.fY)) {
      pos.fY = ToObjYCoord(fVisible.fY);
   } else if (ToScrYCoord(pos.fY+1) >= (Int_t) fCanvas->GetHeight()) {
      pos.fY = ToObjYCoord(fVisible.fY + fCanvas->GetHeight())-1;
   }
   if (pos.fX < ToObjXCoord(fVisible.fX, pos.fY)) {
      pos.fX = ToObjXCoord(fVisible.fX, pos.fY);
   } else if (ToScrXCoord(pos.fX, pos.fY) >= (Int_t) fCanvas->GetWidth()) {
      pos.fX = ToObjXCoord(fVisible.fX + fCanvas->GetWidth(), pos.fY)-1;
   }
   if (pos.fY != fCurrent.fY || pos.fX != fCurrent.fX) {
      SetCurrent(pos);
   }
}

//______________________________________________________________________________
Bool_t TGTextEdit::HandleTimer(TTimer *t)
{
   // Handle timer cursor blink timer.

   if (t != fCurBlink) {
      TGTextView::HandleTimer(t);
      return kTRUE;
   }

   if (fCursorState == 1) {
      fCursorState = 2;
   } else {
      fCursorState = 1;
   }

   DrawCursor(fCursorState);

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TGTextEdit::HandleSelection(Event_t *event)
{
   // Handle selection notify event.

   TString data;
   Int_t   nchar;

   gVirtualX->GetPasteBuffer((Window_t)event->fUser[0], (Atom_t)event->fUser[3],
                             data, nchar, kFALSE);

   if (!nchar) return kTRUE;

   delete fClipText;

   fClipText = new TGText;
   fClipText->LoadBuffer(data.Data());

   TGLongPosition start_src, end_src, pos;

   pos.fX = pos.fY = 0;
   start_src.fY = start_src.fX = 0;
   end_src.fY = fClipText->RowCount()-1;
   end_src.fX = fClipText->GetLineLength(end_src.fY)-1;

   if (end_src.fX < 0) {
      end_src.fX = 0;
   }

   // undo command
   TInsTextCom *icom = new TInsTextCom(this);
   icom->fChar = fText->GetChar(fCurrent);
   fText->InsText(fCurrent, fClipText, start_src, end_src);

   fIsMarked = kFALSE;

   fExposedRegion.fX = 0;
   fExposedRegion.fY = ToScrYCoord(fCurrent.fY);

   pos.fY = fCurrent.fY + fClipText->RowCount()-1;
   pos.fX = fClipText->GetLineLength(fClipText->RowCount()-1);

   if (start_src.fY == end_src.fY) {
      pos.fX = pos.fX + fCurrent.fX;
   }

   icom->SetEndPos(pos);

   // calculate exposed region
   fExposedRegion.fW = fCanvas->GetWidth();
   fExposedRegion.fH = fCanvas->GetHeight() - fExposedRegion.fY;

   SetCurrent(pos);

   if (ToScrYCoord(pos.fY) >= (Int_t)fCanvas->GetHeight()) {
      pos.fY = ToScrYCoord(pos.fY) + fVisible.fY - fCanvas->GetHeight()/2;
      fExposedRegion.fX = fExposedRegion.fY = 0;
      fExposedRegion.fH = fCanvas->GetHeight();
   } else {
      pos.fY = fVisible.fY;
   }
   if (ToScrXCoord(pos.fX, fCurrent.fY) >= (Int_t) fCanvas->GetWidth()) {
      pos.fX = ToScrXCoord(pos.fX, fCurrent.fY) + fVisible.fX + fCanvas->GetWidth()/2;
   } else if (ToScrXCoord(pos.fX, fCurrent.fY < 0) && pos.fX != 0) {
      if (fVisible.fX - (Int_t)fCanvas->GetWidth()/2 > 0) {
         pos.fX = fVisible.fX - fCanvas->GetWidth()/2;
      } else {
         pos.fX = 0;
      }
   } else {
      pos.fX = fVisible.fX;
   }

   SetSBRange(kHorizontal);
   SetSBRange(kVertical);
   SetVsbPosition(pos.fY/fScrollVal.fY);
   SetHsbPosition(pos.fX/fScrollVal.fX);

   fClient->NeedRedraw(this);

   return kTRUE;
}

static Bool_t gDbl_clk = kFALSE;
static Bool_t gTrpl_clk = kFALSE;

//______________________________________________________________________________
Bool_t TGTextEdit::HandleButton(Event_t *event)
{
   // Handle mouse button event in text edit widget.

   if (event->fWindow != fCanvas->GetId()) {
      return kFALSE;
   }

   TGLongPosition pos;

   TGTextView::HandleButton(event);

   if (event->fType == kButtonPress) {
      SetFocus();
      //Update();

      if (event->fCode == kButton1 || event->fCode == kButton2) {
         pos.fY = ToObjYCoord(fVisible.fY + event->fY);
         if (pos.fY >= fText->RowCount()) {
            pos.fY = fText->RowCount()-1;
         }
         pos.fX = ToObjXCoord(fVisible.fX+event->fX, pos.fY);
         if (pos.fX >= fText->GetLineLength(pos.fY)) {
            pos.fX = fText->GetLineLength(pos.fY);
         }
         while (fText->GetChar(pos) == 16) {
            pos.fX++;
         }

         SetCurrent(pos);

         TGTextLine *line = fText->GetCurrentLine();
         char *word = line->GetWord(pos.fX);
         Clicked((const char*)word);   // emit signal
         delete [] word;
      }
      if (event->fCode == kButton2) {
         if (gVirtualX->GetPrimarySelectionOwner() != kNone) {
            gVirtualX->ConvertPrimarySelection(fId, fClipboard, event->fTime);
            Update();
            return kTRUE;
         }
      }
      if (event->fCode == kButton3) {
         // do not handle during guibuilding
         if (fClient->IsEditable() || !fEnableMenu) {
            return kTRUE;
         }
         SetMenuState();
         fMenu->PlaceMenu(event->fXRoot, event->fYRoot, kTRUE, kTRUE);
      }
      gDbl_clk = kFALSE;
      gTrpl_clk = kFALSE;
   }

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TGTextEdit::HandleDoubleClick(Event_t *event)
{
   // Handle double click event.

   if (event->fWindow != fCanvas->GetId()) {
      return kFALSE;
   }

   if (event->fCode != kButton1) {
      return kFALSE;
   } 
   if (!fText->GetCurrentLine()->GetText()) {// empty line
      return kFALSE;
   }

   SetFocus();
   TGLongPosition pos;
   pos.fY = ToObjYCoord(fVisible.fY + event->fY);

   if (gDbl_clk && (event->fTime - fgLastClick < 350)) { // triple click
      fgLastClick  = event->fTime;
      gDbl_clk = kFALSE;
      gTrpl_clk = kTRUE;
      fMarkedStart.fY = fMarkedEnd.fY = pos.fY;
      fIsMarked = kTRUE;
      fMarkedStart.fX = 0;
      fMarkedEnd.fX = strlen(fText->GetCurrentLine()->GetText());
      Marked(kTRUE);
      UpdateRegion(0, (Int_t)ToScrYCoord(fMarkedStart.fY), fCanvas->GetWidth(),
                 UInt_t(ToScrYCoord(fMarkedEnd.fY + 1) - ToScrYCoord(fMarkedStart.fY)));
      return kTRUE;
   }

   if (gTrpl_clk && (event->fTime - fgLastClick < 350)) { // 4 click
      fgLastClick  = event->fTime;
      gTrpl_clk = kFALSE;
      fIsMarked = kTRUE;
      fMarkedStart.fY = 0;
      fMarkedStart.fX = 0;
      fMarkedEnd.fY = fText->RowCount()-1;
      fMarkedEnd.fX = fText->GetLineLength(fMarkedEnd.fY);
      if (fMarkedEnd.fX < 0) {
         fMarkedEnd.fX = 0;
      }
      UpdateRegion(0, 0, fCanvas->GetWidth(), fCanvas->GetHeight());
      return kTRUE;
   }

   gDbl_clk = kTRUE;
   gTrpl_clk = kFALSE;

   if (pos.fY >= fText->RowCount()) {
      pos.fY = fText->RowCount() - 1;
   }
   pos.fX = ToObjXCoord(fVisible.fX + event->fX, pos.fY);
  
   if (pos.fX >= fText->GetLineLength(pos.fY)) {
      pos.fX = fText->GetLineLength(pos.fY);
   }
   while (fText->GetChar(pos) == 16) {
      pos.fX++;
   }

   SetCurrent(pos);

   fMarkedStart.fY = fMarkedEnd.fY = pos.fY;
   char *line = fText->GetCurrentLine()->GetText();
   UInt_t len = (UInt_t)fText->GetCurrentLine()->GetLineLength();
   Int_t start = pos.fX;
   Int_t end = pos.fX;
   Int_t i = pos.fX;

   if (line[i] == ' ' || line[i] == '\t') {
      while (start >= 0) {
         if (line[start] == ' ' || line[start] == '\t') --start;
         else break;
      }
      ++start;
      while (end < (Int_t)len) {
         if (line[end] == ' ' || line[end] == '\t') ++end;
         else break;
      }
   } else if (isalnum(line[i])) {
      while (start >= 0) {
         if (isalnum(line[start])) --start;
         else break;
      }
      ++start;
      while (end < (Int_t)len) {
         if (isalnum(line[end])) ++end;
         else break;
      }
   } else {
      while (start >= 0) {
         if (isalnum(line[start]) || line[start] == ' ' || line[start] == '\t') {
            break;
         } else {
            --start;
         }
      }
      ++start;
      while (end < (Int_t)len) {
         if (isalnum(line[end]) || line[end] == ' ' || line[end] == '\t') {
            break;
         } else {
            ++end;
         }
      }
   }

   fMarkedStart.fX = start;
   fIsMarked = kTRUE;
   fMarkedEnd.fX = end;
   Marked(kTRUE);

   len = end - start; //length
   char *word = new char[len + 1];
   word[len] = '\0';
   strncpy(word, line+start, (UInt_t)len);
   DoubleClicked((const char *)word);  // emit signal

   delete [] word;
//   delete [] line;

   UpdateRegion(0, (Int_t)ToScrYCoord(fMarkedStart.fY), fCanvas->GetWidth(),
                UInt_t(ToScrYCoord(fMarkedEnd.fY + 1) - ToScrYCoord(fMarkedStart.fY)));

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TGTextEdit::HandleMotion(Event_t *event)
{
   // Handle mouse motion event in text edit widget.

   TGLongPosition pos;
   if (event->fWindow != fCanvas->GetId()) {
      return kTRUE;
   }

   if (fScrolling == -1) {
      pos.fY = ToObjYCoord(fVisible.fY+event->fY);
      if (pos.fY >= fText->RowCount()) {
         pos.fY = fText->RowCount()-1;
      }
      pos.fX = ToObjXCoord(fVisible.fX+event->fX, pos.fY);
      if (pos.fX > fText->GetLineLength(pos.fY)) {
         pos.fX = fText->GetLineLength(pos.fY);
      }
      if (fText->GetChar(pos) == 16) {
         if (pos.fX < fCurrent.fX) {
            pos.fX = fCurrent.fX;
         }
         if (pos.fX > fCurrent.fX) {
            do {
               pos.fX++;
            } while (fText->GetChar(pos) == 16);
         }
      }
      event->fY = (Int_t)ToScrYCoord(pos.fY);
      event->fX = (Int_t)ToScrXCoord(pos.fX, pos.fY);
      if (pos.fY != fCurrent.fY || pos.fX != fCurrent.fX) {
         TGTextView::HandleMotion(event);
         SetCurrent(pos);
      }
   }
   return kTRUE;
}

//______________________________________________________________________________
Bool_t TGTextEdit::HandleKey(Event_t *event)
{
   // The key press event handler converts a key press to some line editor
   // action.

   Bool_t mark_ok = kFALSE;
   char   input[10];
   Int_t  n;
   UInt_t keysym;

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

      AdjustPos();

      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;
         default:
            break;
      }
      if (event->fState & kKeyControlMask) {   // Cntrl key modifier pressed
         switch((EKeySym)keysym & ~0x20) {   // treat upper and lower the same
            case kKey_A:
               SelectAll();
               return kTRUE;
            case kKey_B:
               mark_ok = kTRUE;
               PrevChar();
               break;
            case kKey_C:
               Copy();
               return kTRUE;
            case kKey_D:
               if (fIsMarked) {
                  Cut();
               } else {
                  Long_t len = fText->GetLineLength(fCurrent.fY);
                  if (fCurrent.fY == fText->RowCount()-1 && fCurrent.fX == len) {
                     gVirtualX->Bell(0);
                     return kTRUE;
                  }
                  NextChar();
                  new TDelCharCom(this);
               }
               break;
            case kKey_E:
               mark_ok = kTRUE;
               End();
               break;
            case kKey_H:
               if (fCurrent.fX || fCurrent.fY) new TDelCharCom(this);
               else gVirtualX->Bell(0);
               break;
            case kKey_K:
               End();
               fIsMarked = kTRUE;
               Mark(fCurrent.fX, fCurrent.fY);
               Cut();
               break;
            case kKey_U:
               Home();
               UnMark();
               fMarkedStart.fY = fMarkedEnd.fY = fCurrent.fY;
               fMarkedStart.fX = fMarkedEnd.fX = fCurrent.fX;
               End();
               fIsMarked = kTRUE;
               Mark(fCurrent.fX, fCurrent.fY);
               Cut();
               break;
            case kKey_V:
            case kKey_Y:
               Paste();
               return kTRUE;
            case kKey_X:
               Cut();
               return kTRUE;
            case kKey_Z:
               fHistory->Notify();  // undo action
               return kTRUE;
            case kKey_F:
               Search(kFALSE);
               return kTRUE;
            case kKey_L:
            {   
               Long_t ret = fCurrent.fY+1;
               new TGGotoDialog(fClient->GetDefaultRoot(), this, 400, 150, &ret);
               if (ret > -1) {
                  ret--;   // user specifies lines starting at 1
                  Goto(ret);
               }
               return kTRUE;
            }
            case kKey_Home:
               {
                  TGLongPosition pos;
                  pos.fY = 0;
                  pos.fX = 0;
                  SetHsbPosition(0);
                  SetVsbPosition(0);
                  SetCurrent(pos);
               }
               break;
            case kKey_End:
               {
                  TGLongPosition pos;
                  pos.fY = fText->RowCount()-1;
                  pos.fX = fText->GetLineLength(pos.fY);
                  if (fVsb && fVsb->IsMapped())
                     SetVsbPosition((ToScrYCoord(pos.fY)+fVisible.fY)/fScrollVal.fY);
                  SetCurrent(pos);
               }
               break;
            default:
               return kTRUE;
         }
      }
      if (n && keysym >= 32 && keysym < 127 &&     // printable keys
          !(event->fState & kKeyControlMask) &&
          (EKeySym)keysym != kKey_Delete &&
          (EKeySym)keysym != kKey_Backspace) {

         if (fIsMarked) {
            Cut();
         }
         new TInsCharCom(this, input[0]);

      } else {

         switch ((EKeySym)keysym) {
            case kKey_F3:
               // typically FindAgain action
               SendMessage(fMsgWindow, MK_MSG(kC_TEXTVIEW, kTXT_F3), fWidgetId,
                           kTRUE);
               SetMenuState();
               if (fMenu->IsEntryEnabled(kM_SEARCH_FINDAGAIN)) {
                  SendMessage(this, MK_MSG(kC_COMMAND, kCM_MENU),
                              kM_SEARCH_FINDAGAIN, 0);
                  FindAgain();
               }
               break;
            case kKey_Delete:
               if (fIsMarked) {
                  Cut();
               } else {
                  Long_t len = fText->GetLineLength(fCurrent.fY);
                  if (fCurrent.fY == fText->RowCount()-1 && fCurrent.fX == len) {
                     gVirtualX->Bell(0);
                     return kTRUE;
                  }
                  NextChar();
                  new TDelCharCom(this);
               }
               break;
            case kKey_Return:
            case kKey_Enter:
               new TBreakLineCom(this);
               break;
            case kKey_Tab:
               new TInsCharCom(this, '\t');
               break;
            case kKey_Backspace:
               if (fIsMarked) {
                  Cut();
               } else {
                  if (fCurrent.fX || fCurrent.fY) {
                     new TDelCharCom(this);
                  } else {
                     gVirtualX->Bell(0);
                  }
               }
               break;
            case kKey_Left:
               mark_ok = kTRUE;
               PrevChar();
               break;
            case kKey_Right:
               mark_ok = kTRUE;
               NextChar();
               break;
            case kKey_Up:
               mark_ok = kTRUE;
               LineUp();
               break;
            case kKey_Down:
               mark_ok = kTRUE;
               LineDown();
               break;
            case kKey_PageUp:
               mark_ok = kTRUE;
               ScreenUp();
               break;
            case kKey_PageDown:
               mark_ok = kTRUE;
               ScreenDown();
               break;
            case kKey_Home:
               mark_ok = kTRUE;
               Home();
               break;
            case kKey_End:
               mark_ok = kTRUE;
               End();
               break;
            case kKey_Insert:           // switch on/off insert mode
               SetInsertMode(GetInsertMode() == kInsert ? kReplace : kInsert);
               break;
            default:
               break;
         }
      }
      if ((event->fState & kKeyShiftMask) && mark_ok) {
         fIsMarked = kTRUE;
         Mark(fCurrent.fX, fCurrent.fY);
         Copy();
         SendMessage(fMsgWindow, MK_MSG(kC_TEXTVIEW, kTXT_ISMARKED), fWidgetId,
                     kTRUE);
         Marked(kTRUE);
      } else {
         UnMark();
         SendMessage(fMsgWindow, MK_MSG(kC_TEXTVIEW, kTXT_ISMARKED),
                        fWidgetId, kFALSE);
         fMarkedStart.fY = fMarkedEnd.fY = fCurrent.fY;
         fMarkedStart.fX = fMarkedEnd.fX = fCurrent.fX;
      }
   }
   return kTRUE;
}

//______________________________________________________________________________
Bool_t TGTextEdit::HandleCrossing(Event_t *event)
{
   // Handle mouse crossing event.

   if (event->fWindow != fCanvas->GetId()) {
      return kTRUE;
   }
   if (gVirtualX->GetInputFocus() != fCanvas->GetId()) {
      if (event->fType == kEnterNotify) {
         if (!fCurBlink) {
            fCurBlink = new TViewTimer(this, 500);
         }
         fCurBlink->Reset();
         gSystem->AddTimer(fCurBlink);
      } else {
         if (fCurBlink) fCurBlink->Remove();
         if (!fEnableCursorWithoutFocus && (fCursorState == 1)) {
            DrawCursor(2);
            fCursorState = 2;
         } else if (fCursorState == 2) {
            DrawCursor(1);
            fCursorState = 1;
         }
      }
   }

   TGTextView::HandleCrossing(event);

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TGTextEdit::HandleFocusChange(Event_t *event)
{
   // Handle focus change event in text edit widget.

   if (event->fWindow != fCanvas->GetId()) {
      return kTRUE;
   }

   // check this when porting to Win32
   if ((event->fCode == kNotifyNormal) && (event->fState != kNotifyPointer)) {
      if (event->fType == kFocusIn) {
         if (!fCurBlink) {
            fCurBlink = new TViewTimer(this, 500);
         }
         fCurBlink->Reset();
         gSystem->AddTimer(fCurBlink);
      } else {
         if (fCurBlink) fCurBlink->Remove();
         if (fCursorState == 2) {
            DrawCursor(1);
            fCursorState = 1;
         }
      }
      fClient->NeedRedraw(this);
   }
   return kTRUE;
}

//______________________________________________________________________________
void TGTextEdit::Search(Bool_t close)
{
   // Invokes search dialog.

   static TGSearchType *srch = 0;
   Int_t ret = 0;
   
   if (!srch) srch = new TGSearchType;
   srch->fClose = close;

   if (!close) {
      if (!TGSearchDialog::SearchDialog()) {
         TGSearchDialog::SearchDialog() = new TGSearchDialog(fClient->GetDefaultRoot(),
                                                        fCanvas, 400, 150, srch, &ret);
      }
      TGSearchDialog::SearchDialog()->Connect("TextEntered(char *)", "TGTextEdit", 
                                          this, "Search(char *,Bool_t,Bool_t)");
      TGSearchDialog::SearchDialog()->MapRaised();
   } else {
      new TGSearchDialog(fClient->GetDefaultRoot(), fCanvas, 400, 150, srch, &ret);
      if (ret) {
         Search(srch->fBuffer);
      }
   }
}

//______________________________________________________________________________
Bool_t TGTextEdit::ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2)
{
   // Process context menu messages.

   TString msg2;
   TGTextView::ProcessMessage(msg, parm1, parm2);

   switch(GET_MSG(msg)) {
      case kC_COMMAND:
         switch(GET_SUBMSG(msg)) {
            case kCM_MENU:
               switch (parm1) {
                  case kM_FILE_NEW:
                  case kM_FILE_CLOSE:
                  case kM_FILE_OPEN:
                     if (!IsSaved()) {
                        Int_t retval;
                        Bool_t untitled = !strlen(fText->GetFileName()) ? kTRUE : kFALSE;

                        msg2.Form("Save \"%s\"?",
                                  untitled ? "Untitled" : fText->GetFileName());
                        new TGMsgBox(fClient->GetDefaultRoot(), this, "Editor", 
                                     msg2.Data(), kMBIconExclamation, 
                                     kMBYes | kMBNo | kMBCancel, &retval);

                        if (retval == kMBCancel)
                           return kTRUE;
                        if (retval == kMBYes)
                           if (!SaveFile(0))
                              return kTRUE;
                     }
                     Clear();
                     if (parm1 == kM_FILE_CLOSE) {
                        SendMessage(fMsgWindow, MK_MSG(kC_TEXTVIEW, kTXT_CLOSE),
                                    fWidgetId, 0);
                        Closed();
                     }
                     if (parm1 == kM_FILE_OPEN) {
                        TGFileInfo fi;
                        fi.fFileTypes = gFiletypes;
                        new TGFileDialog(fClient->GetDefaultRoot(), this, kFDOpen, &fi);
                        if (fi.fFilename && strlen(fi.fFilename)) {
                           LoadFile(fi.fFilename);
                           SendMessage(fMsgWindow, MK_MSG(kC_TEXTVIEW, kTXT_OPEN),
                                       fWidgetId, 0);
                           Opened();
                        }
                     }
                     break;
                  case kM_FILE_SAVE:
                     if (SaveFile(0)) {
                        SendMessage(fMsgWindow, MK_MSG(kC_TEXTVIEW, kTXT_SAVE),
                                    fWidgetId, 0);
                        Saved();
                     }
                     break;
                  case kM_FILE_SAVEAS:
                     if (SaveFile(0, kTRUE)) {
                        SendMessage(fMsgWindow, MK_MSG(kC_TEXTVIEW, kTXT_SAVE),
                                    fWidgetId, 0);
                        SavedAs();
                     }
                     break;
                  case kM_FILE_PRINT:
                     {
                        Int_t ret = 0;
                        if (!gPrinter) {
                           gPrinter = StrDup("892_2_cor"); // use gEnv
                           gPrintCommand = StrDup("xprint");
                        }
                        new TGPrintDialog(fClient->GetDefaultRoot(), this, 400, 150,
                                          &gPrinter, &gPrintCommand, &ret);
                        if (ret)
                           Print();
                     }
                     break;
                  case kM_EDIT_CUT:
                     Cut();
                     break;
                  case kM_EDIT_COPY:
                     Copy();
                     break;
                  case kM_EDIT_PASTE:
                     Paste();
                     break;
                  case kM_EDIT_SELECTALL:
                     SelectAll();
                     break;
                  case kM_SEARCH_FIND:
                     {
                        Search(kFALSE);
                     }
                     break;
                  case kM_SEARCH_FINDAGAIN:
                     if (!fSearch) {
                        SendMessage(this, MK_MSG(kC_COMMAND, kCM_MENU),
                                    kM_SEARCH_FIND, 0);
                        return kTRUE;
                     }
                     if (!Search(fSearch->fBuffer, fSearch->fDirection,
                                 fSearch->fCaseSensitive)) {
                        msg2.Form("Couldn't find \"%s\"", fSearch->fBuffer);
                        new TGMsgBox(fClient->GetDefaultRoot(), this, "Editor", 
                                     msg2.Data(), kMBIconExclamation, kMBOk, 0);
                     }
                     break;
                  case kM_SEARCH_GOTO:
                     {
                        Long_t ret = fCurrent.fY+1;
                        new TGGotoDialog(fClient->GetDefaultRoot(), this, 400, 150, &ret);
                        if (ret > -1) {
                           ret--;   // user specifies lines starting at 1
                           Goto(ret);
                        }
                     }
                     break;
                  default:
                     printf("No action implemented for menu id %ld\n", parm1);
                     break;
               }
            default:
               break;
         }
         break;

      default:
         break;
   }
   return kTRUE;
}

//______________________________________________________________________________
void TGTextEdit::InsChar(char character)
{
   // Insert a character in the text edit widget.

   if (fReadOnly) return;

   char *charstring = 0;
   TGLongPosition pos;

   if (character == '\t') {
      pos.fX = fCurrent.fX;
      pos.fY = fCurrent.fY;
      fText->InsChar(pos, '\t');
      pos.fX++;
      while (pos.fX & 0x7) {
         pos.fX++;
      }
      fText->ReTab(pos.fY);
      UpdateRegion(0, (Int_t)ToScrYCoord(pos.fY), fCanvas->GetWidth(),
                   UInt_t(ToScrYCoord(pos.fY+1) - ToScrYCoord(pos.fY)));
      SetSBRange(kHorizontal);
      if (ToScrXCoord(pos.fX, pos.fY) >= (Int_t)fCanvas->GetWidth()) {
         if (pos.fX != fText->GetLineLength(fCurrent.fY)) {
            SetHsbPosition((fVisible.fX+fCanvas->GetWidth()/2)/fScrollVal.fX);
         } else {
            SetHsbPosition(fVisible.fX/fScrollVal.fX);
         }
      }
      SetCurrent(pos);
      return;
   } else {
      if (fInsertMode == kReplace) {
         fCurrent.fX++;
         new TDelCharCom(this);
      }
      fText->InsChar(fCurrent, character);
      pos.fX = fCurrent.fX + 1;
      pos.fY = fCurrent.fY;
      charstring = new char[2];
      charstring[1] = '\0';
      charstring[0] = character;
   }
   SetSBRange(kHorizontal);
   if (ToScrXCoord(pos.fX, pos.fY) >= (Int_t)fCanvas->GetWidth()) {
      if (pos.fX != fText->GetLineLength(fCurrent.fY)) {
         SetHsbPosition((fVisible.fX+fCanvas->GetWidth()/2)/fScrollVal.fX);
      } else {
         SetHsbPosition(fVisible.fX/fScrollVal.fX+strlen(charstring));
      }
      if (!fHsb)
         gVirtualX->DrawString(fCanvas->GetId(), fNormGC(),
                               (Int_t)ToScrXCoord(fCurrent.fX, fCurrent.fY),
                               Int_t(ToScrYCoord(fCurrent.fY+1) - fMaxDescent),
                               charstring, strlen(charstring));
   } else {
#ifdef R__HAS_COCOA
      //I would use const, but some members of TGTextLine are non-const.
      if (TGTextLine *currentLine = fText->GetCurrentLine()) {
         const ULong_t lineStart = ToObjXCoord(fVisible.fX, fCurrent.fY);
         if (lineStart < currentLine->GetLineLength()) {
            const char *textToRender = currentLine->GetText(lineStart, currentLine->GetLineLength() - lineStart);
            //The next two lines can throw and textToRender will leak, but ROOT does not care about such things. :(
            gVirtualX->ClearArea(fCanvas->GetId(), Int_t(ToScrXCoord(0, fCurrent.fY)),
                                 Int_t(ToScrYCoord(fCurrent.fY)), UInt_t(ToScrXCoord(currentLine->GetLineLength(), fCurrent.fY)),
                                 UInt_t(ToScrYCoord(fCurrent.fY+1)-ToScrYCoord(fCurrent.fY)));
            gVirtualX->DrawString(fCanvas->GetId(), fNormGC(), Int_t(ToScrXCoord(0, fCurrent.fY)),
                                  Int_t(ToScrYCoord(fCurrent.fY + 1) - fMaxDescent),
                                  textToRender, -1);
            delete [] textToRender;
         }
      }
#else
      gVirtualX->CopyArea(fCanvas->GetId(), fCanvas->GetId(), fNormGC(),
                          (Int_t)ToScrXCoord(fCurrent.fX, fCurrent.fY),
                          (Int_t)ToScrYCoord(fCurrent.fY), fCanvas->GetWidth(),
                          UInt_t(ToScrYCoord(fCurrent.fY+1)-ToScrYCoord(fCurrent.fY)),
                          (Int_t)ToScrXCoord(pos.fX, fCurrent.fY),
                          (Int_t)ToScrYCoord(fCurrent.fY));
      gVirtualX->ClearArea(fCanvas->GetId(),
                           Int_t(ToScrXCoord(fCurrent.fX, fCurrent.fY)),
                           Int_t(ToScrYCoord(fCurrent.fY)),
                           UInt_t(ToScrXCoord(fCurrent.fX+strlen(charstring), fCurrent.fY) -
                           ToScrXCoord(fCurrent.fX, fCurrent.fY)),
                           UInt_t(ToScrYCoord(fCurrent.fY+1)-ToScrYCoord(fCurrent.fY)));
      gVirtualX->DrawString(fCanvas->GetId(), fNormGC(),
                            Int_t(ToScrXCoord(fCurrent.fX, fCurrent.fY)),
                            Int_t(ToScrYCoord(fCurrent.fY+1) - fMaxDescent),
                            charstring, strlen(charstring));
      fCursorState = 2;  // the ClearArea effectively turned off the cursor
#endif
   }
   delete [] charstring;
   SetCurrent(pos);
}

//______________________________________________________________________________
void TGTextEdit::DelChar()
{
   // Delete a character from the text edit widget.

   if (fReadOnly) {
      return;
   }

   char *buffer;
   TGLongPosition pos, pos2;
   Long_t len;

   pos.fY = fCurrent.fY;
   pos.fX = fCurrent.fX;
   UInt_t h = 0;

   if (fCurrent.fX > 0) {
      Int_t y = (Int_t)ToScrYCoord(pos.fY);
      h = UInt_t(ToScrYCoord(pos.fY+2) - y);
      if (!y) h = h << 1;

      pos.fX--;
      if (fText->GetChar(pos) == 16) {
         do {
            pos.fX++;
            fText->DelChar(pos);
            pos.fX -= 2;
         } while (fText->GetChar(pos) != '\t');

         pos.fX++;
         fText->DelChar(pos);
         pos.fX--;
         fText->ReTab(pos.fY);
         UpdateRegion(0, y, fCanvas->GetWidth(), h);
      } else {
         pos.fX = fCurrent.fX;
         fText->DelChar(pos);
         pos.fX = fCurrent.fX - 1;
      }
      if (ToScrXCoord(fCurrent.fX-1, fCurrent.fY) < 0) {
         SetHsbPosition((fVisible.fX-fCanvas->GetWidth()/2)/fScrollVal.fX);
      }
      SetSBRange(kHorizontal);
      UpdateRegion(0, y, fCanvas->GetWidth(), h);
   } else {
      if (fCurrent.fY > 0) {
         len = fText->GetLineLength(fCurrent.fY);
         if (len > 0) {
            buffer = fText->GetLine(fCurrent, len);
            pos.fY--;
            pos.fX = fText->GetLineLength(fCurrent.fY-1);
            fText->InsText(pos, buffer);
            pos.fY++;
            delete [] buffer;
         } else {
            pos.fX = fText->GetLineLength(fCurrent.fY-1);
         }

         pos2.fY = ToScrYCoord(fCurrent.fY+1);
         pos.fY = fCurrent.fY - 1;
         fText->DelLine(fCurrent.fY);
         len = fText->GetLineLength(fCurrent.fY-1);

         if (ToScrXCoord(pos.fX, fCurrent.fY-1) >= (Int_t)fCanvas->GetWidth()) {
            SetHsbPosition((ToScrXCoord(pos.fX, pos.fY)+fVisible.fX-fCanvas->GetWidth()/2)/fScrollVal.fX);
         }

#ifdef R__HAS_COCOA
         UpdateRegion(0, 0, fCanvas->GetWidth(), fCanvas->GetHeight());
#else
         h = UInt_t(fCanvas->GetHeight() - ToScrYCoord(fCurrent.fY));
         gVirtualX->CopyArea(fCanvas->GetId(), fCanvas->GetId(), fNormGC(), 0,
                             Int_t(pos2.fY), fWidth, h, 0, (Int_t)ToScrYCoord(fCurrent.fY));
         if (ToScrYCoord(pos.fY) < 0) {
            SetVsbPosition(fVisible.fY/fScrollVal.fY-1);
         }
         UpdateRegion(0, (Int_t)ToScrYCoord(pos.fY), fCanvas->GetWidth(), h);
#endif
         SetSBRange(kVertical);
         SetSBRange(kHorizontal);
      }
   }

   SetCurrent(pos);
}

//______________________________________________________________________________
void TGTextEdit::BreakLine()
{
   // Break a line.

   if (fReadOnly) return;

   TGLongPosition pos;
   fText->BreakLine(fCurrent);
   if (ToScrYCoord(fCurrent.fY+2) <= (Int_t)fCanvas->GetHeight()) {
#ifdef R__HAS_COCOA
      UpdateRegion(0, (Int_t)ToScrYCoord(fCurrent.fY + 1), fCanvas->GetWidth(), fCanvas->GetHeight());
#else
      gVirtualX->CopyArea(fCanvas->GetId(), fCanvas->GetId(), fNormGC(), 0,
                          (Int_t)ToScrYCoord(fCurrent.fY+1), fCanvas->GetWidth(),
                          UInt_t(fCanvas->GetHeight()-(ToScrYCoord(fCurrent.fY+2)-
                          ToScrYCoord(fCurrent.fY))),
                          0, (Int_t)ToScrYCoord(fCurrent.fY+2));
      UpdateRegion(0, (Int_t)ToScrYCoord(fCurrent.fY), fCanvas->GetWidth(),
                  UInt_t(ToScrYCoord(fCurrent.fY+2) - ToScrYCoord(fCurrent.fY)));
#endif
      if (fVisible.fX != 0) {
         SetHsbPosition(0);
      }
      SetSBRange(kHorizontal);
      SetSBRange(kVertical);
   } else {
      SetSBRange(kHorizontal);
      SetSBRange(kVertical);
      SetVsbPosition(fVisible.fY/fScrollVal.fY + 1);
      UpdateRegion(0, (Int_t)ToScrYCoord(fCurrent.fY), fCanvas->GetWidth(),
                   UInt_t(ToScrYCoord(fCurrent.fY+1) - ToScrYCoord(fCurrent.fY)));
   }
   pos.fY = fCurrent.fY+1;
   pos.fX = 0;
   SetCurrent(pos);
}

//______________________________________________________________________________
void TGTextEdit::ScrollCanvas(Int_t new_top, Int_t direction)
{
   // Scroll the canvas to new_top in the kVertical or kHorizontal direction.

   CursorOff();

   TGTextView::ScrollCanvas(new_top, direction);

   CursorOn();
}

//______________________________________________________________________________
void TGTextEdit::DrawRegion(Int_t x, Int_t y, UInt_t width, UInt_t height)
{
   // Redraw the text edit widget.

   CursorOff();

   TGTextView::DrawRegion(x, y, width, height);

   CursorOn();
}

//______________________________________________________________________________
void TGTextEdit::PrevChar()
{
   // Go to the previous character.

   if (fCurrent.fY == 0 && fCurrent.fX == 0) {
      gVirtualX->Bell(0);
      return;
   }

   TGLongPosition pos;
   Long_t len;

   pos.fY = fCurrent.fY;
   pos.fX = fCurrent.fX;
   if (fCurrent.fX > 0) {
      pos.fX--;
      while (fText->GetChar(pos) == 16) {
         pos.fX--;
      }

      if (ToScrXCoord(pos.fX, pos.fY) < 0) {
         if (fVisible.fX-(Int_t)fCanvas->GetWidth()/2 >= 0) {
            SetHsbPosition((fVisible.fX-fCanvas->GetWidth()/2)/fScrollVal.fX);
         } else {
            SetHsbPosition(0);
         }
      }
   } else {
      if (fCurrent.fY > 0) {
         pos.fY = fCurrent.fY - 1;
         len = fText->GetLineLength(pos.fY);
         if (ToScrYCoord(fCurrent.fY) <= 0) {
            SetVsbPosition(fVisible.fY/fScrollVal.fY-1);
         }
         if (ToScrXCoord(len, pos.fY) >= (Int_t)fCanvas->GetWidth()) {
            SetHsbPosition((ToScrXCoord(len, pos.fY)+fVisible.fX -
                            fCanvas->GetWidth()/2)/fScrollVal.fX);
         }
         pos.fX = len;
      }
   }
   SetCurrent(pos);
}

//______________________________________________________________________________
void TGTextEdit::NextChar()
{
   // Go to next character.

   Long_t len = fText->GetLineLength(fCurrent.fY);

   if (fCurrent.fY == fText->RowCount()-1 && fCurrent.fX == len) {
      gVirtualX->Bell(0);
      return;
   }

   TGLongPosition pos;
   pos.fY = fCurrent.fY;
   if (fCurrent.fX < len) {
      if (fText->GetChar(fCurrent) == '\t') {
         pos.fX = fCurrent.fX + 8 - (fCurrent.fX & 0x7);
      } else {
         pos.fX = fCurrent.fX + 1;
      }

      if (ToScrXCoord(pos.fX, pos.fY) >= (Int_t)fCanvas->GetWidth()) {
         SetHsbPosition(fVisible.fX/fScrollVal.fX+(fCanvas->GetWidth()/2)/fScrollVal.fX);
      }
   } else {
      if (fCurrent.fY < fText->RowCount()-1) {
         pos.fY = fCurrent.fY + 1;
         if (ToScrYCoord(pos.fY+1) >= (Int_t)fCanvas->GetHeight()) {
            SetVsbPosition(fVisible.fY/fScrollVal.fY+1);
         }
         SetHsbPosition(0);
         pos.fX = 0;
      }
   }
   SetCurrent(pos);
}

//______________________________________________________________________________
void TGTextEdit::LineUp()
{
   // Make current position first line in window by scrolling up.

   TGLongPosition pos;
   Long_t len;
   if (fCurrent.fY > 0) {
      pos.fY = fCurrent.fY - 1;
      if (ToScrYCoord(fCurrent.fY) <= 0) {
         SetVsbPosition(fVisible.fY/fScrollVal.fY-1);
      }
      len = fText->GetLineLength(fCurrent.fY-1);
      if (fCurrent.fX > len) {
         if (ToScrXCoord(len, pos.fY) <= 0) {
            if (ToScrXCoord(len, pos.fY) < 0) {
               SetHsbPosition(ToScrXCoord(len, pos.fY)+
                            (fVisible.fX-fCanvas->GetWidth()/2)/fScrollVal.fX);
            } else {
               SetHsbPosition(0);
            }
         }
         pos.fX = len;
      } else {
         pos.fX = ToObjXCoord(ToScrXCoord(fCurrent.fX, fCurrent.fY)+fVisible.fX, pos.fY);
      }

      while (fText->GetChar(pos) == 16) {
         pos.fX++;
      }
      SetCurrent(pos);
   }
}

//______________________________________________________________________________
void TGTextEdit::LineDown()
{
   // Move one line down.

   TGLongPosition pos;
   Long_t len;
   if (fCurrent.fY < fText->RowCount()-1) {
      len = fText->GetLineLength(fCurrent.fY+1);
      pos.fY = fCurrent.fY + 1;
      if (ToScrYCoord(pos.fY+1) > (Int_t)fCanvas->GetHeight()) {
         SetVsbPosition(fVisible.fY/fScrollVal.fY+1);
      }
      if (fCurrent.fX > len) {
         if (ToScrXCoord(len, pos.fY) <= 0) {
            if (ToScrXCoord(len, pos.fY) < 0) {
               SetHsbPosition((ToScrXCoord(len, pos.fY)+fVisible.fX-fCanvas->GetWidth()/2)/fScrollVal.fX);
            } else {
               SetHsbPosition(0);
            }
         }
         pos.fX = len;
      } else {
         pos.fX = ToObjXCoord(ToScrXCoord(fCurrent.fX, fCurrent.fY)+fVisible.fX, pos.fY);
      }

      while (fText->GetChar(pos) == 16) {
         pos.fX++;
      }
      SetCurrent(pos);
   }
}

//______________________________________________________________________________
void TGTextEdit::ScreenUp()
{
   // Move one screen up.

   TGLongPosition pos;
   pos.fX = fCurrent.fX;
   pos.fY = fCurrent.fY - (ToObjYCoord(fCanvas->GetHeight())-ToObjYCoord(0))-1;
   if (fVisible.fY - (Int_t)fCanvas->GetHeight() >= 0) { // +1
      SetVsbPosition((fVisible.fY - fCanvas->GetHeight())/fScrollVal.fY);
   } else {
      pos.fY = 0;
      SetVsbPosition(0);
   }
   while (fText->GetChar(pos) == 16) {
      pos.fX++;
   }
   SetCurrent(pos);
}

//______________________________________________________________________________
void TGTextEdit::ScreenDown()
{
   // Move one screen down.

   TGLongPosition pos;
   pos.fX = fCurrent.fX;
   pos.fY = fCurrent.fY + (ToObjYCoord(fCanvas->GetHeight()) - ToObjYCoord(0));
   Long_t count = fText->RowCount()-1;
   if ((Int_t)fCanvas->GetHeight() < ToScrYCoord(count)) {
      SetVsbPosition((fVisible.fY+fCanvas->GetHeight())/fScrollVal.fY);
   } else {
      pos.fY = count;
   }
   while (fText->GetChar(pos) == 16) {
      pos.fX++;
   }
   SetCurrent(pos);
}

//______________________________________________________________________________
void TGTextEdit::Home()
{
   // Move to beginning of line.

   TGLongPosition pos;
   pos.fY = fCurrent.fY;
   pos.fX = 0;
   SetHsbPosition(0);
   SetCurrent(pos);
}

//______________________________________________________________________________
void TGTextEdit::End()
{
   // Move to end of line.

   TGLongPosition pos;
   pos.fY = fCurrent.fY;
   pos.fX = fText->GetLineLength(pos.fY);
   if (ToScrXCoord(pos.fX, pos.fY) >= (Int_t)fCanvas->GetWidth()) {
      SetHsbPosition((ToScrXCoord(pos.fX, pos.fY) + fVisible.fX - fCanvas->GetWidth()/2)/fScrollVal.fX);
   }
   SetCurrent(pos);
}

//______________________________________________________________________________
const TGGC &TGTextEdit::GetCursor0GC()
{
   // Return selection graphics context for text cursor.
   
   if (!fgCursor0GC) {
      fgCursor0GC = new TGGC(GetDefaultSelectedGC());
      fgCursor0GC->SetFunction(kGXxor);
   }
   return *fgCursor0GC;
}

//______________________________________________________________________________
const TGGC &TGTextEdit::GetCursor1GC()
{
   // Return default graphics context for text cursor.
   
   if (!fgCursor1GC) {
      fgCursor1GC = new TGGC(GetDefaultGC());
      fgCursor1GC->SetFunction(kGXand);
   }
   return *fgCursor1GC;
}

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

   char quote = '"';
   out << "   TGTextEdit *";
   out << GetName() << " = new TGTextEdit(" << fParent->GetName()
       << "," << GetWidth() << "," << GetHeight()
       << ");"<< std::endl;
   if (option && strstr(option, "keep_names"))
      out << "   " << GetName() << "->SetName(\"" << GetName() << "\");" << std::endl;

   if (IsReadOnly()) {
      out << "   " << GetName() << "->SetReadOnly(kTRUE);" << std::endl;
   }

   if (!IsMenuEnabled()) {
      out << "   " << GetName() << "->EnableMenu(kFALSE);" << std::endl;
   }

   if (fCanvas->GetBackground() != TGFrame::fgWhitePixel) {
      out << "   " << GetName() << "->ChangeBackground(" << fCanvas->GetBackground() << ");" << std::endl;
   }

   TGText *txt = GetText();
   Bool_t fromfile = strlen(txt->GetFileName()) ? kTRUE : kFALSE;
   TString fn;

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