File indexing completed on 2024-05-12 04:37:41
0001 /* 0002 SPDX-FileCopyrightText: 2012 Milian Wolff <mail@milianw.de> 0003 SPDX-FileCopyrightText: 2014 Kevin Funk <kfunk@kde.org> 0004 0005 SPDX-License-Identifier: LGPL-2.0-only 0006 */ 0007 0008 #include "renamefileaction.h" 0009 0010 #include <debug.h> 0011 0012 #include <language/codegen/documentchangeset.h> 0013 #include <language/codegen/basicrefactoring.h> 0014 0015 #include <interfaces/idocumentcontroller.h> 0016 #include <interfaces/iuicontroller.h> 0017 #include <interfaces/icore.h> 0018 #include <sublime/message.h> 0019 // KF 0020 #include <KLocalizedString> 0021 0022 using namespace KDevelop; 0023 0024 class RenameFileActionPrivate 0025 { 0026 public: 0027 KDevelop::BasicRefactoring* m_refactoring; 0028 QUrl m_file; 0029 QString m_newName; 0030 }; 0031 0032 RenameFileAction::RenameFileAction(BasicRefactoring* refactoring, const QUrl& file, const QString& newName) 0033 : d_ptr(new RenameFileActionPrivate) 0034 { 0035 Q_D(RenameFileAction); 0036 0037 d->m_refactoring = refactoring; 0038 d->m_file = file; 0039 d->m_newName = newName; 0040 } 0041 0042 RenameFileAction::~RenameFileAction() 0043 { 0044 } 0045 0046 QString RenameFileAction::description() const 0047 { 0048 Q_D(const RenameFileAction); 0049 0050 return i18n("Rename file from \"%1\" to \"%2\".", 0051 d->m_file.fileName(), d->m_refactoring->newFileName(d->m_file, d->m_newName)); 0052 } 0053 0054 void RenameFileAction::execute() 0055 { 0056 Q_D(RenameFileAction); 0057 0058 // save document to prevent unwanted dialogs 0059 IDocument* doc = ICore::self()->documentController()->documentForUrl(d->m_file); 0060 if (!doc) { 0061 qCWarning(LANGUAGE) << "could find no document for url:" << d->m_file; 0062 return; 0063 } 0064 0065 if (!ICore::self()->documentController()->saveSomeDocuments(QList<IDocument*>() << doc, IDocument::Silent)) { 0066 return; 0067 } 0068 0069 // rename document 0070 DocumentChangeSet changes; 0071 DocumentChangeSet::ChangeResult result = d->m_refactoring->addRenameFileChanges(d->m_file, d->m_newName, &changes); 0072 if (result) { 0073 result = changes.applyAllChanges(); 0074 } 0075 if (!result) { 0076 auto* message = new Sublime::Message(i18n("Failed to apply changes: %1", result.m_failureReason), Sublime::Message::Error); 0077 ICore::self()->uiController()->postMessage(message); 0078 } 0079 emit executed(this); 0080 } 0081 0082 #include "moc_renamefileaction.cpp"