ROOT logo
// @(#)root/eve:$Id: TEveGedEditor.cxx 31428 2009-11-25 17:03:52Z matevz $
// Authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007

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

#include "TEveGedEditor.h"
#include "TEveElement.h"
#include "TEveManager.h"

#include "TGButton.h"
#include "TGLabel.h"
#include "TGToolTip.h"
#include "TGDNDManager.h"
#include "TGMsgBox.h"

#include "TClass.h"
#include "TContextMenu.h"

//==============================================================================
// TEveGedEditor
//==============================================================================

//______________________________________________________________________________
//
// Specialization of TGedEditor for proper update propagation to
// TEveManager.

ClassImp(TEveGedEditor);

Int_t   TEveGedEditor::fgMaxExtraEditors = 10;
TList  *TEveGedEditor::fgExtraEditors    = new TList;

TContextMenu *TEveGedEditor::fgContextMenu = 0;

//______________________________________________________________________________
TEveGedEditor::TEveGedEditor(TCanvas* canvas, UInt_t width, UInt_t height) :
   TGedEditor(canvas, width, height),
   fElement  (0),
   fObject   (0)
{
   // Constructor.

   // Remove old name-frame -- it is created in TGedEditor constructor
   // so virtuals are not active yet.
   fTabContainer->RemoveAll();
   TGedFrame* nf = CreateNameFrame(fTabContainer, "Style");
   nf->SetGedEditor(this);
   nf->SetModelClass(0);
   fTabContainer->AddFrame(nf, nf->GetLayoutHints());

   // Fix priority for TAttMarkerEditor.
   TClass* amClass = TClass::GetClass("TAttMarker");
   TClass* edClass = TClass::GetClass("TAttMarkerEditor");
   TGWindow *exroot = (TGWindow*) fClient->GetRoot();
   fClient->SetRoot(fTabContainer);
   SetFrameCreator(this);
   TGedFrame *frame = reinterpret_cast<TGedFrame*>(edClass->New());
   frame->SetModelClass(amClass);
   {
      Int_t off = edClass->GetDataMemberOffset("fPriority");
      if (off == 0)
         Warning("TEveGedEditor::TEveGedEditor", "Can't fix priority for TAttMarkerEditor.\n");
      else
         * (Int_t*) (((char*)frame) + off) = 1;
   }
   SetFrameCreator(0);
   fClient->SetRoot(exroot);
   fFrameMap.Add(amClass, frame);
}

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

   if (gDebug > 0)
      Info("TEveGedEditor::~TEveGedEditor", "%p going down.", this);
}

//______________________________________________________________________________
void TEveGedEditor::CloseWindow()
{
   // Called from window-manger close button.
   // Unregister from global list and delete the window.

   if (gDebug > 0)
      Info("TEveGedEditor::CloseWindow", "%p closing.", this);

   fgExtraEditors->Remove(this);

   DeleteWindow();
}

//______________________________________________________________________________
void TEveGedEditor::DeleteWindow()
{
   // This is exact clone of TGFrame::DeleteWindow().
   // Needs to be overriden together with CloseWindow() otherwise CINT
   // goes kaboom in timer execution.

   if (gDebug > 0)
      Info("TEveGedEditor::DeleteWindow", "%p shooting timer.", this);

   DisplayElement(0);

   if (gDNDManager) {
      if (gDNDManager->GetMainFrame() == this)
         gDNDManager->SetMainFrame(0);
   }
   if (!TestBit(kDeleteWindowCalled))
      TTimer::SingleShot(150, IsA()->GetName(), this, "ReallyDelete()");
   SetBit(kDeleteWindowCalled);
}

//______________________________________________________________________________
TGedFrame* TEveGedEditor::CreateNameFrame(const TGWindow* parent, const char* /*tab_name*/)
{
   // Create name-frame for a tab.

   return new TEveGedNameFrame(parent);
}

//______________________________________________________________________________
TEveElement* TEveGedEditor::GetEveElement() const
{
   // Return eve-element if it is the model object.

   return (fModel == fObject) ? fElement : 0;
}

//______________________________________________________________________________
void TEveGedEditor::DisplayElement(TEveElement* re)
{
   // Show a TEveElement in editor.

   static const TEveException eh("TEveGedEditor::DisplayElement ");

   fElement = re;
   fObject  = fElement ? fElement->GetEditorObject(eh) : 0;
   TGedEditor::SetModel(fPad, fObject, kButton1Down);
}

