From b938764820487a7537612d89ba7896bc3fd3672d Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Tue, 25 Aug 2020 14:41:06 +0200 Subject: [PATCH] Utils: Simplify pathchooser validation Allow to set a default value for the PathChooser which will be used on the one hand as placeHolderText and on the other hand for the default validation if the underlying line edit has no text set. Change-Id: I49d2f773cf3933cb30b54ee6de82290b480e743d Reviewed-by: Eike Ziller --- src/libs/utils/pathchooser.cpp | 21 ++++++++++++++++----- src/libs/utils/pathchooser.h | 4 ++++ src/plugins/clangtools/settingswidget.cpp | 16 +--------------- 3 files changed, 21 insertions(+), 20 deletions(-) diff --git a/src/libs/utils/pathchooser.cpp b/src/libs/utils/pathchooser.cpp index b460c0ea57b..b3916630a1a 100644 --- a/src/libs/utils/pathchooser.cpp +++ b/src/libs/utils/pathchooser.cpp @@ -189,6 +189,7 @@ public: QString m_dialogTitleOverride; QString m_dialogFilter; QString m_initialBrowsePathOverride; + QString m_defaultValue; FilePath m_baseDirectory; Environment m_environment; BinaryVersionToolTipEventFilter *m_binaryVersionToolTipEventFilter = nullptr; @@ -521,6 +522,12 @@ void PathChooser::setAboutToShowContextMenuHandler(PathChooser::AboutToShowConte s_aboutToShowContextMenuHandler = handler; } +void PathChooser::setDefaultValue(const QString &defaultValue) +{ + d->m_defaultValue = defaultValue; + d->m_lineEdit->setPlaceholderText(defaultValue); +} + FancyLineEdit::ValidationFunction PathChooser::defaultValidationFunction() const { return std::bind(&PathChooser::validatePath, this, std::placeholders::_1, std::placeholders::_2); @@ -528,15 +535,19 @@ FancyLineEdit::ValidationFunction PathChooser::defaultValidationFunction() const bool PathChooser::validatePath(FancyLineEdit *edit, QString *errorMessage) const { - const QString path = edit->text(); - QString expandedPath = d->expandedPath(path); + QString path = edit->text(); if (path.isEmpty()) { - if (errorMessage) - *errorMessage = tr("The path must not be empty."); - return false; + if (!d->m_defaultValue.isEmpty()) { + path = d->m_defaultValue; + } else { + if (errorMessage) + *errorMessage = tr("The path must not be empty."); + return false; + } } + const QString expandedPath = d->expandedPath(path); if (expandedPath.isEmpty()) { if (errorMessage) *errorMessage = tr("The path \"%1\" expanded to an empty string.").arg(QDir::toNativeSeparators(path)); diff --git a/src/libs/utils/pathchooser.h b/src/libs/utils/pathchooser.h index cc864b48be1..b7320d6c5d3 100644 --- a/src/libs/utils/pathchooser.h +++ b/src/libs/utils/pathchooser.h @@ -153,6 +153,10 @@ public: // Deprecated. Use filePath() FilePath fileName() const { return filePath(); } + // this sets the placeHolderText to defaultValue and enables to use this as + // input value during validation if the real value is empty + // setting an empty QString will disable this and clear the placeHolderText + void setDefaultValue(const QString &defaultValue); private: bool validatePath(FancyLineEdit *edit, QString *errorMessage) const; // Returns overridden title or the one from diff --git a/src/plugins/clangtools/settingswidget.cpp b/src/plugins/clangtools/settingswidget.cpp index b2ef2846414..f4511c72e70 100644 --- a/src/plugins/clangtools/settingswidget.cpp +++ b/src/plugins/clangtools/settingswidget.cpp @@ -49,24 +49,10 @@ static void setupPathChooser(Utils::PathChooser *const chooser, const QString &historyCompleterId) { chooser->setPromptDialogTitle(promptDiaglogTitle); - chooser->lineEdit()->setPlaceholderText(placeHolderText); + chooser->setDefaultValue(placeHolderText); chooser->setPath(pathFromSettings); chooser->setExpectedKind(Utils::PathChooser::ExistingCommand); chooser->setHistoryCompleter(historyCompleterId); - chooser->setValidationFunction([chooser](Utils::FancyLineEdit *edit, QString *errorMessage) { - const QString currentFilePath = chooser->filePath().toString(); - Utils::PathChooser pc; - Utils::PathChooser *helperPathChooser; - if (currentFilePath.isEmpty()) { - pc.setExpectedKind(chooser->expectedKind()); - pc.setPath(edit->placeholderText()); - helperPathChooser = &pc; - } else { - helperPathChooser = chooser; - } - - return chooser->defaultValidationFunction()(helperPathChooser->lineEdit(), errorMessage); - }); } SettingsWidget *SettingsWidget::instance()