// @(#):$Id: b94274447e46ae2cf700c562e57c3c38c6612b74 $
// Author: M.Gheata 

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

//______________________________________________________________________________
//                                                                      
//  TGeoNodeEditor - Editor class for TGeoNode objects
//                                                                      
//______________________________________________________________________________

#include "TGeoNodeEditor.h"
#include "TGedEditor.h"
#include "TGeoManager.h"
#include "TGeoMatrix.h"
#include "TGeoNode.h"
#include "TPad.h"
#include "TGTab.h"
#include "TGComboBox.h"
#include "TGButton.h"
#include "TGTextEntry.h"
#include "TGNumberEntry.h"
#include "TGLabel.h"
#include "TGeoTabManager.h"

ClassImp(TGeoNodeEditor)

enum ETGeoNodeWid {
   kNODE_NAME, kNODE_ID, kNODE_VOLSEL, kNODE_MVOLSEL,
   kNODE_MATRIX, kNODE_EDIT_VOL, kNODE_EDIT_MATRIX
};

//______________________________________________________________________________
TGeoNodeEditor::TGeoNodeEditor(const TGWindow *p, Int_t width,
                               Int_t height, UInt_t options, Pixel_t back)
   : TGeoGedFrame(p, width, height, options | kVerticalFrame, back)
{
   // Constructor for node editor
   
   fNode   = 0;
   fIsEditable = kTRUE;
   Pixel_t color;
      
   // TextEntry for medium name
   TGTextEntry *nef;
   MakeTitle("Name");
   TGCompositeFrame *f1 = new TGCompositeFrame(this, 140, 30, kHorizontalFrame | kRaisedFrame);
   fNodeName = new TGTextEntry(f1, new TGTextBuffer(50), kNODE_NAME);
   fNodeName->Resize(100, fNodeName->GetDefaultHeight());
   fNodeName->SetToolTipText("Enter the node name");
   fNodeName->Associate(this);
   f1->AddFrame(fNodeName, new TGLayoutHints(kLHintsLeft, 3, 1, 2, 5));
   f1->AddFrame(new TGLabel(f1, "ID"), new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));   
   fNodeNumber = new TGNumberEntry(f1, 0., 1, kNODE_ID);
   nef = (TGTextEntry*)fNodeNumber->GetNumberEntry();
   nef->SetToolTipText("Enter the node copy number");
   fNodeNumber->Associate(this);
   f1->AddFrame(fNodeNumber, new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 4, 4));
   AddFrame(f1, new TGLayoutHints(kLHintsLeft, 3, 3, 2, 5));


// Mother volume selection
   MakeTitle("Mother volume");
   f1 = new TGCompositeFrame(this, 155, 30, kHorizontalFrame | kFixedWidth);
   fSelectedMother = 0;
   fLSelMother = new TGLabel(f1, "Select mother");
   gClient->GetColorByName("#0000ff", color);
   fLSelMother->SetTextColor(color);
   fLSelMother->ChangeOptions(kSunkenFrame | kDoubleBorder);
   f1->AddFrame(fLSelMother, new TGLayoutHints(kLHintsLeft | kLHintsExpandX | kLHintsExpandY, 1, 1, 2, 2));
   fBSelMother = new TGPictureButton(f1, fClient->GetPicture("rootdb_t.xpm"), kNODE_MVOLSEL);
   fBSelMother->SetToolTipText("Select one of the existing volumes");
   fBSelMother->Associate(this);
   f1->AddFrame(fBSelMother, new TGLayoutHints(kLHintsLeft, 1, 1, 2, 2));
   fEditMother = new TGTextButton(f1, "Edit");
   f1->AddFrame(fEditMother, new TGLayoutHints(kLHintsRight, 1, 1, 1, 1));
   fEditMother->Associate(this);
   AddFrame(f1, new TGLayoutHints(kLHintsLeft, 2, 2, 0, 2));
   
