From cf7984a3c5accd61fc50605b6aca5de475335fc1 Mon Sep 17 00:00:00 2001 From: bsongis Date: Wed, 4 Jun 2014 11:50:21 +0200 Subject: [PATCH] Fixes #1146 --- companion/src/companion.qrc | 2 +- companion/src/images/wizard/bank.png | Bin 28644 -> 0 bytes companion/src/images/wizard/elevons.png | Bin 0 -> 35201 bytes companion/src/wizarddata.h | 2 +- companion/src/wizarddialog.cpp | 478 ++++++++++++++---------- companion/src/wizarddialog.h | 44 +-- 6 files changed, 304 insertions(+), 222 deletions(-) delete mode 100644 companion/src/images/wizard/bank.png create mode 100755 companion/src/images/wizard/elevons.png diff --git a/companion/src/companion.qrc b/companion/src/companion.qrc index 0b8688d97..a9aa2df9c 100644 --- a/companion/src/companion.qrc +++ b/companion/src/companion.qrc @@ -60,7 +60,7 @@ images/taranison.png images/wizard/ailerons.png images/wizard/airbrakes.png - images/wizard/bank.png + images/wizard/elevons.png images/wizard/conclusion.png images/wizard/cyclic.png images/wizard/fblheli.png diff --git a/companion/src/images/wizard/bank.png b/companion/src/images/wizard/bank.png deleted file mode 100644 index 9c0c7738a3046c6ea3171043fa23aa54035f2f22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28644 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%0ANqzGD23SpHT1O77$=&8J!WY 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 H^ZNe)+SPYZ diff --git a/companion/src/images/wizard/elevons.png b/companion/src/images/wizard/elevons.png new file mode 100755 index 0000000000000000000000000000000000000000..fdace97b4acd64af7a39c8887325a1f2d89a4749 GIT binary patch literal 35201 zcmXt91yqy&_a5CadUPw@(j^Q*q+v7?BPArHq@`hiDBTT$(%m6LT0pv)l(Zln|M&Yp z=eM&s=iPSp?)}{RxzBx`=f-Gjsu1DR;)6gSqL->rUEsAE1VVd_iw!)7^9Jt&2k_if zjXi<)=l*-3DRO4{0ta#4z0^>~S;fZ0V}$U^aS?++%%GRh=lZ^j2Z4URzh+t=ce0Pg zUOo9Ni;0ejsDtW6w_6u+&dye}{4y}z*ZpSV-~OkuxwHB3c=e*G)7;s`-zm-Xurbbi z^8Gh2aTpISQ~`JYBjLxux-q%6t?bLoL0)x5^iWLPk7qJxqu?j@tJl9}kG)qTNJ)tY zHzm}abX`Y<6G_wFb4p(Xq3DuL8u6z@PrEL>E&Tla{xr_L_CzYXEBm$Pn6#3qs|j)? zsXw8Ul9uLyz@5$Ls^2*dC-HC)S!1C zg^q&O(a4TFFl?AZk}aD8cg=J*FCPnUk#sMsjKeHC%%Zod4nrJ2WNZhCuL=wVT0BZU z6L?LyFo}j6+CF~RV_t~wrt26`LVuqY1TUp*10UNgwz}FR!rGb7v}B(v$OQ zd}o)seN*3U*aKY;4}|85euufAnX$-u)P6i$a%{^Zr~S`n+~e<#zxW^R__SBu zm#iQy15Mp{>)%w_ry%$dg|{mb^{u+*=7)x`f4`;jj+q`mt8=G>_Q)M)N&6f%M>~|D zB&2EV5_R^7;X#oq&1p=Ei~05J@oq

