Android build fix no.3
[GPXSee.git] / src / GUI / fileselectwidget.cpp
blob37fe91598ba7cf73523ad7685bd41132566fbed5
1 #include <QPushButton>
2 #include <QToolButton>
3 #include <QFileDialog>
4 #include <QHBoxLayout>
5 #include <QFileInfo>
6 #include <QApplication>
7 #include <QFontMetrics>
8 #include "fileselectwidget.h"
9 #ifdef Q_OS_ANDROID
10 #include "common/util.h"
11 #endif // Q_OS_ANDROID
14 FileSelectWidget::FileSelectWidget(QWidget *parent) : QWidget(parent)
16 _edit = new QLineEdit();
17 #ifdef Q_OS_ANDROID
18 _edit->setDisabled(true);
19 #else // Q_OS_ANDROID
20 QFontMetrics fm(QApplication::font());
21 _edit->setMinimumWidth(fm.averageCharWidth() * (QDir::homePath().length()
22 + 12));
23 #endif // Q_OS_ANDROID
24 #ifdef Q_OS_WIN32
25 _button = new QPushButton("...");
26 _button->setMaximumWidth(_button->sizeHint().width() / 2);
27 #else // Q_OS_WIN32
28 _button = new QToolButton();
29 _button->setText("...");
30 #endif // Q_OS_WIN32
31 connect(_button, &QToolButton::clicked, this, &FileSelectWidget::browse);
33 QHBoxLayout *layout = new QHBoxLayout();
34 layout->setContentsMargins(QMargins());
35 layout->addWidget(_edit);
36 layout->addWidget(_button);
37 setLayout(layout);
39 QSizePolicy p(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
40 setSizePolicy(p);
43 void FileSelectWidget::browse()
45 #ifdef Q_OS_ANDROID
46 _fileName = QFileDialog::getSaveFileName(this, tr("Select file"));
47 if (!_fileName.isEmpty())
48 _edit->setText(Util::displayName(_fileName));
49 #else // Q_OS_ANDROID
50 QFileInfo fi(_edit->text());
51 QString fileName = QFileDialog::getSaveFileName(this, tr("Select file"),
52 fi.dir().absolutePath(), _filter);
53 if (!fileName.isEmpty())
54 _edit->setText(fileName);
55 #endif // Q_OS_ANDROID
58 bool FileSelectWidget::checkFile(QString &error) const
60 if (file().isEmpty()) {
61 error = tr("No output file selected.");
62 return false;
65 QFile f(file());
66 QFileInfo fi(f);
67 bool exists = fi.exists();
68 bool opened = false;
70 if (exists && fi.isDir()) {
71 error = tr("%1 is a directory.").arg(f.fileName());
72 return false;
73 } else if ((exists && !fi.isWritable())
74 || !(opened = f.open(QFile::Append))) {
75 error = tr("%1 is not writable.").arg(f.fileName());
76 return false;
79 if (opened) {
80 f.close();
81 if (!exists)
82 f.remove();
85 return true;