1 #include <QtGlobal>
2 #include <QDir>
3 #include "programpaths.h"
4
5
6 #define MAP_DIR "maps"
7 #define POI_DIR "POI"
8 #define CSV_DIR "csv"
9 #define DEM_DIR "DEM"
10 #define TILES_DIR "tiles"
11 #define TRANSLATIONS_DIR "translations"
12 #define STYLE_DIR "style"
13 #define ELLIPSOID_FILE "ellipsoids.csv"
14 #define GCS_FILE "gcs.csv"
15 #define PCS_FILE "pcs.csv"
16 #define TYP_FILE "style.typ"
17
18
19 #if QT_VERSION < QT_VERSION_CHECK(5, 4, 0)
20
21 #include <QApplication>
22
23 #if defined(Q_OS_WIN32)
24 #define USER_DIR QDir::homePath() + QString("/AppData/Roaming/") \
25 + qApp->applicationName()
26 #define GLOBAL_DIR QApplication::applicationDirPath()
27 #elif defined(Q_OS_MAC)
28 #define USER_DIR QDir::homePath() \
29 + QString("/Library/Application Support/") \
30 + qApp->applicationName()
31 #define GLOBAL_DIR QApplication::applicationDirPath() \
32 + QString("/../Resources")
33 #else
34 #define USER_DIR QDir::homePath() + QString("/.local/share/") \
35 + qApp->applicationName()
36 #define GLOBAL_DIR QString(PREFIX "/share/") + qApp->applicationName()
37 #endif
38
dir(const QString & dirName,bool writable=false)39 static QString dir(const QString &dirName, bool writable = false)
40 {
41 QDir userDir(QDir(USER_DIR).filePath(dirName));
42
43 if (writable || userDir.exists())
44 return userDir.absolutePath();
45 else {
46 QDir globalDir(QDir(GLOBAL_DIR).filePath(dirName));
47
48 if (globalDir.exists())
49 return globalDir.absolutePath();
50 else
51 return QString();
52 }
53 }
54
file(const QString & path,const QString & fileName)55 static QString file(const QString &path, const QString &fileName)
56 {
57 if (path.isNull())
58 return QString();
59
60 QFileInfo fi(QDir(path).filePath(fileName));
61 return fi.exists() ? fi.absoluteFilePath() : QString();
62 }
63
mapDir(bool writable)64 QString ProgramPaths::mapDir(bool writable)
65 {
66 return dir(MAP_DIR, writable);
67 }
68
poiDir(bool writable)69 QString ProgramPaths::poiDir(bool writable)
70 {
71 return dir(POI_DIR, writable);
72 }
73
csvDir(bool writable)74 QString ProgramPaths::csvDir(bool writable)
75 {
76 return dir(CSV_DIR, writable);
77 }
78
demDir(bool writable)79 QString ProgramPaths::demDir(bool writable)
80 {
81 return dir(DEM_DIR, writable);
82 }
83
styleDir(bool writable)84 QString ProgramPaths::styleDir(bool writable)
85 {
86 return dir(STYLE_DIR, writable);
87 }
88
tilesDir()89 QString ProgramPaths::tilesDir()
90 {
91 #if defined(Q_OS_WIN32)
92 return QDir::homePath() + QString("/AppData/Local/")
93 + qApp->applicationName() + QString("/cache/") + QString(TILES_DIR);
94 #elif defined(Q_OS_MAC)
95 return QDir::homePath() + QString("/Library/Caches/")
96 + qApp->applicationName() + QString("/" TILES_DIR);
97 #else
98 return QDir::homePath() + QString("/.cache/") + qApp->applicationName()
99 + QString("/" TILES_DIR);
100 #endif
101 }
102
translationsDir()103 QString ProgramPaths::translationsDir()
104 {
105 return dir(TRANSLATIONS_DIR);
106 }
107
ellipsoidsFile()108 QString ProgramPaths::ellipsoidsFile()
109 {
110 return file(dir(CSV_DIR), ELLIPSOID_FILE);
111 }
112
gcsFile()113 QString ProgramPaths::gcsFile()
114 {
115 return file(dir(CSV_DIR), GCS_FILE);
116 }
117
pcsFile()118 QString ProgramPaths::pcsFile()
119 {
120 return file(dir(CSV_DIR), PCS_FILE);
121 }
122
typFile()123 QString ProgramPaths::typFile()
124 {
125 return file(dir(STYLE_DIR), TYP_FILE);
126 }
127
128 #else // QT_VERSION < 5
129
130 #include <QStandardPaths>
131
mapDir(bool writable)132 QString ProgramPaths::mapDir(bool writable)
133 {
134 if (writable)
135 return QDir(QStandardPaths::writableLocation(
136 QStandardPaths::AppDataLocation)).filePath(MAP_DIR);
137 else
138 return QStandardPaths::locate(QStandardPaths::AppDataLocation,
139 MAP_DIR, QStandardPaths::LocateDirectory);
140 }
141
poiDir(bool writable)142 QString ProgramPaths::poiDir(bool writable)
143 {
144 if (writable)
145 return QDir(QStandardPaths::writableLocation(
146 QStandardPaths::AppDataLocation)).filePath(POI_DIR);
147 else
148 return QStandardPaths::locate(QStandardPaths::AppDataLocation,
149 POI_DIR, QStandardPaths::LocateDirectory);
150 }
151
csvDir(bool writable)152 QString ProgramPaths::csvDir(bool writable)
153 {
154 if (writable)
155 return QDir(QStandardPaths::writableLocation(
156 QStandardPaths::AppDataLocation)).filePath(CSV_DIR);
157 else
158 return QStandardPaths::locate(QStandardPaths::AppDataLocation,
159 CSV_DIR, QStandardPaths::LocateDirectory);
160 }
161
demDir(bool writable)162 QString ProgramPaths::demDir(bool writable)
163 {
164 if (writable)
165 return QDir(QStandardPaths::writableLocation(
166 QStandardPaths::AppDataLocation)).filePath(DEM_DIR);
167 else
168 return QStandardPaths::locate(QStandardPaths::AppDataLocation,
169 DEM_DIR, QStandardPaths::LocateDirectory);
170 }
171
styleDir(bool writable)172 QString ProgramPaths::styleDir(bool writable)
173 {
174 if (writable)
175 return QDir(QStandardPaths::writableLocation(
176 QStandardPaths::AppDataLocation)).filePath(STYLE_DIR);
177 else
178 return QStandardPaths::locate(QStandardPaths::AppDataLocation,
179 STYLE_DIR, QStandardPaths::LocateDirectory);
180 }
181
tilesDir()182 QString ProgramPaths::tilesDir()
183 {
184 return QDir(QStandardPaths::writableLocation(
185 QStandardPaths::CacheLocation)).filePath(TILES_DIR);
186 }
187
translationsDir()188 QString ProgramPaths::translationsDir()
189 {
190 return QStandardPaths::locate(QStandardPaths::AppDataLocation,
191 TRANSLATIONS_DIR, QStandardPaths::LocateDirectory);
192 }
193
ellipsoidsFile()194 QString ProgramPaths::ellipsoidsFile()
195 {
196 return QStandardPaths::locate(QStandardPaths::AppDataLocation,
197 CSV_DIR "/" ELLIPSOID_FILE, QStandardPaths::LocateFile);
198 }
199
gcsFile()200 QString ProgramPaths::gcsFile()
201 {
202 return QStandardPaths::locate(QStandardPaths::AppDataLocation,
203 CSV_DIR "/" GCS_FILE, QStandardPaths::LocateFile);
204 }
205
pcsFile()206 QString ProgramPaths::pcsFile()
207 {
208 return QStandardPaths::locate(QStandardPaths::AppDataLocation,
209 CSV_DIR "/" PCS_FILE, QStandardPaths::LocateFile);
210 }
211
typFile()212 QString ProgramPaths::typFile()
213 {
214 return QStandardPaths::locate(QStandardPaths::AppDataLocation,
215 STYLE_DIR "/" TYP_FILE, QStandardPaths::LocateFile);
216 }
217
218 #endif // QT_VERSION < 5
219