diff --git a/core/core.pro b/core/core.pro index c204216..941301e 100644 --- a/core/core.pro +++ b/core/core.pro @@ -120,7 +120,9 @@ SOURCES += src/main.cpp\ src/abstractgaugeitem.cpp \ src/bargaugeitem.cpp \ src/gaugeutil.cpp \ - src/roundgaugeitem.cpp + src/roundgaugeitem.cpp \ + src/scalarparam.cpp \ + src/comboparam.cpp HEADERS += src/mainwindow.h \ @@ -168,7 +170,9 @@ HEADERS += src/mainwindow.h \ src/bargaugeitem.h \ src/gaugeutil.h \ src/roundgaugeitem.h \ - src/gaugeutil.h + src/gaugeutil.h \ + src/scalarparam.h \ + src/comboparam.h FORMS += src/mainwindow.ui \ src/comsettings.ui \ @@ -187,7 +191,10 @@ FORMS += src/mainwindow.ui \ src/emsstatus.ui \ src/configview.ui \ src/parameterview.ui \ - src/firmwaremetadata.ui + src/firmwaremetadata.ui \ + src/scalarparam.ui \ + src/comboparam.ui \ + src/parameterwidget.ui SUBDIRS += plugins OTHER_FILES += \ README.md \ diff --git a/core/src/comboparam.cpp b/core/src/comboparam.cpp new file mode 100644 index 0000000..50b4dba --- /dev/null +++ b/core/src/comboparam.cpp @@ -0,0 +1,44 @@ +#include "comboparam.h" +#include "ui_comboparam.h" + +ComboParam::ComboParam(QWidget *parent) : + QWidget(parent), + ui(new Ui::ComboParam) +{ + ui->setupUi(this); + connect(ui->comboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(currentIndexChanged(int))); +} + +ComboParam::~ComboParam() +{ + delete ui; +} +void ComboParam::setName(QString name) +{ + ui->label->setText(name); +} + +void ComboParam::setConfig(ConfigData *data) +{ + disconnect(ui->comboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(currentIndexChanged(int))); + ui->comboBox->addItems(data->getEnumValues()); + ui->comboBox->setCurrentIndex(data->value().toInt()); + m_data = data; + connect(ui->comboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(currentIndexChanged(int))); +} + +void ComboParam::saveValue() +{ + //m_data->setValue(ui->comboBox->currentIndex()); + m_data->saveToFlash(); +} +void ComboParam::dataUpdate() +{ + disconnect(ui->comboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(currentIndexChanged(int))); + ui->comboBox->setCurrentIndex(m_data->value().toInt()); + connect(ui->comboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(currentIndexChanged(int))); +} +void ComboParam::currentIndexChanged(int index) +{ + m_data->setValue(index); +} diff --git a/core/src/comboparam.h b/core/src/comboparam.h new file mode 100644 index 0000000..607fe88 --- /dev/null +++ b/core/src/comboparam.h @@ -0,0 +1,29 @@ +#ifndef COMBOPARAM_H +#define COMBOPARAM_H + +#include +#include "configdata.h" + +namespace Ui { +class ComboParam; +} + +class ComboParam : public QWidget +{ + Q_OBJECT + +public: + explicit ComboParam(QWidget *parent = 0); + ~ComboParam(); + void setName(QString name); + void setConfig(ConfigData *data); + void saveValue(); +private slots: + void dataUpdate(); + void currentIndexChanged(int index); +private: + Ui::ComboParam *ui; + ConfigData *m_data; +}; + +#endif // COMBOPARAM_H diff --git a/core/src/comboparam.ui b/core/src/comboparam.ui new file mode 100644 index 0000000..adc8b89 --- /dev/null +++ b/core/src/comboparam.ui @@ -0,0 +1,31 @@ + + + ComboParam + + + + 0 + 0 + 354 + 81 + + + + Form + + + + + + TextLabel + + + + + + + + + + + diff --git a/core/src/mainwindow.cpp b/core/src/mainwindow.cpp index 84a361e..5b1aaa1 100644 --- a/core/src/mainwindow.cpp +++ b/core/src/mainwindow.cpp @@ -1552,6 +1552,7 @@ void MainWindow::interrogationComplete() } windowsettings.endArray();*/ + parameterView->setActiveComms(emsComms); } void MainWindow::interrogateTaskStart(QString task, int sequence) { diff --git a/core/src/parameterview.cpp b/core/src/parameterview.cpp index 1667320..8a09a44 100644 --- a/core/src/parameterview.cpp +++ b/core/src/parameterview.cpp @@ -26,6 +26,11 @@ void ParameterView::addConfig(QString name,ConfigData *data) Q_UNUSED(data) } +void ParameterView::setActiveComms(EmsComms* comms) +{ + m_emsComms = comms; +} + void ParameterView::closeEvent(QCloseEvent *event) { event->ignore(); @@ -85,7 +90,15 @@ void ParameterView::generateDialog(QString title,QList fieldlist) for (int i=0;igetConfigList().contains(fieldlist[i].variable)) + { + widget->addParam(title,fieldlist[i],m_emsComms->getConfigData(fieldlist[i].variable)); + } + else + { + qDebug() << "Bad Variable:" << fieldlist[i].variable; + } + /*for (int j=0;j fieldlist) } } } -/* if (m_emsData) - { - if (m_emsData->hasLocalFlashBlock(m_memoryConfigBlockList[j].locationId())) - { - widget->updateValue(m_memoryConfigBlockList[j].locationId(),m_emsData->getLocalFlashBlock(m_memoryConfigBlockList[j].locationId())); - } - else if (m_emsData->hasLocalRamBlock(m_memoryConfigBlockList[j].locationId())) - { - widget->updateValue(m_memoryConfigBlockList[j].locationId(),m_emsData->getLocalRamBlock(m_memoryConfigBlockList[j].locationId())); - } - }*/ } - } + }*/ //fieldlist[i].condition } } diff --git a/core/src/parameterview.h b/core/src/parameterview.h index acc39c8..462e5cb 100644 --- a/core/src/parameterview.h +++ b/core/src/parameterview.h @@ -9,6 +9,7 @@ #include "configdata.h" #include "memorymetadata.h" #include "menusetup.h" +#include "emscomms.h" class ParameterView : public QWidget { Q_OBJECT @@ -21,8 +22,10 @@ class ParameterView : public QWidget void passMetaData(MemoryMetaData *metadata); void updateValues(); double calcAxis(unsigned short val,QList > metadata); - void addConfig(QString name,ConfigData *data); + void addConfig(QString name,ConfigData *data); + void setActiveComms(EmsComms* comms); private: + EmsComms *m_emsComms; MemoryMetaData *m_metaData; QList paramWidgetList; QMap lineEditToConfigBlockMap; diff --git a/core/src/parameterwidget.cpp b/core/src/parameterwidget.cpp index e37daab..ba1b0c6 100644 --- a/core/src/parameterwidget.cpp +++ b/core/src/parameterwidget.cpp @@ -4,27 +4,38 @@ #include #include #include "QsLog.h" +#include "configdata.h" ParameterWidget::ParameterWidget(QWidget *parent) : QWidget(parent) { - scrollArea = new QScrollArea(this); - QPushButton *saveButton = new QPushButton(this); - connect(saveButton,SIGNAL(clicked()),this,SLOT(saveButtonClicked())); - saveButton->setText("Save"); + ui.setupUi(this); + connect(ui.savePushButton,SIGNAL(clicked()),this,SLOT(saveButtonClicked())); //scrollWidget = new QWidget(); //scrollWidget->setLayout(new QVBoxLayout()); //scrollArea->setWidget(scrollWidget); - scrollArea->setLayout(new QVBoxLayout()); - mainLayout = new QVBoxLayout(); - this->setLayout(mainLayout); - mainLayout->addWidget(scrollArea); - mainLayout->addWidget(saveButton); - scrollArea->show(); + //scrollArea->setWidget(new QWidget()); + ui.scrollArea->widget()->setLayout(new QVBoxLayout()); + ui.scrollArea->widget()->layout()->setSizeConstraint(QLayout::SetMinAndMaxSize); + //scrollArea->setLayout(new QVBoxLayout()); + //mainLayout = new QVBoxLayout(); + //this->setLayout(mainLayout); + //mainLayout->addWidget(scrollArea); + //mainLayout->addWidget(saveButton); + //scrollArea->show(); //scrollWidget->show(); //scrollArea->show(); } void ParameterWidget::saveButtonClicked() { + for (int i=0;isaveValue(); + } + for (int i=0;isaveValue(); + } + return; for (int i=0;ishow(); + //label->setText(field.title); + //layout->addWidget(label); + //QLineEdit *edit = new QLineEdit(scrollArea); + //m_nameToLineEditMap[field.variable] = edit; + //edit->show(); + //layout->addWidget(edit); + if (data->type() == ConfigData::VALUE) + { + ScalarParam *param = new ScalarParam(ui.scrollArea->widget()); + param->show(); + param->setName(field.title); + param->setConfig(data); + QHBoxLayout *layout = new QHBoxLayout(); + layout->addWidget(param); + ui.scrollArea->widget()->layout()->addItem(layout); + m_scalarParamList.append(param); + } + else if (data->type() == ConfigData::ENUM) + { + ComboParam *param = new ComboParam(ui.scrollArea->widget()); + param->show(); + param->setName(field.title); + param->setConfig(data); + QHBoxLayout *layout = new QHBoxLayout(); + layout->addWidget(param); + ui.scrollArea->widget()->layout()->addItem(layout); + //m_scalarParamList.append(param); + m_comboParamList.append(param); + } +} -void ParameterWidget::addParam(QString title,DialogField field,ConfigBlock block) +/*void ParameterWidget::addParam(QString title,DialogField field,ConfigBlock block) { QLOG_DEBUG() << "Title:" << title; QLOG_DEBUG() << "Field:" << field.title << field.variable; @@ -135,7 +183,7 @@ void ParameterWidget::addParam(QString title,DialogField field,ConfigBlock block //lineEditToConfigBlockMap[edit] = m_memoryConfigBlockList[j]; } //fieldlist[i].condition -} +}*/ double ParameterWidget::calcAxis(int val,QList > metadata) { if (metadata.size() == 0) diff --git a/core/src/parameterwidget.h b/core/src/parameterwidget.h index b6734b5..cb1ae2a 100644 --- a/core/src/parameterwidget.h +++ b/core/src/parameterwidget.h @@ -6,24 +6,33 @@ #include #include #include "configblock.h" +#include "configdata.h" #include "dialogfield.h" +#include "scalarparam.h" +#include "comboparam.h" +#include "ui_parameterwidget.h" + class ParameterWidget : public QWidget { Q_OBJECT public: explicit ParameterWidget(QWidget *parent = 0); - void addParam(QString title,DialogField field,ConfigBlock block); + //void addParam(QString title,DialogField field,ConfigBlock block); QList getLocationIdList(); void updateValue(unsigned short locationid,QByteArray block); void setValueRamFlash(unsigned short locationid,bool isRam,bool isFlash); + void addParam(QString title,DialogField field,ConfigData* data); private: double calcAxis(int val,QList > metadata); int backConvertAxis(double val,QList > metadata); QList > m_fieldConfigList; QMap m_nameToLineEditMap; - QScrollArea *scrollArea; - QVBoxLayout *mainLayout; - QWidget *scrollWidget; + //QScrollArea *scrollArea; + //QVBoxLayout *mainLayout; + //QWidget *scrollWidget; + QList m_scalarParamList; + QList m_comboParamList; + Ui::ParameterWidget ui; private slots: void saveButtonClicked(); signals: diff --git a/core/src/parameterwidget.ui b/core/src/parameterwidget.ui new file mode 100644 index 0000000..73da34b --- /dev/null +++ b/core/src/parameterwidget.ui @@ -0,0 +1,45 @@ + + + ParameterWidget + + + + 0 + 0 + 359 + 518 + + + + Form + + + + + + true + + + + + 0 + 0 + 339 + 461 + + + + + + + + + Save + + + + + + + + diff --git a/core/src/scalarparam.cpp b/core/src/scalarparam.cpp new file mode 100644 index 0000000..f3f318c --- /dev/null +++ b/core/src/scalarparam.cpp @@ -0,0 +1,39 @@ +#include "scalarparam.h" +#include "ui_scalarparam.h" + +ScalarParam::ScalarParam(QWidget *parent) : + QWidget(parent), + ui(new Ui::ScalarParam) +{ + ui->setupUi(this); + connect(ui->lineEdit,SIGNAL(editingFinished()),this,SLOT(lineEditFinished())); +} + +ScalarParam::~ScalarParam() +{ + delete ui; +} +void ScalarParam::setName(QString name) +{ + ui->label->setText(name); +} + +void ScalarParam::setConfig(ConfigData *data) +{ + connect(data,SIGNAL(update()),this,SLOT(dataUpdate())); + m_data = data; + ui->lineEdit->setText(QString::number(m_data->value().toFloat(),'f',2)); +} +void ScalarParam::dataUpdate() +{ + ui->lineEdit->setText(QString::number(m_data->value().toFloat(),'f',2)); +} +void ScalarParam::saveValue() +{ + //m_data->setValue(ui->lineEdit->text().toFloat()); + m_data->saveToFlash(); +} +void ScalarParam::lineEditFinished() +{ + m_data->setValue(ui->lineEdit->text().toFloat()); +} diff --git a/core/src/scalarparam.h b/core/src/scalarparam.h new file mode 100644 index 0000000..f469743 --- /dev/null +++ b/core/src/scalarparam.h @@ -0,0 +1,29 @@ +#ifndef SCALARPARAM_H +#define SCALARPARAM_H + +#include +#include "configdata.h" + +namespace Ui { +class ScalarParam; +} + +class ScalarParam : public QWidget +{ + Q_OBJECT + +public: + explicit ScalarParam(QWidget *parent = 0); + ~ScalarParam(); + void setName(QString name); + void setConfig(ConfigData *data); + void saveValue(); +private slots: + void dataUpdate(); + void lineEditFinished(); +private: + Ui::ScalarParam *ui; + ConfigData *m_data; +}; + +#endif // SCALARPARAM_H diff --git a/core/src/scalarparam.ui b/core/src/scalarparam.ui new file mode 100644 index 0000000..ccb8a1e --- /dev/null +++ b/core/src/scalarparam.ui @@ -0,0 +1,31 @@ + + + ScalarParam + + + + 0 + 0 + 361 + 68 + + + + Form + + + + + + TextLabel + + + + + + + + + + + diff --git a/lib/core/configdata.h b/lib/core/configdata.h index c590250..8c5ac7d 100644 --- a/lib/core/configdata.h +++ b/lib/core/configdata.h @@ -54,7 +54,7 @@ #include #include #include - +#include class ConfigData : public QObject { Q_OBJECT @@ -62,7 +62,8 @@ class ConfigData : public QObject enum Type { ARRAY, - VALUE + VALUE, + ENUM }; virtual void setData(QByteArray data)=0; @@ -70,6 +71,13 @@ class ConfigData : public QObject virtual Q_INVOKABLE QVariant value()=0; virtual Q_INVOKABLE void setValue(QVariant value)=0; virtual Q_INVOKABLE int elements()=0; + virtual Type type()=0; + virtual QStringList getEnumValues()=0; + virtual void setEnumValues(QStringList values)=0; + virtual void setEnumBits(int min,int max)=0; + virtual int getMinEnumBit()=0; + virtual int getMaxEnumBit()=0; + virtual void saveToFlash()=0; signals: void update(); }; diff --git a/plugins/freeems/feconfigdata.cpp b/plugins/freeems/feconfigdata.cpp index 2ecaa37..15402a3 100644 --- a/plugins/freeems/feconfigdata.cpp +++ b/plugins/freeems/feconfigdata.cpp @@ -7,7 +7,7 @@ FEConfigData::FEConfigData() : ConfigData() FEConfigData::FEConfigData(QString name,QString type, QString override,unsigned short locationid, unsigned short size,unsigned short elementsize,unsigned short offset, QList > calc) : ConfigData() { m_name = name; - m_type = type; + m_typeString = type; m_sizeOverride = override; m_locationId = locationid; m_size = size; @@ -25,7 +25,7 @@ QVariant FEConfigData::value() } void FEConfigData::setValue(QVariant value) { - if (m_type == "value") + if (m_typeString == "value") { double dval = value.toDouble(); unsigned short usval = reverseCalcAxis(dval,m_calc); @@ -36,7 +36,7 @@ void FEConfigData::setValue(QVariant value) } emit saveSingleDataToFlash(m_locationId,m_offset,m_elementSize,data); } - else if (m_type == "array") + else if (m_typeString == "array") { //It will be a list of doubles? QVariantList list = value.toList(); @@ -60,7 +60,7 @@ void FEConfigData::setValue(QVariant value) void FEConfigData::setData(QByteArray data) { - if (m_type == "value") + if (m_typeString == "value") { if (data.size() >= (m_offset + m_elementSize)) { @@ -79,7 +79,7 @@ void FEConfigData::setData(QByteArray data) } } - else if (m_type == "array") + else if (m_typeString == "array") { qDebug() << "Array type"; QByteArray newdata = data.mid(m_offset,m_size); diff --git a/plugins/freeems/feconfigdata.h b/plugins/freeems/feconfigdata.h index 120050d..cacbb30 100644 --- a/plugins/freeems/feconfigdata.h +++ b/plugins/freeems/feconfigdata.h @@ -14,7 +14,7 @@ class FEConfigData : public ConfigData FEConfigData(QString name,QString type, QString override,unsigned short locationid, unsigned short size,unsigned short elementsize,unsigned short offset, QList > calc); void setName(QString name) { m_name = name; } - void setType(QString type) { m_type = type; } + void setType(QString type) { m_typeString = type; } void setSizeOverride(QString override) { m_sizeOverride = override; } void setSizeOverrideMult(double mult) { m_sizeOverrideMult = mult; } void setLocationId(unsigned short locationid) { m_locationId = locationid; } @@ -23,7 +23,8 @@ class FEConfigData : public ConfigData void setOffset(unsigned short offset) { m_offset = offset; } void setCalc(QList > calc) { m_calc = calc; } QString name() { return m_name; } - QString type() { return m_type; } + QString typeString() { return m_typeString; } + Type type() { return VALUE; } QString sizeOverride() { return m_sizeOverride; } double sizeOverrideMult() { return m_sizeOverrideMult; } unsigned short locationId() { return m_locationId; } @@ -40,7 +41,7 @@ class FEConfigData : public ConfigData private: QVariant m_value; QString m_name; - QString m_type; + QString m_typeString; QString m_sizeOverride; double m_sizeOverrideMult; unsigned short m_locationId;