mirror of
https://github.com/opentx/opentx.git
synced 2025-07-23 16:25:16 +03:00
Data handling added. I have used the simplest possible channel class. An array with these channels are filled throughout the wizard, forming a simplistic mix table that can be passed on and inserted in the real mixer.
The simple mixer is fully functional for planes and multicopters. I have to read up on how helicopters are controlled. Currently that part is done wrong since I have no idea about how to set up helicopter mixes.
This commit is contained in:
parent
672e5f8088
commit
858c9193cb
5 changed files with 401 additions and 34 deletions
|
@ -74,6 +74,7 @@
|
|||
<file>images/wizard/tail.png</file>
|
||||
<file>images/wizard/tails.png</file>
|
||||
<file>images/wizard/throttle.png</file>
|
||||
<file>images/wizard/vtail.png</file>
|
||||
<file>images/wizard/wingtype.png</file>
|
||||
<file>images/library/00001.png</file>
|
||||
<file>images/library/00002.png</file>
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 9.7 KiB |
BIN
companion/src/images/wizard/vtail.png
Normal file
BIN
companion/src/images/wizard/vtail.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.9 KiB |
|
@ -1,6 +1,47 @@
|
|||
#include <QtGui>
|
||||
#include "wizarddialog.h"
|
||||
|
||||
Channel::Channel()
|
||||
{
|
||||
clear();
|
||||
}
|
||||
|
||||
void Channel::clear()
|
||||
{
|
||||
sourceDlg = -1;
|
||||
input1 = UNDEFINED;
|
||||
input2 = UNDEFINED;
|
||||
weight1 = 0;
|
||||
weight2 = 0;
|
||||
}
|
||||
|
||||
bool Channel::isEmpty()
|
||||
{
|
||||
return sourceDlg < 0;
|
||||
}
|
||||
|
||||
QString Channel::nameOf(Input input)
|
||||
{
|
||||
switch (input){
|
||||
case THROTTLE: return "THR";
|
||||
case RUDDER: return "RUD";
|
||||
case ELEVATOR: return "ELE";
|
||||
case AILERON: return "AIL";
|
||||
case FLAP: return "FLP";
|
||||
case AIRBREAK: return "AIR";
|
||||
default: return "---";
|
||||
}
|
||||
}
|
||||
|
||||
QString Channel::print()
|
||||
{
|
||||
QString str;
|
||||
str = QString("[%1, %2]").arg(nameOf(input1)).arg(weight1);
|
||||
if ( input2 != UNDEFINED )
|
||||
str += QString("[%1, %2]").arg(nameOf(input2)).arg(weight2);
|
||||
return str;
|
||||
}
|
||||
|
||||
WizardDialog::WizardDialog(QWidget *parent)
|
||||
: QWizard(parent)
|
||||
{
|
||||
|
@ -16,6 +57,7 @@ WizardDialog::WizardDialog(QWidget *parent)
|
|||
setPage(Page_Rudder, new RudderPage(this, "rudder",tr("Rudder"),tr("Does your model have a rudder?"), Page_Conclusion));
|
||||
setPage(Page_Tails, new TailSelectionPage(this, "tails",tr("Tail Type"),tr("Select which type of tail your model is equiped with.")));
|
||||
setPage(Page_Tail, new TailPage(this, "tail",tr("Tail"),tr("Select channels for tail control."), Page_Conclusion));
|
||||
setPage(Page_Vtail, new VTailPage(this, "vtail",tr("V-Tail"),tr("Select channels for tail control."), Page_Conclusion));
|
||||
setPage(Page_Simpletail, new SimpleTailPage(this, "simpletail",tr("Tail"),tr("Select elevator channel."), Page_Conclusion));
|
||||
setPage(Page_Cyclic, new CyclicPage(this, "cyclic",tr("Cyclic"),tr("Which type of swash control is installed in your helicopter?"), Page_Gyro));
|
||||
setPage(Page_Gyro, new GyroPage(this, "gyro",tr("Tail Gyro"),tr("Has your helicopter got an adjustable gyro for the tail?"), Page_Flybar));
|
||||
|
@ -24,10 +66,9 @@ WizardDialog::WizardDialog(QWidget *parent)
|
|||
setPage(Page_Helictrl, new HeliPage(this, "helictrl",tr("Helicopter"),tr("Select the controls for your helicopter"), Page_Conclusion));
|
||||
setPage(Page_Multirotor, new MultirotorPage(this, "multirotor",tr("Multirotor"),tr("Select the control channels for your multirotor"), Page_Conclusion));
|
||||
setPage(Page_Conclusion, new ConclusionPage(this, "conclusion",tr("Save Changes"),tr(
|
||||
"Your model should now be set up. You now have to manually check the direction of each control surface and reverse the channels that "
|
||||
"make controls move in the wrong direction.<br><br>Remove the propeller/propellers before you try to control your model for the first time.<br><br>"
|
||||
"Manually check the direction of each control surface and reverse any channels that make controls move in the wrong direction. "
|
||||
"Remove the propeller/propellers before you try to control your model for the first time.<br>"
|
||||
"Please note that continuing removes all old model settings!"), -1));
|
||||
|
||||
setStartId(Page_Models);
|
||||
|
||||
#ifndef Q_WS_MAC
|
||||
|
@ -58,6 +99,7 @@ void WizardDialog::showHelp()
|
|||
case Page_Rudder: message = tr("TBD."); break;
|
||||
case Page_Tails: message = tr("Select the tail type of your plane."); break;
|
||||
case Page_Tail: message = tr("TBD."); break;
|
||||
case Page_Vtail: message = tr("TBD."); break;
|
||||
case Page_Simpletail: message = tr("TBD."); break;
|
||||
case Page_Flybar: message = tr("TBD."); break;
|
||||
case Page_Cyclic: message = tr("TBD."); break;
|
||||
|
@ -65,17 +107,18 @@ void WizardDialog::showHelp()
|
|||
case Page_Fblheli: message = tr("TBD."); break;
|
||||
case Page_Helictrl: message = tr("TBD."); break;
|
||||
case Page_Multirotor: message = tr("TBD."); break;
|
||||
case Page_Conclusion: message = tr("TBD."); break;
|
||||
case Page_Conclusion: message = tr("TBD."); break;
|
||||
default: message = tr("Move on. Nothin to see here.");
|
||||
}
|
||||
QMessageBox::information(this, tr("Model Wizard Help"), message);
|
||||
}
|
||||
|
||||
StandardPage::StandardPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage)
|
||||
StandardPage::StandardPage(int currentPage, WizardDialog *dlg, QString image, QString title, QString text, int nextPage )
|
||||
: QWizardPage()
|
||||
{
|
||||
pageCurrent = currentPage;
|
||||
pageFollower = nextPage;
|
||||
wizardDialog = dlg;
|
||||
wizDlg = dlg;
|
||||
|
||||
setTitle(title);
|
||||
setPixmap(QWizard::WatermarkPixmap, QPixmap(QString(":/images/wizard/") + image + QString(".png")));
|
||||
|
@ -87,13 +130,59 @@ StandardPage::StandardPage(WizardDialog *dlg, QString image, QString title, QStr
|
|||
setLayout(layout);
|
||||
}
|
||||
|
||||
void StandardPage::populateCB( QComboBox *CB )
|
||||
{
|
||||
for (int j=0; j<MAX_CHANNELS; j++)
|
||||
CB->removeItem(0);
|
||||
|
||||
for (int i=0; i<MAX_CHANNELS; i++)
|
||||
{
|
||||
if (wizDlg->channel[i].isEmpty()){
|
||||
CB->addItem(tr("Channel ") + QString("%1").arg(i+1), i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool StandardPage::bookChannel(QString label, Input input1, int weight1, Input input2, int weight2 )
|
||||
{
|
||||
int index = label.right(1).toInt() - 1;
|
||||
|
||||
if (index<0 || index >= MAX_CHANNELS)
|
||||
return false;
|
||||
if (!wizDlg->channel[index].isEmpty())
|
||||
return false;
|
||||
|
||||
wizDlg->channel[index].sourceDlg = pageCurrent;
|
||||
wizDlg->channel[index].input1 = input1;
|
||||
wizDlg->channel[index].input2 = input2;
|
||||
wizDlg->channel[index].weight1 = weight1;
|
||||
wizDlg->channel[index].weight2 = weight2;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void StandardPage::releaseChannels()
|
||||
{
|
||||
for (int i=0; i<MAX_CHANNELS; i++)
|
||||
{
|
||||
if (wizDlg->channel[i].sourceDlg == pageCurrent){
|
||||
wizDlg->channel[i].clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void StandardPage::cleanupPage()
|
||||
{
|
||||
releaseChannels();
|
||||
}
|
||||
|
||||
int StandardPage::nextId() const
|
||||
{
|
||||
return pageFollower;
|
||||
}
|
||||
|
||||
ModelSelectionPage::ModelSelectionPage(WizardDialog *dlg, QString image, QString title, QString text)
|
||||
: StandardPage(dlg, image, title, text)
|
||||
: StandardPage(WizardDialog::Page_Models, dlg, image, title, text)
|
||||
{
|
||||
nameLineEdit = new QLineEdit;
|
||||
planeRB = new QRadioButton(tr("Plane"));
|
||||
|
@ -124,7 +213,7 @@ int ModelSelectionPage::nextId() const
|
|||
}
|
||||
|
||||
WingtypeSelectionPage::WingtypeSelectionPage(WizardDialog *dlg, QString image, QString title, QString text)
|
||||
: StandardPage(dlg, image, title, text)
|
||||
: StandardPage(WizardDialog::Page_Wingtypes, dlg, image, title, text)
|
||||
{
|
||||
standardWingRB = new QRadioButton(tr("Standard Wing"));
|
||||
standardWingRB->setChecked(true);
|
||||
|
@ -144,7 +233,7 @@ int WingtypeSelectionPage::nextId() const
|
|||
}
|
||||
|
||||
TailSelectionPage::TailSelectionPage(WizardDialog *dlg, QString image, QString title, QString text)
|
||||
: StandardPage(dlg, image, title, text)
|
||||
: StandardPage(WizardDialog::Page_Tails, dlg, image, title, text)
|
||||
{
|
||||
standardTailRB = new QRadioButton(tr("Elevator and Rudder"));
|
||||
standardTailRB->setChecked(true);
|
||||
|
@ -162,12 +251,14 @@ int TailSelectionPage::nextId() const
|
|||
{
|
||||
if (simpleTailRB->isChecked())
|
||||
return WizardDialog::Page_Simpletail;
|
||||
else if (vTailRB->isChecked())
|
||||
return WizardDialog::Page_Vtail;
|
||||
else
|
||||
return WizardDialog::Page_Tail;
|
||||
}
|
||||
|
||||
FlybarSelectionPage::FlybarSelectionPage(WizardDialog *dlg, QString image, QString title, QString text)
|
||||
: StandardPage(dlg, image, title, text)
|
||||
: StandardPage(WizardDialog::Page_Flybar, dlg, image, title, text)
|
||||
{
|
||||
flybarRB = new QRadioButton(tr("Has Flybar"));
|
||||
flybarRB->setChecked(true);
|
||||
|
@ -188,7 +279,7 @@ int FlybarSelectionPage::nextId() const
|
|||
}
|
||||
|
||||
ThrottlePage::ThrottlePage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage)
|
||||
: StandardPage(dlg, image, title, text, nextPage)
|
||||
: StandardPage(WizardDialog::Page_Throttle, dlg, image, title, text, nextPage)
|
||||
{
|
||||
motorRB = new QRadioButton(tr("Yes"));
|
||||
noMotorRB = new QRadioButton(tr("No"));
|
||||
|
@ -202,8 +293,17 @@ ThrottlePage::ThrottlePage(WizardDialog *dlg, QString image, QString title, QStr
|
|||
l->addWidget(throttleCB);
|
||||
}
|
||||
|
||||
void ThrottlePage::initializePage(){
|
||||
populateCB(throttleCB);
|
||||
}
|
||||
|
||||
bool ThrottlePage::validatePage() {
|
||||
releaseChannels();
|
||||
return bookChannel(throttleCB->currentText(), THROTTLE, 100 );
|
||||
}
|
||||
|
||||
AileronsPage::AileronsPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage)
|
||||
: StandardPage(dlg, image, title, text, nextPage)
|
||||
: StandardPage(WizardDialog::Page_Ailerons, dlg, image, title, text, nextPage)
|
||||
{
|
||||
noAileronsRB = new QRadioButton(tr("No"));
|
||||
oneAileronRB = new QRadioButton(tr("Yes, controlled by a single channel"));
|
||||
|
@ -222,8 +322,25 @@ AileronsPage::AileronsPage(WizardDialog *dlg, QString image, QString title, QStr
|
|||
l->addWidget(aileron2CB);
|
||||
}
|
||||
|
||||
void AileronsPage::initializePage(){
|
||||
populateCB(aileron1CB);
|
||||
populateCB(aileron2CB);
|
||||
}
|
||||
|
||||
bool AileronsPage::validatePage() {
|
||||
releaseChannels();
|
||||
if (noAileronsRB->isChecked()) {
|
||||
return true;
|
||||
}
|
||||
if (oneAileronRB->isChecked()) {
|
||||
return (bookChannel(aileron1CB->currentText(), AILERON, 100 ));
|
||||
}
|
||||
return( bookChannel(aileron1CB->currentText(), AILERON, 100 ) &&
|
||||
bookChannel(aileron2CB->currentText(), AILERON, 100 ));
|
||||
}
|
||||
|
||||
FlapsPage::FlapsPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage)
|
||||
: StandardPage(dlg, image, title, text, nextPage)
|
||||
: StandardPage(WizardDialog::Page_Flaps, dlg, image, title, text, nextPage)
|
||||
{
|
||||
noFlapsRB = new QRadioButton(tr("No"));
|
||||
oneFlapRB = new QRadioButton(tr("Yes, controlled by a single channel"));
|
||||
|
@ -242,8 +359,25 @@ FlapsPage::FlapsPage(WizardDialog *dlg, QString image, QString title, QString te
|
|||
l->addWidget(flap2CB);
|
||||
}
|
||||
|
||||
void FlapsPage::initializePage(){
|
||||
populateCB(flap1CB);
|
||||
populateCB(flap2CB);
|
||||
}
|
||||
|
||||
bool FlapsPage::validatePage() {
|
||||
releaseChannels();
|
||||
if (noFlapsRB->isChecked()) {
|
||||
return true;
|
||||
}
|
||||
if (oneFlapRB->isChecked()) {
|
||||
return (bookChannel(flap1CB->currentText(), FLAP, 100 ));
|
||||
}
|
||||
return( bookChannel(flap1CB->currentText(), FLAP, 100 ) &&
|
||||
bookChannel(flap2CB->currentText(), FLAP, 100 ));
|
||||
}
|
||||
|
||||
AirbreaksPage::AirbreaksPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage)
|
||||
: StandardPage(dlg, image, title, text, nextPage)
|
||||
: StandardPage(WizardDialog::Page_Airbrakes, dlg, image, title, text, nextPage)
|
||||
{
|
||||
noAirbreaksRB = new QRadioButton(tr("No"));
|
||||
oneAirbreakRB = new QRadioButton(tr("Yes, controlled by a single channel"));
|
||||
|
@ -262,8 +396,25 @@ AirbreaksPage::AirbreaksPage(WizardDialog *dlg, QString image, QString title, QS
|
|||
l->addWidget(airbreak2CB);
|
||||
}
|
||||
|
||||
void AirbreaksPage::initializePage(){
|
||||
populateCB(airbreak1CB);
|
||||
populateCB(airbreak2CB);
|
||||
}
|
||||
|
||||
bool AirbreaksPage::validatePage() {
|
||||
releaseChannels();
|
||||
if (noAirbreaksRB->isChecked()) {
|
||||
return true;
|
||||
}
|
||||
if (oneAirbreakRB->isChecked()) {
|
||||
return (bookChannel(airbreak1CB->currentText(), AIRBREAK, 100 ));
|
||||
}
|
||||
return( bookChannel(airbreak1CB->currentText(), AIRBREAK, 100 ) &&
|
||||
bookChannel(airbreak2CB->currentText(), AIRBREAK, 100 ));
|
||||
}
|
||||
|
||||
BankPage::BankPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage)
|
||||
: StandardPage(dlg, image, title, text, nextPage)
|
||||
: StandardPage(WizardDialog::Page_Bank, dlg, image, title, text, nextPage)
|
||||
{
|
||||
oneElevonChRB = new QRadioButton(tr("One"));
|
||||
oneElevonChRB->setChecked(true);
|
||||
|
@ -279,8 +430,23 @@ BankPage::BankPage(WizardDialog *dlg, QString image, QString title, QString text
|
|||
l->addWidget(new QLabel(tr("Second Elevon Channel:")));
|
||||
l->addWidget(elevon2CB);
|
||||
}
|
||||
|
||||
void BankPage::initializePage(){
|
||||
populateCB(elevon1CB);
|
||||
populateCB(elevon2CB);
|
||||
}
|
||||
|
||||
bool BankPage::validatePage() {
|
||||
releaseChannels();
|
||||
if (oneElevonChRB->isChecked()) {
|
||||
return (bookChannel(elevon1CB->currentText(), AILERON, 100, ELEVATOR, 100 ));
|
||||
}
|
||||
return( bookChannel(elevon1CB->currentText(), AILERON, 100, ELEVATOR, 100 ) &&
|
||||
bookChannel(elevon2CB->currentText(), AILERON, 100, ELEVATOR, 100 ));
|
||||
}
|
||||
|
||||
RudderPage::RudderPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage)
|
||||
: StandardPage(dlg, image, title, text, nextPage)
|
||||
: StandardPage(WizardDialog::Page_Rudder, dlg, image, title, text, nextPage)
|
||||
{
|
||||
noRudderRB = new QRadioButton(tr("No"));
|
||||
noRudderRB->setChecked(true);
|
||||
|
@ -294,8 +460,44 @@ RudderPage::RudderPage(WizardDialog *dlg, QString image, QString title, QString
|
|||
l->addWidget(rudderCB);
|
||||
}
|
||||
|
||||
void RudderPage::initializePage(){
|
||||
populateCB(rudderCB);
|
||||
}
|
||||
|
||||
bool RudderPage::validatePage() {
|
||||
releaseChannels();
|
||||
if (noRudderRB->isChecked())
|
||||
return true;
|
||||
|
||||
return (bookChannel(rudderCB->currentText(), RUDDER, 100));
|
||||
}
|
||||
|
||||
VTailPage::VTailPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage)
|
||||
: StandardPage(WizardDialog::Page_Tail, dlg, image, title, text, nextPage)
|
||||
{
|
||||
tail1CB = new QComboBox();
|
||||
tail2CB = new QComboBox();
|
||||
|
||||
QLayout *l = layout();
|
||||
l->addWidget(new QLabel(tr("First Tail Channel:")));
|
||||
l->addWidget(tail1CB);
|
||||
l->addWidget(new QLabel(tr("Second Tail Channel:")));
|
||||
l->addWidget(tail2CB);
|
||||
}
|
||||
|
||||
void VTailPage::initializePage(){
|
||||
populateCB(tail1CB);
|
||||
populateCB(tail2CB);
|
||||
}
|
||||
|
||||
bool VTailPage::validatePage() {
|
||||
releaseChannels();
|
||||
return( bookChannel(tail1CB->currentText(), ELEVATOR, 100, RUDDER, 100 ) &&
|
||||
bookChannel(tail2CB->currentText(), ELEVATOR, 100, RUDDER, 100 ));
|
||||
}
|
||||
|
||||
TailPage::TailPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage)
|
||||
: StandardPage(dlg, image, title, text, nextPage)
|
||||
: StandardPage(WizardDialog::Page_Tail, dlg, image, title, text, nextPage)
|
||||
{
|
||||
elevatorCB = new QComboBox();
|
||||
rudderCB = new QComboBox();
|
||||
|
@ -307,8 +509,19 @@ TailPage::TailPage(WizardDialog *dlg, QString image, QString title, QString text
|
|||
l->addWidget(elevatorCB);
|
||||
}
|
||||
|
||||
void TailPage::initializePage(){
|
||||
populateCB(elevatorCB);
|
||||
populateCB(rudderCB);
|
||||
}
|
||||
|
||||
bool TailPage::validatePage() {
|
||||
releaseChannels();
|
||||
return( bookChannel(elevatorCB->currentText(), ELEVATOR, 100 ) &&
|
||||
bookChannel(rudderCB->currentText(), RUDDER, 100 ));
|
||||
}
|
||||
|
||||
SimpleTailPage::SimpleTailPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage)
|
||||
: StandardPage(dlg, image, title, text, nextPage)
|
||||
: StandardPage(WizardDialog::Page_Simpletail, dlg, image, title, text, nextPage)
|
||||
{
|
||||
elevatorCB = new QComboBox();
|
||||
|
||||
|
@ -317,8 +530,17 @@ SimpleTailPage::SimpleTailPage(WizardDialog *dlg, QString image, QString title,
|
|||
l->addWidget(elevatorCB);
|
||||
}
|
||||
|
||||
void SimpleTailPage::initializePage(){
|
||||
populateCB(elevatorCB);
|
||||
}
|
||||
|
||||
bool SimpleTailPage::validatePage() {
|
||||
releaseChannels();
|
||||
return( bookChannel(elevatorCB->currentText(), ELEVATOR, 100 ));
|
||||
}
|
||||
|
||||
CyclicPage::CyclicPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage)
|
||||
: StandardPage(dlg, image, title, text, nextPage)
|
||||
: StandardPage(WizardDialog::Page_Cyclic, dlg, image, title, text, nextPage)
|
||||
{
|
||||
cyclic90RB = new QRadioButton(tr("90"));
|
||||
cyclic90RB->setChecked(true);
|
||||
|
@ -333,8 +555,16 @@ CyclicPage::CyclicPage(WizardDialog *dlg, QString image, QString title, QString
|
|||
l->addWidget(cyclic140RB);
|
||||
}
|
||||
|
||||
void CyclicPage::initializePage(){
|
||||
}
|
||||
|
||||
bool CyclicPage::validatePage() {
|
||||
releaseChannels();
|
||||
return true;
|
||||
}
|
||||
|
||||
GyroPage::GyroPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage)
|
||||
: StandardPage(dlg, image, title, text, nextPage)
|
||||
: StandardPage(WizardDialog::Page_Gyro, dlg, image, title, text, nextPage)
|
||||
{
|
||||
noGyroRB = new QRadioButton(tr("No"));
|
||||
noGyroRB->setChecked(true);
|
||||
|
@ -347,8 +577,16 @@ GyroPage::GyroPage(WizardDialog *dlg, QString image, QString title, QString text
|
|||
l->addWidget(potGyroRB);
|
||||
}
|
||||
|
||||
void GyroPage::initializePage(){
|
||||
}
|
||||
|
||||
bool GyroPage::validatePage() {
|
||||
releaseChannels();
|
||||
return true;
|
||||
}
|
||||
|
||||
FblPage::FblPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage)
|
||||
: StandardPage(dlg, image, title, text, nextPage)
|
||||
: StandardPage(WizardDialog::Page_Fblheli, dlg, image, title, text, nextPage)
|
||||
{
|
||||
throttleCB = new QComboBox();
|
||||
yawCB = new QComboBox();
|
||||
|
@ -366,8 +604,23 @@ FblPage::FblPage(WizardDialog *dlg, QString image, QString title, QString text,
|
|||
l->addWidget(rollCB);
|
||||
}
|
||||
|
||||
void FblPage::initializePage(){
|
||||
populateCB(throttleCB);
|
||||
populateCB(yawCB);
|
||||
populateCB(pitchCB);
|
||||
populateCB(rollCB);
|
||||
}
|
||||
|
||||
bool FblPage::validatePage() {
|
||||
releaseChannels();
|
||||
return( bookChannel(throttleCB->currentText(), THROTTLE, 100 ) &&
|
||||
bookChannel(yawCB->currentText(), RUDDER, 100 ) &&
|
||||
bookChannel(pitchCB->currentText(), ELEVATOR, 100 ) &&
|
||||
bookChannel(rollCB->currentText(), AILERON, 100 ));
|
||||
}
|
||||
|
||||
HeliPage::HeliPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage)
|
||||
: StandardPage(dlg, image, title, text, nextPage)
|
||||
: StandardPage(WizardDialog::Page_Helictrl, dlg, image, title, text, nextPage)
|
||||
{
|
||||
throttleCB = new QComboBox();
|
||||
yawCB = new QComboBox();
|
||||
|
@ -385,8 +638,23 @@ HeliPage::HeliPage(WizardDialog *dlg, QString image, QString title, QString text
|
|||
l->addWidget(rollCB);
|
||||
}
|
||||
|
||||
void HeliPage::initializePage(){
|
||||
populateCB(throttleCB);
|
||||
populateCB(yawCB);
|
||||
populateCB(pitchCB);
|
||||
populateCB(rollCB);
|
||||
}
|
||||
|
||||
bool HeliPage::validatePage() {
|
||||
releaseChannels();
|
||||
return( bookChannel(throttleCB->currentText(), THROTTLE, 100 ) &&
|
||||
bookChannel(yawCB->currentText(), RUDDER, 100 ) &&
|
||||
bookChannel(pitchCB->currentText(), ELEVATOR, 100 ) &&
|
||||
bookChannel(rollCB->currentText(), AILERON, 100 ));
|
||||
}
|
||||
|
||||
MultirotorPage::MultirotorPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage)
|
||||
: StandardPage(dlg, image, title, text, nextPage)
|
||||
: StandardPage(WizardDialog::Page_Multirotor, dlg, image, title, text, nextPage)
|
||||
{
|
||||
throttleCB = new QComboBox();
|
||||
yawCB = new QComboBox();
|
||||
|
@ -404,13 +672,43 @@ MultirotorPage::MultirotorPage(WizardDialog *dlg, QString image, QString title,
|
|||
l->addWidget(rollCB);
|
||||
}
|
||||
|
||||
void MultirotorPage::initializePage(){
|
||||
populateCB(throttleCB);
|
||||
populateCB(yawCB);
|
||||
populateCB(pitchCB);
|
||||
populateCB(rollCB);
|
||||
}
|
||||
|
||||
bool MultirotorPage::validatePage() {
|
||||
releaseChannels();
|
||||
return( bookChannel(throttleCB->currentText(), THROTTLE, 100 ) &&
|
||||
bookChannel(yawCB->currentText(), RUDDER, 100 ) &&
|
||||
bookChannel(pitchCB->currentText(), ELEVATOR, 100 ) &&
|
||||
bookChannel(rollCB->currentText(), AILERON, 100 ));
|
||||
}
|
||||
|
||||
ConclusionPage::ConclusionPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage)
|
||||
: StandardPage(dlg, image, title, text, nextPage)
|
||||
: StandardPage(WizardDialog::Page_Conclusion, dlg, image, title, text, nextPage)
|
||||
{
|
||||
textLabel = new QLabel();
|
||||
proceedCB = new QCheckBox(tr("OK, I understand."));
|
||||
registerField("evaluate.proceed*", proceedCB);
|
||||
|
||||
QLayout *l = layout();
|
||||
l->addWidget(textLabel);
|
||||
l->addWidget(proceedCB);
|
||||
}
|
||||
|
||||
void ConclusionPage::initializePage(){
|
||||
QString str;
|
||||
for (int i=0; i<MAX_CHANNELS; i++){
|
||||
if (!wizDlg->channel[i].isEmpty()){
|
||||
str += QString(tr("Channel %1: ").arg(i+1));
|
||||
str += wizDlg->channel[i].print();
|
||||
str += QString("<br>");
|
||||
}
|
||||
}
|
||||
textLabel->setText(str);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -12,17 +12,38 @@ class QComboBox;
|
|||
QT_END_NAMESPACE
|
||||
|
||||
|
||||
#define MAX_CHANNELS 8
|
||||
|
||||
enum Input {UNDEFINED, THROTTLE, RUDDER, ELEVATOR, AILERON, FLAP, AIRBREAK};
|
||||
|
||||
class Channel
|
||||
{
|
||||
public:
|
||||
int sourceDlg;
|
||||
Input input1;
|
||||
Input input2;
|
||||
int weight1;
|
||||
int weight2;
|
||||
|
||||
Channel();
|
||||
QString nameOf(Input);
|
||||
bool isEmpty();
|
||||
void clear();
|
||||
QString print();
|
||||
};
|
||||
|
||||
|
||||
class WizardDialog : public QWizard
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
enum { Page_Models, Page_Throttle, Page_Wingtypes, Page_Ailerons, Page_Flaps,
|
||||
Page_Airbrakes, Page_Bank, Page_Rudder, Page_Tails, Page_Tail,
|
||||
Page_Simpletail, Page_Cyclic, Page_Gyro, Page_Flybar,
|
||||
Page_Vtail, Page_Simpletail, Page_Cyclic, Page_Gyro, Page_Flybar,
|
||||
Page_Fblheli, Page_Helictrl, Page_Multirotor,
|
||||
Page_Conclusion };
|
||||
|
||||
Channel channel[MAX_CHANNELS];
|
||||
WizardDialog(QWidget *parent = 0);
|
||||
|
||||
private slots:
|
||||
|
@ -33,10 +54,15 @@ class StandardPage: public QWizardPage
|
|||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
StandardPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage=-1);
|
||||
WizardDialog *wizardDialog;
|
||||
StandardPage(int curPage, WizardDialog *dlg, QString image, QString title, QString text, int nextPage=-1);
|
||||
WizardDialog *wizDlg;
|
||||
void populateCB( QComboBox *);
|
||||
bool bookChannel(QString label, Input input1, int weight1, Input input2=UNDEFINED, int weight2=0 );
|
||||
void releaseChannels();
|
||||
void cleanupPage();
|
||||
private:
|
||||
QLabel *topLabel;
|
||||
int pageCurrent;
|
||||
int pageFollower;
|
||||
int nextId() const;
|
||||
};
|
||||
|
@ -93,6 +119,8 @@ class ThrottlePage: public StandardPage
|
|||
Q_OBJECT
|
||||
public:
|
||||
ThrottlePage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage=-1);
|
||||
void initializePage();
|
||||
bool validatePage();
|
||||
private:
|
||||
QRadioButton *motorRB;
|
||||
QRadioButton *noMotorRB;
|
||||
|
@ -104,6 +132,8 @@ class AileronsPage: public StandardPage
|
|||
Q_OBJECT
|
||||
public:
|
||||
AileronsPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage=-1);
|
||||
void initializePage();
|
||||
bool validatePage();
|
||||
private:
|
||||
QRadioButton *oneAileronRB;
|
||||
QRadioButton *twoAileronsRB;
|
||||
|
@ -117,6 +147,8 @@ class FlapsPage: public StandardPage
|
|||
Q_OBJECT
|
||||
public:
|
||||
FlapsPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage=-1);
|
||||
void initializePage();
|
||||
bool validatePage();
|
||||
private:
|
||||
QRadioButton *oneFlapRB;
|
||||
QRadioButton *twoFlapsRB;
|
||||
|
@ -130,6 +162,8 @@ class AirbreaksPage: public StandardPage
|
|||
Q_OBJECT
|
||||
public:
|
||||
AirbreaksPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage=-1);
|
||||
void initializePage();
|
||||
bool validatePage();
|
||||
private:
|
||||
QRadioButton *oneAirbreakRB;
|
||||
QRadioButton *twoAirbreaksRB;
|
||||
|
@ -143,6 +177,8 @@ class BankPage: public StandardPage
|
|||
Q_OBJECT
|
||||
public:
|
||||
BankPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage=-1);
|
||||
void initializePage();
|
||||
bool validatePage();
|
||||
private:
|
||||
QRadioButton *oneElevonChRB;
|
||||
QRadioButton *twoElevonsChRB;
|
||||
|
@ -155,6 +191,8 @@ class RudderPage: public StandardPage
|
|||
Q_OBJECT
|
||||
public:
|
||||
RudderPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage=-1);
|
||||
void initializePage();
|
||||
bool validatePage();
|
||||
private:
|
||||
QRadioButton *noRudderRB;
|
||||
QRadioButton *hasRudderRB;
|
||||
|
@ -165,16 +203,34 @@ class TailPage: public StandardPage
|
|||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
TailPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage=-1);
|
||||
TailPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage=-1);
|
||||
void initializePage();
|
||||
bool validatePage();
|
||||
private:
|
||||
QComboBox *elevatorCB;
|
||||
QComboBox *rudderCB;
|
||||
};
|
||||
|
||||
class VTailPage: public StandardPage
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
VTailPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage=-1);
|
||||
void initializePage();
|
||||
bool validatePage();
|
||||
private:
|
||||
QComboBox *tail1CB;
|
||||
QComboBox *tail2CB;
|
||||
};
|
||||
|
||||
class SimpleTailPage: public StandardPage
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
SimpleTailPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage=-1);
|
||||
SimpleTailPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage=-1);
|
||||
void initializePage();
|
||||
bool validatePage();
|
||||
private:
|
||||
QComboBox *elevatorCB;
|
||||
};
|
||||
|
||||
|
@ -183,6 +239,8 @@ class CyclicPage: public StandardPage
|
|||
Q_OBJECT
|
||||
public:
|
||||
CyclicPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage=-1);
|
||||
void initializePage();
|
||||
bool validatePage();
|
||||
private:
|
||||
QRadioButton *cyclic90RB;
|
||||
QRadioButton *cyclic120RB;
|
||||
|
@ -195,6 +253,8 @@ class GyroPage: public StandardPage
|
|||
Q_OBJECT
|
||||
public:
|
||||
GyroPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage=-1);
|
||||
void initializePage();
|
||||
bool validatePage();
|
||||
private:
|
||||
QRadioButton *noGyroRB;
|
||||
QRadioButton *switchGyroRB;
|
||||
|
@ -205,7 +265,9 @@ class FblPage: public StandardPage
|
|||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
FblPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage=-1);
|
||||
FblPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage=-1);
|
||||
void initializePage();
|
||||
bool validatePage();
|
||||
private:
|
||||
QComboBox *throttleCB;
|
||||
QComboBox *yawCB;
|
||||
|
@ -217,7 +279,9 @@ class HeliPage: public StandardPage
|
|||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
HeliPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage=-1);
|
||||
HeliPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage=-1);
|
||||
void initializePage();
|
||||
bool validatePage();
|
||||
private:
|
||||
QComboBox *throttleCB;
|
||||
QComboBox *yawCB;
|
||||
|
@ -229,7 +293,9 @@ class MultirotorPage: public StandardPage
|
|||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
MultirotorPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage=-1);
|
||||
MultirotorPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage=-1);
|
||||
void initializePage();
|
||||
bool validatePage();
|
||||
private:
|
||||
QComboBox *throttleCB;
|
||||
QComboBox *yawCB;
|
||||
|
@ -241,9 +307,11 @@ class ConclusionPage: public StandardPage
|
|||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
ConclusionPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage=-1);
|
||||
ConclusionPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage=-1);
|
||||
void initializePage();
|
||||
private:
|
||||
QCheckBox *proceedCB;
|
||||
QLabel *textLabel;
|
||||
};
|
||||
|
||||
#endif // WIZARDDIALOG_H
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue