Ref T261, Ref T270, Ref T245 aircraft view improvements

* context menu gnd.flag/follow aircraft
* display CG
This commit is contained in:
Klaus Basan
2018-05-17 23:48:52 +02:00
parent 27e9702101
commit 06a4efba51
7 changed files with 155 additions and 49 deletions

View File

@@ -34,35 +34,55 @@ namespace BlackGui
CSimulatedAircraftView::CSimulatedAircraftView(QWidget *parent) : CViewWithCallsignObjects(parent)
{
this->standardInit(new CSimulatedAircraftListModel(this));
this->m_menus |= MenuRefresh;
m_menus |= MenuRefresh;
}
void CSimulatedAircraftView::setAircraftMode(CSimulatedAircraftListModel::AircraftMode mode)
{
Q_ASSERT(this->m_model);
this->m_model->setAircraftMode(mode);
Q_ASSERT(m_model);
m_model->setAircraftMode(mode);
this->setSortIndicator();
}
void CSimulatedAircraftView::configureMenu(bool menuHighlight, bool menuEnable, bool menufastPositionUpdates)
void CSimulatedAircraftView::configureMenu(bool menuHighlightAndFollow, bool menuEnableAircraft, bool menuFastPositionUpdates, bool menuGndFlag)
{
this->m_withMenuEnable = menuEnable;
this->m_withMenuFastPosition = menufastPositionUpdates;
this->m_withMenuHighlight = menuHighlight;
m_withMenuEnableAircraft = menuEnableAircraft;
m_withMenuFastPosition = menuFastPositionUpdates;
m_withMenuHighlightAndFollow = menuHighlightAndFollow;
m_withMenuEnableGndFlag = menuGndFlag;
}
void CSimulatedAircraftView::customMenu(CMenuActions &menuActions)
{
if (m_withMenuEnableAircraft)
{
menuActions.addAction(CIcons::appAircraft16(), "Enable all aircraft", CMenuAction::pathClientSimulation(), { this, &CSimulatedAircraftView::enableAllDisabledAircraft });
menuActions.addAction(CIcons::appAircraft16(), "Re-enable unrendered aircraft", CMenuAction::pathClientSimulation(), { this, &CSimulatedAircraftView::reEnableAllUnrenderedAircraft });
}
if (this->hasSelection())
{
CSimulatedAircraft aircraft(selectedObject());
Q_ASSERT(!aircraft.getCallsign().isEmpty());
menuActions.addAction(CIcons::appTextMessages16(), "Show text messages", CMenuAction::pathClientCom(), { this, &CSimulatedAircraftView::requestTextMessage });
menuActions.addAction(CIcons::appAircraft16(), "Enable all aircraft", CMenuAction::pathClientSimulation(), { this, &CSimulatedAircraftView::enableAllDisabledAircraft });
if (m_withMenuEnable) { menuActions.addAction(CIcons::appAircraft16(), aircraft.isEnabled() ? "Disable aircraft" : "Enabled aircraft", CMenuAction::pathClientSimulation(), { this, &CSimulatedAircraftView::toggleEnabledAircraft }); }
if (m_withMenuHighlight) { menuActions.addAction(CIcons::appSimulator16(), "Highlight in simulator", CMenuAction::pathClientSimulation(), { this, &CSimulatedAircraftView::highlightInSimulator }); }
if (m_withMenuFastPosition) { menuActions.addAction(CIcons::globe16(), aircraft.fastPositionUpdates() ? "Normal updates" : "Fast position updates", CMenuAction::pathClientSimulation(), { this, &CSimulatedAircraftView::toggleFastPositionUpdates }); }
const bool any = m_withMenuEnable || m_withMenuFastPosition || m_withMenuHighlight;
if (m_withMenuEnableAircraft)
{
menuActions.addAction(CIcons::appAircraft16(), aircraft.isEnabled() ? "Disable aircraft" : "Enabled aircraft", CMenuAction::pathClientSimulation(), { this, &CSimulatedAircraftView::toggleEnabledAircraft });
}
if (m_withMenuHighlightAndFollow)
{
menuActions.addAction(CIcons::appAircraft16(), "Follow in simulator", CMenuAction::pathClientSimulation(), { this, &CSimulatedAircraftView::reqFollowInSimulator });
menuActions.addAction(CIcons::appSimulator16(), "Highlight in simulator", CMenuAction::pathClientSimulation(), { this, &CSimulatedAircraftView::reqHighlightInSimulator });
}
if (m_withMenuEnableGndFlag)
{
menuActions.addAction(CIcons::geoPosition16(), aircraft.isSupportingGndFlag() ? "Disable gnd.flag" : "Enabled gnd.flag", CMenuAction::pathClientSimulation(), { this, &CSimulatedAircraftView::toggleSupportingGndFlag });
}
if (m_withMenuFastPosition)
{
menuActions.addAction(CIcons::globe16(), aircraft.fastPositionUpdates() ? "Normal updates" : "Fast position updates", CMenuAction::pathClientSimulation(), { this, &CSimulatedAircraftView::toggleFastPositionUpdates });
}
const bool any = m_withMenuEnableAircraft || m_withMenuFastPosition || m_withMenuHighlightAndFollow || m_withMenuEnableGndFlag;
if (any && (sApp && sApp->isDeveloperFlagSet()))
{
menuActions.addAction(CIcons::appSimulator16(), "Show position log.", CMenuAction::pathClientSimulation(), { this, &CSimulatedAircraftView::showPositionLogInSimulator });
@@ -94,13 +114,28 @@ namespace BlackGui
emit this->requestFastPositionUpdates(aircraft);
}
void CSimulatedAircraftView::highlightInSimulator()
void CSimulatedAircraftView::toggleSupportingGndFlag()
{
CSimulatedAircraft aircraft(selectedObject());
if (aircraft.getCallsign().isEmpty()) { return; }
aircraft.setSupportingGndFlag(!aircraft.isSupportingGndFlag());
emit this->requestSupportingGndFlag(aircraft);
}
void CSimulatedAircraftView::reqHighlightInSimulator()
{
const CSimulatedAircraft aircraft(selectedObject());
if (aircraft.getCallsign().isEmpty()) { return; }
emit this->requestHighlightInSimulator(aircraft);
}
void CSimulatedAircraftView::reqFollowInSimulator()
{
const CSimulatedAircraft aircraft(selectedObject());
if (aircraft.getCallsign().isEmpty()) { return; }
emit this->requestFollowInSimulator(aircraft);
}
void CSimulatedAircraftView::showPositionLogInSimulator()
{
if (!sGui || sGui->isShuttingDown()) { return; }
@@ -132,5 +167,25 @@ namespace BlackGui
});
}
}
void CSimulatedAircraftView::reEnableAllUnrenderedAircraft()
{
if (!sGui || sGui->isShuttingDown()) { return; }
const CSimulatedAircraftList aircraft = this->container().findByRendered(false);
if (aircraft.isEmpty()) { return; }
const QPointer<CSimulatedAircraftView> myself(this);
for (const CSimulatedAircraft &sa : aircraft)
{
QTimer::singleShot(10, this, [ = ]
{
if (!myself) { return; }
if (!sGui || sGui->isShuttingDown()) { return; }
CSimulatedAircraft enabledAircraft(sa);
enabledAircraft.setEnabled(true);
emit this->requestEnableAircraft(enabledAircraft);
});
}
}
} // ns
} // ns

