]> cloud.milkyroute.net Git - dolphin.git/commitdiff
"Use newly-upstreamed rename dialog from KIO""
authorNate Graham <nate@kde.org>
Sat, 11 Jan 2020 20:21:52 +0000 (13:21 -0700)
committerNate Graham <nate@kde.org>
Sat, 11 Jan 2020 20:21:52 +0000 (13:21 -0700)
This reverts commit 41105103b063c2e538bf0071e54fd429a841238b.

KIO's version was just bumped to 5.67, so this can land now without
breaking the CI.

CMakeLists.txt
src/CMakeLists.txt
src/panels/folders/folderspanel.cpp
src/views/dolphinview.cpp
src/views/renamedialog.cpp [deleted file]
src/views/renamedialog.h [deleted file]

index 79c0fefa95a5f44f749b77d7f87cd92917be629f..0ab79e643c7707618e1fbdafaef89f716fbe07d2 100644 (file)
@@ -8,7 +8,7 @@ set (RELEASE_SERVICE_VERSION "${RELEASE_SERVICE_VERSION_MAJOR}.${RELEASE_SERVICE
 project(Dolphin VERSION ${RELEASE_SERVICE_VERSION})
 
 set(QT_MIN_VERSION "5.11.0")
-set(KF5_MIN_VERSION "5.64.0")
+set(KF5_MIN_VERSION "5.67.0")
 
 # ECM setup
 find_package(ECM ${KF5_MIN_VERSION} CONFIG REQUIRED)
index e240f71066a9a51d818c1422510396fb58212933..e8d623d2f2320fc0aa64955b144c50c8e96fb53a 100644 (file)
@@ -99,7 +99,6 @@ set(dolphinprivate_LIB_SRCS
     views/dolphinview.cpp
     views/dolphinviewactionhandler.cpp
     views/draganddrophelper.cpp
-    views/renamedialog.cpp
     views/versioncontrol/updateitemstatesthread.cpp
     views/versioncontrol/versioncontrolobserver.cpp
     views/viewmodecontroller.cpp
index 01f338461f0d8990651ed615612cab5d239fa589..2e7e4dc28c1ee8d88a511044efec48bed940af37 100644 (file)
 #include "kitemviews/kitemlistselectionmanager.h"
 #include "treeviewcontextmenu.h"
 #include "views/draganddrophelper.h"
-#include "views/renamedialog.h"
 
 #include <KJobWidgets>
 #include <KJobUiDelegate>
 #include <KIO/CopyJob>
 #include <KIO/DropJob>
 #include <KIO/FileUndoManager>
+#include <KIO/RenameFileDialog>
 
 #include <QApplication>
 #include <QBoxLayout>
@@ -104,7 +104,7 @@ void FoldersPanel::rename(const KFileItem& item)
         const int index = m_model->index(item);
         m_controller->view()->editRole(index, "text");
     } else {
-        RenameDialog* dialog = new RenameDialog(this, KFileItemList() << item);
+        KIO::RenameFileDialog* dialog = new KIO::RenameFileDialog(KFileItemList({item}), this);
         dialog->open();
     }
 }
index 3437db7a76da37f93b818160863c77b233592b78..cfece0fe6b7f1e0b17349269fe340a888ec36b01 100644 (file)
@@ -31,7 +31,6 @@
 #include "kitemviews/kitemlistcontroller.h"
 #include "kitemviews/kitemlistheader.h"
 #include "kitemviews/kitemlistselectionmanager.h"
-#include "renamedialog.h"
 #include "versioncontrol/versioncontrolobserver.h"
 #include "viewproperties.h"
 #include "views/tooltips/tooltipmanager.h"
@@ -52,6 +51,7 @@
 #include <KIO/Paste>
 #include <KIO/PasteJob>
 #include <KIO/PreviewJob>
+#include <KIO/RenameFileDialog>
 #include <KJobWidgets>
 #include <KLocalizedString>
 #include <KMessageBox>
