1 #include "PathsDialog.hxx"
2 #include "ui_PathsDialog.h"
8 #include "CatalogListModel.hxx"
9 #include "AddCatalogDialog.hxx"
11 #include <Main/options.hxx>
13 PathsDialog::PathsDialog(QWidget *parent, simgear::pkg::RootRef root) :
15 m_ui(new Ui::PathsDialog),
20 m_catalogsModel = new CatalogListModel(this, m_packageRoot);
21 m_ui->catalogsList->setModel(m_catalogsModel);
23 connect(m_ui->addCatalog, &QToolButton::clicked,
24 this, &PathsDialog::onAddCatalog);
25 connect(m_ui->removeCatalog, &QToolButton::clicked,
26 this, &PathsDialog::onRemoveCatalog);
28 connect(m_ui->addSceneryPath, &QToolButton::clicked,
29 this, &PathsDialog::onAddSceneryPath);
30 connect(m_ui->removeSceneryPath, &QToolButton::clicked,
31 this, &PathsDialog::onRemoveSceneryPath);
33 connect(m_ui->addAircraftPath, &QToolButton::clicked,
34 this, &PathsDialog::onAddAircraftPath);
35 connect(m_ui->removeAircraftPath, &QToolButton::clicked,
36 this, &PathsDialog::onRemoveAircraftPath);
38 connect(m_ui->changeDownloadDir, &QPushButton::clicked,
39 this, &PathsDialog::onChangeDownloadDir);
41 connect(m_ui->clearDownloadDir, &QPushButton::clicked,
42 this, &PathsDialog::onClearDownloadDir);
46 QStringList sceneryPaths = settings.value("scenery-paths").toStringList();
47 m_ui->sceneryPathsList->addItems(sceneryPaths);
49 QStringList aircraftPaths = settings.value("aircraft-paths").toStringList();
50 m_ui->aircraftPathsList->addItems(aircraftPaths);
52 QVariant downloadDir = settings.value("download-dir");
53 if (downloadDir.isValid()) {
54 m_downloadDir = downloadDir.toString();
60 PathsDialog::~PathsDialog()
65 void PathsDialog::accept()
69 for (int i=0; i<m_ui->sceneryPathsList->count(); ++i) {
70 paths.append(m_ui->sceneryPathsList->item(i)->text());
73 settings.setValue("scenery-paths", paths);
76 for (int i=0; i<m_ui->aircraftPathsList->count(); ++i) {
77 paths.append(m_ui->aircraftPathsList->item(i)->text());
80 settings.setValue("aircraft-paths", paths);
82 if (m_downloadDir.isEmpty()) {
83 settings.remove("download-dir");
85 settings.setValue("download-dir", m_downloadDir);
91 void PathsDialog::onAddSceneryPath()
93 QString path = QFileDialog::getExistingDirectory(this, tr("Choose scenery folder"));
94 if (!path.isEmpty()) {
95 m_ui->sceneryPathsList->addItem(path);
99 void PathsDialog::onRemoveSceneryPath()
101 if (m_ui->sceneryPathsList->currentItem()) {
102 delete m_ui->sceneryPathsList->currentItem();
106 void PathsDialog::onAddAircraftPath()
108 QString path = QFileDialog::getExistingDirectory(this, tr("Choose aircraft folder"));
109 if (!path.isEmpty()) {
110 m_ui->aircraftPathsList->addItem(path);
114 void PathsDialog::onRemoveAircraftPath()
116 if (m_ui->aircraftPathsList->currentItem()) {
117 delete m_ui->aircraftPathsList->currentItem();
121 void PathsDialog::onAddCatalog()
123 AddCatalogDialog* dlg = new AddCatalogDialog(this, m_packageRoot);
125 if (dlg->result() == QDialog::Accepted) {
126 m_catalogsModel->refresh();
130 void PathsDialog::onRemoveCatalog()
132 QModelIndex mi = m_ui->catalogsList->currentIndex();
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);
140 QString pkgId = mi.data(CatalogIdRole).toString();
141 m_packageRoot->removeCatalogById(pkgId.toStdString());
145 void PathsDialog::onChangeDownloadDir()
147 QString path = QFileDialog::getExistingDirectory(this,
148 tr("Choose downloads folder"),
150 if (!path.isEmpty()) {
151 m_downloadDir = path;
156 void PathsDialog::onClearDownloadDir()
158 // does this need an 'are you sure'?
159 m_downloadDir.clear();
163 void PathsDialog::updateUi()
165 QString s = m_downloadDir;
167 s = QString::fromStdString(flightgear::defaultDownloadDir());
168 s.append(tr(" (default)"));
169 m_ui->clearDownloadDir->setEnabled(false);
171 m_ui->clearDownloadDir->setEnabled(true);
174 QString m = tr("Download location: %1").arg(s);
175 m_ui->downloadLocation->setText(m);