// @(#)root/gui:$Id$
// Author: Fons Rademakers   19/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.

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

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TGFSComboBox, TGTreeLBEntry                                          //
//                                                                      //
// This is a combo box that is used in the File Selection dialog box.   //
// It will allow the file path selection.                               //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "RConfigure.h"

#include "TGFSComboBox.h"
#include "TGResourcePool.h"
#include "TGPicture.h"
#include "TSystem.h"
#include "Riostream.h"
#include <stdlib.h>

const TGFont *TGTreeLBEntry::fgDefaultFont = 0;
TGGC         *TGTreeLBEntry::fgDefaultGC = 0;

//--- this is temp here...

struct Lbc_t {
   const char *fName;   // root prefix name
   const char *fPath;   // path
   const char *fPixmap; // picture file
   Int_t       fId;     // widget id
   Int_t       fIndent; // identification level
   Int_t       fFlags;  // flag
};

static struct Lbc_t gLbc[32];

ClassImp(TGTreeLBEntry)
ClassImp(TGFSComboBox)

//______________________________________________________________________________
TGTreeLBEntry::TGTreeLBEntry(const TGWindow *p, TGString *text,
                             const TGPicture *pic, Int_t id, TGString *path,
                             GContext_t norm, FontStruct_t font, UInt_t options,
                             ULong_t back) :
   TGLBEntry(p, id, options, back)
{
   // Create a tree (i.e. entry can be indented) listbox entry.
   // The strings text and path are adopted by the entry.

   if (text && !pic)
      Error("TGTreeLBEntry", "icon not found for entry %s", text->GetString());

   fPic    = pic;
   fSelPic = 0;
   fTWidth = 0;
   fText   = text;
   fPath   = path;

   fNormGC     = norm;
   fFontStruct = font;

   fActive = kFALSE;

   int max_ascent, max_descent;
   if (fText)
      fTWidth = gVirtualX->TextWidth(fFontStruct, fText->GetString(), fText->GetLength());
   gVirtualX->GetFontProperties(fFontStruct, max_ascent, max_descent);
   fTHeight = max_ascent + max_descent;
   SetWindowName();
}

//______________________________________________________________________________
TGTreeLBEntry::~TGTreeLBEntry()
{
   // Delete tree listbox entry.

   delete fText;
   delete fPath;
   delete fSelPic;
}

//______________________________________________________________________________
void TGTreeLBEntry::Activate(Bool_t a)
{
   // Make entry active (highlight picture).

   if (fActive == a) return;
   fActive = a;

   if (fActive) {
      fSelPic = new TGSelectedPicture(fClient, fPic);
   } else {
      if (fSelPic) delete fSelPic;
      fSelPic = 0;
   }
   DoRedraw();
}

//______________________________________________________________________________
void TGTreeLBEntry::DrawCopy(Handle_t id, Int_t x, Int_t y)
{
   // Redraw the tree listbox entry on pixmap/window.

   int ix, iy, lx, ly;

   ix = x;
   iy = y + ((fHeight - fPic->GetHeight()) >> 1);
   lx = x + (int)(fPic->GetWidth() + 4);
   ly = y + (int)((fHeight - (fTHeight+1)) >> 1);

   if (fActive) {
      if (fSelPic) fSelPic->Draw(id, fNormGC, ix, iy);
      gVirtualX->SetForeground(fNormGC, fgDefaultSelectedBackground);
      gVirtualX->FillRectangle(id, fNormGC, lx-2, ly, fWidth-(lx-x), fTHeight+1);
      gVirtualX->SetForeground(fNormGC, fClient->GetResourcePool()->GetSelectedFgndColor());
   } else {
      fPic->Draw(id, fNormGC, ix, iy);
      gVirtualX->SetForeground(fNormGC, fgWhitePixel);
      gVirtualX->FillRectangle(id, fNormGC, lx-2, ly, fWidth-(lx-x), fTHeight+1);
      gVirtualX->SetForeground(fNormGC, fgBlackPixel);
   }

   int max_ascent, max_descent;
   gVirtualX->GetFontProperties(fFontStruct, max_ascent, max_descent);

   fText->Draw(id, fNormGC, lx, ly + max_ascent);
}

//______________________________________________________________________________
void TGTreeLBEntry::DoRedraw()
{
   // Redraw the tree listbox entry.

   DrawCopy(fId, 0, 0);
}

//______________________________________________________________________________
TGDimension TGTreeLBEntry::GetDefaultSize() const
{
   // Return default size of tree listbox entry.

   TGDimension isize(fPic->GetWidth(), fPic->GetHeight());
   TGDimension lsize(fTWidth, fTHeight+1);

   return TGDimension(isize.fWidth + lsize.fWidth + 4,
                      TMath::Max(isize.fHeight, lsize.fHeight) + 2);
}

