]> cloud.milkyroute.net Git - dolphin.git/blob - src/itemactions/movetonewfolderitemaction.cpp
cfd6f25eef9d8a2156a6f82111286555e9b15475
[dolphin.git] / src / itemactions / movetonewfolderitemaction.cpp
1 /*
2 * SPDX-FileCopyrightText: 2024 Ahmet Hakan Çelik <mail@ahakan.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7 #include "movetonewfolderitemaction.h"
8
9 #include <KFileItem>
10 #include <KLocalizedString>
11 #include <KPluginFactory>
12 #include <KNewFileMenu>
13 #include <KIO/CopyJob>
14 #include <KIO/JobUiDelegate>
15 #include <KIO/FileUndoManager>
16
17 #include <QUrl>
18
19 K_PLUGIN_CLASS_WITH_JSON(MoveToNewFolderItemAction, "movetonewfolderitemaction.json")
20
21 MoveToNewFolderItemAction::MoveToNewFolderItemAction(QObject *parent)
22 : KAbstractFileItemActionPlugin(parent)
23 {
24
25 }
26
27 QList<QAction *> MoveToNewFolderItemAction::actions(const KFileItemListProperties &fileItemInfos, QWidget *parentWidget)
28 {
29 const KFileItemList &selectedItems = fileItemInfos.items();
30
31 QAction *createFolderFromSelected = new QAction(i18nc("@action:inmenu", "Move to New Folder…"), parentWidget);
32 createFolderFromSelected->setIcon(QIcon::fromTheme(QStringLiteral("folder-new")));
33 connect(createFolderFromSelected, &QAction::triggered, this, [=, this]() {
34 QString selectedFileDirPath = selectedItems.at(0).url().toString().remove(selectedItems.at(0).name());
35 if (selectedFileDirPath.endsWith(QStringLiteral("/"))) {
36 selectedFileDirPath.removeLast();
37 }
38 const QUrl newFolderDirUrl(selectedFileDirPath);
39
40 auto newFileMenu = new KNewFileMenu(parentWidget);
41 newFileMenu->setWorkingDirectory(newFolderDirUrl);
42 newFileMenu->createDirectory();
43
44 connect(newFileMenu, &KNewFileMenu::directoryCreated, this, [=](const QUrl &createdUrl) {
45 KIO::CopyJob *job = KIO::move(selectedItems.urlList(), createdUrl);
46 KIO::FileUndoManager::self()->recordCopyJob(job);
47 newFileMenu->deleteLater();
48 });
49 });
50
51 return {createFolderFromSelected};
52 }
53
54 #include "movetonewfolderitemaction.moc"
55
56 #include "moc_movetonewfolderitemaction.cpp"