diff --git a/src/plugins/git/gitsubmiteditorwidget.cpp b/src/plugins/git/gitsubmiteditorwidget.cpp index bf2cdf745ce..530a688e831 100644 --- a/src/plugins/git/gitsubmiteditorwidget.cpp +++ b/src/plugins/git/gitsubmiteditorwidget.cpp @@ -152,13 +152,24 @@ void GitSubmitEditorWidget::setPanelData(const GitSubmitEditorPanelData &data) authorInformationChanged(); } -bool GitSubmitEditorWidget::canSubmit() const +bool GitSubmitEditorWidget::canSubmit(QString *whyNot) const { - if (m_gitSubmitPanelUi.invalidAuthorLabel->isVisible() - || m_gitSubmitPanelUi.invalidEmailLabel->isVisible() - || m_hasUnmerged) + if (m_gitSubmitPanelUi.invalidAuthorLabel->isVisible()) { + if (whyNot) + *whyNot = tr("Invalid author"); return false; - return SubmitEditorWidget::canSubmit(); + } + if (m_gitSubmitPanelUi.invalidEmailLabel->isVisible()) { + if (whyNot) + *whyNot = tr("Invalid email"); + return false; + } + if (m_hasUnmerged) { + if (whyNot) + *whyNot = tr("Unresolved merge conflicts"); + return false; + } + return SubmitEditorWidget::canSubmit(whyNot); } QString GitSubmitEditorWidget::cleanupDescription(const QString &input) const diff --git a/src/plugins/git/gitsubmiteditorwidget.h b/src/plugins/git/gitsubmiteditorwidget.h index 42d895d7f0b..1387d6e341a 100644 --- a/src/plugins/git/gitsubmiteditorwidget.h +++ b/src/plugins/git/gitsubmiteditorwidget.h @@ -72,7 +72,7 @@ public: void refreshLog(const QString &repository); protected: - bool canSubmit() const override; + bool canSubmit(QString *whyNot) const override; QString cleanupDescription(const QString &) const override; QString commitName() const override; diff --git a/src/plugins/vcsbase/submiteditorwidget.cpp b/src/plugins/vcsbase/submiteditorwidget.cpp index dbb1324ed8f..e1e69d21e18 100644 --- a/src/plugins/vcsbase/submiteditorwidget.cpp +++ b/src/plugins/vcsbase/submiteditorwidget.cpp @@ -532,14 +532,23 @@ void SubmitEditorWidget::descriptionTextChanged() updateSubmitAction(); } -bool SubmitEditorWidget::canSubmit() const +bool SubmitEditorWidget::canSubmit(QString *whyNot) const { - if (d->m_updateInProgress) + if (d->m_updateInProgress) { + if (whyNot) + *whyNot = tr("Update in progress"); return false; - if (isDescriptionMandatory() && d->m_description.trimmed().isEmpty()) + } + if (isDescriptionMandatory() && d->m_description.trimmed().isEmpty()) { + if (whyNot) + *whyNot = tr("Description is empty"); return false; + } const unsigned checkedCount = checkedFilesCount(); - return d->m_emptyFileListEnabled || checkedCount > 0; + const bool res = d->m_emptyFileListEnabled || checkedCount > 0; + if (!res && whyNot) + *whyNot = tr("No files checked"); + return res; } void SubmitEditorWidget::setUpdateInProgress(bool value) diff --git a/src/plugins/vcsbase/submiteditorwidget.h b/src/plugins/vcsbase/submiteditorwidget.h index da73f2d96d0..651775fe1b4 100644 --- a/src/plugins/vcsbase/submiteditorwidget.h +++ b/src/plugins/vcsbase/submiteditorwidget.h @@ -94,7 +94,7 @@ public: void addSubmitFieldWidget(SubmitFieldWidget *f); QList submitFieldWidgets() const; - virtual bool canSubmit() const; + virtual bool canSubmit(QString *whyNot = nullptr) const; void setUpdateInProgress(bool value); bool updateInProgress() const; diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp index 43a82eddcfc..91a6932a460 100644 --- a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp +++ b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp @@ -546,7 +546,7 @@ VcsBaseSubmitEditor::PromptSubmitResult QWidget *parent = Core::ICore::mainWindow(); // Pop up a message depending on whether the check succeeded and the // user wants to be prompted - bool canCommit = checkSubmitMessage(&errorMessage) && submitWidget->canSubmit(); + bool canCommit = checkSubmitMessage(&errorMessage) && submitWidget->canSubmit(&errorMessage); if (canCommit) { // Check ok, do prompt? if (prompt) {