mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2024-11-29 07:24:13 +01:00
LP-467 update custom mixers when saving vehicle config
This commit is contained in:
parent
97f1b53539
commit
f646ef1d37
@ -62,9 +62,6 @@ public:
|
||||
ConfigCcpmWidget(QWidget *parent = 0);
|
||||
~ConfigCcpmWidget();
|
||||
|
||||
virtual void refreshWidgetsValues(QString frameType);
|
||||
virtual QString updateConfigObjectsFromWidgets();
|
||||
|
||||
public slots:
|
||||
void getMixer();
|
||||
void setMixer();
|
||||
@ -74,6 +71,8 @@ protected:
|
||||
void resizeEvent(QResizeEvent *event);
|
||||
|
||||
virtual void enableControls(bool enable);
|
||||
virtual void refreshWidgetsValues(QString frameType);
|
||||
virtual QString updateConfigObjectsFromWidgets();
|
||||
|
||||
private:
|
||||
Ui_CcpmConfigWidget *m_aircraft;
|
||||
|
@ -49,13 +49,13 @@ public:
|
||||
ConfigCustomWidget(QWidget *parent = 0);
|
||||
~ConfigCustomWidget();
|
||||
|
||||
virtual void refreshWidgetsValues(QString frameType);
|
||||
virtual QString updateConfigObjectsFromWidgets();
|
||||
|
||||
protected:
|
||||
void showEvent(QShowEvent *event);
|
||||
void resizeEvent(QResizeEvent *event);
|
||||
|
||||
virtual void refreshWidgetsValues(QString frameType);
|
||||
virtual QString updateConfigObjectsFromWidgets();
|
||||
|
||||
private:
|
||||
Ui_CustomConfigWidget *m_aircraft;
|
||||
|
||||
|
@ -50,9 +50,6 @@ public:
|
||||
ConfigFixedWingWidget(QWidget *parent = 0);
|
||||
~ConfigFixedWingWidget();
|
||||
|
||||
virtual void refreshWidgetsValues(QString frameType);
|
||||
virtual QString updateConfigObjectsFromWidgets();
|
||||
|
||||
private:
|
||||
Ui_FixedWingConfigWidget *m_aircraft;
|
||||
QGraphicsSvgItem *planeimg;
|
||||
@ -72,6 +69,8 @@ protected:
|
||||
void showEvent(QShowEvent *);
|
||||
|
||||
virtual void enableControls(bool enable);
|
||||
virtual void refreshWidgetsValues(QString frameType);
|
||||
virtual QString updateConfigObjectsFromWidgets();
|
||||
|
||||
private slots:
|
||||
virtual void setupUI(QString airframeType);
|
||||
|
@ -49,15 +49,15 @@ public:
|
||||
ConfigGroundVehicleWidget(QWidget *parent = 0);
|
||||
~ConfigGroundVehicleWidget();
|
||||
|
||||
virtual void refreshWidgetsValues(QString frameType);
|
||||
virtual void initMixerCurves(QString frameType);
|
||||
virtual QString updateConfigObjectsFromWidgets();
|
||||
|
||||
protected:
|
||||
void resizeEvent(QResizeEvent *);
|
||||
void showEvent(QShowEvent *);
|
||||
|
||||
virtual void enableControls(bool enable);
|
||||
virtual void refreshWidgetsValues(QString frameType);
|
||||
virtual QString updateConfigObjectsFromWidgets();
|
||||
|
||||
private:
|
||||
Ui_GroundConfigWidget *m_aircraft;
|
||||
|
@ -51,21 +51,21 @@ public:
|
||||
ConfigMultiRotorWidget(QWidget *parent = 0);
|
||||
~ConfigMultiRotorWidget();
|
||||
|
||||
virtual void refreshWidgetsValues(QString frameType);
|
||||
virtual QString updateConfigObjectsFromWidgets();
|
||||
|
||||
protected:
|
||||
void showEvent(QShowEvent *event);
|
||||
void resizeEvent(QResizeEvent *event);
|
||||
|
||||
virtual void enableControls(bool enable);
|
||||
virtual void refreshWidgetsValues(QString frameType);
|
||||
virtual QString updateConfigObjectsFromWidgets();
|
||||
|
||||
virtual void registerWidgets(ConfigTaskWidget &parent);
|
||||
|
||||
private:
|
||||
Ui_MultiRotorConfigWidget *m_aircraft;
|
||||
QGraphicsSvgItem *quad;
|
||||
bool invertMotors;
|
||||
|
||||
virtual void registerWidgets(ConfigTaskWidget &parent);
|
||||
virtual void resetActuators(GUIConfigDataUnion *configData);
|
||||
virtual void resetRcOutputs(GUIConfigDataUnion *configData);
|
||||
|
||||
|
@ -222,12 +222,6 @@ public:
|
||||
VehicleConfig(QWidget *parent = 0);
|
||||
~VehicleConfig();
|
||||
|
||||
virtual void registerWidgets(ConfigTaskWidget &parent);
|
||||
|
||||
virtual void refreshWidgetsValues(QString frameType);
|
||||
|
||||
virtual QString updateConfigObjectsFromWidgets();
|
||||
|
||||
double getMixerValue(UAVDataObject *mixer, QString elementName);
|
||||
void setMixerValue(UAVDataObject *mixer, QString elementName, double value);
|
||||
|
||||
@ -256,6 +250,10 @@ protected:
|
||||
virtual void refreshWidgetsValuesImpl(UAVObject *obj);
|
||||
virtual void updateObjectsFromWidgetsImpl();
|
||||
|
||||
virtual void registerWidgets(ConfigTaskWidget &parent);
|
||||
virtual void refreshWidgetsValues(QString frameType);
|
||||
virtual QString updateConfigObjectsFromWidgets();
|
||||
|
||||
private:
|
||||
static UAVObjectManager *getUAVObjectManager();
|
||||
|
||||
|
@ -161,6 +161,7 @@ ConfigVehicleTypeWidget::~ConfigVehicleTypeWidget()
|
||||
void ConfigVehicleTypeWidget::switchAirframeType(int index)
|
||||
{
|
||||
VehicleConfig *vehicleConfig = getVehicleConfigWidget(index);
|
||||
|
||||
if (vehicleConfig) {
|
||||
m_aircraft->airframesWidget->setCurrentWidget(vehicleConfig);
|
||||
// enable controls
|
||||
@ -177,6 +178,7 @@ void ConfigVehicleTypeWidget::enableControls(bool enable)
|
||||
int category = frameCategory(frameType());
|
||||
|
||||
VehicleConfig *vehicleConfig = getVehicleConfigWidget(category);
|
||||
|
||||
if (vehicleConfig) {
|
||||
vehicleConfig->enableControls(enable);
|
||||
}
|
||||
@ -195,50 +197,26 @@ void ConfigVehicleTypeWidget::refreshWidgetsValuesImpl(UAVObject *obj)
|
||||
return;
|
||||
}
|
||||
|
||||
// Get the Airframe type from the system settings:
|
||||
UAVDataObject *system = dynamic_cast<UAVDataObject *>(getObjectManager()->getObject(QString("SystemSettings")));
|
||||
Q_ASSERT(system);
|
||||
|
||||
UAVObjectField *field = system->getField(QString("AirframeType"));
|
||||
Q_ASSERT(field);
|
||||
|
||||
// At this stage, we will need to have some hardcoded settings in this code
|
||||
QString frameType = field->getValue().toString();
|
||||
|
||||
// Always update custom tab from others airframe settings : debug/learn hardcoded mixers
|
||||
int category = frameCategory("Custom");
|
||||
// update current vehicle tab
|
||||
QString ft = frameType();
|
||||
int category = frameCategory(ft);
|
||||
m_aircraft->aircraftType->setCurrentIndex(category);
|
||||
|
||||
VehicleConfig *vehicleConfig = getVehicleConfigWidget(category);
|
||||
|
||||
if (vehicleConfig) {
|
||||
vehicleConfig->refreshWidgetsValues("Custom");
|
||||
vehicleConfig->refreshWidgetsValues(ft);
|
||||
}
|
||||
|
||||
// Switch to Airframe currently used
|
||||
category = frameCategory(frameType);
|
||||
|
||||
if (frameType != "Custom") {
|
||||
m_aircraft->aircraftType->setCurrentIndex(category);
|
||||
|
||||
VehicleConfig *vehicleConfig = getVehicleConfigWidget(category);
|
||||
|
||||
// update custom tab from others frame settings (to debug/learn hard coded mixers)
|
||||
if (ft != "Custom") {
|
||||
int customCategory = frameCategory("Custom");
|
||||
VehicleConfig *vehicleConfig = getVehicleConfigWidget(customCategory);
|
||||
if (vehicleConfig) {
|
||||
vehicleConfig->refreshWidgetsValues(frameType);
|
||||
vehicleConfig->refreshWidgetsValues("Custom");
|
||||
}
|
||||
}
|
||||
|
||||
field = system->getField(QString("VehicleName"));
|
||||
Q_ASSERT(field);
|
||||
QString name;
|
||||
for (uint i = 0; i < field->getNumElements(); ++i) {
|
||||
QChar chr = field->getValue(i).toChar();
|
||||
if (chr != 0) {
|
||||
name.append(chr);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
// update vehicle name
|
||||
QString name = vehicleName();
|
||||
m_aircraft->nameEdit->setText(name);
|
||||
}
|
||||
|
||||
@ -252,26 +230,87 @@ void ConfigVehicleTypeWidget::refreshWidgetsValuesImpl(UAVObject *obj)
|
||||
void ConfigVehicleTypeWidget::updateObjectsFromWidgetsImpl()
|
||||
{
|
||||
// Airframe type defaults to Custom
|
||||
QString airframeType = "Custom";
|
||||
QString ft = "Custom";
|
||||
|
||||
VehicleConfig *vehicleConfig = (VehicleConfig *)m_aircraft->airframesWidget->currentWidget();
|
||||
|
||||
if (vehicleConfig) {
|
||||
airframeType = vehicleConfig->updateConfigObjectsFromWidgets();
|
||||
ft = vehicleConfig->updateConfigObjectsFromWidgets();
|
||||
}
|
||||
|
||||
// set the airframe type
|
||||
UAVDataObject *system = dynamic_cast<UAVDataObject *>(getObjectManager()->getObject(QString("SystemSettings")));
|
||||
// airframe type
|
||||
setFrameType(ft);
|
||||
|
||||
// vehicle name
|
||||
QString name = m_aircraft->nameEdit->text();
|
||||
setVehicleName(name);
|
||||
|
||||
// update custom tab from others frame settings (to debug/learn hard coded mixers)
|
||||
if (ft != "Custom") {
|
||||
int customCategory = frameCategory("Custom");
|
||||
VehicleConfig *vehicleConfig = getVehicleConfigWidget(customCategory);
|
||||
if (vehicleConfig) {
|
||||
vehicleConfig->refreshWidgetsValues("Custom");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QString ConfigVehicleTypeWidget::frameType()
|
||||
{
|
||||
UAVDataObject *system = dynamic_cast<UAVDataObject *>(getObjectManager()->getObject("SystemSettings"));
|
||||
|
||||
Q_ASSERT(system);
|
||||
|
||||
UAVObjectField *field = system->getField(QString("AirframeType"));
|
||||
if (field) {
|
||||
field->setValue(airframeType);
|
||||
}
|
||||
|
||||
field = system->getField(QString("VehicleName"));
|
||||
UAVObjectField *field = system->getField("AirframeType");
|
||||
Q_ASSERT(field);
|
||||
QString name = m_aircraft->nameEdit->text();
|
||||
|
||||
return field->getValue().toString();
|
||||
}
|
||||
|
||||
void ConfigVehicleTypeWidget::setFrameType(QString frameType)
|
||||
{
|
||||
UAVDataObject *system = dynamic_cast<UAVDataObject *>(getObjectManager()->getObject("SystemSettings"));
|
||||
|
||||
Q_ASSERT(system);
|
||||
|
||||
UAVObjectField *field = system->getField("AirframeType");
|
||||
Q_ASSERT(field);
|
||||
|
||||
if (field) {
|
||||
field->setValue(frameType);
|
||||
}
|
||||
}
|
||||
|
||||
QString ConfigVehicleTypeWidget::vehicleName()
|
||||
{
|
||||
UAVDataObject *system = dynamic_cast<UAVDataObject *>(getObjectManager()->getObject("SystemSettings"));
|
||||
|
||||
Q_ASSERT(system);
|
||||
|
||||
UAVObjectField *field = system->getField("VehicleName");
|
||||
Q_ASSERT(field);
|
||||
|
||||
QString name;
|
||||
for (uint i = 0; i < field->getNumElements(); ++i) {
|
||||
QChar chr = field->getValue(i).toChar();
|
||||
if (chr != 0) {
|
||||
name.append(chr);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return name;
|
||||
}
|
||||
|
||||
void ConfigVehicleTypeWidget::setVehicleName(QString name)
|
||||
{
|
||||
UAVDataObject *system = dynamic_cast<UAVDataObject *>(getObjectManager()->getObject("SystemSettings"));
|
||||
|
||||
Q_ASSERT(system);
|
||||
|
||||
UAVObjectField *field = system->getField("VehicleName");
|
||||
Q_ASSERT(field);
|
||||
|
||||
for (uint i = 0; i < field->getNumElements(); ++i) {
|
||||
if (i < (uint)name.length()) {
|
||||
field->setValue(name.at(i).toLatin1(), i);
|
||||
@ -279,22 +318,6 @@ void ConfigVehicleTypeWidget::updateObjectsFromWidgetsImpl()
|
||||
field->setValue(0, i);
|
||||
}
|
||||
}
|
||||
|
||||
// call refreshWidgetsValues() to reflect actual saved values
|
||||
// TODO is this needed ?
|
||||
refreshWidgetsValues();
|
||||
}
|
||||
|
||||
QString ConfigVehicleTypeWidget::frameType()
|
||||
{
|
||||
// Get the Airframe type from the system settings
|
||||
UAVDataObject *system = dynamic_cast<UAVDataObject *>(getObjectManager()->getObject("SystemSettings"));
|
||||
Q_ASSERT(system);
|
||||
|
||||
UAVObjectField *field = system->getField("AirframeType");
|
||||
Q_ASSERT(field);
|
||||
|
||||
return field->getValue().toString();
|
||||
}
|
||||
|
||||
int ConfigVehicleTypeWidget::frameCategory(QString frameType)
|
||||
|
@ -75,6 +75,11 @@ private:
|
||||
|
||||
|
||||
QString frameType();
|
||||
void setFrameType(QString frameType);
|
||||
|
||||
QString vehicleName();
|
||||
void setVehicleName(QString name);
|
||||
|
||||
static int frameCategory(QString frameType);
|
||||
|
||||
VehicleConfig *getVehicleConfigWidget(int frameCategory);
|
||||
|
Loading…
Reference in New Issue
Block a user