Logo ROOT  
Reference Guide
TGFileDialog.cxx
Go to the documentation of this file.
1// @(#)root/gui:$Id: f3cd439bd51d763ffd53693e89c42b2eaa27c520 $
2// Author: Fons Rademakers 20/01/98
3
4/*************************************************************************
5 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
6 * All rights reserved. *
7 * *
8 * For the licensing terms see $ROOTSYS/LICENSE. *
9 * For the list of contributors see $ROOTSYS/README/CREDITS. *
10 *************************************************************************/
11
12
13/** \class TGFileDialog
14 \ingroup guiwidgets
15
16This class creates a file selection dialog. It contains a combo box
17to select the desired directory. A listview with the different
18files in the current directory and a combo box with which you can
19select a filter (on file extensions).
20When creating a file dialog one passes a pointer to a TGFileInfo
21object. In this object you can set the fFileTypes and fIniDir to
22specify the list of file types for the filter combo box and the
23initial directory. When the TGFileDialog ctor returns the selected
24file name can be found in the TGFileInfo::fFilename field and the
25selected directory in TGFileInfo::fIniDir. The fFilename and
26fIniDir are deleted by the TGFileInfo dtor.
27
28*/
29
30
31#include "TGFileDialog.h"
32#include "TGLabel.h"
33#include "TGTextEntry.h"
34#include "TGComboBox.h"
35#include "TGListView.h"
36#include "TGFSContainer.h"
37#include "TGFSComboBox.h"
38#include "TGMsgBox.h"
39#include "TGInputDialog.h"
40#include "TSystem.h"
41#include "TObjString.h"
42#include "strlcpy.h"
43
44#include <sys/stat.h>
45
56};
57
58static const char *gDefTypes[] = { "All files", "*",
59 "ROOT files", "*.root",
60 "ROOT macros", "*.C",
61 nullptr, nullptr };
62
64
65
67
68////////////////////////////////////////////////////////////////////////////////
69/// TGFileInfo Destructor.
70
72{
73 delete [] fFilename;
74 delete [] fIniDir;
76}
77
78
79////////////////////////////////////////////////////////////////////////////////
80/// Delete file names list
81
83{
84 if (fFileNamesList) {
86 delete fFileNamesList;
87 fFileNamesList = nullptr;
88 }
89}
90
91////////////////////////////////////////////////////////////////////////////////
92/// Turn on/off multiple selection.
93
95{
96 if ( fMultipleSelection != option ) {
97 fMultipleSelection = option;
100 fFileNamesList = new TList();
101 }
102}
103
104////////////////////////////////////////////////////////////////////////////////
105/// Set file name
106
107void TGFileInfo::SetFilename(const char *fname)
108{
109 delete [] fFilename;
110 fFilename = fname ? StrDup(fname) : nullptr;
111}
112
113////////////////////////////////////////////////////////////////////////////////
114/// Set directory name
115
116void TGFileInfo::SetIniDir(const char *inidir)
117{
118 delete [] fIniDir;
119 fIniDir = inidir ? StrDup(inidir) : nullptr;
120}
121
122////////////////////////////////////////////////////////////////////////////////
123/// Create a file selection dialog. Depending on the dlg_type it can be
124/// used for opening or saving a file.
125/// About the first two arguments, p is the parent Window, usually the
126/// desktop (root) window, and main is the main (TGMainFrame) application
127/// window (the one opening the dialog), onto which the dialog is
128/// usually centered, and which is waiting for it to close.
129
131 EFileDialogMode dlg_type, TGFileInfo *file_info) :
132 TGTransientFrame(p, main, 10, 10, kVerticalFrame), fTbfname(0), fName(0),
133 fTypes(0), fTreeLB(0), fCdup(0), fNewf(0), fList(0), fDetails(0), fCheckB(0),
134 fPcdup(0), fPnewf(0), fPlist(0), fPdetails(0), fOk(0), fCancel(0), fFv(0),
135 fFc(0), fFileInfo(0), fDlgType(dlg_type)
136{
138 Connect("CloseWindow()", "TGFileDialog", this, "CloseWindow()");
140
141 int i;
142
143 if (!p && !main) {
144 MakeZombie();
145 return;
146 }
147 if (!file_info) {
148 Error("TGFileDialog", "file_info argument not set");
149 fFileInfo = &gInfo;
150 fFileInfo->SetIniDir(nullptr);
151 fFileInfo->SetFilename(nullptr);
153 } else
154 fFileInfo = file_info;
155
156 if (!fFileInfo->fFileTypes)
158
159 if (!fFileInfo->fIniDir)
160 fFileInfo->SetIniDir(".");
161
162 TGHorizontalFrame *fHtop = new TGHorizontalFrame(this, 10, 10);
163
164 //--- top toolbar elements
165 TGLabel *fLookin = new TGLabel(fHtop, new TGHotString((dlg_type == kFDSave || dlg_type == kDSave)
166 ? "S&ave in:" : "&Look in:"));
167 fTreeLB = new TGFSComboBox(fHtop, kIDF_FSLB);
168 fTreeLB->Associate(this);
169
170 fPcdup = fClient->GetPicture("tb_uplevel.xpm");
171 fPnewf = fClient->GetPicture("tb_newfolder.xpm");
172 fPlist = fClient->GetPicture("tb_list.xpm");
173 fPdetails = fClient->GetPicture("tb_details.xpm");
174
175 if (!(fPcdup && fPnewf && fPlist && fPdetails))
176 Error("TGFileDialog", "missing toolbar pixmap(s).\n");
177
178 fCdup = new TGPictureButton(fHtop, fPcdup, kIDF_CDUP);
180 fList = new TGPictureButton(fHtop, fPlist, kIDF_LIST);
182
183 fCdup->SetStyle(gClient->GetStyle());
184 fNewf->SetStyle(gClient->GetStyle());
185 fList->SetStyle(gClient->GetStyle());
186 fDetails->SetStyle(gClient->GetStyle());
187
188 fCdup->SetToolTipText("Up One Level");
189 fNewf->SetToolTipText("Create New Folder");
190 fList->SetToolTipText("List");
191 fDetails->SetToolTipText("Details");
192
193 fCdup->Associate(this);
194 fNewf->Associate(this);
195 fList->Associate(this);
196 fDetails->Associate(this);
197
200
202
203 fHtop->AddFrame(fLookin, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 2, 5, 2, 2));
204 fHtop->AddFrame(fTreeLB, new TGLayoutHints(kLHintsLeft | kLHintsExpandY, 3, 0, 2, 2));
205 fHtop->AddFrame(fCdup, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 3, 0, 2, 2));
206 fHtop->AddFrame(fNewf, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 3, 0, 2, 2));
207 fHtop->AddFrame(fList, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 3, 0, 2, 2));
208 fHtop->AddFrame(fDetails, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 0, 8, 2, 2));
209
210 if (dlg_type == kFDSave) {
211 fCheckB = new TGCheckButton(fHtop, "&Overwrite", kIDF_CHECKB);
212 fCheckB->SetToolTipText("Overwrite a file without displaying a message if selected");
213 } else if (dlg_type == kFDOpen) {
214 fCheckB = new TGCheckButton(fHtop, "&Multiple files", kIDF_CHECKB);
215 fCheckB->SetToolTipText("Allows multiple file selection when SHIFT is pressed");
216 fCheckB->Connect("Toggled(Bool_t)","TGFileInfo",fFileInfo,"SetMultipleSelection(Bool_t)");
217 }
218 if (fCheckB) {
221 }
222 AddFrame(fHtop, new TGLayoutHints(kLHintsTop | kLHintsExpandX, 4, 4, 3, 1));
223
224 //--- file view
225
226 fFv = new TGListView(this, 400, 161);
227
230 fFc->Associate(this);
231
235 fFv->SetIncrements(1, 19); // set vertical scroll one line height at a time
236
237 TGTextButton** buttons = fFv->GetHeaderButtons();
238 if (buttons) {
239 buttons[0]->Connect("Clicked()", "TGFileContainer", fFc, "Sort(=kSortByName)");
240 buttons[1]->Connect("Clicked()", "TGFileContainer", fFc, "Sort(=kSortByType)");
241 buttons[2]->Connect("Clicked()", "TGFileContainer", fFc, "Sort(=kSortBySize)");
242 buttons[3]->Connect("Clicked()", "TGFileContainer", fFc, "Sort(=kSortByOwner)");
243 buttons[4]->Connect("Clicked()", "TGFileContainer", fFc, "Sort(=kSortByGroup)");
244 buttons[5]->Connect("Clicked()", "TGFileContainer", fFc, "Sort(=kSortByDate)");
245 }
246
252
254
256
257 if (dlg_type == kFDOpen) {
258 fCheckB->Connect("Toggled(Bool_t)","TGFileContainer",fFc,"SetMultipleSelection(Bool_t)");
259 fCheckB->Connect("Toggled(Bool_t)","TGFileContainer",fFc,"UnSelectAll()");
260 }
261
262 //--- file name and types
263
264 TGHorizontalFrame *fHf = new TGHorizontalFrame(this, 10, 10);
265
266 TGVerticalFrame *fVf = new TGVerticalFrame(fHf, 10, 10);
267
268 TGHorizontalFrame *fHfname = new TGHorizontalFrame(fVf, 10, 10);
269
270 TGLabel *fLfname = new TGLabel(fHfname, new TGHotString(
271 (dlg_type == kDOpen || dlg_type == kDSave ) ? "Folder &name:" : "File &name:"));
272 fTbfname = new TGTextBuffer(1034);
273 fName = new TGTextEntry(fHfname, fTbfname);
275 fName->Associate(this);
276
277 fHfname->AddFrame(fLfname, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 2, 5, 2, 2));
278 fHfname->AddFrame(fName, new TGLayoutHints(kLHintsRight | kLHintsCenterY, 0, 20, 2, 2));
279
281
282 TGHorizontalFrame *fHftype = new TGHorizontalFrame(fVf, 10, 10);
283
284 TGLabel *fLftypes = new TGLabel(fHftype, new TGHotString("Files of &type:"));
285 fTypes = new TGComboBox(fHftype, kIDF_FTYPESLB);
286 fTypes->Associate(this);
288
289 TString s;
290 for (i = 0; fFileInfo->fFileTypes[i] != 0; i += 2) {
291 s.Form("%s (%s)", fFileInfo->fFileTypes[i], fFileInfo->fFileTypes[i+1]);
292 fTypes->AddEntry(s.Data(), i);
293 }
295
296 // Show all items in combobox without scrollbar
297 //TGDimension fw = fTypes->GetListBox()->GetContainer()->GetDefaultSize();
298 //fTypes->GetListBox()->Resize(fw.fWidth, fw.fHeight);
299
302 } else {
303 fTbfname->Clear();
304 if (dlg_type == kFDSave) {
305 fTbfname->AddText(0, "unnamed");
306 fName->SelectAll();
308 strstr(fFileInfo->fFileTypes[fFileInfo->fFileTypeIdx+1], "*.")) {
310 ext.ReplaceAll("*.", ".");
311 fTbfname->AddText(7, ext.Data());
312 }
313 fName->SetFocus();
314 }
315 }
316
317 fTypes->GetListBox()->Resize(230, 120);
318 if (dlg_type == kDOpen || dlg_type == kDSave) {
320 }
321
322 fHftype->AddFrame(fLftypes, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 2, 5, 2, 2));
323 fHftype->AddFrame(fTypes, new TGLayoutHints(kLHintsRight | kLHintsCenterY, 0, 20, 2, 2));
324
326
328
329 //--- Open/Save and Cancel buttons
330
331 TGVerticalFrame *fVbf = new TGVerticalFrame(fHf, 10, 10, kFixedWidth);
332
333 fOk = new TGTextButton(fVbf, new TGHotString((dlg_type == kFDSave || dlg_type == kDSave)
334 ? "&Save" : "&Open"), kIDF_OK);
335 fCancel = new TGTextButton(fVbf, new TGHotString("Cancel"), kIDF_CANCEL);
336
337 fOk->Associate(this);
338 fCancel->Associate(this);
339
340 fVbf->AddFrame(fOk, new TGLayoutHints(kLHintsTop | kLHintsExpandX, 0, 0, 2, 2));
341 fVbf->AddFrame(fCancel, new TGLayoutHints(kLHintsTop | kLHintsExpandX, 0, 0, 2, 2));
342
344 fVbf->Resize(width + 20, fVbf->GetDefaultHeight());
345
347
348 AddFrame(fHf, new TGLayoutHints(kLHintsTop | kLHintsExpandX, 4, 4, 3, 1));
350
352
354
355 Resize(size);
356
357 //---- position relative to the parent's window
358
360
361 //---- make the message box non-resizable
362
363 SetWMSize(size.fWidth, size.fHeight);
364 SetWMSizeHints(size.fWidth, size.fHeight, 10000, 10000, 1, 1);
365
366 const char *wname = (dlg_type == kFDSave || dlg_type == kDSave) ? "Save As..." : "Open";
367 SetWindowName(wname);
368 SetIconName(wname);
369 SetClassHints("ROOT", "FileDialog");
370
376
377 MapWindow();
379 if (dlg_type == kFDSave || dlg_type == kDSave)
380 fName->SetFocus();
381 fClient->WaitFor(this);
382}
383
384////////////////////////////////////////////////////////////////////////////////
385/// Delete file dialog.
386
388{
389 if (IsZombie()) return;
390 TString str = fCheckB ? fCheckB->GetString() : "";
391 if (str.Contains("Multiple") && fCheckB)
392 fCheckB->Disconnect("Toggled(Bool_t)");
397 delete fFc;
398}
399
400////////////////////////////////////////////////////////////////////////////////
401/// Close file dialog.
402
404{
405 fFileInfo->SetFilename(nullptr);
407 DeleteWindow();
408}
409
410////////////////////////////////////////////////////////////////////////////////
411/// Small function used to prevent memory leaks with TSystem::ExpandPathName,
412/// which returns a string created by StrDup, that has to be deleted
413
414namespace {
415 static inline void pExpandUnixPathName(TGFileInfo &file_info) {
416 char *tmpPath = gSystem->ExpandPathName(file_info.fFilename);
417 file_info.SetFilename(gSystem->UnixPathName(tmpPath));
418 delete[] tmpPath;
419 }
420}
421
422////////////////////////////////////////////////////////////////////////////////
423/// Process messages generated by the user input in the file dialog.
424
426{
427 if (!fFc->GetDisplayStat()) return kTRUE; // Cancel button was pressed
428
430 TGTextLBEntry *te;
431 TGFileItem *f;
432 void *p = 0;
433 TString txt;
435
436 switch (GET_MSG(msg)) {
437 case kC_COMMAND:
438 switch (GET_SUBMSG(msg)) {
439 case kCM_BUTTON:
440 switch (parm1) {
441 case kIDF_OK:
442 // same code as under kTE_ENTER
443 if (fTbfname->GetTextLength() == 0) {
444 txt = "Please provide file name or use \"Cancel\"";
446 "Missing File Name", txt, kMBIconExclamation,
447 kMBOk);
448 return kTRUE;
450 !strcmp(fOk->GetTitle(), "Save") && fCheckB &&
451 (!(fCheckB->GetState() == kButtonDown))) {
452 Int_t ret;
453 txt = TString::Format("File name %s already exists, OK to overwrite it?",
456 "File Name Exist", txt.Data(), kMBIconExclamation,
457 kMBYes | kMBNo, &ret);
458 if (ret == kMBNo)
459 return kTRUE;
460 }
462 fFileInfo->SetFilename(nullptr);
463 } else {
464 fFileInfo->SetFilename(nullptr);
465 // FIXME: once appropriate gSystem method exists, use SetFilename here
468 else
471 pExpandUnixPathName(*fFileInfo);
472 }
473 if (fCheckB && (fCheckB->GetState() == kButtonDown))
475 else
477 DeleteWindow();
478 break;
479
480 case kIDF_CANCEL:
481 fFileInfo->SetFilename(nullptr);
482 if (fDlgType == kDOpen || fDlgType == kDSave)
483 fFileInfo->SetIniDir(nullptr);
484 if (fFc->GetDisplayStat())
487 DeleteWindow();
488 return kTRUE; //no need to redraw fFc
489 break;
490
491 case kIDF_CDUP:
492 fFc->ChangeDirectory("..");
495 if (strcmp(gSystem->WorkingDirectory(),fFc->GetDirectory())) {
497 }
498 break;
499
500 case kIDF_NEW_FOLDER: {
501 char answer[128];
502 strlcpy(answer, "(empty)", sizeof(answer));
503 new TGInputDialog(gClient->GetRoot(), GetMainFrame(),
504 "Enter directory name:",
505 answer/*"(empty)"*/, answer);
506
507 while ( strcmp(answer, "(empty)") == 0 ) {
508 new TGMsgBox(gClient->GetRoot(), GetMainFrame(), "Error",
509 "Please enter a valid directory name.",
511 new TGInputDialog(gClient->GetRoot(), GetMainFrame(),
512 "Enter directory name:",
513 answer, answer);
514 }
515 if ( strcmp(answer, "") == 0 ) // Cancel button was pressed
516 break;
517
518 if (strcmp(gSystem->WorkingDirectory(),fFc->GetDirectory())) {
520 }
521 if ( gSystem->MakeDirectory(answer) != 0 )
522 new TGMsgBox(gClient->GetRoot(), GetMainFrame(), "Error",
523 TString::Format("Directory name \'%s\' already exists!", answer),
525 else {
527 }
529 break;
530 }
531
532 case kIDF_LIST:
535 break;
536
537 case kIDF_DETAILS:
540 break;
541 }
542 break;
543
544 case kCM_COMBOBOX:
545 switch (parm1) {
546 case kIDF_FSLB:
548 if (e) {
549 fFc->ChangeDirectory(e->GetPath()->GetString());
552 if (strcmp(gSystem->WorkingDirectory(),fFc->GetDirectory())) {
554 }
555 }
556 break;
557
558 case kIDF_FTYPESLB:
560 if (te) {
561 //fTbfname->Clear();
562 //fTbfname->AddText(0, fFileInfo->fFileTypes[te->EntryId()+1]);
567 }
568 break;
569 }
570 break;
571
572 default:
573 break;
574 } // switch(GET_SUBMSG(msg))
575 break;
576
577 case kC_CONTAINER:
578 switch (GET_SUBMSG(msg)) {
579 case kCT_ITEMCLICK:
580 if (parm1 == kButton1) {
581 if (fFc->NumSelected() > 0) {
583 TGLVEntry *e2 = (TGLVEntry *) fFc->GetNextSelected(&p);
584 if (fDlgType == kFDOpen || fDlgType == kFDSave) {
585 if ((e2) && !R_ISDIR(((TGFileItem *)e2)->GetType())) {
586 fTbfname->Clear();
587 if (e2->GetItemName())
590 }
591 } else {
592 if ((e2) && R_ISDIR(((TGFileItem *)e2)->GetType())) {
593 fTbfname->Clear();
594 if (e2->GetItemName())
598 } else if ((e2)) {
600 }
601 }
602 }
603 else {
604 TString tmpString;
605 TList *tmp = fFc->GetSelectedItems();
606 TObjString *el;
607 TIter next(tmp);
610 } else {
612 }
613 while ((el = (TObjString *) next())) {
615 el->GetString());
616 tmpString += "\"" + el->GetString() + "\" ";
618 delete [] s;
619 }
620 tmp->Delete();
621 delete tmp;
622 fTbfname->Clear();
623 fTbfname->AddText(0, tmpString);
625 }
626 }
627 }
628 break;
629
630 case kCT_ITEMDBLCLICK:
631
632 if (parm1 == kButton1) {
633 if (fFc->NumSelected() == 1) {
634 f = (TGFileItem *) fFc->GetNextSelected(&p);
635 if (f && R_ISDIR(f->GetType())) {
636 fFc->ChangeDirectory(f->GetItemName()->GetString());
639 if (strcmp(gSystem->WorkingDirectory(),fFc->GetDirectory())) {
641 }
642 if (fDlgType == kDOpen || fDlgType == kDSave) {
643 fTbfname->Clear();
646 }
647 } else if (fDlgType == kFDOpen || fDlgType == kFDSave) {
648 if (!strcmp(fOk->GetTitle(), "Save") && fCheckB &&
649 (!(fCheckB->GetState() == kButtonDown))) {
650
651 Int_t ret;
652 txt = TString::Format("File name %s already exists, OK to overwrite it?",
655 "File Name Exist", txt.Data(), kMBIconExclamation,
656 kMBYes | kMBNo, &ret);
657 if (ret == kMBNo)
658 return kTRUE;
659 }
660 fFileInfo->SetFilename(nullptr);
661 // FIXME: once appropriate gSystem method exists, use SetFilename here
664 else
667 pExpandUnixPathName(*fFileInfo);
668 if (fCheckB && (fCheckB->GetState() == kButtonDown))
670 else
672
673 DeleteWindow();
674 }
675 }
676 }
677
678 break;
679
680 default:
681 break;
682
683 } // switch(GET_SUBMSG(msg))
684 break;
685
686 case kC_TEXTENTRY:
687 // when typing, re-enable previously disabled button after having clicked on file instead of folder
690
691 switch (GET_SUBMSG(msg)) {
692 case kTE_ENTER:
693 // same code as under kIDF_OK
694 if (fTbfname->GetTextLength() == 0) {
695 const char *txt2 = "Please provide file name or use \"Cancel\"";
697 "Missing File Name", txt2, kMBIconExclamation,
698 kMBOk);
699 return kTRUE;
701 FileStat_t buf;
702 if (!gSystem->GetPathInfo(fTbfname->GetString(), buf) &&
703 R_ISDIR(buf.fMode)) {
706 if (strcmp(gSystem->WorkingDirectory(), fFc->GetDirectory())) {
708 }
709 fName->SetText("", kFALSE);
710 return kTRUE;
711 }
712 else if (!strcmp(fOk->GetTitle(), "Save") && fCheckB &&
713 (!(fCheckB->GetState() == kButtonDown))) {
714 Int_t ret;
715 txt = TString::Format("File name %s already exists, OK to overwrite it?",
718 "File Name Exist", txt.Data(), kMBIconExclamation,
719 kMBYes | kMBNo, &ret);
720 if (ret == kMBNo)
721 return kTRUE;
722 }
723 }
724 fFileInfo->SetFilename(nullptr);
725 // FIXME: once appropriate gSystem method exists, use SetFilename here
728 pExpandUnixPathName(*fFileInfo);
729 if (fCheckB && (fCheckB->GetState() == kButtonDown))
731 else
733 DeleteWindow();
734 break;
735
736 default:
737 break;
738 }
739 break;
740
741 default:
742 break;
743
744 } // switch(GET_MSG(msg))
745
747 return kTRUE;
748}
int Int_t
Definition: CPyCppyy.h:43
unsigned int UInt_t
Definition: CPyCppyy.h:44
long Long_t
Definition: CPyCppyy.h:50
@ kVerticalFrame
Definition: GuiTypes.h:381
@ kFixedWidth
Definition: GuiTypes.h:387
@ kHorizontalFrame
Definition: GuiTypes.h:382
@ kButton1
Definition: GuiTypes.h:214
#define f(i)
Definition: RSha256.hxx:104
#define e(i)
Definition: RSha256.hxx:103
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
const Bool_t kFALSE
Definition: RtypesCore.h:101
bool Bool_t
Definition: RtypesCore.h:63
const Bool_t kTRUE
Definition: RtypesCore.h:100
#define ClassImp(name)
Definition: Rtypes.h:364
include TDocParser_001 C image html pict1_TDocParser_001 png width
Definition: TDocParser.cxx:121
@ kButtonDown
Definition: TGButton.h:54
@ kButtonDisabled
Definition: TGButton.h:56
@ kButtonUp
Definition: TGButton.h:53
@ kButtonEngaged
Definition: TGButton.h:55
#define gClient
Definition: TGClient.h:157
@ kSortByName
Definition: TGFSContainer.h:21
EFileFialog
@ kIDF_OK
@ kIDF_FTYPESLB
@ kIDF_FSLB
@ kIDF_CDUP
@ kIDF_DETAILS
@ kIDF_NEW_FOLDER
@ kIDF_CHECKB
@ kIDF_LIST
@ kIDF_CANCEL
static TGFileInfo gInfo
static const char * gDefTypes[]
EFileDialogMode
Definition: TGFileDialog.h:20
@ kFDOpen
Definition: TGFileDialog.h:21
@ kDOpen
Definition: TGFileDialog.h:23
@ kDSave
Definition: TGFileDialog.h:24
@ kFDSave
Definition: TGFileDialog.h:22
@ kMWMDecorResizeH
Definition: TGFrame.h:65
@ kMWMFuncAll
Definition: TGFrame.h:49
@ kMWMFuncResize
Definition: TGFrame.h:50
@ kMWMDecorMaximize
Definition: TGFrame.h:69
@ kMWMDecorMinimize
Definition: TGFrame.h:68
@ kMWMDecorMenu
Definition: TGFrame.h:67
@ kMWMDecorAll
Definition: TGFrame.h:63
@ kMWMFuncMaximize
Definition: TGFrame.h:53
@ kMWMInputModeless
Definition: TGFrame.h:57
@ kMWMFuncMinimize
Definition: TGFrame.h:52
@ kDeepCleanup
Definition: TGFrame.h:42
@ kLHintsRight
Definition: TGLayout.h:26
@ kLHintsExpandY
Definition: TGLayout.h:31
@ kLHintsLeft
Definition: TGLayout.h:24
@ kLHintsCenterY
Definition: TGLayout.h:28
@ kLHintsTop
Definition: TGLayout.h:27
@ kLHintsExpandX
Definition: TGLayout.h:30
@ kLVDetails
Definition: TGListView.h:25
@ kLVList
Definition: TGListView.h:24
@ kMBNo
Definition: TGMsgBox.h:32
@ kMBYes
Definition: TGMsgBox.h:31
@ kMBOk
Definition: TGMsgBox.h:33
@ kMBIconExclamation
Definition: TGMsgBox.h:24
@ kMBIconStop
Definition: TGMsgBox.h:22
char * StrDup(const char *str)
Duplicate the string str.
Definition: TString.cxx:2515
@ kFileExists
Definition: TSystem.h:44
Bool_t R_ISDIR(Int_t mode)
Definition: TSystem.h:115
R__EXTERN TSystem * gSystem
Definition: TSystem.h:559
Int_t GET_MSG(Long_t val)
@ kCM_COMBOBOX
@ kTE_ENTER
@ kCT_ITEMCLICK
@ kC_COMMAND
@ kCM_BUTTON
@ kC_TEXTENTRY
@ kCT_ITEMDBLCLICK
@ kC_CONTAINER
Int_t GET_SUBMSG(Long_t val)
virtual void SetToolTipText(const char *text, Long_t delayms=400)
Set tool tip text associated with this button.
Definition: TGButton.cxx:445
virtual EButtonState GetState() const
Definition: TGButton.h:112
virtual void SetOn(Bool_t on=kTRUE, Bool_t emit=kFALSE)
Definition: TGButton.h:120
virtual void AllowStayDown(Bool_t a)
Definition: TGButton.h:113
virtual void SetStyle(UInt_t newstyle)
Set the button style (modern or classic).
Definition: TGButton.cxx:271
virtual void SetEnabled(Bool_t e=kTRUE)
Set enabled or disabled state of button.
Definition: TGButton.cxx:459
virtual void SetState(EButtonState state, Bool_t emit=kFALSE)
Set button state.
Definition: TGButton.cxx:235
TGViewPort * GetViewPort() const
Definition: TGCanvas.h:217
Selects different options.
Definition: TGButton.h:264
const TGWindow * GetRoot() const
Returns current root (i.e.
Definition: TGClient.cxx:226
void WaitFor(TGWindow *w)
Wait for window to be destroyed.
Definition: TGClient.cxx:711
const TGPicture * GetPicture(const char *name)
Get picture from the picture pool.
Definition: TGClient.cxx:291
void NeedRedraw(TGWindow *w, Bool_t force=kFALSE)
Set redraw flags.
Definition: TGClient.cxx:374
void FreePicture(const TGPicture *pic)
Free picture resource.
Definition: TGClient.cxx:310
A combobox (also known as a drop down listbox) allows the selection of one item out of a list of item...
Definition: TGComboBox.h:47
virtual void AddEntry(TGString *s, Int_t id)
Definition: TGComboBox.h:86
virtual void Select(Int_t id, Bool_t emit=kTRUE)
Make the selected item visible in the combo box window and emit signals according to the second param...
Definition: TGComboBox.cxx:456
virtual TGLBEntry * GetSelectedEntry() const
Definition: TGComboBox.h:115
virtual void SetEnabled(Bool_t on=kTRUE)
Set state of combo box. If kTRUE=enabled, kFALSE=disabled.
Definition: TGComboBox.cxx:646
virtual TGListBox * GetListBox() const
Definition: TGComboBox.h:110
virtual void AddFrame(TGFrame *f, TGLayoutHints *l=0)
Add frame to the composite frame using the specified layout hints.
Definition: TGFrame.cxx:1117
virtual void SetCleanup(Int_t mode=kLocalCleanup)
Turn on automatic cleanup of child frames in dtor.
Definition: TGFrame.cxx:1072
virtual TGDimension GetDefaultSize() const
std::cout << fWidth << "x" << fHeight << std::endl;
Definition: TGFrame.h:316
virtual void MapSubwindows()
Map all sub windows that are part of the composite frame.
Definition: TGFrame.cxx:1164
virtual UInt_t GetDefaultHeight() const
Definition: TGFrame.h:314
virtual void SetEditDisabled(UInt_t on=1)
Set edit disable flag for this frame and subframes.
Definition: TGFrame.cxx:1022
virtual void Associate(const TGWindow *w)
Definition: TGCanvas.h:89
virtual const TGFrame * GetNextSelected(void **current)
Return the next selected item.
Definition: TGCanvas.cxx:681
virtual Int_t NumSelected() const
Definition: TGCanvas.h:104
This is a combo box that is used in the File Selection dialog box.
Definition: TGFSComboBox.h:67
virtual void Update(const char *path)
Update file system combo box.
virtual void SetDisplayStat(Bool_t stat=kTRUE)
const char * GetDirectory() const
virtual void Sort(EFSSortMode sortType)
Sort file system list view container according to sortType.
virtual void ChangeDirectory(const char *path)
Change current directory.
virtual void DisplayDirectory()
Display the contents of the current directory in the container.
virtual void SetFilter(const char *filter)
Set file selection filter.
Bool_t GetDisplayStat()
This class creates a file selection dialog.
Definition: TGFileDialog.h:65
virtual Bool_t ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2)
Process messages generated by the user input in the file dialog.
const TGPicture * fPcdup
picture for fCdup
Definition: TGFileDialog.h:78
const TGPicture * fPdetails
picture for fDetails
Definition: TGFileDialog.h:81
TGFileContainer * fFc
file list view container (containing the files)
Definition: TGFileDialog.h:85
TGPictureButton * fDetails
top toolbar button
Definition: TGFileDialog.h:75
TGPictureButton * fNewf
top toolbar button
Definition: TGFileDialog.h:73
EFileDialogMode fDlgType
the dialog type passed
Definition: TGFileDialog.h:87
TGTextBuffer * fTbfname
text buffer of file name
Definition: TGFileDialog.h:68
TGTextButton * fCancel
cancel button
Definition: TGFileDialog.h:83
TGFSComboBox * fTreeLB
file system path combo box
Definition: TGFileDialog.h:71
virtual void CloseWindow()
Close file dialog.
TGFileInfo * fFileInfo
file info passed to this dialog
Definition: TGFileDialog.h:86
TGTextEntry * fName
file name text entry
Definition: TGFileDialog.h:69
const TGPicture * fPnewf
picture for fNewf
Definition: TGFileDialog.h:79
TGPictureButton * fList
top toolbar button
Definition: TGFileDialog.h:74
TGPictureButton * fCdup
top toolbar button
Definition: TGFileDialog.h:72
TGListView * fFv
file list view
Definition: TGFileDialog.h:84
const TGPicture * fPlist
picture for fList
Definition: TGFileDialog.h:80
virtual ~TGFileDialog()
Delete file dialog.
TGTextButton * fOk
ok button
Definition: TGFileDialog.h:82
TGCheckButton * fCheckB
set on/off file overwriting for Open dialog OR set on/off multiple file selection for SaveAs dialog
Definition: TGFileDialog.h:76
TGFileDialog(const TGFileDialog &)=delete
TGComboBox * fTypes
file type combo box
Definition: TGFileDialog.h:70
TList * fFileNamesList
list of selected file names
Definition: TGFileDialog.h:52
char * fFilename
selected file name
Definition: TGFileDialog.h:46
void SetMultipleSelection(Bool_t option)
Turn on/off multiple selection.
Int_t fFileTypeIdx
selected file type, index in fFileTypes
Definition: TGFileDialog.h:49
const char ** fFileTypes
file types used to filter selectable files
Definition: TGFileDialog.h:48
char * fIniDir
on input: initial directory, on output: new directory
Definition: TGFileDialog.h:47
~TGFileInfo()
TGFileInfo Destructor.
Bool_t fOverwrite
if true overwrite the file with existing name on save
Definition: TGFileDialog.h:50
void DeleteFileNamesList()
Delete file names list.
void SetFilename(const char *fname)
Set file name.
Bool_t fMultipleSelection
if true, allow multiple file selection
Definition: TGFileDialog.h:51
void SetIniDir(const char *inidir)
Set directory name.
virtual UInt_t GetDefaultWidth() const
Definition: TGFrame.h:190
virtual UInt_t GetDefaultHeight() const
Definition: TGFrame.h:191
virtual void SetBackgroundColor(Pixel_t back)
Set background color (override from TGWindow base class).
Definition: TGFrame.cxx:312
virtual void DeleteWindow()
Delete window.
Definition: TGFrame.cxx:276
virtual void Resize(UInt_t w=0, UInt_t h=0)
Resize the frame.
Definition: TGFrame.cxx:605
virtual void MapWindow()
map window
Definition: TGFrame.h:204
static Pixel_t fgWhitePixel
Definition: TGFrame.h:103
A composite frame that layout their children in horizontal way.
Definition: TGFrame.h:386
TGHotString is a string with a "hot" character underlined.
Definition: TGString.h:42
Input Dialog Widget.
Definition: TGInputDialog.h:22
Int_t EntryId() const
Definition: TGListBox.h:40
TList * GetSelectedItems()
Get list of selected items in container.
Definition: TGListView.cxx:944
void SetMultipleSelection(Bool_t multi=kTRUE)
Definition: TGListView.h:233
TGString * GetItemName() const
Definition: TGListView.h:88
This class handles GUI labels.
Definition: TGLabel.h:24
This class describes layout hints used by the layout classes.
Definition: TGLayout.h:50
virtual void Resize(UInt_t w, UInt_t h)
Resize the listbox widget.
Definition: TGListBox.cxx:1411
A list view is a widget that can contain a number of items arranged in a grid or list.
Definition: TGListView.h:115
virtual void SetIncrements(Int_t hInc, Int_t vInc)
Set horizontal and vertical scrollbar increments.
virtual void SetViewMode(EListViewMode viewMode)
Set list view mode.
TGTextButton ** GetHeaderButtons()
Definition: TGListView.h:159
virtual void SetContainer(TGFrame *f)
Set list view container.
void DontCallClose()
Typically call this method in the slot connected to the CloseWindow() signal to prevent the calling o...
Definition: TGFrame.cxx:1762
void SetClassHints(const char *className, const char *resourceName)
Set the windows class and resource name.
Definition: TGFrame.cxx:1838
void SetIconName(const char *name)
Set window icon name. This is typically done via the window manager.
Definition: TGFrame.cxx:1783
void SetWMSize(UInt_t w, UInt_t h)
Give the window manager a window size hint.
Definition: TGFrame.cxx:1873
void SetMWMHints(UInt_t value, UInt_t funcs, UInt_t input)
Set decoration style for MWM-compatible wm (mwm, ncdwm, fvwm?).
Definition: TGFrame.cxx:1848
void SetWMSizeHints(UInt_t wmin, UInt_t hmin, UInt_t wmax, UInt_t hmax, UInt_t winc, UInt_t hinc)
Give the window manager minimum and maximum size hints.
Definition: TGFrame.cxx:1886
void SetWindowName(const char *name=0)
Set window name. This is typically done via the window manager.
Definition: TGFrame.cxx:1770
TGClient * fClient
Connection to display server.
Definition: TGObject.h:27
Yield an action as soon as it is clicked.
Definition: TGButton.h:228
const char * GetString() const
Definition: TGString.h:30
A text buffer is used in several widgets, like TGTextEntry, TGFileDialog, etc.
Definition: TGTextBuffer.h:19
void AddText(Int_t pos, const char *text)
Definition: TGTextBuffer.h:36
const char * GetString() const
Definition: TGTextBuffer.h:34
UInt_t GetTextLength() const
Definition: TGTextBuffer.h:32
void Clear()
Definition: TGTextBuffer.h:39
Yield an action as soon as it is clicked.
Definition: TGButton.h:142
virtual const char * GetTitle() const
Returns title of object.
Definition: TGButton.h:190
TString GetString() const
Definition: TGButton.h:191
A TGTextEntry is a one line text input widget.
Definition: TGTextEntry.h:24
virtual void SetFocus()
Set focus to this text entry.
virtual void SelectAll()
Selects all text (i.e.
virtual void SetText(const char *text, Bool_t emit=kTRUE)
Sets text entry to text, clears the selection and moves the cursor to the end of the line.
Text string listbox entries.
Definition: TGListBox.h:48
Defines transient windows that typically are used for dialogs windows.
Definition: TGFrame.h:498
virtual void CenterOnParent(Bool_t croot=kTRUE, EPlacement pos=kCenter)
Position transient frame centered relative to the parent frame.
Definition: TGFrame.cxx:1937
A composite frame that layout their children in vertical way.
Definition: TGFrame.h:375
virtual void Associate(const TGWindow *w)
Definition: TGWidget.h:72
ROOT GUI Window base class.
Definition: TGWindow.h:23
virtual const TGWindow * GetMainFrame() const
Returns top level main frame.
Definition: TGWindow.cxx:152
@ kEditDisable
disable edit of this window
Definition: TGWindow.h:50
A doubly linked list.
Definition: TList.h:44
virtual void Add(TObject *obj)
Definition: TList.h:87
virtual void Delete(Option_t *option="")
Remove all objects from the list AND delete all heap based objects.
Definition: TList.cxx:470
Collectable string class.
Definition: TObjString.h:28
const TString & GetString() const
Definition: TObjString.h:46
R__ALWAYS_INLINE Bool_t IsZombie() const
Definition: TObject.h:149
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
Definition: TObject.cxx:893
void MakeZombie()
Definition: TObject.h:49
Bool_t Connect(const char *signal, const char *receiver_class, void *receiver, const char *slot)
Non-static method is used to connect from the signal of this object to the receiver slot.
Definition: TQObject.cxx:869
Bool_t Disconnect(const char *signal=0, void *receiver=0, const char *slot=0)
Disconnects signal of this object from slot of receiver.
Definition: TQObject.cxx:1027
Basic string class.
Definition: TString.h:136
TString & ReplaceAll(const TString &s1, const TString &s2)
Definition: TString.h:692
const char * Data() const
Definition: TString.h:369
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
Definition: TString.cxx:2336
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Definition: TString.h:624
Bool_t cd(const char *path)
Definition: TSystem.h:421
virtual Bool_t ExpandPathName(TString &path)
Expand a pathname getting rid of special shell characters like ~.
Definition: TSystem.cxx:1274
virtual char * ConcatFileName(const char *dir, const char *name)
Concatenate a directory and a file name. User must delete returned string.
Definition: TSystem.cxx:1071
virtual int MakeDirectory(const char *name)
Make a directory.
Definition: TSystem.cxx:828
int GetPathInfo(const char *path, Long_t *id, Long_t *size, Long_t *flags, Long_t *modtime)
Get info about a file: id, size, flags, modification time.
Definition: TSystem.cxx:1398
virtual Bool_t AccessPathName(const char *path, EAccessMode mode=kFileExists)
Returns FALSE if one can access a file using the specified access mode.
Definition: TSystem.cxx:1296
virtual Bool_t ChangeDirectory(const char *path)
Change directory.
Definition: TSystem.cxx:863
virtual const char * UnixPathName(const char *unixpathname)
Convert from a local pathname to a Unix pathname.
Definition: TSystem.cxx:1063
virtual Bool_t IsAbsoluteFileName(const char *dir)
Return true if dir is an absolute pathname.
Definition: TSystem.cxx:952
virtual const char * WorkingDirectory()
Return working directory.
Definition: TSystem.cxx:872
int main()
Type GetType(const std::string &Name)
Definition: Systematics.cxx:34
static constexpr double s
Short_t Max(Short_t a, Short_t b)
Definition: TMathBase.h:212
Int_t fMode
Definition: TSystem.h:127