]> git.lyx.org Git - lyx.git/blob - src/frontends/qt2/FileDialog.C
Enable the file dialog to open files with non-latin filenames.
[lyx.git] / src / frontends / qt2 / FileDialog.C
1 /**
2  * \file qt2/FileDialog.C
3  * This file is part of LyX, the document processor.
4  * Licence details can be found in the file COPYING.
5  *
6  * \author John Levon
7  *
8  * Full author contact details are available in file CREDITS.
9  */
10
11
12 #include <config.h>
13
14 #include "debug.h"
15 #include "frontends/FileDialog.h"
16 #include "FileDialog_private.h"
17 #include "qt_helpers.h"
18 #include "gettext.h"
19
20 using std::endl;
21
22
23 struct FileDialog::Private {
24         Button b1;
25         Button b2;
26 };
27
28
29 FileDialog::FileDialog(string const & t,
30                        kb_action s, Button b1, Button b2)
31         : private_(new FileDialog::Private), title_(t), success_(s)
32 {
33         private_->b1 = b1;
34         private_->b2 = b2;
35 }
36
37
38 FileDialog::~FileDialog()
39 {
40         delete private_;
41 }
42
43
44 FileDialog::Result const FileDialog::save(string const & path,
45                                             string const & mask,
46                                             string const & suggested)
47 {
48         string filter(mask);
49         if (mask.empty())
50                 filter = _("All files (*)");
51
52         LyXFileDialog dlg(path, filter, title_, private_->b1, private_->b2);
53         lyxerr[Debug::GUI] << "Select with path \"" << path
54                            << "\", mask \"" << filter
55                            << "\", suggested \"" << suggested << endl;
56
57         dlg.setMode(QFileDialog::AnyFile);
58
59         if (!suggested.empty())
60                 dlg.setSelection(toqstr(suggested));
61
62         FileDialog::Result result;
63         lyxerr[Debug::GUI] << "Synchronous FileDialog: " << endl;
64         result.first = FileDialog::Chosen;
65         int res = dlg.exec();
66         lyxerr[Debug::GUI] << "result " << res << endl;
67         if (res == QDialog::Accepted)
68                 result.second = fromqstr(dlg.selectedFile());
69         dlg.hide();
70         return result;
71 }
72
73
74 FileDialog::Result const FileDialog::open(string const & path,
75                                             string const & mask,
76                                             string const & suggested)
77 {
78         string filter(mask);
79         if (mask.empty())
80                 filter = _("All files (*)");
81
82         LyXFileDialog dlg(path, filter, title_, private_->b1, private_->b2);
83         lyxerr[Debug::GUI] << "Select with path \"" << path
84                            << "\", mask \"" << filter
85                            << "\", suggested \"" << suggested << endl;
86
87         if (!suggested.empty())
88                 dlg.setSelection(toqstr(suggested));
89
90         FileDialog::Result result;
91         lyxerr[Debug::GUI] << "Synchronous FileDialog: " << endl;
92         result.first = FileDialog::Chosen;
93         int res = dlg.exec();
94         lyxerr[Debug::GUI] << "result " << res << endl;
95         if (res == QDialog::Accepted)
96                 result.second = fromqstr(dlg.selectedFile());
97         dlg.hide();
98         return result;
99 }
100
101
102 FileDialog::Result const FileDialog::opendir(string const & path,
103                                             string const & suggested)
104 {
105         string filter = _("Directories");
106
107         LyXFileDialog dlg(path, filter, title_, private_->b1, private_->b2);
108         lyxerr[Debug::GUI] << "Select with path \"" << path
109                            << "\", suggested \"" << suggested << endl;
110
111         dlg.setMode(QFileDialog::DirectoryOnly);
112
113         if (!suggested.empty())
114                 dlg.setSelection(toqstr(suggested));
115
116         FileDialog::Result result;
117         lyxerr[Debug::GUI] << "Synchronous FileDialog: " << endl;
118         result.first = FileDialog::Chosen;
119         int res = dlg.exec();
120         lyxerr[Debug::GUI] << "result " << res << endl;
121         if (res == QDialog::Accepted)
122                 result.second = fromqstr(dlg.selectedFile());
123         dlg.hide();
124         return result;
125 }