ROOT logo
// @(#)root/gui:$Id: TGShutter.cxx 23115 2008-04-10 13:35:37Z rdm $
// Author: Fons Rademakers   18/9/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.             *
 *************************************************************************/

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TGShutter, TGShutterItem                                             //
//                                                                      //
// A shutter widget contains a set of shutter items that can be         //
// open and closed like a shutter.                                      //
// This widget is usefull to group a large number of options in         //
// a number of categories.                                              //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "TGShutter.h"
#include "TGButton.h"
#include "TList.h"
#include "TTimer.h"
#include "Riostream.h"


ClassImp(TGShutterItem)
ClassImp(TGShutter)

//______________________________________________________________________________
TGShutter::TGShutter(const TGWindow *p, UInt_t options) :
   TGCompositeFrame(p, 10, 10, options)
{
   // Create shutter frame.

   fSelectedItem        = 0;
   fClosingItem         = 0;
   fHeightIncrement     = 1;
   fClosingHeight       = 0;
   fClosingHadScrollbar = kFALSE;
   fTimer               = 0;
   fTrash               = new TList;

   // layout manager is not used
   delete fLayoutManager;
   fLayoutManager = 0;
}

//______________________________________________________________________________
TGShutter::~TGShutter()
{
   // Cleanup shutter widget.

   if (fTimer) delete fTimer;

   if (!MustCleanup()) {
      fTrash->Delete();
   }
   delete fTrash;
   fTrash = 0;
}

//______________________________________________________________________________
void TGShutter::AddItem(TGShutterItem *item)
{
   // Add shutter item to shutter frame.

   TGLayoutHints *hints = new TGLayoutHints(kLHintsExpandX | kLHintsExpandY);
   AddFrame(item, hints);
   fTrash->Add(hints);
   if (!fSelectedItem) {
      fSelectedItem = item;
   }
}

//______________________________________________________________________________
void TGShutter::RemoveItem(const char *name)
{
   // Remove item from shutter

   TGShutterItem *item = GetItem(name);

   if (!item) {
      return;
   }

   if (fList->GetEntries() <= 1) {
      return;
   }

   if (item == fSelectedItem) {
      TGFrameElement *fe = (TGFrameElement*)fList->FindObject(item->GetFrameElement());
      if (fe) {
         TGFrameElement *sel = (TGFrameElement*)fList->Before(fe);
         if (!sel) {
            sel = (TGFrameElement*)fList->After(fe);
         }
         if (!sel) {
            return;
         }
         SetSelectedItem((TGShutterItem*)sel->fFrame);
      }
   }
   RemoveFrame(item);

   item->DestroyWindow();
   delete item;
   Layout();
}

//______________________________________________________________________________
void TGShutter::RemovePage()
{
   // Remove selected page

   if (!fSelectedItem) {
      return;
   }
   TGTextButton *btn = (TGTextButton*)fSelectedItem->GetButton();
   RemoveItem(btn->GetString().Data());
}

//______________________________________________________________________________
void TGShutter::RenamePage(const char *name)
{
   // Rename selected page

   if (!fSelectedItem) {
      return;
   }
   TGTextButton *btn = (TGTextButton*)fSelectedItem->GetButton();
   btn->SetText(name);
}

//______________________________________________________________________________
TGShutterItem *TGShutter::AddPage(const char *name)
{
   // Add new page (shutter item)

   static int id = 1000;
   TGShutterItem *item = new TGShutterItem(this, new TGHotString(name), id++);
   AddItem(item);
   MapSubwindows();
   Layout();
   return item;
}

