ROOT logo
// @(#)root/gui:$Id: TGMsgBox.cxx 23115 2008-04-10 13:35:37Z rdm $
// Author: Fons Rademakers   09/01/98

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

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

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TMsgBox                                                              //
//                                                                      //
// A message dialog box.                                                //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "TGMsgBox.h"
#include "TGButton.h"
#include "TGIcon.h"
#include "TGLabel.h"
#include "TList.h"


ClassImp(TGMsgBox)


//______________________________________________________________________________
TGMsgBox::TGMsgBox(const TGWindow *p, const TGWindow *main,
                   const char *title, const char *msg, const TGPicture *icon,
                   Int_t buttons, Int_t *ret_code, UInt_t options,
                   Int_t text_align) :
   TGTransientFrame(p, main, 10, 10, options)
{
   // Create a message dialog box.

   if (p)
      PMsgBox(title, msg, icon, buttons, ret_code, text_align);
   else
      MakeZombie();
}

//______________________________________________________________________________
TGMsgBox::TGMsgBox(const TGWindow *p, const TGWindow *main,
                   const char *title, const char *msg, EMsgBoxIcon icon,
                   Int_t buttons, Int_t *ret_code, UInt_t options,
                   Int_t text_align) :
   TGTransientFrame(p, main, 10, 10, options)
{
   // Create a message dialog box with the following parameters:.
   //       title: Window title
   //         msg: Message to be shown ('\n' may be used to split it in lines)
   //        icon: Picture to be shown at the left on the dialog window.
   //              It might take any of the following values:
   //              kMBIconStop, kMBIconQuestion,
   //              kMBIconExclamation, kMBIconAsterisk
   //     buttons: Buttons to be shown at the botton of the dialgo window.
   //              Look at EMsgBoxButton for the different possible values.
   //    ret_code: It will hold the value of the button pressed when the
   //              dialog is closed
   //     options: Frame options of this dialog window.
   //  text_align: Align options for 'msg'. See ETextJustification for the values.

   const TGPicture *icon_pic;

   switch (icon) {
      case kMBIconStop:
         icon_pic = fClient->GetPicture("mb_stop_s.xpm");
         if (!icon_pic) Error("TGMsgBox", "mb_stop_s.xpm not found");
         break;

      case kMBIconQuestion:
         icon_pic = fClient->GetPicture("mb_question_s.xpm");
         if (!icon_pic) Error("TGMsgBox", "mb_question_s.xpm not found");
         break;

      case kMBIconExclamation:
         icon_pic = fClient->GetPicture("mb_exclamation_s.xpm");
         if (!icon_pic) Error("TGMsgBox", "mb_exclamation_s.xpm not found");
         break;

      case kMBIconAsterisk:
         icon_pic = fClient->GetPicture("mb_asterisk_s.xpm");
         if (!icon_pic) Error("TGMsgBox", "mb_asterisk_s.xpm not found");
         break;

      default:
         icon_pic = 0;
         break;
   }

   if (p)
      PMsgBox(title, msg, icon_pic, buttons, ret_code, text_align);
   else
      MakeZombie();
}