//______________________________________________________________________________
void TGTreeLBEntry::Update(TGLBEntry *e)
{
   // Update text and picture of a listbox entry.

   TGTreeLBEntry *te = (TGTreeLBEntry *) e;

   if (fText) delete fText;
   fText = new TGString(te->GetText());
   fPic = te->GetPicture();
   fTWidth = gVirtualX->TextWidth(fFontStruct, fText->GetString(), fText->GetLength());
   gVirtualX->ClearWindow(fId);
   fClient->NeedRedraw(this);
}

//______________________________________________________________________________
FontStruct_t TGTreeLBEntry::GetDefaultFontStruct()
{
   // Return default font structure.

   if (!fgDefaultFont)
      fgDefaultFont = gClient->GetResourcePool()->GetDefaultFont();
   return fgDefaultFont->GetFontStruct();
}

//______________________________________________________________________________
const TGGC &TGTreeLBEntry::GetDefaultGC()
{
   // Return default graphics context.

   if (!fgDefaultGC)
      fgDefaultGC = new TGGC(*gClient->GetResourcePool()->GetFrameGC());
   return *fgDefaultGC;
}


//______________________________________________________________________________
TGFSComboBox::TGFSComboBox(const TGWindow *parent, Int_t id, UInt_t options,
                           ULong_t back) :
   TGComboBox(parent, id, options | kOwnBackground, back)
{
   // Create a file system combobox showing system directories.

   int   i, indent;
   const TGPicture *pic;
   char  *p;

   SetTopEntry(new TGTreeLBEntry(this, new TGString("Current dir"),
               fClient->GetPicture("folder_t.xpm"), 0),
               new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 4, 0, 0, 0));

   fListBox->GetContainer()->AddInput(kButtonPressMask | kButtonReleaseMask |
                                      kPointerMotionMask);

   //--- first check for the existence of some directories...

   const char *homeDir = gSystem->HomeDirectory();
#ifndef ROOTPREFIX
   const char *rootSys = gSystem->Getenv("ROOTSYS");
#else
   // const char *rootSys = ROOTPREFIX;
#endif

   Int_t idx = 0;
   TList *volumes = gSystem->GetVolumes("all");
   TList *curvol  = gSystem->GetVolumes("cur");
   TString infos;
   const char *curdrive = "";
   if (volumes && curvol) {
      TNamed *named = (TNamed *)curvol->At(0);
      if (named) {
         curdrive = named->GetName();
         infos = named->GetTitle();
         gLbc[idx].fName = StrDup(infos.Data());
         gLbc[idx].fPath = StrDup(Form("%s\\", curdrive));
         if (infos.Contains("Removable"))
            gLbc[idx].fPixmap = StrDup("fdisk_t.xpm");
         else if (infos.Contains("Local"))
            gLbc[idx].fPixmap = StrDup("hdisk_t.xpm");
         else if (infos.Contains("CD"))
            gLbc[idx].fPixmap = StrDup("cdrom_t.xpm");
         else if (infos.Contains("Network"))
            gLbc[idx].fPixmap = StrDup("netdisk_t.xpm");
         else
            gLbc[idx].fPixmap = StrDup("hdisk_t.xpm");
         gLbc[idx].fId     = 1000;
         gLbc[idx].fIndent = 0;
         gLbc[idx].fFlags  = 0;
         ++idx;
      }
      else {
         gLbc[idx].fName = StrDup("Root");
         gLbc[idx].fPath = StrDup("/");
         gLbc[idx].fPixmap = StrDup("hdisk_t.xpm");
         gLbc[idx].fId     = 1000;
         gLbc[idx].fIndent = 1;
         gLbc[idx].fFlags  = 0;
         ++idx;
      }
   }
   else {
      gLbc[idx].fName = StrDup("Root");
      gLbc[idx].fPath = StrDup("/");
      gLbc[idx].fPixmap = StrDup("hdisk_t.xpm");
      gLbc[idx].fId     = 1000;
      gLbc[idx].fIndent = 1;
      gLbc[idx].fFlags  = 0;
      ++idx;
      gLbc[idx].fName = StrDup("Floppy");
      gLbc[idx].fPath = StrDup("/floppy");
      gLbc[idx].fPixmap = StrDup("fdisk_t.xpm");
      gLbc[idx].fId     = 2000;
      gLbc[idx].fIndent = 1;
      gLbc[idx].fFlags  = 0;
      ++idx;
      gLbc[idx].fName = StrDup("CD-ROM");
      gLbc[idx].fPath = StrDup("/cdrom");
      gLbc[idx].fPixmap = StrDup("cdrom_t.xpm");
      gLbc[idx].fId     = 3000;
      gLbc[idx].fIndent = 1;
      gLbc[idx].fFlags  = 0;
      ++idx;
   }
   gLbc[idx].fName   = StrDup("Home");
   gLbc[idx].fPath   = StrDup("$HOME");
   gLbc[idx].fPixmap = StrDup("home_t.xpm");
   gLbc[idx].fId     = (idx+1) * 1000;
   gLbc[idx].fIndent = 1;
   gLbc[idx].fFlags  = 0;
   ++idx;
