forked from qt-creator/qt-creator
TextEditor: FilePathify CodeStylePool
Change-Id: I1ae0706237c7b50d5faf3e069d7bb238e237f331 Reviewed-by: David Schulz <david.schulz@qt.io> Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
@@ -8,19 +8,17 @@
|
|||||||
|
|
||||||
#include <coreplugin/icore.h>
|
#include <coreplugin/icore.h>
|
||||||
|
|
||||||
#include <utils/fileutils.h>
|
#include <utils/filepath.h>
|
||||||
#include <utils/persistentsettings.h>
|
#include <utils/persistentsettings.h>
|
||||||
|
|
||||||
#include <QMap>
|
#include <QMap>
|
||||||
#include <QDir>
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QFileInfo>
|
|
||||||
|
|
||||||
using namespace TextEditor;
|
using namespace Utils;
|
||||||
|
|
||||||
static const char codeStyleDataKey[] = "CodeStyleData";
|
const char codeStyleDataKey[] = "CodeStyleData";
|
||||||
static const char displayNameKey[] = "DisplayName";
|
const char displayNameKey[] = "DisplayName";
|
||||||
static const char codeStyleDocKey[] = "QtCreatorCodeStyle";
|
const char codeStyleDocKey[] = "QtCreatorCodeStyle";
|
||||||
|
|
||||||
namespace TextEditor {
|
namespace TextEditor {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
@@ -67,10 +65,9 @@ QByteArray CodeStylePoolPrivate::generateUniqueId(const QByteArray &id) const
|
|||||||
return newName;
|
return newName;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
} // Internal
|
||||||
}
|
|
||||||
|
|
||||||
static Utils::FilePath customCodeStylesPath()
|
static FilePath customCodeStylesPath()
|
||||||
{
|
{
|
||||||
return Core::ICore::userResourcePath("codestyles");
|
return Core::ICore::userResourcePath("codestyles");
|
||||||
}
|
}
|
||||||
@@ -87,15 +84,15 @@ CodeStylePool::~CodeStylePool()
|
|||||||
delete d;
|
delete d;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString CodeStylePool::settingsDir() const
|
FilePath CodeStylePool::settingsDir() const
|
||||||
{
|
{
|
||||||
const QString suffix = d->m_factory ? d->m_factory->languageId().toString() : QLatin1String("default");
|
const QString suffix = d->m_factory ? d->m_factory->languageId().toString() : QLatin1String("default");
|
||||||
return customCodeStylesPath().pathAppended(suffix).toString();
|
return customCodeStylesPath().pathAppended(suffix);
|
||||||
}
|
}
|
||||||
|
|
||||||
Utils::FilePath CodeStylePool::settingsPath(const QByteArray &id) const
|
FilePath CodeStylePool::settingsPath(const QByteArray &id) const
|
||||||
{
|
{
|
||||||
return Utils::FilePath::fromString(settingsDir()).pathAppended(QString::fromUtf8(id + ".xml"));
|
return settingsDir().pathAppended(QString::fromUtf8(id + ".xml"));
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<ICodeStylePreferences *> CodeStylePool::codeStyles() const
|
QList<ICodeStylePreferences *> CodeStylePool::codeStyles() const
|
||||||
@@ -173,8 +170,7 @@ void CodeStylePool::removeCodeStyle(ICodeStylePreferences *codeStyle)
|
|||||||
d->m_pool.removeOne(codeStyle);
|
d->m_pool.removeOne(codeStyle);
|
||||||
d->m_idToCodeStyle.remove(codeStyle->id());
|
d->m_idToCodeStyle.remove(codeStyle->id());
|
||||||
|
|
||||||
QDir dir(settingsDir());
|
settingsPath(codeStyle->id()).removeFile();
|
||||||
dir.remove(settingsPath(codeStyle->id()).fileName());
|
|
||||||
|
|
||||||
delete codeStyle;
|
delete codeStyle;
|
||||||
}
|
}
|
||||||
@@ -186,17 +182,16 @@ ICodeStylePreferences *CodeStylePool::codeStyle(const QByteArray &id) const
|
|||||||
|
|
||||||
void CodeStylePool::loadCustomCodeStyles()
|
void CodeStylePool::loadCustomCodeStyles()
|
||||||
{
|
{
|
||||||
QDir dir(settingsDir());
|
FilePath dir = settingsDir();
|
||||||
const QStringList codeStyleFiles = dir.entryList(QStringList() << QLatin1String("*.xml"), QDir::Files);
|
const FilePaths codeStyleFiles = dir.dirEntries({QStringList(QLatin1String("*.xml")), QDir::Files});
|
||||||
for (int i = 0; i < codeStyleFiles.count(); i++) {
|
for (const FilePath &codeStyleFile : codeStyleFiles) {
|
||||||
const QString codeStyleFile = codeStyleFiles.at(i);
|
|
||||||
// filter out styles which id is the same as one of built-in styles
|
// filter out styles which id is the same as one of built-in styles
|
||||||
if (!d->m_idToCodeStyle.contains(QFileInfo(codeStyleFile).completeBaseName().toUtf8()))
|
if (!d->m_idToCodeStyle.contains(codeStyleFile.completeBaseName().toUtf8()))
|
||||||
loadCodeStyle(Utils::FilePath::fromString(dir.absoluteFilePath(codeStyleFile)));
|
loadCodeStyle(codeStyleFile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ICodeStylePreferences *CodeStylePool::importCodeStyle(const Utils::FilePath &fileName)
|
ICodeStylePreferences *CodeStylePool::importCodeStyle(const FilePath &fileName)
|
||||||
{
|
{
|
||||||
ICodeStylePreferences *codeStyle = loadCodeStyle(fileName);
|
ICodeStylePreferences *codeStyle = loadCodeStyle(fileName);
|
||||||
if (codeStyle)
|
if (codeStyle)
|
||||||
@@ -204,10 +199,10 @@ ICodeStylePreferences *CodeStylePool::importCodeStyle(const Utils::FilePath &fil
|
|||||||
return codeStyle;
|
return codeStyle;
|
||||||
}
|
}
|
||||||
|
|
||||||
ICodeStylePreferences *CodeStylePool::loadCodeStyle(const Utils::FilePath &fileName)
|
ICodeStylePreferences *CodeStylePool::loadCodeStyle(const FilePath &fileName)
|
||||||
{
|
{
|
||||||
ICodeStylePreferences *codeStyle = nullptr;
|
ICodeStylePreferences *codeStyle = nullptr;
|
||||||
Utils::PersistentSettingsReader reader;
|
PersistentSettingsReader reader;
|
||||||
reader.load(fileName);
|
reader.load(fileName);
|
||||||
QVariantMap m = reader.restoreValues();
|
QVariantMap m = reader.restoreValues();
|
||||||
if (m.contains(QLatin1String(codeStyleDataKey))) {
|
if (m.contains(QLatin1String(codeStyleDataKey))) {
|
||||||
@@ -228,16 +223,16 @@ ICodeStylePreferences *CodeStylePool::loadCodeStyle(const Utils::FilePath &fileN
|
|||||||
|
|
||||||
void CodeStylePool::saveCodeStyle(ICodeStylePreferences *codeStyle) const
|
void CodeStylePool::saveCodeStyle(ICodeStylePreferences *codeStyle) const
|
||||||
{
|
{
|
||||||
const QString codeStylesPath = customCodeStylesPath().toString();
|
const FilePath codeStylesPath = customCodeStylesPath();
|
||||||
|
|
||||||
// Create the base directory when it doesn't exist
|
// Create the base directory when it doesn't exist
|
||||||
if (!QFile::exists(codeStylesPath) && !QDir().mkpath(codeStylesPath)) {
|
if (!codeStylesPath.exists() && !codeStylesPath.createDir()) {
|
||||||
qWarning() << "Failed to create code style directory:" << codeStylesPath;
|
qWarning() << "Failed to create code style directory:" << codeStylesPath;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const QString languageCodeStylesPath = settingsDir();
|
const FilePath languageCodeStylesPath = settingsDir();
|
||||||
// Create the base directory for the language when it doesn't exist
|
// Create the base directory for the language when it doesn't exist
|
||||||
if (!QFile::exists(languageCodeStylesPath) && !QDir().mkpath(languageCodeStylesPath)) {
|
if (!languageCodeStylesPath.exists() && !languageCodeStylesPath.createDir()) {
|
||||||
qWarning() << "Failed to create language code style directory:" << languageCodeStylesPath;
|
qWarning() << "Failed to create language code style directory:" << languageCodeStylesPath;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -245,14 +240,15 @@ void CodeStylePool::saveCodeStyle(ICodeStylePreferences *codeStyle) const
|
|||||||
exportCodeStyle(settingsPath(codeStyle->id()), codeStyle);
|
exportCodeStyle(settingsPath(codeStyle->id()), codeStyle);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CodeStylePool::exportCodeStyle(const Utils::FilePath &fileName, ICodeStylePreferences *codeStyle) const
|
void CodeStylePool::exportCodeStyle(const FilePath &fileName, ICodeStylePreferences *codeStyle) const
|
||||||
{
|
{
|
||||||
const QVariantMap map = codeStyle->toMap();
|
const QVariantMap map = codeStyle->toMap();
|
||||||
const QVariantMap tmp = {
|
const QVariantMap tmp = {
|
||||||
{displayNameKey, codeStyle->displayName()},
|
{displayNameKey, codeStyle->displayName()},
|
||||||
{codeStyleDataKey, map}
|
{codeStyleDataKey, map}
|
||||||
};
|
};
|
||||||
Utils::PersistentSettingsWriter writer(fileName, QLatin1String(codeStyleDocKey));
|
PersistentSettingsWriter writer(fileName, QLatin1String(codeStyleDocKey));
|
||||||
writer.save(tmp, Core::ICore::dialogParent());
|
writer.save(tmp, Core::ICore::dialogParent());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} // TextEditor
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ signals:
|
|||||||
void codeStyleRemoved(ICodeStylePreferences *);
|
void codeStyleRemoved(ICodeStylePreferences *);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString settingsDir() const;
|
Utils::FilePath settingsDir() const;
|
||||||
Utils::FilePath settingsPath(const QByteArray &id) const;
|
Utils::FilePath settingsPath(const QByteArray &id) const;
|
||||||
ICodeStylePreferences *loadCodeStyle(const Utils::FilePath &fileName);
|
ICodeStylePreferences *loadCodeStyle(const Utils::FilePath &fileName);
|
||||||
void saveCodeStyle(ICodeStylePreferences *codeStyle) const;
|
void saveCodeStyle(ICodeStylePreferences *codeStyle) const;
|
||||||
|
|||||||
Reference in New Issue
Block a user