//______________________________________________________________________________ Bool_t KVFileDialog::ProcessMessage(Long_t msg, Long_t parm1, Long_t) { // Process messages generated by the user input in the file dialog. if (!fFc->GetDisplayStat()) return kTRUE; // Cancel button was pressed TGTreeLBEntry *e; TGTextLBEntry *te; TGFileItem *f; void *p = 0; TString txt; TString sdir = gSystem->WorkingDirectory(); switch (GET_MSG(msg)) { case kC_COMMAND: switch (GET_SUBMSG(msg)) { case kCM_BUTTON: switch (parm1) { case kIDF_OK: // same code as under kTE_ENTER if ((fDlgMode!=kKVFDDirectory) && (fTbfname->GetTextLength() == 0)) { txt = "Please provide file name or use \"Cancel\""; new TGMsgBox(fClient->GetRoot(), GetMainFrame(), "Missing File Name", txt, kMBIconExclamation, kMBOk); return kTRUE; } else if (!gSystem->AccessPathName(fTbfname->GetString(), kFileExists) && !strcmp(fOk->GetTitle(), "Save") && (!(fCheckB->GetState() == kButtonDown))) { Int_t ret; txt = TString::Format("File name %s already exists, OK to overwrite it?", fTbfname->GetString()); new TGMsgBox(fClient->GetRoot(), GetMainFrame(), "File Name Exist", txt.Data(), kMBIconExclamation, kMBYes | kMBNo, &ret); if (ret == kMBNo) return kTRUE; } if (fFileInfo->fMultipleSelection) { if (fFileInfo->fFilename) delete [] fFileInfo->fFilename; fFileInfo->fFilename = 0; } else { if (fFileInfo->fFilename) delete [] fFileInfo->fFilename; if (gSystem->IsAbsoluteFileName(fTbfname->GetString())) fFileInfo->fFilename = StrDup(fTbfname->GetString()); else fFileInfo->fFilename = gSystem->ConcatFileName(fFc->GetDirectory(), fTbfname->GetString()); fFileInfo->fFilename = StrDup(gSystem->UnixPathName(gSystem->ExpandPathName(fFileInfo->fFilename))); } if (fCheckB && (fCheckB->GetState() == kButtonDown)) fFileInfo->fOverwrite = kTRUE; else fFileInfo->fOverwrite = kFALSE; DeleteWindow(); break; case kIDF_CANCEL: if (fFileInfo->fFilename) delete [] fFileInfo->fFilename; fFileInfo->fFilename = 0; if (fFc->GetDisplayStat()) fFc->SetDisplayStat(kFALSE); if (fFileInfo->fFileNamesList != 0) { fFileInfo->fFileNamesList->Delete(); fFileInfo->fFileNamesList = 0; } DeleteWindow(); return kTRUE; //no need to redraw fFc break; case kIDF_CDUP: fFc->ChangeDirectory(".."); fTreeLB->Update(fFc->GetDirectory()); if (fFileInfo->fIniDir) delete [] fFileInfo->fIniDir; fFileInfo->fIniDir = StrDup(fFc->GetDirectory()); if (strcmp(gSystem->WorkingDirectory(),fFc->GetDirectory())) { gSystem->cd(fFc->GetDirectory()); } break; case kIDF_NEW_FOLDER: { char answer[128]; strlcpy(answer, "(empty)", sizeof(answer)); new TGInputDialog(gClient->GetRoot(), GetMainFrame(), "Enter directory name:", answer/*"(empty)"*/, answer); while ( strcmp(answer, "(empty)") == 0 ) { new TGMsgBox(gClient->GetRoot(), GetMainFrame(), "Error", "Please enter a valid directory name.", kMBIconStop, kMBOk); new TGInputDialog(gClient->GetRoot(), GetMainFrame(), "Enter directory name:", answer, answer); } if ( strcmp(answer, "") == 0 ) // Cancel button was pressed break; if (strcmp(gSystem->WorkingDirectory(),fFc->GetDirectory())) { gSystem->cd(fFc->GetDirectory()); } if ( gSystem->MakeDirectory(answer) != 0 ) new TGMsgBox(gClient->GetRoot(), GetMainFrame(), "Error", TString::Format("Directory name \'%s\' already exists!", answer), kMBIconStop, kMBOk); else { fFc->DisplayDirectory(); } gSystem->ChangeDirectory(sdir.Data()); break; } case kIDF_LIST: fFv->SetViewMode(kLVList); fDetails->SetState(kButtonUp); break; case kIDF_DETAILS: fFv->SetViewMode(kLVDetails); fList->SetState(kButtonUp); break; } break; case kCM_COMBOBOX: switch (parm1) { case kIDF_FSLB: e = (TGTreeLBEntry *) fTreeLB->GetSelectedEntry(); if (e) { fFc->ChangeDirectory(e->GetPath()->GetString()); fTreeLB->Update(fFc->GetDirectory()); if (fFileInfo->fIniDir) delete [] fFileInfo->fIniDir; fFileInfo->fIniDir = StrDup(fFc->GetDirectory()); if (strcmp(gSystem->WorkingDirectory(),fFc->GetDirectory())) { gSystem->cd(fFc->GetDirectory()); } } break; case kIDF_FTYPESLB: te = (TGTextLBEntry *) fTypes->GetSelectedEntry(); if (te) { //fTbfname->Clear(); //fTbfname->AddText(0, fFileInfo->fFileTypes[te->EntryId()+1]); fFileInfo->fFileTypeIdx = te->EntryId(); fFc->SetFilter(fFileInfo->fFileTypes[fFileInfo->fFileTypeIdx+1]); fFc->DisplayDirectory(); fClient->NeedRedraw(fName); } break; } break; default: break; } // switch(GET_SUBMSG(msg)) break; case kC_CONTAINER: switch (GET_SUBMSG(msg)) { case kCT_ITEMCLICK: if (parm1 == kButton1) { if (fFc->NumSelected() > 0) { if ( fFileInfo->fMultipleSelection == kFALSE ) { TGLVEntry *e2 = (TGLVEntry *) fFc->GetNextSelected(&p); if ((e2) && !R_ISDIR(((TGFileItem *)e2)->GetType())) { fTbfname->Clear(); if (e2->GetItemName()) fTbfname->AddText(0, e2->GetItemName()->GetString()); fClient->NeedRedraw(fName); } } else { TString tmpString; TList *tmp = fFc->GetSelectedItems(); TObjString *el; TIter next(tmp); if ( fFileInfo->fFileNamesList != 0 ) { fFileInfo->fFileNamesList->Delete(); } else { fFileInfo->fFileNamesList = new TList(); } while ((el = (TObjString *) next())) { char *s = gSystem->ConcatFileName(fFc->GetDirectory(), el->GetString()); tmpString += "\"" + el->GetString() + "\" "; fFileInfo->fFileNamesList->Add(new TObjString(s)); delete [] s; } fTbfname->Clear(); fTbfname->AddText(0, tmpString); fClient->NeedRedraw(fName); } } } break; case kCT_ITEMDBLCLICK: if (parm1 == kButton1) { if (fFc->NumSelected() == 1) { f = (TGFileItem *) fFc->GetNextSelected(&p); if (f && R_ISDIR(f->GetType())) { fFc->ChangeDirectory(f->GetItemName()->GetString()); fTreeLB->Update(fFc->GetDirectory()); if (fFileInfo->fIniDir) delete [] fFileInfo->fIniDir; fFileInfo->fIniDir = StrDup(fFc->GetDirectory()); if (strcmp(gSystem->WorkingDirectory(),fFc->GetDirectory())) { gSystem->cd(fFc->GetDirectory()); } } else { if (!strcmp(fOk->GetTitle(), "Save") && (!(fCheckB->GetState() == kButtonDown))) { Int_t ret; txt = TString::Format("File name %s already exists, OK to overwrite it?", fTbfname->GetString()); new TGMsgBox(fClient->GetRoot(), GetMainFrame(), "File Name Exist", txt.Data(), kMBIconExclamation, kMBYes | kMBNo, &ret); if (ret == kMBNo) return kTRUE; } if (fFileInfo->fFilename) delete [] fFileInfo->fFilename; if (gSystem->IsAbsoluteFileName(fTbfname->GetString())) fFileInfo->fFilename = StrDup(fTbfname->GetString()); else fFileInfo->fFilename = gSystem->ConcatFileName(fFc->GetDirectory(), fTbfname->GetString()); fFileInfo->fFilename = StrDup(gSystem->UnixPathName(gSystem->ExpandPathName(fFileInfo->fFilename))); if (fCheckB && (fCheckB->GetState() == kButtonDown)) fFileInfo->fOverwrite = kTRUE; else fFileInfo->fOverwrite = kFALSE; DeleteWindow(); } } } break; default: break; } // switch(GET_SUBMSG(msg)) break; case kC_TEXTENTRY: switch (GET_SUBMSG(msg)) { case kTE_ENTER: // same code as under kIDF_OK if ((fDlgMode!=kKVFDDirectory) && (fTbfname->GetTextLength() == 0)) { const char *txt2 = "Please provide file name or use \"Cancel\""; new TGMsgBox(fClient->GetRoot(), GetMainFrame(), "Missing File Name", txt2, kMBIconExclamation, kMBOk); return kTRUE; } else if (!gSystem->AccessPathName(fTbfname->GetString(), kFileExists)) { FileStat_t buf; if (!gSystem->GetPathInfo(fTbfname->GetString(), buf) && R_ISDIR(buf.fMode)) { fFc->ChangeDirectory(fTbfname->GetString()); fTreeLB->Update(fFc->GetDirectory()); if (strcmp(gSystem->WorkingDirectory(), fFc->GetDirectory())) { gSystem->cd(fFc->GetDirectory()); } fName->SetText("", kFALSE); return kTRUE; } else if (!strcmp(fOk->GetTitle(), "Save") && (!(fCheckB->GetState() == kButtonDown))) { Int_t ret; txt = TString::Format("File name %s already exists, OK to overwrite it?", fTbfname->GetString()); new TGMsgBox(fClient->GetRoot(), GetMainFrame(), "File Name Exist", txt.Data(), kMBIconExclamation, kMBYes | kMBNo, &ret); if (ret == kMBNo) return kTRUE; } } if (fFileInfo->fFilename) delete [] fFileInfo->fFilename; fFileInfo->fFilename = gSystem->ConcatFileName(fFc->GetDirectory(), fTbfname->GetString()); fFileInfo->fFilename = StrDup(gSystem->UnixPathName(gSystem->ExpandPathName(fFileInfo->fFilename))); if (fCheckB && (fCheckB->GetState() == kButtonDown)) fFileInfo->fOverwrite = kTRUE; else fFileInfo->fOverwrite = kFALSE; DeleteWindow(); break; default: break; } break; default: break; } // switch(GET_MSG(msg)) fClient->NeedRedraw(fFc); return kTRUE; }
void scanDirectory(const char *dirname) { TDirectoryIter iter(dirname); const char *filename = 0; TString ent; TString file; TString html; html.Form(gPreamble,dirname,dirname); TList dirList; TList fileList; while( (filename=iter.Next()) ) { if (filename[0]!='.') { ent.Form("%s/%s", dirname, filename); FileStat_t st; gSystem->GetPathInfo(ent.Data(), st); if (R_ISDIR(st.fMode)) { //fprintf(stderr,"Seeing directory %s\n",ent.Data()); scanDirectory(ent.Data()); dirList.Add(new TObjString(filename)); } else { size_t len = strlen(filename); if (len > 8 && strncmp(filename,"pt_",3)==0 && strncmp(filename+len-5,".root",5)==0) { //fprintf(stderr,"Seeing file %s\n",ent.Data()); file = filename; file[len-5]='\0'; fileList.Add(new TObjString(file)); } } } } dirList.Sort(); fileList.Sort(); TIter next(&dirList); TObjString *obj; html += "<table width=\"500\">\n"; html += gLine; html += gParentDir; while ( (obj = (TObjString*)next()) ) { html += TString::Format(gDirFmt,obj->GetName(),obj->GetName()); } html += gLine; if (!fileList.IsEmpty()) { next = &fileList; while ( (obj = (TObjString*)next()) ) { html += "<tr>"; html += TString::Format(gFiles,obj->GetName(),obj->GetName(),obj->GetName(),obj->GetName()); obj = (TObjString*)next(); if (obj) { html += TString::Format(gFiles,obj->GetName(),obj->GetName(),obj->GetName(),obj->GetName()); } else { html += "<td></td></tr>"; break; } } html += gLine; } html += "</table>\n"; dirList.Delete(); fileList.Delete(); html += "</body>\n"; html += "</html>\n"; ent.Form("%s/pt_index.html",dirname); FILE *output = fopen(ent.Data(),"w"); fprintf(output,"%s",html.Data()); fclose(output); }