00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "TSessionDialogs.h"
00022 #include "TSessionViewer.h"
00023 #include "TROOT.h"
00024 #include "TSystem.h"
00025 #include "TGButton.h"
00026 #include "TList.h"
00027 #include "TChain.h"
00028 #include "TDSet.h"
00029 #include "TGTextEntry.h"
00030 #include "TGTextBuffer.h"
00031 #include "TGNumberEntry.h"
00032 #include "TGLabel.h"
00033 #include "TGListView.h"
00034 #include "TGPicture.h"
00035 #include "TGFSContainer.h"
00036 #include "TGFileDialog.h"
00037 #include "TGListTree.h"
00038 #include "TInterpreter.h"
00039 #include "TApplication.h"
00040 #include "TKey.h"
00041 #include "TGTableLayout.h"
00042 #include "TGFileDialog.h"
00043 #include "TProof.h"
00044 #include "TFileInfo.h"
00045 #include "TGMsgBox.h"
00046 #include "TRegexp.h"
00047
00048 ClassImp(TNewChainDlg)
00049 ClassImp(TNewQueryDlg)
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059 static const char *gDatasetTypes[] = {
00060 "ROOT files", "*.root",
00061 "All files", "*",
00062 0, 0
00063 };
00064
00065 static const char *gFileTypes[] = {
00066 "C files", "*.[C|c]*",
00067 "ROOT files", "*.root",
00068 "All files", "*",
00069 0, 0
00070 };
00071
00072
00073
00074
00075
00076
00077 TNewChainDlg::TNewChainDlg(const TGWindow *p, const TGWindow *main) :
00078 TGTransientFrame(p, main, 350, 300, kVerticalFrame)
00079 {
00080
00081
00082
00083
00084 Pixel_t backgnd;
00085 if (!p || !main) return;
00086 SetCleanup(kDeepCleanup);
00087 fClient->GetColorByName("#F0FFF0", backgnd);
00088 AddFrame(new TGLabel(this, new TGHotString("List of Chains in Memory :")),
00089 new TGLayoutHints(kLHintsLeft, 5, 5, 7, 2) );
00090
00091
00092 fListView = new TGListView(this, 300, 100);
00093 fLVContainer = new TGLVContainer(fListView, kSunkenFrame, GetWhitePixel());
00094 fLVContainer->Associate(fListView);
00095 fLVContainer->SetViewMode(kLVSmallIcons);
00096 fLVContainer->SetCleanup(kDeepCleanup);
00097 AddFrame(fListView, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 4, 4, 4, 4));
00098
00099 fListView->Connect("Clicked(TGLVEntry*, Int_t)", "TNewChainDlg",
00100 this, "OnElementClicked(TGLVEntry* ,Int_t)");
00101
00102
00103 TGCompositeFrame* frmSel = new TGHorizontalFrame(this, 300, 100);
00104 frmSel->SetCleanup(kDeepCleanup);
00105 frmSel->AddFrame(new TGLabel(frmSel, new TGHotString("Selected chain :")),
00106 new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 5, 5, 5, 5) );
00107 fNameBuf = new TGTextBuffer(100);
00108 fName = new TGTextEntry(frmSel, fNameBuf);
00109 fName->Resize(200, fName->GetDefaultHeight());
00110 fName->Associate(this);
00111 fName->SetEnabled(kFALSE);
00112 fName->ChangeBackground(backgnd);
00113 frmSel->AddFrame(fName, new TGLayoutHints(kLHintsLeft | kLHintsCenterY | kLHintsExpandX, 5, 5, 5, 5));
00114 AddFrame(frmSel, new TGLayoutHints(kLHintsExpandX, 5, 5, 5, 5));
00115
00116 AddFrame(new TGLabel(this, "Double-click on the macro to be executed to create a new Chain:"),
00117 new TGLayoutHints(kLHintsCenterX, 5, 5, 5, 2));
00118
00119
00120
00121 TGListView* lv = new TGListView(this, 300, 100);
00122 AddFrame(lv,new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 5, 5, 2, 5));
00123
00124 Pixel_t white;
00125 gClient->GetColorByName("white",white);
00126 fContents = new TGFileContainer(lv, kSunkenFrame, white);
00127 fContents->SetCleanup(kDeepCleanup);
00128 fContents->SetFilter("*.[C|c]*");
00129 fContents->SetViewMode(kLVSmallIcons);
00130 fContents->Associate(this);
00131 fContents->SetDefaultHeaders();
00132 fContents->DisplayDirectory();
00133 fContents->AddFile("..");
00134 fContents->Resize();
00135 fContents->StopRefreshTimer();
00136
00137
00138 Window_t wdummy;
00139 Int_t ax, ay;
00140 gVirtualX->TranslateCoordinates( main->GetId(),
00141 fClient->GetDefaultRoot()->GetId(),
00142 0, 0, ax, ay, wdummy);
00143 Move(ax + 200, ay + 35);
00144
00145 TGCompositeFrame *tmp;
00146 AddFrame(tmp = new TGCompositeFrame(this, 140, 20, kHorizontalFrame),
00147 new TGLayoutHints(kLHintsLeft | kLHintsExpandX));
00148 tmp->SetCleanup(kDeepCleanup);
00149
00150 tmp->AddFrame(fOkButton = new TGTextButton(tmp, "&Ok", 0),
00151 new TGLayoutHints(kLHintsExpandX, 5, 5, 5, 5));
00152 tmp->AddFrame(fCancelButton = new TGTextButton(tmp, "&Cancel", 1),
00153 new TGLayoutHints(kLHintsExpandX, 5, 5, 5, 5));
00154 fOkButton->Associate(this);
00155 fCancelButton->Associate(this);
00156 fOkButton->SetEnabled(kFALSE);
00157
00158 SetWindowName("Chain Selection Dialog");
00159 MapSubwindows();
00160 Layout();
00161 Resize(GetDefaultSize());
00162 MapWindow();
00163 UpdateList();
00164 }
00165
00166
00167 TNewChainDlg::~TNewChainDlg()
00168 {
00169
00170 if (IsZombie()) return;
00171 delete fLVContainer;
00172 delete fContents;
00173 Cleanup();
00174 }
00175
00176
00177 void TNewChainDlg::OnElementSelected(TObject *obj)
00178 {
00179
00180
00181 if (obj && (obj->IsA() == TChain::Class() ||
00182 obj->IsA() == TDSet::Class())) {
00183 Emit("OnElementSelected(TObject *)", (Long_t)obj);
00184 }
00185 }
00186
00187
00188 void TNewChainDlg::OnElementClicked(TGLVEntry *entry, Int_t)
00189 {
00190
00191
00192
00193 fChain = (TObject *)entry->GetUserData();
00194 if (fChain->IsA() == TChain::Class()) {
00195 TString s = TString::Format("%s : %s" , ((TChain *)fChain)->GetTitle(),
00196 ((TChain *)fChain)->GetName());
00197 fName->SetText(s);
00198 }
00199 else if (fChain->IsA() == TDSet::Class()) {
00200 TString s = TString::Format("%s : %s" , ((TDSet *)fChain)->GetName(),
00201 ((TDSet *)fChain)->GetObjName());
00202 fName->SetText(s);
00203 }
00204 fOkButton->SetEnabled(kTRUE);
00205 }
00206
00207
00208 void TNewChainDlg::UpdateList()
00209 {
00210
00211
00212 TGLVEntry *item=0;
00213 TObject *obj = 0;
00214 fChains = gROOT->GetListOfDataSets();
00215 fLVContainer->RemoveAll();
00216 if (!fChains) return;
00217 TIter next(fChains);
00218
00219
00220 while ((obj = (TObject *)next())) {
00221 item = 0;
00222 if (obj->IsA() == TChain::Class()) {
00223 const char *title = ((TChain *)obj)->GetTitle();
00224 if (strlen(title) == 0)
00225 ((TChain *)obj)->SetTitle("TChain");
00226 item = new TGLVEntry(fLVContainer, ((TChain *)obj)->GetName(),
00227 ((TChain *)obj)->GetTitle());
00228 }
00229 else if (obj->IsA() == TDSet::Class()) {
00230 item = new TGLVEntry(fLVContainer, ((TDSet *)obj)->GetObjName(),
00231 ((TDSet *)obj)->GetName());
00232 }
00233 if (item) {
00234 item->SetUserData(obj);
00235 fLVContainer->AddItem(item);
00236 }
00237 }
00238 fClient->NeedRedraw(fLVContainer);
00239 Resize();
00240 }
00241
00242
00243 void TNewChainDlg::DisplayDirectory(const TString &fname)
00244 {
00245
00246
00247 fContents->SetDefaultHeaders();
00248 gSystem->ChangeDirectory(fname);
00249 fContents->ChangeDirectory(fname);
00250 fContents->DisplayDirectory();
00251 fContents->AddFile("..");
00252 Resize();
00253 }
00254
00255
00256 void TNewChainDlg::OnDoubleClick(TGLVEntry* f, Int_t btn)
00257 {
00258
00259
00260 if (btn!=kButton1) return;
00261 gVirtualX->SetCursor(fContents->GetId(),gVirtualX->CreateCursor(kWatch));
00262
00263 TString name(f->GetTitle());
00264
00265
00266 if (name.Contains(".C")) {
00267
00268 TString command = TString::Format(".x %s/%s",
00269 gSystem->UnixPathName(fContents->GetDirectory()),
00270 name.Data());
00271
00272 gApplication->ProcessLine(command.Data());
00273 UpdateList();
00274 } else {
00275
00276 DisplayDirectory(name);
00277 }
00278 gVirtualX->SetCursor(fContents->GetId(),gVirtualX->CreateCursor(kPointer));
00279 }
00280
00281
00282 Bool_t TNewChainDlg::ProcessMessage(Long_t msg, Long_t parm1, Long_t)
00283 {
00284
00285
00286 switch (GET_MSG(msg)) {
00287 case kC_COMMAND:
00288 switch (GET_SUBMSG(msg)) {
00289 case kCM_BUTTON:
00290 switch (parm1) {
00291
00292 case 0:
00293
00294 fOkButton->SetEnabled(kFALSE);
00295 OnElementSelected(fChain);
00296 DeleteWindow();
00297 break;
00298
00299 case 1:
00300
00301 fChain = 0;
00302 DeleteWindow();
00303 break;
00304 }
00305 break;
00306 default:
00307 break;
00308 }
00309 break;
00310
00311 case kC_CONTAINER:
00312 switch (GET_SUBMSG(msg)) {
00313 case kCT_ITEMDBLCLICK:
00314 if (parm1==kButton1)
00315 OnDoubleClick((TGLVEntry*)fContents->GetLastActive(), parm1);
00316 break;
00317 }
00318 break;
00319 default:
00320 break;
00321 }
00322 return kTRUE;
00323 }
00324
00325
00326 void TNewChainDlg::CloseWindow()
00327 {
00328
00329
00330 DeleteWindow();
00331 }
00332
00333
00334
00335
00336
00337
00338
00339 TNewQueryDlg::TNewQueryDlg(TSessionViewer *gui, Int_t Width, Int_t Height,
00340 TQueryDescription *query, Bool_t editmode) :
00341 TGTransientFrame(gClient->GetRoot(), gui, Width, Height)
00342 {
00343
00344
00345
00346 Window_t wdummy;
00347 Int_t ax, ay;
00348 fEditMode = editmode;
00349 fModified = kFALSE;
00350 fChain = 0;
00351 fQuery = query;
00352 if (fQuery && fQuery->fChain) {
00353 fChain = fQuery->fChain;
00354 }
00355 Build(gui);
00356
00357 if (editmode && query)
00358 UpdateFields(query);
00359 else if (!editmode) {
00360 TQueryDescription *fquery;
00361 fquery = (TQueryDescription *)fViewer->GetActDesc()->fQueries->Last();
00362 if(fquery)
00363 fTxtQueryName->SetText(fquery->fQueryName);
00364 else
00365 fTxtQueryName->SetText("Query 1");
00366 }
00367 MapSubwindows();
00368 Resize(Width, Height);
00369
00370 fFrmNewQuery->HideFrame(fFrmMore);
00371 fBtnMore->SetText(" More >> ");
00372 SetWMSizeHints(Width+5, Height+25, Width+5, Height+25, 1, 1);
00373 ChangeOptions(GetOptions() | kFixedSize);
00374 Layout();
00375 SetWindowName("Query Dialog");
00376
00377 gVirtualX->TranslateCoordinates( fViewer->GetId(),
00378 fClient->GetDefaultRoot()->GetId(),
00379 0, 0, ax, ay, wdummy);
00380 Move(ax + fViewer->GetWidth()/2, ay + 35);
00381 }
00382
00383
00384 TNewQueryDlg::~TNewQueryDlg()
00385 {
00386
00387
00388 if (IsZombie()) return;
00389 Cleanup();
00390 }
00391
00392
00393 void TNewQueryDlg::Build(TSessionViewer *gui)
00394 {
00395
00396
00397 TGButton* btnTmp;
00398 fViewer = gui;
00399 SetLayoutManager(new TGVerticalLayout(this));
00400 SetCleanup(kDeepCleanup);
00401 SetMinWidth(500);
00402 fFrmNewQuery = new TGGroupFrame(this, "New Query");
00403 fFrmNewQuery->SetCleanup(kDeepCleanup);
00404
00405 AddFrame(fFrmNewQuery, new TGLayoutHints(kLHintsExpandX |
00406 kLHintsExpandY, 2, 2, 2, 2));
00407 fFrmNewQuery->SetLayoutManager(new TGTableLayout(fFrmNewQuery, 6, 5));
00408
00409
00410 fFrmNewQuery->AddFrame(new TGLabel(fFrmNewQuery, "Query Name :"),
00411 new TGTableLayoutHints(0, 1, 0, 1, kLHintsCenterY, 0, 5, 4, 0));
00412 fFrmNewQuery->AddFrame(fTxtQueryName = new TGTextEntry(fFrmNewQuery,
00413 (const char *)0, 1), new TGTableLayoutHints(1, 2, 0, 1,
00414 kLHintsCenterY, 5, 5, 4, 0));
00415
00416
00417 fFrmNewQuery->AddFrame(new TGLabel(fFrmNewQuery, "TChain :"),
00418 new TGTableLayoutHints(0, 1, 1, 2, kLHintsCenterY, 0, 5, 4, 0));
00419 fFrmNewQuery->AddFrame(fTxtChain = new TGTextEntry(fFrmNewQuery,
00420 (const char *)0, 2), new TGTableLayoutHints(1, 2, 1, 2,
00421 kLHintsCenterY, 5, 5, 4, 0));
00422 fTxtChain->SetToolTipText("Specify TChain or TDSet from memory or file");
00423 fTxtChain->SetEnabled(kFALSE);
00424
00425 fFrmNewQuery->AddFrame(btnTmp = new TGTextButton(fFrmNewQuery, "Browse..."),
00426 new TGTableLayoutHints(2, 3, 1, 2, kLHintsCenterY, 5, 0, 4, 8));
00427 btnTmp->Connect("Clicked()", "TNewQueryDlg", this, "OnBrowseChain()");
00428
00429
00430 fFrmNewQuery->AddFrame(new TGLabel(fFrmNewQuery, "Selector :"),
00431 new TGTableLayoutHints(0, 1, 2, 3, kLHintsCenterY, 0, 5, 0, 0));
00432 fFrmNewQuery->AddFrame(fTxtSelector = new TGTextEntry(fFrmNewQuery,
00433 (const char *)0, 3), new TGTableLayoutHints(1, 2, 2, 3,
00434 kLHintsCenterY, 5, 5, 0, 0));
00435
00436 fFrmNewQuery->AddFrame(btnTmp = new TGTextButton(fFrmNewQuery, "Browse..."),
00437 new TGTableLayoutHints(2, 3, 2, 3, kLHintsCenterY, 5, 0, 0, 8));
00438 btnTmp->Connect("Clicked()", "TNewQueryDlg", this, "OnBrowseSelector()");
00439
00440
00441 fFrmNewQuery->AddFrame(fBtnMore = new TGTextButton(fFrmNewQuery, " Less << "),
00442 new TGTableLayoutHints(2, 3, 4, 5, kLHintsCenterY, 5, 5, 4, 0));
00443 fBtnMore->Connect("Clicked()", "TNewQueryDlg", this, "OnNewQueryMore()");
00444
00445
00446 fFrmMore = new TGCompositeFrame(fFrmNewQuery, 200, 200);
00447 fFrmMore->SetCleanup(kDeepCleanup);
00448
00449 fFrmNewQuery->AddFrame(fFrmMore, new TGTableLayoutHints(0, 3, 5, 6,
00450 kLHintsExpandX | kLHintsExpandY));
00451 fFrmMore->SetLayoutManager(new TGTableLayout(fFrmMore, 4, 3));
00452
00453
00454 fFrmMore->AddFrame(new TGLabel(fFrmMore, "Options :"),
00455 new TGTableLayoutHints(0, 1, 0, 1, kLHintsCenterY, 0, 5, 0, 0));
00456 fFrmMore->AddFrame(fTxtOptions = new TGTextEntry(fFrmMore,
00457 (const char *)0, 4), new TGTableLayoutHints(1, 2, 0, 1, 0, 22,
00458 0, 0, 8));
00459 fTxtOptions->SetText("ASYN");
00460
00461
00462 fFrmMore->AddFrame(new TGLabel(fFrmMore, "Nb Entries :"),
00463 new TGTableLayoutHints(0, 1, 1, 2, kLHintsCenterY, 0, 5, 0, 0));
00464 fFrmMore->AddFrame(fNumEntries = new TGNumberEntry(fFrmMore, 0, 5, -1,
00465 TGNumberFormat::kNESInteger, TGNumberFormat::kNEAAnyNumber,
00466 TGNumberFormat::kNELNoLimits), new TGTableLayoutHints(1, 2, 1, 2,
00467 0, 22, 0, 0, 8));
00468 fNumEntries->SetIntNumber(-1);
00469
00470 fFrmMore->AddFrame(new TGLabel(fFrmMore, "First entry :"),
00471 new TGTableLayoutHints(0, 1, 2, 3, kLHintsCenterY, 0, 5, 0, 0));
00472 fFrmMore->AddFrame(fNumFirstEntry = new TGNumberEntry(fFrmMore, 0, 5, -1,
00473 TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative,
00474 TGNumberFormat::kNELNoLimits), new TGTableLayoutHints(1, 2, 2, 3, 0,
00475 22, 0, 0, 8));
00476
00477
00478 fFrmMore->AddFrame(new TGLabel(fFrmMore, "Event list :"),
00479 new TGTableLayoutHints(0, 1, 3, 4, kLHintsCenterY, 0, 5, 0, 0));
00480 fFrmMore->AddFrame(fTxtEventList = new TGTextEntry(fFrmMore,
00481 (const char *)0, 6), new TGTableLayoutHints(1, 2, 3, 4, 0, 22,
00482 5, 0, 0));
00483
00484 fFrmMore->AddFrame(btnTmp = new TGTextButton(fFrmMore, "Browse..."),
00485 new TGTableLayoutHints(2, 3, 3, 4, 0, 6, 0, 0, 8));
00486 btnTmp->Connect("Clicked()", "TNewQueryDlg", this, "OnBrowseEventList()");
00487
00488 fTxtQueryName->Associate(this);
00489 fTxtChain->Associate(this);
00490 fTxtSelector->Associate(this);
00491 fTxtOptions->Associate(this);
00492 fNumEntries->Associate(this);
00493 fNumFirstEntry->Associate(this);
00494 fTxtEventList->Associate(this);
00495
00496 fTxtQueryName->Connect("TextChanged(char*)", "TNewQueryDlg", this,
00497 "SettingsChanged()");
00498 fTxtChain->Connect("TextChanged(char*)", "TNewQueryDlg", this,
00499 "SettingsChanged()");
00500 fTxtSelector->Connect("TextChanged(char*)", "TNewQueryDlg", this,
00501 "SettingsChanged()");
00502 fTxtOptions->Connect("TextChanged(char*)", "TNewQueryDlg", this,
00503 "SettingsChanged()");
00504 fNumEntries->Connect("ValueChanged(Long_t)", "TNewQueryDlg", this,
00505 "SettingsChanged()");
00506 fNumFirstEntry->Connect("ValueChanged(Long_t)", "TNewQueryDlg", this,
00507 "SettingsChanged()");
00508 fTxtEventList->Connect("TextChanged(char*)", "TNewQueryDlg", this,
00509 "SettingsChanged()");
00510
00511 TGCompositeFrame *tmp;
00512 AddFrame(tmp = new TGCompositeFrame(this, 140, 20, kHorizontalFrame),
00513 new TGLayoutHints(kLHintsLeft | kLHintsExpandX));
00514 tmp->SetCleanup(kDeepCleanup);
00515
00516
00517 if (fEditMode) {
00518 fBtnSave = new TGTextButton(tmp, "Save");
00519 fBtnSubmit = new TGTextButton(tmp, "Save && Submit");
00520 }
00521 else {
00522 fBtnSave = new TGTextButton(tmp, "Add");
00523 fBtnSubmit = new TGTextButton(tmp, "Add && Submit");
00524 }
00525 tmp->AddFrame(fBtnSave, new TGLayoutHints(kLHintsLeft | kLHintsExpandX,
00526 3, 3, 3, 3));
00527 tmp->AddFrame(fBtnSubmit, new TGLayoutHints(kLHintsLeft | kLHintsExpandX,
00528 3, 3, 3, 3));
00529 fBtnSave->Connect("Clicked()", "TNewQueryDlg", this, "OnBtnSaveClicked()");
00530 fBtnSubmit->Connect("Clicked()", "TNewQueryDlg", this, "OnBtnSubmitClicked()");
00531 tmp->AddFrame(fBtnClose = new TGTextButton(tmp, "Close"),
00532 new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 3, 3, 3, 3));
00533 fBtnClose->Connect("Clicked()", "TNewQueryDlg", this, "OnBtnCloseClicked()");
00534 fBtnSave->SetState(kButtonDisabled);
00535 fBtnSubmit->SetState(kButtonDisabled);
00536 }
00537
00538
00539 void TNewQueryDlg::CloseWindow()
00540 {
00541
00542
00543 DeleteWindow();
00544 }
00545
00546
00547 void TNewQueryDlg::OnNewQueryMore()
00548 {
00549
00550
00551 if (fFrmNewQuery->IsVisible(fFrmMore)) {
00552 fFrmNewQuery->HideFrame(fFrmMore);
00553 fBtnMore->SetText(" More >> ");
00554 }
00555 else {
00556 fFrmNewQuery->ShowFrame(fFrmMore);
00557 fBtnMore->SetText(" Less << ");
00558 }
00559 }
00560
00561
00562 void TNewQueryDlg::OnBrowseChain()
00563 {
00564
00565
00566 TNewChainDlg *dlg = new TNewChainDlg(fClient->GetRoot(), this);
00567 dlg->Connect("OnElementSelected(TObject *)", "TNewQueryDlg",
00568 this, "OnElementSelected(TObject *)");
00569 }
00570
00571
00572 void TNewQueryDlg::OnElementSelected(TObject *obj)
00573 {
00574
00575
00576 if (obj) {
00577 fChain = obj;
00578 if (obj->IsA() == TChain::Class())
00579 fTxtChain->SetText(((TChain *)fChain)->GetName());
00580 else if (obj->IsA() == TDSet::Class())
00581 fTxtChain->SetText(((TDSet *)fChain)->GetObjName());
00582 }
00583 }
00584
00585
00586 void TNewQueryDlg::OnBrowseSelector()
00587 {
00588
00589
00590 TGFileInfo fi;
00591 fi.fFileTypes = gFileTypes;
00592 new TGFileDialog(fClient->GetRoot(), this, kFDOpen, &fi);
00593 if (!fi.fFilename) return;
00594 fTxtSelector->SetText(gSystem->UnixPathName(fi.fFilename));
00595 }
00596
00597
00598 void TNewQueryDlg::OnBrowseEventList()
00599 {
00600
00601
00602 }
00603
00604
00605 void TNewQueryDlg::OnBtnSaveClicked()
00606 {
00607
00608
00609
00610
00611 TQueryDescription *newquery;
00612 if (fEditMode && fQuery)
00613 newquery = fQuery;
00614 else
00615 newquery = new TQueryDescription();
00616
00617
00618 newquery->fSelectorString = fTxtSelector->GetText();
00619 if (fChain) {
00620 newquery->fTDSetString = fChain->GetName();
00621 newquery->fChain = fChain;
00622 }
00623 else {
00624 newquery->fTDSetString = "";
00625 newquery->fChain = 0;
00626 }
00627 newquery->fQueryName = fTxtQueryName->GetText();
00628 newquery->fOptions.Form("%s",fTxtOptions->GetText());
00629 newquery->fNoEntries = fNumEntries->GetIntNumber();
00630 newquery->fFirstEntry = fNumFirstEntry->GetIntNumber();
00631 newquery->fNbFiles = 0;
00632 newquery->fResult = 0;
00633
00634 if (newquery->fChain) {
00635 if (newquery->fChain->IsA() == TChain::Class())
00636 newquery->fNbFiles = ((TChain *)newquery->fChain)->GetListOfFiles()->GetEntriesFast();
00637 else if (newquery->fChain->IsA() == TDSet::Class())
00638 newquery->fNbFiles = ((TDSet *)newquery->fChain)->GetListOfElements()->GetSize();
00639 }
00640 if (!fEditMode) {
00641
00642
00643 newquery->fResult = 0;
00644 newquery->fStatus = TQueryDescription::kSessionQueryCreated;
00645
00646 TQueryDescription *fquery;
00647 fquery = (TQueryDescription *)fViewer->GetActDesc()->fQueries->FindObject(newquery->fQueryName);
00648 while (fquery) {
00649 int e = 1, j = 0, idx = 0;
00650 const char *name = fquery->fQueryName;
00651 for (int i=strlen(name)-1;i>0;i--) {
00652 if (isdigit(name[i])) {
00653 idx += (name[i]-'0') * e;
00654 e *= 10;
00655 j++;
00656 }
00657 else
00658 break;
00659 }
00660 if (idx > 0) {
00661 idx++;
00662 newquery->fQueryName.Remove(strlen(name)-j,j);
00663 newquery->fQueryName.Append(Form("%d",idx));
00664 }
00665 else
00666 newquery->fQueryName.Append(" 1");
00667 fquery = (TQueryDescription *)fViewer->GetActDesc()->fQueries->FindObject(newquery->fQueryName);
00668 }
00669 fTxtQueryName->SetText(newquery->fQueryName);
00670 fViewer->GetActDesc()->fQueries->Add((TObject *)newquery);
00671 TGListTreeItem *item = fViewer->GetSessionHierarchy()->FindChildByData(
00672 fViewer->GetSessionItem(), fViewer->GetActDesc());
00673 TGListTreeItem *item2 = fViewer->GetSessionHierarchy()->AddItem(item,
00674 newquery->fQueryName, fViewer->GetQueryConPict(), fViewer->GetQueryConPict());
00675 item2->SetUserData(newquery);
00676 fViewer->GetSessionHierarchy()->OpenItem(item);
00677 fViewer->GetSessionHierarchy()->ClearHighlighted();
00678 fViewer->GetSessionHierarchy()->HighlightItem(item2);
00679 fViewer->GetSessionHierarchy()->SetSelected(item2);
00680 fViewer->OnListTreeClicked(item2, 1, 0, 0);
00681 }
00682 else {
00683
00684
00685 TGListTreeItem *item = fViewer->GetSessionHierarchy()->GetSelected();
00686 fViewer->GetSessionHierarchy()->RenameItem(item, newquery->fQueryName);
00687 item->SetUserData(newquery);
00688 }
00689
00690 fClient->NeedRedraw(fViewer->GetSessionHierarchy());
00691 fTxtQueryName->SelectAll();
00692 fTxtQueryName->SetFocus();
00693 fViewer->WriteConfiguration();
00694 fModified = kFALSE;
00695 }
00696
00697
00698 void TNewQueryDlg::OnBtnSubmitClicked()
00699 {
00700
00701
00702 OnBtnSaveClicked();
00703 fViewer->GetQueryFrame()->OnBtnSubmit();
00704 }
00705
00706
00707 void TNewQueryDlg::OnBtnCloseClicked()
00708 {
00709
00710
00711 Int_t result = kMBNo;
00712 if (fModified) {
00713 new TGMsgBox(fClient->GetRoot(), this, "Modified Settings",
00714 "Do you wish to SAVE changes ?", 0,
00715 kMBYes | kMBNo | kMBCancel, &result);
00716 if (result == kMBYes) {
00717 OnBtnSaveClicked();
00718 }
00719 }
00720 if (result == kMBNo) {
00721 DeleteWindow();
00722 }
00723 }
00724
00725
00726 void TNewQueryDlg::Popup()
00727 {
00728
00729
00730 MapWindow();
00731 fTxtQueryName->SetFocus();
00732 }
00733
00734
00735 void TNewQueryDlg::SettingsChanged()
00736 {
00737
00738
00739 if (fEditMode && fQuery) {
00740 if ((strcmp(fQuery->fSelectorString.Data(), fTxtSelector->GetText())) ||
00741 (strcmp(fQuery->fQueryName.Data(), fTxtQueryName->GetText())) ||
00742 (strcmp(fQuery->fOptions.Data(), fTxtOptions->GetText())) ||
00743 (fQuery->fNoEntries != fNumEntries->GetIntNumber()) ||
00744 (fQuery->fFirstEntry != fNumFirstEntry->GetIntNumber()) ||
00745 (fQuery->fChain != fChain)) {
00746 fModified = kTRUE;
00747 }
00748 else {
00749 fModified = kFALSE;
00750 }
00751 }
00752 else {
00753 if ((fTxtQueryName->GetText()) &&
00754 ((fTxtQueryName->GetText()) ||
00755 (fTxtChain->GetText())))
00756 fModified = kTRUE;
00757 else
00758 fModified = kFALSE;
00759 }
00760 if (fModified) {
00761 fBtnSave->SetState(kButtonUp);
00762 fBtnSubmit->SetState(kButtonUp);
00763 }
00764 else {
00765 fBtnSave->SetState(kButtonDisabled);
00766 fBtnSubmit->SetState(kButtonDisabled);
00767 }
00768 }
00769
00770
00771 void TNewQueryDlg::UpdateFields(TQueryDescription *desc)
00772 {
00773
00774
00775 fQuery = desc;
00776 fTxtQueryName->SetText(desc->fQueryName);
00777 fTxtChain->SetText("");
00778 if (desc->fChain)
00779 fTxtChain->SetText(desc->fTDSetString);
00780 fTxtSelector->SetText(desc->fSelectorString);
00781 fTxtOptions->SetText(desc->fOptions);
00782 fNumEntries->SetIntNumber(desc->fNoEntries);
00783 fNumFirstEntry->SetIntNumber(desc->fFirstEntry);
00784 fTxtEventList->SetText(desc->fEventList);
00785 }
00786
00787 Bool_t TNewQueryDlg::ProcessMessage(Long_t msg, Long_t parm1, Long_t)
00788 {
00789
00790
00791
00792 switch (GET_MSG(msg)) {
00793 case kC_TEXTENTRY:
00794 switch (GET_SUBMSG(msg)) {
00795 case kTE_ENTER:
00796 case kTE_TAB:
00797 switch (parm1) {
00798 case 1:
00799 fTxtChain->SelectAll();
00800 fTxtChain->SetFocus();
00801 break;
00802 case 2:
00803 fTxtSelector->SelectAll();
00804 fTxtSelector->SetFocus();
00805 break;
00806 case 3:
00807 fTxtOptions->SelectAll();
00808 fTxtOptions->SetFocus();
00809 break;
00810 case 4:
00811 fTxtEventList->SelectAll();
00812 fTxtEventList->SetFocus();
00813 break;
00814 case 6:
00815 fTxtQueryName->SelectAll();
00816 fTxtQueryName->SetFocus();
00817 break;
00818 }
00819 break;
00820
00821 default:
00822 break;
00823 }
00824 break;
00825
00826 default:
00827 break;
00828 }
00829 return kTRUE;
00830 }
00831
00832
00833
00834
00835
00836
00837 TUploadDataSetDlg::TUploadDataSetDlg(TSessionViewer *gui, Int_t w, Int_t h) :
00838 TGTransientFrame(gClient->GetRoot(), gui, w, h)
00839 {
00840
00841
00842 fUploading = kFALSE;
00843 if (!gui) return;
00844 fViewer = gui;
00845
00846 SetCleanup(kDeepCleanup);
00847 TGHorizontalFrame *hFrame1 = new TGHorizontalFrame(this);
00848 hFrame1->SetCleanup(kDeepCleanup);
00849 hFrame1->AddFrame(new TGLabel(hFrame1,"Name of DataSet :"),
00850 new TGLayoutHints(kLHintsLeft | kLHintsCenterY,
00851 10, 10, 5, 5));
00852 fDSetName = new TGTextEntry(hFrame1, new TGTextBuffer(50));
00853 fDSetName->SetText("DataSet1");
00854 fDSetName->Resize(150, fDSetName->GetDefaultHeight());
00855 hFrame1->AddFrame(fDSetName, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,
00856 10, 10, 5, 5));
00857 AddFrame(hFrame1, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX,
00858 2, 2, 2, 2));
00859
00860
00861 TGGroupFrame *groupFrame1 = new TGGroupFrame(this, "DataSet Files");
00862 groupFrame1->SetCleanup(kDeepCleanup);
00863
00864
00865 TGHorizontalFrame *hFrame11 = new TGHorizontalFrame(groupFrame1);
00866 hFrame11->SetCleanup(kDeepCleanup);
00867 hFrame11->AddFrame(new TGLabel(hFrame11,"Location URL :"),
00868 new TGLayoutHints(kLHintsLeft | kLHintsCenterY,
00869 10, 10, 5, 5));
00870 fLocationURL = new TGTextEntry(hFrame11, new TGTextBuffer(150));
00871 fLocationURL->SetToolTipText("Enter location URL ( i.e \" root://lxplus//castor/cern.ch/user/n/name/*.root \" )");
00872 fLocationURL->Resize(210, fLocationURL->GetDefaultHeight());
00873 hFrame11->AddFrame(fLocationURL, new TGLayoutHints(kLHintsLeft |
00874 kLHintsCenterY, 10, 10, 5, 5));
00875 fAddButton = new TGTextButton(hFrame11, " Add >> ", 0);
00876 fAddButton->SetToolTipText("Add file(s) to the list");
00877 fAddButton->Associate(this);
00878 hFrame11->AddFrame(fAddButton, new TGLayoutHints(kLHintsLeft | kLHintsCenterY |
00879 kLHintsExpandX, 5, 10, 5, 5));
00880 groupFrame1->AddFrame(hFrame11, new TGLayoutHints(kLHintsLeft | kLHintsTop |
00881 kLHintsExpandX, 2, 2, 2, 2));
00882
00883
00884 TGHorizontalFrame *hFrame2 = new TGHorizontalFrame(groupFrame1);
00885 hFrame2->SetCleanup(kDeepCleanup);
00886
00887
00888
00889 fListView = new TGListView(hFrame2, 300, 100);
00890 fLVContainer = new TGLVContainer(fListView, kSunkenFrame, GetWhitePixel());
00891 fLVContainer->Associate(fListView);
00892 fLVContainer->SetViewMode(kLVDetails);
00893 fLVContainer->SetCleanup(kDeepCleanup);
00894 fLVContainer->SetHeaders(1);
00895 fLVContainer->SetHeader("File Name", kTextLeft, kTextLeft , 0);
00896 hFrame2->AddFrame(fListView, new TGLayoutHints(kLHintsLeft | kLHintsTop |
00897 kLHintsExpandX | kLHintsExpandY, 2, 2, 10, 10));
00898
00899
00900 TGVerticalFrame *vFrame1 = new TGVerticalFrame(hFrame2);
00901 vFrame1->SetCleanup(kDeepCleanup);
00902
00903 fBrowseButton = new TGTextButton(vFrame1, " Browse... ", 1);
00904 fBrowseButton->SetToolTipText("Add file(s) to the list");
00905 fBrowseButton->Associate(this);
00906 vFrame1->AddFrame(fBrowseButton, new TGLayoutHints(kLHintsLeft | kLHintsTop |
00907 kLHintsExpandX, 15, 5, 5, 5));
00908 fRemoveButton = new TGTextButton(vFrame1, " Remove ", 2);
00909 fRemoveButton->SetToolTipText("Remove selected file from the list");
00910 fRemoveButton->Associate(this);
00911 vFrame1->AddFrame(fRemoveButton, new TGLayoutHints(kLHintsLeft | kLHintsTop |
00912 kLHintsExpandX, 15, 5, 5, 5));
00913 fClearButton = new TGTextButton(vFrame1, " Clear ", 3);
00914 fClearButton->SetToolTipText("Clear list of files");
00915 fClearButton->Associate(this);
00916 vFrame1->AddFrame(fClearButton, new TGLayoutHints(kLHintsLeft | kLHintsTop |
00917 kLHintsExpandX, 15, 5, 5, 5));
00918
00919 fOverwriteDSet = new TGCheckButton(vFrame1, "Overwrite DataSet");
00920 fOverwriteDSet->SetToolTipText("Overwrite DataSet");
00921 vFrame1->AddFrame(fOverwriteDSet, new TGLayoutHints(kLHintsLeft | kLHintsTop |
00922 kLHintsExpandX, 15, 5, 5, 5));
00923 fOverwriteFiles = new TGCheckButton(vFrame1, "Overwrite Files");
00924 fOverwriteFiles->SetToolTipText("Overwrite files in DataSet");
00925 vFrame1->AddFrame(fOverwriteFiles, new TGLayoutHints(kLHintsLeft | kLHintsTop |
00926 kLHintsExpandX, 15, 5, 5, 5));
00927 fAppendFiles = new TGCheckButton(vFrame1, "Append Files");
00928 fAppendFiles->SetToolTipText("Append files in DataSet");
00929 vFrame1->AddFrame(fAppendFiles, new TGLayoutHints(kLHintsLeft | kLHintsTop |
00930 kLHintsExpandX, 15, 5, 5, 5));
00931
00932 fOverwriteDSet->Connect("Toggled(Bool_t)", "TUploadDataSetDlg", this,
00933 "OnOverwriteDataset(Bool_t)");
00934 fOverwriteFiles->Connect("Toggled(Bool_t)", "TUploadDataSetDlg", this,
00935 "OnOverwriteFiles(Bool_t)");
00936 fAppendFiles->Connect("Toggled(Bool_t)", "TUploadDataSetDlg", this,
00937 "OnAppendFiles(Bool_t)");
00938
00939 hFrame2->AddFrame(vFrame1, new TGLayoutHints(kLHintsRight | kLHintsTop |
00940 kLHintsExpandY, 2, 2, 2, 2));
00941 groupFrame1->AddFrame(hFrame2, new TGLayoutHints(kLHintsLeft | kLHintsTop |
00942 kLHintsExpandX | kLHintsExpandY, 2, 2, 2, 2));
00943
00944 AddFrame(groupFrame1, new TGLayoutHints(kLHintsLeft | kLHintsTop |
00945 kLHintsExpandX, 5, 5, 2, 2));
00946
00947
00948 TGHorizontalFrame *hFrame3 = new TGHorizontalFrame(this);
00949 hFrame3->SetCleanup(kDeepCleanup);
00950 hFrame3->AddFrame(new TGLabel(hFrame3,"Destination URL :"),
00951 new TGLayoutHints(kLHintsLeft | kLHintsCenterY,
00952 15, 10, 5, 5));
00953 fDestinationURL = new TGTextEntry(hFrame3, new TGTextBuffer(150));
00954 if (fViewer->GetActDesc()->fConnected &&
00955 fViewer->GetActDesc()->fAttached &&
00956 fViewer->GetActDesc()->fProof &&
00957 fViewer->GetActDesc()->fProof->IsValid()) {
00958
00959
00960 }
00961 fDestinationURL->SetToolTipText("Enter destination URL ( relative to \" root://host//proofpool/user/ \" )");
00962 fDestinationURL->Resize(305, fDestinationURL->GetDefaultHeight());
00963 hFrame3->AddFrame(fDestinationURL, new TGLayoutHints(kLHintsLeft |
00964 kLHintsCenterY, 10, 15, 5, 5));
00965 AddFrame(hFrame3, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX,
00966 2, 2, 2, 2));
00967
00968
00969 TGHorizontalFrame *hFrame4 = new TGHorizontalFrame(this);
00970 hFrame4->SetCleanup(kDeepCleanup);
00971 fUploadButton = new TGTextButton(hFrame4, "Upload DataSet", 10);
00972 fUploadButton->SetToolTipText("Upload the dataset to the cluster");
00973 fUploadButton->Associate(this);
00974 hFrame4->AddFrame(fUploadButton, new TGLayoutHints(kLHintsLeft | kLHintsCenterY |
00975 kLHintsExpandX, 15, 15, 2, 2));
00976 fCloseDlgButton = new TGTextButton(hFrame4, "Close Dialog", 11);
00977 fCloseDlgButton->SetToolTipText("Close the dialog");
00978 fCloseDlgButton->Associate(this);
00979 hFrame4->AddFrame(fCloseDlgButton, new TGLayoutHints(kLHintsLeft | kLHintsCenterY |
00980 kLHintsExpandX, 15, 15, 2, 2));
00981 AddFrame(hFrame4, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX,
00982 2, 2, 2, 2));
00983
00984
00985 Window_t wdummy;
00986 Int_t ax, ay;
00987 gVirtualX->TranslateCoordinates( gui->GetId(),
00988 fClient->GetDefaultRoot()->GetId(),
00989 0, 0, ax, ay, wdummy);
00990 Move(ax + 250, ay + 200);
00991
00992 SetWindowName("Upload DataSet Dialog");
00993 MapSubwindows();
00994 MapWindow();
00995
00996 Resize(w, h);
00997 SetWMSizeHints(w+5, h+5, w+5, h+5, 1, 1);
00998 ChangeOptions(GetOptions() | kFixedSize);
00999 Layout();
01000 }
01001
01002
01003 TUploadDataSetDlg::~TUploadDataSetDlg()
01004 {
01005
01006 if (IsZombie()) return;
01007 Cleanup();
01008 }
01009
01010
01011 void TUploadDataSetDlg::CloseWindow()
01012 {
01013
01014
01015 if (!fUploading)
01016 DeleteWindow();
01017 }
01018
01019
01020 Bool_t TUploadDataSetDlg::ProcessMessage(Long_t msg, Long_t parm1, Long_t)
01021 {
01022
01023
01024 switch (GET_MSG(msg)) {
01025 case kC_COMMAND:
01026 switch (GET_SUBMSG(msg)) {
01027 case kCM_BUTTON:
01028 switch (parm1) {
01029 case 0:
01030
01031 if (fLocationURL->GetText())
01032 AddFiles(fLocationURL->GetText());
01033 break;
01034 case 1:
01035
01036 BrowseFiles();
01037 break;
01038 case 2:
01039
01040 RemoveFile();
01041 break;
01042 case 3:
01043
01044 ClearFiles();
01045 break;
01046 case 10:
01047
01048 UploadDataSet();
01049 break;
01050 case 11:
01051
01052 CloseWindow();
01053 break;
01054 }
01055 break;
01056 default:
01057 break;
01058 }
01059 break;
01060
01061 default:
01062 break;
01063 }
01064 return kTRUE;
01065 }
01066
01067
01068 void TUploadDataSetDlg::AddFiles(const char *fileName)
01069 {
01070
01071
01072 if (strlen(fileName) < 5)
01073 return;
01074 if (strstr(fileName,"*.")) {
01075
01076 void *filesDir = gSystem->OpenDirectory(gSystem->DirName(fileName));
01077 const char* ent;
01078 TString filesExp(gSystem->BaseName(fileName));
01079 filesExp.ReplaceAll("*",".*");
01080 TRegexp rg(filesExp);
01081 while ((ent = gSystem->GetDirEntry(filesDir))) {
01082 TString entryString(ent);
01083 if (entryString.Index(rg) != kNPOS &&
01084 gSystem->AccessPathName(Form("%s/%s", gSystem->DirName(fileName),
01085 ent), kReadPermission) == kFALSE) {
01086 TString text = TString::Format("%s/%s",
01087 gSystem->UnixPathName(gSystem->DirName(fileName)), ent);
01088 if (!fLVContainer->FindItem(text.Data())) {
01089 TGLVEntry *entry = new TGLVEntry(fLVContainer, text.Data(), text.Data());
01090 entry->SetPictures(gClient->GetPicture("rootdb_t.xpm"),
01091 gClient->GetPicture("rootdb_t.xpm"));
01092 fLVContainer->AddItem(entry);
01093 }
01094 }
01095 }
01096 }
01097 else {
01098
01099 if (!fLVContainer->FindItem(fileName)) {
01100 TGLVEntry *entry = new TGLVEntry(fLVContainer, fileName, fileName);
01101 entry->SetPictures(gClient->GetPicture("rootdb_t.xpm"),
01102 gClient->GetPicture("rootdb_t.xpm"));
01103 fLVContainer->AddItem(entry);
01104 }
01105 }
01106
01107 fListView->AdjustHeaders();
01108 fListView->Layout();
01109 fClient->NeedRedraw(fLVContainer);
01110 }
01111
01112
01113 void TUploadDataSetDlg::AddFiles(TList *fileList)
01114 {
01115
01116
01117 TObjString *el;
01118 TIter next(fileList);
01119 while ((el = (TObjString *) next())) {
01120 TString fileName = TString::Format("%s/%s",
01121 gSystem->UnixPathName(gSystem->DirName(el->GetString())),
01122 gSystem->BaseName(el->GetString()));
01123
01124 if (!fLVContainer->FindItem(fileName.Data())) {
01125 TGLVEntry *entry = new TGLVEntry(fLVContainer, fileName.Data(), fileName.Data());
01126 entry->SetPictures(gClient->GetPicture("rootdb_t.xpm"),
01127 gClient->GetPicture("rootdb_t.xpm"));
01128 fLVContainer->AddItem(entry);
01129 }
01130 }
01131
01132 fListView->AdjustHeaders();
01133 fListView->Layout();
01134 fClient->NeedRedraw(fLVContainer);
01135 }
01136
01137
01138 void TUploadDataSetDlg::BrowseFiles()
01139 {
01140
01141
01142
01143 TGFileInfo fi;
01144 fi.fFileTypes = gDatasetTypes;
01145 fi.fFilename = strdup("*.root");
01146 new TGFileDialog(fClient->GetRoot(), this, kFDOpen, &fi);
01147 if (fi.fMultipleSelection && fi.fFileNamesList) {
01148 AddFiles(fi.fFileNamesList);
01149 }
01150 else if (fi.fFilename) {
01151 AddFiles(fi.fFilename);
01152 }
01153 }
01154
01155
01156 void TUploadDataSetDlg::ClearFiles()
01157 {
01158
01159
01160 fLVContainer->RemoveAll();
01161 fListView->Layout();
01162
01163 fClient->NeedRedraw(fLVContainer);
01164 }
01165
01166
01167 void TUploadDataSetDlg::OnOverwriteDataset(Bool_t on)
01168 {
01169
01170
01171 if (on && fAppendFiles->IsOn())
01172 fAppendFiles->SetState(kButtonUp);
01173 }
01174
01175
01176 void TUploadDataSetDlg::OnOverwriteFiles(Bool_t)
01177 {
01178
01179
01180 }
01181
01182
01183 void TUploadDataSetDlg::OnAppendFiles(Bool_t on)
01184 {
01185
01186
01187 if (on && fOverwriteDSet->IsOn())
01188 fOverwriteDSet->SetState(kButtonUp);
01189 }
01190
01191
01192 void TUploadDataSetDlg::RemoveFile()
01193 {
01194
01195
01196 TGFrame *item = (TGFrame *)fLVContainer->GetLastActive();
01197 fLVContainer->RemoveItem(item);
01198
01199 fListView->AdjustHeaders();
01200 fListView->Layout();
01201 fClient->NeedRedraw(fLVContainer);
01202 }
01203
01204
01205 void TUploadDataSetDlg::UploadDataSet()
01206 {
01207
01208
01209 Int_t retval;
01210 TString fileList;
01211 const char *dsetName = fDSetName->GetText();
01212 const char *destination = fDestinationURL->GetText();
01213 UInt_t flags = 0;
01214 TList *skippedFiles = new TList();
01215 TList *datasetFiles = new TList();
01216
01217 if (fUploading)
01218 return;
01219 if (!fViewer->GetActDesc()->fConnected ||
01220 !fViewer->GetActDesc()->fAttached ||
01221 !fViewer->GetActDesc()->fProof ||
01222 !fViewer->GetActDesc()->fProof->IsValid()) {
01223 return;
01224 }
01225
01226 if (fOverwriteDSet->IsOn())
01227 flags |= TProof::kOverwriteDataSet;
01228 else
01229 flags |= TProof::kNoOverwriteDataSet;
01230 if (fOverwriteFiles->IsOn())
01231 flags |= TProof::kOverwriteAllFiles;
01232 else
01233 flags |= TProof::kOverwriteNoFiles;
01234 if (fAppendFiles->IsOn()) {
01235 flags |= TProof::kAppend;
01236 if (flags & TProof::kNoOverwriteDataSet)
01237 flags &= ~TProof::kNoOverwriteDataSet;
01238 }
01239
01240 Int_t ret = 0;
01241 TIter next(fLVContainer->GetList());
01242 TGFrameElement *el;
01243 TGLVEntry *entry;
01244
01245 while ((el = (TGFrameElement *)next())) {
01246 entry = (TGLVEntry *) el->fFrame;
01247 const char *fname = gSystem->UnixPathName(entry->GetTitle());
01248 datasetFiles->Add(new TFileInfo(fname));
01249 }
01250 fUploading = kTRUE;
01251 fUploadButton->SetState(kButtonDisabled);
01252 fCloseDlgButton->SetState(kButtonDisabled);
01253
01254 if (strlen(destination) < 2) destination = 0;
01255 ret = fViewer->GetActDesc()->fProof->UploadDataSet(dsetName,
01256 datasetFiles, destination, flags, skippedFiles);
01257 if (ret == TProof::kDataSetExists) {
01258
01259
01260 new TGMsgBox(fClient->GetRoot(), this, "Upload DataSet",
01261 TString::Format("The dataset \"%s\" already exists on the cluster ! Overwrite ?",
01262 dsetName), kMBIconQuestion, kMBYes | kMBNo | kMBCancel | kMBAppend,
01263 &retval);
01264 if (retval == kMBYes) {
01265 ret = fViewer->GetActDesc()->fProof->UploadDataSet(dsetName,
01266 datasetFiles, destination,
01267 TProof::kOverwriteDataSet |
01268 TProof::kOverwriteNoFiles,
01269 skippedFiles);
01270 }
01271 if (retval == kMBAppend) {
01272 ret = fViewer->GetActDesc()->fProof->UploadDataSet(dsetName,
01273 datasetFiles, destination,
01274 TProof::kAppend |
01275 TProof::kOverwriteNoFiles,
01276 skippedFiles);
01277 }
01278 }
01279 if (ret == TProof::kError) {
01280
01281 new TGMsgBox(fClient->GetRoot(), this, "Upload DataSet",
01282 "Failed uploading dataset/files to the cluster",
01283 kMBIconExclamation, kMBOk, &retval);
01284 fUploading = kFALSE;
01285 fUploadButton->SetState(kButtonUp);
01286 fCloseDlgButton->SetState(kButtonUp);
01287 return;
01288 }
01289
01290 if (skippedFiles->GetSize()) {
01291 TIter nexts(skippedFiles);
01292 while (TFileInfo *obj = (TFileInfo*)nexts()) {
01293
01294
01295 new TGMsgBox(fClient->GetRoot(), this, "Upload DataSet",
01296 TString::Format("The file \"%s\" already exists on the cluster ! Overwrite ?",
01297 obj->GetFirstUrl()->GetUrl()), kMBIconQuestion,
01298 kMBYes | kMBNo | kMBYesAll | kMBNoAll | kMBDismiss, &retval);
01299 if (retval == kMBYesAll) {
01300 ret = fViewer->GetActDesc()->fProof->UploadDataSet(dsetName,
01301 skippedFiles, destination,
01302 TProof::kAppend |
01303 TProof::kOverwriteAllFiles);
01304 if (ret == TProof::kError) {
01305
01306 new TGMsgBox(fClient->GetRoot(), this, "Upload DataSet",
01307 TString::Format("Failed uploading \"%s\" to the cluster",
01308 obj->GetFirstUrl()->GetUrl()), kMBIconExclamation,
01309 kMBOk, &retval);
01310 }
01311 else {
01312 new TGMsgBox(fClient->GetRoot(), this, "Upload DataSet",
01313 "Files have been succesfully uploaded to the cluster",
01314 kMBIconAsterisk, kMBOk, &retval);
01315 }
01316 fUploading = kFALSE;
01317 fUploadButton->SetState(kButtonUp);
01318 fCloseDlgButton->SetState(kButtonUp);
01319 return;
01320 }
01321 if ((retval == kMBNoAll) || (retval == kMBDismiss)) {
01322 break;
01323 }
01324 if (retval == kMBYes) {
01325
01326 ret = fViewer->GetActDesc()->fProof->UploadDataSet(dsetName,
01327 obj->GetFirstUrl()->GetUrl(), destination,
01328 TProof::kAppend | TProof::kOverwriteAllFiles);
01329 if (ret == TProof::kError) {
01330
01331 new TGMsgBox(fClient->GetRoot(), this, "Upload DataSet",
01332 TString::Format("Failed uploading \"%s\" to the cluster",
01333 obj->GetFirstUrl()->GetUrl()), kMBIconExclamation,
01334 kMBOk, &retval);
01335 }
01336 else {
01337 new TGMsgBox(fClient->GetRoot(), this, "Upload DataSet",
01338 "Files have been succesfully uploaded to the cluster",
01339 kMBIconAsterisk, kMBOk, &retval);
01340 }
01341 }
01342 }
01343 skippedFiles->Clear();
01344 }
01345 else {
01346 new TGMsgBox(fClient->GetRoot(), this, "Upload DataSet",
01347 "Files have been succesfully uploaded to the cluster",
01348 kMBIconAsterisk, kMBOk, &retval);
01349 }
01350
01351 fViewer->GetSessionFrame()->UpdateListOfDataSets();
01352 fUploading = kFALSE;
01353 fUploadButton->SetState(kButtonUp);
01354 fCloseDlgButton->SetState(kButtonUp);
01355 }
01356