* further change: initialize all llvm targets before indexing * further change: remove configurable dependencies directory from gradle and maven sourcegroups
151 lines
2.5 KiB
C++
151 lines
2.5 KiB
C++
#include "Settings.h"
|
|
|
|
#include "logging.h"
|
|
#include "TextAccess.h"
|
|
#include "utility.h"
|
|
|
|
Settings::Settings(const Settings& other)
|
|
: m_config(other.m_config->createCopy())
|
|
, m_filePath(other.m_filePath)
|
|
{
|
|
}
|
|
|
|
Settings& Settings::operator=(const Settings& other)
|
|
{
|
|
if (&other != this)
|
|
{
|
|
m_filePath = other.m_filePath;
|
|
m_config = other.m_config->createCopy();
|
|
}
|
|
|
|
return *this;
|
|
}
|
|
|
|
Settings::~Settings()
|
|
{
|
|
}
|
|
|
|
bool Settings::load(const FilePath& filePath, bool readOnly)
|
|
{
|
|
m_readOnly = readOnly;
|
|
|
|
if (filePath.exists())
|
|
{
|
|
m_config = ConfigManager::createAndLoad(TextAccess::createFromFile(filePath));
|
|
m_filePath = filePath;
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
clear();
|
|
m_filePath = filePath;
|
|
LOG_WARNING(L"File for Settings not found: " + filePath.wstr());
|
|
return false;
|
|
}
|
|
}
|
|
|
|
bool Settings::loadFromString(const std::string& text, bool readOnly)
|
|
{
|
|
m_readOnly = readOnly;
|
|
|
|
m_config = ConfigManager::createAndLoad(TextAccess::createFromString(text));
|
|
m_filePath = FilePath();
|
|
return true;
|
|
}
|
|
|
|
void Settings::save()
|
|
{
|
|
if (m_readOnly)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (m_config.get() && !m_filePath.empty())
|
|
{
|
|
m_config->save(m_filePath.str());
|
|
}
|
|
else
|
|
{
|
|
LOG_WARNING(L"Settings were not saved: " + m_filePath.wstr());
|
|
}
|
|
}
|
|
|
|
void Settings::save(const FilePath& filePath)
|
|
{
|
|
setFilePath(filePath);
|
|
|
|
save();
|
|
}
|
|
|
|
void Settings::clear()
|
|
{
|
|
m_config = ConfigManager::createEmpty();
|
|
m_filePath = FilePath();
|
|
}
|
|
|
|
const FilePath& Settings::getFilePath() const
|
|
{
|
|
return m_filePath;
|
|
}
|
|
|
|
size_t Settings::getVersion() const
|
|
{
|
|
return getValue<int>("version", 0);
|
|
}
|
|
|
|
void Settings::setVersion(size_t version)
|
|
{
|
|
setValue<int>("version", version);
|
|
}
|
|
|
|
Settings::Settings()
|
|
{
|
|
clear();
|
|
}
|
|
|
|
void Settings::setFilePath(const FilePath& filePath)
|
|
{
|
|
m_filePath = filePath;
|
|
}
|
|
|
|
std::vector<FilePath> Settings::getPathValues(const std::string& key) const
|
|
{
|
|
std::vector<FilePath> paths;
|
|
for (const std::wstring& value : getValues<std::wstring>(key, {}))
|
|
{
|
|
paths.push_back(FilePath(value));
|
|
}
|
|
return paths;
|
|
}
|
|
|
|
bool Settings::setPathValues(const std::string& key, const std::vector<FilePath>& paths)
|
|
{
|
|
std::vector<std::wstring> values;
|
|
for (const FilePath& path : paths)
|
|
{
|
|
values.push_back(path.wstr());
|
|
}
|
|
|
|
return setValues(key, values);
|
|
}
|
|
|
|
bool Settings::isValueDefined(const std::string& key) const
|
|
{
|
|
return m_config->isValueDefined(key);
|
|
}
|
|
|
|
void Settings::removeValues(const std::string& key)
|
|
{
|
|
m_config->removeValues(key);
|
|
}
|
|
|
|
void Settings::enableWarnings() const
|
|
{
|
|
m_config->setWarnOnEmptyKey(true);
|
|
}
|
|
|
|
void Settings::disableWarnings() const
|
|
{
|
|
m_config->setWarnOnEmptyKey(false);
|
|
}
|