#ifndef ROOTPREFIX
   gLbc[idx].fName   = StrDup("RootSys");
   gLbc[idx].fPath   = StrDup("$ROOTSYS");
#else
   gLbc[idx].fName   = StrDup(ROOTPREFIX);
   gLbc[idx].fPath   = StrDup(ROOTPREFIX);
#endif
   gLbc[idx].fPixmap = StrDup("root_t.xpm");
   gLbc[idx].fId     = (idx+1) * 1000;
   gLbc[idx].fIndent = 1;
   gLbc[idx].fFlags  = 0;
   ++idx;

   if (volumes && curvol) {
      TIter next(volumes);
      TNamed *drive;
      while ((drive = (TNamed *)next())) {
         if (!strcmp(drive->GetName(), curdrive))
            continue;
         infos = drive->GetTitle();
         gLbc[idx].fName   = StrDup(drive->GetTitle());
         gLbc[idx].fPath   = StrDup(Form("%s\\", drive->GetName()));
         if (infos.Contains("Removable"))
            gLbc[idx].fPixmap = StrDup("fdisk_t.xpm");
         else if (infos.Contains("Local"))
            gLbc[idx].fPixmap = StrDup("hdisk_t.xpm");
         else if (infos.Contains("CD"))
            gLbc[idx].fPixmap = StrDup("cdrom_t.xpm");
         else if (infos.Contains("Network"))
            gLbc[idx].fPixmap = StrDup("netdisk_t.xpm");
         else
            gLbc[idx].fPixmap = StrDup("hdisk_t.xpm");
         gLbc[idx].fId     = (idx+1) * 1000;
         gLbc[idx].fIndent = 0;
         gLbc[idx].fFlags  = 0;
         ++idx;
      }
      delete volumes;
      delete curvol;
   }
   gLbc[idx].fName   = 0;
   gLbc[idx].fPath   = 0;
   gLbc[idx].fPixmap = 0;
   gLbc[idx].fId     = (idx+1) * 1000;
   gLbc[idx].fIndent = 0;
   gLbc[idx].fFlags  = 0;

   for (i = 0; gLbc[i].fPath != 0; ++i) {
      if (strstr(gLbc[i].fPath, "$HOME") != 0) {
         if (homeDir) {
            int hlen = strlen(homeDir);
            int blen = hlen + strlen(gLbc[i].fPath) - 3;
            p = new char[blen];
            strlcpy(p, homeDir, blen);
            strlcat(p, &gLbc[i].fPath[5], blen-strlen(&gLbc[i].fPath[5]));
            gLbc[i].fPath = p;
         } else {
            gLbc[i].fFlags = 0;
         }
      }
#ifndef ROOTPREFIX
      // Below should _only_ be called if the prefix isn't set at build
      // time. The code below expands the occurance of `$ROOTSYS' in
      // the table above.  However, in the case of prefix being set at
      // build time, we do not need to expand the prefix, as it is
      // already known, so the entries in the table above are actually
      // fully expanded.
      if (strstr(gLbc[i].fPath, "$ROOTSYS") != 0) {
         // Get the size of the prefix template
         const int plen = 8;
         if (rootSys) {
            int hlen = strlen(rootSys);
            // Allocate enough memory to hold prefix (hlen), and
            // what's in the path (strlen(gLbc[i].fPath)) minus the
            // prefix template size, and one character for terminating
            // null.
            int blen = hlen + strlen(gLbc[i].fPath) - plen + 1;
            p = new char[blen];
            strlcpy(p, rootSys, blen);
            strlcat(p, &(gLbc[i].fPath[plen]), blen-strlen(&gLbc[i].fPath[plen]));
            // Figure out where to put the terminating NULL
            int npos = hlen + strlen(&(gLbc[i].fPath[plen]));
            p[npos] = '\0';
            gLbc[i].fPath = p;
         } else {
            gLbc[i].fFlags = 0;
         }
      }
#endif
      if (gSystem->AccessPathName(gLbc[i].fPath, kFileExists) == 0)
         gLbc[i].fFlags = 1;
   }

   //--- then init the contents...

   for (i = 0; gLbc[i].fName != 0; ++i) {
      if (gLbc[i].fFlags) {
         indent = 4 + (gLbc[i].fIndent * 10);
         pic = fClient->GetPicture(gLbc[i].fPixmap);
         if (!pic) Error("TGFSComboBox", "pixmap not found: %s", gLbc[i].fPixmap);
         AddEntry(new TGTreeLBEntry(fListBox->GetContainer(),
                  new TGString(gLbc[i].fName), pic, gLbc[i].fId,
                  new TGString(gLbc[i].fPath)),
                  new TGLayoutHints(kLHintsExpandX | kLHintsTop, indent, 0, 0, 0));
      }
   }
   SetWindowName();
}

