21 #include "RConfigure.h"
77 enum ERootBrowserCommands {
114 kOptionAutoThumbnail,
132 struct DefaultIcon_t {
133 const char *fPicnamePrefix;
134 const TGPicture *fIcon[2];
138 static DefaultIcon_t gDefaultIcon[] = {
139 {
"folder", { 0, 0 } },
142 {
"slink", { 0, 0 } },
143 {
"histo", { 0, 0 } },
144 {
"object", { 0, 0 } }
151 static ToolBarData_t gToolBarData[] = {
152 {
"tb_uplevel.xpm",
"Up One Level", kFALSE, kOneLevelUp, 0 },
153 {
"",
"", kFALSE, -1, 0 },
154 {
"tb_bigicons.xpm",
"Large Icons", kTRUE, kViewLargeIcons, 0 },
155 {
"tb_smicons.xpm",
"Small Icons", kTRUE, kViewSmallIcons, 0 },
156 {
"tb_list.xpm",
"List", kTRUE, kViewList, 0 },
157 {
"tb_details.xpm",
"Details", kTRUE, kViewDetails, 0 },
158 {
"",
"", kFALSE, -1, 0 },
159 {
"tb_back.xpm",
"Back", kFALSE, kHistoryBack, 0 },
160 {
"tb_forw.xpm",
"Forward", kFALSE, kHistoryForw, 0 },
161 {
"tb_refresh.xpm",
"Refresh (F5)", kFALSE, kViewRefresh, 0 },
162 {
"",
"", kFALSE, -1, 0 },
163 {
"tb_find.xpm",
"Find (Ctrl-F)", kFALSE, kViewFind, 0 },
164 {
"",
"", kFALSE, -1, 0 },
165 {
"macro_t.xpm",
"Execute Macro", kFALSE, kViewExec, 0 },
166 {
"interrupt.xpm",
"Interrupt Macro",kFALSE, kViewInterrupt, 0 },
167 {
"filesaveas.xpm",
"Save Macro", kFALSE, kViewSave, 0 },
168 { 0, 0, kFALSE, 0, 0 }
174 static const char *gOpenTypes[] = {
"ROOT files",
"*.root",
179 class TRootBrowserHistoryCursor :
public TObject {
181 TGListTreeItem *fItem;
183 TRootBrowserHistoryCursor(TGListTreeItem *item) : fItem(item) {}
184 void Print(Option_t *)
const {
if (fItem) printf(
"%s\n", fItem->GetText()); }
189 class TRootBrowserHistory :
public TList {
191 void RecursiveRemove(TObject *obj) {
192 TRootBrowserHistoryCursor *cur;
195 while ((cur = (TRootBrowserHistoryCursor*)next())) {
196 if (cur->fItem->GetUserData() == obj) {
203 void DeleteItem(TGListTreeItem *item) {
204 TRootBrowserHistoryCursor *cur;
207 while ((cur = (TRootBrowserHistoryCursor*)next())) {
208 if (cur->fItem == item) {
218 class TRootBrowserCursorSwitcher {
223 TRootBrowserCursorSwitcher(TGWindow *w1, TGWindow *w2) : fW1(w1), fW2(w2) {
224 if (w1) gVirtualX->SetCursor(w1->GetId(), gVirtualX->CreateCursor(kWatch));
225 if (w2) gVirtualX->SetCursor(w2->GetId(), gVirtualX->CreateCursor(kWatch));
227 ~TRootBrowserCursorSwitcher() {
228 if (fW1) gVirtualX->SetCursor(fW1->GetId(), gVirtualX->CreateCursor(kPointer));
229 if (fW2) gVirtualX->SetCursor(fW2->GetId(), gVirtualX->CreateCursor(kPointer));
234 class TIconBoxThumb :
public TObject {
237 const TGPicture *fSmall;
238 const TGPicture *fLarge;
240 TIconBoxThumb(
const char *name,
const TGPicture *spic,
const TGPicture *pic) {
245 ULong_t Hash()
const {
return fName.Hash(); }
246 const char *GetName()
const {
return fName.Data(); }
254 class TRootObjItem :
public TGFileItem {
256 TRootObjItem(
const TGWindow *p,
const TGPicture *bpic,
257 const TGPicture *spic, TGString *name,
258 TObject *obj, TClass *cl, EListViewMode viewMode = kLVSmallIcons);
260 virtual TDNDData *GetDNDData(Atom_t) {
262 if (fObj->IsA() == TKey::Class())
263 object = ((TKey *)fObj)->ReadObj();
267 if (!fBuf) fBuf =
new TBufferFile(TBuffer::kWrite);
268 fBuf->WriteObject(
object);
269 fDNDData.fData = fBuf->Buffer();
270 fDNDData.fDataLength = fBuf->Length();
272 fDNDData.fDataType = gVirtualX->InternAtom(
"application/root", kFALSE);
276 virtual Bool_t HandleDNDFinished() {
278 return ((TGFrame *)GetParent())->HandleDNDFinished();
290 TRootObjItem::TRootObjItem(
const TGWindow *p,
const TGPicture *bpic,
291 const TGPicture *spic, TGString *name,
292 TObject *obj, TClass *, EListViewMode viewMode) :
293 TGFileItem(p, bpic, 0, spic, 0, name, 0, 0, 0, 0, 0, viewMode)
297 fDNDData.fDataLength = 0;
300 for (Int_t i = 0; fSubnames[i] != 0; ++i)
delete fSubnames[i];
303 fSubnames =
new TGString* [2];
305 fSubnames[0] =
new TGString(obj->GetTitle());
309 if (obj->IsA()->HasDefaultConstructor()) {
312 if ((obj->IsA() == TFolder::Class()) ||
313 (obj->IsA() == TClass::Class())) {
314 SetDNDSource(kFALSE);
318 for (i = 0; fSubnames[i] != 0; ++i)
321 for (i = 0; fSubnames[i] != 0; ++i)
322 fCtw[i] = gVirtualX->TextWidth(fFontStruct, fSubnames[i]->GetString(),
323 fSubnames[i]->GetLength());
328 class TRootIconList :
public TList {
331 TRootIconBox *fIconBox;
332 const TGPicture *fPic;
335 TRootIconList(TRootIconBox* box = 0);
336 virtual ~TRootIconList();
338 const char *GetTitle()
const {
return "ListView Container"; }
339 Bool_t IsFolder()
const {
return kFALSE; }
340 void Browse(TBrowser *b);
341 const TGPicture *GetPicture()
const {
return fPic; }
347 TRootIconList::TRootIconList(TRootIconBox* box)
349 fPic = gClient->GetPicture(
"listview.xpm");
357 TRootIconList::~TRootIconList()
359 gClient->FreePicture(fPic);
365 void TRootIconList::UpdateName()
367 if (!First())
return;
370 fName = First()->GetName();
374 fName = First()->GetName();
376 fName += Last()->GetName();
382 class TRootIconBox :
public TGFileContainer {
383 friend class TRootIconList;
384 friend class TRootBrowserLite;
387 Bool_t fCheckHeaders;
388 TRootIconList *fCurrentList;
389 TRootObjItem *fCurrentItem;
391 TString fCachedPicName;
394 TGString *fCurrentName;
395 const TGPicture *fLargeCachedPic;
396 const TGPicture *fSmallCachedPic;
398 TObject *fActiveObject;
400 THashTable *fThumbnails;
401 Bool_t fAutoThumbnail;
402 TRootBrowserLite *fBrowser;
404 void *FindItem(
const TString& name,
405 Bool_t direction = kTRUE,
406 Bool_t caseSensitive = kTRUE,
407 Bool_t beginWith = kFALSE);
408 void RemoveGarbage();
411 TRootIconBox(TRootBrowserLite *browser, TGListView *lv,
412 UInt_t options = kSunkenFrame,
413 ULong_t back = GetDefaultFrameBackground());
415 virtual ~TRootIconBox();
417 void AddObjItem(
const char *name, TObject *obj, TClass *cl);
418 void GetObjPictures(
const TGPicture **pic,
const TGPicture **spic,
419 TObject *obj,
const char *name);
420 void SetObjHeaders();
423 void SetGroupSize(Int_t siz) { fGroupSize = siz; }
424 Int_t GetGroupSize()
const {
return fGroupSize; }
425 TGFrameElement *FindFrame(Int_t x, Int_t y, Bool_t exclude=kTRUE) {
return TGContainer::FindFrame(x,y,exclude); }
426 Bool_t WasGrouped()
const {
return fWasGrouped; }
432 TRootIconBox::TRootIconBox(TRootBrowserLite *browser, TGListView *lv, UInt_t options,
433 ULong_t back) : TGFileContainer(lv, options, back)
438 fCheckHeaders = kTRUE;
440 fGarbage =
new TList();
446 fWasGrouped = kFALSE;
455 fThumbnails =
new THashTable(50);
456 fAutoThumbnail = kTRUE;
462 TRootIconBox::~TRootIconBox()
474 void TRootIconBox::GetObjPictures(
const TGPicture **pic,
const TGPicture **spic,
475 TObject *obj,
const char *name)
477 static TImage *im = 0;
479 im = TImage::Create();
482 TString xpm_magic(name, 3);
483 Bool_t xpm = xpm_magic ==
"/* ";
484 const char *iconname = xpm ? obj->GetName() : name;
486 if (obj->IsA()->InheritsFrom(
"TGeoVolume")) {
487 iconname = obj->GetIconName() ? obj->GetIconName() : obj->IsA()->GetName();
490 if (fCachedPicName == iconname) {
491 *pic = fLargeCachedPic;
492 *spic = fSmallCachedPic;
496 *pic = fClient->GetMimeTypeList()->GetIcon(iconname, kFALSE);
498 if (!(*pic) && xpm) {
499 if (im && im->SetImageBuffer((
char**)&name, TImage::kXpm)) {
500 *pic = fClient->GetPicturePool()->GetPicture(iconname, im->GetPixmap(),
502 im->Scale(im->GetWidth()/2, im->GetHeight()/2);
503 *spic = fClient->GetPicturePool()->GetPicture(iconname, im->GetPixmap(),
507 fClient->GetMimeTypeList()->AddType(
"[thumbnail]", iconname, iconname, iconname,
"->Browse()");
512 if (obj->IsFolder()) {
518 fLargeCachedPic = *pic;
520 *spic = fClient->GetMimeTypeList()->GetIcon(iconname, kTRUE);
528 fSmallCachedPic = *spic;
529 fCachedPicName = iconname;
535 void TRootIconBox::RemoveGarbage()
537 TIter next(fGarbage);
540 while ((li=(TList *)next())) {
541 li->Clear(
"nodelete");
550 void TRootIconBox::AddObjItem(
const char *name, TObject *obj, TClass *cl)
554 Bool_t isSystemFile = kFALSE;
556 fWasGrouped = kFALSE;
557 const TGPicture *pic = 0;
558 const TGPicture *spic = 0;
560 if (obj->InheritsFrom(
"TRemoteObject")) {
562 TRemoteObject *robj = (TRemoteObject *)obj;
563 if ((TString(robj->GetClassName()) ==
"TSystemFile") ||
564 (TString(robj->GetClassName()) ==
"TSystemDirectory"))
565 isSystemFile = kTRUE;
568 if (isSystemFile || obj->IsA() == TSystemFile::Class() ||
569 obj->IsA() == TSystemDirectory::Class()) {
571 if (strcmp(fListView->GetHeader(1),
"Attributes")) {
572 fListView->SetDefaultHeaders();
573 TGTextButton** buttons = fListView->GetHeaderButtons();
575 buttons[0]->Connect(
"Clicked()",
"TRootBrowserLite", fBrowser,
576 TString::Format(
"SetSortMode(=%d)", kViewArrangeByName));
577 buttons[1]->Connect(
"Clicked()",
"TRootBrowserLite", fBrowser,
578 TString::Format(
"SetSortMode(=%d)", kViewArrangeByType));
579 buttons[2]->Connect(
"Clicked()",
"TRootBrowserLite", fBrowser,
580 TString::Format(
"SetSortMode(=%d)", kViewArrangeBySize));
581 buttons[5]->Connect(
"Clicked()",
"TRootBrowserLite", fBrowser,
582 TString::Format(
"SetSortMode(=%d)", kViewArrangeByDate));
585 fCheckHeaders = kFALSE;
588 TIconBoxThumb *thumb = 0;
589 char *thumbname = gSystem->ConcatFileName(gSystem->WorkingDirectory(), name);
590 thumb = (TIconBoxThumb *)fThumbnails->FindObject(gSystem->IsAbsoluteFileName(name) ? name :
595 spic = thumb->fSmall;
599 if (obj->InheritsFrom(
"TRemoteObject"))
601 fi = AddRemoteFile(obj, spic, pic);
603 fi = AddFile(name, spic, pic);
605 fi->SetUserData(obj);
606 if (obj->IsA() == TSystemFile::Class()) {
609 str = TString::Format(
"file://%s/%s\r\n",
610 gSystem->UnixPathName(obj->GetTitle()),
612 data.fData = (
void *)str.Data();
613 data.fDataLength = str.Length()+1;
614 data.fDataType = gVirtualX->InternAtom(
"text/uri-list", kFALSE);
615 fi->SetDNDData(&data);
616 fi->SetDNDSource(kTRUE);
625 fCurrentList =
new TRootIconList(
this);
626 fGarbage->Add(fCurrentList);
629 fCurrentList->Add(obj);
630 fCurrentList->UpdateName();
635 while ((el = (TGFrameElement *) next())) {
636 TGLVEntry *f = (TGLVEntry *) el->fFrame;
637 if (f->GetUserData() == obj) {
642 if (fGrouped && fCurrentItem && (fCurrentList->GetSize()>1)) {
643 fCurrentName->SetString(fCurrentList->GetName());
646 EListViewMode view = fListView->GetViewMode();
648 if ((fCurrentList->GetSize() < fGroupSize) && !fGrouped) {
649 GetObjPictures(&pic, &spic, obj, obj->GetIconName() ?
650 obj->GetIconName() : cl->GetName());
653 if (strcmp(fListView->GetHeader(1),
"Title")) {
656 fCheckHeaders = kFALSE;
659 fi =
new TRootObjItem(
this, pic, spic,
new TGString(name), obj, cl, view);
661 fi->SetUserData(obj);
666 if (fGrouped && (fCurrentList->GetSize()==1)) {
667 fCurrentName =
new TGString(fCurrentList->GetName());
668 fCurrentItem =
new TRootObjItem(
this, fCurrentList->GetPicture(), fCurrentList->GetPicture(),
669 fCurrentName,fCurrentList, TList::Class(), view);
670 fCurrentItem->SetUserData(fCurrentList);
671 AddItem(fCurrentItem);
672 fTotal = fList->GetSize();
676 if ((fCurrentList->GetSize()==fGroupSize) && !fGrouped) {
683 while ((el2 = (TGFrameElement *) nextl())) {
684 el2->fFrame->DestroyWindow();
690 fCurrentName =
new TGString(fCurrentList->GetName());
691 fi =
new TRootObjItem(
this, fCurrentList->GetPicture(), fCurrentList->GetPicture(),
692 fCurrentName, fCurrentList, TList::Class(), view);
693 fi->SetUserData(fCurrentList);
696 fCurrentList =
new TRootIconList(
this);
697 fGarbage->Add(fCurrentList);
702 if ((fCurrentList->GetSize()==fGroupSize) && fGrouped) {
703 fCurrentList =
new TRootIconList(
this);
704 fGarbage->Add(fCurrentList);
712 void TRootIconList::Browse(TBrowser *)
714 if (!fIconBox)
return;
718 const TGPicture *pic = 0;
719 const TGPicture *spic = 0;
724 fIconBox->RemoveAll();
725 TObjLink *lnk = FirstLink();
728 obj = lnk->GetObject();
731 if (obj->IsA() == TKey::Class()) {
732 cl = TClass::GetClass(((TKey *)obj)->GetClassName());
734 }
else if (obj->IsA() == TKeyMapFile::Class()) {
735 cl = TClass::GetClass(((TKeyMapFile *)obj)->GetTitle());
736 }
else if (obj->InheritsFrom(
"TRemoteObject")) {
738 TRemoteObject *robj = (TRemoteObject *)obj;
739 cl = TClass::GetClass(robj->GetClassName());
744 name = obj->GetName();
746 if (key && obj->IsA() == TKey::Class()) {
748 name += key->GetCycle();
751 fIconBox->GetObjPictures(&pic, &spic, obj, obj->GetIconName() ?
752 obj->GetIconName() : cl->GetName());
754 fi =
new TRootObjItem((
const TGWindow*)fIconBox, pic, spic,
new TGString(name.Data()),
755 obj, cl, (EListViewMode)fIconBox->GetViewMode());
756 fi->SetUserData(obj);
757 fIconBox->AddItem(fi);
760 if (obj==fIconBox->fActiveObject) {
761 fIconBox->ActivateItem((TGFrameElement*)fIconBox->fList->Last());
765 fIconBox->fGarbage->Remove(
this);
766 fIconBox->RemoveGarbage();
767 fIconBox->fGarbage->Add(
this);
770 fIconBox->AdjustPosition();
772 fIconBox->fWasGrouped = kTRUE;
778 void *TRootIconBox::FindItem(
const TString& name, Bool_t direction,
779 Bool_t caseSensitive,Bool_t beginWith)
782 return TGContainer::FindItem(name, direction, caseSensitive, beginWith);
785 if (name.IsNull())
return 0;
788 TGFrameElement* el = 0;
790 TString::ECaseCompare cmp = caseSensitive ? TString::kExact : TString::kIgnoreCase;
792 fLastDir = direction;
793 fLastCase = caseSensitive;
800 el = (TGFrameElement *)fList->After(el);
802 el = (TGFrameElement *)fList->Before(el);
805 if (direction) el = (TGFrameElement *)fList->First();
806 else el = (TGFrameElement *)fList->Last();
814 lv = (TGLVEntry*)el->fFrame;
815 li = (TList*)lv->GetUserData();
819 while ((obj=next())) {
820 str = obj->GetName();
821 idx = str.Index(name,0,cmp);
836 el = (TGFrameElement *)fList->After(el);
838 el = (TGFrameElement *)fList->Before(el);
849 void TRootIconBox::SetObjHeaders()
851 fListView->SetHeaders(2);
852 fListView->SetHeader(
"Name", kTextLeft, kTextLeft, 0);
853 fListView->SetHeader(
"Title", kTextLeft, kTextLeft, 1);
860 void TRootIconBox::Refresh()
866 SendMessage(fMsgWindow, MK_MSG(kC_CONTAINER, kCT_SELCHANGED), fTotal, fSelected);
869 fListView->AdjustHeaders();
875 void TRootIconBox::RemoveAll()
877 if (fIsEmpty)
return;
879 fCheckHeaders = kTRUE;
880 TGFileContainer::RemoveAll();
895 ClassImp(TRootBrowserLite);
900 TRootBrowserLite::TRootBrowserLite(TBrowser *b,
const char *name, UInt_t width, UInt_t height)
901 : TGMainFrame(gClient->GetDefaultRoot(), width, height), TBrowserImp(b)
905 Resize(width, height);
912 TRootBrowserLite::TRootBrowserLite(TBrowser *b,
const char *name, Int_t x, Int_t y,
913 UInt_t width, UInt_t height)
914 : TGMainFrame(gClient->GetDefaultRoot(), width, height), TBrowserImp(b)
918 MoveResize(x, y, width, height);
926 TRootBrowserLite::~TRootBrowserLite()
928 if (fIconPic) gClient->FreePicture(fIconPic);
954 delete fMenuBarLayout;
955 delete fMenuBarItemLayout;
956 delete fMenuBarHelpLayout;
961 if (fWidgets) fWidgets->Delete();
971 void TRootBrowserLite::CreateBrowser(
const char *name)
973 fWidgets =
new TList;
974 fHistory =
new TRootBrowserHistory;
976 fBrowseTextFile = kFALSE;
979 fFileMenu =
new TGPopupMenu(fClient->GetDefaultRoot());
980 fFileMenu->AddEntry(
"&New Browser", kFileNewBrowser);
981 fFileMenu->AddEntry(
"New Browser &Lite", kFileNewBrowserLite);
982 fFileMenu->AddEntry(
"New Canvas", kFileNewCanvas);
983 fFileMenu->AddEntry(
"&Gui Builder", kFileNewBuilder);
984 fFileMenu->AddEntry(
"&Open...", kFileOpen);
985 fFileMenu->AddSeparator();
986 fFileMenu->AddEntry(
"&Save", kFileSave);
987 fFileMenu->AddEntry(
"Save &As...", kFileSaveAs);
988 fFileMenu->AddSeparator();
989 fFileMenu->AddEntry(
"&Print...", kFilePrint);
990 fFileMenu->AddSeparator();
991 fFileMenu->AddEntry(
"&Close Browser", kFileCloseBrowser);
992 fFileMenu->AddSeparator();
993 fFileMenu->AddEntry(
"&Quit ROOT", kFileQuit);
996 fFileMenu->DisableEntry(kFileSave);
997 fFileMenu->DisableEntry(kFileSaveAs);
998 fFileMenu->DisableEntry(kFilePrint);
1000 fSortMenu =
new TGPopupMenu(fClient->GetDefaultRoot());
1001 fSortMenu->AddEntry(
"By &Name", kViewArrangeByName);
1002 fSortMenu->AddEntry(
"By &Type", kViewArrangeByType);
1003 fSortMenu->AddEntry(
"By &Size", kViewArrangeBySize);
1004 fSortMenu->AddEntry(
"By &Date", kViewArrangeByDate);
1005 fSortMenu->AddSeparator();
1006 fSortMenu->AddEntry(
"&Auto Arrange", kViewArrangeAuto);
1008 fSortMenu->CheckEntry(kViewArrangeAuto);
1010 fViewMenu =
new TGPopupMenu(fClient->GetDefaultRoot());
1011 fViewMenu->AddEntry(
"&Toolbar", kViewToolBar);
1012 fViewMenu->AddEntry(
"Status &Bar", kViewStatusBar);
1013 fViewMenu->AddSeparator();
1014 fViewMenu->AddEntry(
"Lar&ge Icons", kViewLargeIcons);
1015 fViewMenu->AddEntry(
"S&mall Icons", kViewSmallIcons);
1016 fViewMenu->AddEntry(
"&List", kViewList);
1017 fViewMenu->AddEntry(
"&Details", kViewDetails);
1018 fViewMenu->AddSeparator();
1019 fViewMenu->AddEntry(
"Show &Hidden", kViewHidden);
1020 fViewMenu->AddPopup(
"Arrange &Icons", fSortMenu);
1021 fViewMenu->AddEntry(
"Lin&e up Icons", kViewLineUp);
1022 fViewMenu->AddEntry(
"&Group Icons", kViewGroupLV);
1024 fViewMenu->AddSeparator();
1025 fViewMenu->AddEntry(
"&Refresh (F5)", kViewRefresh);
1027 fViewMenu->CheckEntry(kViewToolBar);
1028 fViewMenu->CheckEntry(kViewStatusBar);
1031 if (gEnv->GetValue(
"Browser.ShowHidden", 0)) {
1032 fViewMenu->CheckEntry(kViewHidden);
1033 fBrowser->SetBit(TBrowser::kNoHidden, kFALSE);
1035 fViewMenu->UnCheckEntry(kViewHidden);
1036 fBrowser->SetBit(TBrowser::kNoHidden, kTRUE);
1040 fOptionMenu =
new TGPopupMenu(fClient->GetDefaultRoot());
1041 fOptionMenu->AddEntry(
"&Show Cycles", kOptionShowCycles);
1042 fOptionMenu->AddEntry(
"&AutoThumbnail", kOptionAutoThumbnail);
1044 fHelpMenu =
new TGPopupMenu(fClient->GetDefaultRoot());
1045 fHelpMenu->AddEntry(
"&About ROOT...", kHelpAbout);
1046 fHelpMenu->AddSeparator();
1047 fHelpMenu->AddEntry(
"Help On Browser...", kHelpOnBrowser);
1048 fHelpMenu->AddEntry(
"Help On Canvas...", kHelpOnCanvas);
1049 fHelpMenu->AddEntry(
"Help On Menus...", kHelpOnMenus);
1050 fHelpMenu->AddEntry(
"Help On Graphics Editor...", kHelpOnGraphicsEd);
1051 fHelpMenu->AddEntry(
"Help On Objects...", kHelpOnObjects);
1052 fHelpMenu->AddEntry(
"Help On PostScript...", kHelpOnPS);
1053 fHelpMenu->AddEntry(
"Help On Remote Session...", kHelpOnRemote);
1056 fFileMenu->Associate(
this);
1057 fViewMenu->Associate(
this);
1058 fSortMenu->Associate(
this);
1059 fOptionMenu->Associate(
this);
1060 fHelpMenu->Associate(
this);
1063 fMenuBarLayout =
new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 0, 0, 1, 1);
1064 fMenuBarItemLayout =
new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 0, 0);
1065 fMenuBarHelpLayout =
new TGLayoutHints(kLHintsTop | kLHintsRight);
1068 fMenuBar =
new TGMenuBar(
this, 1, 1, kHorizontalFrame);
1069 fMenuBar->AddPopup(
"&File", fFileMenu, fMenuBarItemLayout);
1070 fMenuBar->AddPopup(
"&View", fViewMenu, fMenuBarItemLayout);
1071 fMenuBar->AddPopup(
"&Options", fOptionMenu, fMenuBarItemLayout);
1072 fMenuBar->AddPopup(
"&Help", fHelpMenu, fMenuBarHelpLayout);
1074 AddFrame(fMenuBar, fMenuBarLayout);
1078 fToolBarSep =
new TGHorizontal3DLine(
this);
1079 fToolBar =
new TGToolBar(
this, 60, 20, kHorizontalFrame);
1080 fFSComboBox =
new TGFSComboBox(fToolBar, kFSComboBox);
1082 fComboLayout =
new TGLayoutHints(kLHintsLeft | kLHintsExpandY, 0, 0, 2, 2);
1083 fToolBar->AddFrame(fFSComboBox, fComboLayout);
1084 fFSComboBox->Resize(190, fFSComboBox->GetDefaultHeight());
1085 fFSComboBox->Associate(
this);
1089 for (
int i = 0; gToolBarData[i].fPixmap; i++) {
1090 if (strlen(gToolBarData[i].fPixmap) == 0) {
1094 fToolBar->AddButton(
this, &gToolBarData[i], spacing);
1098 fDrawOption =
new TGComboBox(fToolBar,
"");
1099 TGTextEntry *dropt_entry = fDrawOption->GetTextEntry();
1100 dropt_entry->SetToolTipText(
"Object Draw Option", 300);
1101 fDrawOption->Resize(80, 10);
1102 TGListBox *lb = fDrawOption->GetListBox();
1103 lb->Resize(lb->GetWidth(), 120);
1105 fDrawOption->AddEntry(
"", dropt++);
1106 fDrawOption->AddEntry(
"same", dropt++);
1107 fDrawOption->AddEntry(
"box", dropt++);
1108 fDrawOption->AddEntry(
"lego", dropt++);
1109 fDrawOption->AddEntry(
"colz", dropt++);
1110 fDrawOption->AddEntry(
"alp", dropt++);
1111 fDrawOption->AddEntry(
"text", dropt++);
1113 fToolBar->AddFrame(fDrawOption,
new TGLayoutHints(kLHintsCenterY | kLHintsRight | kLHintsExpandY,2,2,2,0));
1114 fToolBar->AddFrame(
new TGLabel(fToolBar,
"Option"),
1115 new TGLayoutHints(kLHintsCenterY | kLHintsRight, 2,2,2,0));
1117 fBarLayout =
new TGLayoutHints(kLHintsTop | kLHintsExpandX);
1118 AddFrame(fToolBarSep, fBarLayout);
1119 AddFrame(fToolBar, fBarLayout);
1123 fHf =
new TGHorizontalFrame(
this, 10, 10);
1125 fV1 =
new TGVerticalFrame(fHf, 10, 10, kFixedWidth);
1126 fV2 =
new TGVerticalFrame(fHf, 10, 10);
1127 fTreeHdr =
new TGCompositeFrame(fV1, 10, 10, kSunkenFrame);
1128 fListHdr =
new TGCompositeFrame(fV2, 10, 10, kSunkenFrame);
1130 fLbl1 =
new TGLabel(fTreeHdr,
"All Folders");
1131 fLbl2 =
new TGLabel(fListHdr,
"Contents of \".\"");
1135 lo =
new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 3, 0, 0, 0);
1137 fTreeHdr->AddFrame(fLbl1, lo);
1138 fListHdr->AddFrame(fLbl2, lo);
1140 lo =
new TGLayoutHints(kLHintsTop | kLHintsExpandX, 0, 0, 1, 2);
1142 fV1->AddFrame(fTreeHdr, lo);
1143 fV2->AddFrame(fListHdr, lo);
1145 fV1->Resize(fTreeHdr->GetDefaultWidth()+100, fV1->GetDefaultHeight());
1147 lo =
new TGLayoutHints(kLHintsLeft | kLHintsExpandY);
1149 fHf->AddFrame(fV1, lo);
1151 TGVSplitter *splitter =
new TGVSplitter(fHf);
1152 splitter->SetFrame(fV1, kTRUE);
1153 lo =
new TGLayoutHints(kLHintsLeft | kLHintsExpandY);
1154 fWidgets->Add(splitter);
1156 fHf->AddFrame(splitter, lo);
1158 lo =
new TGLayoutHints(kLHintsRight | kLHintsExpandX | kLHintsExpandY);
1160 fHf->AddFrame(fV2, lo);
1163 fTreeView =
new TGCanvas(fV1, 10, 10, kSunkenFrame | kDoubleBorder);
1164 fLt =
new TGListTree(fTreeView, kHorizontalFrame,fgWhitePixel);
1165 fLt->Associate(
this);
1168 fExpandLayout =
new TGLayoutHints(kLHintsExpandX | kLHintsExpandY);
1169 fWidgets->Add(fExpandLayout);
1170 fV1->AddFrame(fTreeView, fExpandLayout);
1173 fListView =
new TGListView(fV2, 520, 250);
1175 fIconBox =
new TRootIconBox(
this, fListView, kHorizontalFrame, fgWhitePixel);
1176 fIconBox->Associate(
this);
1177 fListView->SetIncrements(1, 19);
1178 fViewMode = fListView->GetViewMode();
1180 TString str = gEnv->GetValue(
"Browser.AutoThumbnail",
"yes");
1182 fIconBox->fAutoThumbnail = (str ==
"yes") || atoi(str.Data());
1183 fIconBox->fAutoThumbnail ? fOptionMenu->CheckEntry(kOptionAutoThumbnail) :
1184 fOptionMenu->UnCheckEntry(kOptionAutoThumbnail);
1186 str = gEnv->GetValue(
"Browser.GroupView",
"10000");
1187 Int_t igv = atoi(str.Data());
1190 fViewMenu->CheckEntry(kViewGroupLV);
1191 fIconBox->SetGroupSize(igv);
1195 fV2->AddFrame(fListView, fExpandLayout);
1201 int parts[] = { 26, 74 };
1202 fStatusBar =
new TGStatusBar(
this, 60, 10);
1203 fStatusBar->SetParts(parts, 2);
1204 lo =
new TGLayoutHints(kLHintsBottom | kLHintsExpandX, 0, 0, 3, 0);
1205 AddFrame(fStatusBar, lo);
1210 TString bname(name);
1211 bname.Prepend(
"Old ");
1212 SetWindowName(bname.Data());
1213 SetIconName(bname.Data());
1214 fIconPic = SetIconPixmap(
"rootdb_s.xpm");
1215 SetClassHints(
"ROOT",
"Browser");
1217 SetWMSizeHints(600, 350, 10000, 10000, 2, 2);
1222 gVirtualX->GrabKey(fId, gVirtualX->KeysymToKeycode(kKey_Escape), 0, kTRUE);
1223 gVirtualX->GrabKey(fId, gVirtualX->KeysymToKeycode(kKey_F5), 0, kTRUE);
1224 gVirtualX->GrabKey(fId, gVirtualX->KeysymToKeycode(kKey_Right), kKeyMod1Mask, kTRUE);
1225 gVirtualX->GrabKey(fId, gVirtualX->KeysymToKeycode(kKey_Left), kKeyMod1Mask, kTRUE);
1227 SetEditDisabled(kEditDisable);
1229 gVirtualX->SetDNDAware(fId, fDNDTypeList);
1233 ShowMacroButtons(kFALSE);
1235 printf(
"\n You are using the old ROOT browser! A new version is available. To use it:\n");
1236 printf(
" Select the \"New Browser\" entry from the \"File\" menu in the browser, or change\n");
1237 printf(
" \"Browser.Name:\" from \"TRootBrowserLite\" to \"TRootBrowser\" in system.rootrc\n\n");
1239 Connect(fLt,
"Checked(TObject*, Bool_t)",
"TRootBrowserLite",
1240 this,
"Checked(TObject *,Bool_t)");
1246 Bool_t TRootBrowserLite::HandleKey(Event_t *event)
1248 if (event->fType == kGKeyPress) {
1251 gVirtualX->LookupString(event, input,
sizeof(input), keysym);
1253 if (!event->fState && (EKeySym)keysym == kKey_F5) {
1257 if (!event->fState && (EKeySym)keysym == kKey_Escape) {
1258 if (gDNDManager->IsDragging()) gDNDManager->EndDrag();
1261 if (event->fState & kKeyMod1Mask) {
1262 switch ((EKeySym)keysym & ~0x20) {
1274 return TGMainFrame::HandleKey(event);
1283 void TRootBrowserLite::Add(TObject *obj,
const char *name, Int_t check)
1287 if (obj->InheritsFrom(
"TObjectSpy"))
1289 if (!name) name = obj->GetName();
1291 AddToBox(obj, name);
1294 TIter next(fIconBox->fList);
1295 if (!obj->IsFolder()) {
1296 while ((el = (TGFrameElement *) next())) {
1297 TGLVEntry *f = (TGLVEntry *) el->fFrame;
1298 if (f->GetUserData() == obj) {
1299 f->SetCheckedEntry(check);
1306 if (name[0] ==
'.' && ((name[1] ==
'\0') || (name[1] ==
'.' && name[2] ==
'\0')))
1309 if (obj->IsFolder())
1310 AddToTree(obj, name, check);
1317 void TRootBrowserLite::AddCheckBox(TObject *obj, Bool_t check)
1320 TGListTreeItem *item = fLt->FindItemByObj(fLt->GetFirstItem(), obj);
1322 fLt->SetCheckBox(item, kTRUE);
1323 fLt->CheckItem(item, check);
1324 item = fLt->FindItemByObj(item->GetNextSibling(), obj);
1327 TIter next(fIconBox->fList);
1328 while ((el = (TGFrameElement *) next())) {
1329 TGLVEntry *f = (TGLVEntry *) el->fFrame;
1330 if (f->GetUserData() == obj) {
1331 f->SetCheckedEntry(check);
1341 void TRootBrowserLite::CheckObjectItem(TObject *obj, Bool_t check)
1344 TGListTreeItem *item = fLt->FindItemByObj(fLt->GetFirstItem(), obj);
1346 fLt->CheckItem(item, check);
1347 item = fLt->FindItemByObj(item->GetNextSibling(), obj);
1349 TIter next(fIconBox->fList);
1350 if (!obj->IsFolder()) {
1351 while ((el = (TGFrameElement *) next())) {
1352 TGLVEntry *f = (TGLVEntry *) el->fFrame;
1353 if (f->GetUserData() == obj) {
1354 f->SetCheckedEntry(check);
1365 void TRootBrowserLite::RemoveCheckBox(TObject *obj)
1368 TGListTreeItem *item = fLt->FindItemByObj(fLt->GetFirstItem(), obj);
1370 fLt->SetCheckBox(item, kFALSE);
1371 item = fLt->FindItemByObj(item->GetNextSibling(), obj);
1373 TIter next(fIconBox->fList);
1374 if (!obj->IsFolder()) {
1375 while ((el = (TGFrameElement *) next())) {
1376 TGLVEntry *f = (TGLVEntry *) el->fFrame;
1377 if (f->GetUserData() == obj) {
1378 f->SetCheckedEntry(kFALSE);
1389 void TRootBrowserLite::AddToBox(TObject *obj,
const char *name)
1392 if (!name) name = obj->GetName() ? obj->GetName() :
"NoName";
1395 TClass *objClass = 0;
1397 if (obj->IsA() == TKey::Class())
1398 objClass = TClass::GetClass(((TKey *)obj)->GetClassName());
1399 else if (obj->IsA() == TKeyMapFile::Class())
1400 objClass = TClass::GetClass(((TKeyMapFile *)obj)->GetTitle());
1401 else if (obj->InheritsFrom(
"TRemoteObject")) {
1403 TRemoteObject *robj = (TRemoteObject *)obj;
1404 if (!strcmp(robj->GetClassName(),
"TKey"))
1405 objClass = TClass::GetClass(robj->GetKeyClassName());
1407 objClass = TClass::GetClass(robj->GetClassName());
1410 objClass = obj->IsA();
1412 fIconBox->AddObjItem(name, obj, objClass);
1419 void TRootBrowserLite::AddToTree(TObject *obj,
const char *name, Int_t check)
1423 if (obj->InheritsFrom(
"TApplication"))
1426 if (!name) name = obj->GetName();
1427 if (name[0] ==
'.' && name[1] ==
'.')
1428 Info(
"AddToTree",
"up one level %s", name);
1430 TGListTreeItem *item = fLt->AddItem(fListLevel, name, obj, 0, 0, kTRUE);
1431 if (item) fLt->CheckItem(item, (Bool_t)check);
1432 TString tip(obj->ClassName());
1433 if (obj->GetTitle()) {
1435 tip += obj->GetTitle();
1437 fLt->SetToolTipItem(item, tip.Data());
1440 if (obj->InheritsFrom(
"TRemoteObject")) {
1442 }
else if (fListLevel) {
1444 TGListTreeItem *top = fListLevel;
1445 while (top->GetParent()) {
1446 TObject *tobj = (TObject *) top->GetUserData();
1447 if (tobj && (tobj->InheritsFrom(
"TRemoteObject") ||
1448 tobj->InheritsFrom(
"TApplicationRemote"))) {
1451 top = top->GetParent();
1455 if ((!fLt->FindChildByName(fListLevel, name)) &&
1456 (!fLt->FindChildByData(fListLevel, obj))) {
1457 TGListTreeItem *it = fLt->AddItem(fListLevel, name, obj);
1458 Long64_t bsize, fsize, objsize = 0;
1459 TString objinfo = obj->GetObjectInfo(1, 1);
1460 TString infos = obj->GetName();
1462 infos += obj->GetTitle();
1463 if (!objinfo.IsNull() && !objinfo.BeginsWith(
"x=")) {
1464 objsize = objinfo.Atoll();
1467 bsize = fsize = objsize;
1472 infos += TString::Format(
"Size: %lld.%lldM", fsize/1024,
1475 infos += TString::Format(
"Size: %lld.%lldK", bsize/1024,
1479 infos += TString::Format(
"Size: %lld bytes", bsize);
1484 it->SetTipText(infos.Data());
1495 void TRootBrowserLite::BrowseObj(TObject *obj)
1497 TGPosition pos = fIconBox->GetPagePosition();
1498 Emit(
"BrowseObj(TObject*)", (Long_t)obj);
1501 if (!fLt->FindItemByObj(fLt->GetFirstItem(), obj)) {
1504 fListLevel = fLt->FindItemByObj(fLt->GetFirstItem(), obj);
1505 fLt->HighlightItem(fListLevel);
1506 if (obj->IsFolder())
1507 fLt->OpenItem(fListLevel);
1508 fLt->ClearViewPort();
1509 fLt->AdjustPosition(fListLevel);
1513 if (obj->IsFolder()) fIconBox->RemoveAll();
1514 obj->Browse(fBrowser);
1515 if ((fListLevel && obj->IsFolder()) || (!fListLevel && (obj == gROOT))) {
1516 fIconBox->Refresh();
1520 fBrowser->SetRefreshFlag(kFALSE);
1524 fIconBox->SetHsbPosition(pos.fX);
1525 fIconBox->SetVsbPosition(pos.fY);
1531 void TRootBrowserLite::UpdateDrawOption()
1533 TString opt = GetDrawOption();
1534 TGListBox *lb = fDrawOption->GetListBox();
1535 TGLBContainer *lbc = (TGLBContainer *)lb->GetContainer();
1537 TIter next(lbc->GetList());
1540 while ((el = (TGFrameElement *)next())) {
1541 TGTextLBEntry *lbe = (TGTextLBEntry *)el->fFrame;
1542 if (lbe->GetText()->GetString() == opt) {
1547 Int_t nn = fDrawOption->GetNumberOfEntries() + 1;
1548 fDrawOption->AddEntry(opt.Data(), nn);
1549 fDrawOption->Select(nn);
1555 TGFileContainer *TRootBrowserLite::GetIconBox()
const
1557 return (TGFileContainer*)fIconBox;
1563 void TRootBrowserLite::ReallyDelete()
1565 fBrowser->SetBrowserImp(0);
1572 void TRootBrowserLite::CloseWindow()
1581 void TRootBrowserLite::DisplayTotal(Int_t total, Int_t selected)
1587 fmt =
"%d Object%s, %d selected.";
1589 fmt =
"%d Object%s.";
1591 snprintf(tmp, 64, fmt, total, (total == 1) ?
"" :
"s", selected);
1592 fStatusBar->SetText(tmp, 0);
1598 void TRootBrowserLite::DisplayDirectory()
1600 char *p, path[1024];
1602 fLt->GetPathnameFromItem(fListLevel, path, 12);
1604 while (*p && *(p+1) ==
'/') ++p;
1606 fLbl2->SetText(
new TGString(
"Contents of \".\""));
1608 fLbl2->SetText(
new TGString(Form(
"Contents of \"%s\"", p)));
1612 fLt->GetPathnameFromItem(fListLevel, path);
1614 while (*p && *(p+1) ==
'/') ++p;
1615 fFSComboBox->Update(p);
1619 TGButton *btn = fToolBar->GetButton(kOneLevelUp);
1620 const char *dirname = gSystem->DirName(p);
1623 TObject *obj = (TObject*)fListLevel->GetUserData();
1624 disableUp = (strlen(dirname) == 1) && (*dirname ==
'/');
1627 if (disableUp && (obj) && (obj->IsA() == TSystemDirectory::Class())) {
1628 disableUp = strlen(p) == 1;
1630 btn->SetState(disableUp ? kButtonDisabled : kButtonUp);
1631 AddToHistory(fListLevel);
1640 void TRootBrowserLite::ExecuteDefaultAction(TObject *obj)
1642 TRootBrowserCursorSwitcher cursorSwitcher(fIconBox, fLt);
1644 fBrowser->SetDrawOption(GetDrawOption());
1645 TVirtualPad *wasp = gPad ? (TVirtualPad*)gPad->GetCanvas() : 0;
1646 TFile *wasf = gFile;
1649 if (obj->IsA() == TSystemFile::Class() ||
1650 obj->InheritsFrom(
"TRemoteObject")) {
1652 TString ext = obj->GetName();
1654 if (fClient->GetMimeTypeList()->GetAction(obj->GetName(), action)) {
1656 act.ReplaceAll(
"%s", obj->GetName());
1657 gInterpreter->SaveGlobalsContext();
1659 if (act[0] ==
'!') {
1661 gSystem->Exec(act.Data());
1664 if (obj->InheritsFrom(
"TRemoteObject"))
1665 gApplication->SetBit(TApplication::kProcessRemotely);
1666 gApplication->ProcessLine(act.Data());
1668 Emit(
"ExecuteDefaultAction(TObject*)", (Long_t)obj);
1672 if (obj->InheritsFrom(
"TRemoteObject") && ext.EndsWith(
".root")) {
1673 TRootBrowserCursorSwitcher cursorSwitcher2(fIconBox, fLt);
1674 gApplication->SetBit(TApplication::kProcessRemotely);
1675 gApplication->ProcessLine(
"((TApplicationServer *)gApplication)->BrowseFile(0);");
1679 if (gFile && (wasf != gFile) && ext.EndsWith(
".root")) {
1680 TGListTreeItem *itm = fLt->FindChildByData(0, gROOT->GetListOfFiles());
1683 fLt->ClearHighlighted();
1685 ListTreeHighlight(fListLevel);
1686 fLt->OpenItem(fListLevel);
1687 itm = fLt->AddItem(fListLevel, gFile->GetName());
1688 itm->SetUserData(gFile);
1689 fClient->NeedRedraw(fLt, kTRUE);
1695 if (!obj->InheritsFrom(
"TRemoteObject"))
1696 BrowseTextFile(obj->GetName());
1699 TVirtualPad *nowp = gPad ? (TVirtualPad*)gPad->GetCanvas() : 0;
1701 if (fIconBox->fAutoThumbnail && nowp && (nowp != wasp)) {
1702 TSystemFile *sf = (TSystemFile*)obj;
1703 const TGPicture *pic, *spic;
1705 TIconBoxThumb *thumb = 0;
1706 TString path = gSystem->IsAbsoluteFileName(sf->GetName()) ? sf->GetName() :
1707 gSystem->ConcatFileName(gSystem->WorkingDirectory(), sf->GetName());
1709 thumb = (TIconBoxThumb*)fIconBox->fThumbnails->FindObject(path);
1712 spic = thumb->fSmall;
1713 pic = thumb->fLarge;
1715 TImage *img = TImage::Create();
1720 if (!img->IsValid()) {
1724 static const UInt_t sz = 72;
1728 if (img->GetWidth() > img->GetHeight()) {
1729 h = (img->GetHeight()*sz)/img->GetWidth();
1731 w = (img->GetWidth()*sz)/img->GetHeight();
1734 w = w < 54 ? 54 : w;
1735 h = h < 54 ? 54 : h;
1738 img->Merge(img,
"tint");
1739 img->DrawBox(0, 0, w, h,
"#ffff00", 1);
1741 pic = fClient->GetPicturePool()->GetPicture(path.Data(), img->GetPixmap(), 0);
1742 img->Scale(w/3, h/3);
1743 spic = fClient->GetPicturePool()->GetPicture(path.Data(), img->GetPixmap(), 0);
1745 thumb =
new TIconBoxThumb(path.Data(), spic, pic);
1746 fIconBox->fThumbnails->Add(thumb);
1760 Bool_t TRootBrowserLite::ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2)
1762 TRootHelpDialog *hd;
1763 TRootBrowserCursorSwitcher *cursorSwitcher = 0;
1764 TDirectory *tdir = 0;
1767 if (GET_SUBMSG(msg) != kCT_SELCHANGED) {
1768 cursorSwitcher =
new TRootBrowserCursorSwitcher(fIconBox, fLt);
1772 TGListTreeItem *item = 0;
1774 gVirtualX->Update();
1776 switch (GET_MSG(msg)) {
1780 switch (GET_SUBMSG(msg)) {
1786 switch ((ERootBrowserCommands)parm1) {
1788 case kFileNewBrowserLite:
1789 new TBrowser(
"Browser",
"ROOT Object Browser");
1791 case kFileNewBrowser:
1792 gEnv->SetValue(
"Browser.Name",
"TRootBrowser");
1794 gEnv->SetValue(
"Browser.Name",
"TRootBrowserLite");
1796 case kFileNewCanvas:
1797 gROOT->MakeDefCanvas();
1799 case kFileNewBuilder:
1800 TGuiBuilder::Instance();
1804 static TString dir(
".");
1806 fi.fFileTypes = gOpenTypes;
1807 fi.fIniDir = StrDup(dir);
1808 new TGFileDialog(fClient->GetDefaultRoot(),
this,
1811 if (fi.fMultipleSelection && fi.fFileNamesList) {
1813 TIter next(fi.fFileNamesList);
1814 while ((el = (TObjString *) next())) {
1815 new TFile(el->GetString(),
"update");
1818 else if (fi.fFilename) {
1819 new TFile(fi.fFilename,
"update");
1828 case kFileCloseBrowser:
1832 gApplication->Terminate(0);
1837 if (fViewMenu->IsEntryChecked(kViewToolBar))
1838 ShowToolBar(kFALSE);
1842 case kViewStatusBar:
1843 if (fViewMenu->IsEntryChecked(kViewStatusBar))
1844 ShowStatusBar(kFALSE);
1848 case kViewLargeIcons:
1849 case kViewSmallIcons:
1852 SetViewMode((Int_t)parm1);
1855 if (fBrowser->TestBit(TBrowser::kNoHidden)) {
1856 fViewMenu->CheckEntry(kViewHidden);
1857 fBrowser->SetBit(TBrowser::kNoHidden, kFALSE);
1859 fViewMenu->UnCheckEntry(kViewHidden);
1860 fBrowser->SetBit(TBrowser::kNoHidden, kTRUE);
1864 case kViewArrangeByName:
1865 case kViewArrangeByType:
1866 case kViewArrangeBySize:
1867 case kViewArrangeByDate:
1868 SetSortMode((Int_t)parm1);
1876 if (!fViewMenu->IsEntryChecked(kViewGroupLV)) {
1877 fViewMenu->CheckEntry(kViewGroupLV);
1878 TString gv = gEnv->GetValue(
"Browser.GroupView",
"10000");
1879 Int_t igv = atoi(gv.Data());
1882 fIconBox->SetGroupSize(igv);
1885 fViewMenu->UnCheckEntry(kViewGroupLV);
1886 fIconBox->SetGroupSize(10000000);
1891 case kOptionShowCycles:
1892 printf(
"Currently the browser always shows all cycles\n");
1895 case kOptionAutoThumbnail:
1896 if (fOptionMenu->IsEntryChecked(kOptionAutoThumbnail)) {
1897 fOptionMenu->UnCheckEntry(kOptionAutoThumbnail);
1898 fIconBox->fThumbnails->Delete();
1899 fIconBox->fAutoThumbnail = kFALSE;
1902 fOptionMenu->CheckEntry(kOptionAutoThumbnail);
1903 fIconBox->fAutoThumbnail = kTRUE;
1910 if (fBrowseTextFile) {
1914 if (!fListLevel || !fListLevel->IsActive())
break;
1916 if (fListLevel && fIconBox->WasGrouped()) {
1918 item = fListLevel->GetParent();
1919 if (item) fListLevel = item;
1920 obj = (TObject *) fListLevel->GetUserData();
1921 HighlightListLevel();
1922 if (obj) BrowseObj(obj);
1925 fClient->NeedRedraw(fLt, kTRUE);
1928 if (fListLevel) item = fListLevel->GetParent();
1933 obj = (TObject *)fListLevel->GetUserData();
1934 HighlightListLevel();
1936 if (obj) BrowseObj(obj);
1937 fClient->NeedRedraw(fLt, kTRUE);
1939 obj = (TObject *)fListLevel->GetUserData();
1940 if (obj) ToSystemDirectory(gSystem->DirName(obj->GetTitle()));
1961 TString rootx = TROOT::GetBinDir() +
"/root -a &";
1962 gSystem->Exec(rootx);
1965 new TWin32SplashThread(kTRUE);
1968 sprintf(str,
"About ROOT %s...", gROOT->GetVersion());
1969 hd =
new TRootHelpDialog(
this, str, 600, 400);
1970 hd->SetText(gHelpAbout);
1977 hd =
new TRootHelpDialog(
this,
"Help on Canvas...", 600, 400);
1978 hd->SetText(gHelpCanvas);
1982 hd =
new TRootHelpDialog(
this,
"Help on Menus...", 600, 400);
1983 hd->SetText(gHelpPullDownMenus);
1986 case kHelpOnGraphicsEd:
1987 hd =
new TRootHelpDialog(
this,
"Help on Graphics Editor...", 600, 400);
1988 hd->SetText(gHelpGraphicsEditor);
1991 case kHelpOnBrowser:
1992 hd =
new TRootHelpDialog(
this,
"Help on Browser...", 600, 400);
1993 hd->SetText(gHelpBrowserLite);
1996 case kHelpOnObjects:
1997 hd =
new TRootHelpDialog(
this,
"Help on Objects...", 600, 400);
1998 hd->SetText(gHelpObjects);
2002 hd =
new TRootHelpDialog(
this,
"Help on PostScript...", 600, 400);
2003 hd->SetText(gHelpPostscript);
2007 hd =
new TRootHelpDialog(
this,
"Help on Browser...", 600, 400);
2008 hd->SetText(gHelpRemote);
2016 if (parm1 == kFSComboBox) {
2017 TGTreeLBEntry *e = (TGTreeLBEntry *) fFSComboBox->GetSelectedEntry();
2019 const char *dirname = e->GetPath()->GetString();
2020 item = fLt->FindItemByPathname(dirname);
2023 HighlightListLevel();
2025 fClient->NeedRedraw(fLt, kTRUE);
2027 ToSystemDirectory(dirname);
2039 switch (GET_SUBMSG(msg)) {
2046 if (((EMouseButton)parm1 == kButton1) ||
2047 ((EMouseButton)parm1 == kButton3)) {
2049 TGListTreeItem *item2;
2051 if ((item2 = fLt->GetSelected()) != 0 ) {
2052 ListTreeHighlight(item2);
2053 fStatusBar->SetText(
"", 1);
2055 if (item2 && parm1 == kButton3) {
2056 Int_t x = (Int_t)(parm2 & 0xffff);
2057 Int_t y = (Int_t)((parm2 >> 16) & 0xffff);
2058 obj2 = (TObject *) item2->GetUserData();
2060 if (obj2->InheritsFrom(
"TTree")) {
2063 cmd = TString::Format(
"((TTree *)0x%lx)->GetDirectory();",
2065 tdir = (TDirectory *)gROOT->ProcessLine(cmd.Data());
2067 cmd = TString::Format(
"((TTree *)0x%lx)->SetDirectory(gDirectory);",
2069 gROOT->ProcessLine(cmd.Data());
2072 fBrowser->GetContextMenu()->Popup(x, y, obj2, fBrowser);
2075 fClient->NeedRedraw(fLt);
2076 fListView->LayoutHeader(0);
2077 fListView->Layout();
2081 case kCT_ITEMDBLCLICK:
2082 if (parm1 == kButton1) {
2083 if (fBrowseTextFile) {
2086 if (fListLevel && fIconBox->WasGrouped()) {
2088 TGListTreeItem *item2;
2091 item2 = fListLevel->GetParent();
2092 if (item2) fListLevel = item2;
2094 obj2 = (TObject *) fListLevel->GetUserData();
2095 HighlightListLevel();
2110 switch (GET_SUBMSG(msg)) {
2113 if (fIconBox->NumSelected() == 1) {
2117 if ((item2 = (TGFileItem *)fIconBox->GetNextSelected(&p)) != 0) {
2118 TObject *obj2 = (TObject *)item2->GetUserData();
2120 TGListTreeItem *itm = 0;
2121 if (!fListLevel) itm = fLt->GetFirstItem();
2122 else itm = fListLevel->GetFirstChild();
2126 if (itm->GetUserData() == obj2)
break;
2127 itm = itm->GetNextSibling();
2131 if ((fListLevel && fListLevel->IsOpen()) || !fListLevel) {
2132 fLt->ClearHighlighted();
2133 fLt->HighlightItem(itm);
2134 fClient->NeedRedraw(fLt, kTRUE);
2138 if (obj2) fStatusBar->SetText(obj2->GetName(), 1);
2141 if (parm1 == kButton3) {
2143 if (fIconBox->NumSelected() == 1) {
2146 if ((item2 = (TGFileItem *) fIconBox->GetNextSelected(&p)) != 0) {
2147 Int_t x = (Int_t)(parm2 & 0xffff);
2148 Int_t y = (Int_t)((parm2 >> 16) & 0xffff);
2149 TObject *obj2 = (TObject *)item2->GetUserData();
2151 if (obj2->IsA() == TKey::Class()) {
2152 TKey *key = (TKey*)obj2;
2153 TClass *cl = TClass::GetClass(key->GetClassName());
2154 TString name = key->GetName();
2156 name += key->GetCycle();
2158 void *add = gDirectory->FindObjectAny((
char *) name.Data());
2159 if (cl->IsTObject()) {
2160 obj2 = (TObject*)add;
2161 item2->SetUserData(obj2);
2163 Error(
"ProcessMessage",
"do not support non TObject (like %s) yet",
2168 if (obj2 && obj2->InheritsFrom(
"TTree")) {
2171 cmd = TString::Format(
"((TTree *)0x%lx)->GetDirectory();",
2173 tdir = (TDirectory *)gROOT->ProcessLine(cmd.Data());
2175 cmd = TString::Format(
"((TTree *)0x%lx)->SetDirectory(gDirectory);",
2177 gROOT->ProcessLine(cmd.Data());
2180 fBrowser->GetContextMenu()->Popup(x, y, obj2, fBrowser);
2186 case kCT_ITEMDBLCLICK:
2187 if (parm1 == kButton1) {
2188 if (fIconBox->NumSelected() == 1) {
2191 if ((item2 = (TGFileItem *) fIconBox->GetNextSelected(&p)) != 0) {
2192 TObject *obj2 = (TObject *)item2->GetUserData();
2194 DoubleClicked(obj2);
2195 IconBoxAction(obj2);
2197 delete cursorSwitcher;
2203 case kCT_SELCHANGED:
2204 DisplayTotal((Int_t)parm1, (Int_t)parm2);
2216 delete cursorSwitcher;
2218 fClient->NeedRedraw(fIconBox);
2225 void TRootBrowserLite::Chdir(TGListTreeItem *item)
2228 TGListTreeItem *i = item;
2231 TObject *obj = (TObject*) i->GetUserData();
2233 if (obj->IsA() == TDirectoryFile::Class()) {
2235 dir = obj->GetName() + dir;
2237 if (obj->IsA() == TFile::Class()) {
2239 dir = obj->GetName() + dir;
2241 if (obj->IsA() == TKey::Class()) {
2242 if (strcmp(((TKey*)obj)->GetClassName(),
"TDirectoryFile") == 0) {
2244 dir = obj->GetName() + dir;
2251 if (gDirectory && dir.Length()) gDirectory->cd(dir.Data());
2258 void TRootBrowserLite::HighlightListLevel()
2260 if (!fListLevel)
return;
2262 fLt->ClearHighlighted();
2263 fLt->HighlightItem(fListLevel);
2269 void TRootBrowserLite::AddToHistory(TGListTreeItem *item)
2271 TGButton *btn = fToolBar->GetButton(kHistoryBack);
2273 if (!item || (fHistoryCursor &&
2274 (item == ((TRootBrowserHistoryCursor*)fHistoryCursor)->fItem)))
return;
2276 TRootBrowserHistoryCursor *cur = (TRootBrowserHistoryCursor*)fHistoryCursor;
2278 while ((cur = (TRootBrowserHistoryCursor*)fHistory->After(fHistoryCursor))) {
2279 fHistory->Remove(cur);
2283 cur =
new TRootBrowserHistoryCursor(item);
2285 fHistoryCursor = cur;
2286 btn->SetState(kButtonUp);
2292 void TRootBrowserLite::ClearHistory()
2295 TGButton *btn = fToolBar->GetButton(kHistoryBack);
2296 TGButton *btn2 = fToolBar->GetButton(kHistoryForw);
2297 btn->SetState(kButtonDisabled);
2298 btn2->SetState(kButtonDisabled);
2304 Bool_t TRootBrowserLite::HistoryBackward()
2306 if (fBrowseTextFile) {
2310 TRootBrowserHistoryCursor *cur = (TRootBrowserHistoryCursor*)fHistory->Before(fHistoryCursor);
2311 TGButton *btn = fToolBar->GetButton(kHistoryBack);
2312 TGButton *btn2 = fToolBar->GetButton(kHistoryForw);
2315 btn->SetState(kButtonDisabled);
2319 fLt->ClearHighlighted();
2320 fHistoryCursor = cur;
2321 fListLevel = cur->fItem;
2322 ListTreeHighlight(fListLevel);
2323 fLt->AdjustPosition();
2324 fClient->NeedRedraw(fLt, kTRUE);
2326 btn2->SetState(kButtonUp);
2327 cur = (TRootBrowserHistoryCursor*)fHistory->Before(fHistoryCursor);
2329 btn->SetState(kButtonDisabled);
2339 Bool_t TRootBrowserLite::HistoryForward()
2341 if (fBrowseTextFile) {
2346 TRootBrowserHistoryCursor *cur = (TRootBrowserHistoryCursor*)fHistory->After(fHistoryCursor);
2347 TGButton *btn = fToolBar->GetButton(kHistoryForw);
2348 TGButton *btn2 = fToolBar->GetButton(kHistoryBack);
2351 btn->SetState(kButtonDisabled);
2355 fLt->ClearHighlighted();
2356 fHistoryCursor = cur;
2357 fListLevel = cur->fItem;
2358 ListTreeHighlight(fListLevel);
2359 fLt->AdjustPosition();
2360 fClient->NeedRedraw(fLt, kTRUE);
2362 btn2->SetState(kButtonUp);
2364 cur = (TRootBrowserHistoryCursor*)fHistory->After(fHistoryCursor);
2366 btn->SetState(kButtonDisabled);
2376 void TRootBrowserLite::DeleteListTreeItem(TGListTreeItem *item)
2378 ((TRootBrowserHistory*)fHistory)->DeleteItem(item);
2379 fLt->DeleteItem(item);
2385 void TRootBrowserLite::ListTreeHighlight(TGListTreeItem *item)
2388 TObject *obj = (TObject *) item->GetUserData();
2391 if (obj->IsA() == TKey::Class()) {
2393 TKey *key = (TKey *)obj;
2394 TString name = obj->GetName();
2396 name += key->GetCycle();
2397 Chdir(item->GetParent());
2399 TObject *k_obj = gDirectory->FindObjectAny(name);
2402 item->SetUserData(k_obj);
2405 }
else if (obj->InheritsFrom(TDirectoryFile::Class())) {
2406 Chdir(item->GetParent());
2408 else if (obj->InheritsFrom(
"TApplicationRemote")) {
2409 if (!gApplication->GetAppRemote()) {
2410 gROOT->ProcessLine(Form(
".R %s", item->GetText()));
2411 if (gApplication->GetAppRemote()) {
2412 Getlinem(kInit, TString::Format(
"\n%s:root [0]",
2413 gApplication->GetAppRemote()->ApplicationName()));
2417 else if (obj->InheritsFrom(
"TRemoteObject")) {
2419 TRemoteObject *robj = (TRemoteObject *)obj;
2421 if (!strcmp(robj->GetClassName(),
"TKey")) {
2422 TGListTreeItem *parent = item;
2423 TRemoteObject *probj = (TRemoteObject *)parent->GetUserData();
2425 while ( probj && strcmp(probj->GetClassName(),
"TFile")) {
2426 parent = parent->GetParent();
2427 probj = (TRemoteObject *)parent->GetUserData();
2431 gApplication->SetBit(TApplication::kProcessRemotely);
2432 gApplication->ProcessLine(
2433 TString::Format(
"((TApplicationServer *)gApplication)->BrowseFile(\"%s\");",
2438 if (item->GetParent() && item->GetParent()->GetUserData() &&
2439 ((TObject *)item->GetParent()->GetUserData())->InheritsFrom(
"TApplicationRemote")) {
2441 if (!gApplication->GetAppRemote()) {
2442 gROOT->ProcessLine(Form(
".R %s", item->GetParent()->GetText()));
2443 if (gApplication->GetAppRemote()) {
2444 Getlinem(kInit, TString::Format(
"\n%s:root [0]",
2445 gApplication->GetAppRemote()->ApplicationName()));
2448 else if (!strcmp(item->GetText(),
"ROOT Files")) {
2450 gApplication->SetBit(TApplication::kProcessRemotely);
2451 gApplication->ProcessLine(
"((TApplicationServer *)gApplication)->BrowseFile(0);");
2457 TGListTreeItem *top = item;
2458 while (top->GetParent()) {
2459 top = top->GetParent();
2461 TObject *topobj = (TObject *) top->GetUserData();
2462 if (topobj && topobj->InheritsFrom(
"TApplicationRemote")) {
2464 if (!gApplication->GetAppRemote()) {
2466 gROOT->ProcessLine(Form(
".R %s", top->GetText()));
2467 if (gApplication->GetAppRemote()) {
2468 Getlinem(kInit, TString::Format(
"\n%s:root [0]",
2469 gApplication->GetAppRemote()->ApplicationName()));
2473 else if (gApplication->GetAppRemote()) {
2475 gApplication->ProcessLine(
".R");
2476 Getlinem(kInit,
"\nroot [0]");
2480 if (!fListLevel || !fListLevel->IsActive()) {
2483 fLt->HighlightItem(fListLevel);
2493 void TRootBrowserLite::ToSystemDirectory(
const char *dirname)
2495 TString dir = dirname;
2498 TObject* obj = (TObject*)fListLevel->GetUserData();
2500 if (obj && (obj->IsA() == TSystemDirectory::Class())) {
2502 fListLevel->Rename(dir.Data());
2503 obj =
new TSystemDirectory(dir.Data(), dir.Data());
2504 while (fListLevel->GetFirstChild())
2505 fLt->RecursiveDeleteItem(fListLevel->GetFirstChild(),
2506 fListLevel->GetFirstChild()->GetUserData());
2508 fListLevel->SetUserData(obj);
2509 gROOT->GetListOfBrowsables()->Remove(old);
2511 gROOT->GetListOfBrowsables()->Add(obj);
2516 fClient->NeedRedraw(fLt, kTRUE);
2517 fClient->NeedRedraw(fIconBox);
2520 fStatusBar->SetText(dir.Data(), 1);
2530 void TRootBrowserLite::SetDrawOption(Option_t *option)
2532 fDrawOption->GetTextEntry()->SetText(option);
2538 Option_t *TRootBrowserLite::GetDrawOption()
const
2540 return fDrawOption->GetTextEntry()->GetText();
2545 void TRootBrowserLite::DoubleClicked(TObject *obj)
2547 Emit(
"DoubleClicked(TObject*)", (Long_t)obj);
2553 void TRootBrowserLite::Checked(TObject *obj, Bool_t checked)
2557 args[0] = (Long_t)obj;
2560 Emit(
"Checked(TObject*,Bool_t)", args);
2566 void TRootBrowserLite::IconBoxAction(TObject *obj)
2568 Bool_t browsable = kFALSE;
2569 const char *dirname = 0;
2572 TRootBrowserCursorSwitcher cursorSwitcher(fIconBox, fLt);
2574 Bool_t useLock = kTRUE;
2576 if (obj->IsA()->GetMethodWithPrototype(
"Browse",
"TBrowser*"))
2579 if (obj->InheritsFrom(
"TLeaf")) {
2580 TObject *dir = (TObject *)gROOT->ProcessLine(Form(
"((%s *)0x%lx)->GetBranch()->GetDirectory();",
2581 obj->ClassName(), (ULong_t)obj));
2586 if (obj->InheritsFrom(
"TBranchElement")) {
2587 TObject *dir = (TObject *)gROOT->ProcessLine(Form(
"((%s *)0x%lx)->GetDirectory();",
2588 obj->ClassName(), (ULong_t)obj));
2594 if (obj->InheritsFrom(
"TKey")) {
2595 TKey *key =
dynamic_cast<TKey*
>(obj);
2596 if (key && key->GetClassName() && (!strcmp(key->GetClassName(),
"TFormula")))
2600 if (obj->IsA() == TSystemDirectory::Class()) {
2603 TString t(obj->GetName());
2604 if (t ==
".")
goto out;
2606 if (fListLevel && fListLevel->GetParent()) {
2607 fListLevel = fListLevel->GetParent();
2608 obj = (TObject*)fListLevel->GetUserData();
2609 if (fListLevel->GetParent()) {
2610 fListLevel = fListLevel->GetParent();
2612 obj = (TObject*)fListLevel->GetUserData();
2616 dirname = gSystem->DirName(gSystem->pwd());
2617 ToSystemDirectory(dirname);
2623 if (obj && obj->IsFolder()) {
2624 fIconBox->RemoveAll();
2625 TGListTreeItem *itm = 0;
2628 fLt->OpenItem(fListLevel);
2629 itm = fListLevel->GetFirstChild();
2631 itm = fLt->GetFirstItem();
2634 while (itm && (itm->GetUserData() != obj)) {
2635 itm = itm->GetNextSibling();
2638 if (!itm && fListLevel) {
2640 Bool_t isRemote = kFALSE;
2641 if (obj->InheritsFrom(
"TRemoteObject"))
2643 else if (fListLevel) {
2645 TGListTreeItem *top = fListLevel;
2646 while (top->GetParent()) {
2647 TObject *tobj = (TObject *) top->GetUserData();
2648 if (tobj && (tobj->InheritsFrom(
"TRemoteObject") ||
2649 tobj->InheritsFrom(
"TApplicationRemote"))) {
2653 top = top->GetParent();
2658 if ((!fLt->FindChildByName(fListLevel, obj->GetName())) &&
2659 (!fLt->FindChildByData(fListLevel, obj))) {
2660 itm = fLt->AddItem(fListLevel, obj->GetName());
2661 if (itm) itm->SetUserData(obj);
2665 itm = fLt->FindChildByData(fListLevel, obj) ?
2666 fLt->FindChildByData(fListLevel, obj) :
2667 fLt->FindChildByName(fListLevel, obj->GetName());
2671 itm = fLt->AddItem(fListLevel, obj->GetName());
2672 if (itm) itm->SetUserData(obj);
2679 TObject *kobj = (TObject *)itm->GetUserData();
2681 if (kobj && kobj->IsA() == TKey::Class()) {
2682 Chdir(fListLevel->GetParent());
2684 kobj = gDirectory->FindObjectAny(kobj->GetName());
2687 TGListTreeItem *parent = fListLevel->GetParent();
2688 DeleteListTreeItem(fListLevel);
2689 TGListTreeItem *kitem = fLt->AddItem(parent, kobj->GetName(), kobj);
2693 kitem->SetUserData(kobj);
2696 fListLevel = parent;
2699 HighlightListLevel();
2704 if (useLock) fTreeLock = kTRUE;
2705 Emit(
"BrowseObj(TObject*)", (Long_t)obj);
2706 if (obj) obj->Browse(fBrowser);
2707 if (useLock) fTreeLock = kFALSE;
2711 if (obj && obj->IsA() != TSystemFile::Class()) {
2712 if (obj->IsFolder()) {
2713 fIconBox->Refresh();
2717 fBrowser->SetRefreshFlag(kFALSE);
2720 fClient->NeedRedraw(fIconBox);
2721 fClient->NeedRedraw(fLt, kTRUE);
2729 void TRootBrowserLite::RecursiveRemove(TObject *obj)
2735 TGListTreeItem *item = fLt->FindItemByObj(fLt->GetFirstItem(), obj);
2738 if (fListLevel && (item == fListLevel)) {
2739 TGListTreeItem *parent = item->GetParent();
2741 fListLevel = parent;
2742 fLt->ClearHighlighted();
2743 fLt->HighlightItem(fListLevel);
2744 fLt->OpenItem(fListLevel);
2749 DeleteListTreeItem(item);
2755 void TRootBrowserLite::Refresh(Bool_t force)
2757 Bool_t refresh = fBrowser && fBrowser->GetRefreshFlag();
2759 if (fTextEdit && !gROOT->IsExecutingMacro() && force) {
2760 fTextEdit->LoadFile(fTextFileName.Data());
2761 fClient->NeedRedraw(fTextEdit);
2765 if ( (refresh || force) && !fIconBox->WasGrouped()
2766 && fIconBox->NumItems()<fIconBox->GetGroupSize() ) {
2768 TRootBrowserCursorSwitcher cursorSwitcher(fIconBox, fLt);
2769 static UInt_t prev = 0;
2770 UInt_t curr = gROOT->GetListOfBrowsables()->GetSize();
2771 if (!prev) prev = curr;
2774 TGListTreeItem *sav = fListLevel;
2783 TObject *obj = (TObject *)fListLevel->GetUserData();
2791 fClient->NeedRedraw(fLt, kTRUE);
2797 void TRootBrowserLite::ShowToolBar(Bool_t show)
2800 ShowFrame(fToolBar);
2801 ShowFrame(fToolBarSep);
2802 fViewMenu->CheckEntry(kViewToolBar);
2804 HideFrame(fToolBar);
2805 HideFrame(fToolBarSep);
2806 fViewMenu->UnCheckEntry(kViewToolBar);
2813 void TRootBrowserLite::ShowStatusBar(Bool_t show)
2816 ShowFrame(fStatusBar);
2817 fViewMenu->CheckEntry(kViewStatusBar);
2819 HideFrame(fStatusBar);
2820 fViewMenu->UnCheckEntry(kViewStatusBar);
2827 void TRootBrowserLite::SetDefaults(
const char *iconStyle,
const char *sortBy)
2835 opt = gEnv->GetValue(
"Browser.IconStyle",
"small");
2836 if (!strcasecmp(opt,
"big"))
2837 SetViewMode(kViewLargeIcons, kTRUE);
2838 else if (!strcasecmp(opt,
"small"))
2839 SetViewMode(kViewSmallIcons, kTRUE);
2840 else if (!strcasecmp(opt,
"list"))
2841 SetViewMode(kViewList, kTRUE);
2842 else if (!strcasecmp(opt,
"details"))
2843 SetViewMode(kViewDetails, kTRUE);
2845 SetViewMode(kViewSmallIcons, kTRUE);
2851 opt = gEnv->GetValue(
"Browser.SortBy",
"name");
2852 if (!strcasecmp(opt,
"name"))
2853 SetSortMode(kViewArrangeByName);
2854 else if (!strcasecmp(opt,
"type"))
2855 SetSortMode(kViewArrangeByType);
2856 else if (!strcasecmp(opt,
"size"))
2857 SetSortMode(kViewArrangeBySize);
2858 else if (!strcasecmp(opt,
"date"))
2859 SetSortMode(kViewArrangeByDate);
2861 SetSortMode(kViewArrangeByName);
2863 fIconBox->Refresh();
2869 void TRootBrowserLite::SetViewMode(Int_t new_mode, Bool_t force)
2874 if (force || (fViewMode != new_mode)) {
2881 new_mode = kViewLargeIcons;
2883 case kViewLargeIcons:
2887 case kViewSmallIcons:
2901 fViewMode = new_mode;
2902 fViewMenu->RCheckEntry(fViewMode, kViewLargeIcons, kViewDetails);
2904 for (i = 2; i <= 5; ++i)
2905 gToolBarData[i].fButton->SetState((i == bnum) ? kButtonEngaged : kButtonUp);
2907 fListView->SetViewMode(lv);
2908 TGTextButton** buttons = fListView->GetHeaderButtons();
2909 if ((lv == kLVDetails) && (buttons)) {
2910 if (!strcmp(fListView->GetHeader(1),
"Attributes")) {
2911 buttons[0]->Connect(
"Clicked()",
"TRootBrowserLite",
this,
2912 TString::Format(
"SetSortMode(=%d)", kViewArrangeByName));
2913 buttons[1]->Connect(
"Clicked()",
"TRootBrowserLite",
this,
2914 TString::Format(
"SetSortMode(=%d)", kViewArrangeByType));
2915 buttons[2]->Connect(
"Clicked()",
"TRootBrowserLite",
this,
2916 TString::Format(
"SetSortMode(=%d)", kViewArrangeBySize));
2917 buttons[5]->Connect(
"Clicked()",
"TRootBrowserLite",
this,
2918 TString::Format(
"SetSortMode(=%d)", kViewArrangeByDate));
2921 fIconBox->AdjustPosition();
2928 void TRootBrowserLite::SetSortMode(Int_t new_mode)
2934 new_mode = kViewArrangeByName;
2936 case kViewArrangeByName:
2937 smode = kSortByName;
2939 case kViewArrangeByType:
2940 smode = kSortByType;
2942 case kViewArrangeBySize:
2943 smode = kSortBySize;
2945 case kViewArrangeByDate:
2946 smode = kSortByDate;
2950 fSortMode = new_mode;
2951 fSortMenu->RCheckEntry(fSortMode, kViewArrangeByName, kViewArrangeByDate);
2953 fIconBox->Sort(smode);
2959 void TRootBrowserLite::Search()
2962 fIconBox->Search(kFALSE);
2964 fTextEdit->Search(kFALSE);
2971 static Bool_t isBinary(
const char *str,
int len)
2973 for (
int i = 0; i < len; i++) {
2975 if (((c < 32) || (c > 126)) && (c !=
'\t') && (c !=
'\r') && (c !=
'\n')) {
2985 void TRootBrowserLite::HideTextEdit()
2987 if (!fTextEdit)
return;
2989 ShowMacroButtons(kFALSE);
2990 fTextEdit->UnmapWindow();
2991 fV2->RemoveFrame(fTextEdit);
2992 fV2->AddFrame(fListView, fExpandLayout);
2993 TGButton *savbtn = fToolBar->GetButton(kViewSave);
2994 savbtn->Disconnect();
2995 fTextEdit->DestroyWindow();
2998 fListView->Resize(fV2->GetWidth(), fV2->GetHeight());
2999 fV2->MapSubwindows();
3001 fBrowseTextFile = kFALSE;
3008 void TRootBrowserLite::BrowseTextFile(
const char *file)
3010 Bool_t loaded = (fTextEdit != 0);
3011 if (gSystem->AccessPathName(file, kReadPermission)) {
3017 const int bufferSize = 1024;
3018 char buffer[bufferSize];
3020 FILE *fd = fopen(file,
"rb");
3027 int sz = fread(buffer, 1, bufferSize, fd);
3030 if ((sz > 0) && isBinary(buffer, sz)) {
3038 fTextEdit =
new TGTextEdit(fV2, fV2->GetWidth(), fV2->GetHeight(),
3039 kSunkenFrame | kDoubleBorder);
3040 TColor *col = gROOT->GetColor(19);
3042 fTextEdit->SetBackgroundColor(col->GetPixel());
3043 if (TGSearchDialog::SearchDialog()) {
3044 TGSearchDialog::SearchDialog()->Connect(
"TextEntered(char *)",
"TGTextEdit",
3045 fTextEdit,
"Search(char *,Bool_t,Bool_t)");
3047 fV2->AddFrame(fTextEdit, fExpandLayout);
3048 TGButton *savbtn = fToolBar->GetButton(kViewSave);
3049 savbtn->Connect(
"Released()",
"TGTextEdit", fTextEdit,
"SaveFile(=0,kTRUE)");
3051 fTextFileName = file;
3052 fTextEdit->LoadFile(file);
3055 if (fTextFileName.EndsWith(
".C")) {
3058 fTextEdit->SetReadOnly();
3060 fListView->UnmapWindow();
3061 fV2->RemoveFrame(fListView);
3062 fTextEdit->MapWindow();
3063 fV2->MapSubwindows();
3065 fBrowseTextFile = kTRUE;
3068 AddToHistory(fListLevel);
3070 TGButton *btn = fToolBar->GetButton(kHistoryForw);
3073 btn->SetState(kButtonDisabled);
3076 TGButton *btn2 = fToolBar->GetButton(kHistoryBack);
3079 btn2->SetState(kButtonUp);
3086 void TRootBrowserLite::ExecMacro()
3088 char *tmpfile = gSystem->ConcatFileName(gSystem->TempDirectory(),
3089 fTextFileName.Data());
3091 gROOT->SetExecutingMacro(kTRUE);
3092 fTextEdit->SaveFile(tmpfile, kFALSE);
3093 gROOT->Macro(tmpfile);
3094 gSystem->Unlink(tmpfile);
3096 gROOT->SetExecutingMacro(kFALSE);
3102 void TRootBrowserLite::InterruptMacro()
3104 gROOT->SetInterrupt(kTRUE);
3110 void TRootBrowserLite::ShowMacroButtons(Bool_t show)
3112 TGButton *bt1 = fToolBar->GetButton(kViewExec);
3113 TGButton *bt2 = fToolBar->GetButton(kViewInterrupt);
3114 TGButton *bt3 = fToolBar->GetButton(kViewSave);
3116 static Bool_t connected = kFALSE;
3127 if (!connected && fTextEdit) {
3128 bt1->Connect(
"Pressed()",
"TRootBrowserLite",
this,
"ExecMacro()");
3129 bt2->Connect(
"Pressed()",
"TRootBrowserLite",
this,
"InterruptMacro()");
3138 void TRootBrowserLite::SetStatusText(
const char *txt, Int_t col)
3140 ShowStatusBar(kTRUE);
3141 TGStatusBar* status = GetStatusBar();
3143 status->SetText(txt, col);
3150 TBrowserImp *TRootBrowserLite::NewBrowser(TBrowser *b,
const char *title,
3151 UInt_t width, UInt_t height,
3154 TRootBrowserLite *browser =
new TRootBrowserLite(b, title, width, height);
3155 return (TBrowserImp *)browser;
3161 TBrowserImp *TRootBrowserLite::NewBrowser(TBrowser *b,
const char *title, Int_t x,
3162 Int_t y, UInt_t width, UInt_t height,
3165 TRootBrowserLite *browser =
new TRootBrowserLite(b, title, x, y, width, height);
3166 return (TBrowserImp *)browser;