ROOT logo
// @(#)root/base:$Id$
// Author: Nenad Buncic   08/02/96

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

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TContextMenu                                                         //
//                                                                      //
// This class provides an interface to  context sensitive popup menus.  //
// These menus pop up when the user hits the right mouse button, and    //
// are destroyed when the menu pops downs.                              //
//                                                                      //
// Context Menus are automatically generated by ROOT using the          //
// following convention: if the string // *MENU* is found in the        //
// comment field of a member function. This function will be added to   //
// the list of items in the menu.                                       //
//                                                                      //
// The picture below shows a canvas with a pop-up menu.                 //
//                                                                      //
//Begin_Html <img src="gif/hsumMenu.gif"> End_Html                      //
//                                                                      //
// The picture below shows a canvas with a pop-up menu and a dialog box.//
//                                                                      //
//Begin_Html <img src="gif/hsumDialog.gif"> End_Html                    //
//////////////////////////////////////////////////////////////////////////


// silence warning about some cast operations
#if defined(__GNUC__) && __GNUC__ >= 4 && ((__GNUC_MINOR__ == 2 && __GNUC_PATCHLEVEL__ >= 1) || (__GNUC_MINOR__ >= 3)) && !__INTEL_COMPILER
#pragma GCC diagnostic ignored "-Wstrict-aliasing"
#endif

#include "TROOT.h"
#include "TContextMenu.h"
#include "TVirtualPad.h"
#include "TGuiFactory.h"
#include "TMethod.h"
#include "TMethodArg.h"
#include "TGlobal.h"
#include "TObjArray.h"
#include "TObjString.h"
#include "TToggle.h"
#include "TClassMenuItem.h"
#include "TBrowser.h"
#include "TClass.h"
#include "TObjectSpy.h"

ClassImp(TContextMenu)


//______________________________________________________________________________
TContextMenu::TContextMenu(const char *name, const char *title)
             : TNamed(name, title)
{
   // Create a context menu.

   fSelectedObject   = 0;
   fCalledObject     = 0;
   fSelectedMethod   = 0;
   fBrowser          = 0;
   fSelectedPad      = 0;
   fSelectedCanvas   = 0;
   fSelectedMenuItem = 0;

   fContextMenuImp = gGuiFactory->CreateContextMenuImp(this, name, title);
}

//______________________________________________________________________________
TContextMenu::~TContextMenu()
{
   // Destroy a context menu.

   delete fContextMenuImp;

   fSelectedMethod   = 0;
   fCalledObject     = 0;
   fSelectedObject   = 0;
   fSelectedMenuItem = 0;
   fContextMenuImp   = 0;
}

//______________________________________________________________________________
void TContextMenu::Action(TObject *object, TMethod *method)
{
   // Action to be performed when this menu item is selected.
   // If the selected method requires arguments we popup an
   // automatically generated dialog, otherwise the method is
   // directly executed.

   if (method) {
      SetMethod( method );
      SetSelectedMenuItem(0);
      SetCalledObject(object);

      if (method->GetListOfMethodArgs()->First())
         fContextMenuImp->Dialog(object, method);
      else {
         Execute(object, method, "");
      }
   }

   if (fBrowser) fBrowser->Refresh();
}

