2019-11-25 13:57:54 +00:00
|
|
|
|
/**
|
|
|
|
|
* @file paths.hpp
|
|
|
|
|
* @brief Стандартные пути к каталогам и файлам
|
|
|
|
|
*/
|
|
|
|
|
|
2019-10-02 11:29:10 +00:00
|
|
|
|
#ifndef MYX_FILESYSTEM_PATHS_HPP_
|
|
|
|
|
#define MYX_FILESYSTEM_PATHS_HPP_
|
|
|
|
|
|
2019-11-25 12:08:34 +00:00
|
|
|
|
#include <myx/filesystem/current_executable.hpp>
|
|
|
|
|
|
2019-10-04 09:48:12 +00:00
|
|
|
|
#include <QString>
|
|
|
|
|
#include <QDir>
|
|
|
|
|
#include <QFileInfo>
|
2019-10-02 11:29:10 +00:00
|
|
|
|
|
|
|
|
|
namespace myx {
|
|
|
|
|
|
|
|
|
|
namespace filesystem {
|
|
|
|
|
|
2019-10-04 09:48:12 +00:00
|
|
|
|
class Paths
|
|
|
|
|
{
|
2019-11-25 13:57:54 +00:00
|
|
|
|
/// Путь к базовому каталогу
|
|
|
|
|
QDir m_prefixDirectory;
|
|
|
|
|
/// Путь к каталогу с исполняемым файлом
|
|
|
|
|
QDir m_binaryDirectory;
|
|
|
|
|
/// Путь к каталогу с изменяемыми файлами
|
|
|
|
|
QDir m_cacheDirectory;
|
|
|
|
|
/// Путь к каталогу с временными файлами
|
|
|
|
|
QDir m_tempDirectory;
|
|
|
|
|
/// Путь к каталогу с неизменяемыми файлами
|
|
|
|
|
QDir m_dataDirectory;
|
|
|
|
|
/// Путь к каталогу с журналами работы
|
|
|
|
|
QDir m_logDirectory;
|
|
|
|
|
/// Путь к домашнему каталогу текущего пользователя
|
|
|
|
|
QDir m_homeDirectory;
|
|
|
|
|
/// Путь к каталогу с файлами настройки
|
|
|
|
|
QDir m_configDirectory;
|
|
|
|
|
/// Полный путь к файлу настройки
|
2019-10-05 10:21:42 +00:00
|
|
|
|
QFileInfo m_configFilePath;
|
2019-11-25 13:57:54 +00:00
|
|
|
|
/// Имя файла настройки
|
|
|
|
|
QString m_configFileName;
|
|
|
|
|
/// Расширение для файла настройки
|
|
|
|
|
QString m_configFileExtension;
|
2019-10-04 09:48:12 +00:00
|
|
|
|
|
2019-11-25 13:57:54 +00:00
|
|
|
|
/// Параметры текущего исполняемого файла
|
2019-11-25 12:08:34 +00:00
|
|
|
|
CurrentExecutable m_currentExecutable;
|
|
|
|
|
|
2019-10-04 09:48:12 +00:00
|
|
|
|
public:
|
2019-11-25 13:57:54 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief Конструктор
|
|
|
|
|
* @param configFileExtension Расширение для файла настройки
|
|
|
|
|
*/
|
2020-03-30 11:13:27 +00:00
|
|
|
|
Paths( QString configFileExtension = "conf" );
|
2019-11-25 13:57:54 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief Получение пути к базовому каталогу
|
|
|
|
|
*/
|
2019-10-04 09:48:12 +00:00
|
|
|
|
QDir prefixDirectory() const;
|
2019-11-25 13:57:54 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief Установка пути к базовому каталогу
|
|
|
|
|
*/
|
2019-10-04 09:48:12 +00:00
|
|
|
|
void setPrefixDirectory( const QString& prefixDirectory );
|
2019-11-25 13:57:54 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief Получение пути к каталогу с исполняемым файлом
|
|
|
|
|
*/
|
2019-10-04 09:48:12 +00:00
|
|
|
|
QDir binaryDirectory() const;
|
2019-11-25 13:57:54 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief Установка пути к каталогу с исполняемым файлом
|
|
|
|
|
*/
|
2019-10-04 09:48:12 +00:00
|
|
|
|
void setBinaryDirectory( const QString& binaryDirectory );
|
2019-11-25 13:57:54 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief Получение пути к каталогу с файлами настройки
|
|
|
|
|
*/
|
2019-10-04 09:48:12 +00:00
|
|
|
|
QDir configDirectory() const;
|
2019-11-25 13:57:54 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief Установка пути к каталогу с файлами настройки
|
|
|
|
|
*/
|
2019-10-04 09:48:12 +00:00
|
|
|
|
void setConfigDirectory( const QString& configDirectory );
|
2019-11-25 13:57:54 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief Получение пути к каталогу с изменяемыми файлами
|
|
|
|
|
*/
|
2019-10-04 09:48:12 +00:00
|
|
|
|
QDir cacheDirectory() const;
|
2019-11-25 13:57:54 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief Установка пути к каталогу с изменяемыми файлами
|
|
|
|
|
*/
|
2019-10-04 09:48:12 +00:00
|
|
|
|
void setCacheDirectory( const QString& cacheDirectory );
|
2019-11-25 13:57:54 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief Получение пути к каталогу с временными файлами
|
|
|
|
|
*/
|
2019-10-04 09:48:12 +00:00
|
|
|
|
QDir tempDirectory() const;
|
2019-11-25 13:57:54 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief Установка пути к каталогу с временными файлами
|
|
|
|
|
*/
|
2019-10-04 09:48:12 +00:00
|
|
|
|
void setTempDirectory( const QString& tempDirectory );
|
2019-11-25 13:57:54 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief Получение пути к каталогу с неизменяемыми файлами
|
|
|
|
|
*/
|
2019-10-04 09:48:12 +00:00
|
|
|
|
QDir dataDirectory() const;
|
2019-11-25 13:57:54 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief Установка пути к каталогу с неизменяемыми файлами
|
|
|
|
|
*/
|
2019-10-04 09:48:12 +00:00
|
|
|
|
void setDataDirectory( const QString& dataDirectory );
|
2019-11-25 13:57:54 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief Получение пути к каталогу с журналами работы
|
|
|
|
|
*/
|
2019-11-25 12:08:34 +00:00
|
|
|
|
QDir logDirectory() const;
|
2019-11-25 13:57:54 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief Установка пути к каталогу с журналами работы
|
|
|
|
|
*/
|
2019-11-25 12:08:34 +00:00
|
|
|
|
void setLogDirectory( const QString& logDirectory );
|
2019-11-25 13:57:54 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief Имя исполняемого файла
|
|
|
|
|
*/
|
2019-10-05 10:21:42 +00:00
|
|
|
|
QString executableFileName() const;
|
2019-11-25 13:57:54 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief Полный путь к исполняемому файлу
|
|
|
|
|
*/
|
|
|
|
|
QFileInfo executableFilePath() const;
|
|
|
|
|
/**
|
|
|
|
|
* @brief Имя файла настройки
|
|
|
|
|
*/
|
2019-10-05 10:21:42 +00:00
|
|
|
|
QString configFileName() const;
|
2019-11-25 13:57:54 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief Установка имени файла настройки
|
|
|
|
|
*/
|
2019-10-05 10:21:42 +00:00
|
|
|
|
void setConfigFileName( const QString& configFileName );
|
2019-11-25 13:57:54 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief Полный путь к файлу настройки
|
|
|
|
|
*/
|
2019-10-05 10:21:42 +00:00
|
|
|
|
QFileInfo configFilePath() const;
|
2019-11-25 13:57:54 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief Установка полного пути к файлу настройки
|
|
|
|
|
*/
|
2019-10-05 10:21:42 +00:00
|
|
|
|
void setConfigFilePath( const QFileInfo& configFilePath );
|
2019-10-04 09:48:12 +00:00
|
|
|
|
|
2019-11-25 13:57:54 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief Обновление путей с учётом расположения исполняемого файла
|
|
|
|
|
*/
|
2019-10-04 09:48:12 +00:00
|
|
|
|
bool updatePaths();
|
2019-11-25 13:57:54 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief Создание стандартных каталогов
|
|
|
|
|
*/
|
2019-10-09 03:00:33 +00:00
|
|
|
|
bool makeDefaultDirectories();
|
|
|
|
|
|
2019-11-25 13:57:54 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief Поиск существующего файла настойки.
|
|
|
|
|
* Поиск выполняется до тех пор пока не будет найден файл в следующем порядке:
|
|
|
|
|
* 1. Имя файла, указанное в качестве параметра функции
|
2020-03-31 21:32:10 +00:00
|
|
|
|
* 2. Имя файла, заданное переменной окружения вида PROJECT_NAME_CONFIG
|
2019-11-25 13:57:54 +00:00
|
|
|
|
* 3. Имя файла, полученное из внутренней переменной класса
|
|
|
|
|
* Если файл настройки не будет найден, то будет возвращена пустая строка
|
|
|
|
|
*/
|
2019-10-05 10:21:42 +00:00
|
|
|
|
QString findConfigFile( const QString& defaultConfigFile = "" );
|
2019-10-04 09:48:12 +00:00
|
|
|
|
}; // class Paths
|
2019-10-02 11:29:10 +00:00
|
|
|
|
|
|
|
|
|
} // namespace filesystem
|
|
|
|
|
|
|
|
|
|
} // namespace myx
|
|
|
|
|
|
|
|
|
|
#endif // MYX_FILESYSTEM_PATHS_HPP_
|