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:
hjk
2022-09-22 16:26:39 +02:00
parent d83f9d71cc
commit dc09779044
2 changed files with 28 additions and 32 deletions

View File

@@ -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

View File

@@ -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;