//______________________________________________________________________________
void TContextMenu::Action(TClassMenuItem *menuitem)
{
   // Action to be performed when this menu item is selected.
   // If the selected method requires arguments we popup an
   // automatically generated dialog, otherwise the method is
   // directly executed.

   TObject* object;
   TMethod* method = 0;

   SetSelectedMenuItem( menuitem );

   // Get the object to be called
   if (menuitem->IsCallSelf()) object=fSelectedObject;
   else object=menuitem->GetCalledObject();

   if (object) {
      // If object deleted, remove from popup and return
      if (!(object->TestBit(kNotDeleted))) {
         menuitem->SetType(TClassMenuItem::kPopupSeparator);
         menuitem->SetCall(0,"");
         return;
      }

      method = object->IsA()->GetMethodWithPrototype(menuitem->GetFunctionName(),menuitem->GetArgs());

   }
//    if (!menuitem->IsCallSelf()) {
//       funproto = menuitem->GetFunctionName();
//       funproto = funproto + "(" + menuitem->GetArgs() + ")";
//    }

   // calling object, call the method directly
   if (object) {
      if (method) {
         SetMethod(method);
         SetCalledObject(object);

         if ((method->GetListOfMethodArgs()->First()
                            && menuitem->GetSelfObjectPos() < 0 ) ||
              method->GetListOfMethodArgs()->GetSize() > 1)
            fContextMenuImp->Dialog(object, method);
         else {
            if (menuitem->GetSelfObjectPos() < 0) {
#ifndef WIN32
               Execute(object, method, "");
#else
               // It is a workaround of the "Dead lock under Windows
               char *cmd = Form("((TContextMenu *)0x%lx)->Execute((TObject *)0x%lx,"
                                "(TMethod *)0x%lx,\"\");",
                                (Long_t)this,(Long_t)object,(Long_t)method);
               //Printf("%s", cmd);
               gROOT->ProcessLine(cmd);
               //Execute( object, method, (TObjArray *)NULL );
#endif
            } else {
#ifndef WIN32
               Execute(object, method, Form("(TObject*)0x%lx",(Long_t)fSelectedObject));
#else
               // It is a workaround of the "Dead lock under Windows
               char *cmd = Form("((TContextMenu *)0x%lx)->Execute((TObject *)0x%lx,"
                                "(TMethod *)0x%lx,(TObject*)0x%lx);",
                                (Long_t)this,(Long_t)object,(Long_t)method,
                                (Long_t)fSelectedObject);
               //Printf("%s", cmd);
               gROOT->ProcessLine(cmd);
               //Execute( object, method, (TObjArray *)NULL );
#endif
            }
         }
      }

   } else {
      // Calling a standalone global function
      TFunction* function = gROOT->GetGlobalFunctionWithPrototype(
                                 menuitem->GetFunctionName());
                                 //menuitem->GetArgs());
      if (function) {
         SetMethod(function);
         SetCalledObject(0);
         if ( (function->GetNargs() && menuitem->GetSelfObjectPos() < 0) ||
               function->GetNargs() > 1) {
            fContextMenuImp->Dialog(0,function);
         } else {
            char* cmd;
            if (menuitem->GetSelfObjectPos() < 0) {
               cmd = Form("%s();", menuitem->GetFunctionName());
            } else {
              cmd = Form("%s((TObject*)0x%lx);",
                     menuitem->GetFunctionName(), (Long_t)fSelectedObject);
            }
            gROOT->ProcessLine(cmd);
         }
      }
   }

   if (fBrowser) fBrowser->Refresh();
}

//______________________________________________________________________________
void TContextMenu::Action(TObject *object, TToggle *toggle)
{
   // Action to be performed when this toggle menu item is selected.

   if (object && toggle) {
      TObjectSpy savePad;

      gROOT->SetSelectedPrimitive(object);
      if (fSelectedPad && gPad) {
         savePad.SetObject(gPad);
         fSelectedPad->cd();
      }
      TObjectRefSpy fsp((TObject*&) fSelectedPad);
      TObjectRefSpy fsc((TObject*&) fSelectedCanvas);

      gROOT->SetFromPopUp(kTRUE);
      toggle->Toggle();
      if (fSelectedCanvas && fSelectedCanvas->GetPadSave())
         fSelectedCanvas->GetPadSave()->Modified();
      if (fSelectedPad)
         fSelectedPad->Modified();
      gROOT->SetFromPopUp(kFALSE);

      if (savePad.GetObject())
         ((TVirtualPad*)savePad.GetObject())->cd();

      if (fSelectedCanvas) {
         fSelectedCanvas->Update();
         if (fSelectedCanvas->GetPadSave())
            fSelectedCanvas->GetPadSave()->Update();
      }
   }

   if (fBrowser) fBrowser->Refresh();
}

//______________________________________________________________________________
const char *TContextMenu::CreateArgumentTitle(TMethodArg *argument)
{
   // Create string describing argument (for use in dialog box).

   static TString argTitle;

   if (argument) {
      argTitle.Form("(%s)  %s", argument->GetTitle(), argument->GetName());
      if (argument->GetDefault() && *(argument->GetDefault())) {
         argTitle += "  [default: ";
         argTitle += argument->GetDefault();
         argTitle += "]";
      }
   } else
      argTitle.Clear();

   return argTitle.Data();
}

//______________________________________________________________________________
const char *TContextMenu::CreateDialogTitle(TObject *object, TFunction *method)
{
   // Create title for dialog box retrieving argument values.

   static TString methodTitle;

   if (object && method)
      methodTitle.Form("%s::%s", object->ClassName(), method->GetName());
   else if (!object && method)
      methodTitle.Form("%s", method->GetName());
   else
      methodTitle.Clear();

   return methodTitle.Data();
}

