Fix for context menu of aircraft view as reported in slack

* reported: https://swift-project.slack.com/archives/G7GD2UP9C/p1533749013000483
* logic moved to view
* removed no longer required code
This commit is contained in:
Klaus Basan
2018-08-09 01:35:27 +02:00
parent 5b44f55435
commit 79a133892b
7 changed files with 137 additions and 145 deletions

View File

@@ -53,7 +53,6 @@ namespace BlackGui
connect(ui->tvp_AircraftInRange, &CSimulatedAircraftView::modelDataChangedDigest, this, &CAircraftComponent::onRowCountChanged);
connect(ui->tvp_AircraftInRange, &CSimulatedAircraftView::requestTextMessageWidget, this, &CAircraftComponent::requestTextMessageWidget);
connect(ui->tvp_AircraftInRange, &CSimulatedAircraftView::requestHighlightInSimulator, this, &CAircraftComponent::onMenuHighlightInSimulator);
connect(ui->tvp_AirportsInRange, &CSimulatedAircraftView::modelDataChangedDigest, this, &CAircraftComponent::onRowCountChanged);
connect(sGui->getIContextNetwork(), &IContextNetwork::connectionStatusChanged, this, &CAircraftComponent::onConnectionStatusChanged);
connect(&m_updateTimer, &QTimer::timeout, this, &CAircraftComponent::update);
@@ -166,14 +165,6 @@ namespace BlackGui
}
}
void CAircraftComponent::onMenuHighlightInSimulator(const CSimulatedAircraft &aircraft)
{
if (sGui->getIContextSimulator())
{
sGui->getIContextSimulator()->highlightAircraft(aircraft, true, IContextSimulator::HighlightTime());
}
}
void CAircraftComponent::onSettingsChanged()
{
const CViewUpdateSettings settings = m_settings.get();

View File

@@ -85,9 +85,6 @@ namespace BlackGui
//! Connection status has been changed
void onConnectionStatusChanged(BlackCore::INetwork::ConnectionStatus from, BlackCore::INetwork::ConnectionStatus to);
//! Highlight in simulator
void onMenuHighlightInSimulator(const BlackMisc::Simulation::CSimulatedAircraft &aircraft);
//! Settings have been changed
void onSettingsChanged();

View File

@@ -93,12 +93,6 @@ namespace BlackGui
connect(ui->tvp_RenderedAircraft, &CSimulatedAircraftView::requestUpdate, this, &CMappingComponent::tokenBucketUpdate);
connect(ui->tvp_RenderedAircraft, &CSimulatedAircraftView::requestTextMessageWidget, this, &CMappingComponent::requestTextMessageWidget);
connect(ui->tvp_RenderedAircraft, &CSimulatedAircraftView::requestEnableAircraft, this, &CMappingComponent::onMenuToggleEnableAircraft);
connect(ui->tvp_RenderedAircraft, &CSimulatedAircraftView::requestFastPositionUpdates, this, &CMappingComponent::onMenuChangeFastPositionUpdates);
connect(ui->tvp_RenderedAircraft, &CSimulatedAircraftView::requestHighlightInSimulator, this, &CMappingComponent::onMenuHighlightInSimulator);
connect(ui->tvp_RenderedAircraft, &CSimulatedAircraftView::requestFollowInSimulator, this, &CMappingComponent::onMenuFollowAircraftInSimulator);
connect(ui->tvp_RenderedAircraft, &CSimulatedAircraftView::requestSupportingGndFlag, this, &CMappingComponent::onMenuSupportGndFLag);
connect(ui->pb_SaveAircraft, &QPushButton::clicked, this, &CMappingComponent::onSaveAircraft);
connect(ui->pb_ResetAircraft, &QPushButton::clicked, this, &CMappingComponent::onResetAircraft);
connect(ui->pb_LoadModels, &QPushButton::clicked, this, &CMappingComponent::onModelsUpdateRequested);
@@ -406,38 +400,6 @@ namespace BlackGui
}
}
void CMappingComponent::onMenuChangeFastPositionUpdates(const CSimulatedAircraft &aircraft)
{
if (sGui && sGui->getIContextNetwork())
{
sGui->getIContextNetwork()->updateFastPositionEnabled(aircraft.getCallsign(), aircraft.fastPositionUpdates());
}
}
void CMappingComponent::onMenuFollowAircraftInSimulator(const CSimulatedAircraft &aircraft)
{
if (sGui && sGui->getIContextSimulator())
{
sGui->getIContextSimulator()->followAircraft(aircraft.getCallsign());
}
}
void CMappingComponent::onMenuSupportGndFLag(const CSimulatedAircraft &aircraft)
{
if (sGui && sGui->getIContextNetwork())
{
sGui->getIContextNetwork()->updateAircraftSupportingGndFLag(aircraft.getCallsign(), aircraft.isSupportingGndFlag());
}
}
void CMappingComponent::onMenuHighlightInSimulator(const CSimulatedAircraft &aircraft)
{
if (sGui && sGui->getIContextSimulator())
{
sGui->getIContextSimulator()->highlightAircraft(aircraft, true, IContextSimulator::HighlightTime());
}
}
CSimulatorInfo CMappingComponent::getConnectedOrSelectedSimulator() const
{
if (this->isSimulatorAvailable()) { return sGui->getIContextSimulator()->isSimulatorAvailable(); }
@@ -458,8 +420,8 @@ namespace BlackGui
QList<int> newSizes({0, 0});
if (show)
{
newSizes[0] = total * 0.8;
newSizes[1] = total * 0.2;
newSizes[0] = qRound(total * 0.8);
newSizes[1] = qRound(total * 0.2);
}
else
{
@@ -476,14 +438,6 @@ namespace BlackGui
Q_UNUSED(message);
}
void CMappingComponent::onMenuToggleEnableAircraft(const CSimulatedAircraft &aircraft)
{
if (sGui->getIContextNetwork())
{
sGui->getIContextNetwork()->updateAircraftEnabled(aircraft.getCallsign(), aircraft.isEnabled());
}
}
void CMappingComponent::onTabWidgetChanged(int index)
{
Q_UNUSED(index);

View File

@@ -126,24 +126,9 @@ namespace BlackGui
//! Connection status has been changed
void onConnectionStatusChanged(BlackCore::INetwork::ConnectionStatus from, BlackCore::INetwork::ConnectionStatus to);
//! Fast position updates onf/off
void onMenuChangeFastPositionUpdates(const BlackMisc::Simulation::CSimulatedAircraft &aircraft);
//! Follow aircrft in simulator
void onMenuFollowAircraftInSimulator(const BlackMisc::Simulation::CSimulatedAircraft &aircraft);
//! Support gnd.flag
void onMenuSupportGndFLag(const BlackMisc::Simulation::CSimulatedAircraft &aircraft);
//! Enable / disable aircraft
void onMenuToggleEnableAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraft);
//! Widget changed
void onTabWidgetChanged(int index);
//! Highlight in simulator
void onMenuHighlightInSimulator(const BlackMisc::Simulation::CSimulatedAircraft &aircraft);
//! Selected or connected simulator
BlackMisc::Simulation::CSimulatorInfo getConnectedOrSelectedSimulator() const;

View File

@@ -13,6 +13,7 @@
#include "blackgui/menus/menuaction.h"
#include "blackgui/guiapplication.h"
#include "blackcore/context/contextsimulator.h"
#include "blackcore/context/contextnetwork.h"
#include "blackmisc/simulation/simulatedaircraftlist.h"
#include "blackmisc/aviation/callsign.h"
#include "blackmisc/icons.h"
@@ -63,90 +64,94 @@ namespace BlackGui
if (this->hasSelection())
{
CSimulatedAircraft aircraft(selectedObject());
Q_ASSERT(!aircraft.getCallsign().isEmpty());
menuActions.addAction(CIcons::appTextMessages16(), "Show text messages", CMenuAction::pathClientCom(), { this, &CSimulatedAircraftView::requestTextMessage });
if (m_withMenuEnableAircraft)
const bool hasContexts = sGui && sGui->supportsContexts();
if (hasContexts)
{
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 });
}
CSimulatedAircraft aircraft(this->selectedObject());
Q_ASSERT(!aircraft.getCallsign().isEmpty());
menuActions.addAction(CIcons::appTextMessages16(), "Show text messages", CMenuAction::pathClientCom(), { this, &CSimulatedAircraftView::requestTextMessage });
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::requestFollowInSimulator });
menuActions.addAction(CIcons::appSimulator16(), "Highlight in simulator", CMenuAction::pathClientSimulation(), { this, &CSimulatedAircraftView::requestHighlightInSimulator });
}
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 });
}
} // contexts
}
CViewBase::customMenu(menuActions);
}
void CSimulatedAircraftView::requestTextMessage()
{
const CSimulatedAircraft aircraft(selectedObject());
const CSimulatedAircraft aircraft(this->selectedObject());
if (aircraft.getCallsign().isEmpty()) { return; }
emit this->requestTextMessageWidget(aircraft.getCallsign());
}
void CSimulatedAircraftView::toggleEnabledAircraft()
{
CSimulatedAircraft aircraft(selectedObject());
CSimulatedAircraft aircraft(this->selectedObject());
if (aircraft.getCallsign().isEmpty()) { return; }
aircraft.setEnabled(!aircraft.isEnabled());
emit this->requestEnableAircraft(aircraft);
this->updateAircraftEnabled(aircraft);
}
void CSimulatedAircraftView::toggleFastPositionUpdates()
{
CSimulatedAircraft aircraft(selectedObject());
CSimulatedAircraft aircraft(this->selectedObject());
if (aircraft.getCallsign().isEmpty()) { return; }
aircraft.setFastPositionUpdates(!aircraft.fastPositionUpdates());
emit this->requestFastPositionUpdates(aircraft);
aircraft.toggleFastPositionUpdates();
this->enableFastPositionUpdates(aircraft);
}
void CSimulatedAircraftView::toggleSupportingGndFlag()
{
CSimulatedAircraft aircraft(selectedObject());
CSimulatedAircraft aircraft(this->selectedObject());
if (aircraft.getCallsign().isEmpty()) { return; }
aircraft.setSupportingGndFlag(!aircraft.isSupportingGndFlag());
emit this->requestSupportingGndFlag(aircraft);
this->updateAircraftSupportingGndFLag(aircraft);
}
void CSimulatedAircraftView::reqHighlightInSimulator()
void CSimulatedAircraftView::requestHighlightInSimulator()
{
const CSimulatedAircraft aircraft(selectedObject());
const CSimulatedAircraft aircraft(this->selectedObject());
if (aircraft.getCallsign().isEmpty()) { return; }
emit this->requestHighlightInSimulator(aircraft);
this->highlightInSimulator(aircraft);
}
void CSimulatedAircraftView::reqFollowInSimulator()
void CSimulatedAircraftView::requestFollowInSimulator()
{
const CSimulatedAircraft aircraft(selectedObject());
const CSimulatedAircraft aircraft(this->selectedObject());
if (aircraft.getCallsign().isEmpty()) { return; }
emit this->requestFollowInSimulator(aircraft);
this->followAircraftInSimulator(aircraft);
}
void CSimulatedAircraftView::showPositionLogInSimulator()
{
if (!sGui || sGui->isShuttingDown()) { return; }
if (!sGui->getIContextSimulator()) { return; }
const CSimulatedAircraft aircraft(selectedObject());
IContextSimulator *simContext = simulatorContext();
if (!simContext) { return; }
const CSimulatedAircraft aircraft(this->selectedObject());
if (aircraft.getCallsign().isEmpty()) { return; }
const CIdentifier i(this->objectName());
const QString dotCmd(".drv pos " + aircraft.getCallsignAsString());
sGui->getIContextSimulator()->parseCommandLine(dotCmd, i);
simContext->parseCommandLine(dotCmd, i);
}
void CSimulatedAircraftView::enableAllDisabledAircraft()
@@ -183,9 +188,56 @@ namespace BlackGui
if (!sGui || sGui->isShuttingDown()) { return; }
CSimulatedAircraft enabledAircraft(sa);
enabledAircraft.setEnabled(newEnabled);
emit this->requestEnableAircraft(enabledAircraft);
this->updateAircraftEnabled(enabledAircraft);
});
}
}
void CSimulatedAircraftView::followAircraftInSimulator(const CSimulatedAircraft &aircraft)
{
IContextSimulator *simContext = simulatorContext();
if (!simContext) { return; }
simContext->followAircraft(aircraft.getCallsign());
}
void CSimulatedAircraftView::highlightInSimulator(const CSimulatedAircraft &aircraft)
{
IContextSimulator *simContext = simulatorContext();
if (!simContext) { return; }
simContext->highlightAircraft(aircraft, true, IContextSimulator::HighlightTime());
}
void CSimulatedAircraftView::enableFastPositionUpdates(const CSimulatedAircraft &aircraft)
{
IContextNetwork *nwContext = networkContext();
if (!nwContext) { return; }
nwContext->updateFastPositionEnabled(aircraft.getCallsign(), aircraft.fastPositionUpdates());
}
void CSimulatedAircraftView::updateAircraftEnabled(const CSimulatedAircraft &aircraft)
{
IContextNetwork *nwContext = networkContext();
if (!nwContext) { return; }
nwContext->updateAircraftEnabled(aircraft.getCallsign(), aircraft.isEnabled());
}
void CSimulatedAircraftView::updateAircraftSupportingGndFLag(const CSimulatedAircraft &aircraft)
{
IContextNetwork *nwContext = networkContext();
if (!nwContext) { return; }
nwContext->updateAircraftSupportingGndFLag(aircraft.getCallsign(), aircraft.isSupportingGndFlag());
}
IContextSimulator *CSimulatedAircraftView::simulatorContext()
{
if (!sGui || sGui->isShuttingDown() || !sGui->getISimulator()) { return nullptr; }
return sGui->getIContextSimulator();
}
IContextNetwork *CSimulatedAircraftView::networkContext()
{
if (!sGui || sGui->isShuttingDown() || !sGui->getIContextNetwork()) { return nullptr; }
return sGui->getIContextNetwork();
}
} // ns
} // ns

