##// END OF EJS Templates
Edition of events from the inspector
trabillard -
r1148:ac6f44836b9a
parent child
Show More
@@ -1,38 +1,40
1 #ifndef SCIQLOP_CATALOGUEEVENTSTABLEMODEL_H
1 #ifndef SCIQLOP_CATALOGUEEVENTSTABLEMODEL_H
2 #define SCIQLOP_CATALOGUEEVENTSTABLEMODEL_H
2 #define SCIQLOP_CATALOGUEEVENTSTABLEMODEL_H
3
3
4 #include <Common/spimpl.h>
4 #include <Common/spimpl.h>
5 #include <QAbstractTableModel>
5 #include <QAbstractTableModel>
6
6
7 class DBEvent;
7 class DBEvent;
8
8
9 class CatalogueEventsTableModel : public QAbstractTableModel {
9 class CatalogueEventsTableModel : public QAbstractTableModel {
10 public:
10 public:
11 CatalogueEventsTableModel(QObject *parent = nullptr);
11 CatalogueEventsTableModel(QObject *parent = nullptr);
12
12
13 void setEvents(const QVector<std::shared_ptr<DBEvent> > &events);
13 void setEvents(const QVector<std::shared_ptr<DBEvent> > &events);
14 std::shared_ptr<DBEvent> getEvent(int row) const;
14 std::shared_ptr<DBEvent> getEvent(int row) const;
15
15
16 void addEvent(const std::shared_ptr<DBEvent> &events);
16 void addEvent(const std::shared_ptr<DBEvent> &event);
17 void removeEvent(const std::shared_ptr<DBEvent> &events);
17 void removeEvent(const std::shared_ptr<DBEvent> &event);
18
19 void refreshEvent(const std::shared_ptr<DBEvent> &event);
18
20
19 // Model
21 // Model
20 int rowCount(const QModelIndex &parent = QModelIndex()) const override;
22 int rowCount(const QModelIndex &parent = QModelIndex()) const override;
21 int columnCount(const QModelIndex &parent = QModelIndex()) const override;
23 int columnCount(const QModelIndex &parent = QModelIndex()) const override;
22 Qt::ItemFlags flags(const QModelIndex &index) const override;
24 Qt::ItemFlags flags(const QModelIndex &index) const override;
23 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
25 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
24 QVariant headerData(int section, Qt::Orientation orientation,
26 QVariant headerData(int section, Qt::Orientation orientation,
25 int role = Qt::DisplayRole) const override;
27 int role = Qt::DisplayRole) const override;
26 void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override;
28 void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override;
27
29
28 Qt::DropActions supportedDragActions() const override;
30 Qt::DropActions supportedDragActions() const override;
29 QStringList mimeTypes() const override;
31 QStringList mimeTypes() const override;
30 QMimeData *mimeData(const QModelIndexList &indexes) const override;
32 QMimeData *mimeData(const QModelIndexList &indexes) const override;
31
33
32
34
33 private:
35 private:
34 class CatalogueEventsTableModelPrivate;
36 class CatalogueEventsTableModelPrivate;
35 spimpl::unique_impl_ptr<CatalogueEventsTableModelPrivate> impl;
37 spimpl::unique_impl_ptr<CatalogueEventsTableModelPrivate> impl;
36 };
38 };
37
39
38 #endif // SCIQLOP_CATALOGUEEVENTSTABLEMODEL_H
40 #endif // SCIQLOP_CATALOGUEEVENTSTABLEMODEL_H
@@ -1,40 +1,42
1 #ifndef SCIQLOP_CATALOGUEEVENTSWIDGET_H
1 #ifndef SCIQLOP_CATALOGUEEVENTSWIDGET_H
2 #define SCIQLOP_CATALOGUEEVENTSWIDGET_H
2 #define SCIQLOP_CATALOGUEEVENTSWIDGET_H
3
3
4 #include <Common/spimpl.h>
4 #include <Common/spimpl.h>
5 #include <QLoggingCategory>
5 #include <QLoggingCategory>
6 #include <QWidget>
6 #include <QWidget>
7
7
8 class DBCatalogue;
8 class DBCatalogue;
9 class DBEvent;
9 class DBEvent;
10 class VisualizationWidget;
10 class VisualizationWidget;
11
11
12 namespace Ui {
12 namespace Ui {
13 class CatalogueEventsWidget;
13 class CatalogueEventsWidget;
14 }
14 }
15
15
16 Q_DECLARE_LOGGING_CATEGORY(LOG_CatalogueEventsWidget)
16 Q_DECLARE_LOGGING_CATEGORY(LOG_CatalogueEventsWidget)
17
17
18 class CatalogueEventsWidget : public QWidget {
18 class CatalogueEventsWidget : public QWidget {
19 Q_OBJECT
19 Q_OBJECT
20
20
21 signals:
21 signals:
22 void eventsSelected(const QVector<std::shared_ptr<DBEvent> > &event);
22 void eventsSelected(const QVector<std::shared_ptr<DBEvent> > &event);
23
23
24 public:
24 public:
25 explicit CatalogueEventsWidget(QWidget *parent = 0);
25 explicit CatalogueEventsWidget(QWidget *parent = 0);
26 virtual ~CatalogueEventsWidget();
26 virtual ~CatalogueEventsWidget();
27
27
28 void setVisualizationWidget(VisualizationWidget *visualization);
28 void setVisualizationWidget(VisualizationWidget *visualization);
29
29
30 void setEventChanges(const std::shared_ptr<DBEvent> &event, bool hasChanges);
31
30 public slots:
32 public slots:
31 void populateWithCatalogues(const QVector<std::shared_ptr<DBCatalogue> > &catalogues);
33 void populateWithCatalogues(const QVector<std::shared_ptr<DBCatalogue> > &catalogues);
32
34
33 private:
35 private:
34 Ui::CatalogueEventsWidget *ui;
36 Ui::CatalogueEventsWidget *ui;
35
37
36 class CatalogueEventsWidgetPrivate;
38 class CatalogueEventsWidgetPrivate;
37 spimpl::unique_impl_ptr<CatalogueEventsWidgetPrivate> impl;
39 spimpl::unique_impl_ptr<CatalogueEventsWidgetPrivate> impl;
38 };
40 };
39
41
40 #endif // SCIQLOP_CATALOGUEEVENTSWIDGET_H
42 #endif // SCIQLOP_CATALOGUEEVENTSWIDGET_H
@@ -1,185 +1,191
1 #include "Catalogue/CatalogueEventsTableModel.h"
1 #include "Catalogue/CatalogueEventsTableModel.h"
2
2
3 #include <Common/DateUtils.h>
3 #include <Common/DateUtils.h>
4 #include <Common/MimeTypesDef.h>
4 #include <Common/MimeTypesDef.h>
5 #include <DBEvent.h>
5 #include <DBEvent.h>
6 #include <DBTag.h>
6 #include <DBTag.h>
7 #include <Data/SqpRange.h>
7 #include <Data/SqpRange.h>
8 #include <QMimeData>
8 #include <QMimeData>
9 #include <SqpApplication.h>
9 #include <SqpApplication.h>
10 #include <Time/TimeController.h>
10 #include <Time/TimeController.h>
11
11
12 struct CatalogueEventsTableModel::CatalogueEventsTableModelPrivate {
12 struct CatalogueEventsTableModel::CatalogueEventsTableModelPrivate {
13 QVector<std::shared_ptr<DBEvent> > m_Events;
13 QVector<std::shared_ptr<DBEvent> > m_Events;
14
14
15 enum class Column { Event, TStart, TEnd, Tags, Product, NbColumn };
15 enum class Column { Event, TStart, TEnd, Tags, Product, NbColumn };
16 QStringList columnNames()
16 QStringList columnNames()
17 {
17 {
18 return QStringList{tr("Event"), tr("TStart"), tr("TEnd"), tr("Tags"), tr("Product")};
18 return QStringList{tr("Event"), tr("TStart"), tr("TEnd"), tr("Tags"), tr("Product")};
19 }
19 }
20
20
21 QVariant eventData(int col, const std::shared_ptr<DBEvent> &event) const
21 QVariant eventData(int col, const std::shared_ptr<DBEvent> &event) const
22 {
22 {
23 switch (static_cast<Column>(col)) {
23 switch (static_cast<Column>(col)) {
24 case Column::Event:
24 case Column::Event:
25 return event->getName();
25 return event->getName();
26 case Column::TStart:
26 case Column::TStart:
27 return DateUtils::dateTime(event->getTStart());
27 return DateUtils::dateTime(event->getTStart());
28 case Column::TEnd:
28 case Column::TEnd:
29 return DateUtils::dateTime(event->getTEnd());
29 return DateUtils::dateTime(event->getTEnd());
30 case Column::Product:
30 case Column::Product:
31 return event->getProduct();
31 return event->getProduct();
32 case Column::Tags: {
32 case Column::Tags: {
33 QString tagList;
33 QString tagList;
34 auto tags = event->getTags();
34 auto tags = event->getTags();
35 for (auto tag : tags) {
35 for (auto tag : tags) {
36 tagList += tag.getName();
36 tagList += tag.getName();
37 tagList += ' ';
37 tagList += ' ';
38 }
38 }
39
39
40 return tagList;
40 return tagList;
41 }
41 }
42 default:
42 default:
43 break;
43 break;
44 }
44 }
45
45
46 Q_ASSERT(false);
46 Q_ASSERT(false);
47 return QStringLiteral("Unknown Data");
47 return QStringLiteral("Unknown Data");
48 }
48 }
49 };
49 };
50
50
51 CatalogueEventsTableModel::CatalogueEventsTableModel(QObject *parent)
51 CatalogueEventsTableModel::CatalogueEventsTableModel(QObject *parent)
52 : QAbstractTableModel(parent),
52 : QAbstractTableModel(parent),
53 impl{spimpl::make_unique_impl<CatalogueEventsTableModelPrivate>()}
53 impl{spimpl::make_unique_impl<CatalogueEventsTableModelPrivate>()}
54 {
54 {
55 }
55 }
56
56
57 void CatalogueEventsTableModel::setEvents(const QVector<std::shared_ptr<DBEvent> > &events)
57 void CatalogueEventsTableModel::setEvents(const QVector<std::shared_ptr<DBEvent> > &events)
58 {
58 {
59 beginResetModel();
59 beginResetModel();
60 impl->m_Events = events;
60 impl->m_Events = events;
61 endResetModel();
61 endResetModel();
62 }
62 }
63
63
64 std::shared_ptr<DBEvent> CatalogueEventsTableModel::getEvent(int row) const
64 std::shared_ptr<DBEvent> CatalogueEventsTableModel::getEvent(int row) const
65 {
65 {
66 return impl->m_Events.value(row);
66 return impl->m_Events.value(row);
67 }
67 }
68
68
69 void CatalogueEventsTableModel::addEvent(const std::shared_ptr<DBEvent> &events)
69 void CatalogueEventsTableModel::addEvent(const std::shared_ptr<DBEvent> &event)
70 {
70 {
71 beginInsertRows(QModelIndex(), impl->m_Events.count() - 1, impl->m_Events.count() - 1);
71 beginInsertRows(QModelIndex(), impl->m_Events.count() - 1, impl->m_Events.count() - 1);
72 // impl->m_Events.append(event); TODO
72 impl->m_Events.append(event);
73 endInsertRows();
73 endInsertRows();
74 }
74 }
75
75
76 void CatalogueEventsTableModel::removeEvent(const std::shared_ptr<DBEvent> &events)
76 void CatalogueEventsTableModel::removeEvent(const std::shared_ptr<DBEvent> &event)
77 {
77 {
78 // TODO
78 auto index = impl->m_Events.indexOf(event);
79 auto index = -1; // impl->m_Events.indexOf(event);
80 if (index >= 0) {
79 if (index >= 0) {
81 beginRemoveRows(QModelIndex(), index, index);
80 beginRemoveRows(QModelIndex(), index, index);
82 impl->m_Events.removeAt(index);
81 impl->m_Events.removeAt(index);
83 endRemoveRows();
82 endRemoveRows();
84 }
83 }
85 }
84 }
86
85
86 void CatalogueEventsTableModel::refreshEvent(const std::shared_ptr<DBEvent> &event)
87 {
88 auto eventIndex = impl->m_Events.indexOf(event);
89 if (eventIndex >= 0) {
90 emit dataChanged(index(eventIndex, 0), index(eventIndex, columnCount()));
91 }
92 }
93
87 int CatalogueEventsTableModel::rowCount(const QModelIndex &parent) const
94 int CatalogueEventsTableModel::rowCount(const QModelIndex &parent) const
88 {
95 {
89 int r = impl->m_Events.count();
96 int r = impl->m_Events.count();
90 return r;
97 return r;
91 }
98 }
92
99
93 int CatalogueEventsTableModel::columnCount(const QModelIndex &parent) const
100 int CatalogueEventsTableModel::columnCount(const QModelIndex &parent) const
94 {
101 {
95 int c = static_cast<int>(CatalogueEventsTableModelPrivate::Column::NbColumn);
102 return static_cast<int>(CatalogueEventsTableModelPrivate::Column::NbColumn);
96 return c;
97 }
103 }
98
104
99 Qt::ItemFlags CatalogueEventsTableModel::flags(const QModelIndex &index) const
105 Qt::ItemFlags CatalogueEventsTableModel::flags(const QModelIndex &index) const
100 {
106 {
101 return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled;
107 return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled;
102 }
108 }
103
109
104 QVariant CatalogueEventsTableModel::data(const QModelIndex &index, int role) const
110 QVariant CatalogueEventsTableModel::data(const QModelIndex &index, int role) const
105 {
111 {
106 if (index.isValid()) {
112 if (index.isValid()) {
107 auto event = getEvent(index.row());
113 auto event = getEvent(index.row());
108
114
109 switch (role) {
115 switch (role) {
110 case Qt::DisplayRole:
116 case Qt::DisplayRole:
111 return impl->eventData(index.column(), event);
117 return impl->eventData(index.column(), event);
112 break;
118 break;
113 }
119 }
114 }
120 }
115
121
116 return QVariant{};
122 return QVariant{};
117 }
123 }
118
124
119 QVariant CatalogueEventsTableModel::headerData(int section, Qt::Orientation orientation,
125 QVariant CatalogueEventsTableModel::headerData(int section, Qt::Orientation orientation,
120 int role) const
126 int role) const
121 {
127 {
122 if (orientation == Qt::Horizontal && role == Qt::DisplayRole) {
128 if (orientation == Qt::Horizontal && role == Qt::DisplayRole) {
123 return impl->columnNames().value(section);
129 return impl->columnNames().value(section);
124 }
130 }
125
131
126 return QVariant();
132 return QVariant();
127 }
133 }
128
134
129 void CatalogueEventsTableModel::sort(int column, Qt::SortOrder order)
135 void CatalogueEventsTableModel::sort(int column, Qt::SortOrder order)
130 {
136 {
131 std::sort(impl->m_Events.begin(), impl->m_Events.end(),
137 std::sort(impl->m_Events.begin(), impl->m_Events.end(),
132 [this, column, order](auto e1, auto e2) {
138 [this, column, order](auto e1, auto e2) {
133 auto data1 = impl->eventData(column, e1);
139 auto data1 = impl->eventData(column, e1);
134 auto data2 = impl->eventData(column, e2);
140 auto data2 = impl->eventData(column, e2);
135
141
136 auto result = data1.toString() < data2.toString();
142 auto result = data1.toString() < data2.toString();
137
143
138 return order == Qt::AscendingOrder ? result : !result;
144 return order == Qt::AscendingOrder ? result : !result;
139 });
145 });
140
146
141 emit dataChanged(QModelIndex(), QModelIndex());
147 emit dataChanged(QModelIndex(), QModelIndex());
142 }
148 }
143
149
144 Qt::DropActions CatalogueEventsTableModel::supportedDragActions() const
150 Qt::DropActions CatalogueEventsTableModel::supportedDragActions() const
145 {
151 {
146 return Qt::CopyAction | Qt::MoveAction;
152 return Qt::CopyAction | Qt::MoveAction;
147 }
153 }
148
154
149 QStringList CatalogueEventsTableModel::mimeTypes() const
155 QStringList CatalogueEventsTableModel::mimeTypes() const
150 {
156 {
151 return {MIME_TYPE_EVENT_LIST, MIME_TYPE_TIME_RANGE};
157 return {MIME_TYPE_EVENT_LIST, MIME_TYPE_TIME_RANGE};
152 }
158 }
153
159
154 QMimeData *CatalogueEventsTableModel::mimeData(const QModelIndexList &indexes) const
160 QMimeData *CatalogueEventsTableModel::mimeData(const QModelIndexList &indexes) const
155 {
161 {
156 auto mimeData = new QMimeData;
162 auto mimeData = new QMimeData;
157
163
158 QVector<std::shared_ptr<DBEvent> > eventList;
164 QVector<std::shared_ptr<DBEvent> > eventList;
159
165
160 SqpRange firstTimeRange;
166 SqpRange firstTimeRange;
161 for (const auto &index : indexes) {
167 for (const auto &index : indexes) {
162 if (index.column() == 0) { // only the first column
168 if (index.column() == 0) { // only the first column
163 auto event = getEvent(index.row());
169 auto event = getEvent(index.row());
164 if (eventList.isEmpty()) {
170 if (eventList.isEmpty()) {
165 // Gets the range of the first variable
171 // Gets the range of the first variable
166 firstTimeRange.m_TStart = event->getTStart();
172 firstTimeRange.m_TStart = event->getTStart();
167 firstTimeRange.m_TEnd = event->getTEnd();
173 firstTimeRange.m_TEnd = event->getTEnd();
168 }
174 }
169
175
170 eventList << event;
176 eventList << event;
171 }
177 }
172 }
178 }
173
179
174 auto eventsEncodedData
180 auto eventsEncodedData
175 = QByteArray{}; // sqpApp->catalogueController().->mimeDataForEvents(eventList); //TODO
181 = QByteArray{}; // sqpApp->catalogueController().->mimeDataForEvents(eventList); //TODO
176 mimeData->setData(MIME_TYPE_EVENT_LIST, eventsEncodedData);
182 mimeData->setData(MIME_TYPE_EVENT_LIST, eventsEncodedData);
177
183
178 if (eventList.count() == 1) {
184 if (eventList.count() == 1) {
179 // No time range MIME data if multiple events are dragged
185 // No time range MIME data if multiple events are dragged
180 auto timeEncodedData = TimeController::mimeDataForTimeRange(firstTimeRange);
186 auto timeEncodedData = TimeController::mimeDataForTimeRange(firstTimeRange);
181 mimeData->setData(MIME_TYPE_TIME_RANGE, timeEncodedData);
187 mimeData->setData(MIME_TYPE_TIME_RANGE, timeEncodedData);
182 }
188 }
183
189
184 return mimeData;
190 return mimeData;
185 }
191 }
@@ -1,291 +1,296
1 #include "Catalogue/CatalogueEventsWidget.h"
1 #include "Catalogue/CatalogueEventsWidget.h"
2 #include "ui_CatalogueEventsWidget.h"
2 #include "ui_CatalogueEventsWidget.h"
3
3
4 #include <Catalogue/CatalogueController.h>
4 #include <Catalogue/CatalogueController.h>
5 #include <Catalogue/CatalogueEventsTableModel.h>
5 #include <Catalogue/CatalogueEventsTableModel.h>
6 #include <CatalogueDao.h>
6 #include <CatalogueDao.h>
7 #include <DBCatalogue.h>
7 #include <DBCatalogue.h>
8 #include <SqpApplication.h>
8 #include <SqpApplication.h>
9 #include <Visualization/VisualizationTabWidget.h>
9 #include <Visualization/VisualizationTabWidget.h>
10 #include <Visualization/VisualizationWidget.h>
10 #include <Visualization/VisualizationWidget.h>
11 #include <Visualization/VisualizationZoneWidget.h>
11 #include <Visualization/VisualizationZoneWidget.h>
12
12
13 #include <QDialog>
13 #include <QDialog>
14 #include <QDialogButtonBox>
14 #include <QDialogButtonBox>
15 #include <QListWidget>
15 #include <QListWidget>
16
16
17 Q_LOGGING_CATEGORY(LOG_CatalogueEventsWidget, "CatalogueEventsWidget")
17 Q_LOGGING_CATEGORY(LOG_CatalogueEventsWidget, "CatalogueEventsWidget")
18
18
19 /// Format of the dates appearing in the label of a cursor
19 /// Format of the dates appearing in the label of a cursor
20 const auto DATETIME_FORMAT = QStringLiteral("yyyy/MM/dd hh:mm:ss");
20 const auto DATETIME_FORMAT = QStringLiteral("yyyy/MM/dd hh:mm:ss");
21
21
22 struct CatalogueEventsWidget::CatalogueEventsWidgetPrivate {
22 struct CatalogueEventsWidget::CatalogueEventsWidgetPrivate {
23
23
24 CatalogueEventsTableModel *m_Model = nullptr;
24 CatalogueEventsTableModel *m_Model = nullptr;
25 QStringList m_ZonesForTimeMode;
25 QStringList m_ZonesForTimeMode;
26 QString m_ZoneForGraphMode;
26 QString m_ZoneForGraphMode;
27
27
28 VisualizationWidget *m_VisualizationWidget = nullptr;
28 VisualizationWidget *m_VisualizationWidget = nullptr;
29
29
30 void setEvents(const QVector<std::shared_ptr<DBEvent> > &events, QTableView *tableView)
30 void setEvents(const QVector<std::shared_ptr<DBEvent> > &events, QTableView *tableView)
31 {
31 {
32 tableView->setSortingEnabled(false);
32 tableView->setSortingEnabled(false);
33 m_Model->setEvents(events);
33 m_Model->setEvents(events);
34 tableView->setSortingEnabled(true);
34 tableView->setSortingEnabled(true);
35 }
35 }
36
36
37 void addEvent(const std::shared_ptr<DBEvent> &event, QTableView *tableView)
37 void addEvent(const std::shared_ptr<DBEvent> &event, QTableView *tableView)
38 {
38 {
39 tableView->setSortingEnabled(false);
39 tableView->setSortingEnabled(false);
40 m_Model->addEvent(event);
40 m_Model->addEvent(event);
41 tableView->setSortingEnabled(true);
41 tableView->setSortingEnabled(true);
42 }
42 }
43
43
44 void removeEvent(const std::shared_ptr<DBEvent> &event, QTableView *tableView)
44 void removeEvent(const std::shared_ptr<DBEvent> &event, QTableView *tableView)
45 {
45 {
46 tableView->setSortingEnabled(false);
46 tableView->setSortingEnabled(false);
47 m_Model->removeEvent(event);
47 m_Model->removeEvent(event);
48 tableView->setSortingEnabled(true);
48 tableView->setSortingEnabled(true);
49 }
49 }
50
50
51 QStringList getAvailableVisualizationZoneList() const
51 QStringList getAvailableVisualizationZoneList() const
52 {
52 {
53 if (m_VisualizationWidget) {
53 if (m_VisualizationWidget) {
54 if (auto tab = m_VisualizationWidget->currentTabWidget()) {
54 if (auto tab = m_VisualizationWidget->currentTabWidget()) {
55 return tab->availableZoneWidgets();
55 return tab->availableZoneWidgets();
56 }
56 }
57 }
57 }
58
58
59 return QStringList{};
59 return QStringList{};
60 }
60 }
61
61
62 QStringList selectZone(QWidget *parent, const QStringList &selectedZones,
62 QStringList selectZone(QWidget *parent, const QStringList &selectedZones,
63 bool allowMultiSelection, const QPoint &location)
63 bool allowMultiSelection, const QPoint &location)
64 {
64 {
65 auto availableZones = getAvailableVisualizationZoneList();
65 auto availableZones = getAvailableVisualizationZoneList();
66 if (availableZones.isEmpty()) {
66 if (availableZones.isEmpty()) {
67 return QStringList{};
67 return QStringList{};
68 }
68 }
69
69
70 QDialog d(parent, Qt::Tool);
70 QDialog d(parent, Qt::Tool);
71 d.setWindowTitle("Choose a zone");
71 d.setWindowTitle("Choose a zone");
72 auto layout = new QVBoxLayout{&d};
72 auto layout = new QVBoxLayout{&d};
73 layout->setContentsMargins(0, 0, 0, 0);
73 layout->setContentsMargins(0, 0, 0, 0);
74 auto listWidget = new QListWidget{&d};
74 auto listWidget = new QListWidget{&d};
75 layout->addWidget(listWidget);
75 layout->addWidget(listWidget);
76
76
77 QSet<QListWidgetItem *> checkedItems;
77 QSet<QListWidgetItem *> checkedItems;
78 for (auto zone : availableZones) {
78 for (auto zone : availableZones) {
79 auto item = new QListWidgetItem{zone};
79 auto item = new QListWidgetItem{zone};
80 item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsUserCheckable);
80 item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsUserCheckable);
81 if (selectedZones.contains(zone)) {
81 if (selectedZones.contains(zone)) {
82 item->setCheckState(Qt::Checked);
82 item->setCheckState(Qt::Checked);
83 checkedItems << item;
83 checkedItems << item;
84 }
84 }
85 else {
85 else {
86 item->setCheckState(Qt::Unchecked);
86 item->setCheckState(Qt::Unchecked);
87 }
87 }
88
88
89 listWidget->addItem(item);
89 listWidget->addItem(item);
90 }
90 }
91
91
92 auto buttonBox = new QDialogButtonBox{QDialogButtonBox::Ok, &d};
92 auto buttonBox = new QDialogButtonBox{QDialogButtonBox::Ok, &d};
93 layout->addWidget(buttonBox);
93 layout->addWidget(buttonBox);
94
94
95 QObject::connect(buttonBox, &QDialogButtonBox::accepted, &d, &QDialog::accept);
95 QObject::connect(buttonBox, &QDialogButtonBox::accepted, &d, &QDialog::accept);
96 QObject::connect(buttonBox, &QDialogButtonBox::rejected, &d, &QDialog::reject);
96 QObject::connect(buttonBox, &QDialogButtonBox::rejected, &d, &QDialog::reject);
97
97
98 QObject::connect(listWidget, &QListWidget::itemChanged,
98 QObject::connect(listWidget, &QListWidget::itemChanged,
99 [&checkedItems, allowMultiSelection, listWidget](auto item) {
99 [&checkedItems, allowMultiSelection, listWidget](auto item) {
100 if (item->checkState() == Qt::Checked) {
100 if (item->checkState() == Qt::Checked) {
101 if (!allowMultiSelection) {
101 if (!allowMultiSelection) {
102 for (auto checkedItem : checkedItems) {
102 for (auto checkedItem : checkedItems) {
103 listWidget->blockSignals(true);
103 listWidget->blockSignals(true);
104 checkedItem->setCheckState(Qt::Unchecked);
104 checkedItem->setCheckState(Qt::Unchecked);
105 listWidget->blockSignals(false);
105 listWidget->blockSignals(false);
106 }
106 }
107
107
108 checkedItems.clear();
108 checkedItems.clear();
109 }
109 }
110 checkedItems << item;
110 checkedItems << item;
111 }
111 }
112 else {
112 else {
113 checkedItems.remove(item);
113 checkedItems.remove(item);
114 }
114 }
115 });
115 });
116
116
117 QStringList result;
117 QStringList result;
118
118
119 d.setMinimumWidth(120);
119 d.setMinimumWidth(120);
120 d.resize(d.minimumSizeHint());
120 d.resize(d.minimumSizeHint());
121 d.move(location);
121 d.move(location);
122 if (d.exec() == QDialog::Accepted) {
122 if (d.exec() == QDialog::Accepted) {
123 for (auto item : checkedItems) {
123 for (auto item : checkedItems) {
124 result += item->text();
124 result += item->text();
125 }
125 }
126 }
126 }
127 else {
127 else {
128 result = selectedZones;
128 result = selectedZones;
129 }
129 }
130
130
131 return result;
131 return result;
132 }
132 }
133
133
134 void updateForTimeMode(QTableView *tableView)
134 void updateForTimeMode(QTableView *tableView)
135 {
135 {
136 auto selectedRows = tableView->selectionModel()->selectedRows();
136 auto selectedRows = tableView->selectionModel()->selectedRows();
137
137
138 if (selectedRows.count() == 1) {
138 if (selectedRows.count() == 1) {
139 auto event = m_Model->getEvent(selectedRows.first().row());
139 auto event = m_Model->getEvent(selectedRows.first().row());
140 if (m_VisualizationWidget) {
140 if (m_VisualizationWidget) {
141 if (auto tab = m_VisualizationWidget->currentTabWidget()) {
141 if (auto tab = m_VisualizationWidget->currentTabWidget()) {
142
142
143 for (auto zoneName : m_ZonesForTimeMode) {
143 for (auto zoneName : m_ZonesForTimeMode) {
144 if (auto zone = tab->getZoneWithName(zoneName)) {
144 if (auto zone = tab->getZoneWithName(zoneName)) {
145 SqpRange eventRange;
145 SqpRange eventRange;
146 eventRange.m_TStart = event->getTStart();
146 eventRange.m_TStart = event->getTStart();
147 eventRange.m_TEnd = event->getTEnd();
147 eventRange.m_TEnd = event->getTEnd();
148 zone->setZoneRange(eventRange);
148 zone->setZoneRange(eventRange);
149 }
149 }
150 }
150 }
151 }
151 }
152 else {
152 else {
153 qCWarning(LOG_CatalogueEventsWidget())
153 qCWarning(LOG_CatalogueEventsWidget())
154 << "updateTimeZone: no tab found in the visualization";
154 << "updateTimeZone: no tab found in the visualization";
155 }
155 }
156 }
156 }
157 else {
157 else {
158 qCWarning(LOG_CatalogueEventsWidget())
158 qCWarning(LOG_CatalogueEventsWidget())
159 << "updateTimeZone: visualization widget not found";
159 << "updateTimeZone: visualization widget not found";
160 }
160 }
161 }
161 }
162 else {
162 else {
163 qCWarning(LOG_CatalogueEventsWidget())
163 qCWarning(LOG_CatalogueEventsWidget())
164 << "updateTimeZone: not compatible with multiple events selected";
164 << "updateTimeZone: not compatible with multiple events selected";
165 }
165 }
166 }
166 }
167
167
168 void updateForGraphMode(QTableView *tableView)
168 void updateForGraphMode(QTableView *tableView)
169 {
169 {
170 auto selectedRows = tableView->selectionModel()->selectedRows();
170 auto selectedRows = tableView->selectionModel()->selectedRows();
171
171
172 if (selectedRows.count() == 1) {
172 if (selectedRows.count() == 1) {
173 auto event = m_Model->getEvent(selectedRows.first().row());
173 auto event = m_Model->getEvent(selectedRows.first().row());
174 if (m_VisualizationWidget) {
174 if (m_VisualizationWidget) {
175 if (auto tab = m_VisualizationWidget->currentTabWidget()) {
175 if (auto tab = m_VisualizationWidget->currentTabWidget()) {
176 if (auto zone = tab->getZoneWithName(m_ZoneForGraphMode)) {
176 if (auto zone = tab->getZoneWithName(m_ZoneForGraphMode)) {
177 // TODO
177 // TODO
178 }
178 }
179 }
179 }
180 else {
180 else {
181 qCWarning(LOG_CatalogueEventsWidget())
181 qCWarning(LOG_CatalogueEventsWidget())
182 << "updateGraphMode: no tab found in the visualization";
182 << "updateGraphMode: no tab found in the visualization";
183 }
183 }
184 }
184 }
185 else {
185 else {
186 qCWarning(LOG_CatalogueEventsWidget())
186 qCWarning(LOG_CatalogueEventsWidget())
187 << "updateGraphMode: visualization widget not found";
187 << "updateGraphMode: visualization widget not found";
188 }
188 }
189 }
189 }
190 else {
190 else {
191 qCWarning(LOG_CatalogueEventsWidget())
191 qCWarning(LOG_CatalogueEventsWidget())
192 << "updateGraphMode: not compatible with multiple events selected";
192 << "updateGraphMode: not compatible with multiple events selected";
193 }
193 }
194 }
194 }
195 };
195 };
196
196
197 CatalogueEventsWidget::CatalogueEventsWidget(QWidget *parent)
197 CatalogueEventsWidget::CatalogueEventsWidget(QWidget *parent)
198 : QWidget(parent),
198 : QWidget(parent),
199 ui(new Ui::CatalogueEventsWidget),
199 ui(new Ui::CatalogueEventsWidget),
200 impl{spimpl::make_unique_impl<CatalogueEventsWidgetPrivate>()}
200 impl{spimpl::make_unique_impl<CatalogueEventsWidgetPrivate>()}
201 {
201 {
202 ui->setupUi(this);
202 ui->setupUi(this);
203
203
204 impl->m_Model = new CatalogueEventsTableModel{this};
204 impl->m_Model = new CatalogueEventsTableModel{this};
205 ui->tableView->setModel(impl->m_Model);
205 ui->tableView->setModel(impl->m_Model);
206
206
207 ui->tableView->setSortingEnabled(true);
207 ui->tableView->setSortingEnabled(true);
208 ui->tableView->setDragDropMode(QAbstractItemView::DragDrop);
208 ui->tableView->setDragDropMode(QAbstractItemView::DragDrop);
209 ui->tableView->setDragEnabled(true);
209 ui->tableView->setDragEnabled(true);
210
210
211 connect(ui->btnTime, &QToolButton::clicked, [this](auto checked) {
211 connect(ui->btnTime, &QToolButton::clicked, [this](auto checked) {
212 if (checked) {
212 if (checked) {
213 ui->btnChart->setChecked(false);
213 ui->btnChart->setChecked(false);
214 impl->m_ZonesForTimeMode
214 impl->m_ZonesForTimeMode
215 = impl->selectZone(this, impl->m_ZonesForTimeMode, true,
215 = impl->selectZone(this, impl->m_ZonesForTimeMode, true,
216 this->mapToGlobal(ui->btnTime->frameGeometry().center()));
216 this->mapToGlobal(ui->btnTime->frameGeometry().center()));
217
217
218 impl->updateForTimeMode(ui->tableView);
218 impl->updateForTimeMode(ui->tableView);
219 }
219 }
220 });
220 });
221
221
222 connect(ui->btnChart, &QToolButton::clicked, [this](auto checked) {
222 connect(ui->btnChart, &QToolButton::clicked, [this](auto checked) {
223 if (checked) {
223 if (checked) {
224 ui->btnTime->setChecked(false);
224 ui->btnTime->setChecked(false);
225 impl->m_ZoneForGraphMode
225 impl->m_ZoneForGraphMode
226 = impl->selectZone(this, {impl->m_ZoneForGraphMode}, false,
226 = impl->selectZone(this, {impl->m_ZoneForGraphMode}, false,
227 this->mapToGlobal(ui->btnChart->frameGeometry().center()))
227 this->mapToGlobal(ui->btnChart->frameGeometry().center()))
228 .value(0);
228 .value(0);
229
229
230 impl->updateForGraphMode(ui->tableView);
230 impl->updateForGraphMode(ui->tableView);
231 }
231 }
232 });
232 });
233
233
234 auto emitSelection = [this]() {
234 auto emitSelection = [this]() {
235 QVector<std::shared_ptr<DBEvent> > events;
235 QVector<std::shared_ptr<DBEvent> > events;
236 for (auto rowIndex : ui->tableView->selectionModel()->selectedRows()) {
236 for (auto rowIndex : ui->tableView->selectionModel()->selectedRows()) {
237 events << impl->m_Model->getEvent(rowIndex.row());
237 events << impl->m_Model->getEvent(rowIndex.row());
238 }
238 }
239
239
240 emit this->eventsSelected(events);
240 emit this->eventsSelected(events);
241 };
241 };
242
242
243 connect(ui->tableView, &QTableView::clicked, emitSelection);
243 connect(ui->tableView, &QTableView::clicked, emitSelection);
244 connect(ui->tableView->selectionModel(), &QItemSelectionModel::selectionChanged, emitSelection);
244 connect(ui->tableView->selectionModel(), &QItemSelectionModel::selectionChanged, emitSelection);
245
245
246 connect(ui->tableView->selectionModel(), &QItemSelectionModel::selectionChanged, [this]() {
246 connect(ui->tableView->selectionModel(), &QItemSelectionModel::selectionChanged, [this]() {
247 auto isNotMultiSelection = ui->tableView->selectionModel()->selectedRows().count() <= 1;
247 auto isNotMultiSelection = ui->tableView->selectionModel()->selectedRows().count() <= 1;
248 ui->btnChart->setEnabled(isNotMultiSelection);
248 ui->btnChart->setEnabled(isNotMultiSelection);
249 ui->btnTime->setEnabled(isNotMultiSelection);
249 ui->btnTime->setEnabled(isNotMultiSelection);
250
250
251 if (isNotMultiSelection && ui->btnTime->isChecked()) {
251 if (isNotMultiSelection && ui->btnTime->isChecked()) {
252 impl->updateForTimeMode(ui->tableView);
252 impl->updateForTimeMode(ui->tableView);
253 }
253 }
254 else if (isNotMultiSelection && ui->btnChart->isChecked()) {
254 else if (isNotMultiSelection && ui->btnChart->isChecked()) {
255 impl->updateForGraphMode(ui->tableView);
255 impl->updateForGraphMode(ui->tableView);
256 }
256 }
257 });
257 });
258
258
259 ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
259 ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
260 ui->tableView->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
260 ui->tableView->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
261 ui->tableView->horizontalHeader()->setSortIndicatorShown(true);
261 ui->tableView->horizontalHeader()->setSortIndicatorShown(true);
262 }
262 }
263
263
264 CatalogueEventsWidget::~CatalogueEventsWidget()
264 CatalogueEventsWidget::~CatalogueEventsWidget()
265 {
265 {
266 delete ui;
266 delete ui;
267 }
267 }
268
268
269 void CatalogueEventsWidget::setVisualizationWidget(VisualizationWidget *visualization)
269 void CatalogueEventsWidget::setVisualizationWidget(VisualizationWidget *visualization)
270 {
270 {
271 impl->m_VisualizationWidget = visualization;
271 impl->m_VisualizationWidget = visualization;
272 }
272 }
273
273
274 void CatalogueEventsWidget::setEventChanges(const std::shared_ptr<DBEvent> &event, bool hasChanges)
275 {
276 impl->m_Model->refreshEvent(event);
277 }
278
274 void CatalogueEventsWidget::populateWithCatalogues(
279 void CatalogueEventsWidget::populateWithCatalogues(
275 const QVector<std::shared_ptr<DBCatalogue> > &catalogues)
280 const QVector<std::shared_ptr<DBCatalogue> > &catalogues)
276 {
281 {
277 QSet<QUuid> eventIds;
282 QSet<QUuid> eventIds;
278 QVector<std::shared_ptr<DBEvent> > events;
283 QVector<std::shared_ptr<DBEvent> > events;
279
284
280 for (auto catalogue : catalogues) {
285 for (auto catalogue : catalogues) {
281 auto catalogueEvents = sqpApp->catalogueController().retrieveEventsFromCatalogue(catalogue);
286 auto catalogueEvents = sqpApp->catalogueController().retrieveEventsFromCatalogue(catalogue);
282 for (auto event : catalogueEvents) {
287 for (auto event : catalogueEvents) {
283 if (!eventIds.contains(event->getUniqId())) {
288 if (!eventIds.contains(event->getUniqId())) {
284 events << event;
289 events << event;
285 eventIds.insert(event->getUniqId());
290 eventIds.insert(event->getUniqId());
286 }
291 }
287 }
292 }
288 }
293 }
289
294
290 impl->setEvents(events, ui->tableView);
295 impl->setEvents(events, ui->tableView);
291 }
296 }
@@ -1,64 +1,67
1 #include "Catalogue/CatalogueExplorer.h"
1 #include "Catalogue/CatalogueExplorer.h"
2 #include "ui_CatalogueExplorer.h"
2 #include "ui_CatalogueExplorer.h"
3
3
4 #include <Visualization/VisualizationWidget.h>
4 #include <Visualization/VisualizationWidget.h>
5
5
6 #include <DBCatalogue.h>
6 #include <DBCatalogue.h>
7 #include <DBEvent.h>
7 #include <DBEvent.h>
8
8
9 struct CatalogueExplorer::CatalogueExplorerPrivate {
9 struct CatalogueExplorer::CatalogueExplorerPrivate {
10 };
10 };
11
11
12 CatalogueExplorer::CatalogueExplorer(QWidget *parent)
12 CatalogueExplorer::CatalogueExplorer(QWidget *parent)
13 : QDialog(parent, Qt::Dialog | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint),
13 : QDialog(parent, Qt::Dialog | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint),
14 ui(new Ui::CatalogueExplorer),
14 ui(new Ui::CatalogueExplorer),
15 impl{spimpl::make_unique_impl<CatalogueExplorerPrivate>()}
15 impl{spimpl::make_unique_impl<CatalogueExplorerPrivate>()}
16 {
16 {
17 ui->setupUi(this);
17 ui->setupUi(this);
18
18
19 connect(ui->catalogues, &CatalogueSideBarWidget::catalogueSelected, [this](auto catalogues) {
19 connect(ui->catalogues, &CatalogueSideBarWidget::catalogueSelected, [this](auto catalogues) {
20 if (catalogues.count() == 1) {
20 if (catalogues.count() == 1) {
21 ui->inspector->setCatalogue(catalogues.first());
21 ui->inspector->setCatalogue(catalogues.first());
22 }
22 }
23 else {
23 else {
24 ui->inspector->showPage(CatalogueInspectorWidget::Page::Empty);
24 ui->inspector->showPage(CatalogueInspectorWidget::Page::Empty);
25 }
25 }
26
26
27 ui->events->populateWithCatalogues(catalogues);
27 ui->events->populateWithCatalogues(catalogues);
28 });
28 });
29
29
30 connect(ui->catalogues, &CatalogueSideBarWidget::databaseSelected, [this](auto databases) {
30 connect(ui->catalogues, &CatalogueSideBarWidget::databaseSelected, [this](auto databases) {
31 ui->inspector->showPage(CatalogueInspectorWidget::Page::Empty);
31 ui->inspector->showPage(CatalogueInspectorWidget::Page::Empty);
32 });
32 });
33
33
34 connect(ui->catalogues, &CatalogueSideBarWidget::trashSelected,
34 connect(ui->catalogues, &CatalogueSideBarWidget::trashSelected,
35 [this]() { ui->inspector->showPage(CatalogueInspectorWidget::Page::Empty); });
35 [this]() { ui->inspector->showPage(CatalogueInspectorWidget::Page::Empty); });
36
36
37 connect(ui->catalogues, &CatalogueSideBarWidget::allEventsSelected,
37 connect(ui->catalogues, &CatalogueSideBarWidget::allEventsSelected,
38 [this]() { ui->inspector->showPage(CatalogueInspectorWidget::Page::Empty); });
38 [this]() { ui->inspector->showPage(CatalogueInspectorWidget::Page::Empty); });
39
39
40 connect(ui->catalogues, &CatalogueSideBarWidget::selectionCleared,
40 connect(ui->catalogues, &CatalogueSideBarWidget::selectionCleared,
41 [this]() { ui->inspector->showPage(CatalogueInspectorWidget::Page::Empty); });
41 [this]() { ui->inspector->showPage(CatalogueInspectorWidget::Page::Empty); });
42
42
43 connect(ui->events, &CatalogueEventsWidget::eventsSelected, [this](auto events) {
43 connect(ui->events, &CatalogueEventsWidget::eventsSelected, [this](auto events) {
44 if (events.count() == 1) {
44 if (events.count() == 1) {
45 ui->inspector->setEvent(events.first());
45 ui->inspector->setEvent(events.first());
46 }
46 }
47 else {
47 else {
48 ui->inspector->showPage(CatalogueInspectorWidget::Page::Empty);
48 ui->inspector->showPage(CatalogueInspectorWidget::Page::Empty);
49 }
49 }
50 });
50 });
51
51
52 connect(ui->inspector, &CatalogueInspectorWidget::catalogueUpdated,
52 connect(ui->inspector, &CatalogueInspectorWidget::catalogueUpdated,
53 [this](auto catalogue) { ui->catalogues->setCatalogueChanges(catalogue, true); });
53 [this](auto catalogue) { ui->catalogues->setCatalogueChanges(catalogue, true); });
54
55 connect(ui->inspector, &CatalogueInspectorWidget::eventUpdated,
56 [this](auto event) { ui->events->setEventChanges(event, true); });
54 }
57 }
55
58
56 CatalogueExplorer::~CatalogueExplorer()
59 CatalogueExplorer::~CatalogueExplorer()
57 {
60 {
58 delete ui;
61 delete ui;
59 }
62 }
60
63
61 void CatalogueExplorer::setVisualizationWidget(VisualizationWidget *visualization)
64 void CatalogueExplorer::setVisualizationWidget(VisualizationWidget *visualization)
62 {
65 {
63 ui->events->setVisualizationWidget(visualization);
66 ui->events->setVisualizationWidget(visualization);
64 }
67 }
@@ -1,89 +1,146
1 #include "Catalogue/CatalogueInspectorWidget.h"
1 #include "Catalogue/CatalogueInspectorWidget.h"
2 #include "ui_CatalogueInspectorWidget.h"
2 #include "ui_CatalogueInspectorWidget.h"
3
3
4 #include <Common/DateUtils.h>
4 #include <Common/DateUtils.h>
5 #include <DBCatalogue.h>
5 #include <DBCatalogue.h>
6 #include <DBEvent.h>
6 #include <DBEvent.h>
7 #include <DBTag.h>
7 #include <DBTag.h>
8
8
9 struct CatalogueInspectorWidget::CatalogueInspectorWidgetPrivate {
9 struct CatalogueInspectorWidget::CatalogueInspectorWidgetPrivate {
10 std::shared_ptr<DBCatalogue> m_DisplayedCatalogue = nullptr;
10 std::shared_ptr<DBCatalogue> m_DisplayedCatalogue = nullptr;
11 std::shared_ptr<DBEvent> m_DisplayedEvent = nullptr;
11 std::shared_ptr<DBEvent> m_DisplayedEvent = nullptr;
12
13 void connectCatalogueUpdateSignals(CatalogueInspectorWidget *inspector,
14 Ui::CatalogueInspectorWidget *ui);
15 void connectEventUpdateSignals(CatalogueInspectorWidget *inspector,
16 Ui::CatalogueInspectorWidget *ui);
12 };
17 };
13
18
14 CatalogueInspectorWidget::CatalogueInspectorWidget(QWidget *parent)
19 CatalogueInspectorWidget::CatalogueInspectorWidget(QWidget *parent)
15 : QWidget(parent),
20 : QWidget(parent),
16 ui(new Ui::CatalogueInspectorWidget),
21 ui(new Ui::CatalogueInspectorWidget),
17 impl{spimpl::make_unique_impl<CatalogueInspectorWidgetPrivate>()}
22 impl{spimpl::make_unique_impl<CatalogueInspectorWidgetPrivate>()}
18 {
23 {
19 ui->setupUi(this);
24 ui->setupUi(this);
20 showPage(Page::Empty);
25 showPage(Page::Empty);
21
26
22 connect(ui->leCatalogueName, &QLineEdit::editingFinished, [this]() {
27 impl->connectCatalogueUpdateSignals(this, ui);
23 if (ui->leCatalogueName->text() != impl->m_DisplayedCatalogue->getName()) {
28 impl->connectEventUpdateSignals(this, ui);
24 impl->m_DisplayedCatalogue->setName(ui->leCatalogueName->text());
29 }
25 emit this->catalogueUpdated(impl->m_DisplayedCatalogue);
30
31 CatalogueInspectorWidget::~CatalogueInspectorWidget()
32 {
33 delete ui;
34 }
35
36 void CatalogueInspectorWidget::CatalogueInspectorWidgetPrivate::connectCatalogueUpdateSignals(
37 CatalogueInspectorWidget *inspector, Ui::CatalogueInspectorWidget *ui)
38 {
39 connect(ui->leCatalogueName, &QLineEdit::editingFinished, [ui, inspector, this]() {
40 if (ui->leCatalogueName->text() != m_DisplayedCatalogue->getName()) {
41 m_DisplayedCatalogue->setName(ui->leCatalogueName->text());
42 emit inspector->catalogueUpdated(m_DisplayedCatalogue);
26 }
43 }
27 });
44 });
28
45
29 connect(ui->leCatalogueAuthor, &QLineEdit::editingFinished, [this]() {
46 connect(ui->leCatalogueAuthor, &QLineEdit::editingFinished, [ui, inspector, this]() {
30 if (ui->leCatalogueAuthor->text() != impl->m_DisplayedCatalogue->getAuthor()) {
47 if (ui->leCatalogueAuthor->text() != m_DisplayedCatalogue->getAuthor()) {
31 impl->m_DisplayedCatalogue->setAuthor(ui->leCatalogueAuthor->text());
48 m_DisplayedCatalogue->setAuthor(ui->leCatalogueAuthor->text());
32 emit this->catalogueUpdated(impl->m_DisplayedCatalogue);
49 emit inspector->catalogueUpdated(m_DisplayedCatalogue);
33 }
50 }
34 });
51 });
35 }
52 }
36
53
37 CatalogueInspectorWidget::~CatalogueInspectorWidget()
54 void CatalogueInspectorWidget::CatalogueInspectorWidgetPrivate::connectEventUpdateSignals(
55 CatalogueInspectorWidget *inspector, Ui::CatalogueInspectorWidget *ui)
38 {
56 {
39 delete ui;
57 connect(ui->leEventName, &QLineEdit::editingFinished, [ui, inspector, this]() {
58 if (ui->leEventName->text() != m_DisplayedEvent->getName()) {
59 m_DisplayedEvent->setName(ui->leEventName->text());
60 emit inspector->eventUpdated(m_DisplayedEvent);
61 }
62 });
63
64 connect(ui->leEventMission, &QLineEdit::editingFinished, [ui, inspector, this]() {
65 if (ui->leEventMission->text() != m_DisplayedEvent->getMission()) {
66 m_DisplayedEvent->setMission(ui->leEventMission->text());
67 emit inspector->eventUpdated(m_DisplayedEvent);
68 }
69 });
70
71 connect(ui->leEventProduct, &QLineEdit::editingFinished, [ui, inspector, this]() {
72 if (ui->leEventProduct->text() != m_DisplayedEvent->getProduct()) {
73 m_DisplayedEvent->setProduct(ui->leEventProduct->text());
74 emit inspector->eventUpdated(m_DisplayedEvent);
75 }
76 });
77
78 connect(ui->leEventTags, &QLineEdit::editingFinished, [ui, inspector, this]() {
79 // TODO
80 });
81
82 connect(ui->dateTimeEventTStart, &QDateTimeEdit::editingFinished, [ui, inspector, this]() {
83 auto time = DateUtils::secondsSinceEpoch(ui->dateTimeEventTStart->dateTime());
84 if (time != m_DisplayedEvent->getTStart()) {
85 m_DisplayedEvent->setTStart(time);
86 emit inspector->eventUpdated(m_DisplayedEvent);
87 }
88 });
89
90 connect(ui->dateTimeEventTEnd, &QDateTimeEdit::editingFinished, [ui, inspector, this]() {
91 auto time = DateUtils::secondsSinceEpoch(ui->dateTimeEventTEnd->dateTime());
92 if (time != m_DisplayedEvent->getTEnd()) {
93 m_DisplayedEvent->setTEnd(time);
94 emit inspector->eventUpdated(m_DisplayedEvent);
95 }
96 });
40 }
97 }
41
98
42 void CatalogueInspectorWidget::showPage(CatalogueInspectorWidget::Page page)
99 void CatalogueInspectorWidget::showPage(CatalogueInspectorWidget::Page page)
43 {
100 {
44 ui->stackedWidget->setCurrentIndex(static_cast<int>(page));
101 ui->stackedWidget->setCurrentIndex(static_cast<int>(page));
45 }
102 }
46
103
47 CatalogueInspectorWidget::Page CatalogueInspectorWidget::currentPage() const
104 CatalogueInspectorWidget::Page CatalogueInspectorWidget::currentPage() const
48 {
105 {
49 return static_cast<Page>(ui->stackedWidget->currentIndex());
106 return static_cast<Page>(ui->stackedWidget->currentIndex());
50 }
107 }
51
108
52 void CatalogueInspectorWidget::setEvent(const std::shared_ptr<DBEvent> &event)
109 void CatalogueInspectorWidget::setEvent(const std::shared_ptr<DBEvent> &event)
53 {
110 {
54 impl->m_DisplayedEvent = event;
111 impl->m_DisplayedEvent = event;
55
112
56 blockSignals(true);
113 blockSignals(true);
57
114
58 showPage(Page::EventProperties);
115 showPage(Page::EventProperties);
59 ui->leEventName->setText(event->getName());
116 ui->leEventName->setText(event->getName());
60 ui->leEventMission->setText(event->getMission());
117 ui->leEventMission->setText(event->getMission());
61 ui->leEventProduct->setText(event->getProduct());
118 ui->leEventProduct->setText(event->getProduct());
62
119
63 QString tagList;
120 QString tagList;
64 auto tags = event->getTags();
121 auto tags = event->getTags();
65 for (auto tag : tags) {
122 for (auto tag : tags) {
66 tagList += tag.getName();
123 tagList += tag.getName();
67 tagList += ' ';
124 tagList += ' ';
68 }
125 }
69
126
70 ui->leEventTags->setText(tagList);
127 ui->leEventTags->setText(tagList);
71
128
72 ui->dateTimeEventTStart->setDateTime(DateUtils::dateTime(event->getTStart()));
129 ui->dateTimeEventTStart->setDateTime(DateUtils::dateTime(event->getTStart()));
73 ui->dateTimeEventTEnd->setDateTime(DateUtils::dateTime(event->getTEnd()));
130 ui->dateTimeEventTEnd->setDateTime(DateUtils::dateTime(event->getTEnd()));
74
131
75 blockSignals(false);
132 blockSignals(false);
76 }
133 }
77
134
78 void CatalogueInspectorWidget::setCatalogue(const std::shared_ptr<DBCatalogue> &catalogue)
135 void CatalogueInspectorWidget::setCatalogue(const std::shared_ptr<DBCatalogue> &catalogue)
79 {
136 {
80 impl->m_DisplayedCatalogue = catalogue;
137 impl->m_DisplayedCatalogue = catalogue;
81
138
82 blockSignals(true);
139 blockSignals(true);
83
140
84 showPage(Page::CatalogueProperties);
141 showPage(Page::CatalogueProperties);
85 ui->leCatalogueName->setText(catalogue->getName());
142 ui->leCatalogueName->setText(catalogue->getName());
86 ui->leCatalogueAuthor->setText(catalogue->getAuthor());
143 ui->leCatalogueAuthor->setText(catalogue->getAuthor());
87
144
88 blockSignals(false);
145 blockSignals(false);
89 }
146 }
@@ -1,214 +1,222
1 <?xml version="1.0" encoding="UTF-8"?>
1 <?xml version="1.0" encoding="UTF-8"?>
2 <ui version="4.0">
2 <ui version="4.0">
3 <class>CatalogueInspectorWidget</class>
3 <class>CatalogueInspectorWidget</class>
4 <widget class="QWidget" name="CatalogueInspectorWidget">
4 <widget class="QWidget" name="CatalogueInspectorWidget">
5 <property name="geometry">
5 <property name="geometry">
6 <rect>
6 <rect>
7 <x>0</x>
7 <x>0</x>
8 <y>0</y>
8 <y>0</y>
9 <width>400</width>
9 <width>400</width>
10 <height>300</height>
10 <height>300</height>
11 </rect>
11 </rect>
12 </property>
12 </property>
13 <property name="windowTitle">
13 <property name="windowTitle">
14 <string>Form</string>
14 <string>Form</string>
15 </property>
15 </property>
16 <layout class="QVBoxLayout" name="verticalLayout_2">
16 <layout class="QVBoxLayout" name="verticalLayout_2">
17 <property name="leftMargin">
17 <property name="leftMargin">
18 <number>0</number>
18 <number>0</number>
19 </property>
19 </property>
20 <property name="topMargin">
20 <property name="topMargin">
21 <number>0</number>
21 <number>0</number>
22 </property>
22 </property>
23 <property name="rightMargin">
23 <property name="rightMargin">
24 <number>0</number>
24 <number>0</number>
25 </property>
25 </property>
26 <property name="bottomMargin">
26 <property name="bottomMargin">
27 <number>0</number>
27 <number>0</number>
28 </property>
28 </property>
29 <item>
29 <item>
30 <widget class="QFrame" name="frame">
30 <widget class="QFrame" name="frame">
31 <property name="frameShape">
31 <property name="frameShape">
32 <enum>QFrame::Box</enum>
32 <enum>QFrame::Box</enum>
33 </property>
33 </property>
34 <property name="frameShadow">
34 <property name="frameShadow">
35 <enum>QFrame::Sunken</enum>
35 <enum>QFrame::Sunken</enum>
36 </property>
36 </property>
37 <property name="lineWidth">
37 <property name="lineWidth">
38 <number>1</number>
38 <number>1</number>
39 </property>
39 </property>
40 <layout class="QVBoxLayout" name="verticalLayout">
40 <layout class="QVBoxLayout" name="verticalLayout">
41 <property name="leftMargin">
41 <property name="leftMargin">
42 <number>0</number>
42 <number>0</number>
43 </property>
43 </property>
44 <property name="topMargin">
44 <property name="topMargin">
45 <number>0</number>
45 <number>0</number>
46 </property>
46 </property>
47 <property name="rightMargin">
47 <property name="rightMargin">
48 <number>0</number>
48 <number>0</number>
49 </property>
49 </property>
50 <property name="bottomMargin">
50 <property name="bottomMargin">
51 <number>0</number>
51 <number>0</number>
52 </property>
52 </property>
53 <item>
53 <item>
54 <widget class="QStackedWidget" name="stackedWidget">
54 <widget class="QStackedWidget" name="stackedWidget">
55 <property name="currentIndex">
55 <property name="currentIndex">
56 <number>1</number>
56 <number>1</number>
57 </property>
57 </property>
58 <widget class="QWidget" name="emptyPage"/>
58 <widget class="QWidget" name="emptyPage"/>
59 <widget class="QWidget" name="catalogueInspectorPage">
59 <widget class="QWidget" name="catalogueInspectorPage">
60 <layout class="QGridLayout" name="gridLayout_2">
60 <layout class="QGridLayout" name="gridLayout_2">
61 <item row="1" column="0">
61 <item row="1" column="0">
62 <widget class="QLabel" name="label_7">
62 <widget class="QLabel" name="label_7">
63 <property name="text">
63 <property name="text">
64 <string>Name</string>
64 <string>Name</string>
65 </property>
65 </property>
66 </widget>
66 </widget>
67 </item>
67 </item>
68 <item row="1" column="1">
68 <item row="1" column="1">
69 <widget class="QLineEdit" name="leCatalogueName"/>
69 <widget class="QLineEdit" name="leCatalogueName"/>
70 </item>
70 </item>
71 <item row="2" column="0">
71 <item row="2" column="0">
72 <widget class="QLabel" name="label_8">
72 <widget class="QLabel" name="label_8">
73 <property name="text">
73 <property name="text">
74 <string>Author</string>
74 <string>Author</string>
75 </property>
75 </property>
76 </widget>
76 </widget>
77 </item>
77 </item>
78 <item row="2" column="1">
78 <item row="2" column="1">
79 <widget class="QLineEdit" name="leCatalogueAuthor">
79 <widget class="QLineEdit" name="leCatalogueAuthor">
80 <property name="text">
80 <property name="text">
81 <string/>
81 <string/>
82 </property>
82 </property>
83 </widget>
83 </widget>
84 </item>
84 </item>
85 <item row="3" column="1">
85 <item row="3" column="1">
86 <spacer name="verticalSpacer_2">
86 <spacer name="verticalSpacer_2">
87 <property name="orientation">
87 <property name="orientation">
88 <enum>Qt::Vertical</enum>
88 <enum>Qt::Vertical</enum>
89 </property>
89 </property>
90 <property name="sizeHint" stdset="0">
90 <property name="sizeHint" stdset="0">
91 <size>
91 <size>
92 <width>20</width>
92 <width>20</width>
93 <height>40</height>
93 <height>40</height>
94 </size>
94 </size>
95 </property>
95 </property>
96 </spacer>
96 </spacer>
97 </item>
97 </item>
98 <item row="0" column="0" colspan="2">
98 <item row="0" column="0" colspan="2">
99 <widget class="QLabel" name="label_9">
99 <widget class="QLabel" name="label_9">
100 <property name="font">
100 <property name="font">
101 <font>
101 <font>
102 <pointsize>10</pointsize>
102 <pointsize>10</pointsize>
103 <weight>75</weight>
103 <weight>75</weight>
104 <bold>true</bold>
104 <bold>true</bold>
105 </font>
105 </font>
106 </property>
106 </property>
107 <property name="text">
107 <property name="text">
108 <string>Catalogue Properties</string>
108 <string>Catalogue Properties</string>
109 </property>
109 </property>
110 </widget>
110 </widget>
111 </item>
111 </item>
112 </layout>
112 </layout>
113 </widget>
113 </widget>
114 <widget class="QWidget" name="eventInspectorPage">
114 <widget class="QWidget" name="eventInspectorPage">
115 <layout class="QGridLayout" name="gridLayout">
115 <layout class="QGridLayout" name="gridLayout">
116 <item row="5" column="1">
116 <item row="5" column="1">
117 <widget class="QDateTimeEdit" name="dateTimeEventTEnd"/>
117 <widget class="QDateTimeEdit" name="dateTimeEventTEnd">
118 <property name="timeSpec">
119 <enum>Qt::UTC</enum>
120 </property>
121 </widget>
118 </item>
122 </item>
119 <item row="4" column="0">
123 <item row="4" column="0">
120 <widget class="QLabel" name="label_4">
124 <widget class="QLabel" name="label_4">
121 <property name="text">
125 <property name="text">
122 <string>TStart</string>
126 <string>TStart</string>
123 </property>
127 </property>
124 </widget>
128 </widget>
125 </item>
129 </item>
126 <item row="6" column="0">
130 <item row="6" column="0">
127 <widget class="QLabel" name="label_6">
131 <widget class="QLabel" name="label_6">
128 <property name="text">
132 <property name="text">
129 <string>Tags</string>
133 <string>Tags</string>
130 </property>
134 </property>
131 </widget>
135 </widget>
132 </item>
136 </item>
133 <item row="3" column="0">
137 <item row="3" column="0">
134 <widget class="QLabel" name="label_3">
138 <widget class="QLabel" name="label_3">
135 <property name="text">
139 <property name="text">
136 <string>Product</string>
140 <string>Product</string>
137 </property>
141 </property>
138 </widget>
142 </widget>
139 </item>
143 </item>
140 <item row="3" column="1">
144 <item row="3" column="1">
141 <widget class="QLineEdit" name="leEventProduct"/>
145 <widget class="QLineEdit" name="leEventProduct"/>
142 </item>
146 </item>
143 <item row="5" column="0">
147 <item row="5" column="0">
144 <widget class="QLabel" name="label_5">
148 <widget class="QLabel" name="label_5">
145 <property name="text">
149 <property name="text">
146 <string>Tend</string>
150 <string>Tend</string>
147 </property>
151 </property>
148 </widget>
152 </widget>
149 </item>
153 </item>
150 <item row="4" column="1">
154 <item row="4" column="1">
151 <widget class="QDateTimeEdit" name="dateTimeEventTStart"/>
155 <widget class="QDateTimeEdit" name="dateTimeEventTStart">
156 <property name="timeSpec">
157 <enum>Qt::UTC</enum>
158 </property>
159 </widget>
152 </item>
160 </item>
153 <item row="2" column="0">
161 <item row="2" column="0">
154 <widget class="QLabel" name="label_2">
162 <widget class="QLabel" name="label_2">
155 <property name="text">
163 <property name="text">
156 <string>Mission</string>
164 <string>Mission</string>
157 </property>
165 </property>
158 </widget>
166 </widget>
159 </item>
167 </item>
160 <item row="1" column="1">
168 <item row="1" column="1">
161 <widget class="QLineEdit" name="leEventName"/>
169 <widget class="QLineEdit" name="leEventName"/>
162 </item>
170 </item>
163 <item row="1" column="0">
171 <item row="1" column="0">
164 <widget class="QLabel" name="label">
172 <widget class="QLabel" name="label">
165 <property name="text">
173 <property name="text">
166 <string>Name</string>
174 <string>Name</string>
167 </property>
175 </property>
168 </widget>
176 </widget>
169 </item>
177 </item>
170 <item row="2" column="1">
178 <item row="2" column="1">
171 <widget class="QLineEdit" name="leEventMission"/>
179 <widget class="QLineEdit" name="leEventMission"/>
172 </item>
180 </item>
173 <item row="6" column="1">
181 <item row="6" column="1">
174 <widget class="QLineEdit" name="leEventTags"/>
182 <widget class="QLineEdit" name="leEventTags"/>
175 </item>
183 </item>
176 <item row="7" column="1">
184 <item row="7" column="1">
177 <spacer name="verticalSpacer">
185 <spacer name="verticalSpacer">
178 <property name="orientation">
186 <property name="orientation">
179 <enum>Qt::Vertical</enum>
187 <enum>Qt::Vertical</enum>
180 </property>
188 </property>
181 <property name="sizeHint" stdset="0">
189 <property name="sizeHint" stdset="0">
182 <size>
190 <size>
183 <width>20</width>
191 <width>20</width>
184 <height>40</height>
192 <height>40</height>
185 </size>
193 </size>
186 </property>
194 </property>
187 </spacer>
195 </spacer>
188 </item>
196 </item>
189 <item row="0" column="0" colspan="2">
197 <item row="0" column="0" colspan="2">
190 <widget class="QLabel" name="label_10">
198 <widget class="QLabel" name="label_10">
191 <property name="font">
199 <property name="font">
192 <font>
200 <font>
193 <pointsize>10</pointsize>
201 <pointsize>10</pointsize>
194 <weight>75</weight>
202 <weight>75</weight>
195 <bold>true</bold>
203 <bold>true</bold>
196 </font>
204 </font>
197 </property>
205 </property>
198 <property name="text">
206 <property name="text">
199 <string>Event Properties</string>
207 <string>Event Properties</string>
200 </property>
208 </property>
201 </widget>
209 </widget>
202 </item>
210 </item>
203 </layout>
211 </layout>
204 </widget>
212 </widget>
205 </widget>
213 </widget>
206 </item>
214 </item>
207 </layout>
215 </layout>
208 </widget>
216 </widget>
209 </item>
217 </item>
210 </layout>
218 </layout>
211 </widget>
219 </widget>
212 <resources/>
220 <resources/>
213 <connections/>
221 <connections/>
214 </ui>
222 </ui>
General Comments 0
You need to be logged in to leave comments. Login now