//______________________________________________________________________________
Bool_t TGShutter::ProcessMessage(Long_t /*msg*/, Long_t parm1, Long_t /*parm2*/)
{
   // Handle shutter messages.

   if (!fList) return kFALSE;

   TGFrameElement *el;
   TGShutterItem  *child, *item = 0;

   TIter next(fList);
   while ((el = (TGFrameElement *) next())) {
      child = (TGShutterItem *) el->fFrame;
      if (parm1 == child->WidgetId()) {
         item = child;
         break;
      }
   }

   if (!item) return kFALSE;

   if (!fSelectedItem)
      fSelectedItem = (TGShutterItem*) ((TGFrameElement*)fList->First())->fFrame;
   if (fSelectedItem == item) return kTRUE;

   fHeightIncrement = 1;
   fClosingItem = fSelectedItem;
   fClosingHeight = fClosingItem->GetHeight();
   fClosingHeight -= fClosingItem->fButton->GetDefaultHeight();
   fSelectedItem = item;
   Selected(fSelectedItem);
   fSelectedItem->Selected();

   if (!fTimer) fTimer = new TTimer(this, 6); //10);
   fTimer->Reset();
   fTimer->TurnOn();

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TGShutter::HandleTimer(TTimer *)
{
   // Shutter item animation.

   if (!fClosingItem) return kFALSE;
   fClosingHeight -= fHeightIncrement;
   fHeightIncrement += 5;
   if (fClosingHeight > 0) {
      fTimer->Reset();
   } else {
      fClosingItem   = 0;
      fClosingHeight = 0;
      fTimer->TurnOff();
   }
   Layout();

   return kTRUE;
}

//______________________________________________________________________________
void TGShutter::Layout()
{
   // Layout shutter items.

   TGFrameElement *el;
   TGShutterItem  *child;
   Int_t y, bh, exh;

   if (!fList) return;

   if (!fSelectedItem)
      fSelectedItem = (TGShutterItem*) ((TGFrameElement*)GetList()->First())->fFrame;

   exh = Int_t(fHeight - (fBorderWidth << 1));
   TIter next(fList);
   while ((el = (TGFrameElement *) next())) {
      child = (TGShutterItem *) el->fFrame;
      bh = child->fButton->GetDefaultHeight();
      exh -= bh;
   }

   y = fBorderWidth;
   next.Reset();
   while ((el = (TGFrameElement *) next())) {
      child = (TGShutterItem *) el->fFrame;
      bh = child->fButton->GetDefaultHeight();
      if (child == fSelectedItem) {
         if (fClosingItem)
            child->fCanvas->SetScrolling(TGCanvas::kCanvasNoScroll);
         else
            child->fCanvas->SetScrolling(TGCanvas::kCanvasScrollVertical);
         child->ShowFrame(child->fCanvas);
         child->MoveResize(fBorderWidth, y, fWidth - (fBorderWidth << 1),
                           exh - fClosingHeight + bh);
         y += exh - fClosingHeight + bh;
      } else if (child == fClosingItem) {
         child->fCanvas->SetScrolling(TGCanvas::kCanvasNoScroll);
         child->MoveResize(fBorderWidth, y, fWidth - (fBorderWidth << 1),
                           fClosingHeight + bh);
         y += fClosingHeight + bh;
      } else {
         child->MoveResize(fBorderWidth, y, fWidth - (fBorderWidth << 1), bh);
         child->HideFrame(child->fCanvas);
         y += bh;
      }
   }
}

//______________________________________________________________________________
void TGShutter::SetSelectedItem(TGShutterItem *item)
{
   // Set item to be the currently open shutter item.

   fSelectedItem = item;
   fSelectedItem->Selected(); // emit signal
   Layout();
}

//______________________________________________________________________________
void TGShutter::SetSelectedItem(const char *name)
{
   // Set item to be the currently open shutter item.

   TGShutterItem *item = GetItem(name);
   if (!item) {
      return;
   }
   SetSelectedItem(item);
}

//______________________________________________________________________________
void TGShutter::EnableItem(const char *name, Bool_t on)
{
   // Disable/enbale shutter item.

   TGShutterItem *item = GetItem(name);
   if (!item) {
      return;
   }

   item->GetButton()->SetEnabled(on);
}

//______________________________________________________________________________
TGShutterItem *TGShutter::GetItem(const char *name)
{
   // returns a shutter item by name (name is hot string of shutter item)

   TGFrameElement *el;
   TGShutterItem  *item = 0;

   TIter next(fList);

   while ((el = (TGFrameElement *) next())) {
      TGTextButton *btn;
      item = (TGShutterItem *)el->fFrame;
      btn = (TGTextButton*)item->GetButton();
      if (btn->GetString() == name) return item;
   }

   return item;
}


//______________________________________________________________________________
TGShutterItem::TGShutterItem(const TGWindow *p, TGHotString *s, Int_t id,
                             UInt_t options) :
   TGVerticalFrame (p, 10, 10, options), TGWidget (id)
{
   // Create a shutter item.

   if (!p && !s) {
      MakeZombie();
      return;
   }
   fButton = new TGTextButton(this, s, id);
   fCanvas = new TGCanvas(this, 10, 10, kChildFrame);
   fContainer = new TGVerticalFrame(fCanvas->GetViewPort(), 10, 10, kOwnBackground);
   fCanvas->SetContainer(fContainer);
   fContainer->SetBackgroundColor(fClient->GetShadow(GetDefaultFrameBackground()));

   AddFrame(fButton, fL1 = new TGLayoutHints(kLHintsTop | kLHintsExpandX));
   AddFrame(fCanvas, fL2 = new TGLayoutHints(kLHintsExpandY | kLHintsExpandX));

   fButton->Associate((TGFrame *) p);

   fCanvas->SetEditDisabled(kEditDisableGrab | kEditDisableLayout);
   fButton->SetEditDisabled(kEditDisableGrab | kEditDisableBtnEnable);
   fContainer->SetEditDisabled(kEditDisableGrab);
   fEditDisabled = kEditDisableGrab | kEditDisableLayout;
}

//______________________________________________________________________________
TGShutterItem::~TGShutterItem()
{
   // Clan up shutter item.

   if (!IsZombie() && !MustCleanup()) {
      delete fL1;
      delete fL2;
      delete fButton;
      delete fContainer;
      delete fCanvas;
   }
}

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

   char quote = '"';
   TGTextButton *b = (TGTextButton *)fButton;
   const char *text = b->GetText()->GetString();
   char hotpos = b->GetText()->GetHotPos();
   Int_t lentext = b->GetText()->GetLength();
   char *outext = new char[lentext+2];       // should be +2 because of \0
   Int_t i=0;

   while (lentext) {
      if (i == hotpos-1) {
         outext[i] = '&';
         i++;
      }
      outext[i] = *text;
      i++;
      text++;
      lentext--;
   }
   outext[i]=0;

   out << endl;
   out << "   // " << quote << outext << quote << " shutter item " << endl;
   out << "   TGShutterItem *";
   out << GetName() << " = new TGShutterItem(" << fParent->GetName()
       << ", new TGHotString(" << quote << outext << quote << "),"
       << fButton->WidgetId() << "," << GetOptionString() << ");" << endl;

   delete [] outext;

   TList *list = ((TGCompositeFrame *)GetContainer())->GetList();

   if (!list) return;

   out << "   TGCompositeFrame *" << GetContainer()->GetName()
       << " = (TGCompositeFrame *)" << GetName() << "->GetContainer();" << endl;

   TGFrameElement *el;
   TIter next(list);

   while ((el = (TGFrameElement *) next())) {
      el->fFrame->SavePrimitive(out, option);
      out << "   " << GetContainer()->GetName() <<"->AddFrame(" << el->fFrame->GetName();
      el->fLayout->SavePrimitive(out, option);
      out << ");"<< endl;
   }
}

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

   out << endl;
   out << "   // shutter" << endl;

   out << "   TGShutter *";
   out << GetName() << " = new TGShutter(" << fParent->GetName() << ","
       << GetOptionString() << ");" << endl;

   if (!fList) return;

   TGFrameElement *el;
   TIter next(fList);

   while ((el = (TGFrameElement *) next())) {
      el->fFrame->SavePrimitive(out, option);
      out << "   " << GetName() <<"->AddItem(" << el->fFrame->GetName();
      //el->fLayout->SavePrimitive(out, option);
      out << ");"<< endl;
   }

   out << "   " << GetName() << "->SetSelectedItem("
       << GetSelectedItem()->GetName() << ");" << endl;
   out << "   " <<GetName()<< "->Resize("<<GetWidth()<<","<<GetHeight()<<");"<<endl;
}

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