myxlib/src/myx/filesystem/paths.hpp

159 lines
5.5 KiB
C++
Raw Normal View History

2019-11-25 13:57:54 +00:00
/**
* @file paths.hpp
* @brief Стандартные пути к каталогам и файлам
*/
#ifndef MYX_FILESYSTEM_PATHS_HPP_
#define MYX_FILESYSTEM_PATHS_HPP_
2019-11-25 12:08:34 +00:00
#include <myx/filesystem/current_executable.hpp>
#include <QString>
#include <QDir>
#include <QFileInfo>
namespace myx {
namespace filesystem {
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;
/// Полный путь к файлу настройки
QFileInfo m_configFilePath;
2019-11-25 13:57:54 +00:00
/// Имя файла настройки
QString m_configFileName;
/// Расширение для файла настройки
QString m_configFileExtension;
2019-11-25 13:57:54 +00:00
/// Параметры текущего исполняемого файла
2019-11-25 12:08:34 +00:00
CurrentExecutable m_currentExecutable;
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 Получение пути к базовому каталогу
*/
QDir prefixDirectory() const;
2019-11-25 13:57:54 +00:00
/**
* @brief Установка пути к базовому каталогу
*/
void setPrefixDirectory( const QString& prefixDirectory );
2019-11-25 13:57:54 +00:00
/**
* @brief Получение пути к каталогу с исполняемым файлом
*/
QDir binaryDirectory() const;
2019-11-25 13:57:54 +00:00
/**
* @brief Установка пути к каталогу с исполняемым файлом
*/
void setBinaryDirectory( const QString& binaryDirectory );
2019-11-25 13:57:54 +00:00
/**
* @brief Получение пути к каталогу с файлами настройки
*/
QDir configDirectory() const;
2019-11-25 13:57:54 +00:00
/**
* @brief Установка пути к каталогу с файлами настройки
*/
void setConfigDirectory( const QString& configDirectory );
2019-11-25 13:57:54 +00:00
/**
* @brief Получение пути к каталогу с изменяемыми файлами
*/
QDir cacheDirectory() const;
2019-11-25 13:57:54 +00:00
/**
* @brief Установка пути к каталогу с изменяемыми файлами
*/
void setCacheDirectory( const QString& cacheDirectory );
2019-11-25 13:57:54 +00:00
/**
* @brief Получение пути к каталогу с временными файлами
*/
QDir tempDirectory() const;
2019-11-25 13:57:54 +00:00
/**
* @brief Установка пути к каталогу с временными файлами
*/
void setTempDirectory( const QString& tempDirectory );
2019-11-25 13:57:54 +00:00
/**
* @brief Получение пути к каталогу с неизменяемыми файлами
*/
QDir dataDirectory() const;
2019-11-25 13:57:54 +00:00
/**
* @brief Установка пути к каталогу с неизменяемыми файлами
*/
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 Имя исполняемого файла
*/
QString executableFileName() const;
2019-11-25 13:57:54 +00:00
/**
* @brief Полный путь к исполняемому файлу
*/
QFileInfo executableFilePath() const;
/**
* @brief Имя файла настройки
*/
QString configFileName() const;
2019-11-25 13:57:54 +00:00
/**
* @brief Установка имени файла настройки
*/
void setConfigFileName( const QString& configFileName );
2019-11-25 13:57:54 +00:00
/**
* @brief Полный путь к файлу настройки
*/
QFileInfo configFilePath() const;
2019-11-25 13:57:54 +00:00
/**
* @brief Установка полного пути к файлу настройки
*/
void setConfigFilePath( const QFileInfo& configFilePath );
2019-11-25 13:57:54 +00:00
/**
* @brief Обновление путей с учётом расположения исполняемого файла
*/
bool updatePaths();
2019-11-25 13:57:54 +00:00
/**
* @brief Создание стандартных каталогов
*/
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. Имя файла, полученное из внутренней переменной класса
* Если файл настройки не будет найден, то будет возвращена пустая строка
*/
QString findConfigFile( const QString& defaultConfigFile = "" );
}; // class Paths
} // namespace filesystem
} // namespace myx
#endif // MYX_FILESYSTEM_PATHS_HPP_