MCPcopy Create free account
hub / github.com/KDE/kdevelop / ProjectFilterConfigPage

Method ProjectFilterConfigPage

plugins/projectfilter/projectfilterconfigpage.cpp:26–82  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

24using namespace KDevelop;
25
26ProjectFilterConfigPage::ProjectFilterConfigPage(ProjectFilterProvider* provider, const ProjectConfigOptions& options, QWidget* parent)
27 : ProjectConfigPage<ProjectFilterSettings>(provider, options, parent)
28 , m_model(new FilterModel(this))
29 , m_projectFilterProvider(provider)
30 , m_ui(new Ui::ProjectFilterSettings)
31{
32 m_ui->setupUi(this);
33
34 m_ui->messageWidget->hide();
35
36 m_ui->filters->setSelectionMode(QAbstractItemView::SingleSelection);
37 m_ui->filters->setModel(m_model);
38 m_ui->filters->setRootIsDecorated(false);
39 m_ui->filters->header()->setSectionResizeMode(FilterModel::Pattern, QHeaderView::Stretch);
40 m_ui->filters->header()->setSectionResizeMode(FilterModel::Targets, QHeaderView::ResizeToContents);
41 m_ui->filters->header()->setSectionResizeMode(FilterModel::Inclusive, QHeaderView::ResizeToContents);
42 m_ui->filters->setItemDelegateForColumn(FilterModel::Targets,
43 new ComboBoxDelegate(QVector<ComboBoxDelegate::Item>{
44 {i18nc("@item", "Files"), static_cast<int>(Filter::Files)},
45 {i18nc("@item", "Folders"), static_cast<int>(Filter::Folders)},
46 {i18nc("@item", "Files and Folders"), static_cast<int>(Filter::Folders | Filter::Files)}}
47 , this));
48 m_ui->filters->setItemDelegateForColumn(FilterModel::Inclusive,
49 new ComboBoxDelegate(QVector<ComboBoxDelegate::Item>{
50 {i18nc("@item", "Exclude"), false},
51 {i18nc("@item", "Include"), true}}
52 , this));
53 m_ui->filters->installEventFilter(this);
54 m_ui->filters->setDragEnabled(true);
55 m_ui->filters->setDragDropMode(QAbstractItemView::InternalMove);
56 m_ui->filters->setAutoScroll(true);
57
58 reset();
59 selectionChanged();
60
61 connect(m_ui->filters->selectionModel(), &QItemSelectionModel::currentChanged,
62 this, &ProjectFilterConfigPage::selectionChanged);
63 connect(this, &ProjectFilterConfigPage::changed, this, &ProjectFilterConfigPage::selectionChanged);
64
65 connect(m_model, &FilterModel::modelReset, this, &ProjectFilterConfigPage::checkFiltersAndEmitChanged);
66 connect(m_model, &FilterModel::dataChanged, this, &ProjectFilterConfigPage::checkFiltersAndEmitChanged);
67 connect(m_model, &FilterModel::rowsRemoved, this, &ProjectFilterConfigPage::checkFiltersAndEmitChanged);
68 // Don't recheck filters when a row is:
69 // 1. Inserted - because existing errors remain. And if there were no errors, a new
70 // empty-pattern error would be shown - annoyingly and uselessly - on each insertion, before
71 // the user had a chance to enter a new pattern.
72 // 2. Moved - because neither existing errors disappear nor new ones appear after this operation.
73 // When there are multiple errors, the row order determines which error message is shown.
74 // But the message choice in this corner case is not important enough to recheck all filters.
75 connect(m_model, &FilterModel::rowsInserted, this, &ProjectFilterConfigPage::changed);
76 connect(m_model, &FilterModel::rowsMoved, this, &ProjectFilterConfigPage::changed);
77
78 connect(m_ui->add, &QPushButton::clicked, this, &ProjectFilterConfigPage::add);
79 connect(m_ui->remove, &QPushButton::clicked, this, &ProjectFilterConfigPage::remove);
80 connect(m_ui->moveUp, &QPushButton::clicked, this, &ProjectFilterConfigPage::moveUp);
81 connect(m_ui->moveDown, &QPushButton::clicked, this, &ProjectFilterConfigPage::moveDown);
82}
83

Callers

nothing calls this directly

Calls 4

resetFunction · 0.85
setupUiMethod · 0.80
headerMethod · 0.80
setModelMethod · 0.45

Tested by

no test coverage detected