//______________________________________________________________________________
void TGFSComboBox::Update(const char *path)
{
   // Update file system combo box.

   char dirname[1024], mpath[1024];
   const char *tailpath = 0;
   int  i, indent_lvl = 0, afterID = -1, sel = -1;

   if (!path) return;

   for (i = 0; gLbc[i].fPath != 0; ++i)
      RemoveEntries(gLbc[i].fId+1, gLbc[i+1].fId-1);

   int len = 0;
   for (i = 0; gLbc[i].fName != 0; ++i) {
      if (gLbc[i].fFlags) {
         int slen = strlen(gLbc[i].fPath);
         if (strncmp(path, gLbc[i].fPath, slen) == 0) {
            if (slen > len) {
               sel = afterID = gLbc[i].fId;
               indent_lvl = gLbc[i].fIndent + 1;
               if ((len > 0) && ((path[slen] == '\\') || (path[slen] == '/') ||
                   (path[slen] == 0)))
                  tailpath = path + slen;
               strlcpy(mpath, gLbc[i].fPath, 1024);
               len = slen;
            }
         }
      }
   }

   if (tailpath && *tailpath) {
      if ((*tailpath == '/') || (*tailpath == '\\')) ++tailpath;
      if (*tailpath)
         while (1) {
            const char *picname;
            const char *semi = strchr(tailpath, '/');
            if (semi == 0) semi = strchr(tailpath, '\\');
            if (semi == 0) {
               strlcpy(dirname, tailpath, 1024);
               picname = "ofolder_t.xpm";
            } else {
               strlcpy(dirname, tailpath, (semi-tailpath)+1);
               picname = "folder_t.xpm";
            }
            if ((mpath[strlen(mpath)-1] != '/') &&
                (mpath[strlen(mpath)-1] != '\\')) {
               strlcat(mpath, "/", 1024-strlen(mpath));
            }
            strlcat(mpath, dirname, 1024-strlen(mpath));
            int indent = 4 + (indent_lvl * 10);
            const TGPicture *pic = fClient->GetPicture(picname);
            if (!pic) Error("Update", "pixmap not found: %s", picname);
            InsertEntry(new TGTreeLBEntry(fListBox->GetContainer(),
                        new TGString(dirname), pic, afterID+1,
                        new TGString(mpath)),
                        new TGLayoutHints(kLHintsExpandX | kLHintsTop,
                                          indent, 0, 0, 0),
                        afterID);
            sel = ++afterID;
            ++indent_lvl;
            if (semi == 0) break;
            tailpath = ++semi;
         }
   }
   if (sel > 0) Select(sel);
}

//______________________________________________________________________________
void TGFSComboBox::SavePrimitive(std::ostream &out, Option_t *option /*= ""*/)
{
   // Save a file system combo box as a C++ statement(s) on output stream out.

   if (fBackground != GetWhitePixel()) SaveUserColor(out, option);

   out << std::endl << "   // file system combo box" << std::endl;
   out << "   TGFSComboBox *";
   out << GetName() << " = new TGFSComboBox(" << fParent->GetName()
                                          << "," << fWidgetId;
   if (fBackground == GetWhitePixel()) {
      if (GetOptions() == (kHorizontalFrame | kSunkenFrame | kDoubleBorder)) {
         out <<");" << std::endl;
      } else {
         out << "," << GetOptionString() <<");" << std::endl;
      }
   } else {
      out << "," << GetOptionString() << ",ucolor);" << std::endl;
   }
   if (option && strstr(option, "keep_names"))
      out << "   " << GetName() << "->SetName(\"" << GetName() << "\");" << std::endl;

   out << "   " << GetName() << "->Resize(" << GetWidth()  << ","
       << GetHeight() << ");" << std::endl;
   out << "   " << GetName() << "->Select(" << GetSelected() << ");" << std::endl;

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