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