//______________________________________________________________________________
void TGMsgBox::PMsgBox(const char *title, const char *msg,
                       const TGPicture *icon, Int_t buttons, Int_t *ret_code,
                       Int_t text_align)
{
   // Protected, common message dialog box initialization.

   UInt_t nb, width, height;

   fYes = fNo = fOK = fApply = fRetry = fIgnore = fCancel = fClose =
   fYesAll = fNoAll = fNewer = fAppend = fDismiss   = 0;
   fIcon      = 0;
   fMsgList   = new TList;
   fRetCode   = ret_code;
   nb = width = 0;

   // create the buttons

   fButtonFrame = new TGHorizontalFrame(this, 60, 20, kFixedWidth);
   fL1 = new TGLayoutHints(kLHintsCenterY | kLHintsExpandX, 3, 3, 0, 0);

   buttons &= (kMBYes | kMBNo | kMBOk | kMBApply |
               kMBRetry | kMBIgnore | kMBCancel | kMBClose | kMBDismiss |
               kMBYesAll | kMBNoAll | kMBAppend | kMBNewer);
   if (buttons == 0) buttons = kMBDismiss;

   if (buttons & kMBYes) {
      fYes = new TGTextButton(fButtonFrame, new TGHotString("&Yes"), kMBYes);
      fYes->Associate(this);
      fButtonFrame->AddFrame(fYes, fL1);
      width = TMath::Max(width, fYes->GetDefaultWidth()); ++nb;
   }

   if (buttons & kMBNo) {
      fNo = new TGTextButton(fButtonFrame, new TGHotString("&No"), kMBNo);
      fNo->Associate(this);
      fButtonFrame->AddFrame(fNo, fL1);
      width = TMath::Max(width, fNo->GetDefaultWidth()); ++nb;
   }

   if (buttons & kMBOk) {
      fOK = new TGTextButton(fButtonFrame, new TGHotString("&OK"), kMBOk);
      fOK->Associate(this);
      fButtonFrame->AddFrame(fOK, fL1);
      width = TMath::Max(width, fOK->GetDefaultWidth()); ++nb;
   }

   if (buttons & kMBApply) {
      fApply = new TGTextButton(fButtonFrame, new TGHotString("&Apply"), kMBApply);
      fApply->Associate(this);
      fButtonFrame->AddFrame(fApply, fL1);
      width = TMath::Max(width, fApply->GetDefaultWidth()); ++nb;
   }

   if (buttons & kMBRetry) {
      fRetry = new TGTextButton(fButtonFrame, new TGHotString("&Retry"), kMBRetry);
      fRetry->Associate(this);
      fButtonFrame->AddFrame(fRetry, fL1);
      width = TMath::Max(width, fRetry->GetDefaultWidth()); ++nb;
   }

   if (buttons & kMBIgnore) {
      fIgnore = new TGTextButton(fButtonFrame, new TGHotString("&Ignore"), kMBIgnore);
      fIgnore->Associate(this);
      fButtonFrame->AddFrame(fIgnore, fL1);
      width = TMath::Max(width, fIgnore->GetDefaultWidth()); ++nb;
   }

   if (buttons & kMBCancel) {
      fCancel = new TGTextButton(fButtonFrame, new TGHotString("&Cancel"), kMBCancel);
      fCancel->Associate(this);
      fButtonFrame->AddFrame(fCancel, fL1);
      width = TMath::Max(width, fCancel->GetDefaultWidth()); ++nb;
   }

   if (buttons & kMBClose) {
      fClose = new TGTextButton(fButtonFrame, new TGHotString("C&lose"), kMBClose);
      fClose->Associate(this);
      fButtonFrame->AddFrame(fClose, fL1);
      width = TMath::Max(width, fClose->GetDefaultWidth()); ++nb;
   }

   if (buttons & kMBYesAll) {
      fYesAll = new TGTextButton(fButtonFrame, new TGHotString("Y&es to All"), kMBYesAll);
      fYesAll->Associate(this);
      fButtonFrame->AddFrame(fYesAll, fL1);
      width = TMath::Max(width, fYesAll->GetDefaultWidth()); ++nb;
   }

   if (buttons & kMBNoAll) {
      fNoAll = new TGTextButton(fButtonFrame, new TGHotString("No &to All"), kMBNoAll);
      fNoAll->Associate(this);
      fButtonFrame->AddFrame(fNoAll, fL1);
      width = TMath::Max(width, fNoAll->GetDefaultWidth()); ++nb;
   }

   if (buttons & kMBNewer) {
      fNewer = new TGTextButton(fButtonFrame, new TGHotString("Ne&wer Only"), kMBNewer);
      fNewer->Associate(this);
      fButtonFrame->AddFrame(fNewer, fL1);
      width = TMath::Max(width, fNewer->GetDefaultWidth()); ++nb;
   }

   if (buttons & kMBAppend) {
      fAppend = new TGTextButton(fButtonFrame, new TGHotString("A&ppend"), kMBAppend);
      fAppend->Associate(this);
      fButtonFrame->AddFrame(fAppend, fL1);
      width = TMath::Max(width, fAppend->GetDefaultWidth()); ++nb;
   }

   if (buttons & kMBDismiss) {
      fDismiss = new TGTextButton(fButtonFrame, new TGHotString("&Dismiss"), kMBDismiss);
      fDismiss->Associate(this);
      fButtonFrame->AddFrame(fDismiss, fL1);
      width = TMath::Max(width, fDismiss->GetDefaultWidth()); ++nb;
   }

   // place buttons at the bottom

   fL2 = new TGLayoutHints(kLHintsBottom | kLHintsCenterX, 0, 0, 5, 5);
   AddFrame(fButtonFrame, fL2);

   // keep the buttons centered and with the same width

   fButtonFrame->Resize((width + 20) * nb, GetDefaultHeight());

   fIconFrame = new TGHorizontalFrame(this, 60, 20);

   fL3 = new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 2, 2, 2, 2);

   if (icon) {
      fIcon = new TGIcon(fIconFrame, icon, icon->GetWidth(), icon->GetHeight());
      fIconFrame->AddFrame(fIcon, fL3);
   }

   fLabelFrame = new TGVerticalFrame(fIconFrame, 60, 20);

   fL4 = new TGLayoutHints(kLHintsCenterY | kLHintsLeft | kLHintsExpandX,
                           4, 2, 2, 2);
   fL5 = new TGLayoutHints(kLHintsTop | kLHintsExpandX, 10, 10, 7, 2);

   // make one label per line of the message
   TGLabel *label;

   char *line;
   char *tmpMsg, *nextLine;

   tmpMsg = new char[strlen(msg) + 1];
   nextLine = tmpMsg;

   line = tmpMsg;
   strcpy(nextLine, msg);
   while ((nextLine = strchr(line, '\n'))) {
      *nextLine = 0;
      label = new TGLabel(fLabelFrame, line);
      label->SetTextJustify(text_align);
      fMsgList->Add(label);
      fLabelFrame->AddFrame(label, fL4);
      line = nextLine + 1;
   }

   label = new TGLabel(fLabelFrame, line);
   label->SetTextJustify(text_align);
   fMsgList->Add(label);
   fLabelFrame->AddFrame(label, fL4);
   delete [] tmpMsg;

   fIconFrame->AddFrame(fLabelFrame, fL4);
   AddFrame(fIconFrame, fL5);

   MapSubwindows();

   width  = GetDefaultWidth();
   height = GetDefaultHeight();

   Resize(width, height);

   // position relative to the parent's window

   CenterOnParent();

   // make the message box non-resizable

   SetWMSize(width, height);
   SetWMSizeHints(width, height, width, height, 0, 0);

   // set names

   SetWindowName(title);
   SetIconName(title);
   SetClassHints("MsgBox", "MsgBox");

   SetMWMHints(kMWMDecorAll | kMWMDecorResizeH  | kMWMDecorMaximize |
                              kMWMDecorMinimize | kMWMDecorMenu,
               kMWMFuncAll  | kMWMFuncResize    | kMWMFuncMaximize |
                              kMWMFuncMinimize,
               kMWMInputModeless);

   MapRaised();
   fClient->WaitFor(this);
}

