aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/modelinglib/qmt/model_widgets_ui/modeltreefilter.cpp
blob: 59a61df3c4e3510116866450dd3e4811f1f484ff (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
// Copyright (C) 2018 Jochen Becher
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0

#include "modeltreefilter.h"
#include "ui_modeltreefilter.h"

#include <QStringListModel>

namespace qmt {

class ModelTreeFilter::Private {
public:
    QStringListModel m_typeModel;
    QStringListModel m_stereotypesModel;
    QStringListModel m_directionModel;
};

ModelTreeFilter::ModelTreeFilter(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::ModelTreeFilter),
    d(new Private)
{
    ui->setupUi(this);
    connect(ui->resetViewButton, &QPushButton::clicked, this, &ModelTreeFilter::resetView);
    connect(ui->relationsCheckBox, &QCheckBox::clicked, this, &ModelTreeFilter::onViewChanged);
    connect(ui->diagramElementsCheckBox, &QCheckBox::clicked, this, &ModelTreeFilter::onViewChanged);
    connect(ui->clearFilterButton, &QPushButton::clicked, this, &ModelTreeFilter::clearFilter);
    connect(ui->typeComboBox, &QComboBox::currentIndexChanged, this, [this](int index) {
        ui->directionComboBox->setDisabled(index != (int) ModelTreeFilterData::Type::Dependency);
    });
    connect(ui->typeComboBox, &QComboBox::currentIndexChanged, this, &ModelTreeFilter::onFilterChanged);
    connect(ui->stereotypesComboBox, &QComboBox::currentTextChanged, this, &ModelTreeFilter::onFilterChanged);
    connect(ui->nameLineEdit, &QLineEdit::textChanged, this, &ModelTreeFilter::onFilterChanged);
    connect(ui->directionComboBox, &QComboBox::currentTextChanged, this, &ModelTreeFilter::onFilterChanged);
    setupFilter();
    resetView();
    clearFilter();
}

ModelTreeFilter::~ModelTreeFilter()
{
    delete d;
    delete ui;
}

void ModelTreeFilter::setupFilter()
{
    QStringList types = {"Any", "Package", "Component", "Class", "Diagram", "Item",
                         "Dependency", "Association", "Inheritance", "Connection"};
    d->m_typeModel.setStringList(types);
    ui->typeComboBox->setModel(&d->m_typeModel);

    QStringList stereotypes = { };
    d->m_stereotypesModel.setStringList(stereotypes);
    ui->stereotypesComboBox->setModel(&d->m_stereotypesModel);

    QStringList directions = {"Any", "Outgoing (->)", "Incoming (<-)", "Bidirectional (<->)"};
    d->m_directionModel.setStringList(directions);
    ui->directionComboBox->setModel(&d->m_directionModel);
}

void ModelTreeFilter::resetView()
{
    ui->relationsCheckBox->setChecked(true);
    ui->diagramElementsCheckBox->setChecked(false);
    onViewChanged();
}

void ModelTreeFilter::clearFilter()
{
    ui->typeComboBox->setCurrentIndex(0);
    ui->stereotypesComboBox->clearEditText();
    ui->nameLineEdit->clear();
    ui->directionComboBox->setCurrentIndex(0);
    onFilterChanged();
}

void ModelTreeFilter::onViewChanged()
{
    ModelTreeViewData modelTreeViewData;
    modelTreeViewData.setShowRelations(ui->relationsCheckBox->isChecked());
    modelTreeViewData.setShowDiagramElements(ui->diagramElementsCheckBox->isChecked());
    emit viewDataChanged(modelTreeViewData);
}

void ModelTreeFilter::onFilterChanged()
{
    ModelTreeFilterData modelTreeFilterData;
    modelTreeFilterData.setType((ModelTreeFilterData::Type) ui->typeComboBox->currentIndex());
    modelTreeFilterData.setCustomId(QString());
    modelTreeFilterData.setStereotypes(ui->stereotypesComboBox->currentText().split(',', Qt::SkipEmptyParts));
    modelTreeFilterData.setName(ui->nameLineEdit->text().trimmed());
    if (modelTreeFilterData.type() == ModelTreeFilterData::Type::Dependency)
        modelTreeFilterData.setDirection((ModelTreeFilterData::Direction) ui->directionComboBox->currentIndex());
    else
        modelTreeFilterData.setDirection(ModelTreeFilterData::Direction::Any);
    emit filterDataChanged(modelTreeFilterData);
}

} // namespace qmt