From: Peter Penz Date: Fri, 18 May 2007 20:52:48 +0000 (+0000) Subject: When renaming items in Dolphin, only the name should be selected, not the extensions... X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/d8d894d4d89f7b645ba4334b8be5f6d7c7811b6d When renaming items in Dolphin, only the name should be selected, not the extensions like ".gif", ".txt" etc. The inconvenient part is if the item name is something like "cmake-2.4.5", where the version number does not count as extension (-> the whole string should be selected in this case). This patch should fix the problem... Examples (name -> selected string): "Image.gif" -> "Image" "package.tar.gz" -> "package" "cmake-2.4.5" -> "cmake-2.4.5" "Image.1.12.gif" -> "Image.1.12" "Image.tar.1.12.gz" -> "Image" svn path=/trunk/KDE/kdebase/apps/; revision=666118 --- diff --git a/src/renamedialog.cpp b/src/renamedialog.cpp index 51468f7a2..26aaa73ef 100644 --- a/src/renamedialog.cpp +++ b/src/renamedialog.cpp @@ -61,16 +61,15 @@ RenameDialog::RenameDialog(const KUrl::List& items) : } 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; } } @@ -81,12 +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; + selectionLength -= extensionLength; } else { - m_newName.append(postfix); + m_newName.append(extension); } } @@ -121,4 +120,31 @@ void RenameDialog::slotButtonClicked(int button) KDialog::slotButtonClicked(button); } +QString RenameDialog::extensionString(const QString& name) const +{ + 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); + kDebug() << str << endl; + 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" diff --git a/src/renamedialog.h b/src/renamedialog.h index 9ac286621..ec19e2697 100644 --- a/src/renamedialog.h +++ b/src/renamedialog.h @@ -78,6 +78,22 @@ public: protected slots: virtual void slotButtonClicked(int button); +private: + /** + * Returns the extension string for a filename, which contains all + * file extensions. Version numbers like in "cmake-2.4.5" don't count + * as file extension. If the version numbers follow after a valid extension, they + * are part of the extension string. + * + * Examples (name -> extension string): + * "Image.gif" -> ".gif" + * "package.tar.gz" -> ".tar.gz" + * "cmake-2.4.5" -> "" + * "Image.1.12.gif" -> ".gif" + * "Image.tar.1.12.gz" -> ".tar.1.12.gz" + */ + QString extensionString(const QString& name) const; + private: bool m_renameOneItem; KLineEdit* m_lineEdit;