LibrePCB Developers Documentation
filepath.h
Go to the documentation of this file.
1/*
2 * LibrePCB - Professional EDA for everyone!
3 * Copyright (C) 2013 LibrePCB Developers, see AUTHORS.md for contributors.
4 * https://librepcb.org/
5 *
6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20#ifndef LIBREPCB_CORE_FILEPATH_H
21#define LIBREPCB_CORE_FILEPATH_H
22
23/*******************************************************************************
24 * Includes
25 ******************************************************************************/
26#include "../qtcompat.h"
27
28#include <QtCore>
29
30/*******************************************************************************
31 * Namespace / Forward Declarations
32 ******************************************************************************/
33namespace librepcb {
34
35/*******************************************************************************
36 * Class FilePath
37 ******************************************************************************/
38
129class FilePath final {
130public: // Types
132 // spaces
135 // case
137 ToLowerCase = 1 << 2,
138 ToUpperCase = 1 << 3,
139 // default
141 };
142 Q_DECLARE_FLAGS(CleanFileNameOptions, CleanFileNameOption)
143
144public: // Methods
145 // Constructors / Destructor
146
150 FilePath() noexcept;
151
157 explicit FilePath(const QString& filepath) noexcept;
158
164 FilePath(const FilePath& other) noexcept;
165
166 // Setters
167
179 bool setPath(const QString& filepath) noexcept;
180
181 // Getters
182
188 bool isValid() const noexcept { return mIsValid; }
189
195 bool isExistingFile() const noexcept;
196
202 bool isExistingDir() const noexcept;
203
210 bool isEmptyDir() const noexcept;
211
217 bool isRoot() const noexcept;
218
225 bool isLocatedInDir(const FilePath& dir) const noexcept;
226
233 QString toStr() const noexcept;
234
241 QString toNative() const noexcept;
242
258 FilePath toUnique() const noexcept;
259
275 QString toRelative(const FilePath& base) const noexcept;
276
286 QString toRelativeNative(const FilePath& base) const noexcept;
287
293 QUrl toQUrl() const noexcept { return QUrl::fromLocalFile(toStr()); }
294
300 QString getBasename() const noexcept;
301
307 QString getCompleteBasename() const noexcept;
308
314 QString getSuffix() const noexcept;
315
321 QString getCompleteSuffix() const noexcept;
322
328 QString getFilename() const noexcept;
329
336 FilePath getParentDir() const noexcept;
337
353 FilePath getPathTo(const QString& filename) const noexcept;
354
355 // Static Methods
356
372 static FilePath fromRelative(const FilePath& base,
373 const QString& relative) noexcept;
374
383 static FilePath getTempPath() noexcept;
384
394 static FilePath getApplicationTempPath() noexcept;
395
401 static FilePath getRandomTempPath() noexcept;
402
426 static QString cleanFileName(const QString& userInput,
427 CleanFileNameOptions options) noexcept;
428
429 // Operator Overloadings
430
434 FilePath& operator=(const FilePath& rhs) noexcept;
435
443 bool operator==(const FilePath& rhs) const noexcept;
444
452 bool operator!=(const FilePath& rhs) const noexcept;
453
465 bool operator<(const FilePath& rhs) const noexcept;
466
467private:
468 // Private Methods
469
479 static QString makeWellFormatted(const QString& filepath) noexcept;
480
481 // Attributes
482
484 QFileInfo
486};
487
488// Non-Member Functions
489QDataStream& operator<<(QDataStream& stream, const FilePath& filepath);
490QDebug& operator<<(QDebug& stream, const FilePath& filepath);
491inline QtCompat::Hash qHash(const FilePath& key,
492 QtCompat::Hash seed = 0) noexcept {
493 return qHash(key.toStr(), seed);
494}
495
496/*******************************************************************************
497 * End of File
498 ******************************************************************************/
499
500} // namespace librepcb
501
502Q_DECLARE_METATYPE(librepcb::FilePath)
503Q_DECLARE_OPERATORS_FOR_FLAGS(librepcb::FilePath::CleanFileNameOptions)
504
505#endif
This class represents absolute, well-formatted paths to files or directories.
Definition: filepath.h:129
QString getBasename() const noexcept
Get the basename of the file or directory.
Definition: filepath.cpp:135
bool isValid() const noexcept
Check whether this object contains a valid filepath or not.
Definition: filepath.h:188
QString getCompleteSuffix() const noexcept
Get the complete suffix of the file or directory.
Definition: filepath.cpp:156
CleanFileNameOption
Definition: filepath.h:131
@ KeepSpaces
Definition: filepath.h:133
@ ToLowerCase
Definition: filepath.h:137
@ Default
Definition: filepath.h:140
@ ToUpperCase
Definition: filepath.h:138
@ KeepCase
Definition: filepath.h:136
@ ReplaceSpaces
Definition: filepath.h:134
FilePath getPathTo(const QString &filename) const noexcept
Get the filepath to a file or directory which is relative to this filepath.
Definition: filepath.cpp:176
QString getFilename() const noexcept
Get the whole filename (without the path) of the file or directory.
Definition: filepath.cpp:163
bool isRoot() const noexcept
Check if the specified filepath is the root directory.
Definition: filepath.cpp:90
QString toStr() const noexcept
Get the absolute and well-formatted filepath as a QString.
Definition: filepath.cpp:102
bool setPath(const QString &filepath) noexcept
Set a new filepath.
Definition: filepath.cpp:60
static QString cleanFileName(const QString &userInput, CleanFileNameOptions options) noexcept
Clean a given string so that it becomes a valid filename.
Definition: filepath.cpp:239
static FilePath getApplicationTempPath() noexcept
Get the path to the temporary application directory (e.g. "/tmp/librepcb")
Definition: filepath.cpp:226
bool isLocatedInDir(const FilePath &dir) const noexcept
Check if the filepath is located inside another directory.
Definition: filepath.cpp:96
QUrl toQUrl() const noexcept
Create and return a QUrl object with this filepath.
Definition: filepath.h:293
static FilePath getRandomTempPath() noexcept
Get a random temporary directory path (e.g. "/tmp/librepcb/42")
Definition: filepath.cpp:230
QString toRelative(const FilePath &base) const noexcept
Convert an absolute filepath to a relative filepath (relative to another filepath)
Definition: filepath.cpp:124
bool mIsValid
Definition: filepath.h:483
FilePath getParentDir() const noexcept
Get the filepath of the parent directory of the file or directory.
Definition: filepath.cpp:170
static QString makeWellFormatted(const QString &filepath) noexcept
Make a filepath well-formatted (except making it absolute!)
Definition: filepath.cpp:258
FilePath() noexcept
The default constructor (this will create an invalid object!)
Definition: filepath.cpp:41
bool isEmptyDir() const noexcept
Check if the specified filepath is an existing, empty directory.
Definition: filepath.cpp:82
FilePath toUnique() const noexcept
Get a unique version of the filepath (resolve symbolic links if possible)
Definition: filepath.cpp:114
static FilePath getTempPath() noexcept
Get the path to the temporary directory (e.g. "/tmp" on Unix/Linux)
Definition: filepath.cpp:217
QFileInfo mFileInfo
the absolute and well-formatted filepath in a QFileInfo
Definition: filepath.h:485
QString getSuffix() const noexcept
Get the suffix of the file or directory.
Definition: filepath.cpp:149
QString getCompleteBasename() const noexcept
Get the complete basename of the file or directory.
Definition: filepath.cpp:142
static FilePath fromRelative(const FilePath &base, const QString &relative) noexcept
Build an absolute and well-formatted filepath from a relative filepath.
Definition: filepath.cpp:210
bool isExistingDir() const noexcept
Check if the specified filepath is an existing directory.
Definition: filepath.cpp:76
QString toNative() const noexcept
Get the absolute filepath with native directory separators.
Definition: filepath.cpp:108
QString toRelativeNative(const FilePath &base) const noexcept
Same as toRelative(), but with native directory separators.
Definition: filepath.cpp:131
bool isExistingFile() const noexcept
Check if the specified filepath is an existing file.
Definition: filepath.cpp:70
Qt compatibility helper class.
Definition: qtcompat.h:43
Definition: occmodel.cpp:77
QtCompat::Hash qHash(const AttributeKey &key, QtCompat::Hash seed=0) noexcept
Definition: attributekey.h:119