View File

@@ -12,21 +12,26 @@
#ifndef BLACKGUI_VIEWS_SIMULATEDAIRCRAFTVIEW_H
#define BLACKGUI_VIEWS_SIMULATEDAIRCRAFTVIEW_H
#include "blackgui/blackguiexport.h"
#include "blackgui/views/viewcallsignobjects.h"
#include "blackgui/models/simulatedaircraftlistmodel.h"
#include "blackgui/blackguiexport.h"
#include "blackmisc/simulation/simulatedaircraftlist.h"
#include <QObject>
class QWidget;
namespace BlackMisc
{
namespace Aviation { class CCallsign; }
namespace Simulation { class CSimulatedAircraft; }
}
namespace BlackCore
{
namespace Context
{
class IContextSimulator;
class IContextNetwork;
}
}
namespace BlackGui
{
namespace Menus { class CMenuActions; }
@@ -52,21 +57,6 @@ namespace BlackGui
//! Request a text message
void requestTextMessageWidget(const BlackMisc::Aviation::CCallsign &callsign);
//! Request enable / disable fast position updates, \sa CSimulatedAircraft::fastPositionUpdates
void requestFastPositionUpdates(const BlackMisc::Simulation::CSimulatedAircraft &aircraft);
//! 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(Menus::CMenuActions &menuActions) override;
@@ -85,13 +75,10 @@ namespace BlackGui
void toggleSupportingGndFlag();
//! Highlight aircraft in simulator
void reqHighlightInSimulator();
void requestHighlightInSimulator();
//! Follow in simulator
void reqFollowInSimulator();
//! Enable gnd. flag capability for server
void reqEnableGndFlagForServer();
void requestFollowInSimulator();
//! Show position log for selected aircraft
void showPositionLogInSimulator();
@@ -108,10 +95,31 @@ namespace BlackGui
//! Enable or disable aircraft
void enableOrDisableAircraft(const BlackMisc::Simulation::CSimulatedAircraftList &aircraft, bool newEnabled);
//! Follow aircraft in simulator
void followAircraftInSimulator(const BlackMisc::Simulation::CSimulatedAircraft &aircraft);
//! Highlight in simulator
void highlightInSimulator(const BlackMisc::Simulation::CSimulatedAircraft &aircraft);
//! Enable fast position updates
void enableFastPositionUpdates(const BlackMisc::Simulation::CSimulatedAircraft &aircraft);
//! Update if aircraft is enabled
void updateAircraftEnabled(const BlackMisc::Simulation::CSimulatedAircraft &aircraft);
//! Update the gnd.flag support
void updateAircraftSupportingGndFLag(const BlackMisc::Simulation::CSimulatedAircraft &aircraft);
//! Simulator context
static BlackCore::Context::IContextSimulator *simulatorContext();
//! Network context
static BlackCore::Context::IContextNetwork *networkContext();
bool m_withMenuHighlightAndFollow = true;
bool m_withMenuEnableAircraft = true;
bool m_withMenuEnableGndFlag = true;
bool m_withMenuFastPosition = true;
bool m_withMenuEnableAircraft = true;
bool m_withMenuEnableGndFlag = true;
bool m_withMenuFastPosition = true;
};
} // ns
} // ns

View File

@@ -124,6 +124,11 @@ namespace BlackMisc
return true;
}
bool CSimulatedAircraft::toggleFastPositionUpdates()
{
return this->setFastPositionUpdates(!this->fastPositionUpdates());
}
bool CSimulatedAircraft::setRendered(bool rendered)
{
if (m_rendered == rendered) { return false; }