2022-08-19 15:59:36 +02:00
|
|
|
// Copyright (C) 2016 The Qt Company Ltd.
|
2022-12-21 10:12:09 +01:00
|
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
2016-01-15 14:57:40 +01:00
|
|
|
|
2015-05-18 22:47:20 +03:00
|
|
|
#include "todoprojectsettingswidget.h"
|
2022-07-12 11:24:51 +02:00
|
|
|
|
2015-05-18 22:47:20 +03:00
|
|
|
#include "constants.h"
|
2022-07-12 12:52:55 +02:00
|
|
|
#include "todotr.h"
|
2015-05-18 22:47:20 +03:00
|
|
|
|
|
|
|
|
#include <projectexplorer/project.h>
|
|
|
|
|
|
2022-07-12 11:24:51 +02:00
|
|
|
#include <utils/layoutbuilder.h>
|
|
|
|
|
|
|
|
|
|
#include <QListWidget>
|
|
|
|
|
#include <QPushButton>
|
|
|
|
|
|
|
|
|
|
namespace Todo {
|
|
|
|
|
namespace Internal {
|
|
|
|
|
|
2016-05-15 18:49:22 +02:00
|
|
|
static QString excludePlaceholder()
|
|
|
|
|
{
|
2022-07-12 12:52:55 +02:00
|
|
|
return Tr::tr("<Enter regular expression to exclude>");
|
2016-05-15 18:49:22 +02:00
|
|
|
}
|
|
|
|
|
|
2022-07-12 11:24:51 +02:00
|
|
|
TodoProjectSettingsWidget::TodoProjectSettingsWidget(ProjectExplorer::Project *project)
|
|
|
|
|
: m_project(project)
|
2015-05-18 22:47:20 +03:00
|
|
|
{
|
2022-07-12 11:24:51 +02:00
|
|
|
m_excludedPatternsList = new QListWidget;
|
|
|
|
|
m_excludedPatternsList->setSortingEnabled(true);
|
2022-07-12 12:52:55 +02:00
|
|
|
m_excludedPatternsList->setToolTip(Tr::tr("Regular expressions for file paths to be excluded from scanning."));
|
2022-07-12 11:24:51 +02:00
|
|
|
|
2022-07-12 12:52:55 +02:00
|
|
|
m_removeExcludedPatternButton = new QPushButton(Tr::tr("Remove"));
|
2022-07-12 11:24:51 +02:00
|
|
|
|
2022-07-12 12:52:55 +02:00
|
|
|
auto addExcludedPatternButton = new QPushButton(Tr::tr("Add"));
|
2022-07-12 11:24:51 +02:00
|
|
|
|
2023-04-25 10:15:07 +02:00
|
|
|
using namespace Layouting;
|
2022-07-12 11:24:51 +02:00
|
|
|
|
|
|
|
|
Column {
|
|
|
|
|
Group {
|
2022-07-26 13:46:27 +02:00
|
|
|
title(Tr::tr("Excluded Files")),
|
2022-07-12 11:24:51 +02:00
|
|
|
Row {
|
|
|
|
|
m_excludedPatternsList,
|
|
|
|
|
Column {
|
|
|
|
|
addExcludedPatternButton,
|
|
|
|
|
m_removeExcludedPatternButton,
|
2022-07-22 18:54:04 +02:00
|
|
|
st
|
2022-07-12 11:24:51 +02:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}.attachTo(this);
|
2015-05-18 22:47:20 +03:00
|
|
|
|
|
|
|
|
setExcludedPatternsButtonsEnabled();
|
2022-07-13 09:04:49 +02:00
|
|
|
setGlobalSettingsId(Constants::TODO_SETTINGS);
|
2022-07-20 11:53:36 +02:00
|
|
|
connect(addExcludedPatternButton,
|
|
|
|
|
&QPushButton::clicked,
|
|
|
|
|
this,
|
|
|
|
|
&TodoProjectSettingsWidget::addExcludedPatternButtonClicked);
|
2022-07-12 11:24:51 +02:00
|
|
|
connect(m_removeExcludedPatternButton, &QPushButton::clicked,
|
2015-05-18 22:47:20 +03:00
|
|
|
this, &TodoProjectSettingsWidget::removeExcludedPatternButtonClicked);
|
2022-07-12 11:24:51 +02:00
|
|
|
connect(m_excludedPatternsList, &QListWidget::itemChanged,
|
2015-05-18 22:47:20 +03:00
|
|
|
this, &TodoProjectSettingsWidget::excludedPatternChanged, Qt::QueuedConnection);
|
2022-07-12 11:24:51 +02:00
|
|
|
connect(m_excludedPatternsList, &QListWidget::itemSelectionChanged,
|
2016-06-05 22:34:47 +03:00
|
|
|
this, &TodoProjectSettingsWidget::setExcludedPatternsButtonsEnabled);
|
2015-05-18 22:47:20 +03:00
|
|
|
|
|
|
|
|
loadSettings();
|
|
|
|
|
}
|
|
|
|
|
|
2022-07-12 11:24:51 +02:00
|
|
|
TodoProjectSettingsWidget::~TodoProjectSettingsWidget() = default;
|
2015-05-18 22:47:20 +03:00
|
|
|
|
|
|
|
|
QListWidgetItem *TodoProjectSettingsWidget::addToExcludedPatternsList(const QString &pattern)
|
|
|
|
|
{
|
2018-12-10 00:19:56 +01:00
|
|
|
auto item = new QListWidgetItem(pattern);
|
2015-05-18 22:47:20 +03:00
|
|
|
item->setFlags(item->flags() | Qt::ItemIsEditable);
|
|
|
|
|
prepareItem(item);
|
2022-07-12 11:24:51 +02:00
|
|
|
m_excludedPatternsList->addItem(item);
|
2015-05-18 22:47:20 +03:00
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TodoProjectSettingsWidget::loadSettings()
|
|
|
|
|
{
|
2017-10-01 14:26:10 +02:00
|
|
|
QVariant s = m_project->namedSettings(Constants::SETTINGS_NAME_KEY);
|
2015-05-18 22:47:20 +03:00
|
|
|
QVariantMap settings = s.toMap();
|
2022-07-12 11:24:51 +02:00
|
|
|
m_excludedPatternsList->clear();
|
2017-10-01 14:26:10 +02:00
|
|
|
for (const QVariant &pattern : settings[Constants::EXCLUDES_LIST_KEY].toList())
|
2015-05-18 22:47:20 +03:00
|
|
|
addToExcludedPatternsList(pattern.toString());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TodoProjectSettingsWidget::saveSettings()
|
|
|
|
|
{
|
|
|
|
|
QVariantMap settings;
|
|
|
|
|
QVariantList excludes;
|
|
|
|
|
|
2022-07-12 11:24:51 +02:00
|
|
|
for (int i = 0; i < m_excludedPatternsList->count(); ++i)
|
|
|
|
|
excludes << m_excludedPatternsList->item(i)->text();
|
2015-05-18 22:47:20 +03:00
|
|
|
|
2017-10-01 14:26:10 +02:00
|
|
|
settings[Constants::EXCLUDES_LIST_KEY] = excludes;
|
2015-05-18 22:47:20 +03:00
|
|
|
|
2017-10-01 14:26:10 +02:00
|
|
|
m_project->setNamedSettings(Constants::SETTINGS_NAME_KEY, settings);
|
2015-05-18 22:47:20 +03:00
|
|
|
emit projectSettingsChanged();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TodoProjectSettingsWidget::prepareItem(QListWidgetItem *item) const
|
|
|
|
|
{
|
2020-06-16 07:52:56 +02:00
|
|
|
if (QRegularExpression(item->text()).isValid())
|
2022-07-12 11:24:51 +02:00
|
|
|
item->setForeground(QBrush(m_excludedPatternsList->palette().color(QPalette::Active, QPalette::Text)));
|
2015-05-18 22:47:20 +03:00
|
|
|
else
|
|
|
|
|
item->setForeground(QBrush(Qt::red));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TodoProjectSettingsWidget::addExcludedPatternButtonClicked()
|
|
|
|
|
{
|
2022-07-12 11:24:51 +02:00
|
|
|
if (!m_excludedPatternsList->findItems(excludePlaceholder(), Qt::MatchFixedString).isEmpty())
|
2015-05-18 22:47:20 +03:00
|
|
|
return;
|
2022-07-12 11:24:51 +02:00
|
|
|
m_excludedPatternsList->editItem(addToExcludedPatternsList(excludePlaceholder()));
|
2015-05-18 22:47:20 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TodoProjectSettingsWidget::removeExcludedPatternButtonClicked()
|
|
|
|
|
{
|
2022-07-12 11:24:51 +02:00
|
|
|
delete m_excludedPatternsList->takeItem(m_excludedPatternsList->currentRow());
|
2015-05-18 22:47:20 +03:00
|
|
|
saveSettings();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TodoProjectSettingsWidget::setExcludedPatternsButtonsEnabled()
|
|
|
|
|
{
|
2022-07-12 11:24:51 +02:00
|
|
|
const bool isSomethingSelected = !m_excludedPatternsList->selectedItems().isEmpty();
|
|
|
|
|
m_removeExcludedPatternButton->setEnabled(isSomethingSelected);
|
2015-05-18 22:47:20 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TodoProjectSettingsWidget::excludedPatternChanged(QListWidgetItem *item)
|
|
|
|
|
{
|
2016-05-15 18:49:22 +02:00
|
|
|
if (item->text().isEmpty() || item->text() == excludePlaceholder()) {
|
2022-07-12 11:24:51 +02:00
|
|
|
m_excludedPatternsList->removeItemWidget(item);
|
2015-05-18 22:47:20 +03:00
|
|
|
delete item;
|
|
|
|
|
} else {
|
|
|
|
|
prepareItem(item);
|
|
|
|
|
}
|
|
|
|
|
saveSettings();
|
2022-07-12 11:24:51 +02:00
|
|
|
m_excludedPatternsList->setCurrentItem(nullptr);
|
2015-05-18 22:47:20 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} // namespace Internal
|
|
|
|
|
} // namespace Todo
|