]> git.mxchange.org Git - flightgear.git/blob - src/GUI/FileDialog.hxx
Make it all work with existing FileSelector API.
[flightgear.git] / src / GUI / FileDialog.hxx
1 // FileDialog.hxx - abstract inteface for a file open/save dialog
2
3 #ifndef FG_GUI_FILE_DIALOG_HXX
4 #define FG_GUI_FILE_DIALOG_HXX 1
5
6 #include <memory> // for std::auto_ptr
7
8 #include <simgear/misc/strutils.hxx> // for string_list
9 #include <simgear/misc/sg_path.hxx>
10
11 #include <simgear/nasal/cppbind/Ghost.hxx>
12
13 // forward decls
14 class SGPropertyNode;
15
16 class FGFileDialog
17 {
18 public:
19     typedef enum {
20         USE_OPEN_FILE = 0,
21         USE_SAVE_FILE,
22         USE_CHOOSE_DIR
23     } Usage;
24     
25     std::string getTitle() const
26     { return _title; }
27     
28     void setTitle(const std::string& aTitle);
29
30     std::string getButton() const
31     { return _buttonText; }
32     
33     void setButton(const std::string& aText);
34
35     SGPath getDirectory() const
36     { return _initialPath; }
37     
38     void setDirectory(const SGPath& aPath);
39     
40     string_list filterPatterns() const
41     { return _filterPatterns; }
42     
43     void setFilterPatterns(const string_list& patterns);
44     
45     /// for saving
46     std::string getPlaceholder() const
47     { return _placeholder; }
48     
49     void setPlaceholderName(const std::string& aName);
50
51     bool showHidden() const
52     { return _showHidden; }
53     void setShowHidden(bool show);
54     
55     /**
56      * Destructor.
57      */
58     virtual ~FGFileDialog ();
59
60      virtual void exec() = 0;
61      virtual void close() = 0;
62     
63      class Callback
64      {
65      public:
66          virtual ~Callback() { }
67          virtual void onFileDialogDone(FGFileDialog* ins, const SGPath& result) = 0;
68      };
69
70      virtual void setCallback(Callback* aCB);
71
72     naRef openFromNasal(const nasal::CallContext& ctx);
73     naRef closeFromNasal(const nasal::CallContext& ctx);
74     naRef setCallbackFromNasal(const nasal::CallContext& ctx);
75 protected:
76     FGFileDialog(Usage use);
77     
78     const Usage _usage;
79     std::string _title, _buttonText;
80     SGPath _initialPath;
81     string_list _filterPatterns;
82     std::string _placeholder;
83     bool _showHidden;
84     std::auto_ptr<Callback> _callback;
85 };
86
87 #endif // FG_GUI_FILE_DIALOG_HXX