mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-02-18 08:54:15 +01:00
Merge branch 'laurent/OP-1660_RCInput_Manual_Calibration' into next
This commit is contained in:
commit
5ddc70e2f0
@ -13,7 +13,6 @@ QSlider::groove:horizontal {
|
||||
background: white;
|
||||
height: 6px;
|
||||
border-radius: 2px;
|
||||
margin 10px 10px;
|
||||
}
|
||||
|
||||
QSlider::add-page:horizontal {
|
||||
@ -110,3 +109,5 @@ QSlider::handle:horizontal:hover {
|
||||
border: 1px solid #444;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,5 +1,11 @@
|
||||
<RCC>
|
||||
<qresource prefix="/configgadget">
|
||||
<file>images/flightmode_bg1.png</file>
|
||||
<file>images/flightmode_bg2.png</file>
|
||||
<file>images/flightmode_bg3.png</file>
|
||||
<file>images/flightmode_bg4.png</file>
|
||||
<file>images/flightmode_bg5.png</file>
|
||||
<file>images/flightmode_bg6.png</file>
|
||||
<file>images/help2.png</file>
|
||||
<file>images/ahrs-calib.svg</file>
|
||||
<file>images/multirotor-shapes.svg</file>
|
||||
|
@ -71,6 +71,7 @@ ConfigInputWidget::ConfigInputWidget(QWidget *parent) :
|
||||
accessoryDesiredObj0 = AccessoryDesired::GetInstance(getObjectManager(), 0);
|
||||
accessoryDesiredObj1 = AccessoryDesired::GetInstance(getObjectManager(), 1);
|
||||
accessoryDesiredObj2 = AccessoryDesired::GetInstance(getObjectManager(), 2);
|
||||
actuatorSettingsObj = ActuatorSettings::GetInstance(getObjectManager());
|
||||
|
||||
// Only instance 0 is present if the board is not connected.
|
||||
// The other instances are populated lazily.
|
||||
@ -96,6 +97,7 @@ ConfigInputWidget::ConfigInputWidget(QWidget *parent) :
|
||||
Q_ASSERT(index < ManualControlSettings::CHANNELGROUPS_NUMELEM);
|
||||
InputChannelForm *form = new InputChannelForm(index, this);
|
||||
form->setName(name);
|
||||
|
||||
form->moveTo(*(ui->channelLayout));
|
||||
|
||||
// The order of the following binding calls is important. Since the values will be populated
|
||||
@ -104,7 +106,9 @@ ConfigInputWidget::ConfigInputWidget(QWidget *parent) :
|
||||
// will not be set correctly.
|
||||
addWidgetBinding("ManualControlSettings", "ChannelNumber", form->ui->channelNumber, index);
|
||||
addWidgetBinding("ManualControlSettings", "ChannelGroups", form->ui->channelGroup, index);
|
||||
addWidgetBinding("ManualControlSettings", "ChannelNeutral", form->ui->channelNeutral, index);
|
||||
// Slider position based on real time Rcinput (allow monitoring)
|
||||
addWidgetBinding("ManualControlCommand", "Channel", form->ui->channelNeutral, index);
|
||||
// Neutral value stored on board (SpinBox)
|
||||
addWidgetBinding("ManualControlSettings", "ChannelNeutral", form->ui->neutralValue, index);
|
||||
addWidgetBinding("ManualControlSettings", "ChannelMax", form->ui->channelMax, index);
|
||||
addWidgetBinding("ManualControlSettings", "ChannelMin", form->ui->channelMin, index);
|
||||
@ -408,6 +412,13 @@ void ConfigInputWidget::goToWizard()
|
||||
previousFlightModeSettingsData = flightModeSettingsData;
|
||||
flightModeSettingsData.Arming = FlightModeSettings::ARMING_ALWAYSDISARMED;
|
||||
flightModeSettingsObj->setData(flightModeSettingsData);
|
||||
// Stash actuatorSettings
|
||||
actuatorSettingsData = actuatorSettingsObj->getData();
|
||||
previousActuatorSettingsData = actuatorSettingsData;
|
||||
|
||||
// Now reset channel and actuator settings (disable outputs)
|
||||
resetChannelSettings();
|
||||
resetActuatorSettings();
|
||||
|
||||
// Use faster input update rate.
|
||||
fastMdata();
|
||||
@ -447,6 +458,7 @@ void ConfigInputWidget::wzCancel()
|
||||
// Load settings back from beginning of wizard
|
||||
manualSettingsObj->setData(previousManualSettingsData);
|
||||
flightModeSettingsObj->setData(previousFlightModeSettingsData);
|
||||
actuatorSettingsObj->setData(previousActuatorSettingsData);
|
||||
}
|
||||
|
||||
void ConfigInputWidget::registerControlActivity()
|
||||
@ -528,13 +540,16 @@ void ConfigInputWidget::wzNext()
|
||||
// Restore original input update rate.
|
||||
restoreMdata();
|
||||
|
||||
// Load actuator settings back from beginning of wizard
|
||||
actuatorSettingsObj->setData(previousActuatorSettingsData);
|
||||
|
||||
// Leave setting the throttle neutral until the final Next press,
|
||||
// else the throttle scaling causes the graphical stick movement to not
|
||||
// match the tx stick
|
||||
manualSettingsData.ChannelNeutral[ManualControlSettings::CHANNELNEUTRAL_THROTTLE] =
|
||||
manualSettingsData.ChannelMin[ManualControlSettings::CHANNELMIN_THROTTLE] +
|
||||
((manualSettingsData.ChannelMax[ManualControlSettings::CHANNELMAX_THROTTLE] -
|
||||
manualSettingsData.ChannelMin[ManualControlSettings::CHANNELMIN_THROTTLE]) * 0.02);
|
||||
manualSettingsData.ChannelMin[ManualControlSettings::CHANNELMIN_THROTTLE]) * 0.04);
|
||||
if ((abs(manualSettingsData.ChannelMax[ManualControlSettings::CHANNELMAX_FLIGHTMODE] -
|
||||
manualSettingsData.ChannelNeutral[ManualControlSettings::CHANNELNEUTRAL_FLIGHTMODE]) < 100) ||
|
||||
(abs(manualSettingsData.ChannelMin[ManualControlSettings::CHANNELMIN_FLIGHTMODE] -
|
||||
@ -1533,6 +1548,26 @@ void ConfigInputWidget::updatePositionSlider()
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
QString fmNumber = QString().setNum(manualSettingsDataPriv.FlightModeNumber);
|
||||
int count = 0;
|
||||
foreach(QSlider * sp, findChildren<QSlider *>()) {
|
||||
// Find FlightMode slider and apply stylesheet
|
||||
if (sp->objectName() == "channelNeutral") {
|
||||
if (count == 4) {
|
||||
sp->setStyleSheet(
|
||||
"QSlider::groove:horizontal {border: 2px solid rgb(196, 196, 196); height: 12px; border-radius: 4px; "
|
||||
"border-image:url(:/configgadget/images/flightmode_bg" + fmNumber + ".png); }"
|
||||
"QSlider::add-page:horizontal { background: none; border: none; }"
|
||||
"QSlider::sub-page:horizontal { background: none; border: none; }"
|
||||
"QSlider::handle:horizontal { background: rgba(196, 196, 196, 255); width: 10px; height: 28px; "
|
||||
"margin: -3px -2px; border-radius: 3px; border: 1px solid #777; }");
|
||||
count++;
|
||||
} else {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ConfigInputWidget::updateCalibration()
|
||||
@ -1547,8 +1582,12 @@ void ConfigInputWidget::updateCalibration()
|
||||
(reverse[i] && manualSettingsData.ChannelMax[i] > manualCommandData.Channel[i])) {
|
||||
manualSettingsData.ChannelMax[i] = manualCommandData.Channel[i];
|
||||
}
|
||||
if (i == ManualControlSettings::CHANNELNUMBER_FLIGHTMODE || i == ManualControlSettings::CHANNELNUMBER_FLIGHTMODE) {
|
||||
adjustSpecialNeutrals();
|
||||
} else {
|
||||
manualSettingsData.ChannelNeutral[i] = manualCommandData.Channel[i];
|
||||
}
|
||||
}
|
||||
|
||||
manualSettingsObj->setData(manualSettingsData);
|
||||
manualSettingsObj->updated();
|
||||
@ -1558,10 +1597,15 @@ void ConfigInputWidget::simpleCalibration(bool enable)
|
||||
{
|
||||
if (enable) {
|
||||
ui->configurationWizard->setEnabled(false);
|
||||
ui->saveRCInputToRAM->setEnabled(false);
|
||||
ui->saveRCInputToSD->setEnabled(false);
|
||||
ui->runCalibration->setText(tr("Stop Manual Calibration"));
|
||||
|
||||
QMessageBox msgBox;
|
||||
msgBox.setText(tr("Arming Settings are now set to 'Always Disarmed' for your safety."));
|
||||
msgBox.setDetailedText(tr("You will have to reconfigure the arming settings manually when the wizard is finished."));
|
||||
msgBox.setText(tr("<p>Arming Settings are now set to 'Always Disarmed' for your safety.</p>"
|
||||
"<p>Be sure your receiver is powered with an external source and Transmitter is on.</p>"
|
||||
"<p align='center'><b>Stop Manual Calibration</b> when done</p>"));
|
||||
msgBox.setDetailedText(tr("You will have to reconfigure the arming settings manually when the manual calibration is finished."));
|
||||
msgBox.setStandardButtons(QMessageBox::Ok);
|
||||
msgBox.setDefaultButton(QMessageBox::Ok);
|
||||
msgBox.exec();
|
||||
@ -1582,9 +1626,19 @@ void ConfigInputWidget::simpleCalibration(bool enable)
|
||||
|
||||
fastMdataSingle(manualCommandObj, &manualControlMdata);
|
||||
|
||||
// Stash actuatorSettings
|
||||
actuatorSettingsData = actuatorSettingsObj->getData();
|
||||
previousActuatorSettingsData = actuatorSettingsData;
|
||||
|
||||
// Disable all actuators
|
||||
resetActuatorSettings();
|
||||
|
||||
connect(manualCommandObj, SIGNAL(objectUnpacked(UAVObject *)), this, SLOT(updateCalibration()));
|
||||
} else {
|
||||
ui->configurationWizard->setEnabled(true);
|
||||
ui->saveRCInputToRAM->setEnabled(true);
|
||||
ui->saveRCInputToSD->setEnabled(true);
|
||||
ui->runCalibration->setText(tr("Start Manual Calibration"));
|
||||
|
||||
manualCommandData = manualCommandObj->getData();
|
||||
manualSettingsData = manualSettingsObj->getData();
|
||||
@ -1592,22 +1646,64 @@ void ConfigInputWidget::simpleCalibration(bool enable)
|
||||
restoreMdataSingle(manualCommandObj, &manualControlMdata);
|
||||
|
||||
for (unsigned int i = 0; i < ManualControlCommand::CHANNEL_NUMELEM; i++) {
|
||||
if (i == ManualControlSettings::CHANNELNUMBER_FLIGHTMODE || i == ManualControlSettings::CHANNELNUMBER_FLIGHTMODE) {
|
||||
adjustSpecialNeutrals();
|
||||
} else {
|
||||
manualSettingsData.ChannelNeutral[i] = manualCommandData.Channel[i];
|
||||
}
|
||||
}
|
||||
|
||||
manualSettingsObj->setData(manualSettingsData);
|
||||
|
||||
// Load actuator settings back from beginning of manual calibration
|
||||
actuatorSettingsObj->setData(previousActuatorSettingsData);
|
||||
|
||||
disconnect(manualCommandObj, SIGNAL(objectUnpacked(UAVObject *)), this, SLOT(updateCalibration()));
|
||||
}
|
||||
}
|
||||
|
||||
void ConfigInputWidget::adjustSpecialNeutrals()
|
||||
{
|
||||
// FlightMode and Throttle need special neutral settings
|
||||
//
|
||||
// Force flight mode neutral to middle
|
||||
manualSettingsData.ChannelNeutral[ManualControlSettings::CHANNELNUMBER_FLIGHTMODE] =
|
||||
(manualSettingsData.ChannelMax[ManualControlSettings::CHANNELNUMBER_FLIGHTMODE] +
|
||||
manualSettingsData.ChannelMin[ManualControlSettings::CHANNELNUMBER_FLIGHTMODE]) / 2;
|
||||
|
||||
// Force throttle to be near min
|
||||
// Force throttle to be near min, add 4% from total range to avoid arming issues
|
||||
manualSettingsData.ChannelNeutral[ManualControlSettings::CHANNELNEUTRAL_THROTTLE] =
|
||||
manualSettingsData.ChannelMin[ManualControlSettings::CHANNELMIN_THROTTLE] +
|
||||
((manualSettingsData.ChannelMax[ManualControlSettings::CHANNELMAX_THROTTLE] -
|
||||
manualSettingsData.ChannelMin[ManualControlSettings::CHANNELMIN_THROTTLE]) * 0.02);
|
||||
manualSettingsData.ChannelMin[ManualControlSettings::CHANNELMIN_THROTTLE]) * 0.04);
|
||||
}
|
||||
|
||||
bool ConfigInputWidget::shouldObjectBeSaved(UAVObject *object)
|
||||
{
|
||||
// ManualControlCommand no need to be saved
|
||||
return dynamic_cast<ManualControlCommand *>(object) == NULL;
|
||||
}
|
||||
|
||||
void ConfigInputWidget::resetChannelSettings()
|
||||
{
|
||||
manualSettingsData = manualSettingsObj->getData();
|
||||
// Clear all channel data : Channel Type (PPM,PWM..) and Number
|
||||
for (unsigned int channel = 0; channel < 9; channel++) {
|
||||
manualSettingsData.ChannelGroups[channel] = ManualControlSettings::CHANNELGROUPS_NONE;
|
||||
manualSettingsData.ChannelNumber[channel] = 0;
|
||||
manualSettingsObj->setData(manualSettingsData);
|
||||
|
||||
disconnect(manualCommandObj, SIGNAL(objectUnpacked(UAVObject *)), this, SLOT(updateCalibration()));
|
||||
}
|
||||
}
|
||||
|
||||
void ConfigInputWidget::resetActuatorSettings()
|
||||
{
|
||||
actuatorSettingsData = actuatorSettingsObj->getData();
|
||||
// Clear all output data : Min, max, neutral = 1500
|
||||
// 1500 = servo middle, can be applied to all outputs because board is 'Alwaysdisarmed'
|
||||
for (unsigned int output = 0; output < 12; output++) {
|
||||
actuatorSettingsData.ChannelMax[output] = 1500;
|
||||
actuatorSettingsData.ChannelMin[output] = 1500;
|
||||
actuatorSettingsData.ChannelNeutral[output] = 1500;
|
||||
actuatorSettingsObj->setData(actuatorSettingsData);
|
||||
}
|
||||
}
|
||||
|
@ -39,6 +39,7 @@
|
||||
#include <QRadioButton>
|
||||
#include "manualcontrolcommand.h"
|
||||
#include "manualcontrolsettings.h"
|
||||
#include "actuatorsettings.h"
|
||||
#include "flightmodesettings.h"
|
||||
#include "receiveractivity.h"
|
||||
#include <QGraphicsView>
|
||||
@ -65,6 +66,7 @@ public:
|
||||
goToWizard();
|
||||
}
|
||||
void enableControls(bool enable);
|
||||
bool shouldObjectBeSaved(UAVObject *object);
|
||||
|
||||
private:
|
||||
bool growing;
|
||||
@ -121,6 +123,10 @@ private:
|
||||
ManualControlSettings::DataFields manualSettingsData;
|
||||
ManualControlSettings::DataFields previousManualSettingsData;
|
||||
|
||||
ActuatorSettings *actuatorSettingsObj;
|
||||
ActuatorSettings::DataFields actuatorSettingsData;
|
||||
ActuatorSettings::DataFields previousActuatorSettingsData;
|
||||
|
||||
FlightModeSettings *flightModeSettingsObj;
|
||||
FlightModeSettings::DataFields flightModeSettingsData;
|
||||
FlightModeSettings::DataFields previousFlightModeSettingsData;
|
||||
@ -188,7 +194,10 @@ private slots:
|
||||
void updatePositionSlider();
|
||||
void invertControls();
|
||||
void simpleCalibration(bool state);
|
||||
void adjustSpecialNeutrals();
|
||||
void updateCalibration();
|
||||
void resetChannelSettings();
|
||||
void resetActuatorSettings();
|
||||
|
||||
protected:
|
||||
void resizeEvent(QResizeEvent *event);
|
||||
|
BIN
ground/openpilotgcs/src/plugins/config/images/flightmode_bg1.png
Normal file
BIN
ground/openpilotgcs/src/plugins/config/images/flightmode_bg1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 499 B |
BIN
ground/openpilotgcs/src/plugins/config/images/flightmode_bg2.png
Normal file
BIN
ground/openpilotgcs/src/plugins/config/images/flightmode_bg2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 866 B |
BIN
ground/openpilotgcs/src/plugins/config/images/flightmode_bg3.png
Normal file
BIN
ground/openpilotgcs/src/plugins/config/images/flightmode_bg3.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.2 KiB |
BIN
ground/openpilotgcs/src/plugins/config/images/flightmode_bg4.png
Normal file
BIN
ground/openpilotgcs/src/plugins/config/images/flightmode_bg4.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.5 KiB |
BIN
ground/openpilotgcs/src/plugins/config/images/flightmode_bg5.png
Normal file
BIN
ground/openpilotgcs/src/plugins/config/images/flightmode_bg5.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.8 KiB |
BIN
ground/openpilotgcs/src/plugins/config/images/flightmode_bg6.png
Normal file
BIN
ground/openpilotgcs/src/plugins/config/images/flightmode_bg6.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.2 KiB |
@ -116,8 +116,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>772</width>
|
||||
<height>514</height>
|
||||
<width>774</width>
|
||||
<height>497</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
@ -419,7 +419,7 @@
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Manual Calibration</string>
|
||||
<string>Start Manual Calibration</string>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
@ -542,8 +542,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>724</width>
|
||||
<height>497</height>
|
||||
<width>730</width>
|
||||
<height>554</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_7" rowstretch="1,0,0,0">
|
||||
@ -2044,8 +2044,8 @@ Setup the flight mode channel on the RC Input tab if you have not done so alread
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>407</width>
|
||||
<height>138</height>
|
||||
<width>544</width>
|
||||
<height>169</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
|
@ -12,6 +12,7 @@ InputChannelForm::InputChannelForm(const int index, QWidget *parent) :
|
||||
connect(ui->channelMin, SIGNAL(valueChanged(int)), this, SLOT(minMaxUpdated()));
|
||||
connect(ui->channelMax, SIGNAL(valueChanged(int)), this, SLOT(minMaxUpdated()));
|
||||
connect(ui->neutralValue, SIGNAL(valueChanged(int)), this, SLOT(neutralUpdated()));
|
||||
connect(ui->channelNeutral, SIGNAL(valueChanged(int)), this, SLOT(updateTooltip()));
|
||||
connect(ui->channelGroup, SIGNAL(currentIndexChanged(int)), this, SLOT(groupUpdated()));
|
||||
connect(ui->channelRev, SIGNAL(toggled(bool)), this, SLOT(reversedUpdated()));
|
||||
|
||||
@ -53,6 +54,15 @@ void InputChannelForm::minMaxUpdated()
|
||||
ui->channelRev->setChecked(reverse);
|
||||
ui->channelNeutral->setInvertedAppearance(reverse);
|
||||
ui->channelNeutral->setInvertedControls(reverse);
|
||||
|
||||
updateNeutralMark();
|
||||
}
|
||||
|
||||
void InputChannelForm::updateTooltip()
|
||||
{
|
||||
int currentValue = ui->channelNeutral->value();
|
||||
|
||||
ui->channelNeutral->setToolTip(QString::number(currentValue));
|
||||
}
|
||||
|
||||
void InputChannelForm::neutralUpdated()
|
||||
@ -72,6 +82,30 @@ void InputChannelForm::neutralUpdated()
|
||||
ui->channelMax->setValue(neutralValue);
|
||||
}
|
||||
}
|
||||
|
||||
updateNeutralMark();
|
||||
}
|
||||
|
||||
void InputChannelForm::updateNeutralMark()
|
||||
{
|
||||
// Add a small neutral red mark on groove background
|
||||
int neutral = ui->neutralValue->value();
|
||||
int min = ui->channelMin->value();
|
||||
int max = ui->channelMax->value();
|
||||
|
||||
float range = max - min;
|
||||
float offset = neutral - min;
|
||||
float neutralPosition = offset / range;
|
||||
|
||||
ui->channelNeutral->setStyleSheet(
|
||||
"QSlider::groove:horizontal { border: 1px solid rgb(196, 196, 196); height: 6px; border-radius: 2px; "
|
||||
"background: qlineargradient(x1:0, y1:0, x2:1, y2:0, stop:" + QString::number(neutralPosition - 0.01) + " transparent, stop:"
|
||||
+ QString::number(neutralPosition) + " red, stop:" + QString::number(neutralPosition + 0.01) + " transparent); }"
|
||||
"QSlider::add-page:horizontal { background: rgba(255,255,255,180); border: 1px solid #777; margin: 0px 0px 0px 2px; border-radius: 4px; }"
|
||||
"QSlider::sub-page:horizontal { background: rgba(78,147,246,180); border: 1px solid #777; margin: 0px 2px 0px 0px; border-radius: 4px; }"
|
||||
"QSlider::handle:horizontal { background: rgba(196,196,196,180); width: 18px; height: 28px; margin: -2px 0px; border-radius: 3px; "
|
||||
"border: 1px solid #777; }"
|
||||
);
|
||||
}
|
||||
|
||||
void InputChannelForm::reversedUpdated()
|
||||
|
@ -23,6 +23,8 @@ public:
|
||||
virtual void setName(const QString &name);
|
||||
|
||||
private slots:
|
||||
void updateNeutralMark();
|
||||
void updateTooltip();
|
||||
void minMaxUpdated();
|
||||
void neutralUpdated();
|
||||
void reversedUpdated();
|
||||
|
@ -7,7 +7,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>923</width>
|
||||
<height>51</height>
|
||||
<height>57</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@ -215,7 +215,7 @@ margin:1px;</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="9">
|
||||
<item row="1" column="11">
|
||||
<widget class="QSpinBox" name="channelResponseTime">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
@ -311,7 +311,7 @@ margin:1px;</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="7">
|
||||
<item row="0" column="9">
|
||||
<spacer name="horizontalSpacer_4">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
@ -343,7 +343,7 @@ margin:1px;</string>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="1" column="7">
|
||||
<item row="1" column="9">
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
@ -359,8 +359,8 @@ margin:1px;</string>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="0" column="8">
|
||||
<widget class="QLabel" name="legend6">
|
||||
<item row="0" column="10">
|
||||
<widget class="QLabel" name="legend7">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
@ -408,8 +408,8 @@ margin:1px;</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="9">
|
||||
<widget class="QLabel" name="legend7">
|
||||
<item row="0" column="11">
|
||||
<widget class="QLabel" name="legend8">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
@ -457,8 +457,8 @@ margin:1px;</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="6">
|
||||
<widget class="QLabel" name="legend5">
|
||||
<item row="0" column="8">
|
||||
<widget class="QLabel" name="legend6">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
@ -506,52 +506,6 @@ margin:1px;</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="5">
|
||||
<widget class="QLabel" name="legend4">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>-1</pointsize>
|
||||
<weight>75</weight>
|
||||
<italic>false</italic>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Channel neutral</string>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
|
||||
color: rgb(255, 255, 255);
|
||||
border-radius: 5;
|
||||
font: bold 12px;
|
||||
margin:1px;</string>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Neutral</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="3">
|
||||
<widget class="QLabel" name="legend3">
|
||||
<property name="enabled">
|
||||
@ -644,7 +598,7 @@ margin:1px;</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="6">
|
||||
<item row="1" column="8">
|
||||
<widget class="QSpinBox" name="channelMax">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
@ -684,105 +638,7 @@ margin:1px;</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="5">
|
||||
<widget class="QFrame" name="frame">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>16777215</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::NoFrame</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<property name="leftMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QSlider" name="channelNeutral">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>50</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::StrongFocus</enum>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSpinBox" name="neutralValue">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>16777215</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="keyboardTracking">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>1000</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="8">
|
||||
<item row="1" column="10">
|
||||
<widget class="QFrame" name="frame_1">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
|
||||
@ -846,6 +702,143 @@ margin:1px;</string>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="7">
|
||||
<widget class="QSpinBox" name="neutralValue">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>16777215</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="keyboardTracking">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>1000</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="5">
|
||||
<widget class="QSlider" name="channelNeutral">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>50</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::StrongFocus</enum>
|
||||
</property>
|
||||
<property name="accessibleName">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="accessibleDescription">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="inputMethodHints">
|
||||
<set>Qt::ImhNone</set>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="tickPosition">
|
||||
<enum>QSlider::TicksBothSides</enum>
|
||||
</property>
|
||||
<property name="tickInterval">
|
||||
<number>50</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="5">
|
||||
<widget class="QLabel" name="legend4">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>-1</pointsize>
|
||||
<weight>75</weight>
|
||||
<italic>false</italic>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Channel value</string>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
|
||||
color: rgb(255, 255, 255);
|
||||
border-radius: 5;
|
||||
font: bold 12px;
|
||||
margin:1px;</string>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Channel Value</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="7">
|
||||
<widget class="QLabel" name="legend5">
|
||||
<property name="toolTip">
|
||||
<string>Channel neutral</string>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
|
||||
color: rgb(255, 255, 255);
|
||||
border-radius: 5;
|
||||
font: bold 12px;
|
||||
margin:1px;</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Neutral</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
|
Loading…
x
Reference in New Issue
Block a user