5 #include "TGListTree.h"
7 #include "TSystemDirectory.h"
8 #include "TGMimeTypes.h"
11 #include "TInterpreter.h"
13 #include "TDataMember.h"
15 #include "TMethodArg.h"
17 #include "TGClassBrowser.h"
19 ClassImp(TGClassBrowser)
21 //______________________________________________________________________________
22 TGClassBrowser::TGClassBrowser(const TGWindow *p, UInt_t w, UInt_t h) :
26 SetCleanup(kDeepCleanup);
27 fCanvas = new TGCanvas(this, 100, 100);
28 fListTree = new TGListTree(fCanvas, kHorizontalFrame);
29 AddFrame(fCanvas, new TGLayoutHints(kLHintsLeft | kLHintsTop |
30 kLHintsExpandX | kLHintsExpandY));
32 TGListTreeItem *item = fListTree->AddItem(0,"Classes");
33 fListTree->Connect("DoubleClicked(TGListTreeItem *, Int_t)",
34 "TGClassBrowser", this, "DoubleClicked(TGListTreeItem *, Int_t)");
35 fClassIcon = gClient->GetPicture("class.png");
36 fMemberIcon = gClient->GetPicture("member.png");
37 fMethodIcon = gClient->GetPicture("method.png");
40 Resize(GetDefaultSize());
43 TIter nextcl(gROOT->GetListOfClasses());
44 while ((cl = (TClass *)nextcl())) {
45 TGListTreeItem *itm = fListTree->AddItem(item, cl->GetName(),
46 fClassIcon, fClassIcon);
47 itm->SetTipText(Form("Decl: %s : %d\nImpl: %s : %d",
48 cl->GetDeclFileName(), cl->GetDeclFileLine(),
49 cl->GetImplFileName(), cl->GetImplFileLine()));
53 //______________________________________________________________________________
54 TGClassBrowser::~TGClassBrowser()
62 //______________________________________________________________________________
63 void TGClassBrowser::DisplayClass(TGListTreeItem *, const TString &)
65 // display details of ROOT class
69 //______________________________________________________________________________
70 void TGClassBrowser::DoubleClicked(TGListTreeItem *item, Int_t /*btn*/)
72 // Process double clicks in TGListTree.
75 TIter nextcl(gROOT->GetListOfClasses());
76 if (item == fListTree->GetFirstItem()) {
77 while ((cl = (TClass *)nextcl())) {
78 if (!fListTree->FindChildByName(item, cl->GetName())) {
79 TGListTreeItem *itm = fListTree->AddItem(item, cl->GetName(),
80 fClassIcon, fClassIcon);
81 itm->SetTipText(Form("Decl: %s : %d\nImpl: %s : %d",
82 cl->GetDeclFileName(), cl->GetDeclFileLine(),
83 cl->GetImplFileName(), cl->GetImplFileLine()));
86 fListTree->ClearViewPort();
89 cl = (TClass*)gROOT->GetListOfClasses()->FindObject(item->GetText());
95 TIter nextbc(cl->GetListOfBases());
96 while ((bc = (TClass *) nextbc())) {
97 fListTree->AddItem(item, bc->GetName(), fClassIcon, fClassIcon);
100 TIter nextdm(cl->GetListOfDataMembers());
101 while ((dm = (TDataMember *) nextdm())) {
102 if (dm->IsEnum()) continue;
103 fListTree->AddItem(item, Form("%s %s",dm->GetFullTypeName(), dm->GetName()),
104 fMemberIcon, fMemberIcon);
107 TIter nextm(cl->GetListOfMethods());
108 while ((m = (TMethod *) nextm())) {
109 TString method = Form("%s %s(", m->GetReturnTypeName(), m->GetName());
110 TIter nextarg(m->GetListOfMethodArgs());
112 while ((a = (TMethodArg*) nextarg())) {
113 method += a->GetFullTypeName();
116 method.Remove(TString::kTrailing,' ');
117 method.Remove(TString::kTrailing,',');
119 fListTree->AddItem(item, method.Data(), fMethodIcon, fMethodIcon);
122 fListTree->ClearViewPort();