View File

@@ -34,7 +34,7 @@ namespace BlackGui
{
//! Aircraft view
class BLACKGUI_EXPORT CSimulatedAircraftView :
public CViewWithCallsignObjects<Models::CSimulatedAircraftListModel, BlackMisc::Simulation::CSimulatedAircraftList, BlackMisc::Simulation::CSimulatedAircraft>
public CViewWithCallsignObjects<Models::CSimulatedAircraftListModel, BlackMisc::Simulation::CSimulatedAircraftList, BlackMisc::Simulation::CSimulatedAircraft>
{
Q_OBJECT
@@ -46,7 +46,7 @@ namespace BlackGui
void setAircraftMode(Models::CSimulatedAircraftListModel::AircraftMode mode);
//! configure the menu
void configureMenu(bool menuHighlight, bool menuEnable, bool menufastPositionUpdates);
void configureMenu(bool menuHighlightAndFollow, bool menuEnableAircraft, bool menuFastPositionUpdates, bool menuGndFlag);
signals:
//! Request a text message
@@ -58,9 +58,15 @@ namespace BlackGui
//! Request to enable / disable aircraft, \sa CSimulatedAircraft::isEnabled
void requestEnableAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraft);
//! Request to enable / disable gnd.flag, \sa CSimulatedAircraft::isSupportingGndFlag
void requestSupportingGndFlag(const BlackMisc::Simulation::CSimulatedAircraft &aircraft);
//! Highlight given aircraft in simulator
void requestHighlightInSimulator(const BlackMisc::Simulation::CSimulatedAircraft &aircraft);
//! Highlight given aircraft in simulator
void requestFollowInSimulator(const BlackMisc::Simulation::CSimulatedAircraft &aircraft);
protected:
//! \copydoc CViewBase::customMenu
virtual void customMenu(BlackGui::Menus::CMenuActions &menuActions) override;
@@ -75,8 +81,17 @@ namespace BlackGui
//! Toggle fast position updates for selected aircraft
void toggleFastPositionUpdates();
//! Enable gnd. flag (enable gnd flag capability for given aircraft)
void toggleSupportingGndFlag();
//! Highlight aircraft in simulator
void highlightInSimulator();
void reqHighlightInSimulator();
//! Follow in simulator
void reqFollowInSimulator();
//! Enable gnd. flag capability for server
void reqEnableGndFlagForServer();
//! Show position log for selected aircraft
void showPositionLogInSimulator();
@@ -84,8 +99,12 @@ namespace BlackGui
//! Enable all disabled aircraft
void enableAllDisabledAircraft();
bool m_withMenuHighlight = true;
bool m_withMenuEnable = true;
//! Enable all unrendered aircraft
void reEnableAllUnrenderedAircraft();
bool m_withMenuHighlightAndFollow = true;
bool m_withMenuEnableAircraft = true;
bool m_withMenuEnableGndFlag = true;
bool m_withMenuFastPosition = true;
};
} // ns