1 #include "PathsDialog.hxx"
2 #include "ui_PathsDialog.h"
8 #include "CatalogListModel.hxx"
9 #include "AddCatalogDialog.hxx"
11 #include <Main/options.hxx>
12 #include <Main/globals.hxx>
13 #include <Network/HTTPClient.hxx>
15 PathsDialog::PathsDialog(QWidget *parent, simgear::pkg::RootRef root) :
17 m_ui(new Ui::PathsDialog),
22 m_catalogsModel = new CatalogListModel(this, m_packageRoot);
23 m_ui->catalogsList->setModel(m_catalogsModel);
25 connect(m_ui->addCatalog, &QToolButton::clicked,
26 this, &PathsDialog::onAddCatalog);
27 connect(m_ui->addDefaultCatalogButton, &QPushButton::clicked,
28 this, &PathsDialog::onAddDefaultCatalog);
29 connect(m_ui->removeCatalog, &QToolButton::clicked,
30 this, &PathsDialog::onRemoveCatalog);
32 connect(m_ui->addSceneryPath, &QToolButton::clicked,
33 this, &PathsDialog::onAddSceneryPath);
34 connect(m_ui->removeSceneryPath, &QToolButton::clicked,
35 this, &PathsDialog::onRemoveSceneryPath);
37 connect(m_ui->addAircraftPath, &QToolButton::clicked,
38 this, &PathsDialog::onAddAircraftPath);
39 connect(m_ui->removeAircraftPath, &QToolButton::clicked,
40 this, &PathsDialog::onRemoveAircraftPath);
42 connect(m_ui->changeDownloadDir, &QPushButton::clicked,
43 this, &PathsDialog::onChangeDownloadDir);
45 connect(m_ui->clearDownloadDir, &QPushButton::clicked,
46 this, &PathsDialog::onClearDownloadDir);
50 QStringList sceneryPaths = settings.value("scenery-paths").toStringList();
51 m_ui->sceneryPathsList->addItems(sceneryPaths);
53 QStringList aircraftPaths = settings.value("aircraft-paths").toStringList();
54 m_ui->aircraftPathsList->addItems(aircraftPaths);
56 QVariant downloadDir = settings.value("download-dir");
57 if (downloadDir.isValid()) {
58 m_downloadDir = downloadDir.toString();
64 PathsDialog::~PathsDialog()
69 void PathsDialog::accept()
73 for (int i=0; i<m_ui->sceneryPathsList->count(); ++i) {
74 paths.append(m_ui->sceneryPathsList->item(i)->text());
77 settings.setValue("scenery-paths", paths);
80 for (int i=0; i<m_ui->aircraftPathsList->count(); ++i) {
81 paths.append(m_ui->aircraftPathsList->item(i)->text());
84 settings.setValue("aircraft-paths", paths);
86 if (m_downloadDir.isEmpty()) {
87 settings.remove("download-dir");
89 settings.setValue("download-dir", m_downloadDir);
95 void PathsDialog::onAddSceneryPath()
97 QString path = QFileDialog::getExistingDirectory(this, tr("Choose scenery folder"));
98 if (!path.isEmpty()) {
99 m_ui->sceneryPathsList->addItem(path);
103 void PathsDialog::onRemoveSceneryPath()
105 if (m_ui->sceneryPathsList->currentItem()) {
106 delete m_ui->sceneryPathsList->currentItem();
110 void PathsDialog::onAddAircraftPath()
112 QString path = QFileDialog::getExistingDirectory(this, tr("Choose aircraft folder"));
113 if (!path.isEmpty()) {
114 m_ui->aircraftPathsList->addItem(path);
118 void PathsDialog::onRemoveAircraftPath()
120 if (m_ui->aircraftPathsList->currentItem()) {
121 delete m_ui->aircraftPathsList->currentItem();
125 void PathsDialog::onAddCatalog()
127 QScopedPointer<AddCatalogDialog> dlg(new AddCatalogDialog(this, m_packageRoot));
129 if (dlg->result() == QDialog::Accepted) {
130 m_catalogsModel->refresh();
134 void PathsDialog::onAddDefaultCatalog()
136 // check it's not a duplicate somehow
137 FGHTTPClient* http = static_cast<FGHTTPClient*>(globals->get_subsystem("http"));
138 if (http->isDefaultCatalogInstalled())
141 QScopedPointer<AddCatalogDialog> dlg(new AddCatalogDialog(this, m_packageRoot));
142 QUrl url(QString::fromStdString(http->getDefaultCatalogUrl()));
143 dlg->setUrlAndDownload(url);
145 if (dlg->result() == QDialog::Accepted) {
146 m_catalogsModel->refresh();
151 void PathsDialog::onRemoveCatalog()
153 QModelIndex mi = m_ui->catalogsList->currentIndex();
154 FGHTTPClient* http = static_cast<FGHTTPClient*>(globals->get_subsystem("http"));
157 QString s = QStringLiteral("Remove aircraft hangar '%1'? All installed aircraft from this "
158 "hangar will be removed.");
159 QString pkgId = mi.data(CatalogIdRole).toString();
161 if (pkgId.toStdString() == http->getDefaultCatalogId()) {
162 s = QStringLiteral("Remove default aircraft hangar? "
163 "This hangar contains all the default aircraft included with FlightGear. "
164 "If you change your mind in the future, click the 'restore' button.");
166 s = s.arg(mi.data(Qt::DisplayRole).toString());
171 mb.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
172 mb.setDefaultButton(QMessageBox::No);
175 if (mb.result() == QMessageBox::Yes) {
176 m_packageRoot->removeCatalogById(pkgId.toStdString());
183 void PathsDialog::onChangeDownloadDir()
185 QString path = QFileDialog::getExistingDirectory(this,
186 tr("Choose downloads folder"),
188 if (!path.isEmpty()) {
189 m_downloadDir = path;
194 void PathsDialog::onClearDownloadDir()
196 // does this need an 'are you sure'?
197 m_downloadDir.clear();
201 void PathsDialog::updateUi()
203 QString s = m_downloadDir;
205 s = QString::fromStdString(flightgear::defaultDownloadDir());
206 s.append(tr(" (default)"));
207 m_ui->clearDownloadDir->setEnabled(false);
209 m_ui->clearDownloadDir->setEnabled(true);
212 QString m = tr("Download location: %1").arg(s);
213 m_ui->downloadLocation->setText(m);
215 FGHTTPClient* http = static_cast<FGHTTPClient*>(globals->get_subsystem("http"));
216 m_ui->addDefaultCatalogButton->setEnabled(!http->isDefaultCatalogInstalled());