48 ClassImp(TNewChainDlg);
49 ClassImp(TNewQueryDlg);
59 static const char *gDatasetTypes[] = {
60 "ROOT files",
"*.root",
65 static const char *gFileTypes[] = {
66 "C files",
"*.[C|c]*",
67 "ROOT files",
"*.root",
81 TNewChainDlg::TNewChainDlg(
const TGWindow *p,
const TGWindow *main) :
82 TGTransientFrame(p, main, 350, 300, kVerticalFrame)
85 if (!p || !main)
return;
86 SetCleanup(kDeepCleanup);
87 fClient->GetColorByName(
"#F0FFF0", backgnd);
88 AddFrame(
new TGLabel(
this,
new TGHotString(
"List of Chains in Memory :")),
89 new TGLayoutHints(kLHintsLeft, 5, 5, 7, 2) );
92 fListView =
new TGListView(
this, 300, 100);
93 fLVContainer =
new TGLVContainer(fListView, kSunkenFrame, GetWhitePixel());
94 fLVContainer->Associate(fListView);
95 fLVContainer->SetViewMode(kLVSmallIcons);
96 fLVContainer->SetCleanup(kDeepCleanup);
97 AddFrame(fListView,
new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 4, 4, 4, 4));
99 fListView->Connect(
"Clicked(TGLVEntry*, Int_t)",
"TNewChainDlg",
100 this,
"OnElementClicked(TGLVEntry* ,Int_t)");
103 TGCompositeFrame* frmSel =
new TGHorizontalFrame(
this, 300, 100);
104 frmSel->SetCleanup(kDeepCleanup);
105 frmSel->AddFrame(
new TGLabel(frmSel,
new TGHotString(
"Selected chain :")),
106 new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 5, 5, 5, 5) );
107 fNameBuf =
new TGTextBuffer(100);
108 fName =
new TGTextEntry(frmSel, fNameBuf);
109 fName->Resize(200, fName->GetDefaultHeight());
110 fName->Associate(
this);
111 fName->SetEnabled(kFALSE);
112 fName->ChangeBackground(backgnd);
113 frmSel->AddFrame(fName,
new TGLayoutHints(kLHintsLeft | kLHintsCenterY | kLHintsExpandX, 5, 5, 5, 5));
114 AddFrame(frmSel,
new TGLayoutHints(kLHintsExpandX, 5, 5, 5, 5));
116 AddFrame(
new TGLabel(
this,
"Double-click on the macro to be executed to create a new Chain:"),
117 new TGLayoutHints(kLHintsCenterX, 5, 5, 5, 2));
121 TGListView* lv =
new TGListView(
this, 300, 100);
122 AddFrame(lv,
new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 5, 5, 2, 5));
125 gClient->GetColorByName(
"white",white);
126 fContents =
new TGFileContainer(lv, kSunkenFrame, white);
127 fContents->SetCleanup(kDeepCleanup);
128 fContents->SetFilter(
"*.[C|c]*");
129 fContents->SetViewMode(kLVSmallIcons);
130 fContents->Associate(
this);
131 fContents->SetDefaultHeaders();
132 fContents->DisplayDirectory();
133 fContents->AddFile(
"..");
135 fContents->StopRefreshTimer();
140 gVirtualX->TranslateCoordinates( main->GetId(),
141 fClient->GetDefaultRoot()->GetId(),
142 0, 0, ax, ay, wdummy);
143 Move(ax + 200, ay + 35);
145 TGCompositeFrame *tmp;
146 AddFrame(tmp =
new TGCompositeFrame(
this, 140, 20, kHorizontalFrame),
147 new TGLayoutHints(kLHintsLeft | kLHintsExpandX));
148 tmp->SetCleanup(kDeepCleanup);
150 tmp->AddFrame(fOkButton =
new TGTextButton(tmp,
"&Ok", 0),
151 new TGLayoutHints(kLHintsExpandX, 5, 5, 5, 5));
152 tmp->AddFrame(fCancelButton =
new TGTextButton(tmp,
"&Cancel", 1),
153 new TGLayoutHints(kLHintsExpandX, 5, 5, 5, 5));
154 fOkButton->Associate(
this);
155 fCancelButton->Associate(
this);
156 fOkButton->SetEnabled(kFALSE);
158 SetWindowName(
"Chain Selection Dialog");
161 Resize(GetDefaultSize());
169 TNewChainDlg::~TNewChainDlg()
171 if (IsZombie())
return;
180 void TNewChainDlg::OnElementSelected(TObject *obj)
182 if (obj && (obj->IsA() == TChain::Class() ||
183 obj->IsA() == TDSet::Class())) {
184 Emit(
"OnElementSelected(TObject *)", (Long_t)obj);
192 void TNewChainDlg::OnElementClicked(TGLVEntry *entry, Int_t)
194 fChain = (TObject *)entry->GetUserData();
195 if (fChain->IsA() == TChain::Class()) {
196 TString s = TString::Format(
"%s : %s" , ((TChain *)fChain)->GetTitle(),
197 ((TChain *)fChain)->GetName());
200 else if (fChain->IsA() == TDSet::Class()) {
201 TString s = TString::Format(
"%s : %s" , ((TDSet *)fChain)->GetName(),
202 ((TDSet *)fChain)->GetObjName());
205 fOkButton->SetEnabled(kTRUE);
211 void TNewChainDlg::UpdateList()
215 fChains = gROOT->GetListOfDataSets();
216 fLVContainer->RemoveAll();
217 if (!fChains)
return;
221 while ((obj = (TObject *)next())) {
223 if (obj->IsA() == TChain::Class()) {
224 const char *title = ((TChain *)obj)->GetTitle();
226 ((TChain *)obj)->SetTitle(
"TChain");
227 item =
new TGLVEntry(fLVContainer, ((TChain *)obj)->GetName(),
228 ((TChain *)obj)->GetTitle());
230 else if (obj->IsA() == TDSet::Class()) {
231 item =
new TGLVEntry(fLVContainer, ((TDSet *)obj)->GetObjName(),
232 ((TDSet *)obj)->GetName());
235 item->SetUserData(obj);
236 fLVContainer->AddItem(item);
239 fClient->NeedRedraw(fLVContainer);
246 void TNewChainDlg::DisplayDirectory(
const TString &fname)
248 fContents->SetDefaultHeaders();
249 gSystem->ChangeDirectory(fname);
250 fContents->ChangeDirectory(fname);
251 fContents->DisplayDirectory();
252 fContents->AddFile(
"..");
259 void TNewChainDlg::OnDoubleClick(TGLVEntry* f, Int_t btn)
261 if (btn!=kButton1)
return;
262 gVirtualX->SetCursor(fContents->GetId(),gVirtualX->CreateCursor(kWatch));
264 TString name(f->GetTitle());
267 if (name.Contains(
".C")) {
269 TString command = TString::Format(
".x %s/%s",
270 gSystem->UnixPathName(fContents->GetDirectory()),
273 gApplication->ProcessLine(command.Data());
277 DisplayDirectory(name);
279 gVirtualX->SetCursor(fContents->GetId(),gVirtualX->CreateCursor(kPointer));
285 Bool_t TNewChainDlg::ProcessMessage(Long_t msg, Long_t parm1, Long_t)
287 switch (GET_MSG(msg)) {
289 switch (GET_SUBMSG(msg)) {
295 fOkButton->SetEnabled(kFALSE);
296 OnElementSelected(fChain);
313 switch (GET_SUBMSG(msg)) {
314 case kCT_ITEMDBLCLICK:
315 if (parm1==kButton1) {
316 TGLVEntry *lv_entry = (TGLVEntry *)fContents->GetLastActive();
317 if (lv_entry) OnDoubleClick(lv_entry, parm1);
331 void TNewChainDlg::CloseWindow()
345 TNewQueryDlg::TNewQueryDlg(TSessionViewer *gui, Int_t Width, Int_t Height,
346 TQueryDescription *query, Bool_t editmode) :
347 TGTransientFrame(gClient->GetRoot(), gui, Width, Height)
351 fEditMode = editmode;
355 if (fQuery && fQuery->fChain) {
356 fChain = fQuery->fChain;
360 if (editmode && query)
362 else if (!editmode) {
363 TQueryDescription *fquery;
364 fquery = (TQueryDescription *)fViewer->GetActDesc()->fQueries->Last();
366 fTxtQueryName->SetText(fquery->fQueryName);
368 fTxtQueryName->SetText(
"Query 1");
371 Resize(Width, Height);
373 fFrmNewQuery->HideFrame(fFrmMore);
374 fBtnMore->SetText(
" More >> ");
375 SetWMSizeHints(Width+5, Height+25, Width+5, Height+25, 1, 1);
376 ChangeOptions(GetOptions() | kFixedSize);
378 SetWindowName(
"Query Dialog");
380 gVirtualX->TranslateCoordinates( fViewer->GetId(),
381 fClient->GetDefaultRoot()->GetId(),
382 0, 0, ax, ay, wdummy);
383 Move(ax + fViewer->GetWidth()/2, ay + 35);
389 TNewQueryDlg::~TNewQueryDlg()
391 if (IsZombie())
return;
398 void TNewQueryDlg::Build(TSessionViewer *gui)
402 SetLayoutManager(
new TGVerticalLayout(
this));
403 SetCleanup(kDeepCleanup);
405 fFrmNewQuery =
new TGGroupFrame(
this,
"New Query");
406 fFrmNewQuery->SetCleanup(kDeepCleanup);
408 AddFrame(fFrmNewQuery,
new TGLayoutHints(kLHintsExpandX |
409 kLHintsExpandY, 2, 2, 2, 2));
410 fFrmNewQuery->SetLayoutManager(
new TGTableLayout(fFrmNewQuery, 6, 5));
413 fFrmNewQuery->AddFrame(
new TGLabel(fFrmNewQuery,
"Query Name :"),
414 new TGTableLayoutHints(0, 1, 0, 1, kLHintsCenterY, 0, 5, 4, 0));
415 fFrmNewQuery->AddFrame(fTxtQueryName =
new TGTextEntry(fFrmNewQuery,
416 (
const char *)0, 1),
new TGTableLayoutHints(1, 2, 0, 1,
417 kLHintsCenterY, 5, 5, 4, 0));
420 fFrmNewQuery->AddFrame(
new TGLabel(fFrmNewQuery,
"TChain :"),
421 new TGTableLayoutHints(0, 1, 1, 2, kLHintsCenterY, 0, 5, 4, 0));
422 fFrmNewQuery->AddFrame(fTxtChain =
new TGTextEntry(fFrmNewQuery,
423 (
const char *)0, 2),
new TGTableLayoutHints(1, 2, 1, 2,
424 kLHintsCenterY, 5, 5, 4, 0));
425 fTxtChain->SetToolTipText(
"Specify TChain or TDSet from memory or file");
426 fTxtChain->SetEnabled(kFALSE);
428 fFrmNewQuery->AddFrame(btnTmp =
new TGTextButton(fFrmNewQuery,
"Browse..."),
429 new TGTableLayoutHints(2, 3, 1, 2, kLHintsCenterY, 5, 0, 4, 8));
430 btnTmp->Connect(
"Clicked()",
"TNewQueryDlg",
this,
"OnBrowseChain()");
433 fFrmNewQuery->AddFrame(
new TGLabel(fFrmNewQuery,
"Selector :"),
434 new TGTableLayoutHints(0, 1, 2, 3, kLHintsCenterY, 0, 5, 0, 0));
435 fFrmNewQuery->AddFrame(fTxtSelector =
new TGTextEntry(fFrmNewQuery,
436 (
const char *)0, 3),
new TGTableLayoutHints(1, 2, 2, 3,
437 kLHintsCenterY, 5, 5, 0, 0));
439 fFrmNewQuery->AddFrame(btnTmp =
new TGTextButton(fFrmNewQuery,
"Browse..."),
440 new TGTableLayoutHints(2, 3, 2, 3, kLHintsCenterY, 5, 0, 0, 8));
441 btnTmp->Connect(
"Clicked()",
"TNewQueryDlg",
this,
"OnBrowseSelector()");
444 fFrmNewQuery->AddFrame(fBtnMore =
new TGTextButton(fFrmNewQuery,
" Less << "),
445 new TGTableLayoutHints(2, 3, 4, 5, kLHintsCenterY, 5, 5, 4, 0));
446 fBtnMore->Connect(
"Clicked()",
"TNewQueryDlg",
this,
"OnNewQueryMore()");
449 fFrmMore =
new TGCompositeFrame(fFrmNewQuery, 200, 200);
450 fFrmMore->SetCleanup(kDeepCleanup);
452 fFrmNewQuery->AddFrame(fFrmMore,
new TGTableLayoutHints(0, 3, 5, 6,
453 kLHintsExpandX | kLHintsExpandY));
454 fFrmMore->SetLayoutManager(
new TGTableLayout(fFrmMore, 4, 3));
457 fFrmMore->AddFrame(
new TGLabel(fFrmMore,
"Options :"),
458 new TGTableLayoutHints(0, 1, 0, 1, kLHintsCenterY, 0, 5, 0, 0));
459 fFrmMore->AddFrame(fTxtOptions =
new TGTextEntry(fFrmMore,
460 (
const char *)0, 4),
new TGTableLayoutHints(1, 2, 0, 1, 0, 22,
462 fTxtOptions->SetText(
"ASYN");
465 fFrmMore->AddFrame(
new TGLabel(fFrmMore,
"Nb Entries :"),
466 new TGTableLayoutHints(0, 1, 1, 2, kLHintsCenterY, 0, 5, 0, 0));
467 fFrmMore->AddFrame(fNumEntries =
new TGNumberEntry(fFrmMore, 0, 5, -1,
468 TGNumberFormat::kNESInteger, TGNumberFormat::kNEAAnyNumber,
469 TGNumberFormat::kNELNoLimits),
new TGTableLayoutHints(1, 2, 1, 2,
472 fNumEntries->SetIntNumber(-1);
474 fFrmMore->AddFrame(
new TGLabel(fFrmMore,
"First entry :"),
475 new TGTableLayoutHints(0, 1, 2, 3, kLHintsCenterY, 0, 5, 0, 0));
476 fFrmMore->AddFrame(fNumFirstEntry =
new TGNumberEntry(fFrmMore, 0, 5, -1,
477 TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative,
478 TGNumberFormat::kNELNoLimits),
new TGTableLayoutHints(1, 2, 2, 3, 0,
482 fFrmMore->AddFrame(
new TGLabel(fFrmMore,
"Event list :"),
483 new TGTableLayoutHints(0, 1, 3, 4, kLHintsCenterY, 0, 5, 0, 0));
484 fFrmMore->AddFrame(fTxtEventList =
new TGTextEntry(fFrmMore,
485 (
const char *)0, 6),
new TGTableLayoutHints(1, 2, 3, 4, 0, 22,
488 fFrmMore->AddFrame(btnTmp =
new TGTextButton(fFrmMore,
"Browse..."),
489 new TGTableLayoutHints(2, 3, 3, 4, 0, 6, 0, 0, 8));
490 btnTmp->Connect(
"Clicked()",
"TNewQueryDlg",
this,
"OnBrowseEventList()");
492 fTxtQueryName->Associate(
this);
493 fTxtChain->Associate(
this);
494 fTxtSelector->Associate(
this);
495 fTxtOptions->Associate(
this);
496 fNumEntries->Associate(
this);
497 fNumFirstEntry->Associate(
this);
498 fTxtEventList->Associate(
this);
500 fTxtQueryName->Connect(
"TextChanged(char*)",
"TNewQueryDlg",
this,
501 "SettingsChanged()");
502 fTxtChain->Connect(
"TextChanged(char*)",
"TNewQueryDlg",
this,
503 "SettingsChanged()");
504 fTxtSelector->Connect(
"TextChanged(char*)",
"TNewQueryDlg",
this,
505 "SettingsChanged()");
506 fTxtOptions->Connect(
"TextChanged(char*)",
"TNewQueryDlg",
this,
507 "SettingsChanged()");
508 fNumEntries->Connect(
"ValueChanged(Long_t)",
"TNewQueryDlg",
this,
509 "SettingsChanged()");
510 fNumFirstEntry->Connect(
"ValueChanged(Long_t)",
"TNewQueryDlg",
this,
511 "SettingsChanged()");
512 fTxtEventList->Connect(
"TextChanged(char*)",
"TNewQueryDlg",
this,
513 "SettingsChanged()");
515 TGCompositeFrame *tmp;
516 AddFrame(tmp =
new TGCompositeFrame(
this, 140, 20, kHorizontalFrame),
517 new TGLayoutHints(kLHintsLeft | kLHintsExpandX));
518 tmp->SetCleanup(kDeepCleanup);
522 fBtnSave =
new TGTextButton(tmp,
"Save");
523 fBtnSubmit =
new TGTextButton(tmp,
"Save && Submit");
526 fBtnSave =
new TGTextButton(tmp,
"Add");
527 fBtnSubmit =
new TGTextButton(tmp,
"Add && Submit");
529 tmp->AddFrame(fBtnSave,
new TGLayoutHints(kLHintsLeft | kLHintsExpandX,
531 tmp->AddFrame(fBtnSubmit,
new TGLayoutHints(kLHintsLeft | kLHintsExpandX,
533 fBtnSave->Connect(
"Clicked()",
"TNewQueryDlg",
this,
"OnBtnSaveClicked()");
534 fBtnSubmit->Connect(
"Clicked()",
"TNewQueryDlg",
this,
"OnBtnSubmitClicked()");
535 tmp->AddFrame(fBtnClose =
new TGTextButton(tmp,
"Close"),
536 new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 3, 3, 3, 3));
537 fBtnClose->Connect(
"Clicked()",
"TNewQueryDlg",
this,
"OnBtnCloseClicked()");
538 fBtnSave->SetState(kButtonDisabled);
539 fBtnSubmit->SetState(kButtonDisabled);
545 void TNewQueryDlg::CloseWindow()
553 void TNewQueryDlg::OnNewQueryMore()
555 if (fFrmNewQuery->IsVisible(fFrmMore)) {
556 fFrmNewQuery->HideFrame(fFrmMore);
557 fBtnMore->SetText(
" More >> ");
560 fFrmNewQuery->ShowFrame(fFrmMore);
561 fBtnMore->SetText(
" Less << ");
568 void TNewQueryDlg::OnBrowseChain()
570 TNewChainDlg *dlg =
new TNewChainDlg(fClient->GetRoot(),
this);
571 dlg->Connect(
"OnElementSelected(TObject *)",
"TNewQueryDlg",
572 this,
"OnElementSelected(TObject *)");
578 void TNewQueryDlg::OnElementSelected(TObject *obj)
582 if (obj->IsA() == TChain::Class())
583 fTxtChain->SetText(((TChain *)fChain)->GetName());
584 else if (obj->IsA() == TDSet::Class())
585 fTxtChain->SetText(((TDSet *)fChain)->GetObjName());
592 void TNewQueryDlg::OnBrowseSelector()
595 fi.fFileTypes = gFileTypes;
596 new TGFileDialog(fClient->GetRoot(),
this, kFDOpen, &fi);
597 if (!fi.fFilename)
return;
598 fTxtSelector->SetText(gSystem->UnixPathName(fi.fFilename));
604 void TNewQueryDlg::OnBrowseEventList()
611 void TNewQueryDlg::OnBtnSaveClicked()
615 TQueryDescription *newquery;
616 if (fEditMode && fQuery)
619 newquery =
new TQueryDescription();
622 newquery->fSelectorString = fTxtSelector->GetText();
624 newquery->fTDSetString = fChain->GetName();
625 newquery->fChain = fChain;
628 newquery->fTDSetString =
"";
629 newquery->fChain = 0;
631 newquery->fQueryName = fTxtQueryName->GetText();
632 newquery->fOptions.Form(
"%s",fTxtOptions->GetText());
633 newquery->fNoEntries = fNumEntries->GetIntNumber();
634 newquery->fFirstEntry = fNumFirstEntry->GetIntNumber();
635 newquery->fNbFiles = 0;
636 newquery->fResult = 0;
638 if (newquery->fChain) {
639 if (newquery->fChain->IsA() == TChain::Class())
640 newquery->fNbFiles = ((TChain *)newquery->fChain)->GetListOfFiles()->GetEntriesFast();
641 else if (newquery->fChain->IsA() == TDSet::Class())
642 newquery->fNbFiles = ((TDSet *)newquery->fChain)->GetListOfElements()->GetSize();
647 newquery->fResult = 0;
648 newquery->fStatus = TQueryDescription::kSessionQueryCreated;
650 TQueryDescription *fquery;
651 fquery = (TQueryDescription *)fViewer->GetActDesc()->fQueries->FindObject(newquery->fQueryName);
653 int e = 1, j = 0, idx = 0;
654 const char *name = fquery->fQueryName;
655 for (
int i=strlen(name)-1;i>0;i--) {
656 if (isdigit(name[i])) {
657 idx += (name[i]-
'0') * e;
666 newquery->fQueryName.Remove(strlen(name)-j,j);
667 newquery->fQueryName.Append(Form(
"%d",idx));
670 newquery->fQueryName.Append(
" 1");
671 fquery = (TQueryDescription *)fViewer->GetActDesc()->fQueries->FindObject(newquery->fQueryName);
673 fTxtQueryName->SetText(newquery->fQueryName);
674 fViewer->GetActDesc()->fQueries->Add((TObject *)newquery);
675 TGListTreeItem *item = fViewer->GetSessionHierarchy()->FindChildByData(
676 fViewer->GetSessionItem(), fViewer->GetActDesc());
677 TGListTreeItem *item2 = fViewer->GetSessionHierarchy()->AddItem(item,
678 newquery->fQueryName, fViewer->GetQueryConPict(), fViewer->GetQueryConPict());
679 item2->SetUserData(newquery);
680 fViewer->GetSessionHierarchy()->OpenItem(item);
681 fViewer->GetSessionHierarchy()->ClearHighlighted();
682 fViewer->GetSessionHierarchy()->HighlightItem(item2);
683 fViewer->GetSessionHierarchy()->SetSelected(item2);
684 fViewer->OnListTreeClicked(item2, 1, 0, 0);
689 TGListTreeItem *item = fViewer->GetSessionHierarchy()->GetSelected();
690 fViewer->GetSessionHierarchy()->RenameItem(item, newquery->fQueryName);
691 item->SetUserData(newquery);
694 fClient->NeedRedraw(fViewer->GetSessionHierarchy());
695 fTxtQueryName->SelectAll();
696 fTxtQueryName->SetFocus();
697 fViewer->WriteConfiguration();
704 void TNewQueryDlg::OnBtnSubmitClicked()
707 fViewer->GetQueryFrame()->OnBtnSubmit();
713 void TNewQueryDlg::OnBtnCloseClicked()
715 Int_t result = kMBNo;
717 new TGMsgBox(fClient->GetRoot(),
this,
"Modified Settings",
718 "Do you wish to SAVE changes ?", 0,
719 kMBYes | kMBNo | kMBCancel, &result);
720 if (result == kMBYes) {
724 if (result == kMBNo) {
732 void TNewQueryDlg::Popup()
735 fTxtQueryName->SetFocus();
741 void TNewQueryDlg::SettingsChanged()
743 if (fEditMode && fQuery) {
744 if ((strcmp(fQuery->fSelectorString.Data(), fTxtSelector->GetText())) ||
745 (strcmp(fQuery->fQueryName.Data(), fTxtQueryName->GetText())) ||
746 (strcmp(fQuery->fOptions.Data(), fTxtOptions->GetText())) ||
747 (fQuery->fNoEntries != fNumEntries->GetIntNumber()) ||
748 (fQuery->fFirstEntry != fNumFirstEntry->GetIntNumber()) ||
749 (fQuery->fChain != fChain)) {
757 if ((fTxtQueryName->GetText()) &&
758 ((fTxtQueryName->GetText()) ||
759 (fTxtChain->GetText())))
765 fBtnSave->SetState(kButtonUp);
766 fBtnSubmit->SetState(kButtonUp);
769 fBtnSave->SetState(kButtonDisabled);
770 fBtnSubmit->SetState(kButtonDisabled);
777 void TNewQueryDlg::UpdateFields(TQueryDescription *desc)
780 fTxtQueryName->SetText(desc->fQueryName);
781 fTxtChain->SetText(
"");
783 fTxtChain->SetText(desc->fTDSetString);
784 fTxtSelector->SetText(desc->fSelectorString);
785 fTxtOptions->SetText(desc->fOptions);
786 fNumEntries->SetIntNumber(desc->fNoEntries);
787 fNumFirstEntry->SetIntNumber(desc->fFirstEntry);
788 fTxtEventList->SetText(desc->fEventList);
794 Bool_t TNewQueryDlg::ProcessMessage(Long_t msg, Long_t parm1, Long_t)
796 switch (GET_MSG(msg)) {
798 switch (GET_SUBMSG(msg)) {
803 fTxtChain->SelectAll();
804 fTxtChain->SetFocus();
807 fTxtSelector->SelectAll();
808 fTxtSelector->SetFocus();
811 fTxtOptions->SelectAll();
812 fTxtOptions->SetFocus();
815 fTxtEventList->SelectAll();
816 fTxtEventList->SetFocus();
819 fTxtQueryName->SelectAll();
820 fTxtQueryName->SetFocus();
843 TUploadDataSetDlg::TUploadDataSetDlg(TSessionViewer *gui, Int_t w, Int_t h) :
844 TGTransientFrame(gClient->GetRoot(), gui, w, h)
850 SetCleanup(kDeepCleanup);
851 TGHorizontalFrame *hFrame1 =
new TGHorizontalFrame(
this);
852 hFrame1->SetCleanup(kDeepCleanup);
853 hFrame1->AddFrame(
new TGLabel(hFrame1,
"Name of DataSet :"),
854 new TGLayoutHints(kLHintsLeft | kLHintsCenterY,
856 fDSetName =
new TGTextEntry(hFrame1,
new TGTextBuffer(50));
857 fDSetName->SetText(
"DataSet1");
858 fDSetName->Resize(150, fDSetName->GetDefaultHeight());
859 hFrame1->AddFrame(fDSetName,
new TGLayoutHints(kLHintsLeft | kLHintsCenterY,
861 AddFrame(hFrame1,
new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX,
865 TGGroupFrame *groupFrame1 =
new TGGroupFrame(
this,
"DataSet Files");
866 groupFrame1->SetCleanup(kDeepCleanup);
869 TGHorizontalFrame *hFrame11 =
new TGHorizontalFrame(groupFrame1);
870 hFrame11->SetCleanup(kDeepCleanup);
871 hFrame11->AddFrame(
new TGLabel(hFrame11,
"Location URL :"),
872 new TGLayoutHints(kLHintsLeft | kLHintsCenterY,
874 fLocationURL =
new TGTextEntry(hFrame11,
new TGTextBuffer(150));
875 fLocationURL->SetToolTipText(
"Enter location URL (i.e \"root://host//path/to/file.root\")");
876 fLocationURL->Resize(210, fLocationURL->GetDefaultHeight());
877 hFrame11->AddFrame(fLocationURL,
new TGLayoutHints(kLHintsLeft |
878 kLHintsCenterY, 10, 10, 5, 5));
879 fAddButton =
new TGTextButton(hFrame11,
" Add >> ", 0);
880 fAddButton->SetToolTipText(
"Add file(s) to the list");
881 fAddButton->Associate(
this);
882 hFrame11->AddFrame(fAddButton,
new TGLayoutHints(kLHintsLeft | kLHintsCenterY |
883 kLHintsExpandX, 5, 10, 5, 5));
884 groupFrame1->AddFrame(hFrame11,
new TGLayoutHints(kLHintsLeft | kLHintsTop |
885 kLHintsExpandX, 2, 2, 2, 2));
888 TGHorizontalFrame *hFrame2 =
new TGHorizontalFrame(groupFrame1);
889 hFrame2->SetCleanup(kDeepCleanup);
893 fListView =
new TGListView(hFrame2, 300, 100);
894 fLVContainer =
new TGLVContainer(fListView, kSunkenFrame, GetWhitePixel());
895 fLVContainer->Associate(fListView);
896 fLVContainer->SetViewMode(kLVDetails);
897 fLVContainer->SetCleanup(kDeepCleanup);
898 fLVContainer->SetHeaders(1);
899 fLVContainer->SetHeader(
"File Name", kTextLeft, kTextLeft , 0);
900 hFrame2->AddFrame(fListView,
new TGLayoutHints(kLHintsLeft | kLHintsTop |
901 kLHintsExpandX | kLHintsExpandY, 2, 2, 10, 10));
904 TGVerticalFrame *vFrame1 =
new TGVerticalFrame(hFrame2);
905 vFrame1->SetCleanup(kDeepCleanup);
907 fBrowseButton =
new TGTextButton(vFrame1,
" Browse... ", 1);
908 fBrowseButton->SetToolTipText(
"Add file(s) to the list");
909 fBrowseButton->Associate(
this);
910 vFrame1->AddFrame(fBrowseButton,
new TGLayoutHints(kLHintsLeft | kLHintsTop |
911 kLHintsExpandX, 15, 5, 5, 5));
912 fRemoveButton =
new TGTextButton(vFrame1,
" Remove ", 2);
913 fRemoveButton->SetToolTipText(
"Remove selected file from the list");
914 fRemoveButton->Associate(
this);
915 vFrame1->AddFrame(fRemoveButton,
new TGLayoutHints(kLHintsLeft | kLHintsTop |
916 kLHintsExpandX, 15, 5, 5, 5));
917 fClearButton =
new TGTextButton(vFrame1,
" Clear ", 3);
918 fClearButton->SetToolTipText(
"Clear list of files");
919 fClearButton->Associate(
this);
920 vFrame1->AddFrame(fClearButton,
new TGLayoutHints(kLHintsLeft | kLHintsTop |
921 kLHintsExpandX, 15, 5, 5, 5));
923 fOverwriteDSet =
new TGCheckButton(vFrame1,
"Overwrite DataSet");
924 fOverwriteDSet->SetToolTipText(
"Overwrite DataSet");
925 vFrame1->AddFrame(fOverwriteDSet,
new TGLayoutHints(kLHintsLeft | kLHintsTop |
926 kLHintsExpandX, 15, 5, 5, 5));
927 fOverwriteFiles =
new TGCheckButton(vFrame1,
"Overwrite Files");
928 fOverwriteFiles->SetToolTipText(
"Overwrite files in DataSet");
929 vFrame1->AddFrame(fOverwriteFiles,
new TGLayoutHints(kLHintsLeft | kLHintsTop |
930 kLHintsExpandX, 15, 5, 5, 5));
931 fAppendFiles =
new TGCheckButton(vFrame1,
"Append Files");
932 fAppendFiles->SetToolTipText(
"Append files in DataSet");
933 vFrame1->AddFrame(fAppendFiles,
new TGLayoutHints(kLHintsLeft | kLHintsTop |
934 kLHintsExpandX, 15, 5, 5, 5));
936 fOverwriteDSet->Connect(
"Toggled(Bool_t)",
"TUploadDataSetDlg",
this,
937 "OnOverwriteDataset(Bool_t)");
938 fOverwriteFiles->Connect(
"Toggled(Bool_t)",
"TUploadDataSetDlg",
this,
939 "OnOverwriteFiles(Bool_t)");
940 fAppendFiles->Connect(
"Toggled(Bool_t)",
"TUploadDataSetDlg",
this,
941 "OnAppendFiles(Bool_t)");
943 hFrame2->AddFrame(vFrame1,
new TGLayoutHints(kLHintsRight | kLHintsTop |
944 kLHintsExpandY, 2, 2, 2, 2));
945 groupFrame1->AddFrame(hFrame2,
new TGLayoutHints(kLHintsLeft | kLHintsTop |
946 kLHintsExpandX | kLHintsExpandY, 2, 2, 2, 2));
948 AddFrame(groupFrame1,
new TGLayoutHints(kLHintsLeft | kLHintsTop |
949 kLHintsExpandX, 5, 5, 2, 2));
952 TGHorizontalFrame *hFrame3 =
new TGHorizontalFrame(
this);
953 hFrame3->SetCleanup(kDeepCleanup);
954 hFrame3->AddFrame(
new TGLabel(hFrame3,
"Destination URL :"),
955 new TGLayoutHints(kLHintsLeft | kLHintsCenterY,
957 fDestinationURL =
new TGTextEntry(hFrame3,
new TGTextBuffer(150));
958 if (fViewer->GetActDesc()->fConnected &&
959 fViewer->GetActDesc()->fAttached &&
960 fViewer->GetActDesc()->fProof &&
961 fViewer->GetActDesc()->fProof->IsValid()) {
965 fDestinationURL->SetToolTipText(
"Enter destination URL ( relative to \" root://host//proofpool/user/ \" )");
966 fDestinationURL->Resize(305, fDestinationURL->GetDefaultHeight());
967 hFrame3->AddFrame(fDestinationURL,
new TGLayoutHints(kLHintsLeft |
968 kLHintsCenterY, 10, 15, 5, 5));
969 AddFrame(hFrame3,
new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX,
973 TGHorizontalFrame *hFrame4 =
new TGHorizontalFrame(
this);
974 hFrame4->SetCleanup(kDeepCleanup);
975 fUploadButton =
new TGTextButton(hFrame4,
"Upload DataSet", 10);
976 fUploadButton->SetToolTipText(
"Upload the dataset to the cluster");
977 fUploadButton->Associate(
this);
978 hFrame4->AddFrame(fUploadButton,
new TGLayoutHints(kLHintsLeft | kLHintsCenterY |
979 kLHintsExpandX, 15, 15, 2, 2));
980 fCloseDlgButton =
new TGTextButton(hFrame4,
"Close Dialog", 11);
981 fCloseDlgButton->SetToolTipText(
"Close the dialog");
982 fCloseDlgButton->Associate(
this);
983 hFrame4->AddFrame(fCloseDlgButton,
new TGLayoutHints(kLHintsLeft | kLHintsCenterY |
984 kLHintsExpandX, 15, 15, 2, 2));
985 AddFrame(hFrame4,
new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX,
991 gVirtualX->TranslateCoordinates( gui->GetId(),
992 fClient->GetDefaultRoot()->GetId(),
993 0, 0, ax, ay, wdummy);
994 Move(ax + 250, ay + 200);
996 SetWindowName(
"Upload DataSet Dialog");
1001 SetWMSizeHints(w+5, h+5, w+5, h+5, 1, 1);
1002 ChangeOptions(GetOptions() | kFixedSize);
1009 TUploadDataSetDlg::~TUploadDataSetDlg()
1011 if (IsZombie())
return;
1018 void TUploadDataSetDlg::CloseWindow()
1027 Bool_t TUploadDataSetDlg::ProcessMessage(Long_t msg, Long_t parm1, Long_t)
1029 switch (GET_MSG(msg)) {
1031 switch (GET_SUBMSG(msg)) {
1036 if (fLocationURL->GetText())
1037 AddFiles(fLocationURL->GetText());
1075 void TUploadDataSetDlg::AddFiles(
const char *fileName)
1077 if (strlen(fileName) < 5)
1079 if (strstr(fileName,
"*.")) {
1081 void *filesDir = gSystem->OpenDirectory(gSystem->DirName(fileName));
1083 TString filesExp(gSystem->BaseName(fileName));
1084 filesExp.ReplaceAll(
"*",
".*");
1085 TRegexp rg(filesExp);
1086 while ((ent = gSystem->GetDirEntry(filesDir))) {
1087 TString entryString(ent);
1088 if (entryString.Index(rg) != kNPOS &&
1089 gSystem->AccessPathName(Form(
"%s/%s", gSystem->DirName(fileName),
1090 ent), kReadPermission) == kFALSE) {
1091 TString text = TString::Format(
"%s/%s",
1092 gSystem->UnixPathName(gSystem->DirName(fileName)), ent);
1093 if (!fLVContainer->FindItem(text.Data())) {
1094 TGLVEntry *entry =
new TGLVEntry(fLVContainer, text.Data(), text.Data());
1095 entry->SetPictures(gClient->GetPicture(
"rootdb_t.xpm"),
1096 gClient->GetPicture(
"rootdb_t.xpm"));
1097 fLVContainer->AddItem(entry);
1104 if (!fLVContainer->FindItem(fileName)) {
1105 TGLVEntry *entry =
new TGLVEntry(fLVContainer, fileName, fileName);
1106 entry->SetPictures(gClient->GetPicture(
"rootdb_t.xpm"),
1107 gClient->GetPicture(
"rootdb_t.xpm"));
1108 fLVContainer->AddItem(entry);
1112 fListView->AdjustHeaders();
1113 fListView->Layout();
1114 fClient->NeedRedraw(fLVContainer);
1120 void TUploadDataSetDlg::AddFiles(TList *fileList)
1123 TIter next(fileList);
1124 while ((el = (TObjString *) next())) {
1125 TString fileName = TString::Format(
"%s/%s",
1126 gSystem->UnixPathName(gSystem->DirName(el->GetString())),
1127 gSystem->BaseName(el->GetString()));
1129 if (!fLVContainer->FindItem(fileName.Data())) {
1130 TGLVEntry *entry =
new TGLVEntry(fLVContainer, fileName.Data(), fileName.Data());
1131 entry->SetPictures(gClient->GetPicture(
"rootdb_t.xpm"),
1132 gClient->GetPicture(
"rootdb_t.xpm"));
1133 fLVContainer->AddItem(entry);
1137 fListView->AdjustHeaders();
1138 fListView->Layout();
1139 fClient->NeedRedraw(fLVContainer);
1146 void TUploadDataSetDlg::BrowseFiles()
1149 fi.fFileTypes = gDatasetTypes;
1150 fi.fFilename = strdup(
"*.root");
1151 new TGFileDialog(fClient->GetRoot(),
this, kFDOpen, &fi);
1152 if (fi.fMultipleSelection && fi.fFileNamesList) {
1153 AddFiles(fi.fFileNamesList);
1155 else if (fi.fFilename) {
1156 AddFiles(fi.fFilename);
1163 void TUploadDataSetDlg::ClearFiles()
1165 fLVContainer->RemoveAll();
1166 fListView->Layout();
1168 fClient->NeedRedraw(fLVContainer);
1174 void TUploadDataSetDlg::OnOverwriteDataset(Bool_t on)
1176 if (on && fAppendFiles->IsOn())
1177 fAppendFiles->SetState(kButtonUp);
1183 void TUploadDataSetDlg::OnOverwriteFiles(Bool_t)
1190 void TUploadDataSetDlg::OnAppendFiles(Bool_t on)
1192 if (on && fOverwriteDSet->IsOn())
1193 fOverwriteDSet->SetState(kButtonUp);
1199 void TUploadDataSetDlg::RemoveFile()
1201 TGFrame *item = (TGFrame *)fLVContainer->GetLastActive();
1202 fLVContainer->RemoveItem(item);
1204 fListView->AdjustHeaders();
1205 fListView->Layout();
1206 fClient->NeedRedraw(fLVContainer);
1212 void TUploadDataSetDlg::UploadDataSet()
1216 const char *dsetName = fDSetName->GetText();
1217 const char *destination = fDestinationURL->GetText();
1219 TList *skippedFiles =
new TList();
1220 TList *datasetFiles =
new TList();
1224 if (!fViewer->GetActDesc()->fConnected ||
1225 !fViewer->GetActDesc()->fAttached ||
1226 !fViewer->GetActDesc()->fProof ||
1227 !fViewer->GetActDesc()->fProof->IsValid()) {
1231 if (fOverwriteDSet->IsOn())
1232 flags |= TProof::kOverwriteDataSet;
1234 flags |= TProof::kNoOverwriteDataSet;
1235 if (fOverwriteFiles->IsOn())
1236 flags |= TProof::kOverwriteAllFiles;
1238 flags |= TProof::kOverwriteNoFiles;
1239 if (fAppendFiles->IsOn()) {
1240 flags |= TProof::kAppend;
1241 if (flags & TProof::kNoOverwriteDataSet)
1242 flags &= ~TProof::kNoOverwriteDataSet;
1246 TIter next(fLVContainer->GetList());
1250 while ((el = (TGFrameElement *)next())) {
1251 entry = (TGLVEntry *) el->fFrame;
1252 const char *fname = gSystem->UnixPathName(entry->GetTitle());
1253 datasetFiles->Add(
new TFileInfo(fname));
1256 fUploadButton->SetState(kButtonDisabled);
1257 fCloseDlgButton->SetState(kButtonDisabled);
1259 if (strlen(destination) < 2) destination = 0;
1265 ret = fViewer->GetActDesc()->fProof->UploadDataSet(dsetName,
1266 datasetFiles, destination, flags, skippedFiles);
1268 if (ret == TProof::kDataSetExists) {
1271 new TGMsgBox(fClient->GetRoot(),
this,
"Upload DataSet",
1272 TString::Format(
"The dataset \"%s\" already exists on the cluster ! Overwrite ?",
1273 dsetName), kMBIconQuestion, kMBYes | kMBNo | kMBCancel | kMBAppend,
1275 if (retval == kMBYes) {
1276 ret = fViewer->GetActDesc()->fProof->UploadDataSet(dsetName,
1277 datasetFiles, destination,
1278 TProof::kOverwriteDataSet |
1279 TProof::kOverwriteNoFiles,
1282 if (retval == kMBAppend) {
1283 ret = fViewer->GetActDesc()->fProof->UploadDataSet(dsetName,
1284 datasetFiles, destination,
1286 TProof::kOverwriteNoFiles,
1293 new TGMsgBox(fClient->GetRoot(),
this,
"Upload DataSet",
1294 "Failed uploading dataset/files to the cluster",
1295 kMBIconExclamation, kMBOk, &retval);
1296 fUploading = kFALSE;
1297 fUploadButton->SetState(kButtonUp);
1298 fCloseDlgButton->SetState(kButtonUp);
1302 if (skippedFiles->GetSize()) {
1303 TIter nexts(skippedFiles);
1304 while (TFileInfo *obj = (TFileInfo*)nexts()) {
1307 new TGMsgBox(fClient->GetRoot(),
this,
"Upload DataSet",
1308 TString::Format(
"The file \"%s\" already exists on the cluster ! Overwrite ?",
1309 obj->GetFirstUrl()->GetUrl()), kMBIconQuestion,
1310 kMBYes | kMBNo | kMBYesAll | kMBNoAll | kMBDismiss, &retval);
1311 if (retval == kMBYesAll) {
1312 ret = fViewer->GetActDesc()->fProof->UploadDataSet(dsetName,
1313 skippedFiles, destination,
1315 TProof::kOverwriteAllFiles);
1318 new TGMsgBox(fClient->GetRoot(),
this,
"Upload DataSet",
1319 TString::Format(
"Failed uploading \"%s\" to the cluster",
1320 obj->GetFirstUrl()->GetUrl()), kMBIconExclamation,
1324 new TGMsgBox(fClient->GetRoot(),
this,
"Upload DataSet",
1325 "Files have been successfully uploaded to the cluster",
1326 kMBIconAsterisk, kMBOk, &retval);
1328 fUploading = kFALSE;
1329 fUploadButton->SetState(kButtonUp);
1330 fCloseDlgButton->SetState(kButtonUp);
1333 if ((retval == kMBNoAll) || (retval == kMBDismiss)) {
1336 if (retval == kMBYes) {
1338 ret = fViewer->GetActDesc()->fProof->UploadDataSet(dsetName,
1339 obj->GetFirstUrl()->GetUrl(), destination,
1340 TProof::kAppend | TProof::kOverwriteAllFiles);
1343 new TGMsgBox(fClient->GetRoot(),
this,
"Upload DataSet",
1344 TString::Format(
"Failed uploading \"%s\" to the cluster",
1345 obj->GetFirstUrl()->GetUrl()), kMBIconExclamation,
1349 new TGMsgBox(fClient->GetRoot(),
this,
"Upload DataSet",
1350 "Files have been successfully uploaded to the cluster",
1351 kMBIconAsterisk, kMBOk, &retval);
1355 skippedFiles->Clear();
1358 new TGMsgBox(fClient->GetRoot(),
this,
"Upload DataSet",
1359 "Files have been successfully uploaded to the cluster",
1360 kMBIconAsterisk, kMBOk, &retval);
1365 fViewer->GetSessionFrame()->UpdateListOfDataSets();
1366 fUploading = kFALSE;
1367 fUploadButton->SetState(kButtonUp);
1368 fCloseDlgButton->SetState(kButtonUp);