//______________________________________________________________________________
const char *TContextMenu::CreatePopupTitle(TObject *object)
{
   // Create title for popup menu.

   static TString popupTitle;

   if (object) {
      if (!*(object->GetName()) || !strcmp(object->GetName(), object->ClassName())) {
         TGlobal *global = (TGlobal *) gROOT->GetGlobal(object);
         if (global && *(global->GetName()))
            popupTitle.Form("  %s::%s  ", object->ClassName(), global->GetName());
         else {
            if (!strcmp(object->IsA()->GetContextMenuTitle(), ""))
               popupTitle.Form("  %s  ", object->ClassName());
            else
               popupTitle.Form("  %s  ", object->IsA()->GetContextMenuTitle());
         }
      } else {
         if (!strcmp(object->IsA()->GetContextMenuTitle(), ""))
            popupTitle.Form("  %s::%s  ", object->ClassName(), object->GetName());
         else
            popupTitle.Form("  %s::%s  ", object->IsA()->GetContextMenuTitle(),
                            object->GetName());
      }
      if (popupTitle.Length() > 60) {
         popupTitle.Remove(60);
         popupTitle += "...";
      }
   } else
      popupTitle.Clear();

   return popupTitle.Data();
}

//______________________________________________________________________________
void TContextMenu::Execute(TObject *object, TFunction *method, const char *params)
{
   // Execute method with specified arguments for specified object.

   if (method) {
      TObjectSpy savePad;

      gROOT->SetSelectedPrimitive(object);
      if (fSelectedPad && gPad) {
         savePad.SetObject(gPad);
         fSelectedPad->cd();
      }
      TObjectRefSpy fsp((TObject*&) fSelectedPad);
      TObjectRefSpy fsc((TObject*&) fSelectedCanvas);

      gROOT->SetFromPopUp(kTRUE);
      if (object) {
         object->Execute((char *) method->GetName(), params);
      } else {
         char *cmd = Form("%s(%s);", method->GetName(),params);
         gROOT->ProcessLine(cmd);
      }
      if (fSelectedCanvas && fSelectedCanvas->GetPadSave())
         fSelectedCanvas->GetPadSave()->Modified();
      if (fSelectedPad)
         fSelectedPad->Modified();
      gROOT->SetFromPopUp(kFALSE);

      if (savePad.GetObject())
         ((TVirtualPad*)savePad.GetObject())->cd();

      if (fSelectedCanvas) {
         fSelectedCanvas->Update();
         if (fSelectedCanvas->GetPadSave())
            fSelectedCanvas->GetPadSave()->Update();
      }
   }

   if (fBrowser) fBrowser->Refresh();
}

//______________________________________________________________________________
void TContextMenu::Execute(TObject *object, TFunction *method, TObjArray *params)
{
   // Execute method with specified arguments for specified object.

   if (method) {
      TObjectSpy savePad;

      gROOT->SetSelectedPrimitive(object);
      if (fSelectedPad && gPad) {
         savePad.SetObject(gPad);
         fSelectedPad->cd();
      }
      TObjectRefSpy fsp((TObject*&) fSelectedPad);
      TObjectRefSpy fsc((TObject*&) fSelectedCanvas);

      gROOT->SetFromPopUp(kTRUE);
      if (object) {
         object->Execute((TMethod*)method, params);
      } else {
         TString args;
         TIter next(params);
         TObjString *s;
         while ((s = (TObjString*) next())) {
            if (!args.IsNull()) args += ",";
            args += s->String();
         }
         char *cmd = Form("%s(%s);", method->GetName(), args.Data());
         gROOT->ProcessLine(cmd);
      }
      if (fSelectedCanvas && fSelectedCanvas->GetPadSave())
         fSelectedCanvas->GetPadSave()->Modified();
      if (fSelectedPad)
         fSelectedPad->Modified();
      gROOT->SetFromPopUp(kFALSE);

      if (savePad.GetObject())
         ((TVirtualPad*)savePad.GetObject())->cd();

      if (fSelectedCanvas) {
         fSelectedCanvas->Update();
         if (fSelectedCanvas->GetPadSave())
            fSelectedCanvas->GetPadSave()->Update();
      }
   }
   if (fBrowser) fBrowser->Refresh();
}

//______________________________________________________________________________
void TContextMenu::Popup(Int_t x, Int_t y, TObject *obj, TVirtualPad *c, TVirtualPad *p)
{
   // Popup context menu at given location in canvas c and pad p for selected
   // object.

   SetBrowser(0);
   SetObject(obj);
   SetCanvas(c);
   SetPad(p);

   DisplayPopUp(x,y);
}

//______________________________________________________________________________
void TContextMenu::Popup(Int_t x, Int_t y, TObject *obj, TBrowser *b)
{
   // Popup context menu at given location in browser b for selected object.

   SetBrowser(b);
   SetObject(obj);
   SetCanvas(0);
   SetPad(0);

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