@@ -637,8 +637,9 @@ void DolphinView::renameSelectedItems()
         connect(m_view, &DolphinItemListView::roleEditingFinished,
                 this, &DolphinView::slotRoleEditingFinished);
     } else {
-        RenameDialog* dialog = new RenameDialog(this, items);
-        connect(dialog, &RenameDialog::renamingFinished, this, &DolphinView::slotRenameDialogRenamingFinished);
+        KIO::RenameFileDialog* dialog = new KIO::RenameFileDialog(items, this);
+        connect(dialog, &KIO::RenameFileDialog::renamingFinished,
+                this, &DolphinView::slotRenameDialogRenamingFinished);
 
         dialog->open();
     }
diff --git a/src/views/renamedialog.cpp b/src/views/renamedialog.cpp
deleted file mode 100644 (file)
index 9606856..0000000
+++ /dev/null
@@ -1,225 +0,0 @@
-/***************************************************************************
- *   Copyright (C) 2006-2010 by Peter Penz (peter.penz@gmx.at)             *
- *                                                                         *
- *   This program is free software; you can redistribute it and/or modify  *
- *   it under the terms of the GNU General Public License as published by  *
- *   the Free Software Foundation; either version 2 of the License, or     *
- *   (at your option) any later version.                                   *
- *                                                                         *
- *   This program is distributed in the hope that it will be useful,       *
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
- *   GNU General Public License for more details.                          *
- *                                                                         *
- *   You should have received a copy of the GNU General Public License     *
- *   along with this program; if not, write to the                         *
- *   Free Software Foundation, Inc.,                                       *
- *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA          *
- ***************************************************************************/
-
-#include "renamedialog.h"
-
-#include <KGuiItem>
-#include <KIO/BatchRenameJob>
-#include <KIO/CopyJob>
-#include <KIO/FileUndoManager>
-#include <KJobUiDelegate>
-#include <KJobWidgets>
-#include <KLocalizedString>
-
-#include <QDialogButtonBox>
-#include <QHBoxLayout>
-#include <QLabel>
-#include <QLineEdit>
-#include <QMimeDatabase>
-#include <QPushButton>
-#include <QSpinBox>
-
-RenameDialog::RenameDialog(QWidget *parent, const KFileItemList& items) :
-    QDialog(parent),
-    m_renameOneItem(false),
-    m_newName(),
-    m_lineEdit(nullptr),
-    m_items(items),
-    m_allExtensionsDifferent(true),
-    m_spinBox(nullptr)
-{
-    const QSize minSize = minimumSize();
-    setMinimumSize(QSize(320, minSize.height()));
-
-    const int itemCount = items.count();
-    Q_ASSERT(itemCount >= 1);
-    m_renameOneItem = (itemCount == 1);
-
-    setWindowTitle(m_renameOneItem ?
-               i18nc("@title:window", "Rename Item") :
-               i18nc("@title:window", "Rename Items"));
-    QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok|QDialogButtonBox::Cancel);
-    QVBoxLayout *mainLayout = new QVBoxLayout;
-    setLayout(mainLayout);
-    m_okButton = buttonBox->button(QDialogButtonBox::Ok);
-    m_okButton->setDefault(true);
-    m_okButton->setShortcut(Qt::CTRL + Qt::Key_Return);
-    connect(buttonBox, &QDialogButtonBox::accepted, this, &RenameDialog::slotAccepted);
-    connect(buttonBox, &QDialogButtonBox::rejected, this, &RenameDialog::reject);
-    connect(buttonBox, &QDialogButtonBox::rejected, this, &QObject::deleteLater);
-    m_okButton->setDefault(true);
-
-    KGuiItem::assign(m_okButton, KGuiItem(i18nc("@action:button", "&Rename"), QStringLiteral("dialog-ok-apply")));
-
-    QWidget* page = new QWidget(this);
-    mainLayout->addWidget(page);
-    mainLayout->addWidget(buttonBox);
-
-    QVBoxLayout* topLayout = new QVBoxLayout(page);
-
-    QLabel* editLabel = nullptr;
-    if (m_renameOneItem) {
-        m_newName = items.first().name();
-        editLabel = new QLabel(xi18nc("@label:textbox", "Rename the item <filename>%1</filename> to:", m_newName),
-                               page);
-        editLabel->setTextFormat(Qt::PlainText);
-    } else {
-        m_newName = i18nc("@info:status", "New name #");
-        editLabel = new QLabel(i18ncp("@label:textbox",
-                                      "Rename the %1 selected item to:",
-                                      "Rename the %1 selected items to:", itemCount),
-                               page);
-    }
-
-    m_lineEdit = new QLineEdit(page);
-    mainLayout->addWidget(m_lineEdit);
-    connect(m_lineEdit, &QLineEdit::textChanged, this, &RenameDialog::slotTextChanged);
-
-    int selectionLength = m_newName.length();
-    if (m_renameOneItem) {
-        const QString fileName = items.first().url().toDisplayString();
-        QMimeDatabase db;
-        const QString extension = db.suffixForFileName(fileName.toLower());
-
-        // If the current item is a directory, select the whole file name.
-        if ((extension.length() > 0) && !items.first().isDir()) {
-            // Don't select the extension
-            selectionLength -= extension.length() + 1;
-        }
-    } else {
-         // Don't select the # character
-        --selectionLength;
-    }
-
-    m_lineEdit->setText(m_newName);
-    m_lineEdit->setSelection(0, selectionLength);
-
-    topLayout->addWidget(editLabel);
-    topLayout->addWidget(m_lineEdit);
-
-    if (!m_renameOneItem) {
-        QSet<QString> extensions;
-        foreach (const KFileItem& item, m_items) {
-            QMimeDatabase db;
-            const QString extension = db.suffixForFileName(item.url().toDisplayString().toLower());
-
-            if (extensions.contains(extension)) {
-                m_allExtensionsDifferent = false;
-                break;
-            }
-
-            extensions.insert(extension);
-        }
-
-        QLabel* infoLabel = new QLabel(i18nc("@info", "# will be replaced by ascending numbers starting with:"), page);
-        mainLayout->addWidget(infoLabel);
-        m_spinBox = new QSpinBox(page);
-        m_spinBox->setMaximum(10000);
-        m_spinBox->setMinimum(0);
-        m_spinBox->setSingleStep(1);
-        m_spinBox->setValue(1);
-        m_spinBox->setDisplayIntegerBase(10);
-
-        QHBoxLayout* horizontalLayout = new QHBoxLayout(page);
-        horizontalLayout->setContentsMargins(0, 0, 0, 0);
-        horizontalLayout->addWidget(infoLabel);
-        horizontalLayout->addWidget(m_spinBox);
-
-        topLayout->addLayout(horizontalLayout);
-    }
-}
-
-RenameDialog::~RenameDialog()
-{
-}
-
-void RenameDialog::slotAccepted()
-{
-    QWidget* widget = parentWidget();
-    if (!widget) {
-        widget = this;
-    }
-
-    const QList<QUrl> srcList = m_items.urlList();
-    const QString newName = m_lineEdit->text();
-    KIO::FileUndoManager::CommandType cmdType;
-    KIO::Job *job = nullptr;
-    if (m_renameOneItem) {
-        Q_ASSERT(m_items.count() == 1);
-        cmdType = KIO::FileUndoManager::Rename;
-        const QUrl oldUrl = m_items.constFirst().url();
-        QUrl newUrl = oldUrl.adjusted(QUrl::RemoveFilename);
-        newUrl.setPath(newUrl.path() + KIO::encodeFileName(newName));
-        m_renamedItems << newUrl;
-        job = KIO::moveAs(oldUrl, newUrl, KIO::HideProgressInfo);
-    } else {
-        cmdType = KIO::FileUndoManager::BatchRename;
-        job = KIO::batchRename(srcList, newName, m_spinBox->value(), QLatin1Char('#'));
-        connect(qobject_cast<KIO::BatchRenameJob*>(job), &KIO::BatchRenameJob::fileRenamed, this, &RenameDialog::slotFileRenamed);
-    }
-
-    KJobWidgets::setWindow(job, widget);
-    const QUrl parentUrl = srcList.first().adjusted(QUrl::RemoveFilename | QUrl::StripTrailingSlash);
-    KIO::FileUndoManager::self()->recordJob(cmdType, srcList, parentUrl, job);
-
-    connect(job, &KJob::result, this, &RenameDialog::slotResult);
-    connect(job, &KJob::result, this, &QObject::deleteLater);
-
-    job->uiDelegate()->setAutoErrorHandlingEnabled(true);
-
-    accept();
-}
-
-void RenameDialog::slotTextChanged(const QString& newName)
-{
-    bool enable = !newName.isEmpty() && (newName != QLatin1String("..")) && (newName != QLatin1Char('.'));
-    if (enable && !m_renameOneItem) {
-        const int count = newName.count(QLatin1Char('#'));
-        if (count == 0) {
-            // Renaming multiple files without '#' will only work if all extensions are different.
-            enable = m_allExtensionsDifferent;
-        } else {
-            // Assure that the new name contains exactly one # (or a connected sequence of #'s)
-            const int first = newName.indexOf(QLatin1Char('#'));
-            const int last = newName.lastIndexOf(QLatin1Char('#'));
-            enable = (last - first + 1 == count);
-        }
-    }
-    m_okButton->setEnabled(enable);
-}
-
-void RenameDialog::slotFileRenamed(const QUrl &oldUrl, const QUrl &newUrl)
-{
-    Q_UNUSED(oldUrl)
-    m_renamedItems << newUrl;
-}
-
-void RenameDialog::slotResult(KJob *job)
-{
-    if (!job->error()) {
-        emit renamingFinished(m_renamedItems);
-    }
-}
-
-void RenameDialog::showEvent(QShowEvent* event)
-{
-    m_lineEdit->setFocus();
-
-    QDialog::showEvent(event);
-}
diff --git a/src/views/renamedialog.h b/src/views/renamedialog.h
deleted file mode 100644 (file)
index 08571cd..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/***************************************************************************
- *   Copyright (C) 2006-2010 by Peter Penz (peter.penz@gmx.at)             *
- *                                                                         *
- *   This program is free software; you can redistribute it and/or modify  *
- *   it under the terms of the GNU General Public License as published by  *
- *   the Free Software Foundation; either version 2 of the License, or     *
- *   (at your option) any later version.                                   *
- *                                                                         *
- *   This program is distributed in the hope that it will be useful,       *
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
- *   GNU General Public License for more details.                          *
- *                                                                         *
- *   You should have received a copy of the GNU General Public License     *
- *   along with this program; if not, write to the                         *
- *   Free Software Foundation, Inc.,                                       *
- *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA          *
- ***************************************************************************/
-
-#ifndef RENAMEDIALOG_H
-#define RENAMEDIALOG_H
-
-#include "dolphin_export.h"
-
-#include <KFileItem>
-
-#include <QDialog>
-#include <QString>
-
-class QLineEdit;
-class QSpinBox;
-class QPushButton;
-class KJob;
-/**
- * @brief Dialog for renaming a variable number of files.
- *
- * The dialog deletes itself when accepted or rejected.
- */
-class DOLPHIN_EXPORT RenameDialog : public QDialog
-{
-    Q_OBJECT
-
-public:
-    explicit RenameDialog(QWidget* parent, const KFileItemList& items);
-    ~RenameDialog() override;
-
-signals:
-    void renamingFinished(const QList<QUrl>& urls);
-
-private slots:
-    void slotAccepted();
-    void slotTextChanged(const QString& newName);
-    void slotFileRenamed(const QUrl& oldUrl, const QUrl& newUrl);
-    void slotResult(KJob* job);
-
-protected:
-    void showEvent(QShowEvent* event) override;
-
-private:
-    bool m_renameOneItem;
-    QList<QUrl> m_renamedItems;
-    QString m_newName;
-    QLineEdit* m_lineEdit;
-    KFileItemList m_items;
-    bool m_allExtensionsDifferent;
-    QSpinBox* m_spinBox;
-    QPushButton* m_okButton;
-};
-
-#endif