qt: save parametrization vector data

This commit is contained in:
jussi 2019-12-12 13:12:22 +02:00
parent faff24ac28
commit 5096296ff0
8 changed files with 61 additions and 14 deletions

View File

@ -129,6 +129,16 @@ void AssignableEditorDelegate::setModelData(QWidget *editor, QAbstractItemModel
model->setData(index, a_editor->text(), Qt::DisplayRole);
}
if (v_data.canConvert<AssignableParametrizationData>()) {
auto p_editor = static_cast<AssignableParametrizationEditor*>(editor);
auto data = qvariant_cast<AssignableParametrizationData>(v_data);
QVariant v;
v.setValue(p_editor->data());
model->setData(index, v, Qt::UserRole);
}
// Set original size
model->setData(index, m_originalItemSize, Qt::SizeHintRole);
m_spanAllColumns = false;

View File

@ -14,12 +14,13 @@ private:
ReadableData m_parameterReadable; // Readable node that the recepient is parametrized from
AssignableData m_controlledAssignable;
std::chrono::milliseconds m_updateInterval;
QVector <qreal> m_xVector;
QVector <qreal> m_yVector;
QVector <QPointF> m_pointsVector;
public:
AssignableParametrizationData() {};
AssignableParametrizationData(AssignableData &data) {m_controlledAssignable = data;}
const AssignableData assignableData() {return m_controlledAssignable;}
const QVector <QPointF> pointsVector() {return m_pointsVector;}
void setPointsVector(const QVector <QPointF> vector) {m_pointsVector = vector;}
};
Q_DECLARE_METATYPE(AssignableParametrizationData);

View File

@ -33,6 +33,7 @@ AssignableParametrizationEditor::AssignableParametrizationEditor(QWidget *parent
m_stackedWidget->addWidget((m_editorWidget = new GraphEditor));
connect(m_editButton, &QPushButton::clicked, [=]() {
m_editorWidget->dragChartView()->setVector(m_parametrizationData.pointsVector());
m_stackedWidget->setCurrentWidget(m_editorWidget);
emit expansionSizeRequested(QSize(200, 300));
});
@ -42,6 +43,12 @@ AssignableParametrizationEditor::AssignableParametrizationEditor(QWidget *parent
emit expansionDisableRequested();
});
connect(m_editorWidget, &GraphEditor::saved, [=]() {
m_stackedWidget->setCurrentWidget(m_initialWidget);
emit expansionDisableRequested();
m_parametrizationData.setPointsVector(m_editorWidget->dragChartView()->vector());
});
layout()->addWidget(m_stackedWidget);
layout()->setMargin(0);
}
@ -50,4 +57,17 @@ void AssignableParametrizationEditor::setData(AssignableParametrizationData &dat
m_parametrizationData = data;
// Update y-axis label
m_editorWidget->dragChartView()->yAxis()->setTitleText(m_parametrizationData.assignableData().name);
// Set y-axis range
switch (m_parametrizationData.assignableData().m_rangeInfo.range_data_type) {
case TC_ASSIGNABLE_RANGE_DOUBLE:
m_editorWidget->dragChartView()->yAxis()->setMin(m_parametrizationData.assignableData().m_rangeInfo.double_range.min);
m_editorWidget->dragChartView()->yAxis()->setMax(m_parametrizationData.assignableData().m_rangeInfo.double_range.max);
break;
case TC_ASSIGNABLE_RANGE_INT:
m_editorWidget->dragChartView()->yAxis()->setMin(m_parametrizationData.assignableData().m_rangeInfo.int_range.min);
m_editorWidget->dragChartView()->yAxis()->setMax(m_parametrizationData.assignableData().m_rangeInfo.int_range.max);
break;
default:
break;
}
}

View File

@ -14,6 +14,7 @@ class AssignableParametrizationEditor : public AbstractExpandableItemEditor {
public:
AssignableParametrizationEditor(QWidget *parent = nullptr);
void setData(AssignableParametrizationData &data);
AssignableParametrizationData data() {return m_parametrizationData;}
private:
QVBoxLayout *m_layout;
QCheckBox *m_enabledCheckBox;

View File

@ -77,22 +77,27 @@ DragChartView::DragChartView(QWidget *parent) : QChartView(parent)
// Add filler item when point is added
connect(&m_series, &QScatterSeries::pointAdded, [=]() {
qDebug("item added");
auto item = new QGraphicsLineItem;
item->setPen(QPen(QBrush(QColor(Qt::blue)), 3));
m_lineFillerItems.append(item);
chart()->scene()->addItem(item);
});
for (int i = 0; i < 5; i++) {
m_series.append(i * 5, i * 5);
/*auto item = new QGraphicsLineItem;
item->setPen(QPen(QBrush(QColor(Qt::blue)), 3));
m_lineFillerItems.append(item);
chart()->scene()->addItem(item);*/
}
connect(&m_series, &QScatterSeries::pointsReplaced, [=]() {
// Delete filler items
for (auto item : m_lineFillerItems) {
delete item;
}
m_lineFillerItems.clear();
// Create new ones
for (int i = 0; i < m_series.pointsVector().length(); i++) {
auto item = new QGraphicsLineItem;
item->setPen(QPen(QBrush(QColor(Qt::blue)), 3));
m_lineFillerItems.append(item);
chart()->scene()->addItem(item);
}
});
connect(&m_series, &QScatterSeries::pressed, [=](QPointF point) {
m_dragCanStart = true;
m_latestScatterPoint = point;
@ -135,8 +140,6 @@ DragChartView::DragChartView(QWidget *parent) : QChartView(parent)
m_yAxis.setTitleBrush(QBrush(QPalette().color(QPalette::Text)));
m_xAxis.setTitleBrush(QBrush(QPalette().color(QPalette::Text)));
//setCursor(Qt::CrossCursor);
// Set cursor to indicate dragging
connect(this, &DragChartView::dragStarted, [=]() {
setCursor(Qt::ClosedHandCursor);
@ -162,6 +165,10 @@ DragChartView::DragChartView(QWidget *parent) : QChartView(parent)
});
}
void DragChartView::setVector(const QVector <QPointF> vector) {
m_series.replace(vector);
}
bool DragChartView::event(QEvent *event) {
//qDebug() << event->type();

View File

@ -12,6 +12,9 @@ public:
DragChartView(QWidget *parent = nullptr);
QValueAxis *xAxis() {return &m_xAxis;}
QValueAxis *yAxis() {return &m_yAxis;}
void setVector(const QVector <QPointF> vector);
QVector <QPointF> vector() {return m_series.pointsVector();}
protected:
bool event(QEvent*);
void mousePressEvent(QMouseEvent*);

View File

@ -22,5 +22,9 @@ GraphEditor::GraphEditor(QWidget *parent) : QWidget(parent) {
emit cancelled();
});
connect(m_saveButton, &QPushButton::clicked, [=]() {
emit saved();
});
setLayout(m_layout);
}

View File

@ -18,4 +18,5 @@ private:
QPushButton *m_cancelButton;
signals:
void cancelled();
void saved();
};