// Volume selection
   MakeTitle("Volume");
   f1 = new TGCompositeFrame(this, 155, 30, kHorizontalFrame | kFixedWidth);
   fSelectedVolume = 0;
   fLSelVolume = new TGLabel(f1, "Select volume");
   gClient->GetColorByName("#0000ff", color);
   fLSelVolume->SetTextColor(color);
   fLSelVolume->ChangeOptions(kSunkenFrame | kDoubleBorder);
   f1->AddFrame(fLSelVolume, new TGLayoutHints(kLHintsLeft | kLHintsExpandX | kLHintsExpandY, 1, 1, 2, 2));
   fBSelVolume = new TGPictureButton(f1, fClient->GetPicture("rootdb_t.xpm"), kNODE_VOLSEL);
   fBSelVolume->SetToolTipText("Select one of the existing volumes");
   fBSelVolume->Associate(this);
   f1->AddFrame(fBSelVolume, new TGLayoutHints(kLHintsLeft, 1, 1, 2, 2));
   fEditVolume = new TGTextButton(f1, "Edit");
   f1->AddFrame(fEditVolume, new TGLayoutHints(kLHintsRight, 1, 1, 1, 1));
   fEditVolume->Associate(this);
   AddFrame(f1, new TGLayoutHints(kLHintsLeft, 2, 2, 0, 2));

// Matrix selection
   MakeTitle("Matrix");
   f1 = new TGCompositeFrame(this, 155, 30, kHorizontalFrame | kFixedWidth);
   fSelectedMatrix = 0;
   fLSelMatrix = new TGLabel(f1, "Select matrix");
   gClient->GetColorByName("#0000ff", color);
   fLSelMatrix->SetTextColor(color);
   fLSelMatrix->ChangeOptions(kSunkenFrame | kDoubleBorder);
   f1->AddFrame(fLSelMatrix, new TGLayoutHints(kLHintsLeft | kLHintsExpandX | kLHintsExpandY, 1, 1, 2, 2));
   fBSelMatrix = new TGPictureButton(f1, fClient->GetPicture("rootdb_t.xpm"), kNODE_MATRIX);
   fBSelMatrix->SetToolTipText("Select one of the existing matrices");
   fBSelMatrix->Associate(this);
   f1->AddFrame(fBSelMatrix, new TGLayoutHints(kLHintsLeft, 1, 1, 2, 2));
   fEditMatrix = new TGTextButton(f1, "Edit");
   f1->AddFrame(fEditMatrix, new TGLayoutHints(kLHintsRight, 1, 1, 1, 1));
   fEditMatrix->Associate(this);
   AddFrame(f1, new TGLayoutHints(kLHintsLeft, 2, 2, 0, 2));
  
   // Buttons
   f1 = new TGCompositeFrame(this, 155, 10, kHorizontalFrame | kFixedWidth);
   fApply = new TGTextButton(f1, "Apply");
   f1->AddFrame(fApply, new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));
   fApply->Associate(this);
   fUndo = new TGTextButton(f1, "Undo");
   f1->AddFrame(fUndo, new TGLayoutHints(kLHintsRight , 2, 2, 4, 4));
   fUndo->Associate(this);
   AddFrame(f1,  new TGLayoutHints(kLHintsLeft, 6, 6, 4, 4));  
   fUndo->SetSize(fApply->GetSize());
}

//______________________________________________________________________________
TGeoNodeEditor::~TGeoNodeEditor()
{
// Destructor
   TGFrameElement *el;
   TIter next(GetList());
   while ((el = (TGFrameElement *)next())) {
      if (el->fFrame->IsComposite()) 
         TGeoTabManager::Cleanup((TGCompositeFrame*)el->fFrame);
   }
   Cleanup();   
}

//______________________________________________________________________________
void TGeoNodeEditor::ConnectSignals2Slots()
{
   // Connect signals to slots.
   fBSelMother->Connect("Clicked()", "TGeoNodeEditor", this, "DoSelectMother()");
   fBSelVolume->Connect("Clicked()", "TGeoNodeEditor", this, "DoSelectVolume()");
   fBSelMatrix->Connect("Clicked()", "TGeoNodeEditor", this, "DoSelectMatrix()");
   fApply->Connect("Clicked()", "TGeoNodeEditor", this, "DoApply()");
   fUndo->Connect("Clicked()", "TGeoNodeEditor", this, "DoUndo()");
   fEditMother->Connect("Clicked()", "TGeoNodeEditor", this, "DoEditMother()");
   fEditVolume->Connect("Clicked()", "TGeoNodeEditor", this, "DoEditVolume()");
   fEditMatrix->Connect("Clicked()", "TGeoNodeEditor", this, "DoEditMatrix()");
   fNodeName->Connect("TextChanged(const char *)", "TGeoNodeEditor", this, "DoNodeName()");
   fInit = kFALSE;
}


