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