Q+!u_h0LO-Y-lPqAr$tA^n2i-t7*bKaQoN z`QLi0j`S_Jda{&Y!U?Zy7|)S`kJou2j_6QJ#ouBK)D)CkTdHDWAMlc98EIk$C7GBg z_9x`%lGV|njyXFLC}}^sqZSO?UQ3fLdr{G1%tL$By`qkZNo?+ttI|ROgMUhyBYJ5J zO{D=#x*EeWQpDZ>wM{3WEW_A8z>}wPw^XJSeCKLLf;HnbyDpxSvujiXN^ERS3=&q6 z@{=}Pi5+o$&+sah7Y%e5I8E^JL(SjXeYX|yBdF-P&$;t8saeJMbxVh6UAd3r{aj_) zACNp%3V%}!!AWFRTuJDb=q-))~2`;F;>9T%7LbvhLiv|1s z*PZY4E?@VGdR-OwJ<~ zgButaxXxps{#AI)RSu3MbjZY3)&VhJ%D6sXo1E-*Ub?_#sR#$dzUU9jE{D-JkHZl{ zv{s+{OVt;W1!Q%)&cC0!o12>t5HvQfJT5K94)Rw16xEQ15N7sEqVlSI?|8zQOD-!Fcei&mBV zE&uxE%b|sp=4Do^Ov_X(yCt{72_6Q5fliBiZWk#Oq0HZX2uS`&rkjUoAjmoP-qp-l zmu%Io7b}7yCPb3>NUB-{2g8#da_jz6<-A1JRh*-LX?NBCxFqfM`g4p(!BIaQItw0CIwg<+J8x-W59`D#&kF6Uvs`}{84c|zFGQo>+QEli<#3B z$CPN{$TVFp%xFfo!W|ea&~-3@AqhiK$i*b(^0s@v^XFxx{}`pT&!$pSJV{DwNw<|S z9(KM=Qjg(^>laS7MwcZRqSoPog=VbEa%N_Rf7~ynkh4t8+;7W5jWNhK?{X~j*}i>6 z#nDIIt}0G7K``z)VkT|7v9S?LF

DEVuKByw_4wF2K_b9L&vomr+p>56WF?^|ZgT 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%0D&7I$jk#0Go1 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%0DY(GmtzYD93KS@cP(b|psGe21l)j~ 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 A9RL6T literal 0 HcmV?d00001 diff --git a/companion/src/wizarddata.h b/companion/src/wizarddata.h index ed810a63e..ee70984fd 100644 --- a/companion/src/wizarddata.h +++ b/companion/src/wizarddata.h @@ -54,7 +54,7 @@ enum WizardPage { Page_Ailerons, Page_Flaps, Page_Airbrakes, - Page_Bank, + Page_Elevons, Page_Rudder, Page_Tails, Page_Tail, diff --git a/companion/src/wizarddialog.cpp b/companion/src/wizarddialog.cpp index 4add68c3e..43396c1d3 100644 --- a/companion/src/wizarddialog.cpp +++ b/companion/src/wizarddialog.cpp @@ -26,26 +26,26 @@ WizardDialog::WizardDialog(const GeneralSettings & settings, unsigned int modelI setWindowIcon(CompanionIcon("wizard.png")); setWindowTitle(tr("Model Wizard")); - setPage(Page_Models, new ModelSelectionPage(this, "models",tr("Model Type"),tr("Enter model name and model type."))); - setPage(Page_Throttle, new ThrottlePage(this, "throttle",tr("Throttle"),tr("Has your model got a motor or an engine?"), Page_Wingtypes)); - setPage(Page_Wingtypes, new WingtypeSelectionPage(this, "wingtype",tr("Wing Type"),tr("Is your model a flying wing/deltawing or has it a standard wing configuration?"))); - setPage(Page_Ailerons, new AileronsPage(this, "ailerons",tr("Ailerons"),tr("Has your model got ailerons?"), Page_Flaps)); - setPage(Page_Flaps, new FlapsPage(this, "flaps",tr("Flaps"),tr("Has your model got flaps?"), Page_Airbrakes)); - setPage(Page_Airbrakes, new AirbrakesPage(this, "airbrakes",tr("Airbrakes"),tr("Has your model got airbrakes?"), Page_Tails)); - setPage(Page_Bank, new BankPage(this, "bank",tr("Flying-wing / Delta-wing"),tr("Are the elevons controlled by servos connected to separate channels or by a single servo channel?"), Page_Rudder)); - setPage(Page_Rudder, new RudderPage(this, "rudder",tr("Rudder"),tr("Does your model have a rudder?"), Page_Options)); - 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_Options)); - setPage(Page_Vtail, new VTailPage(this, "vtail",tr("V-Tail"),tr("Select channels for tail control."), Page_Options)); - setPage(Page_Simpletail, new SimpleTailPage(this, "simpletail",tr("Tail"),tr("Select elevator channel."), Page_Options)); - 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)); - setPage(Page_Flybar, new FlybarSelectionPage(this, "flybar",tr("Rotor Type"),tr("Has your helicopter got a flybar?"))); - setPage(Page_Fblheli, new FblPage(this, "fblheli",tr("Helicopter"),tr("Select the controls for your helicopter"), Page_Options)); - setPage(Page_Helictrl, new HeliPage(this, "helictrl",tr("Helicopter"),tr("Select the controls for your helicopter"), Page_Options)); - setPage(Page_Multirotor, new MultirotorPage(this, "multirotor",tr("Multirotor"),tr("Select the control channels for your multirotor"), Page_Options)); - setPage(Page_Options, new OptionsPage(this, "options",tr("Model Options"),tr("Select additional options"), Page_Conclusion)); - setPage(Page_Conclusion, new ConclusionPage(this, "conclusion",tr("Save Changes"),tr( + setPage(Page_Models, new ModelSelectionPage(this, "models", tr("Model Type"), tr("Enter model name and model type."))); + setPage(Page_Throttle, new ThrottlePage(this, "throttle", tr("Throttle"), tr("Has your model got a motor or an engine?"), Page_Wingtypes)); + setPage(Page_Wingtypes, new WingtypeSelectionPage(this, "wingtype", tr("Wing Type"), tr("Is your model a flying wing/deltawing or has it a standard wing configuration?"))); + setPage(Page_Ailerons, new AileronsPage(this, "ailerons", tr("Ailerons"), tr("Has your model got ailerons?"), Page_Flaps)); + setPage(Page_Flaps, new FlapsPage(this, "flaps", tr("Flaps"), tr("Has your model got flaps?"), Page_Airbrakes)); + setPage(Page_Airbrakes, new AirbrakesPage(this, "airbrakes", tr("Airbrakes"), tr("Has your model got airbrakes?"), Page_Tails)); + setPage(Page_Elevons, new ElevonsPage(this, "elevons", tr("Flying-wing / Delta-wing"), tr("Select the elevons channels"), Page_Rudder)); + setPage(Page_Rudder, new RudderPage(this, "rudder", tr("Rudder"), tr("Does your model have a rudder?"), Page_Options)); + 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_Options)); + setPage(Page_Vtail, new VTailPage(this, "vtail", tr("V-Tail"), tr("Select channels for tail control."), Page_Options)); + setPage(Page_Simpletail, new SimpleTailPage(this, "simpletail", tr("Tail"), tr("Select elevator channel."), Page_Options)); + 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)); + setPage(Page_Flybar, new FlybarSelectionPage(this, "flybar", tr("Rotor Type"), tr("Has your helicopter got a flybar?"))); + setPage(Page_Fblheli, new FblPage(this, "fblheli", tr("Helicopter"), tr("Select the controls for your helicopter"), Page_Options)); + setPage(Page_Helictrl, new HeliPage(this, "helictrl", tr("Helicopter"), tr("Select the controls for your helicopter"), Page_Options)); + setPage(Page_Multirotor, new MultirotorPage(this, "multirotor", tr("Multirotor"), tr("Select the control channels for your multirotor"), Page_Options)); + setPage(Page_Options, new OptionsPage(this, "options", tr("Model Options"), tr("Select additional options"), Page_Conclusion)); + setPage(Page_Conclusion, new ConclusionPage(this, "conclusion", tr("Save Changes"), tr( "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.
" "Please note that continuing removes all old model settings!"), -1)); @@ -65,77 +65,97 @@ void WizardDialog::showHelp() QString message; switch (currentId()) { - case Page_Models: - message = tr("Enter a name for your model and select model type."); break; - case Page_Throttle: - message = tr("Select the receiver channel that is connected to your ESC or throttle servo.

" - "Throttle - Spektrum: CH1, Futaba: CH3"); break; - case Page_Wingtypes: - message = tr("Most aircraft have a main wing and a tail with control surfaces. Flying wings and delta winged aircraft only have a single wing. " - "The main control surface on a standard wing controls the roll of the aircraft. This surface is called an aileron.
" - "The control surface of a delta wing controls both roll and pitch. This surface is called an elevon. "); break; - case Page_Ailerons: - message = tr("Models use one or two channels to control the ailerons.
" - "A so called Y-cable can be used to connect a single receiver channel to two separate aileron servos. " - "If your servos are connected by a Y-cable you should select the single-servo option.

" - "Aileron - Spektrum: CH2, Futaba: CH1"); break; - case Page_Flaps: - message = tr("This wizard assumes that your flaps are controlled by a switch. " - "If your flaps are controlled by a potentiometer you can change that manually later."); break; - case Page_Airbrakes: - message = tr("Air brakes are used to reduce the speed of advanced sail planes.
" - "They are very uncommon on other types of planes."); break; - case Page_Bank: - message = tr("Models use one or two channels to control the elevons.
" - "A so called Y-cable can be used to connect single a receiver channel to two separate elevon servos. " - "If your servos are connected by a Y-cable you should select the single-servo option."); break; - case Page_Rudder: - message = tr("Select the receiver channel that is connected to your rudder.

" - "Rudder - Spektrum: CH4, Futaba: CH4"); break; - case Page_Tails: - message = tr("Select the tail type of your plane."); break; - case Page_Tail: - message = tr("Select the Rudder and Elevator channels.

" - "Rudder - Spektrum: CH4, Futaba: CH4
" - "Elevator - Spektrum: CH3, Futaba: CH2"); break; - case Page_Vtail: - message = tr("Select the Rudder and Elevator channels.

" - "Rudder - Spektrum: CH4, Futaba: CH4
" - "Elevator - Spektrum: CH3, Futaba: CH2"); break; - case Page_Simpletail: - message = tr("Select the Elevator channel.

" - "Elevator - Spektrum: CH3, Futaba: CH2"); break; - case Page_Flybar: - message = tr("TBD."); break; - case Page_Cyclic: - message = tr("TBD."); break; - case Page_Gyro: - message = tr("TBD."); break; - case Page_Fblheli: - message = tr("TBD."); break; - case Page_Helictrl: - message = tr("TBD."); break; - case Page_Multirotor: - message = tr("Select the control channels for your multirotor.

" - "Throttle - Spektrum: CH1, Futaba: CH3
" - "Yaw - Spektrum: CH4, Futaba: CH4
" - "Pitch - Spektrum: CH3, Futaba: CH2
" - "Roll - Spektrum: CH2, Futaba: CH1"); break; - case Page_Options: - message = tr("TBD."); break; - case Page_Conclusion: - message = tr("TBD."); break; - default: - message = tr("There is no help available for the current page."); + case Page_Models: + message = tr("Enter a name for your model and select model type."); + break; + case Page_Throttle: + message = tr("Select the receiver channel that is connected to your ESC or throttle servo.

" + "Throttle - Spektrum: CH1, Futaba: CH3"); + break; + case Page_Wingtypes: + message = tr("Most aircraft have a main wing and a tail with control surfaces. Flying wings and delta winged aircraft only have a single wing. " + "The main control surface on a standard wing controls the roll of the aircraft. This surface is called an aileron.
" + "The control surface of a delta wing controls both roll and pitch. This surface is called an elevon. "); + break; + case Page_Ailerons: + message = tr("Models use one or two channels to control the ailerons.
" + "A so called Y-cable can be used to connect a single receiver channel to two separate aileron servos. " + "If your servos are connected by a Y-cable you should select the single-servo option.

" + "Aileron - Spektrum: CH2, Futaba: CH1"); + break; + case Page_Flaps: + message = tr("This wizard assumes that your flaps are controlled by a switch. " + "If your flaps are controlled by a potentiometer you can change that manually later."); + break; + case Page_Airbrakes: + message = tr("Air brakes are used to reduce the speed of advanced sail planes.
" + "They are very uncommon on other types of planes."); + break; + case Page_Elevons: + message = tr("Models use two channels to control the elevons.
" + "Select these two channels"); + break; + case Page_Rudder: + message = tr("Select the receiver channel that is connected to your rudder.

" + "Rudder - Spektrum: CH4, Futaba: CH4"); + break; + case Page_Tails: + message = tr("Select the tail type of your plane."); + break; + case Page_Tail: + message = tr("Select the Rudder and Elevator channels.

" + "Rudder - Spektrum: CH4, Futaba: CH4
" + "Elevator - Spektrum: CH3, Futaba: CH2"); + break; + case Page_Vtail: + message = tr("Select the Rudder and Elevator channels.

" + "Rudder - Spektrum: CH4, Futaba: CH4
" + "Elevator - Spektrum: CH3, Futaba: CH2"); + break; + case Page_Simpletail: + message = tr("Select the Elevator channel.

" + "Elevator - Spektrum: CH3, Futaba: CH2"); + break; + case Page_Flybar: + message = tr("TBD."); + break; + case Page_Cyclic: + message = tr("TBD."); + break; + case Page_Gyro: + message = tr("TBD."); + break; + case Page_Fblheli: + message = tr("TBD."); + break; + case Page_Helictrl: + message = tr("TBD."); + break; + case Page_Multirotor: + message = tr("Select the control channels for your multirotor.

" + "Throttle - Spektrum: CH1, Futaba: CH3
" + "Yaw - Spektrum: CH4, Futaba: CH4
" + "Pitch - Spektrum: CH3, Futaba: CH2
" + "Roll - Spektrum: CH2, Futaba: CH1"); + break; + case Page_Options: + message = tr("TBD."); + break; + case Page_Conclusion: + message = tr("TBD."); + break; + default: + message = tr("There is no help available for the current page."); } + QMessageBox::information(this, tr("Model Wizard Help"), message); } -StandardPage::StandardPage(WizardPage currentPage, WizardDialog *dlg, QString image, QString title, QString text, int nextPage ) - : QWizardPage(), - wizDlg(dlg), - pageCurrent(currentPage), - pageFollower(nextPage) +StandardPage::StandardPage(WizardPage currentPage, WizardDialog *dlg, QString image, QString title, QString text, int nextPage): + QWizardPage(), + wizDlg(dlg), + pageCurrent(currentPage), + pageFollower(nextPage) { setTitle(title); setPixmap(QWizard::WatermarkPixmap, QPixmap(QString(":/images/wizard/%1.png").arg(image))); @@ -175,10 +195,10 @@ void StandardPage::populateCB(QComboBox *cb, int preferred) } // Avoid selecting prebooked channels int channel = cb->itemData(cb->currentIndex()).toInt(); - if(wizDlg->mix.channel[channel].prebooked){ - for(int i=cb->count()-1; i>=0; i--){ + if (wizDlg->mix.channel[channel].prebooked) { + for (int i=cb->count()-1; i>=0; i--){ channel = cb->itemData(i).toInt(); - if( !wizDlg->mix.channel[channel].prebooked ){ + if (!wizDlg->mix.channel[channel].prebooked) { cb->setCurrentIndex(i); break; } @@ -208,9 +228,8 @@ bool StandardPage::bookChannel(QComboBox * cb, Input input1, int weight1, Input void StandardPage::releaseBookings() { - for (int i=0; imix.channel[i].page == pageCurrent){ + for (int i=0; imix.channel[i].page == pageCurrent) { wizDlg->mix.channel[i].clear(); } } @@ -218,8 +237,7 @@ void StandardPage::releaseBookings() void StandardPage::releasePreBookings() { - for (int i=0; imix.channel[i].prebooked = false; } } @@ -304,7 +322,7 @@ WingtypeSelectionPage::WingtypeSelectionPage(WizardDialog *dlg, QString image, Q int WingtypeSelectionPage::nextId() const { if (deltaWingRB->isChecked()) - return Page_Bank; + return Page_Elevons; else return Page_Ailerons; } @@ -419,13 +437,15 @@ AileronsPage::AileronsPage(WizardDialog *dlg, QString image, QString title, QStr connect(twoAileronsRB, SIGNAL(toggled(bool)), this, SLOT(twoAileronChannels())); } -void AileronsPage::initializePage(){ +void AileronsPage::initializePage() +{ populateCB(aileron1CB, getDefaultChannel(AILERONS_INPUT)); populateCB(aileron2CB, nextFreeChannel(4)); StandardPage::initializePage(); } -bool AileronsPage::validatePage() { +bool AileronsPage::validatePage() +{ releaseBookings(); if (noAileronsRB->isChecked()) { return true; @@ -437,12 +457,26 @@ bool AileronsPage::validatePage() { bookChannel(aileron2CB, AILERONS_INPUT, -100 )); } -void AileronsPage::noAileronChannel(){ aileron1CB->setEnabled(false);aileron2CB->setEnabled(false);} -void AileronsPage::oneAileronChannel(){ aileron1CB->setEnabled(true); aileron2CB->setEnabled(false);} -void AileronsPage::twoAileronChannels(){ aileron1CB->setEnabled(true); aileron2CB->setEnabled(true);} +void AileronsPage::noAileronChannel() +{ + aileron1CB->setEnabled(false); + aileron2CB->setEnabled(false); +} -FlapsPage::FlapsPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage) - : StandardPage(Page_Flaps, dlg, image, title, text, nextPage) +void AileronsPage::oneAileronChannel() +{ + aileron1CB->setEnabled(true); + aileron2CB->setEnabled(false); +} + +void AileronsPage::twoAileronChannels() +{ + aileron1CB->setEnabled(true); + aileron2CB->setEnabled(true); +} + +FlapsPage::FlapsPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage): + StandardPage(Page_Flaps, dlg, image, title, text, nextPage) { noFlapsRB = new QRadioButton(tr("No")); oneFlapRB = new QRadioButton(tr("Yes, controlled by a single channel")); @@ -468,7 +502,8 @@ FlapsPage::FlapsPage(WizardDialog *dlg, QString image, QString title, QString te connect(twoFlapsRB, SIGNAL(toggled(bool)), this, SLOT(twoFlapChannels())); } -void FlapsPage::initializePage(){ +void FlapsPage::initializePage() +{ populateCB(flap1CB, nextFreeChannel(4)); populateCB(flap2CB, nextFreeChannel(4)); StandardPage::initializePage(); @@ -486,12 +521,26 @@ bool FlapsPage::validatePage() { bookChannel(flap2CB, FLAPS_INPUT, 100 )); } -void FlapsPage::noFlapChannel(){ flap1CB->setEnabled(false);flap2CB->setEnabled(false);} -void FlapsPage::oneFlapChannel(){ flap1CB->setEnabled(true); flap2CB->setEnabled(false);} -void FlapsPage::twoFlapChannels(){ flap1CB->setEnabled(true); flap2CB->setEnabled(true);} +void FlapsPage::noFlapChannel() +{ + flap1CB->setEnabled(false); + flap2CB->setEnabled(false); +} -AirbrakesPage::AirbrakesPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage) - : StandardPage(Page_Airbrakes, dlg, image, title, text, nextPage) +void FlapsPage::oneFlapChannel() +{ + flap1CB->setEnabled(true); + flap2CB->setEnabled(false); +} + +void FlapsPage::twoFlapChannels() +{ + flap1CB->setEnabled(true); + flap2CB->setEnabled(true); +} + +AirbrakesPage::AirbrakesPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage): + StandardPage(Page_Airbrakes, dlg, image, title, text, nextPage) { noAirbrakesRB = new QRadioButton(tr("No")); oneAirbrakeRB = new QRadioButton(tr("Yes, controlled by a single channel")); @@ -517,13 +566,15 @@ AirbrakesPage::AirbrakesPage(WizardDialog *dlg, QString image, QString title, QS connect(twoAirbrakesRB, SIGNAL(toggled(bool)), this, SLOT(twoAirbrakeChannels())); } -void AirbrakesPage::initializePage(){ +void AirbrakesPage::initializePage() +{ populateCB(airbrake1CB, nextFreeChannel(4)); populateCB(airbrake2CB, nextFreeChannel(4)); StandardPage::initializePage(); } -bool AirbrakesPage::validatePage() { +bool AirbrakesPage::validatePage() +{ releaseBookings(); if (noAirbrakesRB->isChecked()) { return true; @@ -535,53 +586,53 @@ bool AirbrakesPage::validatePage() { bookChannel(airbrake2CB, AIRBRAKES_INPUT, 100 )); } -void AirbrakesPage::noAirbrakeChannel(){ airbrake1CB->setEnabled(false);airbrake2CB->setEnabled(false);} -void AirbrakesPage::oneAirbrakeChannel(){ airbrake1CB->setEnabled(true); airbrake2CB->setEnabled(false);} -void AirbrakesPage::twoAirbrakeChannels(){ airbrake1CB->setEnabled(true); airbrake2CB->setEnabled(true);} +void AirbrakesPage::noAirbrakeChannel() +{ + airbrake1CB->setEnabled(false); + airbrake2CB->setEnabled(false); +} -BankPage::BankPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage) - : StandardPage(Page_Bank, dlg, image, title, text, nextPage) +void AirbrakesPage::oneAirbrakeChannel() +{ + airbrake1CB->setEnabled(true); + airbrake2CB->setEnabled(false); +} + +void AirbrakesPage::twoAirbrakeChannels() +{ + airbrake1CB->setEnabled(true); + airbrake2CB->setEnabled(true); +} + +ElevonsPage::ElevonsPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage): + StandardPage(Page_Elevons, dlg, image, title, text, nextPage) { - oneElevonChRB = new QRadioButton(tr("One")); - twoElevonsChRB = new QRadioButton(tr("Two")); - oneElevonChRB->setChecked(true); - elevon1CB = new QComboBox(); elevon2CB = new QComboBox(); - elevon2CB->setEnabled(false); QLayout *l = layout(); - l->addWidget(oneElevonChRB); - l->addWidget(twoElevonsChRB); l->addWidget(new QLabel(tr("
First Elevon Channel:"))); l->addWidget(elevon1CB); l->addWidget(new QLabel(tr("Second Elevon Channel:"))); l->addWidget(elevon2CB); - - connect(oneElevonChRB, SIGNAL(toggled(bool)), this, SLOT(oneElevonChannel())); - connect(twoElevonsChRB, SIGNAL(toggled(bool)), this, SLOT(twoElevonChannels())); } -void BankPage::initializePage(){ +void ElevonsPage::initializePage() +{ populateCB(elevon1CB, getDefaultChannel(ELEVATOR_INPUT)); populateCB(elevon2CB, getDefaultChannel(AILERONS_INPUT)); StandardPage::initializePage(); } -bool BankPage::validatePage() { +bool ElevonsPage::validatePage() +{ releaseBookings(); - if (oneElevonChRB->isChecked()) { - return (bookChannel(elevon1CB, AILERONS_INPUT, 100, ELEVATOR_INPUT, 100 )); - } - return( bookChannel(elevon1CB, AILERONS_INPUT, 100, ELEVATOR_INPUT, 100 ) && - bookChannel(elevon2CB, AILERONS_INPUT, -100, ELEVATOR_INPUT, 100 )); + return (bookChannel(elevon1CB, AILERONS_INPUT, 100, ELEVATOR_INPUT, 100) && + bookChannel(elevon2CB, AILERONS_INPUT, -100, ELEVATOR_INPUT, 100)); } -void BankPage::oneElevonChannel(){ elevon2CB->setEnabled(false);} -void BankPage::twoElevonChannels(){ elevon2CB->setEnabled(true);} - -RudderPage::RudderPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage) - : StandardPage(Page_Rudder, dlg, image, title, text, nextPage) +RudderPage::RudderPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage): + StandardPage(Page_Rudder, dlg, image, title, text, nextPage) { noRudderRB = new QRadioButton(tr("No")); hasRudderRB = new QRadioButton(tr("Yes")); @@ -599,7 +650,8 @@ RudderPage::RudderPage(WizardDialog *dlg, QString image, QString title, QString connect(hasRudderRB, SIGNAL(toggled(bool)), this, SLOT(hasRudder())); } -void RudderPage::initializePage(){ +void RudderPage::initializePage() +{ populateCB(rudderCB, getDefaultChannel(RUDDER_INPUT)); StandardPage::initializePage(); } @@ -612,8 +664,15 @@ bool RudderPage::validatePage() { return (bookChannel(rudderCB, RUDDER_INPUT, 100)); } -void RudderPage::noRudder(){ rudderCB->setEnabled(false);} -void RudderPage::hasRudder(){ rudderCB->setEnabled(true);} +void RudderPage::noRudder() +{ + rudderCB->setEnabled(false); +} + +void RudderPage::hasRudder() +{ + rudderCB->setEnabled(true); +} VTailPage::VTailPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage) : StandardPage(Page_Tail, dlg, image, title, text, nextPage) @@ -628,20 +687,22 @@ VTailPage::VTailPage(WizardDialog *dlg, QString image, QString title, QString te l->addWidget(tail2CB); } -void VTailPage::initializePage(){ +void VTailPage::initializePage() +{ populateCB(tail1CB, getDefaultChannel(ELEVATOR_INPUT)); populateCB(tail2CB, getDefaultChannel(AILERONS_INPUT)); StandardPage::initializePage(); } -bool VTailPage::validatePage() { +bool VTailPage::validatePage() +{ releaseBookings(); return (bookChannel(tail1CB, ELEVATOR_INPUT, 50, RUDDER_INPUT, 50) && bookChannel(tail2CB, ELEVATOR_INPUT, 50, RUDDER_INPUT, -50 )); } -TailPage::TailPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage) - : StandardPage(Page_Tail, dlg, image, title, text, nextPage) +TailPage::TailPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage): + StandardPage(Page_Tail, dlg, image, title, text, nextPage) { elevatorCB = new QComboBox(); rudderCB = new QComboBox(); @@ -653,16 +714,18 @@ TailPage::TailPage(WizardDialog *dlg, QString image, QString title, QString text l->addWidget(elevatorCB); } -void TailPage::initializePage(){ +void TailPage::initializePage() +{ populateCB(elevatorCB, getDefaultChannel(ELEVATOR_INPUT)); populateCB(rudderCB, getDefaultChannel(RUDDER_INPUT)); StandardPage::initializePage(); } -bool TailPage::validatePage() { +bool TailPage::validatePage() +{ releaseBookings(); - return( bookChannel(elevatorCB, ELEVATOR_INPUT, 100 ) && - bookChannel(rudderCB, RUDDER_INPUT, 100 )); + return( bookChannel(elevatorCB, ELEVATOR_INPUT, 100) && + bookChannel(rudderCB, RUDDER_INPUT, 100)); } SimpleTailPage::SimpleTailPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage) @@ -675,18 +738,20 @@ SimpleTailPage::SimpleTailPage(WizardDialog *dlg, QString image, QString title, l->addWidget(elevatorCB); } -void SimpleTailPage::initializePage(){ +void SimpleTailPage::initializePage() +{ populateCB(elevatorCB, getDefaultChannel(ELEVATOR_INPUT)); StandardPage::initializePage(); } -bool SimpleTailPage::validatePage() { +bool SimpleTailPage::validatePage() +{ releaseBookings(); return( bookChannel(elevatorCB, ELEVATOR_INPUT, 100 )); } -CyclicPage::CyclicPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage) - : StandardPage(Page_Cyclic, dlg, image, title, text, nextPage) +CyclicPage::CyclicPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage): + StandardPage(Page_Cyclic, dlg, image, title, text, nextPage) { cyclic90RB = new QRadioButton(tr("90")); cyclic90RB->setChecked(true); @@ -701,17 +766,19 @@ CyclicPage::CyclicPage(WizardDialog *dlg, QString image, QString title, QString l->addWidget(cyclic140RB); } -void CyclicPage::initializePage(){ +void CyclicPage::initializePage() +{ StandardPage::initializePage(); } -bool CyclicPage::validatePage() { +bool CyclicPage::validatePage() +{ releaseBookings(); return true; } -GyroPage::GyroPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage) - : StandardPage(Page_Gyro, dlg, image, title, text, nextPage) +GyroPage::GyroPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage): + StandardPage(Page_Gyro, dlg, image, title, text, nextPage) { noGyroRB = new QRadioButton(tr("No")); noGyroRB->setChecked(true); @@ -724,7 +791,8 @@ GyroPage::GyroPage(WizardDialog *dlg, QString image, QString title, QString text l->addWidget(potGyroRB); } -void GyroPage::initializePage(){ +void GyroPage::initializePage() +{ StandardPage::initializePage(); } @@ -733,8 +801,8 @@ bool GyroPage::validatePage() { return true; } -FblPage::FblPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage) - : StandardPage(Page_Fblheli, dlg, image, title, text, nextPage) +FblPage::FblPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage): + StandardPage(Page_Fblheli, dlg, image, title, text, nextPage) { throttleCB = new QComboBox(); yawCB = new QComboBox(); @@ -752,7 +820,8 @@ FblPage::FblPage(WizardDialog *dlg, QString image, QString title, QString text, l->addWidget(rollCB); } -void FblPage::initializePage(){ +void FblPage::initializePage() +{ populateCB(throttleCB, getDefaultChannel(THROTTLE_INPUT)); populateCB(yawCB, getDefaultChannel(RUDDER_INPUT)); populateCB(pitchCB, getDefaultChannel(ELEVATOR_INPUT)); @@ -760,7 +829,8 @@ void FblPage::initializePage(){ StandardPage::initializePage(); } -bool FblPage::validatePage() { +bool FblPage::validatePage() +{ releaseBookings(); return( bookChannel(throttleCB, THROTTLE_INPUT, 100 ) && bookChannel( yawCB, RUDDER_INPUT, 100 ) && @@ -768,8 +838,8 @@ bool FblPage::validatePage() { bookChannel( rollCB, AILERONS_INPUT, 100 )); } -HeliPage::HeliPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage) - : StandardPage(Page_Helictrl, dlg, image, title, text, nextPage) +HeliPage::HeliPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage): + StandardPage(Page_Helictrl, dlg, image, title, text, nextPage) { throttleCB = new QComboBox(); yawCB = new QComboBox(); @@ -787,7 +857,8 @@ HeliPage::HeliPage(WizardDialog *dlg, QString image, QString title, QString text l->addWidget(rollCB); } -void HeliPage::initializePage(){ +void HeliPage::initializePage() +{ populateCB(throttleCB, getDefaultChannel(THROTTLE_INPUT)); populateCB(yawCB, getDefaultChannel(RUDDER_INPUT)); populateCB(pitchCB, getDefaultChannel(ELEVATOR_INPUT)); @@ -795,7 +866,8 @@ void HeliPage::initializePage(){ StandardPage::initializePage(); } -bool HeliPage::validatePage() { +bool HeliPage::validatePage() +{ releaseBookings(); return( bookChannel(throttleCB, THROTTLE_INPUT, 100 ) && bookChannel( yawCB, RUDDER_INPUT, 100 ) && @@ -803,8 +875,8 @@ bool HeliPage::validatePage() { bookChannel( rollCB, AILERONS_INPUT, 100 )); } -MultirotorPage::MultirotorPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage) - : StandardPage(Page_Multirotor, dlg, image, title, text, nextPage) +MultirotorPage::MultirotorPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage): + StandardPage(Page_Multirotor, dlg, image, title, text, nextPage) { throttleCB = new QComboBox(); yawCB = new QComboBox(); @@ -822,7 +894,8 @@ MultirotorPage::MultirotorPage(WizardDialog *dlg, QString image, QString title, l->addWidget(rollCB); } -void MultirotorPage::initializePage(){ +void MultirotorPage::initializePage() +{ populateCB(throttleCB, getDefaultChannel(THROTTLE_INPUT)); populateCB(yawCB, getDefaultChannel(RUDDER_INPUT)); populateCB(pitchCB, getDefaultChannel(ELEVATOR_INPUT)); @@ -830,7 +903,8 @@ void MultirotorPage::initializePage(){ StandardPage::initializePage(); } -bool MultirotorPage::validatePage() { +bool MultirotorPage::validatePage() +{ releaseBookings(); return( bookChannel(throttleCB, THROTTLE_INPUT, 100 ) && bookChannel(yawCB, RUDDER_INPUT, 100 ) && @@ -838,8 +912,8 @@ bool MultirotorPage::validatePage() { bookChannel(rollCB, AILERONS_INPUT, 100 )); } -OptionsPage::OptionsPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage) - : StandardPage(Page_Options, dlg, image, title, text, nextPage) +OptionsPage::OptionsPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage): + StandardPage(Page_Options, dlg, image, title, text, nextPage) { throttleCutRB = new QCheckBox(tr("Throttle Cut")); throttleTimerRB = new QCheckBox(tr("Throttle Timer")); @@ -874,13 +948,15 @@ ConclusionPage::ConclusionPage(WizardDialog *dlg, QString image, QString title, l->addWidget(proceedCB); } -void ConclusionPage::initializePage(){ +void ConclusionPage::initializePage() +{ WizardPrinter p(&wizDlg->mix); textLabel->setText(p.print()); StandardPage::initializePage(); } -bool ConclusionPage::validatePage() { +bool ConclusionPage::validatePage() +{ wizDlg->mix.complete = true; return true; } @@ -888,24 +964,35 @@ bool ConclusionPage::validatePage() { QString WizardPrinter::inputName(Input input) { - switch (input){ - case THROTTLE_INPUT: return "THR"; - case RUDDER_INPUT: return "RUD"; - case ELEVATOR_INPUT: return "ELE"; - case AILERONS_INPUT: return "AIL"; - case FLAPS_INPUT: return "FLP"; - case AIRBRAKES_INPUT: return "AIR"; - default: return "---"; + switch (input) { + case THROTTLE_INPUT: + return "THR"; + case RUDDER_INPUT: + return "RUD"; + case ELEVATOR_INPUT: + return "ELE"; + case AILERONS_INPUT: + return "AIL"; + case FLAPS_INPUT: + return "FLP"; + case AIRBRAKES_INPUT: + return "AIR"; + default: + return "---"; } } QString WizardPrinter::vehicleName(Vehicle vehicle) { - switch (vehicle){ - case PLANE: return "Plane"; - case MULTICOPTER: return "Multicopter"; - case HELICOPTER: return "Helicopter"; - default: return "---"; + switch (vehicle) { + case PLANE: + return tr("Plane"); + case MULTICOPTER: + return tr("Multicopter"); + case HELICOPTER: + return tr("Helicopter"); + default: + return "---"; } } @@ -925,20 +1012,19 @@ WizardPrinter::WizardPrinter(WizMix *wizMix) QString WizardPrinter::print() { - QString str; - str = QString(tr("Model Name: ")) + mix->name + "\n"; + QString str = QString(tr("Model Name: ")) + mix->name + "\n"; str += QString(tr("Model Type: ")) + vehicleName(mix->vehicle) + "\n"; str += QString(tr("Options: ")) + "["; - for (int i=0; ioptions[i]) - str += "X"; - else - str += "-"; - } + for (int i=0; ioptions[i]) + str += "X"; + else + str += "-"; + } str += QString("]") + "\n"; - for (int i=0; ichannel[i].page != Page_None) { Channel ch = mix->channel[i]; str += QString(tr("Channel %1: ").arg(i+1)); diff --git a/companion/src/wizarddialog.h b/companion/src/wizarddialog.h index 6e79009db..8e1f2146f 100644 --- a/companion/src/wizarddialog.h +++ b/companion/src/wizarddialog.h @@ -192,41 +192,37 @@ private: QComboBox *airbrake2CB; }; -class BankPage: public StandardPage +class ElevonsPage: public StandardPage { Q_OBJECT -public: - BankPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage=-1); - void initializePage(); - bool validatePage(); -protected slots: - void oneElevonChannel(); - void twoElevonChannels(); + public: + ElevonsPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage=-1); + void initializePage(); + bool validatePage(); -private: - QRadioButton *oneElevonChRB; - QRadioButton *twoElevonsChRB; - QComboBox *elevon1CB; - QComboBox *elevon2CB; + private: + QComboBox *elevon1CB; + QComboBox *elevon2CB; }; class RudderPage: public StandardPage { Q_OBJECT -public: - RudderPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage=-1); - void initializePage(); - bool validatePage(); -protected slots: - void noRudder(); - void hasRudder(); + public: + RudderPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage=-1); + void initializePage(); + bool validatePage(); -private: - QRadioButton *noRudderRB; - QRadioButton *hasRudderRB; - QComboBox *rudderCB; + protected slots: + void noRudder(); + void hasRudder(); + + private: + QRadioButton *noRudderRB; + QRadioButton *hasRudderRB; + QComboBox *rudderCB; }; class TailPage: public StandardPage