//______________________________________________________________________________
TGMsgBox::~TGMsgBox()
{
   // Destroy message dialog box.

   if (IsZombie()) return;
   if (fYes)     delete fYes;
   if (fNo)      delete fNo;
   if (fOK)      delete fOK;
   if (fApply)   delete fApply;
   if (fRetry)   delete fRetry;
   if (fIgnore)  delete fIgnore;
   if (fCancel)  delete fCancel;
   if (fClose)   delete fClose;
   if (fDismiss) delete fDismiss;
   if (fYesAll)  delete fYesAll;
   if (fNoAll)   delete fNoAll;
   if (fNewer)   delete fNewer;
   if (fAppend)  delete fAppend;

   if (fIcon) delete fIcon;
   delete fButtonFrame;
   delete fIconFrame;
   delete fLabelFrame;
   fMsgList->Delete();
   delete fMsgList;
   delete fL1; delete fL2; delete fL3; delete fL4; delete fL5;
}

//______________________________________________________________________________
void TGMsgBox::CloseWindow()
{
   // Close dialog box. Before deleting itself it sets the return code
   // to kMBClose.

   if (fRetCode) *fRetCode = kMBClose;
   DeleteWindow();
}

//______________________________________________________________________________
Bool_t TGMsgBox::ProcessMessage(Long_t msg, Long_t parm1, Long_t)
{
   // Process message dialog box event.

   switch (GET_MSG(msg)) {
      case kC_COMMAND:
         switch (GET_SUBMSG(msg)) {
            case kCM_BUTTON:
               if (fRetCode) *fRetCode = (Int_t) parm1;
               DeleteWindow();
               break;

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