Refactor to Model level ui datamodels for sources, switches and curves
This commit is contained in:
@@ -24,14 +24,15 @@
|
||||
#include "helpers.h"
|
||||
#include "customdebug.h"
|
||||
|
||||
FlightModePanel::FlightModePanel(QWidget * parent, ModelData & model, int phaseIdx, GeneralSettings & generalSettings, Firmware * firmware, RawSwitchFilterItemModel * switchModel):
|
||||
FlightModePanel::FlightModePanel(QWidget * parent, ModelData & model, int phaseIdx, GeneralSettings & generalSettings, Firmware * firmware, RawItemFilteredModel * switchModel):
|
||||
ModelPanel(parent, model, generalSettings, firmware),
|
||||
ui(new Ui::FlightMode),
|
||||
phaseIdx(phaseIdx),
|
||||
phase(model.flightModeData[phaseIdx]),
|
||||
rawSwitchItemModel(NULL)
|
||||
phase(model.flightModeData[phaseIdx])
|
||||
{
|
||||
ui->setupUi(this);
|
||||
connect(switchModel, &RawItemFilteredModel::dataAboutToBeUpdated, this, &FlightModePanel::onModelDataAboutToBeUpdated);
|
||||
connect(switchModel, &RawItemFilteredModel::dataUpdateComplete, this, &FlightModePanel::onModelDataUpdateComplete);
|
||||
|
||||
ui->labelName->setContextMenuPolicy(Qt::CustomContextMenu);
|
||||
ui->labelName->setToolTip(tr("Popup menu available"));
|
||||
@@ -316,8 +317,6 @@ void FlightModePanel::update()
|
||||
for (int i = 0; i < reCount; i++) {
|
||||
updateRotaryEncoder(i);
|
||||
}
|
||||
|
||||
emit nameModified();
|
||||
}
|
||||
|
||||
void FlightModePanel::updateGVar(int index)
|
||||
@@ -390,8 +389,8 @@ void FlightModePanel::phaseName_editingFinished()
|
||||
{
|
||||
QLineEdit *lineEdit = qobject_cast<QLineEdit*>(sender());
|
||||
strcpy(phase.name, lineEdit->text().toLatin1());
|
||||
emit phaseNameChanged();
|
||||
emit modified();
|
||||
emit nameModified();
|
||||
}
|
||||
|
||||
void FlightModePanel::phaseSwitchChanged(int index)
|
||||
@@ -401,6 +400,8 @@ void FlightModePanel::phaseSwitchChanged(int index)
|
||||
const RawSwitch rs(ui->swtch->itemData(index).toInt(&ok));
|
||||
if (ok && phase.swtch.toValue() != rs.toValue()) {
|
||||
phase.swtch = rs;
|
||||
if (!rs.isSet())
|
||||
emit phaseNoSwitchSet();
|
||||
emit modified();
|
||||
}
|
||||
}
|
||||
@@ -457,7 +458,7 @@ void FlightModePanel::phaseGVValue_editingFinished()
|
||||
QDoubleSpinBox *spinBox = qobject_cast<QDoubleSpinBox*>(sender());
|
||||
int gvar = spinBox->property("index").toInt();
|
||||
phase.gvars[gvar] = spinBox->value() * model->gvarData[gvar].multiplierSet();
|
||||
emit datachanged();
|
||||
updateGVar(gvar);
|
||||
emit modified();
|
||||
}
|
||||
}
|
||||
@@ -469,7 +470,7 @@ void FlightModePanel::GVName_editingFinished()
|
||||
int gvar = lineedit->property("index").toInt();
|
||||
memset(&model->gvarData[gvar].name, 0, sizeof(model->gvarData[gvar].name));
|
||||
strcpy(model->gvarData[gvar].name, lineedit->text().toLatin1());
|
||||
emit datachanged();
|
||||
emit gvNameChanged();
|
||||
emit modified();
|
||||
}
|
||||
}
|
||||
@@ -488,7 +489,7 @@ void FlightModePanel::phaseGVUse_currentIndexChanged(int index)
|
||||
}
|
||||
if (model->isGVarLinkedCircular(phaseIdx, gvar))
|
||||
QMessageBox::warning(this, "Companion", tr("Warning: Global variable links back to itself. Flight Mode 0 value used."));
|
||||
emit datachanged();
|
||||
updateGVar(gvar);
|
||||
emit modified();
|
||||
lock = false;
|
||||
}
|
||||
@@ -500,7 +501,7 @@ void FlightModePanel::phaseGVUnit_currentIndexChanged(int index)
|
||||
QComboBox *comboBox = qobject_cast<QComboBox*>(sender());
|
||||
int gvar = comboBox->property("index").toInt();
|
||||
model->gvarData[gvar].unit = index;
|
||||
emit datachanged();
|
||||
updateGVar(gvar);
|
||||
emit modified();
|
||||
}
|
||||
}
|
||||
@@ -511,7 +512,7 @@ void FlightModePanel::phaseGVPrec_currentIndexChanged(int index)
|
||||
QComboBox *comboBox = qobject_cast<QComboBox*>(sender());
|
||||
int gvar = comboBox->property("index").toInt();
|
||||
model->gvarData[gvar].prec = index;
|
||||
emit datachanged();
|
||||
updateGVar(gvar);
|
||||
emit modified();
|
||||
}
|
||||
}
|
||||
@@ -534,7 +535,7 @@ void FlightModePanel::phaseGVMin_editingFinished()
|
||||
}
|
||||
}
|
||||
}
|
||||
emit datachanged();
|
||||
updateGVar(gvar);
|
||||
emit modified();
|
||||
}
|
||||
}
|
||||
@@ -557,7 +558,7 @@ void FlightModePanel::phaseGVMax_editingFinished()
|
||||
}
|
||||
}
|
||||
}
|
||||
emit datachanged();
|
||||
updateGVar(gvar);
|
||||
emit modified();
|
||||
}
|
||||
}
|
||||
@@ -741,7 +742,8 @@ void FlightModePanel::cmClear(bool prompt)
|
||||
|
||||
model->updateAllReferences(ModelData::REF_UPD_TYPE_FLIGHT_MODE, ModelData::REF_UPD_ACT_CLEAR, phaseIdx);
|
||||
|
||||
emit datachanged();
|
||||
update();
|
||||
emit phaseDataChanged();
|
||||
emit modified();
|
||||
}
|
||||
|
||||
@@ -767,7 +769,7 @@ void FlightModePanel::cmClearAll()
|
||||
model->updateAllReferences(ModelData::REF_UPD_TYPE_GLOBAL_VARIABLE, ModelData::REF_UPD_ACT_CLEAR, i);
|
||||
}
|
||||
|
||||
emit datachanged();
|
||||
emit phaseDataChanged();
|
||||
emit modified();
|
||||
}
|
||||
|
||||
@@ -846,7 +848,7 @@ void FlightModePanel::cmDelete()
|
||||
|
||||
model->updateAllReferences(ModelData::REF_UPD_TYPE_FLIGHT_MODE, ModelData::REF_UPD_ACT_SHIFT, phaseIdx, 0, -1);
|
||||
|
||||
emit datachanged();
|
||||
emit phaseDataChanged();
|
||||
emit modified();
|
||||
}
|
||||
|
||||
@@ -897,7 +899,7 @@ void FlightModePanel::cmInsert()
|
||||
|
||||
model->updateAllReferences(ModelData::REF_UPD_TYPE_FLIGHT_MODE, ModelData::REF_UPD_ACT_SHIFT, phaseIdx, 0, 1);
|
||||
|
||||
emit datachanged();
|
||||
emit phaseDataChanged();
|
||||
emit modified();
|
||||
}
|
||||
|
||||
@@ -946,7 +948,7 @@ void FlightModePanel::cmPaste()
|
||||
}
|
||||
}
|
||||
|
||||
emit datachanged();
|
||||
emit phaseDataChanged();
|
||||
emit modified();
|
||||
}
|
||||
}
|
||||
@@ -1035,7 +1037,7 @@ void FlightModePanel::swapData(int idx1, int idx2)
|
||||
}
|
||||
|
||||
model->updateAllReferences(ModelData::REF_UPD_TYPE_FLIGHT_MODE, ModelData::REF_UPD_ACT_SWAP, idx1, idx2);
|
||||
emit datachanged();
|
||||
emit phaseDataChanged();
|
||||
emit modified();
|
||||
}
|
||||
|
||||
@@ -1162,7 +1164,8 @@ void FlightModePanel::gvCmClear(bool prompt)
|
||||
}
|
||||
phase.gvars[gvIdx] = phase.linkedGVarFlightModeZero(phaseIdx);
|
||||
}
|
||||
emit datachanged();
|
||||
updateGVar(gvIdx);
|
||||
emit gvNameChanged();
|
||||
emit modified();
|
||||
}
|
||||
|
||||
@@ -1186,7 +1189,10 @@ void FlightModePanel::gvCmClearAll()
|
||||
phase.gvars[i] = phase.linkedGVarFlightModeZero(phaseIdx);
|
||||
}
|
||||
}
|
||||
emit datachanged();
|
||||
for (int i = 0; i < gvCount; i++) {
|
||||
updateGVar(i);
|
||||
}
|
||||
emit gvNameChanged();
|
||||
emit modified();
|
||||
}
|
||||
|
||||
@@ -1261,8 +1267,13 @@ void FlightModePanel::gvCmDelete()
|
||||
for (int j = 0; j < fmCount; j++) {
|
||||
model->flightModeData[j].gvars[maxidx] = model->flightModeData[j].linkedGVarFlightModeZero(j);
|
||||
}
|
||||
|
||||
model->updateAllReferences(ModelData::REF_UPD_TYPE_GLOBAL_VARIABLE, ModelData::REF_UPD_ACT_SHIFT, gvIdx, 0, -1);
|
||||
emit datachanged();
|
||||
|
||||
for (int i = 0; i < gvCount; i++) {
|
||||
updateGVar(i);
|
||||
}
|
||||
emit gvNameChanged();
|
||||
emit modified();
|
||||
}
|
||||
|
||||
@@ -1279,7 +1290,10 @@ void FlightModePanel::gvCmInsert()
|
||||
model->flightModeData[j].gvars[gvIdx] = model->flightModeData[j].linkedGVarFlightModeZero(j);
|
||||
}
|
||||
model->updateAllReferences(ModelData::REF_UPD_TYPE_GLOBAL_VARIABLE, ModelData::REF_UPD_ACT_SHIFT, gvIdx, 0, 1);
|
||||
emit datachanged();
|
||||
for (int i = 0; i < gvCount; i++) {
|
||||
updateGVar(i);
|
||||
}
|
||||
emit gvNameChanged();
|
||||
emit modified();
|
||||
}
|
||||
|
||||
@@ -1322,7 +1336,8 @@ void FlightModePanel::gvCmPaste()
|
||||
else
|
||||
phase.gvars[gvIdx] = val;
|
||||
}
|
||||
emit datachanged();
|
||||
updateGVar(gvIdx);
|
||||
emit gvNameChanged();
|
||||
emit modified();
|
||||
}
|
||||
|
||||
@@ -1340,37 +1355,57 @@ void FlightModePanel::gvSwapData(int idx1, int idx2)
|
||||
model->flightModeData[j].gvars[idx1] = valtmp;
|
||||
}
|
||||
model->updateAllReferences(ModelData::REF_UPD_TYPE_GLOBAL_VARIABLE, ModelData::REF_UPD_ACT_SWAP, idx1, idx2);
|
||||
emit datachanged();
|
||||
updateGVar(idx1);
|
||||
updateGVar(idx2);
|
||||
emit gvNameChanged();
|
||||
emit modified();
|
||||
}
|
||||
}
|
||||
|
||||
void FlightModePanel::onModelDataAboutToBeUpdated()
|
||||
{
|
||||
lock = true;
|
||||
}
|
||||
|
||||
void FlightModePanel::onModelDataUpdateComplete()
|
||||
{
|
||||
update();
|
||||
lock = false;
|
||||
}
|
||||
|
||||
/**********************************************************/
|
||||
|
||||
FlightModesPanel::FlightModesPanel(QWidget * parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware):
|
||||
ModelPanel(parent, model, generalSettings, firmware),
|
||||
modesCount(firmware->getCapability(FlightModes))
|
||||
FlightModesPanel::FlightModesPanel(QWidget * parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware, RawSwitchItemModel * rawSwitchItemModel):
|
||||
ModelPanel(parent, model, generalSettings, firmware)
|
||||
{
|
||||
|
||||
RawSwitchFilterItemModel * swModel = new RawSwitchFilterItemModel(&generalSettings, &model, RawSwitch::MixesContext, this);
|
||||
connect(this, &FlightModesPanel::updated, swModel, &RawSwitchFilterItemModel::update);
|
||||
rawSwitchFilteredModel = new RawItemFilteredModel(rawSwitchItemModel, RawSwitch::MixesContext, this);
|
||||
modesCount = firmware->getCapability(FlightModes);
|
||||
|
||||
QGridLayout * gridLayout = new QGridLayout(this);
|
||||
tabWidget = new QTabWidget(this);
|
||||
for (int i = 0; i < modesCount; i++) {
|
||||
FlightModePanel * tab = new FlightModePanel(tabWidget, model, i, generalSettings, firmware, swModel);
|
||||
FlightModePanel * tab = new FlightModePanel(tabWidget, model, i, generalSettings, firmware, rawSwitchFilteredModel);
|
||||
tab->setProperty("index", i);
|
||||
connect(tab, &FlightModePanel::datachanged, this, &FlightModesPanel::update);
|
||||
connect(tab, &FlightModePanel::modified, this, &FlightModesPanel::modified);
|
||||
connect(tab, &FlightModePanel::nameModified, this, &FlightModesPanel::onPhaseNameChanged);
|
||||
connect(this, &FlightModesPanel::updated, tab, &FlightModePanel::update);
|
||||
connect(tab, &FlightModePanel::modified, this, &FlightModesPanel::modified);
|
||||
connect(tab, &FlightModePanel::phaseDataChanged, this, &FlightModesPanel::onPhaseNameChanged);
|
||||
connect(tab, &FlightModePanel::phaseDataChanged, this, &FlightModesPanel::update);
|
||||
connect(tab, &FlightModePanel::phaseDataChanged, this, &FlightModesPanel::refreshDataModels);
|
||||
connect(tab, &FlightModePanel::phaseNameChanged, this, &FlightModesPanel::onPhaseNameChanged);
|
||||
connect(tab, &FlightModePanel::phaseNoSwitchSet, this, &FlightModesPanel::refreshDataModels);
|
||||
connect(tab, &FlightModePanel::gvNameChanged, this, &FlightModesPanel::refreshDataModels);
|
||||
|
||||
connect(this, &FlightModesPanel::updated, tab, &FlightModePanel::update);
|
||||
tabWidget->addTab(tab, getTabName(i));
|
||||
panels << tab;
|
||||
}
|
||||
connect(tabWidget, &QTabWidget::currentChanged, this, &FlightModesPanel::onTabIndexChanged);
|
||||
gridLayout->addWidget(tabWidget, 0, 0, 1, 1);
|
||||
onTabIndexChanged(0);
|
||||
}
|
||||
|
||||
FlightModesPanel::~FlightModesPanel()
|
||||
{
|
||||
delete rawSwitchFilteredModel;
|
||||
}
|
||||
|
||||
QString FlightModesPanel::getTabName(int index)
|
||||
@@ -1397,3 +1432,14 @@ void FlightModesPanel::update()
|
||||
{
|
||||
emit updated();
|
||||
}
|
||||
|
||||
void FlightModesPanel::refreshDataModels()
|
||||
{
|
||||
emit updateDataModels();
|
||||
}
|
||||
|
||||
void FlightModesPanel::onTabIndexChanged(int index)
|
||||
{
|
||||
if (index < panels.size())
|
||||
panels.at(index)->update();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user