QmlDesigner: Fix project tree widget renaming

When renaming an item in the project tree widget which has concatenated
filename extensions like *.ui.qml the selection in the LineEdit will
reach till the last dot.

* Extend FilePath suffix and completeBaseName function so they will
  treat the suffix *.ui.qml as one
* Make use of the function in ProjectTreeWidget::editCurrentItem
* Replace QFileInfo::suffix with Utils::FilePath::suffix in
  FlatModel::setData

Task-number: QDS-2713
Change-Id: I30d0e6d87a7512d42fd3d40b2282b94e79b43684
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Henning Gruendl
2021-09-06 14:44:02 +02:00
committed by Henning Gründl
parent 3930679f27
commit a09ec2e0e9
3 changed files with 10 additions and 5 deletions

View File

@@ -528,22 +528,28 @@ QString FilePath::baseName() const
/// \returns the complete base name of the file without the path. /// \returns the complete base name of the file without the path.
/// ///
/// The complete base name consists of all characters in the file up to /// The complete base name consists of all characters in the file up to
/// (but not including) the last '.' character /// (but not including) the last '.' character. In case of ".ui.qml"
/// it will be treated as one suffix.
QString FilePath::completeBaseName() const QString FilePath::completeBaseName() const
{ {
const QString &name = fileName(); const QString &name = fileName();
if (name.endsWith(".ui.qml"))
return name.left(name.length() - QString(".ui.qml").length());
return name.left(name.lastIndexOf('.')); return name.left(name.lastIndexOf('.'));
} }
/// \returns the suffix (extension) of the file. /// \returns the suffix (extension) of the file.
/// ///
/// The suffix consists of all characters in the file after /// The suffix consists of all characters in the file after
/// (but not including) the last '.'. /// (but not including) the last '.'. In case of ".ui.qml" it will
/// be treated as one suffix.
QString FilePath::suffix() const QString FilePath::suffix() const
{ {
const QString &name = fileName(); const QString &name = fileName();
if (name.endsWith(".ui.qml"))
return "ui.qml";
const int index = name.lastIndexOf('.'); const int index = name.lastIndexOf('.');
if (index >= 0) if (index >= 0)
return name.mid(index + 1); return name.mid(index + 1);

View File

@@ -305,7 +305,7 @@ bool FlatModel::setData(const QModelIndex &index, const QVariant &value, int rol
// The base name of the file was changed. Go look for other files with the same base name // The base name of the file was changed. Go look for other files with the same base name
// and offer to rename them as well. // and offer to rename them as well.
if (orgFilePath != newFilePath && orgFileInfo.suffix() == newFilePath.suffix()) { if (orgFilePath != newFilePath && orgFilePath.suffix() == newFilePath.suffix()) {
const QList<Node *> candidateNodes = ProjectTree::siblingsWithSameBaseName(node); const QList<Node *> candidateNodes = ProjectTree::siblingsWithSameBaseName(node);
if (!candidateNodes.isEmpty()) { if (!candidateNodes.isEmpty()) {
const QMessageBox::StandardButton reply = QMessageBox::question( const QMessageBox::StandardButton reply = QMessageBox::question(

View File

@@ -473,8 +473,7 @@ void ProjectTreeWidget::editCurrentItem()
if (!editor) if (!editor)
return; return;
const QString text = editor->text(); const int dotIndex = Utils::FilePath::fromString(editor->text()).completeBaseName().length();
const int dotIndex = text.lastIndexOf('.');
if (dotIndex > 0) if (dotIndex > 0)
editor->setSelection(0, dotIndex); editor->setSelection(0, dotIndex);
} }