Graphical picking of parking/helipads too.
This commit is contained in:
parent
cfcdd9da45
commit
a63fff14cc
4 changed files with 56 additions and 7 deletions
|
@ -405,6 +405,12 @@ void AirportDiagram::drawILS(QPainter* painter, FGRunwayRef runway) const
|
|||
painter->drawLine(endR, endCentre);
|
||||
}
|
||||
|
||||
static double pointDistance(const QPointF& p1, const QPointF& p2)
|
||||
{
|
||||
QPointF d = p2 - p1;
|
||||
return ::sqrt((d.x() * d.x()) + (d.y() * d.y()));
|
||||
}
|
||||
|
||||
void AirportDiagram::mouseReleaseEvent(QMouseEvent* me)
|
||||
{
|
||||
if (m_didPan)
|
||||
|
@ -413,7 +419,9 @@ void AirportDiagram::mouseReleaseEvent(QMouseEvent* me)
|
|||
QTransform t(transform());
|
||||
double minDist = std::numeric_limits<double>::max();
|
||||
FGRunwayRef bestRunway;
|
||||
|
||||
FGHelipadRef bestHelipad;
|
||||
FGParkingRef bestParking;
|
||||
|
||||
Q_FOREACH(const RunwayData& r, m_runways) {
|
||||
QPointF p1(t.map(r.p1)), p2(t.map(r.p2));
|
||||
double t;
|
||||
|
@ -429,9 +437,34 @@ void AirportDiagram::mouseReleaseEvent(QMouseEvent* me)
|
|||
minDist = d;
|
||||
}
|
||||
}
|
||||
|
||||
Q_FOREACH(const ParkingData& parking, m_parking) {
|
||||
double d = pointDistance(me->pos(), t.map(parking.pt));
|
||||
if (d < minDist) {
|
||||
bestParking = parking.parking;
|
||||
bestRunway.clear();
|
||||
minDist = d;
|
||||
}
|
||||
}
|
||||
|
||||
Q_FOREACH(const HelipadData& pad, m_helipads) {
|
||||
double d = pointDistance(me->pos(), t.map(pad.pt));
|
||||
if (d < minDist) {
|
||||
bestHelipad = pad.helipad;
|
||||
bestRunway.clear();
|
||||
bestParking.clear();
|
||||
minDist = d;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (minDist < 16.0) {
|
||||
emit clickedRunway(bestRunway);
|
||||
if (bestRunway)
|
||||
emit clickedRunway(bestRunway);
|
||||
else if (bestParking)
|
||||
emit clickedParking(bestParking);
|
||||
else if (bestHelipad)
|
||||
emit clickedHelipad(bestHelipad);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -48,7 +48,7 @@ public:
|
|||
void setApproachExtensionDistance(double distanceNm);
|
||||
Q_SIGNALS:
|
||||
void clickedRunway(FGRunwayRef rwy);
|
||||
|
||||
void clickedHelipad(FGHelipadRef pad);
|
||||
void clickedParking(FGParkingRef park);
|
||||
protected:
|
||||
|
||||
|
@ -100,7 +100,7 @@ private:
|
|||
struct HelipadData
|
||||
{
|
||||
QPointF pt;
|
||||
FGHelipadRef parking;
|
||||
FGHelipadRef helipad;
|
||||
};
|
||||
|
||||
QVector<HelipadData> m_helipads;
|
||||
|
|
|
@ -376,7 +376,9 @@ LocationWidget::LocationWidget(QWidget *parent) :
|
|||
this, SLOT(updateDescription()));
|
||||
|
||||
connect(m_ui->airportDiagram, &AirportDiagram::clickedRunway,
|
||||
this, &LocationWidget::onAirportDiagramClicked);
|
||||
this, &LocationWidget::onAirportRunwayClicked);
|
||||
connect(m_ui->airportDiagram, &AirportDiagram::clickedParking,
|
||||
this, &LocationWidget::onAirportParkingClicked);
|
||||
|
||||
connect(m_ui->locationSearchEdit, &QLineEdit::returnPressed,
|
||||
this, &LocationWidget::onSearch);
|
||||
|
@ -732,7 +734,7 @@ void LocationWidget::onOffsetEnabledToggled(bool on)
|
|||
updateDescription();
|
||||
}
|
||||
|
||||
void LocationWidget::onAirportDiagramClicked(FGRunwayRef rwy)
|
||||
void LocationWidget::onAirportRunwayClicked(FGRunwayRef rwy)
|
||||
{
|
||||
if (rwy) {
|
||||
m_ui->runwayRadio->setChecked(true);
|
||||
|
@ -744,6 +746,18 @@ void LocationWidget::onAirportDiagramClicked(FGRunwayRef rwy)
|
|||
updateDescription();
|
||||
}
|
||||
|
||||
void LocationWidget::onAirportParkingClicked(FGParkingRef park)
|
||||
{
|
||||
if (park) {
|
||||
m_ui->parkingRadio->setChecked(true);
|
||||
int parkingIndex = m_ui->parkingCombo->findText(QString::fromStdString(park->name()));
|
||||
m_ui->parkingCombo->setCurrentIndex(parkingIndex);
|
||||
m_ui->airportDiagram->setSelectedRunway(FGRunwayRef());
|
||||
}
|
||||
|
||||
updateDescription();
|
||||
}
|
||||
|
||||
QString compassPointFromHeading(int heading)
|
||||
{
|
||||
const int labelArc = 360 / 8;
|
||||
|
|
|
@ -70,7 +70,9 @@ private:
|
|||
void onSearchResultSelected(const QModelIndex& index);
|
||||
void onSearchComplete();
|
||||
|
||||
void onAirportDiagramClicked(FGRunwayRef rwy);
|
||||
void onAirportRunwayClicked(FGRunwayRef rwy);
|
||||
void onAirportParkingClicked(FGParkingRef park);
|
||||
|
||||
void onOffsetBearingTrueChanged(bool on);
|
||||
|
||||
void addToRecent(FGPositionedRef pos);
|
||||
|
|
Loading…
Add table
Reference in a new issue