Browse Source

Fix validation text doesn't update on mouse click selection

adaptive-webui-19844
Chocobo1 2 years ago
parent
commit
a9906e5d2a
No known key found for this signature in database
GPG Key ID: 210D9C873253A68C
  1. 64
      src/gui/fspathedit_p.cpp
  2. 4
      src/gui/fspathedit_p.h

64
src/gui/fspathedit_p.cpp

@ -162,6 +162,8 @@ Private::FileLineEdit::FileLineEdit(QWidget *parent) @@ -162,6 +162,8 @@ Private::FileLineEdit::FileLineEdit(QWidget *parent)
m_completer->setModel(m_completerModel);
setCompleter(m_completer);
connect(this, &QLineEdit::textChanged, this, &FileLineEdit::validateText);
}
Private::FileLineEdit::~FileLineEdit()
@ -215,35 +217,6 @@ void Private::FileLineEdit::keyPressEvent(QKeyEvent *e) @@ -215,35 +217,6 @@ void Private::FileLineEdit::keyPressEvent(QKeyEvent *e)
m_completerModel->setRootPath(Path(text()).data());
showCompletionPopup();
}
const auto *validator = qobject_cast<const FileSystemPathValidator *>(this->validator());
if (validator)
{
const FileSystemPathValidator::TestResult lastTestResult = validator->lastTestResult();
const QValidator::State lastState = validator->lastValidationState();
if (lastTestResult == FileSystemPathValidator::TestResult::OK)
{
delete m_warningAction;
m_warningAction = nullptr;
}
else
{
if (!m_warningAction)
{
m_warningAction = new QAction(this);
addAction(m_warningAction, QLineEdit::TrailingPosition);
}
}
if (m_warningAction)
{
if (lastState == QValidator::Invalid)
m_warningAction->setIcon(style()->standardIcon(QStyle::SP_MessageBoxCritical));
else if (lastState == QValidator::Intermediate)
m_warningAction->setIcon(style()->standardIcon(QStyle::SP_MessageBoxInformation));
m_warningAction->setToolTip(warningText(lastTestResult));
}
}
}
void Private::FileLineEdit::contextMenuEvent(QContextMenuEvent *event)
@ -266,6 +239,39 @@ void Private::FileLineEdit::showCompletionPopup() @@ -266,6 +239,39 @@ void Private::FileLineEdit::showCompletionPopup()
m_completer->complete();
}
void Private::FileLineEdit::validateText()
{
const auto *validator = qobject_cast<const FileSystemPathValidator *>(this->validator());
if (!validator)
return;
const FileSystemPathValidator::TestResult lastTestResult = validator->lastTestResult();
const QValidator::State lastState = validator->lastValidationState();
if (lastTestResult == FileSystemPathValidator::TestResult::OK)
{
delete m_warningAction;
m_warningAction = nullptr;
}
else
{
if (!m_warningAction)
{
m_warningAction = new QAction(this);
addAction(m_warningAction, QLineEdit::TrailingPosition);
}
}
if (m_warningAction)
{
if (lastState == QValidator::Invalid)
m_warningAction->setIcon(style()->standardIcon(QStyle::SP_MessageBoxCritical));
else if (lastState == QValidator::Intermediate)
m_warningAction->setIcon(style()->standardIcon(QStyle::SP_MessageBoxInformation));
m_warningAction->setToolTip(warningText(lastTestResult));
}
}
QString Private::FileLineEdit::warningText(const FileSystemPathValidator::TestResult result)
{
using TestResult = FileSystemPathValidator::TestResult;

4
src/gui/fspathedit_p.h

@ -130,8 +130,10 @@ namespace Private @@ -130,8 +130,10 @@ namespace Private
void contextMenuEvent(QContextMenuEvent *event) override;
private:
static QString warningText(FileSystemPathValidator::TestResult result);
void showCompletionPopup();
void validateText();
static QString warningText(FileSystemPathValidator::TestResult result);
QFileSystemModel *m_completerModel = nullptr;
QCompleter *m_completer = nullptr;

Loading…
Cancel
Save