]> git.mxchange.org Git - flightgear.git/blob - src/GUI/PathsDialog.cxx
ILS drawing in the airport diagram
[flightgear.git] / src / GUI / PathsDialog.cxx
1 #include "PathsDialog.hxx"
2 #include "ui_PathsDialog.h"
3
4 #include <QSettings>
5 #include <QFileDialog>
6 #include <QMessageBox>
7
8 #include "CatalogListModel.hxx"
9 #include "AddCatalogDialog.hxx"
10
11 #include <Main/options.hxx>
12
13 PathsDialog::PathsDialog(QWidget *parent, simgear::pkg::RootRef root) :
14     QDialog(parent),
15     m_ui(new Ui::PathsDialog),
16     m_packageRoot(root)
17 {
18     m_ui->setupUi(this);
19     
20     m_catalogsModel = new CatalogListModel(this, m_packageRoot);
21     m_ui->catalogsList->setModel(m_catalogsModel);
22
23     connect(m_ui->addCatalog, &QToolButton::clicked,
24             this, &PathsDialog::onAddCatalog);
25     connect(m_ui->removeCatalog, &QToolButton::clicked,
26             this, &PathsDialog::onRemoveCatalog);
27             
28     connect(m_ui->addSceneryPath, &QToolButton::clicked,
29             this, &PathsDialog::onAddSceneryPath);
30     connect(m_ui->removeSceneryPath, &QToolButton::clicked,
31             this, &PathsDialog::onRemoveSceneryPath);
32
33     connect(m_ui->addAircraftPath, &QToolButton::clicked,
34             this, &PathsDialog::onAddAircraftPath);
35     connect(m_ui->removeAircraftPath, &QToolButton::clicked,
36             this, &PathsDialog::onRemoveAircraftPath);
37
38     connect(m_ui->changeDownloadDir, &QPushButton::clicked,
39             this, &PathsDialog::onChangeDownloadDir);
40
41     connect(m_ui->clearDownloadDir, &QPushButton::clicked,
42             this, &PathsDialog::onClearDownloadDir);
43
44     QSettings settings;
45             
46     QStringList sceneryPaths = settings.value("scenery-paths").toStringList();
47     m_ui->sceneryPathsList->addItems(sceneryPaths);
48
49     QStringList aircraftPaths = settings.value("aircraft-paths").toStringList();
50     m_ui->aircraftPathsList->addItems(aircraftPaths);
51
52     QVariant downloadDir = settings.value("download-dir");
53     if (downloadDir.isValid()) {
54         m_downloadDir = downloadDir.toString();
55     }
56
57     updateUi();
58 }
59
60 PathsDialog::~PathsDialog()
61 {
62     delete m_ui;
63 }
64
65 void PathsDialog::accept()
66 {
67     QSettings settings;
68     QStringList paths;
69     for (int i=0; i<m_ui->sceneryPathsList->count(); ++i) {
70         paths.append(m_ui->sceneryPathsList->item(i)->text());
71     }
72
73     settings.setValue("scenery-paths", paths);
74     paths.clear();
75
76     for (int i=0; i<m_ui->aircraftPathsList->count(); ++i) {
77         paths.append(m_ui->aircraftPathsList->item(i)->text());
78     }
79
80     settings.setValue("aircraft-paths", paths);
81
82     if (m_downloadDir.isEmpty()) {
83         settings.remove("download-dir");
84     } else {
85         settings.setValue("download-dir", m_downloadDir);
86     }
87     
88     QDialog::accept();
89 }
90
91 void PathsDialog::onAddSceneryPath()
92 {
93     QString path = QFileDialog::getExistingDirectory(this, tr("Choose scenery folder"));
94     if (!path.isEmpty()) {
95         m_ui->sceneryPathsList->addItem(path);
96     }
97 }
98
99 void PathsDialog::onRemoveSceneryPath()
100 {
101     if (m_ui->sceneryPathsList->currentItem()) {
102         delete m_ui->sceneryPathsList->currentItem();
103     }
104 }
105
106 void PathsDialog::onAddAircraftPath()
107 {
108     QString path = QFileDialog::getExistingDirectory(this, tr("Choose aircraft folder"));
109     if (!path.isEmpty()) {
110         m_ui->aircraftPathsList->addItem(path);
111     }
112 }
113
114 void PathsDialog::onRemoveAircraftPath()
115 {
116     if (m_ui->aircraftPathsList->currentItem()) {
117         delete m_ui->aircraftPathsList->currentItem();
118     }
119 }
120
121 void PathsDialog::onAddCatalog()
122 {
123     AddCatalogDialog* dlg = new AddCatalogDialog(this, m_packageRoot);
124     dlg->exec();
125     if (dlg->result() == QDialog::Accepted) {
126         m_catalogsModel->refresh();
127     }
128 }
129
130 void PathsDialog::onRemoveCatalog()
131 {
132     QModelIndex mi = m_ui->catalogsList->currentIndex();
133     if (mi.isValid()) {
134         QMessageBox mb;
135         mb.setText(QStringLiteral("Remove aircraft hangar '%1'?").arg(mi.data(Qt::DisplayRole).toString()));
136         mb.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
137         mb.setDefaultButton(QMessageBox::No);
138         mb.exec();
139         
140         QString pkgId = mi.data(CatalogIdRole).toString();
141         m_packageRoot->removeCatalogById(pkgId.toStdString());
142     }
143 }
144
145 void PathsDialog::onChangeDownloadDir()
146 {
147     QString path = QFileDialog::getExistingDirectory(this,
148                                                      tr("Choose downloads folder"),
149                                                      m_downloadDir);
150     if (!path.isEmpty()) {
151         m_downloadDir = path;
152         updateUi();
153     }
154 }
155
156 void PathsDialog::onClearDownloadDir()
157 {
158     // does this need an 'are you sure'?
159     m_downloadDir.clear();
160     updateUi();
161 }
162
163 void PathsDialog::updateUi()
164 {
165     QString s = m_downloadDir;
166     if (s.isEmpty()) {
167         s = QString::fromStdString(flightgear::defaultDownloadDir());
168         s.append(tr(" (default)"));
169         m_ui->clearDownloadDir->setEnabled(false);
170     } else {
171         m_ui->clearDownloadDir->setEnabled(true);
172     }
173
174     QString m = tr("Download location: %1").arg(s);
175     m_ui->downloadLocation->setText(m);
176 }