mirror of
https://github.com/opentx/opentx.git
synced 2025-07-25 09:15:38 +03:00
Merge pull request #8160 from opentx/elecpower/crv_ref_add_model
Add shared curves ui data model to curve reference
This commit is contained in:
commit
061d04309a
11 changed files with 49 additions and 26 deletions
|
@ -39,7 +39,7 @@ set(firmwares_QT
|
|||
qt5_wrap_cpp(firmwares_SRCS ${firmwares_QT})
|
||||
|
||||
add_library(firmwares ${firmwares_SRCS} ${firmwares_HDRS})
|
||||
target_link_libraries(firmwares ${CPN_COMMON_LIB} Qt5::Core Qt5::Xml Qt5::Widgets)
|
||||
target_link_libraries(firmwares ${CPN_COMMON_LIB} datamodels Qt5::Core Qt5::Xml Qt5::Widgets)
|
||||
target_include_directories(firmwares
|
||||
PRIVATE
|
||||
${CMAKE_SOURCE_DIR}
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include "adjustmentreference.h"
|
||||
#include "helpers.h"
|
||||
#include "modeldata.h"
|
||||
#include "rawitemfilteredmodel.h"
|
||||
|
||||
const QString CurveReference::toString(const ModelData * model, bool verbose) const
|
||||
{
|
||||
|
@ -109,11 +110,14 @@ constexpr int CURVE_REF_UI_HIDE_NEGATIVE_CURVES { 0x04 };
|
|||
|
||||
// static
|
||||
bool CurveReferenceUIManager::firsttime { true };
|
||||
int CurveReferenceUIManager::flags{ 0 };
|
||||
bool CurveReferenceUIManager::hasCapabilityGvars{ false };
|
||||
int CurveReferenceUIManager::numCurves{ 0 };
|
||||
int CurveReferenceUIManager::flags { 0 };
|
||||
bool CurveReferenceUIManager::hasCapabilityGvars { false };
|
||||
int CurveReferenceUIManager::numCurves { 0 };
|
||||
RawItemFilteredModel * CurveReferenceUIManager::curveItemModel { nullptr };
|
||||
QStandardItemModel * CurveReferenceUIManager::tempModel { nullptr };
|
||||
|
||||
CurveReferenceUIManager::CurveReferenceUIManager(QComboBox * curveValueCB, CurveReference & curve, const ModelData & model, QObject * parent) :
|
||||
CurveReferenceUIManager::CurveReferenceUIManager(QComboBox * curveValueCB, CurveReference & curve, const ModelData & model,
|
||||
RawItemFilteredModel * curveItemModel, QObject * parent) :
|
||||
QObject(parent),
|
||||
curveTypeCB(nullptr),
|
||||
curveGVarCB(nullptr),
|
||||
|
@ -123,11 +127,12 @@ CurveReferenceUIManager::CurveReferenceUIManager(QComboBox * curveValueCB, Curve
|
|||
model(model),
|
||||
lock(false)
|
||||
{
|
||||
init();
|
||||
init(curveItemModel);
|
||||
}
|
||||
|
||||
CurveReferenceUIManager::CurveReferenceUIManager(QComboBox * curveTypeCB, QCheckBox * curveGVarCB, QSpinBox * curveValueSB, QComboBox * curveValueCB,
|
||||
CurveReference & curve, const ModelData & model, QObject * parent) :
|
||||
CurveReferenceUIManager::CurveReferenceUIManager(QComboBox * curveTypeCB, QCheckBox * curveGVarCB, QSpinBox * curveValueSB,
|
||||
QComboBox * curveValueCB, CurveReference & curve, const ModelData & model,
|
||||
RawItemFilteredModel * curveItemModel, QObject * parent) :
|
||||
QObject(parent),
|
||||
curveTypeCB(curveTypeCB),
|
||||
curveGVarCB(curveGVarCB),
|
||||
|
@ -137,20 +142,24 @@ CurveReferenceUIManager::CurveReferenceUIManager(QComboBox * curveTypeCB, QCheck
|
|||
model(model),
|
||||
lock(false)
|
||||
{
|
||||
init();
|
||||
init(curveItemModel);
|
||||
}
|
||||
|
||||
CurveReferenceUIManager::~CurveReferenceUIManager()
|
||||
{
|
||||
delete tempModel;
|
||||
}
|
||||
|
||||
void CurveReferenceUIManager::init()
|
||||
void CurveReferenceUIManager::init(RawItemFilteredModel * curveModel)
|
||||
{
|
||||
tempModel = new QStandardItemModel();
|
||||
|
||||
if (firsttime) {
|
||||
firsttime = false;
|
||||
Firmware * fw = getCurrentFirmware();
|
||||
hasCapabilityGvars = fw->getCapability(Gvars);
|
||||
numCurves = fw->getCapability(NumCurves);
|
||||
curveItemModel = curveModel;
|
||||
|
||||
if (!fw->getCapability(HasInputDiff))
|
||||
flags |= (CURVE_REF_UI_HIDE_DIFF | CURVE_REF_UI_HIDE_NEGATIVE_CURVES);
|
||||
|
@ -276,23 +285,22 @@ void CurveReferenceUIManager::populateTypeCB(QComboBox * cb, const CurveReferenc
|
|||
void CurveReferenceUIManager::populateValueCB(QComboBox * cb, const CurveReference & curveRef, const ModelData * model)
|
||||
{
|
||||
if (cb) {
|
||||
cb->clear();
|
||||
cb->setModel(tempModel); // do not want to clear/alter the shared curves model and set to nullptr is invalid
|
||||
|
||||
switch (curveRef.type) {
|
||||
case CurveReference::CURVE_REF_DIFF:
|
||||
case CurveReference::CURVE_REF_EXPO:
|
||||
cb->clear();
|
||||
Helpers::populateGVCB(*cb, curveRef.value, *model);
|
||||
break;
|
||||
case CurveReference::CURVE_REF_FUNC:
|
||||
cb->clear();
|
||||
for (int i = 1; i <= MAX_CURVE_REF_FUNC; i++) {
|
||||
cb->addItem(CurveReference::functionToString(i), i);
|
||||
}
|
||||
break;
|
||||
case CurveReference::CURVE_REF_CUSTOM:
|
||||
// TODO replace with ui datamodel
|
||||
for (int i = ((flags & CURVE_REF_UI_HIDE_NEGATIVE_CURVES) ? 0 : -numCurves); i <= numCurves; i++) {
|
||||
cb->addItem(CurveReference(CurveReference::CURVE_REF_CUSTOM, i).toString(model, false), i);
|
||||
}
|
||||
cb->setModel(curveItemModel);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
|
@ -25,9 +25,11 @@
|
|||
#include <QComboBox>
|
||||
#include <QCheckBox>
|
||||
#include <QSpinBox>
|
||||
#include <QStandardItemModel>
|
||||
|
||||
|
||||
class ModelData;
|
||||
class RawItemFilteredModel;
|
||||
|
||||
class CurveReference {
|
||||
|
||||
|
@ -83,11 +85,12 @@ class CurveReferenceUIManager : public QObject {
|
|||
Q_OBJECT
|
||||
|
||||
public:
|
||||
CurveReferenceUIManager(QComboBox *curveValueCB, CurveReference & curve, const ModelData & model, QObject * parent = nullptr);
|
||||
CurveReferenceUIManager(QComboBox *curveValueCB, CurveReference & curve, const ModelData & model,
|
||||
RawItemFilteredModel * curveItemModel, QObject * parent = nullptr);
|
||||
CurveReferenceUIManager(QComboBox *curveTypeCB, QCheckBox *curveGVarCB, QSpinBox *curveValueSB, QComboBox *curveValueCB,
|
||||
CurveReference & curve, const ModelData & model, QObject * parent = nullptr);
|
||||
CurveReference & curve, const ModelData & model, RawItemFilteredModel * curveItemModel, QObject * parent = nullptr);
|
||||
virtual ~CurveReferenceUIManager();
|
||||
void init();
|
||||
void init(RawItemFilteredModel * curveModel);
|
||||
void update();
|
||||
|
||||
protected slots:
|
||||
|
@ -109,6 +112,8 @@ class CurveReferenceUIManager : public QObject {
|
|||
static int flags;
|
||||
static bool hasCapabilityGvars;
|
||||
static int numCurves;
|
||||
static RawItemFilteredModel * curveItemModel;
|
||||
static QStandardItemModel * tempModel;
|
||||
|
||||
static void populateTypeCB(QComboBox * cb, const CurveReference & curveRef);
|
||||
static void populateValueCB(QComboBox * cb, const CurveReference & curveRef, const ModelData * model = nullptr);
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
|
||||
ExpoDialog::ExpoDialog(QWidget *parent, ModelData & model, ExpoData *expoData, GeneralSettings & generalSettings,
|
||||
Firmware * firmware, QString & inputName, RawItemFilteredModel * rawSourceModel,
|
||||
RawItemFilteredModel * rawSwitchModel) :
|
||||
RawItemFilteredModel * rawSwitchModel, RawItemFilteredModel * curveItemModel) :
|
||||
QDialog(parent),
|
||||
ui(new Ui::ExpoDialog),
|
||||
model(model),
|
||||
|
@ -50,7 +50,7 @@ ExpoDialog::ExpoDialog(QWidget *parent, ModelData & model, ExpoData *expoData, G
|
|||
|
||||
gvWeightGroup = new GVarGroup(ui->weightGV, ui->weightSB, ui->weightCB, ed->weight, model, 100, -100, 100);
|
||||
gvOffsetGroup = new GVarGroup(ui->offsetGV, ui->offsetSB, ui->offsetCB, ed->offset, model, 0, -100, 100);
|
||||
curveGroup = new CurveReferenceUIManager(ui->curveTypeCB, ui->curveGVarCB, ui->curveValueSB, ui->curveValueCB, ed->curve, model, this);
|
||||
curveGroup = new CurveReferenceUIManager(ui->curveTypeCB, ui->curveGVarCB, ui->curveValueSB, ui->curveValueCB, ed->curve, model, curveItemModel, this);
|
||||
|
||||
ui->switchesCB->setModel(rawSwitchModel);
|
||||
ui->switchesCB->setCurrentIndex(ui->switchesCB->findData(ed->swtch.toValue()));
|
||||
|
|
|
@ -38,7 +38,7 @@ class ExpoDialog : public QDialog {
|
|||
public:
|
||||
ExpoDialog(QWidget *parent, ModelData & model, ExpoData *expodata, GeneralSettings & generalSettings,
|
||||
Firmware * firmware, QString & inputName, RawItemFilteredModel * rawSourceItemModel,
|
||||
RawItemFilteredModel * rawSwitchItemModel);
|
||||
RawItemFilteredModel * rawSwitchItemModel, RawItemFilteredModel * curveItemModel);
|
||||
~ExpoDialog();
|
||||
|
||||
protected:
|
||||
|
|
|
@ -37,6 +37,10 @@ InputsPanel::InputsPanel(QWidget *parent, ModelData & model, GeneralSettings & g
|
|||
connect(rawSwitchFilteredModel, &RawItemFilteredModel::dataAboutToBeUpdated, this, &InputsPanel::onModelDataAboutToBeUpdated);
|
||||
connect(rawSwitchFilteredModel, &RawItemFilteredModel::dataUpdateComplete, this, &InputsPanel::onModelDataUpdateComplete);
|
||||
|
||||
curveFilteredModel = new RawItemFilteredModel(commonItemModels->curveItemModel(), RawItemFilteredModel::AllFilter, this);
|
||||
connect(curveFilteredModel, &RawItemFilteredModel::dataAboutToBeUpdated, this, &InputsPanel::onModelDataAboutToBeUpdated);
|
||||
connect(curveFilteredModel, &RawItemFilteredModel::dataUpdateComplete, this, &InputsPanel::onModelDataUpdateComplete);
|
||||
|
||||
inputsCount = firmware->getCapability(VirtualInputs);
|
||||
if (inputsCount == 0)
|
||||
inputsCount = CPN_MAX_STICKS;
|
||||
|
@ -190,7 +194,7 @@ void InputsPanel::gm_openExpo(int index)
|
|||
if (firmware->getCapability(VirtualInputs))
|
||||
inputName = model->inputNames[ed.chn];
|
||||
|
||||
ExpoDialog *dlg = new ExpoDialog(this, *model, &ed, generalSettings, firmware, inputName, rawSourceFilteredModel, rawSwitchFilteredModel);
|
||||
ExpoDialog *dlg = new ExpoDialog(this, *model, &ed, generalSettings, firmware, inputName, rawSourceFilteredModel, rawSwitchFilteredModel, curveFilteredModel);
|
||||
if (dlg->exec()) {
|
||||
model->expoData[index] = ed;
|
||||
if (firmware->getCapability(VirtualInputs))
|
||||
|
|
|
@ -75,6 +75,7 @@ class InputsPanel : public ModelPanel
|
|||
CommonItemModels * commonItemModels;
|
||||
RawItemFilteredModel *rawSourceFilteredModel;
|
||||
RawItemFilteredModel *rawSwitchFilteredModel;
|
||||
RawItemFilteredModel *curveFilteredModel;
|
||||
|
||||
int getExpoIndex(unsigned int dch);
|
||||
bool gm_insertExpo(int idx);
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
#include "helpers.h"
|
||||
|
||||
MixerDialog::MixerDialog(QWidget *parent, ModelData & model, MixData * mixdata, GeneralSettings & generalSettings, Firmware * firmware,
|
||||
RawItemFilteredModel * rawSourceModel, RawItemFilteredModel * rawSwitchModel) :
|
||||
RawItemFilteredModel * rawSourceModel, RawItemFilteredModel * rawSwitchModel, RawItemFilteredModel * curveItemModel) :
|
||||
QDialog(parent),
|
||||
ui(new Ui::MixerDialog),
|
||||
model(model),
|
||||
|
@ -52,7 +52,7 @@ MixerDialog::MixerDialog(QWidget *parent, ModelData & model, MixData * mixdata,
|
|||
|
||||
gvWeightGroup = new GVarGroup(ui->weightGV, ui->weightSB, ui->weightCB, md->weight, model, 100, -limit, limit);
|
||||
gvOffsetGroup = new GVarGroup(ui->offsetGV, ui->offsetSB, ui->offsetCB, md->sOffset, model, 0, -limit, limit);
|
||||
curveGroup = new CurveReferenceUIManager(ui->curveTypeCB, ui->curveGVarCB, ui->curveValueSB, ui->curveValueCB, md->curve, model, this);
|
||||
curveGroup = new CurveReferenceUIManager(ui->curveTypeCB, ui->curveGVarCB, ui->curveValueSB, ui->curveValueCB, md->curve, model, curveItemModel, this);
|
||||
|
||||
ui->MixDR_CB->setChecked(md->noExpo == 0);
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@ class MixerDialog : public QDialog {
|
|||
Q_OBJECT
|
||||
public:
|
||||
MixerDialog(QWidget *parent, ModelData & model, MixData *mixdata, GeneralSettings & generalSettings, Firmware * firmware,
|
||||
RawItemFilteredModel * rawSourceModel, RawItemFilteredModel * rawSwitchModel);
|
||||
RawItemFilteredModel * rawSourceModel, RawItemFilteredModel * rawSwitchModel, RawItemFilteredModel * curveItemModel);
|
||||
~MixerDialog();
|
||||
|
||||
protected:
|
||||
|
|
|
@ -37,6 +37,10 @@ MixesPanel::MixesPanel(QWidget *parent, ModelData & model, GeneralSettings & gen
|
|||
connect(rawSwitchFilteredModel, &RawItemFilteredModel::dataAboutToBeUpdated, this, &MixesPanel::onModelDataAboutToBeUpdated);
|
||||
connect(rawSwitchFilteredModel, &RawItemFilteredModel::dataUpdateComplete, this, &MixesPanel::onModelDataUpdateComplete);
|
||||
|
||||
curveFilteredModel = new RawItemFilteredModel(commonItemModels->curveItemModel(), RawItemFilteredModel::AllFilter, this);
|
||||
connect(curveFilteredModel, &RawItemFilteredModel::dataAboutToBeUpdated, this, &MixesPanel::onModelDataAboutToBeUpdated);
|
||||
connect(curveFilteredModel, &RawItemFilteredModel::dataUpdateComplete, this, &MixesPanel::onModelDataUpdateComplete);
|
||||
|
||||
QGridLayout * mixesLayout = new QGridLayout(this);
|
||||
|
||||
mixersListWidget = new MixersListWidget(this, false); // TODO enum
|
||||
|
@ -185,7 +189,7 @@ void MixesPanel::gm_openMix(int index)
|
|||
|
||||
MixData mixd(model->mixData[index]);
|
||||
|
||||
MixerDialog *dlg = new MixerDialog(this, *model, &mixd, generalSettings, firmware, rawSourceFilteredModel, rawSwitchFilteredModel);
|
||||
MixerDialog *dlg = new MixerDialog(this, *model, &mixd, generalSettings, firmware, rawSourceFilteredModel, rawSwitchFilteredModel, curveFilteredModel);
|
||||
if(dlg->exec()) {
|
||||
model->mixData[index] = mixd;
|
||||
emit modified();
|
||||
|
|
|
@ -71,6 +71,7 @@ class MixesPanel : public ModelPanel
|
|||
CommonItemModels * commonItemModels;
|
||||
RawItemFilteredModel *rawSourceFilteredModel;
|
||||
RawItemFilteredModel *rawSwitchFilteredModel;
|
||||
RawItemFilteredModel *curveFilteredModel;
|
||||
|
||||
int getMixerIndex(unsigned int dch);
|
||||
bool gm_insertMix(int idx);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue