13 #include "KVFileDialog.h"
48 static const char* gDefTypes[] = {
"All files",
"*",
49 "ROOT files",
"*.root",
67 EKVFileDialogMode dlg_type,
TGFileInfo* file_info) :
69 fSaveWorkingDirectory(gSystem->WorkingDirectory())
76 Connect(
"CloseWindow()",
"KVFileDialog",
this,
"CloseWindow()");
86 KVError::Error(
this,
"KVFileDialog",
"file_info argument not set");
88 if (fFileInfo->fIniDir) {
90 fFileInfo->fIniDir = 0;
92 if (fFileInfo->fFilename) {
93 delete [] fFileInfo->fFilename;
94 fFileInfo->fFilename = 0;
96 fFileInfo->fFileTypeIdx = 0;
99 fFileInfo = file_info;
101 if (!fFileInfo->fFileTypes)
102 fFileInfo->fFileTypes = gDefTypes;
104 if (!fFileInfo->fIniDir)
105 fFileInfo->fIniDir =
StrDup(
".");
111 ?
"S&ave in:" :
"&Look in:"));
113 fTreeLB->Associate(
this);
115 fPcdup = fClient->GetPicture(
"tb_uplevel.xpm");
116 fPnewf = fClient->GetPicture(
"tb_newfolder.xpm");
117 fPlist = fClient->GetPicture(
"tb_list.xpm");
118 fPdetails = fClient->GetPicture(
"tb_details.xpm");
120 if (!(fPcdup && fPnewf && fPlist && fPdetails))
121 KVError::Error(
this,
"KVFileDialog",
"missing toolbar pixmap(s).\n");
128 fCdup->SetStyle(
gClient->GetStyle());
129 fNewf->SetStyle(
gClient->GetStyle());
130 fList->SetStyle(
gClient->GetStyle());
131 fDetails->SetStyle(
gClient->GetStyle());
133 fCdup->SetToolTipText(
"Up One Level");
134 fNewf->SetToolTipText(
"Create New Folder");
135 fList->SetToolTipText(
"List");
136 fDetails->SetToolTipText(
"Details");
138 fCdup->Associate(
this);
139 fNewf->Associate(
this);
140 fList->Associate(
this);
141 fDetails->Associate(
this);
143 fList->AllowStayDown(
kTRUE);
144 fDetails->AllowStayDown(
kTRUE);
146 fTreeLB->Resize(200, fTreeLB->GetDefaultHeight());
155 if (dlg_type == kKVFDSave) {
157 fCheckB->SetToolTipText(
"Overwrite a file without displaying a message if selected");
161 fCheckB->SetToolTipText(
"Allows multiple file selection when SHIFT is pressed");
162 fCheckB->Connect(
"Toggled(Bool_t)",
"TGFileInfo", fFileInfo,
"SetMultipleSelection(Bool_t)");
165 fCheckB->SetOn(fFileInfo->fMultipleSelection);
174 fFc->Associate(
this);
176 fFv->GetViewPort()->SetBackgroundColor(fgWhitePixel);
177 fFv->SetContainer(fFc);
179 fFv->SetIncrements(1, 19);
183 buttons[0]->
Connect(
"Clicked()",
"TGFileContainer", fFc,
"Sort(=kSortByName)");
184 buttons[1]->
Connect(
"Clicked()",
"TGFileContainer", fFc,
"Sort(=kSortByType)");
185 buttons[2]->
Connect(
"Clicked()",
"TGFileContainer", fFc,
"Sort(=kSortBySize)");
186 buttons[3]->
Connect(
"Clicked()",
"TGFileContainer", fFc,
"Sort(=kSortByOwner)");
187 buttons[4]->
Connect(
"Clicked()",
"TGFileContainer", fFc,
"Sort(=kSortByGroup)");
188 buttons[5]->
Connect(
"Clicked()",
"TGFileContainer", fFc,
"Sort(=kSortByDate)");
191 fFc->SetFilter(fFileInfo->fFileTypes[fFileInfo->fFileTypeIdx + 1]);
193 fFc->ChangeDirectory(fFileInfo->fIniDir);
194 fFc->SetMultipleSelection(fFileInfo->fMultipleSelection);
195 fTreeLB->Update(fFc->GetDirectory());
201 if (dlg_type == kKVFDOpen) {
202 fCheckB->Connect(
"Toggled(Bool_t)",
"TGFileContainer", fFc,
"SetMultipleSelection(Bool_t)");
203 fCheckB->Connect(
"Toggled(Bool_t)",
"TGFileContainer", fFc,
"UnSelectAll()");
217 fName->Resize(230, fName->GetDefaultHeight());
218 fName->Associate(
this);
229 fTypes->Associate(
this);
230 fTypes->Resize(230, fName->GetDefaultHeight());
233 for (i = 0; fFileInfo->fFileTypes[i] != 0; i += 2) {
234 s.Form(
"%s (%s)", fFileInfo->fFileTypes[i], fFileInfo->fFileTypes[i + 1]);
235 fTypes->AddEntry(s.Data(), i);
237 fTypes->Select(fFileInfo->fFileTypeIdx);
243 if (fFileInfo->fFilename && fFileInfo->fFilename[0])
244 fTbfname->AddText(0, fFileInfo->fFilename);
248 fTypes->GetListBox()->Resize(230, 120);
261 ?
"&Save" :
"&Open"),
kIDF_OK);
264 fOk->Associate(
this);
265 fCancel->Associate(
this);
276 SetEditDisabled(kEditDisable);
290 SetWMSize(
size.fWidth,
size.fHeight);
293 const char* wname = ((dlg_type == kKVFDSave) ?
"Save As..." : (dlg_type == kKVFDOpen) ?
"Open" :
"Choose directory...");
294 SetWindowName(wname);
296 SetClassHints(
"FileDialog",
"FileDialog");
305 fFc->DisplayDirectory();
306 fClient->WaitFor(
this);
379 if ((fDlgMode != kKVFDDirectory) && (fTbfname->
GetTextLength() == 0)) {
380 txt =
"Please provide file name or use \"Cancel\"";
390 txt =
TString::Format(
"File name %s already exists, OK to overwrite it?",
446 strlcpy(answer,
"(empty)",
sizeof(answer));
448 "Enter directory name:",
451 while (strcmp(answer,
"(empty)") == 0) {
453 "Please enter a valid directory name.",
456 "Enter directory name:",
459 if (strcmp(answer,
"") == 0)
550 tmpString +=
"\"" + el->
GetString() +
"\" ";
555 fTbfname->
AddText(0, tmpString);
577 if (!strcmp(fOk->
GetTitle(),
"Save") &&
581 txt =
TString::Format(
"File name %s already exists, OK to overwrite it?",
619 if ((fDlgMode != kKVFDDirectory) && (fTbfname->
GetTextLength() == 0)) {
620 const char* txt2 =
"Please provide file name or use \"Cancel\"";
638 else if (!strcmp(fOk->
GetTitle(),
"Save") &&
641 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.
Bool_t ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2) override
Process messages generated by the user input in the file dialog.
void CloseWindow() override
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)
void Error(UserClass p, const char *location, const char *va_(fmt),...)
Type GetType(const std::string &Name)
Double_t Max(Double_t a, Double_t b)