X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/7eef5ebec2ceaebb4088629093ecd3f0c2635816..bd925ea49a7e4e7c6e652f4529dcd0c4e25fd19a:/src/renamedialog.cpp diff --git a/src/renamedialog.cpp b/src/renamedialog.cpp index d65330cdd..3e9b39327 100644 --- a/src/renamedialog.cpp +++ b/src/renamedialog.cpp @@ -19,14 +19,15 @@ #include "renamedialog.h" +#include #include #include #include #include -RenameDialog::RenameDialog(const KUrl::List& items) : - KDialog(), +RenameDialog::RenameDialog(QWidget *parent, const KFileItemList& items) : + KDialog(parent), m_renameOneItem(false) { const QSize minSize = minimumSize(); @@ -42,7 +43,7 @@ RenameDialog::RenameDialog(const KUrl::List& items) : setButtons(Ok | Cancel); setDefaultButton(Ok); - setButtonGuiItem(Ok, KGuiItem(i18nc("@action:button", "Rename"), "dialog-apply")); + setButtonGuiItem(Ok, KGuiItem(i18nc("@action:button", "Rename"), "dialog-ok-apply")); QWidget* page = new QWidget(this); setMainWidget(page); @@ -52,8 +53,7 @@ RenameDialog::RenameDialog(const KUrl::List& items) : QLabel* editLabel = 0; if (m_renameOneItem) { - const KUrl& url = items.first(); - m_newName = url.fileName(); + m_newName = items.first().name(); editLabel = new QLabel(i18nc("@label:textbox", "Rename the item %1 to:", m_newName), page); } else { @@ -65,13 +65,13 @@ RenameDialog::RenameDialog(const KUrl::List& items) : } m_lineEdit = new KLineEdit(page); - QString extension = extensionString(items[0].prettyUrl()); + QString extension = extensionString(items[0].url().prettyUrl()); if (extension.length() > 0) { // The first item seems to have a extension (e. g. '.jpg' or '.txt'). Now - // check whether all other items have the same extension. If this is the + // check whether all other URLs have the same extension. If this is the // case, add this extension to the name suggestion. for (int i = 1; i < itemCount; ++i) { - if (!items[i].prettyUrl().contains(extension)) { + if (!items[i].url().prettyUrl().contains(extension)) { // at least one item does not have the same extension extension.truncate(0); break; @@ -116,9 +116,9 @@ void RenameDialog::slotButtonClicked(int button) if (m_newName.isEmpty()) { m_errorString = i18nc("@info:status", "The new name is empty. A name with at least one character must be entered."); - } else if (!m_renameOneItem && m_newName.contains('#') != 1) { + } else if (!m_renameOneItem && (m_newName.count('#') == 0)) { m_newName.truncate(0); - m_errorString = i18nc("@info:status", "The name must contain exactly one # character."); + m_errorString = i18nc("@info:status", "The name must contain at least one # character."); } } @@ -128,24 +128,30 @@ void RenameDialog::slotButtonClicked(int button) QString RenameDialog::extensionString(const QString& name) { QString extension; - bool foundExtension = false; // true if at least one valid file extension - // like "gif", "txt", ... has been found - QStringList strings = name.split('.'); + const QStringList strings = name.split('.'); const int size = strings.size(); - for (int i = 1; i < size; ++i) { + for (int i = size - 1; i >= 0; --i) { const QString& str = strings.at(i); - if (!foundExtension) { - // Sub strings like "9", "12", "99", ... which contain only - // numbers don't count as extension. Usually they are version - // numbers like in "cmake-2.4.5". - bool ok = false; - str.toInt(&ok); - foundExtension = !ok; + + // Sub strings like "9", "12", "99", ... which contain only + // numbers don't count as extension. Usually they are version + // numbers like in "cmake-2.4.5". + bool isNumeric = false; + str.toInt(&isNumeric); + if (isNumeric) { + break; } - if (foundExtension) { - extension += '.' + str; + + // Extensions may not contain a space and the maximum length + // should not exceed 4 characters. This prevents that strings like + // "Open office.org writer documentation.pdf" get ".org writer documentation.pdf" + // as extension. + if (str.contains(' ') || (str.length() > 4)) { + break; } + + extension.insert(0, '.' + str); } return extension;