diff --git a/src/plugins/effectcomposer/effectcomposermodel.cpp b/src/plugins/effectcomposer/effectcomposermodel.cpp index d9c329b1f38..3561f46a3f0 100644 --- a/src/plugins/effectcomposer/effectcomposermodel.cpp +++ b/src/plugins/effectcomposer/effectcomposermodel.cpp @@ -14,6 +14,7 @@ #include +#include #include #include @@ -202,8 +203,10 @@ void EffectComposerModel::clear(bool clearName) m_nodes.clear(); endResetModel(); - if (clearName) + if (clearName) { setCurrentComposition(""); + setCompositionPath(""); + } setHasUnsavedChanges(!m_currentComposition.isEmpty()); @@ -221,20 +224,19 @@ void EffectComposerModel::assignToSelected() QString EffectComposerModel::getUniqueEffectName() const { const QString effectsDir = QmlDesigner::ModelNodeOperations::getEffectsDefaultDirectory(); - const QString path = effectsDir + '/' + "Effect%1.qep"; + const QString path = !m_compositionPath.isEmpty() ? m_compositionPath.parentDir().pathAppended("%1.qep").toString() + : effectsDir + '/' + "%1" + ".qep"; - int num = 0; - - while (QFile::exists(path.arg(++num, 2, 10, QChar('0')))) - ; // empty body - - return QString("Effect%1").arg(num, 2, 10, QChar('0')); + return QmlDesigner::UniqueName::generate("Effect01", [&] (const QString &effectName) { + return QFile::exists(path.arg(effectName)); + }); } bool EffectComposerModel::nameExists(const QString &name) const { const QString effectsDir = QmlDesigner::ModelNodeOperations::getEffectsDefaultDirectory(); - const QString path = effectsDir + '/' + "%1" + ".qep"; + const QString path = !m_compositionPath.isEmpty() ? m_compositionPath.parentDir().pathAppended("%1.qep").toString() + : effectsDir + '/' + "%1" + ".qep"; return QFile::exists(path.arg(name)); } @@ -947,7 +949,10 @@ void EffectComposerModel::saveComposition(const QString &name) } const QString effectsAssetsDir = QmlDesigner::ModelNodeOperations::getEffectsDefaultDirectory(); - const QString path = effectsAssetsDir + '/' + name + ".qep"; + + const QString path = !m_compositionPath.isEmpty() ? m_compositionPath.parentDir().pathAppended(name + ".qep").toString() + : effectsAssetsDir + '/' + name + ".qep"; + auto saveFile = QFile(path); if (!saveFile.open(QIODevice::WriteOnly)) { QString error = QString("Error: Couldn't save composition file: '%1'").arg(path); @@ -977,7 +982,9 @@ void EffectComposerModel::saveComposition(const QString &name) saveFile.write(jsonDoc.toJson()); saveFile.close(); + setCurrentComposition(name); + setCompositionPath(Utils::FilePath::fromString(path)); saveResources(name); setHasUnsavedChanges(false); @@ -988,7 +995,9 @@ void EffectComposerModel::openComposition(const QString &path) clear(true); const QString effectName = QFileInfo(path).baseName(); + setCurrentComposition(effectName); + setCompositionPath(Utils::FilePath::fromString(path)); QFile compFile(path); if (!compFile.open(QIODevice::ReadOnly)) { @@ -2044,6 +2053,19 @@ void EffectComposerModel::setCurrentComposition(const QString &newCurrentComposi emit currentCompositionChanged(); } +Utils::FilePath EffectComposerModel::compositionPath() const +{ + return m_compositionPath; +} + +void EffectComposerModel::setCompositionPath(const Utils::FilePath &newCompositionPath) +{ + if (m_compositionPath == newCompositionPath) + return; + + m_compositionPath = newCompositionPath; +} + bool EffectComposerModel::hasUnsavedChanges() const { return m_hasUnsavedChanges; diff --git a/src/plugins/effectcomposer/effectcomposermodel.h b/src/plugins/effectcomposer/effectcomposermodel.h index b377ae06180..098cc730069 100644 --- a/src/plugins/effectcomposer/effectcomposermodel.h +++ b/src/plugins/effectcomposer/effectcomposermodel.h @@ -105,6 +105,9 @@ public: QString currentComposition() const; void setCurrentComposition(const QString &newCurrentComposition); + Utils::FilePath compositionPath() const; + void setCompositionPath(const Utils::FilePath &newCompositionPath); + bool hasUnsavedChanges() const; void setHasUnsavedChanges(bool val); @@ -226,6 +229,7 @@ private: QTimer m_rebakeTimer; int m_extraMargin = 0; QString m_effectTypePrefix; + Utils::FilePath m_compositionPath; const QRegularExpression m_spaceReg = QRegularExpression("\\s+"); };