//______________________________________________________________________________
void TGeoNodeEditor::SetModel(TObject* obj)
{
   // Connect to a editable object.
   if (obj == 0 || !obj->InheritsFrom(TGeoNode::Class())) {
      SetActive(kFALSE);
      return;                 
   } 
   fNode = (TGeoNode*)obj;
   const char *sname = fNode->GetName();
   fNodeName->SetText(sname);

   fNodeNumber->SetNumber(fNode->GetNumber());

   fSelectedMother = fNode->GetMotherVolume();
   if (fSelectedMother) fLSelMother->SetText(fSelectedMother->GetName());
   fSelectedVolume = fNode->GetVolume();
   if (fSelectedVolume) fLSelVolume->SetText(fSelectedVolume->GetName());
   fSelectedMatrix = fNode->GetMatrix();
   if (fSelectedMatrix) fLSelMatrix->SetText(fSelectedMatrix->GetName());

   fApply->SetEnabled(kFALSE);
   fUndo->SetEnabled(kFALSE);
   
   if (fInit) ConnectSignals2Slots();
   SetActive();
}

//______________________________________________________________________________
void TGeoNodeEditor::DoSelectMother()
{
// Select the mother volume.
   TGeoVolume *vol = fSelectedMother;
   new TGeoVolumeDialog(fBSelMother, gClient->GetRoot(), 200,300);  
   fSelectedMother = (TGeoVolume*)TGeoVolumeDialog::GetSelected();
   if (fSelectedMother) fLSelMother->SetText(fSelectedMother->GetName());
   else fSelectedMother = vol;
}

//______________________________________________________________________________
void TGeoNodeEditor::DoSelectVolume()
{
// Select the volume.
   TGeoVolume *vol = fSelectedVolume;
   new TGeoVolumeDialog(fBSelVolume, gClient->GetRoot(), 200,300);  
   fSelectedVolume = (TGeoVolume*)TGeoVolumeDialog::GetSelected();
   if (fSelectedVolume) fLSelVolume->SetText(fSelectedVolume->GetName());
   else fSelectedVolume = vol;
}

//______________________________________________________________________________
void TGeoNodeEditor::DoSelectMatrix()
{
// Select the matrix.
   TGeoMatrix *matrix = fSelectedMatrix;
   new TGeoMatrixDialog(fBSelMatrix, gClient->GetRoot(), 200,300);  
   fSelectedMatrix = (TGeoMatrix*)TGeoMatrixDialog::GetSelected();
   if (fSelectedMatrix) fLSelMatrix->SetText(fSelectedMatrix->GetName());
   else fSelectedMatrix = matrix;
}

//______________________________________________________________________________
void TGeoNodeEditor::DoEditMother()
{
// Edit the mother volume.
   if (!fSelectedMother) {
      fTabMgr->SetVolTabEnabled(kFALSE);
      return;
   }   
   fTabMgr->SetVolTabEnabled();
   fTabMgr->GetVolumeEditor(fSelectedMother);
   fTabMgr->SetTab();
   fSelectedMother->Draw();
}

//______________________________________________________________________________
void TGeoNodeEditor::DoEditVolume()
{
// Edit selected volume.
   if (!fSelectedVolume) {
      fTabMgr->SetVolTabEnabled(kFALSE);
      return;
   }   
   fTabMgr->SetVolTabEnabled();
   fTabMgr->GetVolumeEditor(fSelectedVolume);
   fTabMgr->SetTab();
   fSelectedVolume->Draw();
}

//______________________________________________________________________________
void TGeoNodeEditor::DoEditMatrix()
{
// Edit selected material.
   if (!fSelectedMatrix) return;
   fTabMgr->GetMatrixEditor(fSelectedMatrix);
}

//______________________________________________________________________________
void TGeoNodeEditor::DoNodeName()
{
// Change node name.
   const char *name = fNodeName->GetText();
   if (!name[0] || !strcmp(name, fNode->GetName())) return;
   fNode->SetName(name);
}

//______________________________________________________________________________
void TGeoNodeEditor::DoNodeNumber()
{
// Change node copy number
   
}

//______________________________________________________________________________
void TGeoNodeEditor::DoApply()
{
// Slot for applying modifications.
}

