Do not overwrite marker frequency while editing

This commit is contained in:
Jan Käberich 2020-09-21 14:06:20 +02:00
parent ca3bc9c794
commit fb8ee5b355
6 changed files with 37 additions and 7 deletions

Binary file not shown.

View File

@ -8,7 +8,8 @@ MarkerWidget::MarkerWidget(TraceMarkerModel &model, QWidget *parent) :
{
ui->setupUi(this);
ui->tableView->setModel(&model);
ui->tableView->setItemDelegateForColumn(1, new TraceChooserDelegate);
ui->tableView->setItemDelegateForColumn(TraceMarkerModel::ColIndexTrace, new TraceChooserDelegate);
ui->tableView->setItemDelegateForColumn(TraceMarkerModel::ColIndexFreq, new TraceFrequencyDelegate);
connect(&model.getModel(), &TraceModel::traceAdded, this, &MarkerWidget::updatePersistentEditors);
connect(&model.getModel(), &TraceModel::traceRemoved, this, &MarkerWidget::updatePersistentEditors);

View File

@ -2,7 +2,8 @@
#include <QPainter>
TraceMarker::TraceMarker()
: parentTrace(nullptr),
: editingFrequeny(false),
parentTrace(nullptr),
frequency(1000000000),
number(1),
data(0)

View File

@ -22,7 +22,7 @@ public:
QPixmap& getSymbol();
int getNumber() const;
bool editingFrequeny;
public slots:
void setFrequency(double freq);
signals:

View File

@ -64,9 +64,14 @@ void TraceMarkerModel::removeMarker(TraceMarker *m)
}
}
void TraceMarkerModel::markerDataChanged(TraceMarker *)
void TraceMarkerModel::markerDataChanged(TraceMarker *m)
{
emit dataChanged(index(0, ColIndexFreq), index(markers.size()-1, ColIndexData));
if(m->editingFrequeny) {
// only update the other columns, do not override editor data
emit dataChanged(index(0, ColIndexData), index(markers.size()-1, ColIndexData));
} else {
emit dataChanged(index(0, ColIndexFreq), index(markers.size()-1, ColIndexData));
}
}
TraceMarker *TraceMarkerModel::marker(int index)
@ -228,3 +233,19 @@ void TraceChooserDelegate::setModelData(QWidget *editor, QAbstractItemModel *mod
auto c = (QComboBox*) editor;
markerModel->setData(index, c->itemData(c->currentIndex()));
}
QWidget *TraceFrequencyDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
auto model = (TraceMarkerModel*) index.model();
auto marker = model->getMarker()[index.row()];
marker->editingFrequeny = true;
return QStyledItemDelegate::createEditor(parent, option, index);
}
void TraceFrequencyDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{
auto markerModel = (TraceMarkerModel*) model;
auto marker = markerModel->getMarker()[index.row()];
marker->editingFrequeny = false;
QStyledItemDelegate::setModelData(editor, model, index);
}

View File

@ -5,9 +5,9 @@
#include "tracemarker.h"
#include <vector>
#include "tracemodel.h"
#include <QItemDelegate>
#include <QStyledItemDelegate>
class TraceChooserDelegate : public QItemDelegate
class TraceChooserDelegate : public QStyledItemDelegate
{
Q_OBJECT;
QWidget *createEditor(QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index) const override;
@ -15,6 +15,13 @@ class TraceChooserDelegate : public QItemDelegate
void setModelData(QWidget * editor, QAbstractItemModel * model, const QModelIndex & index) const override;
};
class TraceFrequencyDelegate : public QStyledItemDelegate
{
Q_OBJECT;
QWidget *createEditor(QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index) const override;
void setModelData(QWidget * editor, QAbstractItemModel * model, const QModelIndex & index) const override;
};
class TraceMarkerModel : public QAbstractTableModel
{
Q_OBJECT