blob: cf4c8e5e48e040947a771722547e0a7ac085c852 [file]
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
file LICENSE.rst or https://cmake.org/licensing for details. */
#include "WarningMessagesDialog.h"
#include "cm/string_view"
#include <QButtonGroup>
#include <QHeaderView>
#include <QRadioButton>
#include <QToolButton>
#include <QTreeWidget>
#include <QTreeWidgetItem>
#include "cmDiagnostics.h"
#include "QCMake.h"
#include "QCMakeSizeType.h"
WarningMessagesDialog::WarningMessagesDialog(QWidget* prnt, QCMake* instance)
: QDialog(prnt)
, cmakeInstance(instance)
{
this->setupUi(this);
this->setInitialValues();
this->setupSignals();
}
void WarningMessagesDialog::setInitialValues()
{
QHeaderView* const header = this->treeWidget->header();
header->setSectionResizeMode(0, QHeaderView::Stretch);
header->setSectionResizeMode(1, QHeaderView::ResizeToContents);
header->setSectionResizeMode(2, QHeaderView::ResizeToContents);
header->setSectionResizeMode(3, QHeaderView::ResizeToContents);
std::map<unsigned, QTreeWidgetItem*> items = {
{ 0, this->treeWidget->invisibleRootItem() },
};
for (unsigned i = 1; i < cmDiagnostics::CategoryCount; ++i) {
auto const category = static_cast<cmDiagnosticCategory>(i);
cm::string_view const cname =
cmDiagnostics::GetCategoryString(category).substr(4);
QTreeWidgetItem* const parent =
items[cmDiagnostics::CategoryInfo[category].Parent];
QTreeWidgetItem* const item = new QTreeWidgetItem(parent);
item->setText(0,
QString::fromUtf8(cname.data(),
static_cast<cm_qsizetype>(cname.size())));
auto makeButton = [](QString const& text) {
QToolButton* const button = new QToolButton;
button->setCheckable(true);
button->setText(text);
return button;
};
QAbstractButton* const ignore = makeButton(tr("Ignore"));
QAbstractButton* const warn = makeButton(tr("Warn"));
QAbstractButton* const error = makeButton(tr("Error"));
QButtonGroup* const buttonGroup = new QButtonGroup(treeWidget);
buttonGroup->addButton(ignore, cmDiagnosticAction::Ignore);
buttonGroup->addButton(warn, cmDiagnosticAction::Warn);
buttonGroup->addButton(error, cmDiagnosticAction::SendError);
buttonGroup->setExclusive(true);
this->buttons.emplace(i, buttonGroup);
treeWidget->setItemWidget(item, 1, ignore);
treeWidget->setItemWidget(item, 2, warn);
treeWidget->setItemWidget(item, 3, error);
cmDiagnosticAction const action =
this->cmakeInstance->getDiagnosticAction(category);
switch (action) {
case cmDiagnostics::SendError:
case cmDiagnostics::FatalError:
error->setChecked(true);
break;
case cmDiagnostics::Warn:
warn->setChecked(true);
break;
default:
ignore->setChecked(true);
break;
}
items.emplace(i, item);
}
for (auto const& ii : items) {
ii.second->setExpanded(true);
}
}
void WarningMessagesDialog::setupSignals()
{
QObject::connect(this->buttonBox, &QDialogButtonBox::accepted, this,
&WarningMessagesDialog::doAccept);
}
void WarningMessagesDialog::doAccept()
{
for (auto const& ii : this->buttons) {
this->cmakeInstance->setDiagnosticAction(
static_cast<cmDiagnosticCategory>(ii.first),
static_cast<cmDiagnosticAction>(ii.second->checkedId()));
}
}