X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/3b4d05893b4023338d8484dc5c6812bbe0fb0ceb..862ceee323ad3b474ce9de11eefbddd99c528fac:/src/renamedialog.cpp diff --git a/src/renamedialog.cpp b/src/renamedialog.cpp index c3fe9d722..f8f549ddf 100644 --- a/src/renamedialog.cpp +++ b/src/renamedialog.cpp @@ -22,8 +22,8 @@ #include #include -#include -#include +#include +#include RenameDialog::RenameDialog(const KUrl::List& items) : KDialog(), @@ -37,7 +37,7 @@ RenameDialog::RenameDialog(const KUrl::List& items) : m_renameOneItem = (itemCount == 1); setCaption(m_renameOneItem ? i18n("Rename Item") : i18n("Rename Items")); - setButtons(Ok|Cancel); + setButtons(Ok | Cancel); setDefaultButton(Ok); setButtonGuiItem(Ok, KGuiItem(i18n("Rename"), "dialog-apply")); @@ -54,24 +54,22 @@ RenameDialog::RenameDialog(const KUrl::List& items) : m_newName = url.fileName(); editLabel = new QLabel(i18n("Rename the item '%1' to:", m_newName), page); - } - else { + } else { m_newName = i18n("New name #"); editLabel = new QLabel(i18n("Rename the %1 selected items to:", itemCount), page); } m_lineEdit = new KLineEdit(page); - QString postfix(items[0].prettyUrl().section('.',1)); - if (postfix.length() > 0) { - // The first item seems to have a postfix (e. g. 'jpg' or 'txt'). Now - // check whether all other items have the same postfix. If this is the - // case, add this postfix to the name suggestion. - postfix.insert(0, '.'); + QString extension = extensionString(items[0].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 + // case, add this extension to the name suggestion. for (int i = 1; i < itemCount; ++i) { - if (!items[i].prettyUrl().contains(postfix)) { - // at least one item does not have the same postfix - postfix.truncate(0); + if (!items[i].prettyUrl().contains(extension)) { + // at least one item does not have the same extension + extension.truncate(0); break; } } @@ -82,13 +80,12 @@ RenameDialog::RenameDialog(const KUrl::List& items) : --selectionLength; // don't select the # character } - const int postfixLength = postfix.length(); - if (postfixLength > 0) { + const int extensionLength = extension.length(); + if (extensionLength > 0) { if (m_renameOneItem) { - selectionLength -= postfixLength; - } - else { - m_newName.append(postfix); + selectionLength -= extensionLength; + } else { + m_newName.append(extension); } } @@ -106,8 +103,7 @@ RenameDialog::RenameDialog(const KUrl::List& items) : } RenameDialog::~RenameDialog() -{ -} +{} void RenameDialog::slotButtonClicked(int button) { @@ -115,8 +111,7 @@ void RenameDialog::slotButtonClicked(int button) m_newName = m_lineEdit->text(); if (m_newName.isEmpty()) { m_errorString = i18n("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.contains('#') != 1) { m_newName.truncate(0); m_errorString = i18n("The name must contain exactly one # character."); } @@ -125,4 +120,30 @@ void RenameDialog::slotButtonClicked(int button) KDialog::slotButtonClicked(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 int size = strings.size(); + for (int i = 1; i < size; ++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; + } + if (foundExtension) { + extension += '.' + str; + } + } + + return extension; +} + #include "renamedialog.moc"