feat: use any source for expo/weight/offset (#5220)

Co-authored-by: philmoz <phil.a.mitchell@gmail.com>
Co-authored-by: 3djc <3djc@gh.com>
Co-authored-by: elecpower <elecpower@users.noreply.github.com>
This commit is contained in:
philmoz
2024-07-26 20:51:21 +10:00
committed by GitHub
co-authored by philmoz 3djc elecpower
parent 326c58a7fd
commit 4b917b762c
87 changed files with 2751 additions and 1671 deletions
+9 -47
View File
@@ -104,6 +104,9 @@ ChannelsPanel::ChannelsPanel(QWidget * parent, ModelData & model, GeneralSetting
int gvid = dialogFilteredItemModels->registerItemModel(new FilteredItemModel(sharedItemModels->getItemModel(AbstractItemModel::IMID_GVarRef)), "GVarRef");
curveRefFilteredItemModels = new CurveRefFilteredFactory(sharedItemModels,
firmware->getCapability(HasMixerExpo) ? 0 : FilteredItemModel::PositiveFilter);
QStringList headerLabels;
headerLabels << "#";
if (channelNameMaxLen > 0) {
@@ -162,20 +165,15 @@ ChannelsPanel::ChannelsPanel(QWidget * parent, ModelData & model, GeneralSetting
if (IS_HORUS_OR_TARANIS(firmware->getBoard())) {
curveCB[i] = new QComboBox(this);
curveCB[i]->setProperty("index", i);
curveCB[i]->setSizeAdjustPolicy(QComboBox::AdjustToContents);
curveCB[i]->setModel(dialogFilteredItemModels->getItemModel(crvid));
connect(curveCB[i], SIGNAL(currentIndexChanged(int)), this, SLOT(curveEdited()));
tableLayout->addWidget(i, col++, curveCB[i]);
curveImage[i] = new CurveImageWidget(this);
int crvidx = model.limitData[i].curve.value - 1;
QColor pencolor = colors[crvidx >= 0 ? crvidx : Qt::black];
curveImage[i]->set(&model, firmware, sharedItemModels, crvidx, pencolor, 3);
curveImage[i]->setGrid(Qt::gray, 2);
curveImage[i]->setProperty("index", i);
curveImage[i]->setFixedSize(QSize(100, 100));
connect(curveImage[i], &CurveImageWidget::doubleClicked, this, &ChannelsPanel::on_curveImageDoubleClicked);
tableLayout->addWidget(i, col++, curveImage[i]);
curveGroup[i] = new CurveReferenceUIManager(curveCB[i], curveImage[i], model.limitData[i].curve, model, sharedItemModels,
curveRefFilteredItemModels, this);
}
// PPM center
@@ -201,6 +199,7 @@ ChannelsPanel::ChannelsPanel(QWidget * parent, ModelData & model, GeneralSetting
tableLayout->addWidget(i, col++, symlimitsChk[i]);
}
}
update();
disableMouseScrolling();
@@ -222,8 +221,10 @@ ChannelsPanel::~ChannelsPanel()
delete curveCB[i];
delete centerSB[i];
delete symlimitsChk[i];
delete curveGroup[i];
}
delete dialogFilteredItemModels;
delete curveRefFilteredItemModels;
}
void ChannelsPanel::symlimitsEdited()
@@ -270,24 +271,6 @@ void ChannelsPanel::invEdited()
}
}
void ChannelsPanel::curveEdited()
{
if (!lock) {
QComboBox *cb = qobject_cast<QComboBox*>(sender());
int index = cb->property("index").toInt();
// ignore unnecessary updates that could be triggered by updates to the data model
LimitData &ld = model->limitData[index];
if (ld.curve != CurveReference(CurveReference::CURVE_REF_CUSTOM, cb->itemData(cb->currentIndex()).toInt())) {
ld.curve = CurveReference(CurveReference::CURVE_REF_CUSTOM, cb->itemData(cb->currentIndex()).toInt());
curveImage[index]->setIndex(abs(ld.curve.value) - 1);
if (abs(ld.curve.value) > 0)
curveImage[index]->setPen(colors[abs(ld.curve.value) - 1], 3);
updateLine(index);
emit modified();
}
}
}
void ChannelsPanel::ppmcenterEdited()
{
if (!lock) {
@@ -317,16 +300,6 @@ void ChannelsPanel::updateLine(int i)
chnMin[i]->setValue(chn.min);
chnMax[i]->setValue(chn.max);
invCB[i]->setCurrentIndex((chn.revert) ? 1 : 0);
if (IS_HORUS_OR_TARANIS(firmware->getBoard())) {
curveCB[i]->setCurrentIndex(curveCB[i]->findData(chn.curve.value));
if (chn.curve.value == 0) {
curveImage[i]->setVisible(false);
}
else {
curveImage[i]->setVisible(true);
curveImage[i]->draw();
}
}
if (firmware->getCapability(PPMCenter)) {
centerSB[i]->setValue(chn.ppmCenter + 1500);
}
@@ -496,14 +469,3 @@ void ChannelsPanel::updateItemModels()
sharedItemModels->update(AbstractItemModel::IMUE_Channels);
emit modified();
}
void ChannelsPanel::on_curveImageDoubleClicked()
{
bool ok = false;
int index = sender()->property("index").toInt(&ok);
if (ok && curveImage[abs(index)]->edit()) {
updateLine(index);
emit modified();
}
}