//______________________________________________________________________________
void TEveGedEditor::DisplayObject(TObject* obj)
{
   // Show a TObject in editor.

   fElement = dynamic_cast<TEveElement*>(obj);
   fObject  = obj;
   TGedEditor::SetModel(fPad, obj, kButton1Down);
}

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

//______________________________________________________________________________
void TEveGedEditor::SetModel(TVirtualPad* pad, TObject* obj, Int_t event)
{
   // Set model object.

   fElement = dynamic_cast<TEveElement*>(obj);
   fObject  = obj;
   TGedEditor::SetModel(pad, obj, event);
}

//______________________________________________________________________________
void TEveGedEditor::Update(TGedFrame* /*gframe*/)
{
   // Virtual method from TGedEditor, called on every change.
   // Propagates changes to TEveElement and TEveManager.

   if (fElement)
   {
      fElement->ElementChanged();
      fElement->PropagateVizParamsToProjecteds();
   }

   gEve->Redraw3D();
}

//------------------------------------------------------------------------------
// Static functions for management of extra editors.
//------------------------------------------------------------------------------

//______________________________________________________________________________
void TEveGedEditor::SpawnNewEditor(TObject* obj)
{
   // Static function to create a new extra editor.

   if (fgExtraEditors->GetSize() >= fgMaxExtraEditors)
   {
      new TGMsgBox(gClient->GetDefaultRoot(), gEve->GetMainWindow(),
                   "Clutter warning", 
                   "Maximum number of extra editors reached.",
                   kMBIconStop, kMBOk);
   }

   if (obj)
   {
      TEveGedEditor *ed = new TEveGedEditor();
      ed->DisplayObject(obj);
      ed->SetWindowName(Form("GED %s", obj->GetName()));

      fgExtraEditors->Add(ed);
   }
}

//______________________________________________________________________________
void TEveGedEditor::ElementChanged(TEveElement* el)
{
   // Element was changed. Update editors showing it.

   TObject *eobj = el->GetEditorObject("TEveGedEditor::ElementChanged ");
   TObjLink *lnk = fgExtraEditors->FirstLink();
   while (lnk)
   {
      TEveGedEditor *ed = (TEveGedEditor*) lnk->GetObject();
      if (ed->GetModel() == eobj)
         ed->DisplayElement(el);
      lnk = lnk->Next();
   }
}

//______________________________________________________________________________
void TEveGedEditor::ElementDeleted(TEveElement* el)
{
   // Element is being deleted. Close editors showing it.

   TObject *eobj = el->GetEditorObject("TEveGedEditor::ElementChanged ");
   TObjLink *lnk = fgExtraEditors->FirstLink();
   while (lnk)
   {
      TEveGedEditor *ed = (TEveGedEditor*) lnk->GetObject();
      if (ed->GetModel() == eobj)
      {
         TObjLink *next = lnk->Next();
         ed->DeleteWindow();
         fgExtraEditors->Remove(lnk);
         lnk = next;
      }
      else
      {
         lnk = lnk->Next();
      }
   }
}

//______________________________________________________________________________
void TEveGedEditor::DestroyEditors()
{
   // Destroys all editors. Called from EVE termination.

   while ( ! fgExtraEditors->IsEmpty())
   {
      TEveGedEditor *ed = (TEveGedEditor*) fgExtraEditors->First();
      ed->DeleteWindow();
      fgExtraEditors->RemoveFirst();
   }
}

//______________________________________________________________________________
TContextMenu* TEveGedEditor::GetContextMenu()
{
   // Return context menu object shared among eve-ged-editors.

   if (fgContextMenu == 0)
      fgContextMenu = new TContextMenu("", "");
   return fgContextMenu;
}


//==============================================================================
// TEveGedNameFrame
//==============================================================================

//______________________________________________________________________________
//
// Specialization of TGedNameFrame used in EVE.
// It provides the ability to undock given editor for easier use.
// Support for that is also provided from the TEveManager.

ClassImp(TEveGedNameFrame);

//______________________________________________________________________________
TEveGedNameFrame::TEveGedNameFrame(const TGWindow *p, Int_t width, Int_t height,
                                   UInt_t options) :
   TGedFrame(p, width, height, options),
   fNCButton(0)
{
   // Constructor.

   fNCButton = new TEveGedNameTextButton(this);
   fNCButton->SetTextColor(0x0020a0);
   AddFrame(fNCButton, new TGLayoutHints(kLHintsNormal | kLHintsExpandX));
   fNCButton->Connect("Clicked()", "TEveGedNameFrame", this, "SpawnEditorClone()");
}

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

