1 /*
2 SPDX-License-Identifier: GPL-2.0-or-later
3 SPDX-FileCopyrightText: 2016-2020 Umbrello UML Modeller Authors <umbrello-devel@kde.org>
4 */
5
6 #include "objectswindow.h"
7
8 // app includes
9 #include "models/objectsmodel.h"
10 #include "uml.h"
11 #include "umldoc.h"
12 #include "umlview.h"
13
14 // kde includes
15 #include <KLocalizedString>
16
17 // qt includes
18 #include <QHeaderView>
19 #include <QTableView>
20 #include <QSortFilterProxyModel>
21 #include <QtDebug>
22
23 Q_DECLARE_METATYPE(UMLObject*);
24
ObjectsWindow(const QString & title,QWidget * parent)25 ObjectsWindow::ObjectsWindow(const QString &title, QWidget *parent)
26 : QDockWidget(title, parent)
27 {
28 setObjectName(QLatin1String("ObjectsWindow"));
29
30 m_proxyModel = new QSortFilterProxyModel;
31 m_proxyModel->setSourceModel(UMLApp::app()->document()->objectsModel());
32 m_proxyModel->setSortCaseSensitivity(Qt::CaseInsensitive);
33 m_objectsTree = new QTableView;
34 m_objectsTree->setModel(m_proxyModel);
35 m_objectsTree->setSortingEnabled(true);
36 m_objectsTree->verticalHeader()->setDefaultSectionSize(20);
37 m_objectsTree->verticalHeader()->setVisible(false);
38 #if QT_VERSION >= 0x050000
39 m_objectsTree->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
40 #else
41 m_objectsTree->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
42 #endif
43 setWidget(m_objectsTree);
44
45 connect(m_objectsTree, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(slotObjectsDoubleClicked(QModelIndex)));
46 connect(m_objectsTree, SIGNAL(clicked(QModelIndex)), this, SLOT(slotObjectsClicked(QModelIndex)));
47 }
48
~ObjectsWindow()49 ObjectsWindow::~ObjectsWindow()
50 {
51 delete m_objectsTree;
52 delete m_proxyModel;
53 }
54
modified()55 void ObjectsWindow::modified()
56 {
57 UMLObject *o = dynamic_cast<UMLObject*>(QObject::sender());
58 if (!o)
59 return;
60 UMLApp::app()->document()->objectsModel()->emitDataChanged(o);
61 }
62
slotObjectsDoubleClicked(QModelIndex index)63 void ObjectsWindow::slotObjectsDoubleClicked(QModelIndex index)
64 {
65 QVariant v = m_objectsTree->model()->data(index, Qt::UserRole);
66 if (v.canConvert<UMLObject*>()) {
67 UMLObject *o = v.value<UMLObject*>();
68 o->showPropertiesDialog(this);
69 }
70 }
71
slotObjectsClicked(QModelIndex index)72 void ObjectsWindow::slotObjectsClicked(QModelIndex index)
73 {
74 #if 1
75 Q_UNUSED(index)
76 #else
77 QVariant v = m_objectsTree->model()->data(index, Qt::UserRole);
78 if (v.canConvert<UMLObject*>()) {
79 UMLObject *o = v.value<UMLObject*>();
80 //o->showPropertiesDialog(this);
81 }
82 #endif
83 }
84