13 #include "KVFileDialog.h"
47 static const char* gDefTypes[] = {
"All files",
"*",
48 "ROOT files",
"*.root",
66 EKVFileDialogMode dlg_type,
TGFileInfo* file_info) :
68 fSaveWorkingDirectory(gSystem->WorkingDirectory())
75 Connect(
"CloseWindow()",
"KVFileDialog",
this,
"CloseWindow()");
85 Error(
"KVFileDialog",
"file_info argument not set");
87 if (fFileInfo->fIniDir) {
89 fFileInfo->fIniDir = 0;
91 if (fFileInfo->fFilename) {
92 delete [] fFileInfo->fFilename;
93 fFileInfo->fFilename = 0;
95 fFileInfo->fFileTypeIdx = 0;
98 fFileInfo = file_info;
100 if (!fFileInfo->fFileTypes)
101 fFileInfo->fFileTypes = gDefTypes;
103 if (!fFileInfo->fIniDir)
104 fFileInfo->fIniDir =
StrDup(
".");
110 ?
"S&ave in:" :
"&Look in:"));
112 fTreeLB->Associate(
this);
114 fPcdup = fClient->GetPicture(
"tb_uplevel.xpm");
115 fPnewf = fClient->GetPicture(
"tb_newfolder.xpm");
116 fPlist = fClient->GetPicture(
"tb_list.xpm");
117 fPdetails = fClient->GetPicture(
"tb_details.xpm");
119 if (!(fPcdup && fPnewf && fPlist && fPdetails))
120 Error(
"KVFileDialog",
"missing toolbar pixmap(s).\n");
127 fCdup->SetStyle(
gClient->GetStyle());
128 fNewf->SetStyle(
gClient->GetStyle());
129 fList->SetStyle(
gClient->GetStyle());
130 fDetails->SetStyle(
gClient->GetStyle());
132 fCdup->SetToolTipText(
"Up One Level");
133 fNewf->SetToolTipText(
"Create New Folder");
134 fList->SetToolTipText(
"List");
135 fDetails->SetToolTipText(
"Details");
137 fCdup->Associate(
this);
138 fNewf->Associate(
this);
139 fList->Associate(
this);
140 fDetails->Associate(
this);
142 fList->AllowStayDown(
kTRUE);
143 fDetails->AllowStayDown(
kTRUE);
145 fTreeLB->Resize(200, fTreeLB->GetDefaultHeight());
154 if (dlg_type == kKVFDSave) {
156 fCheckB->SetToolTipText(
"Overwrite a file without displaying a message if selected");
160 fCheckB->SetToolTipText(
"Allows multiple file selection when SHIFT is pressed");
161 fCheckB->Connect(
"Toggled(Bool_t)",
"TGFileInfo", fFileInfo,
"SetMultipleSelection(Bool_t)");
164 fCheckB->SetOn(fFileInfo->fMultipleSelection);
173 fFc->Associate(
this);
175 fFv->GetViewPort()->SetBackgroundColor(fgWhitePixel);
176 fFv->SetContainer(fFc);
178 fFv->SetIncrements(1, 19);
182 buttons[0]->
Connect(
"Clicked()",
"TGFileContainer", fFc,
"Sort(=kSortByName)");
183 buttons[1]->
Connect(
"Clicked()",
"TGFileContainer", fFc,
"Sort(=kSortByType)");
184 buttons[2]->
Connect(
"Clicked()",
"TGFileContainer", fFc,
"Sort(=kSortBySize)");
185 buttons[3]->
Connect(
"Clicked()",
"TGFileContainer", fFc,
"Sort(=kSortByOwner)");
186 buttons[4]->
Connect(
"Clicked()",
"TGFileContainer", fFc,
"Sort(=kSortByGroup)");
187 buttons[5]->
Connect(
"Clicked()",
"TGFileContainer", fFc,
"Sort(=kSortByDate)");
190 fFc->SetFilter(fFileInfo->fFileTypes[fFileInfo->fFileTypeIdx + 1]);
192 fFc->ChangeDirectory(fFileInfo->fIniDir);
193 fFc->SetMultipleSelection(fFileInfo->fMultipleSelection);
194 fTreeLB->Update(fFc->GetDirectory());
200 if (dlg_type == kKVFDOpen) {
201 fCheckB->Connect(
"Toggled(Bool_t)",
"TGFileContainer", fFc,
"SetMultipleSelection(Bool_t)");
202 fCheckB->Connect(
"Toggled(Bool_t)",
"TGFileContainer", fFc,
"UnSelectAll()");
216 fName->Resize(230, fName->GetDefaultHeight());
217 fName->Associate(
this);
228 fTypes->Associate(
this);
229 fTypes->Resize(230, fName->GetDefaultHeight());
232 for (i = 0; fFileInfo->fFileTypes[i] != 0; i += 2) {
233 s.Form(
"%s (%s)", fFileInfo->fFileTypes[i], fFileInfo->fFileTypes[i + 1]);
234 fTypes->AddEntry(s.Data(), i);
236 fTypes->Select(fFileInfo->fFileTypeIdx);
242 if (fFileInfo->fFilename && fFileInfo->fFilename[0])
243 fTbfname->AddText(0, fFileInfo->fFilename);
247 fTypes->GetListBox()->Resize(230, 120);
260 ?
"&Save" :
"&Open"),
kIDF_OK);
263 fOk->Associate(
this);
264 fCancel->Associate(
this);
275 SetEditDisabled(kEditDisable);
289 SetWMSize(
size.fWidth,
size.fHeight);
292 const char* wname = ((dlg_type == kKVFDSave) ?
"Save As..." : (dlg_type == kKVFDOpen) ?
"Open" :
"Choose directory...");
293 SetWindowName(wname);
295 SetClassHints(
"FileDialog",
"FileDialog");
304 fFc->DisplayDirectory();
305 fClient->WaitFor(
this);
379 txt =
"Please provide file name or use \"Cancel\"";
389 txt =
TString::Format(
"File name %s already exists, OK to overwrite it?",
445 strlcpy(answer,
"(empty)",
sizeof(answer));
447 "Enter directory name:",
450 while (strcmp(answer,
"(empty)") == 0) {
452 "Please enter a valid directory name.",
455 "Enter directory name:",
458 if (strcmp(answer,
"") == 0)
549 tmpString +=
"\"" + el->
GetString() +
"\" ";
580 txt =
TString::Format(
"File name %s already exists, OK to overwrite it?",
619 const char* txt2 =
"Please provide file name or use \"Cancel\"";
640 txt =
TString::Format(
"File name %s already exists, OK to overwrite it?",
size_t size(const MatrixT &matrix)
winID h TVirtualViewer3D TVirtualGLPainter p
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void SetMWMHints
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize MapSubwindows
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t SetWMSizeHints
char * StrDup(const char *str)
Bool_t R_ISDIR(Int_t mode)
R__EXTERN TSystem * gSystem
Modified version of TGFileDialog file selection dialog.
virtual ~KVFileDialog()
Delete file dialog.
TGPictureButton * fList
top toolbar button
const TGPicture * fPlist
picture for fList
TGTextBuffer * fTbfname
text buffer of file name
TGTextButton * fOk
ok button
Bool_t ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2) override
Process messages generated by the user input in the file dialog.
TGTextEntry * fName
file name text entry
TGFileInfo * fFileInfo
file info passed to this dialog
EKVFileDialogMode fDlgMode
void CloseWindow() override
TGComboBox * fTypes
file type combo box
TGFSComboBox * fTreeLB
file system path combo box
TString fSaveWorkingDirectory
TGListView * fFv
file list view
TGPictureButton * fDetails
top toolbar button
const TGPicture * fPcdup
OR set on/off multiple file selection for SaveAs dialog.
TGFileContainer * fFc
file list view container (containing the files)
const TGPicture * fPdetails
picture for fDetails
const TGPicture * fPnewf
picture for fNewf
const TGWindow * GetRoot() const
void NeedRedraw(TGWindow *w, Bool_t force=kFALSE)
void FreePicture(const TGPicture *pic)
virtual TGLBEntry * GetSelectedEntry() const
virtual void AddFrame(TGFrame *f, TGLayoutHints *l=nullptr)
UInt_t GetDefaultHeight() const override
virtual const TGFrame * GetNextSelected(void **current)
virtual Int_t NumSelected() const
virtual void Update(const char *path)
virtual void SetDisplayStat(Bool_t stat=kTRUE)
virtual void ChangeDirectory(const char *path)
virtual void DisplayDirectory()
virtual void SetFilter(const char *filter)
const char * GetDirectory() const
Bool_t fMultipleSelection
virtual void Resize(TGDimension size)
virtual void DeleteWindow()
TList * GetSelectedItems()
TGString * GetItemName() const
virtual void SetViewMode(EListViewMode viewMode)
const char * GetString() const
void AddText(Int_t pos, const char *text)
const char * GetString() const
UInt_t GetTextLength() const
const char * GetTitle() const override
TString GetString() const
virtual void SetText(const char *text, Bool_t emit=kTRUE)
virtual const TGWindow * GetMainFrame() const
void Add(TObject *obj) override
void Delete(Option_t *option="") override
const TString & GetString() const
R__ALWAYS_INLINE Bool_t IsZombie() const
Bool_t Connect(const char *signal, const char *receiver_class, void *receiver, const char *slot)
Bool_t Disconnect(const char *signal=nullptr, void *receiver=nullptr, const char *slot=nullptr)
const char * Data() const
static TString Format(const char *fmt,...)
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Bool_t cd(const char *path)
virtual char * ConcatFileName(const char *dir, const char *name)
virtual int MakeDirectory(const char *name)
virtual int GetPathInfo(const char *path, FileStat_t &buf)
virtual Bool_t AccessPathName(const char *path, EAccessMode mode=kFileExists)
virtual Bool_t ChangeDirectory(const char *path)
virtual const char * UnixPathName(const char *unixpathname)
virtual Bool_t IsAbsoluteFileName(const char *dir)
virtual char * ExpandPathName(const char *path)
virtual const char * WorkingDirectory()
int main(int argc, char **argv)
Type GetType(const std::string &Name)
Double_t Max(Double_t a, Double_t b)