diff --git a/Software/PC_Application/Application b/Software/PC_Application/Application index 6a4470e..ad6f00c 100755 Binary files a/Software/PC_Application/Application and b/Software/PC_Application/Application differ diff --git a/Software/PC_Application/Traces/markerwidget.cpp b/Software/PC_Application/Traces/markerwidget.cpp index d9aef8a..9acc420 100644 --- a/Software/PC_Application/Traces/markerwidget.cpp +++ b/Software/PC_Application/Traces/markerwidget.cpp @@ -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); diff --git a/Software/PC_Application/Traces/tracemarker.cpp b/Software/PC_Application/Traces/tracemarker.cpp index 4314e8b..8799062 100644 --- a/Software/PC_Application/Traces/tracemarker.cpp +++ b/Software/PC_Application/Traces/tracemarker.cpp @@ -2,7 +2,8 @@ #include TraceMarker::TraceMarker() - : parentTrace(nullptr), + : editingFrequeny(false), + parentTrace(nullptr), frequency(1000000000), number(1), data(0) diff --git a/Software/PC_Application/Traces/tracemarker.h b/Software/PC_Application/Traces/tracemarker.h index 2ac3563..7163fa5 100644 --- a/Software/PC_Application/Traces/tracemarker.h +++ b/Software/PC_Application/Traces/tracemarker.h @@ -22,7 +22,7 @@ public: QPixmap& getSymbol(); int getNumber() const; - + bool editingFrequeny; public slots: void setFrequency(double freq); signals: diff --git a/Software/PC_Application/Traces/tracemarkermodel.cpp b/Software/PC_Application/Traces/tracemarkermodel.cpp index 636b64c..7421835 100644 --- a/Software/PC_Application/Traces/tracemarkermodel.cpp +++ b/Software/PC_Application/Traces/tracemarkermodel.cpp @@ -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); +} diff --git a/Software/PC_Application/Traces/tracemarkermodel.h b/Software/PC_Application/Traces/tracemarkermodel.h index 2774d07..40d4d99 100644 --- a/Software/PC_Application/Traces/tracemarkermodel.h +++ b/Software/PC_Application/Traces/tracemarkermodel.h @@ -5,9 +5,9 @@ #include "tracemarker.h" #include #include "tracemodel.h" -#include +#include -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