//______________________________________________________________________________
void TEveGedNameFrame::SetModel(TObject* obj)
{
   // Set model object.

   if (obj)
   {
      fNCButton->SetText(Form("%s [%s]", obj->GetName(), obj->ClassName()));
      fNCButton->SetToolTipText(obj->GetTitle());
      fNCButton->SetEnabled(kTRUE);
   }
   else
   {
      fNCButton->SetText("No object selected.");
      fNCButton->SetToolTipText(0);
      fNCButton->SetEnabled(kFALSE);
   }
}

//______________________________________________________________________________
void TEveGedNameFrame::SpawnEditorClone()
{
   // Create a new floating editor with current object.

   TEveGedEditor::SpawnNewEditor(fGedEditor->GetModel());
}


//==============================================================================
// TEveGedNameTextButton
//==============================================================================

//______________________________________________________________________________
//
// Specialization of TGTextButton for EVE name frame.
// It opens a context-menu on right-click.

ClassImp(TEveGedNameTextButton);

//______________________________________________________________________________
TEveGedNameTextButton::TEveGedNameTextButton(TEveGedNameFrame* p) :
   TGTextButton(p, ""),
   fFrame(p)
{
   // Constructor.

   gVirtualX->GrabButton(fId, kAnyButton, kAnyModifier,
                         kButtonPressMask | kButtonReleaseMask,
                         kNone, kNone);
}

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