//______________________________________________________________________________
void TGeoNodeEditor::DoUndo()
{
// Slot for undoing last operation.
}
   
 TGeoNodeEditor.cxx:1
 TGeoNodeEditor.cxx:2
 TGeoNodeEditor.cxx:3
 TGeoNodeEditor.cxx:4
 TGeoNodeEditor.cxx:5
 TGeoNodeEditor.cxx:6
 TGeoNodeEditor.cxx:7
 TGeoNodeEditor.cxx:8
 TGeoNodeEditor.cxx:9
 TGeoNodeEditor.cxx:10
 TGeoNodeEditor.cxx:11
 TGeoNodeEditor.cxx:12
 TGeoNodeEditor.cxx:13
 TGeoNodeEditor.cxx:14
 TGeoNodeEditor.cxx:15
 TGeoNodeEditor.cxx:16
 TGeoNodeEditor.cxx:17
 TGeoNodeEditor.cxx:18
 TGeoNodeEditor.cxx:19
 TGeoNodeEditor.cxx:20
 TGeoNodeEditor.cxx:21
 TGeoNodeEditor.cxx:22
 TGeoNodeEditor.cxx:23
 TGeoNodeEditor.cxx:24
 TGeoNodeEditor.cxx:25
 TGeoNodeEditor.cxx:26
 TGeoNodeEditor.cxx:27
 TGeoNodeEditor.cxx:28
 TGeoNodeEditor.cxx:29
 TGeoNodeEditor.cxx:30
 TGeoNodeEditor.cxx:31
 TGeoNodeEditor.cxx:32
 TGeoNodeEditor.cxx:33
 TGeoNodeEditor.cxx:34
 TGeoNodeEditor.cxx:35
 TGeoNodeEditor.cxx:36
 TGeoNodeEditor.cxx:37
 TGeoNodeEditor.cxx:38
 TGeoNodeEditor.cxx:39
 TGeoNodeEditor.cxx:40
 TGeoNodeEditor.cxx:41
 TGeoNodeEditor.cxx:42
 TGeoNodeEditor.cxx:43
 TGeoNodeEditor.cxx:44
 TGeoNodeEditor.cxx:45
 TGeoNodeEditor.cxx:46
 TGeoNodeEditor.cxx:47
 TGeoNodeEditor.cxx:48
 TGeoNodeEditor.cxx:49
 TGeoNodeEditor.cxx:50
 TGeoNodeEditor.cxx:51
 TGeoNodeEditor.cxx:52
 TGeoNodeEditor.cxx:53
 TGeoNodeEditor.cxx:54
 TGeoNodeEditor.cxx:55
 TGeoNodeEditor.cxx:56
 TGeoNodeEditor.cxx:57
 TGeoNodeEditor.cxx:58
 TGeoNodeEditor.cxx:59
 TGeoNodeEditor.cxx:60
 TGeoNodeEditor.cxx:61
 TGeoNodeEditor.cxx:62
 TGeoNodeEditor.cxx:63
 TGeoNodeEditor.cxx:64
 TGeoNodeEditor.cxx:65
 TGeoNodeEditor.cxx:66
 TGeoNodeEditor.cxx:67
 TGeoNodeEditor.cxx:68
 TGeoNodeEditor.cxx:69
 TGeoNodeEditor.cxx:70
 TGeoNodeEditor.cxx:71
 TGeoNodeEditor.cxx:72
 TGeoNodeEditor.cxx:73
 TGeoNodeEditor.cxx:74
 TGeoNodeEditor.cxx:75
 TGeoNodeEditor.cxx:76
 TGeoNodeEditor.cxx:77
 TGeoNodeEditor.cxx:78
 TGeoNodeEditor.cxx:79
 TGeoNodeEditor.cxx:80
 TGeoNodeEditor.cxx:81
 TGeoNodeEditor.cxx:82
 TGeoNodeEditor.cxx:83
 TGeoNodeEditor.cxx:84
 TGeoNodeEditor.cxx:85
 TGeoNodeEditor.cxx:86
 TGeoNodeEditor.cxx:87
 TGeoNodeEditor.cxx:88
 TGeoNodeEditor.cxx:89
 TGeoNodeEditor.cxx:90
 TGeoNodeEditor.cxx:91
 TGeoNodeEditor.cxx:92
 TGeoNodeEditor.cxx:93
 TGeoNodeEditor.cxx:94
 TGeoNodeEditor.cxx:95
 TGeoNodeEditor.cxx:96
 TGeoNodeEditor.cxx:97
 TGeoNodeEditor.cxx:98
 TGeoNodeEditor.cxx:99
 TGeoNodeEditor.cxx:100
 TGeoNodeEditor.cxx:101
 TGeoNodeEditor.cxx:102
 TGeoNodeEditor.cxx:103
 TGeoNodeEditor.cxx:104
 TGeoNodeEditor.cxx:105
 TGeoNodeEditor.cxx:106
 TGeoNodeEditor.cxx:107
 TGeoNodeEditor.cxx:108
 TGeoNodeEditor.cxx:109
 TGeoNodeEditor.cxx:110
 TGeoNodeEditor.cxx:111
 TGeoNodeEditor.cxx:112
 TGeoNodeEditor.cxx:113
 TGeoNodeEditor.cxx:114
 TGeoNodeEditor.cxx:115
 TGeoNodeEditor.cxx:116
 TGeoNodeEditor.cxx:117
 TGeoNodeEditor.cxx:118
 TGeoNodeEditor.cxx:119
 TGeoNodeEditor.cxx:120
 TGeoNodeEditor.cxx:121
 TGeoNodeEditor.cxx:122
 TGeoNodeEditor.cxx:123
 TGeoNodeEditor.cxx:124
 TGeoNodeEditor.cxx:125
 TGeoNodeEditor.cxx:126
 TGeoNodeEditor.cxx:127
 TGeoNodeEditor.cxx:128
 TGeoNodeEditor.cxx:129
 TGeoNodeEditor.cxx:130
 TGeoNodeEditor.cxx:131
 TGeoNodeEditor.cxx:132
 TGeoNodeEditor.cxx:133
 TGeoNodeEditor.cxx:134
 TGeoNodeEditor.cxx:135
 TGeoNodeEditor.cxx:136
 TGeoNodeEditor.cxx:137
 TGeoNodeEditor.cxx:138
 TGeoNodeEditor.cxx:139
 TGeoNodeEditor.cxx:140
 TGeoNodeEditor.cxx:141
 TGeoNodeEditor.cxx:142
 TGeoNodeEditor.cxx:143
 TGeoNodeEditor.cxx:144
 TGeoNodeEditor.cxx:145
 TGeoNodeEditor.cxx:146
 TGeoNodeEditor.cxx:147
 TGeoNodeEditor.cxx:148
 TGeoNodeEditor.cxx:149
 TGeoNodeEditor.cxx:150
 TGeoNodeEditor.cxx:151
 TGeoNodeEditor.cxx:152
 TGeoNodeEditor.cxx:153
 TGeoNodeEditor.cxx:154
 TGeoNodeEditor.cxx:155
 TGeoNodeEditor.cxx:156
 TGeoNodeEditor.cxx:157
 TGeoNodeEditor.cxx:158
 TGeoNodeEditor.cxx:159
 TGeoNodeEditor.cxx:160
 TGeoNodeEditor.cxx:161
 TGeoNodeEditor.cxx:162
 TGeoNodeEditor.cxx:163
 TGeoNodeEditor.cxx:164
 TGeoNodeEditor.cxx:165
 TGeoNodeEditor.cxx:166
 TGeoNodeEditor.cxx:167
 TGeoNodeEditor.cxx:168
 TGeoNodeEditor.cxx:169
 TGeoNodeEditor.cxx:170
 TGeoNodeEditor.cxx:171
 TGeoNodeEditor.cxx:172
 TGeoNodeEditor.cxx:173
 TGeoNodeEditor.cxx:174
 TGeoNodeEditor.cxx:175
 TGeoNodeEditor.cxx:176
 TGeoNodeEditor.cxx:177
 TGeoNodeEditor.cxx:178
 TGeoNodeEditor.cxx:179
 TGeoNodeEditor.cxx:180
 TGeoNodeEditor.cxx:181
 TGeoNodeEditor.cxx:182
 TGeoNodeEditor.cxx:183
 TGeoNodeEditor.cxx:184
 TGeoNodeEditor.cxx:185
 TGeoNodeEditor.cxx:186
 TGeoNodeEditor.cxx:187
 TGeoNodeEditor.cxx:188
 TGeoNodeEditor.cxx:189
 TGeoNodeEditor.cxx:190
 TGeoNodeEditor.cxx:191
 TGeoNodeEditor.cxx:192
 TGeoNodeEditor.cxx:193
 TGeoNodeEditor.cxx:194
 TGeoNodeEditor.cxx:195
 TGeoNodeEditor.cxx:196
 TGeoNodeEditor.cxx:197
 TGeoNodeEditor.cxx:198
 TGeoNodeEditor.cxx:199
 TGeoNodeEditor.cxx:200
 TGeoNodeEditor.cxx:201
 TGeoNodeEditor.cxx:202
 TGeoNodeEditor.cxx:203
 TGeoNodeEditor.cxx:204
 TGeoNodeEditor.cxx:205
 TGeoNodeEditor.cxx:206
 TGeoNodeEditor.cxx:207
 TGeoNodeEditor.cxx:208
 TGeoNodeEditor.cxx:209
 TGeoNodeEditor.cxx:210
 TGeoNodeEditor.cxx:211
 TGeoNodeEditor.cxx:212
 TGeoNodeEditor.cxx:213
 TGeoNodeEditor.cxx:214
 TGeoNodeEditor.cxx:215
 TGeoNodeEditor.cxx:216
 TGeoNodeEditor.cxx:217
 TGeoNodeEditor.cxx:218
 TGeoNodeEditor.cxx:219
 TGeoNodeEditor.cxx:220
 TGeoNodeEditor.cxx:221
 TGeoNodeEditor.cxx:222
 TGeoNodeEditor.cxx:223
 TGeoNodeEditor.cxx:224
 TGeoNodeEditor.cxx:225
 TGeoNodeEditor.cxx:226
 TGeoNodeEditor.cxx:227
 TGeoNodeEditor.cxx:228
 TGeoNodeEditor.cxx:229
 TGeoNodeEditor.cxx:230
 TGeoNodeEditor.cxx:231
 TGeoNodeEditor.cxx:232
 TGeoNodeEditor.cxx:233
 TGeoNodeEditor.cxx:234
 TGeoNodeEditor.cxx:235
 TGeoNodeEditor.cxx:236
 TGeoNodeEditor.cxx:237
 TGeoNodeEditor.cxx:238
 TGeoNodeEditor.cxx:239
 TGeoNodeEditor.cxx:240
 TGeoNodeEditor.cxx:241
 TGeoNodeEditor.cxx:242
 TGeoNodeEditor.cxx:243
 TGeoNodeEditor.cxx:244
 TGeoNodeEditor.cxx:245
 TGeoNodeEditor.cxx:246
 TGeoNodeEditor.cxx:247
 TGeoNodeEditor.cxx:248
 TGeoNodeEditor.cxx:249
 TGeoNodeEditor.cxx:250
 TGeoNodeEditor.cxx:251
 TGeoNodeEditor.cxx:252
 TGeoNodeEditor.cxx:253
 TGeoNodeEditor.cxx:254
 TGeoNodeEditor.cxx:255
 TGeoNodeEditor.cxx:256
 TGeoNodeEditor.cxx:257
 TGeoNodeEditor.cxx:258
 TGeoNodeEditor.cxx:259
 TGeoNodeEditor.cxx:260
 TGeoNodeEditor.cxx:261
 TGeoNodeEditor.cxx:262
 TGeoNodeEditor.cxx:263
 TGeoNodeEditor.cxx:264
 TGeoNodeEditor.cxx:265
 TGeoNodeEditor.cxx:266
 TGeoNodeEditor.cxx:267
 TGeoNodeEditor.cxx:268
 TGeoNodeEditor.cxx:269
 TGeoNodeEditor.cxx:270
 TGeoNodeEditor.cxx:271
 TGeoNodeEditor.cxx:272
 TGeoNodeEditor.cxx:273
 TGeoNodeEditor.cxx:274
 TGeoNodeEditor.cxx:275
 TGeoNodeEditor.cxx:276
 TGeoNodeEditor.cxx:277
 TGeoNodeEditor.cxx:278
 TGeoNodeEditor.cxx:279
 TGeoNodeEditor.cxx:280
 TGeoNodeEditor.cxx:281
 TGeoNodeEditor.cxx:282
 TGeoNodeEditor.cxx:283
 TGeoNodeEditor.cxx:284
 TGeoNodeEditor.cxx:285
 TGeoNodeEditor.cxx:286
 TGeoNodeEditor.cxx:287
 TGeoNodeEditor.cxx:288