Mixes create filtered lists once

This commit is contained in:
elecpower
2020-09-20 05:36:55 +10:00
parent e534749940
commit 775d8db1e9
4 changed files with 65 additions and 49 deletions
+32 -36
View File
@@ -25,7 +25,7 @@
#include "helpers.h" #include "helpers.h"
MixerDialog::MixerDialog(QWidget *parent, ModelData & model, MixData * mixdata, GeneralSettings & generalSettings, Firmware * firmware, MixerDialog::MixerDialog(QWidget *parent, ModelData & model, MixData * mixdata, GeneralSettings & generalSettings, Firmware * firmware,
RawSourceItemModel * rawSourceItemModel, RawSwitchItemModel * rawSwitchItemModel) : RawItemFilteredModel * rawSourceModel, RawItemFilteredModel * rawSwitchModel) :
QDialog(parent), QDialog(parent),
ui(new Ui::MixerDialog), ui(new Ui::MixerDialog),
model(model), model(model),
@@ -35,17 +35,15 @@ MixerDialog::MixerDialog(QWidget *parent, ModelData & model, MixData * mixdata,
lock(false) lock(false)
{ {
ui->setupUi(this); ui->setupUi(this);
rawSourceModel = new RawItemFilteredModel(rawSourceItemModel, RawSource::InputSourceGroups | RawSource::ScriptsGroup, this);
rawSwitchModel = new RawItemFilteredModel(rawSwitchItemModel, RawSwitch::MixesContext, this);
QRegExp rx(CHAR_FOR_NAMES_REGEX); QRegExp rx(CHAR_FOR_NAMES_REGEX);
QLabel * lb_fp[CPN_MAX_FLIGHT_MODES] = {ui->lb_FP0,ui->lb_FP1,ui->lb_FP2,ui->lb_FP3,ui->lb_FP4,ui->lb_FP5,ui->lb_FP6,ui->lb_FP7,ui->lb_FP8 }; QLabel * lb_fp[CPN_MAX_FLIGHT_MODES] = {ui->lb_FP0, ui->lb_FP1, ui->lb_FP2, ui->lb_FP3, ui->lb_FP4, ui->lb_FP5, ui->lb_FP6, ui->lb_FP7, ui->lb_FP8 };
QCheckBox * tmp[CPN_MAX_FLIGHT_MODES] = {ui->cb_FP0,ui->cb_FP1,ui->cb_FP2,ui->cb_FP3,ui->cb_FP4,ui->cb_FP5,ui->cb_FP6,ui->cb_FP7,ui->cb_FP8 }; QCheckBox * tmp[CPN_MAX_FLIGHT_MODES] = {ui->cb_FP0, ui->cb_FP1, ui->cb_FP2, ui->cb_FP3, ui->cb_FP4, ui->cb_FP5, ui->cb_FP6, ui->cb_FP7, ui->cb_FP8 };
for (int i=0; i<CPN_MAX_FLIGHT_MODES; i++) { for (int i = 0; i < CPN_MAX_FLIGHT_MODES; i++) {
cb_fp[i] = tmp[i]; cb_fp[i] = tmp[i];
} }
this->setWindowTitle(tr("DEST -> %1").arg(RawSource(SOURCE_TYPE_CH, md->destCh-1).toString(&model, &generalSettings))); this->setWindowTitle(tr("DEST -> %1").arg(RawSource(SOURCE_TYPE_CH, md->destCh - 1).toString(&model, &generalSettings)));
ui->sourceCB->setModel(rawSourceModel); ui->sourceCB->setModel(rawSourceModel);
ui->sourceCB->setCurrentIndex(ui->sourceCB->findData(md->srcRaw.toValue())); ui->sourceCB->setCurrentIndex(ui->sourceCB->findData(md->srcRaw.toValue()));
@@ -66,7 +64,7 @@ MixerDialog::MixerDialog(QWidget *parent, ModelData & model, MixData * mixdata,
} }
if (!firmware->getCapability(VirtualInputs)) { if (!firmware->getCapability(VirtualInputs)) {
for(int i=0; i < CPN_MAX_STICKS; i++) { for(int i = 0; i < CPN_MAX_STICKS; i++) {
ui->trimCB->addItem(firmware->getAnalogInputName(i)); ui->trimCB->addItem(firmware->getAnalogInputName(i));
} }
} }
@@ -86,7 +84,7 @@ MixerDialog::MixerDialog(QWidget *parent, ModelData & model, MixData * mixdata,
if (!firmware->getCapability(FlightModes)) { if (!firmware->getCapability(FlightModes)) {
ui->label_phases->hide(); ui->label_phases->hide();
for (int i=0; i<CPN_MAX_FLIGHT_MODES; i++) { for (int i = 0; i < CPN_MAX_FLIGHT_MODES; i++) {
lb_fp[i]->hide(); lb_fp[i]->hide();
cb_fp[i]->hide(); cb_fp[i]->hide();
} }
@@ -96,13 +94,13 @@ MixerDialog::MixerDialog(QWidget *parent, ModelData & model, MixData * mixdata,
ui->label_phases->setContextMenuPolicy(Qt::CustomContextMenu); ui->label_phases->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui->label_phases, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(label_phases_customContextMenuRequested(const QPoint &))); connect(ui->label_phases, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(label_phases_customContextMenuRequested(const QPoint &)));
int mask = 1; int mask = 1;
for (int i=0; i<CPN_MAX_FLIGHT_MODES ; i++) { for (int i = 0; i < CPN_MAX_FLIGHT_MODES ; i++) {
if ((md->flightModes & mask) == 0) { if ((md->flightModes & mask) == 0) {
cb_fp[i]->setChecked(true); cb_fp[i]->setChecked(true);
} }
mask <<= 1; mask <<= 1;
} }
for (int i=firmware->getCapability(FlightModes); i<CPN_MAX_FLIGHT_MODES; i++) { for (int i = firmware->getCapability(FlightModes); i < CPN_MAX_FLIGHT_MODES; i++) {
lb_fp[i]->hide(); lb_fp[i]->hide();
cb_fp[i]->hide(); cb_fp[i]->hide();
} }
@@ -114,22 +112,22 @@ MixerDialog::MixerDialog(QWidget *parent, ModelData & model, MixData * mixdata,
ui->mltpxCB->setCurrentIndex(md->mltpx); ui->mltpxCB->setCurrentIndex(md->mltpx);
int scale=firmware->getCapability(SlowScale); int scale=firmware->getCapability(SlowScale);
float range=firmware->getCapability(SlowRange); float range=firmware->getCapability(SlowRange);
ui->slowDownSB->setMaximum(range/scale); ui->slowDownSB->setMaximum(range / scale);
ui->slowDownSB->setSingleStep(1.0/scale); ui->slowDownSB->setSingleStep(1.0 / scale);
ui->slowDownSB->setDecimals((scale==1 ? 0 :1)); ui->slowDownSB->setDecimals((scale == 1 ? 0 : 1));
ui->slowDownSB->setValue((float)md->speedDown/scale); ui->slowDownSB->setValue((float)md->speedDown/scale);
ui->slowUpSB->setMaximum(range/scale); ui->slowUpSB->setMaximum(range / scale);
ui->slowUpSB->setSingleStep(1.0/scale); ui->slowUpSB->setSingleStep(1.0 / scale);
ui->slowUpSB->setDecimals((scale==1 ? 0 :1)); ui->slowUpSB->setDecimals((scale == 1 ? 0 : 1));
ui->slowUpSB->setValue((float)md->speedUp/scale); ui->slowUpSB->setValue((float)md->speedUp/scale);
ui->delayDownSB->setMaximum(range/scale); ui->delayDownSB->setMaximum(range / scale);
ui->delayDownSB->setSingleStep(1.0/scale); ui->delayDownSB->setSingleStep(1.0 / scale);
ui->delayDownSB->setDecimals((scale==1 ? 0 :1)); ui->delayDownSB->setDecimals((scale == 1 ? 0 : 1));
ui->delayDownSB->setValue((float)md->delayDown/scale); ui->delayDownSB->setValue((float)md->delayDown / scale);
ui->delayUpSB->setMaximum(range/scale); ui->delayUpSB->setMaximum(range / scale);
ui->delayUpSB->setSingleStep(1.0/scale); ui->delayUpSB->setSingleStep(1.0 / scale);
ui->delayUpSB->setDecimals((scale==1 ? 0 :1)); ui->delayUpSB->setDecimals((scale == 1 ? 0 : 1));
ui->delayUpSB->setValue((float)md->delayUp/scale); ui->delayUpSB->setValue((float)md->delayUp / scale);
QTimer::singleShot(0, this, SLOT(shrink())); QTimer::singleShot(0, this, SLOT(shrink()));
valuesChanged(); valuesChanged();
@@ -154,8 +152,6 @@ MixerDialog::~MixerDialog()
delete gvWeightGroup; delete gvWeightGroup;
delete gvOffsetGroup; delete gvOffsetGroup;
delete curveGroup; delete curveGroup;
delete rawSourceModel;
delete rawSwitchModel;
delete ui; delete ui;
} }
@@ -182,20 +178,20 @@ void MixerDialog::valuesChanged()
ui->MixDR_CB->setEnabled(drVisible); ui->MixDR_CB->setEnabled(drVisible);
ui->label_MixDR->setEnabled(drVisible); ui->label_MixDR->setEnabled(drVisible);
} }
md->carryTrim = -(ui->trimCB->currentIndex()-1); md->carryTrim = -(ui->trimCB->currentIndex() - 1);
md->noExpo = ui->MixDR_CB->checkState() ? 0 : 1; md->noExpo = ui->MixDR_CB->checkState() ? 0 : 1;
md->swtch = RawSwitch(ui->switchesCB->itemData(ui->switchesCB->currentIndex()).toInt()); md->swtch = RawSwitch(ui->switchesCB->itemData(ui->switchesCB->currentIndex()).toInt());
md->mixWarn = ui->warningCB->currentIndex(); md->mixWarn = ui->warningCB->currentIndex();
md->mltpx = (MltpxValue)ui->mltpxCB->currentIndex(); md->mltpx = (MltpxValue)ui->mltpxCB->currentIndex();
int scale = firmware->getCapability(SlowScale); int scale = firmware->getCapability(SlowScale);
md->delayDown = round(ui->delayDownSB->value()*scale); md->delayDown = round(ui->delayDownSB->value() * scale);
md->delayUp = round(ui->delayUpSB->value()*scale); md->delayUp = round(ui->delayUpSB->value() * scale);
md->speedDown = round(ui->slowDownSB->value()*scale); md->speedDown = round(ui->slowDownSB->value() * scale);
md->speedUp = round(ui->slowUpSB->value()*scale); md->speedUp = round(ui->slowUpSB->value() * scale);
strcpy(md->name, ui->mixerName->text().toLatin1()); strcpy(md->name, ui->mixerName->text().toLatin1());
md->flightModes = 0; md->flightModes = 0;
for (int i=CPN_MAX_FLIGHT_MODES-1; i>=0 ; i--) { for (int i = CPN_MAX_FLIGHT_MODES-1; i >= 0 ; i--) {
if (!cb_fp[i]->checkState()) { if (!cb_fp[i]->checkState()) {
md->flightModes++; md->flightModes++;
} }
@@ -226,7 +222,7 @@ void MixerDialog::label_phases_customContextMenuRequested(const QPoint & pos)
void MixerDialog::fmClearAll() void MixerDialog::fmClearAll()
{ {
lock = true; lock = true;
for (int i=0; i<CPN_MAX_FLIGHT_MODES; i++) { for (int i = 0; i < CPN_MAX_FLIGHT_MODES; i++) {
cb_fp[i]->setChecked(false); cb_fp[i]->setChecked(false);
} }
lock = false; lock = false;
@@ -236,7 +232,7 @@ void MixerDialog::fmClearAll()
void MixerDialog::fmSetAll() void MixerDialog::fmSetAll()
{ {
lock = true; lock = true;
for (int i=0; i<CPN_MAX_FLIGHT_MODES; i++) { for (int i = 0; i < CPN_MAX_FLIGHT_MODES; i++) {
cb_fp[i]->setChecked(true); cb_fp[i]->setChecked(true);
} }
lock = false; lock = false;
@@ -246,7 +242,7 @@ void MixerDialog::fmSetAll()
void MixerDialog::fmInvertAll() void MixerDialog::fmInvertAll()
{ {
lock = true; lock = true;
for (int i=0; i<CPN_MAX_FLIGHT_MODES; i++) { for (int i = 0; i < CPN_MAX_FLIGHT_MODES; i++) {
cb_fp[i]->setChecked(!cb_fp[i]->isChecked()); cb_fp[i]->setChecked(!cb_fp[i]->isChecked());
} }
lock = false; lock = false;
+1 -5
View File
@@ -26,8 +26,6 @@
class GVarGroup; class GVarGroup;
class CurveGroup; class CurveGroup;
class RawSourceItemModel;
class RawSwitchItemModel;
class RawItemFilteredModel; class RawItemFilteredModel;
namespace Ui { namespace Ui {
@@ -38,7 +36,7 @@ class MixerDialog : public QDialog {
Q_OBJECT Q_OBJECT
public: public:
MixerDialog(QWidget *parent, ModelData & model, MixData *mixdata, GeneralSettings & generalSettings, Firmware * firmware, MixerDialog(QWidget *parent, ModelData & model, MixData *mixdata, GeneralSettings & generalSettings, Firmware * firmware,
RawSourceItemModel * rawSourceItemModel, RawSwitchItemModel * rawSwitchItemModel); RawItemFilteredModel * rawSourceModel, RawItemFilteredModel * rawSwitchModel);
~MixerDialog(); ~MixerDialog();
protected: protected:
@@ -63,8 +61,6 @@ class MixerDialog : public QDialog {
GVarGroup * gvOffsetGroup; GVarGroup * gvOffsetGroup;
CurveGroup * curveGroup; CurveGroup * curveGroup;
QCheckBox * cb_fp[CPN_MAX_FLIGHT_MODES]; QCheckBox * cb_fp[CPN_MAX_FLIGHT_MODES];
RawItemFilteredModel * rawSourceModel;
RawItemFilteredModel * rawSwitchModel;
}; };
#endif // _MIXERDIALOG_H_ #endif // _MIXERDIALOG_H_
+23 -4
View File
@@ -20,16 +20,23 @@
#include "mixes.h" #include "mixes.h"
#include "helpers.h" #include "helpers.h"
#include "rawitemfilteredmodel.h"
MixesPanel::MixesPanel(QWidget *parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware, MixesPanel::MixesPanel(QWidget *parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware,
RawSourceItemModel * rawSourceItemModel, RawSwitchItemModel * rawSwitchItemModel): RawSourceItemModel * rawSourceItemModel, RawSwitchItemModel * rawSwitchItemModel):
ModelPanel(parent, model, generalSettings, firmware), ModelPanel(parent, model, generalSettings, firmware),
mixInserted(false), mixInserted(false),
highlightedSource(0), highlightedSource(0),
modelPrinter(firmware, generalSettings, model), modelPrinter(firmware, generalSettings, model)
rawSourceItemModel(rawSourceItemModel),
rawSwitchItemModel(rawSwitchItemModel)
{ {
rawSourceModel = new RawItemFilteredModel(rawSourceItemModel, RawSource::InputSourceGroups | RawSource::ScriptsGroup, this);
connect(rawSourceModel, &RawItemFilteredModel::dataAboutToBeUpdated, this, &MixesPanel::onModelDataAboutToBeUpdated);
connect(rawSourceModel, &RawItemFilteredModel::dataUpdateComplete, this, &MixesPanel::onModelDataUpdateComplete);
rawSwitchModel = new RawItemFilteredModel(rawSwitchItemModel, RawSwitch::MixesContext, this);
connect(rawSwitchModel, &RawItemFilteredModel::dataAboutToBeUpdated, this, &MixesPanel::onModelDataAboutToBeUpdated);
connect(rawSwitchModel, &RawItemFilteredModel::dataUpdateComplete, this, &MixesPanel::onModelDataUpdateComplete);
QGridLayout * mixesLayout = new QGridLayout(this); QGridLayout * mixesLayout = new QGridLayout(this);
mixersListWidget = new MixersListWidget(this, false); // TODO enum mixersListWidget = new MixersListWidget(this, false); // TODO enum
@@ -63,6 +70,8 @@ MixesPanel::MixesPanel(QWidget *parent, ModelData & model, GeneralSettings & gen
MixesPanel::~MixesPanel() MixesPanel::~MixesPanel()
{ {
delete rawSourceModel;
delete rawSwitchModel;
} }
void MixesPanel::update() void MixesPanel::update()
@@ -178,7 +187,7 @@ void MixesPanel::gm_openMix(int index)
MixData mixd(model->mixData[index]); MixData mixd(model->mixData[index]);
MixerDialog *g = new MixerDialog(this, *model, &mixd, generalSettings, firmware, rawSourceItemModel, rawSwitchItemModel); MixerDialog *g = new MixerDialog(this, *model, &mixd, generalSettings, firmware, rawSourceModel, rawSwitchModel);
if(g->exec()) { if(g->exec()) {
model->mixData[index] = mixd; model->mixData[index] = mixd;
emit modified(); emit modified();
@@ -532,3 +541,13 @@ void MixesPanel::clearMixes()
update(); update();
} }
} }
void MixesPanel::onModelDataAboutToBeUpdated()
{
lock = true;
}
void MixesPanel::onModelDataUpdateComplete()
{
update();
}
+9 -4
View File
@@ -25,7 +25,10 @@
#include "mixerslistwidget.h" #include "mixerslistwidget.h"
#include "mixerdialog.h" #include "mixerdialog.h"
#include "modelprinter.h" #include "modelprinter.h"
#include "rawitemdatamodels.h"
class RawSourceItemModel;
class RawSwitchItemModel;
class RawItemFilteredModel;
class MixesPanel : public ModelPanel class MixesPanel : public ModelPanel
{ {
@@ -52,7 +55,6 @@ class MixesPanel : public ModelPanel
void moveMixDown(); void moveMixDown();
void mixerHighlight(); void mixerHighlight();
void mixerlistWidget_customContextMenuRequested(QPoint pos); void mixerlistWidget_customContextMenuRequested(QPoint pos);
void mixerlistWidget_doubleClicked(QModelIndex index); void mixerlistWidget_doubleClicked(QModelIndex index);
void mixerlistWidget_KeyPress(QKeyEvent *event); void mixerlistWidget_KeyPress(QKeyEvent *event);
@@ -60,13 +62,16 @@ class MixesPanel : public ModelPanel
void mimeMixerDropped(int index, const QMimeData *data, Qt::DropAction action); void mimeMixerDropped(int index, const QMimeData *data, Qt::DropAction action);
void pasteMixerMimeData(const QMimeData * mimeData, int destIdx); void pasteMixerMimeData(const QMimeData * mimeData, int destIdx);
void onModelDataAboutToBeUpdated();
void onModelDataUpdateComplete();
private: private:
MixersListWidget * mixersListWidget; MixersListWidget * mixersListWidget;
bool mixInserted; bool mixInserted;
unsigned int highlightedSource; unsigned int highlightedSource;
ModelPrinter modelPrinter; ModelPrinter modelPrinter;
RawSourceItemModel *rawSourceItemModel; RawItemFilteredModel *rawSourceModel;
RawSwitchItemModel *rawSwitchItemModel; RawItemFilteredModel *rawSwitchModel;
int getMixerIndex(unsigned int dch); int getMixerIndex(unsigned int dch);
bool gm_insertMix(int idx); bool gm_insertMix(int idx);