7#include <QStringBuilder>
14#include "gui/menus/menuaction.h"
21using namespace swift::config;
23using namespace swift::misc::physical_quantities;
24using namespace swift::misc::aviation;
25using namespace swift::misc::simulation;
26using namespace swift::core::context;
28using namespace swift::gui::menus;
46 bool menuEnableAircraft,
bool menuFastPositionUpdates,
bool menuGndFlag,
49 m_withRecalculate = menuRecalculate;
50 m_withMenuEnableAircraft = menuEnableAircraft;
51 m_withMenuFastPosition = menuFastPositionUpdates;
52 m_withMenuHighlightAndFollow = menuHighlightAndFollow;
53 m_withMenuEnableGndFlag = menuGndFlag;
54 m_withMenuFlightPlan = menuFlightPlan;
59 m_withMenuFastPosition = menuFastPositionUpdates;
74 {
this, &CSimulatedAircraftView::requestTempDisable });
77 if (m_withRecalculate)
81 {
this, &CSimulatedAircraftView::recalculateAllAircraft });
84 {
this, &CSimulatedAircraftView::doMatchingsAgain });
89 {
this, &CSimulatedAircraftView::doMatchingsAgainForSelected });
93 if (m_withMenuEnableAircraft && !this->
isEmpty())
97 {
this, &CSimulatedAircraftView::enableAllDisabledAircraft });
100 {
this, &CSimulatedAircraftView::reEnableAllUnrenderedAircraft });
103 {
this, &CSimulatedAircraftView::disableAllEnabledAircraft });
108 const bool hasContexts = sGui && sGui->supportsContexts();
115 {
this, &CSimulatedAircraftView::requestTextMessage });
117 if (m_withMenuFlightPlan && networkContext() && networkContext()->isConnected())
120 {
this, &CSimulatedAircraftView::showFlightPlanDialog });
122 if (m_withMenuEnableAircraft)
125 aircraft.
isEnabled() ?
"Disable aircraft" :
"Enabled aircraft",
127 { this, &CSimulatedAircraftView::toggleEnabledAircraft });
129 if (m_withMenuHighlightAndFollow)
133 {
this, &CSimulatedAircraftView::requestFollowInSimulator });
142 {
this, &CSimulatedAircraftView::requestDisableParts });
145 {
this, &CSimulatedAircraftView::requestEnableParts });
149 {
this, &CSimulatedAircraftView::request0PitchOnGround });
152 {
this, &CSimulatedAircraftView::requestNullPitchOnGround });
154 if (m_withMenuEnableGndFlag)
159 { this, &CSimulatedAircraftView::toggleSupportingGndFlag });
161 if (m_withMenuFastPosition)
165 "Fast position updates (send)",
167 { this, &CSimulatedAircraftView::toggleFastPositionUpdates });
170 const bool any = m_withMenuEnableAircraft || m_withMenuFastPosition || m_withMenuHighlightAndFollow ||
171 m_withMenuEnableGndFlag || m_withMenuFlightPlan;
172 if (any && (sApp && sApp->isDeveloperFlagSet()))
176 {
this, &CSimulatedAircraftView::showPositionLogInSimulator });
183 void CSimulatedAircraftView::requestTextMessage()
186 if (aircraft.getCallsign().isEmpty())
193 void CSimulatedAircraftView::toggleEnabledAircraft()
196 if (aircraft.getCallsign().isEmpty())
200 aircraft.setEnabled(!aircraft.isEnabled());
201 this->updateAircraftEnabled(aircraft);
204 void CSimulatedAircraftView::toggleFastPositionUpdates()
207 if (aircraft.getCallsign().isEmpty())
211 aircraft.toggleFastPositionUpdates();
212 this->enableFastPositionUpdates(aircraft);
215 void CSimulatedAircraftView::toggleSupportingGndFlag()
218 if (aircraft.getCallsign().isEmpty())
222 aircraft.setSupportingGndFlag(!aircraft.isSupportingGndFlag());
223 this->updateAircraftSupportingGndFLag(aircraft);
226 void CSimulatedAircraftView::requestFollowInSimulator()
229 if (aircraft.getCallsign().isEmpty())
233 this->followAircraftInSimulator(aircraft);
236 void CSimulatedAircraftView::requestEnableParts()
239 if (aircraft.getCallsign().isEmpty())
243 this->enableParts(aircraft,
true);
246 void CSimulatedAircraftView::requestDisableParts()
249 if (aircraft.getCallsign().isEmpty())
253 this->enableParts(aircraft,
false);
256 void CSimulatedAircraftView::request0PitchOnGround()
259 if (aircraft.getCallsign().isEmpty())
266 void CSimulatedAircraftView::requestNullPitchOnGround()
269 if (aircraft.getCallsign().isEmpty())
276 void CSimulatedAircraftView::requestTempDisable()
289 u
"Temp.disabled " % models.getModelStringList(
true).join(
" ")));
292 void CSimulatedAircraftView::showPositionLogInSimulator()
294 IContextSimulator *simContext = simulatorContext();
300 if (aircraft.getCallsign().isEmpty())
306 const QString dotCmd(
".drv pos " + aircraft.getCallsignAsString());
310 void CSimulatedAircraftView::enableAllDisabledAircraft()
316 const CSimulatedAircraftList aircraft = this->
container().findByEnabled(
false);
317 this->enableOrDisableAircraft(aircraft,
true);
320 void CSimulatedAircraftView::disableAllEnabledAircraft()
327 this->enableOrDisableAircraft(aircraft,
false);
330 void CSimulatedAircraftView::reEnableAllUnrenderedAircraft()
337 this->enableOrDisableAircraft(aircraft,
true);
340 void CSimulatedAircraftView::enableOrDisableAircraft(
const CSimulatedAircraftList &aircraft,
bool newEnabled)
347 const QPointer<CSimulatedAircraftView> myself(
this);
348 for (
const CSimulatedAircraft &sa : aircraft)
359 CSimulatedAircraft enabledAircraft(sa);
360 enabledAircraft.setEnabled(newEnabled);
361 this->updateAircraftEnabled(enabledAircraft);
366 void CSimulatedAircraftView::followAircraftInSimulator(
const CSimulatedAircraft &aircraft)
368 IContextSimulator *simContext = simulatorContext();
376 void CSimulatedAircraftView::enableParts(
const CSimulatedAircraft &aircraft,
bool enabled)
378 IContextSimulator *simContext = simulatorContext();
383 CInterpolationAndRenderingSetupPerCallsign setup =
394 void CSimulatedAircraftView::setPitchOnGround(
const CSimulatedAircraft &aircraft,
395 const physical_quantities::CAngle &pitch)
397 IContextSimulator *simContext = simulatorContext();
402 CInterpolationAndRenderingSetupPerCallsign setup =
413 bool CSimulatedAircraftView::isSupportingAircraftParts(
const CCallsign &cs)
const
415 const IContextNetwork *netContext = networkContext();
423 void CSimulatedAircraftView::recalculateAllAircraft()
425 IContextSimulator *simContext = simulatorContext();
433 void CSimulatedAircraftView::doMatchingsAgain()
435 IContextSimulator *simContext = simulatorContext();
441 CLogMessage(
this).info(u
"Triggered re-matching of %1 aircraft") << rematchedNumber;
444 void CSimulatedAircraftView::doMatchingsAgainForSelected()
446 IContextSimulator *simContext = simulatorContext();
458 CLogMessage(
this).info(u
"Triggered re-matching of '%1'") << cs.
asString();
462 void CSimulatedAircraftView::enableFastPositionUpdates(
const CSimulatedAircraft &aircraft)
464 IContextNetwork *nwContext = networkContext();
472 void CSimulatedAircraftView::updateAircraftEnabled(
const CSimulatedAircraft &aircraft)
474 IContextNetwork *nwContext = networkContext();
482 void CSimulatedAircraftView::updateAircraftSupportingGndFLag(
const CSimulatedAircraft &aircraft)
484 IContextNetwork *nwContext = networkContext();
492 void CSimulatedAircraftView::showFlightPlanDialog()
494 if (!m_withMenuFlightPlan)
498 if (!networkContext() || !networkContext()->isConnected())
512 m_fpDialog =
new CFlightPlanDialog(
this);
514 m_fpDialog->showFlightPlan(cs);
517 IContextSimulator *CSimulatedAircraftView::simulatorContext()
526 IContextNetwork *CSimulatedAircraftView::networkContext()
static CAngleUnit deg()
Degrees.
const context::IContextNetwork * getIContextNetwork() const
Direct access to contexts if a CCoreFacade has been initialized.
bool isShuttingDown() const
Is application shutting down?
const context::IContextSimulator * getIContextSimulator() const
Direct access to contexts if a CCoreFacade has been initialized.
virtual bool parseCommandLine(const QString &commandLine, const swift::misc::CIdentifier &originator)=0
Parse a given command line.
virtual bool updateAircraftEnabled(const swift::misc::aviation::CCallsign &callsign, bool enabledForRendering)=0
Enable/disable rendering.
virtual bool updateFastPositionEnabled(const swift::misc::aviation::CCallsign &callsign, bool enableFastPositionSending)=0
Change fast position updates.
virtual bool updateAircraftSupportingGndFLag(const swift::misc::aviation::CCallsign &callsign, bool supportGndFlag)=0
Enable/disable support of gnd. flag.
virtual bool isRemoteAircraftSupportingParts(const swift::misc::aviation::CCallsign &callsign) const =0
Parts supported?
virtual bool doMatchingAgain(const swift::misc::aviation::CCallsign &callsign)=0
Repeat the matching callsign.
virtual void recalculateAllAircraft()=0
Recalculate all aircraft.
virtual bool setInterpolationAndRenderingSetupsPerCallsign(const swift::misc::simulation::CInterpolationSetupList &setups, bool ignoreSameAsGlobal)=0
Set all setups per callsign.
virtual int doMatchingsAgain()=0
Repeat all matchings.
virtual swift::misc::simulation::CInterpolationAndRenderingSetupPerCallsign getInterpolationAndRenderingSetupPerCallsignOrDefault(const swift::misc::aviation::CCallsign &callsign) const =0
Get the setup for callsign, if not existing the global setup.
virtual bool followAircraft(const swift::misc::aviation::CCallsign &callsign)=0
Follow aircraft im simulator view.
bool displayInStatusBar(const swift::misc::CStatusMessage &message)
direct access to main application window
void customMenu(menus::CMenuActions &menuActions)
Method creating the menu.
void setAircraftMode(models::CSimulatedAircraftListModel::AircraftMode mode)
Mode.
CSimulatedAircraftView(QWidget *parent=nullptr)
Constructor.
void requestTextMessageWidget(const swift::misc::aviation::CCallsign &callsign)
Request a text message.
void requestTempDisableModelsForMatching(const swift::misc::simulation::CAircraftModelList &models)
Disable for matching.
void configureMenuFastPositionUpdates(bool menuFastPositionUpdates)
Configure fast position updates menu.
void configureMenu(bool menuRecalculate, bool menuHighlightAndFollow, bool menuEnableAircraft, bool menuFastPositionUpdates, bool menuGndFlag, bool menuFlightPlan)
Configure the menu.
void standardInit(ModelClass *model=nullptr)
ContainerType selectedObjects() const
ObjectType selectedObject() const
const ContainerType & container() const
void customMenu(menus::CMenuActions &menuActions)
Method creating the menu.
Menu m_menus
Default menu settings.
@ MenuRefresh
allow refreshing the view via menu
@ MenuDisableModelsTemp
temp.
bool hasSelection() const
Selection (selected rows).
CViewWithCallsignObjects(QWidget *parent=nullptr)
static const QPixmap & globe16()
Globe.
static const QPixmap & geoPosition16()
Geo position.
static const QPixmap & appAircraft16()
Application aircrafts.
static const QPixmap & appSimulator16()
Application simulator.
static const QPixmap & appFlightPlan16()
Application flight plan.
static const QPixmap & delete16()
Delete.
static const QPixmap & appTextMessages16()
Application text messages.
static const QPixmap & appInterpolation16()
Application interpolation.
bool isEmpty() const
Synonym for empty.
static constexpr auto SeverityInfo
Status severities.
const QString & asString() const
Get callsign (normalized).
bool isEmpty() const
Is empty?
static const CAngle & null()
const physical_quantities::CAngle & getPitchOnGround() const
Force a given pitch on ground.
bool setPitchOnGround(const physical_quantities::CAngle &pitchOnGround)
Force a given pitch on ground.
bool setEnabledAircraftParts(bool enabled)
Set enabled aircraft parts.
bool isAircraftPartsEnabled() const
Aircraft parts enabled (still requires the other aircraft to send parts).
void setCallsign(const aviation::CCallsign &callsign)
Set callsign.
Comprehensive information of an aircraft.
bool isPartsSynchronized() const
Have parts been synchronized with a remote client?
bool isSupportingGndFlag() const
Is supporting gnd.flag?
bool fastPositionUpdates() const
Support fast position updates.
const aviation::CCallsign & getCallsign() const
Get callsign.
bool hasCallsign() const
Callsign not empty, no further checks.
bool isEnabled() const
Enabled? Enable means it shall be displayed in the simulator.
Q_REQUIRED_RESULT CSimulatedAircraftList findByRendered(bool rendered) const
Rendered / not rendered aircraft.
Q_REQUIRED_RESULT CSimulatedAircraftList findByEnabled(bool enabled) const
Enabled / disabled aircraft.
SWIFT_GUI_EXPORT swift::gui::CGuiApplication * sGui
Single instance of GUI application object.
Models to be used with views, mainly QTableView.
Views, mainly QTableView.
Free functions in swift::misc.
QObject * parent() const const