//______________________________________________________________________________
Bool_t TEveGedNameTextButton::HandleButton(Event_t* event)
{
   // Handle button.

   if (fTip) fTip->Hide();
   if (fState == kButtonDisabled) return kTRUE;

   if (event->fCode == kButton3 && event->fType == kButtonPress)
   {
      TEveGedEditor *eged = (TEveGedEditor*) fFrame->GetGedEditor();
      TEveElement   *el   = eged->GetEveElement();
      if (el)
         TEveGedEditor::GetContextMenu()->Popup(event->fXRoot, event->fYRoot,
                                                el->GetObject());
      return 1;
   }
   else if (event->fCode == kButton1)
   {
      return TGTextButton::HandleButton(event);
   }
   else
   {
      return 0;
   }
}
 TEveGedEditor.cxx:1
 TEveGedEditor.cxx:2
 TEveGedEditor.cxx:3
 TEveGedEditor.cxx:4
 TEveGedEditor.cxx:5
 TEveGedEditor.cxx:6
 TEveGedEditor.cxx:7
 TEveGedEditor.cxx:8
 TEveGedEditor.cxx:9
 TEveGedEditor.cxx:10
 TEveGedEditor.cxx:11
 TEveGedEditor.cxx:12
 TEveGedEditor.cxx:13
 TEveGedEditor.cxx:14
 TEveGedEditor.cxx:15
 TEveGedEditor.cxx:16
 TEveGedEditor.cxx:17
 TEveGedEditor.cxx:18
 TEveGedEditor.cxx:19
 TEveGedEditor.cxx:20
 TEveGedEditor.cxx:21
 TEveGedEditor.cxx:22
 TEveGedEditor.cxx:23
 TEveGedEditor.cxx:24
 TEveGedEditor.cxx:25
 TEveGedEditor.cxx:26
 TEveGedEditor.cxx:27
 TEveGedEditor.cxx:28
 TEveGedEditor.cxx:29
 TEveGedEditor.cxx:30
 TEveGedEditor.cxx:31
 TEveGedEditor.cxx:32
 TEveGedEditor.cxx:33
 TEveGedEditor.cxx:34
 TEveGedEditor.cxx:35
 TEveGedEditor.cxx:36
 TEveGedEditor.cxx:37
 TEveGedEditor.cxx:38
 TEveGedEditor.cxx:39
 TEveGedEditor.cxx:40
 TEveGedEditor.cxx:41
 TEveGedEditor.cxx:42
 TEveGedEditor.cxx:43
 TEveGedEditor.cxx:44
 TEveGedEditor.cxx:45
 TEveGedEditor.cxx:46
 TEveGedEditor.cxx:47
 TEveGedEditor.cxx:48
 TEveGedEditor.cxx:49
 TEveGedEditor.cxx:50
 TEveGedEditor.cxx:51
 TEveGedEditor.cxx:52
 TEveGedEditor.cxx:53
 TEveGedEditor.cxx:54
 TEveGedEditor.cxx:55
 TEveGedEditor.cxx:56
 TEveGedEditor.cxx:57
 TEveGedEditor.cxx:58
 TEveGedEditor.cxx:59
 TEveGedEditor.cxx:60
 TEveGedEditor.cxx:61
 TEveGedEditor.cxx:62
 TEveGedEditor.cxx:63
 TEveGedEditor.cxx:64
 TEveGedEditor.cxx:65
 TEveGedEditor.cxx:66
 TEveGedEditor.cxx:67
 TEveGedEditor.cxx:68
 TEveGedEditor.cxx:69
 TEveGedEditor.cxx:70
 TEveGedEditor.cxx:71
 TEveGedEditor.cxx:72
 TEveGedEditor.cxx:73
 TEveGedEditor.cxx:74
 TEveGedEditor.cxx:75
 TEveGedEditor.cxx:76
 TEveGedEditor.cxx:77
 TEveGedEditor.cxx:78
 TEveGedEditor.cxx:79
 TEveGedEditor.cxx:80
 TEveGedEditor.cxx:81
 TEveGedEditor.cxx:82
 TEveGedEditor.cxx:83
 TEveGedEditor.cxx:84
 TEveGedEditor.cxx:85
 TEveGedEditor.cxx:86
 TEveGedEditor.cxx:87
 TEveGedEditor.cxx:88
 TEveGedEditor.cxx:89
 TEveGedEditor.cxx:90
 TEveGedEditor.cxx:91
 TEveGedEditor.cxx:92
 TEveGedEditor.cxx:93
 TEveGedEditor.cxx:94
 TEveGedEditor.cxx:95
 TEveGedEditor.cxx:96
 TEveGedEditor.cxx:97
 TEveGedEditor.cxx:98
 TEveGedEditor.cxx:99
 TEveGedEditor.cxx:100
 TEveGedEditor.cxx:101
 TEveGedEditor.cxx:102
 TEveGedEditor.cxx:103
 TEveGedEditor.cxx:104
 TEveGedEditor.cxx:105
 TEveGedEditor.cxx:106
 TEveGedEditor.cxx:107
 TEveGedEditor.cxx:108
 TEveGedEditor.cxx:109
 TEveGedEditor.cxx:110
 TEveGedEditor.cxx:111
 TEveGedEditor.cxx:112
 TEveGedEditor.cxx:113
 TEveGedEditor.cxx:114
 TEveGedEditor.cxx:115
 TEveGedEditor.cxx:116
 TEveGedEditor.cxx:117
 TEveGedEditor.cxx:118
 TEveGedEditor.cxx:119
 TEveGedEditor.cxx:120
 TEveGedEditor.cxx:121
 TEveGedEditor.cxx:122
 TEveGedEditor.cxx:123
 TEveGedEditor.cxx:124
 TEveGedEditor.cxx:125
 TEveGedEditor.cxx:126
 TEveGedEditor.cxx:127
 TEveGedEditor.cxx:128
 TEveGedEditor.cxx:129
 TEveGedEditor.cxx:130
 TEveGedEditor.cxx:131
 TEveGedEditor.cxx:132
 TEveGedEditor.cxx:133
 TEveGedEditor.cxx:134
 TEveGedEditor.cxx:135
 TEveGedEditor.cxx:136
 TEveGedEditor.cxx:137
 TEveGedEditor.cxx:138
 TEveGedEditor.cxx:139
 TEveGedEditor.cxx:140
 TEveGedEditor.cxx:141
 TEveGedEditor.cxx:142
 TEveGedEditor.cxx:143
 TEveGedEditor.cxx:144
 TEveGedEditor.cxx:145
 TEveGedEditor.cxx:146
 TEveGedEditor.cxx:147
 TEveGedEditor.cxx:148
 TEveGedEditor.cxx:149
 TEveGedEditor.cxx:150
 TEveGedEditor.cxx:151
 TEveGedEditor.cxx:152
 TEveGedEditor.cxx:153
 TEveGedEditor.cxx:154
 TEveGedEditor.cxx:155
 TEveGedEditor.cxx:156
 TEveGedEditor.cxx:157
 TEveGedEditor.cxx:158
 TEveGedEditor.cxx:159
 TEveGedEditor.cxx:160
 TEveGedEditor.cxx:161
 TEveGedEditor.cxx:162
 TEveGedEditor.cxx:163
 TEveGedEditor.cxx:164
 TEveGedEditor.cxx:165
 TEveGedEditor.cxx:166
 TEveGedEditor.cxx:167
 TEveGedEditor.cxx:168
 TEveGedEditor.cxx:169
 TEveGedEditor.cxx:170
 TEveGedEditor.cxx:171
 TEveGedEditor.cxx:172
 TEveGedEditor.cxx:173
 TEveGedEditor.cxx:174
 TEveGedEditor.cxx:175
 TEveGedEditor.cxx:176
 TEveGedEditor.cxx:177
 TEveGedEditor.cxx:178
 TEveGedEditor.cxx:179
 TEveGedEditor.cxx:180
 TEveGedEditor.cxx:181
 TEveGedEditor.cxx:182
 TEveGedEditor.cxx:183
 TEveGedEditor.cxx:184
 TEveGedEditor.cxx:185
 TEveGedEditor.cxx:186
 TEveGedEditor.cxx:187
 TEveGedEditor.cxx:188
 TEveGedEditor.cxx:189
 TEveGedEditor.cxx:190
 TEveGedEditor.cxx:191
 TEveGedEditor.cxx:192
 TEveGedEditor.cxx:193
 TEveGedEditor.cxx:194
 TEveGedEditor.cxx:195
 TEveGedEditor.cxx:196
 TEveGedEditor.cxx:197
 TEveGedEditor.cxx:198
 TEveGedEditor.cxx:199
 TEveGedEditor.cxx:200
 TEveGedEditor.cxx:201
 TEveGedEditor.cxx:202
 TEveGedEditor.cxx:203
 TEveGedEditor.cxx:204
 TEveGedEditor.cxx:205
 TEveGedEditor.cxx:206
 TEveGedEditor.cxx:207
 TEveGedEditor.cxx:208
 TEveGedEditor.cxx:209
 TEveGedEditor.cxx:210
 TEveGedEditor.cxx:211
 TEveGedEditor.cxx:212
 TEveGedEditor.cxx:213
 TEveGedEditor.cxx:214
 TEveGedEditor.cxx:215
 TEveGedEditor.cxx:216
 TEveGedEditor.cxx:217
 TEveGedEditor.cxx:218
 TEveGedEditor.cxx:219
 TEveGedEditor.cxx:220
 TEveGedEditor.cxx:221
 TEveGedEditor.cxx:222
 TEveGedEditor.cxx:223
 TEveGedEditor.cxx:224
 TEveGedEditor.cxx:225
 TEveGedEditor.cxx:226
 TEveGedEditor.cxx:227
 TEveGedEditor.cxx:228
 TEveGedEditor.cxx:229
 TEveGedEditor.cxx:230
 TEveGedEditor.cxx:231
 TEveGedEditor.cxx:232
 TEveGedEditor.cxx:233
 TEveGedEditor.cxx:234
 TEveGedEditor.cxx:235
 TEveGedEditor.cxx:236
 TEveGedEditor.cxx:237
 TEveGedEditor.cxx:238
 TEveGedEditor.cxx:239
 TEveGedEditor.cxx:240
 TEveGedEditor.cxx:241
 TEveGedEditor.cxx:242
 TEveGedEditor.cxx:243
 TEveGedEditor.cxx:244
 TEveGedEditor.cxx:245
 TEveGedEditor.cxx:246
 TEveGedEditor.cxx:247
 TEveGedEditor.cxx:248
 TEveGedEditor.cxx:249
 TEveGedEditor.cxx:250
 TEveGedEditor.cxx:251
 TEveGedEditor.cxx:252
 TEveGedEditor.cxx:253
 TEveGedEditor.cxx:254
 TEveGedEditor.cxx:255
 TEveGedEditor.cxx:256
 TEveGedEditor.cxx:257
 TEveGedEditor.cxx:258
 TEveGedEditor.cxx:259
 TEveGedEditor.cxx:260
 TEveGedEditor.cxx:261
 TEveGedEditor.cxx:262
 TEveGedEditor.cxx:263
 TEveGedEditor.cxx:264
 TEveGedEditor.cxx:265
 TEveGedEditor.cxx:266
 TEveGedEditor.cxx:267
 TEveGedEditor.cxx:268
 TEveGedEditor.cxx:269
 TEveGedEditor.cxx:270
 TEveGedEditor.cxx:271
 TEveGedEditor.cxx:272
 TEveGedEditor.cxx:273
 TEveGedEditor.cxx:274
 TEveGedEditor.cxx:275
 TEveGedEditor.cxx:276
 TEveGedEditor.cxx:277
 TEveGedEditor.cxx:278
 TEveGedEditor.cxx:279
 TEveGedEditor.cxx:280
 TEveGedEditor.cxx:281
 TEveGedEditor.cxx:282
 TEveGedEditor.cxx:283
 TEveGedEditor.cxx:284
 TEveGedEditor.cxx:285
 TEveGedEditor.cxx:286
 TEveGedEditor.cxx:287
 TEveGedEditor.cxx:288
 TEveGedEditor.cxx:289
 TEveGedEditor.cxx:290
 TEveGedEditor.cxx:291
 TEveGedEditor.cxx:292
 TEveGedEditor.cxx:293
 TEveGedEditor.cxx:294
 TEveGedEditor.cxx:295
 TEveGedEditor.cxx:296
 TEveGedEditor.cxx:297
 TEveGedEditor.cxx:298
 TEveGedEditor.cxx:299
 TEveGedEditor.cxx:300
 TEveGedEditor.cxx:301
 TEveGedEditor.cxx:302
 TEveGedEditor.cxx:303
 TEveGedEditor.cxx:304
 TEveGedEditor.cxx:305
 TEveGedEditor.cxx:306
 TEveGedEditor.cxx:307
 TEveGedEditor.cxx:308
 TEveGedEditor.cxx:309
 TEveGedEditor.cxx:310
 TEveGedEditor.cxx:311
 TEveGedEditor.cxx:312
 TEveGedEditor.cxx:313
 TEveGedEditor.cxx:314
 TEveGedEditor.cxx:315
 TEveGedEditor.cxx:316
 TEveGedEditor.cxx:317
 TEveGedEditor.cxx:318
 TEveGedEditor.cxx:319
 TEveGedEditor.cxx:320
 TEveGedEditor.cxx:321
 TEveGedEditor.cxx:322
 TEveGedEditor.cxx:323
 TEveGedEditor.cxx:324
 TEveGedEditor.cxx:325
 TEveGedEditor.cxx:326
 TEveGedEditor.cxx:327
 TEveGedEditor.cxx:328
 TEveGedEditor.cxx:329
 TEveGedEditor.cxx:330
 TEveGedEditor.cxx:331
 TEveGedEditor.cxx:332
 TEveGedEditor.cxx:333
 TEveGedEditor.cxx:334
 TEveGedEditor.cxx:335
 TEveGedEditor.cxx:336
 TEveGedEditor.cxx:337
 TEveGedEditor.cxx:338
 TEveGedEditor.cxx:339
 TEveGedEditor.cxx:340
 TEveGedEditor.cxx:341
 TEveGedEditor.cxx:342
 TEveGedEditor.cxx:343
 TEveGedEditor.cxx:344
 TEveGedEditor.cxx:345
 TEveGedEditor.cxx:346
 TEveGedEditor.cxx:347
 TEveGedEditor.cxx:348
 TEveGedEditor.cxx:349
 TEveGedEditor.cxx:350
 TEveGedEditor.cxx:351
 TEveGedEditor.cxx:352
 TEveGedEditor.cxx:353
 TEveGedEditor.cxx:354
 TEveGedEditor.cxx:355
 TEveGedEditor.cxx:356
 TEveGedEditor.cxx:357
 TEveGedEditor.cxx:358
 TEveGedEditor.cxx:359
 TEveGedEditor.cxx:360
 TEveGedEditor.cxx:361
 TEveGedEditor.cxx:362
 TEveGedEditor.cxx:363
 TEveGedEditor.cxx:364
 TEveGedEditor.cxx:365
 TEveGedEditor.cxx:366
 TEveGedEditor.cxx:367
 TEveGedEditor.cxx:368
 TEveGedEditor.cxx:369
 TEveGedEditor.cxx:370
 TEveGedEditor.cxx:371
 TEveGedEditor.cxx:372
 TEveGedEditor.cxx:373
 TEveGedEditor.cxx:374
 TEveGedEditor.cxx:375
 TEveGedEditor.cxx:376
 TEveGedEditor.cxx:377
 TEveGedEditor.cxx:378
 TEveGedEditor.cxx:379
 TEveGedEditor.cxx:380
 TEveGedEditor.cxx:381
 TEveGedEditor.cxx:382
 TEveGedEditor.cxx:383
 TEveGedEditor.cxx:384
 TEveGedEditor.cxx:385
 TEveGedEditor.cxx:386
 TEveGedEditor.cxx:387
 TEveGedEditor.cxx:388
 TEveGedEditor.cxx:389
 TEveGedEditor.cxx:390
 TEveGedEditor.cxx:391