#include <Main/fg_init.hxx>
#include <Main/fg_props.hxx> // for fgSetDouble
-const int MAX_RECENT_AIRPORTS = 32;
-
using namespace flightgear;
QString fixNavaidName(QString s)
}
if (role == Qt::DecorationRole) {
- return AirportDiagram::iconForPositioned(pos);
+ return AirportDiagram::iconForPositioned(pos, true);
}
if (role == Qt::EditRole) {
connect(m_ui->locationSearchEdit, &QLineEdit::returnPressed,
this, &LocationWidget::onSearch);
+ // disabled for now
+ m_ui->searchHistory->hide();
connect(m_ui->searchHistory, &QPushButton::clicked,
this, &LocationWidget::onPopupHistory);
void LocationWidget::restoreSettings()
{
QSettings settings;
- Q_FOREACH(QVariant v, settings.value("recent-locations").toList()) {
- m_recentAirports.push_back(v.toLongLong());
- }
- if (!m_recentAirports.empty()) {
- setBaseLocation(NavDataCache::instance()->loadById(m_recentAirports.front()));
+ if (settings.contains("location-lat")) {
+ m_locationIsLatLon = true;
+ m_geodLocation = SGGeod::fromDeg(settings.value("location-lon").toDouble(),
+ settings.value("location-lat").toDouble());
+ } else if (settings.contains("location-id")) {
+ m_location = NavDataCache::instance()->loadById(settings.value("location-id").toULongLong());
}
+ m_ui->altitudeSpinbox->setValue(settings.value("altitude").toInt());
+ m_ui->airspeedSpinbox->setValue(settings.value("speed").toInt());
+ m_ui->offsetGroup->setChecked(settings.value("offset-enabled").toBool());
+ m_ui->offsetBearingSpinbox->setValue(settings.value("offset-bearing").toInt());
+ m_ui->offsetNmSpinbox->setValue(settings.value("offset-distance").toInt());
+
+ onLocationChanged();
updateDescription();
}
{
QSettings settings;
- QVariantList locations;
- Q_FOREACH(PositionedID v, m_recentAirports) {
- locations.push_back(v);
+ settings.remove("location-id");
+ if (m_locationIsLatLon) {
+ settings.setValue("location-lat", m_geodLocation.getLatitudeDeg());
+ settings.setValue("location-lon", m_geodLocation.getLongitudeDeg());
+
+ } else if (m_location) {
+ settings.setValue("location-id", m_location->guid());
}
- settings.setValue("recent-airports", locations);
+ settings.setValue("altitude", m_ui->altitudeSpinbox->value());
+ settings.setValue("speed", m_ui->airspeedSpinbox->value());
+
+ settings.setValue("offset-enabled", m_ui->offsetGroup->isChecked());
+ settings.setValue("offset-bearing", m_ui->offsetBearingSpinbox->value());
+ settings.setValue("offset-distance", m_ui->offsetNmSpinbox->value());
}
void LocationWidget::setLocationOptions()
} else if (m_locationIsLatLon) {
m_ui->stack->setCurrentIndex(1);
m_ui->navaidDiagram->setGeod(m_geodLocation);
- } else {
+ } else if (m_location) {
// navaid
m_ui->stack->setCurrentIndex(1);
m_ui->navaidDiagram->setNavaid(m_location);
void LocationWidget::onPopupHistory()
{
- if (m_recentAirports.isEmpty()) {
- return;
- }
-
-#if 0
- QMenu m;
- Q_FOREACH(QString aptCode, m_recentAirports) {
- FGAirportRef apt = FGAirport::findByIdent(aptCode.toStdString());
- QString name = QString::fromStdString(apt->name());
- QAction* act = m.addAction(QString("%1 - %2").arg(aptCode).arg(name));
- act->setData(aptCode);
- }
-
- QPoint popupPos = m_ui->airportHistory->mapToGlobal(m_ui->airportHistory->rect().bottomLeft());
- QAction* triggered = m.exec(popupPos);
- if (triggered) {
- FGAirportRef apt = FGAirport::findByIdent(triggered->data().toString().toStdString());
- setAirport(apt);
- m_ui->airportEdit->clear();
- m_ui->locationStack->setCurrentIndex(0);
- }
-#endif
}
void LocationWidget::setBaseLocation(FGPositionedRef ref)
m_location = ref;
onLocationChanged();
-#if 0
- if (ref.valid()) {
- // maintain the recent airport list
- QString icao = QString::fromStdString(ref->ident());
- if (m_recentAirports.contains(icao)) {
- // move to front
- m_recentAirports.removeOne(icao);
- m_recentAirports.push_front(icao);
- } else {
- // insert and trim list if necessary
- m_recentAirports.push_front(icao);
- if (m_recentAirports.size() > MAX_RECENT_AIRPORTS) {
- m_recentAirports.pop_back();
- }
- }
- }
-#endif
updateDescription();
}
}
};
-class AirportSearchModel : public QAbstractListModel
-{
- Q_OBJECT
-public:
- AirportSearchModel() :
- m_searchActive(false)
- {
- }
-
- void setSearch(QString t)
- {
- beginResetModel();
-
- m_items.clear();
- m_ids.clear();
-
- std::string term(t.toUpper().toStdString());
-
- IdentSearchFilter filter;
- FGPositionedList exactMatches = NavDataCache::instance()->findAllWithIdent(term, &filter, true);
-
- for (unsigned int i=0; i<exactMatches.size(); ++i) {
- m_ids.push_back(exactMatches[i]->guid());
- m_items.push_back(exactMatches[i]);
- }
- endResetModel();
-
-
- m_search.reset(new NavDataCache::ThreadedGUISearch(term));
- QTimer::singleShot(100, this, SLOT(onSearchResultsPoll()));
- m_searchActive = true;
- endResetModel();
- }
-
- bool isSearchActive() const
- {
- return m_searchActive;
- }
-
- virtual int rowCount(const QModelIndex&) const
- {
- // if empty, return 1 for special 'no matches'?
- return m_ids.size();
- }
-
- virtual QVariant data(const QModelIndex& index, int role) const
- {
- if (!index.isValid())
- return QVariant();
-
- FGPositionedRef pos = itemAtRow(index.row());
- if (role == Qt::DisplayRole) {
- QString name = QString::fromStdString(pos->name());
- return QString("%1: %2").arg(QString::fromStdString(pos->ident())).arg(name);
- }
-
- if (role == Qt::EditRole) {
- return QString::fromStdString(pos->ident());
- }
-
- if (role == Qt::UserRole) {
- return static_cast<qlonglong>(m_ids[index.row()]);
- }
-
- return QVariant();
- }
-
- FGPositionedRef itemAtRow(unsigned int row) const
- {
- FGPositionedRef pos = m_items[row];
- if (!pos.valid()) {
- pos = NavDataCache::instance()->loadById(m_ids[row]);
- m_items[row] = pos;
- }
-
- return pos;
- }
-Q_SIGNALS:
- void searchComplete();
-
-private slots:
- void onSearchResultsPoll()
- {
- PositionedIDVec newIds = m_search->results();
-
- beginInsertRows(QModelIndex(), m_ids.size(), newIds.size() - 1);
- for (unsigned int i=m_ids.size(); i < newIds.size(); ++i) {
- m_ids.push_back(newIds[i]);
- m_items.push_back(FGPositionedRef()); // null ref
- }
- endInsertRows();
-
- if (m_search->isComplete()) {
- m_searchActive = false;
- m_search.reset();
- emit searchComplete();
- } else {
- QTimer::singleShot(100, this, SLOT(onSearchResultsPoll()));
- }
- }
-
-private:
- PositionedIDVec m_ids;
- mutable FGPositionedList m_items;
- bool m_searchActive;
- QScopedPointer<NavDataCache::ThreadedGUISearch> m_search;
-};
-=======
->>>>>>> Work on LocationWidget for Qt launcher
-
class AircraftProxyModel : public QSortFilterProxyModel
{
Q_OBJECT
{
sglog().setLogLevels( SG_ALL, SG_INFO );
-
initQtResources(); // can't be called inside a namespaceb
// startup the nav-cache now. This pre-empts normal startup of
initNavCache();
-
fgInitPackageRoot();
// startup the HTTP system now since packages needs it
// will happen as normal
http->init();
-
// setup scenery paths now, especially TerraSync path for airport
// parking locations (after they're downloaded)
connect(m_ui->aircraftFilter, &QLineEdit::textChanged,
m_aircraftProxy, &QSortFilterProxyModel::setFilterFixedString);
-<<<<<<< 56d7d049bc0b7361d1799298c38e61084f5d5e3f
- connect(m_ui->runwayCombo, SIGNAL(currentIndexChanged(int)),
- this, SLOT(updateLocationDescription()));
- connect(m_ui->parkingCombo, SIGNAL(currentIndexChanged(int)),
- this, SLOT(updateLocationDescription()));
- connect(m_ui->runwayRadio, SIGNAL(toggled(bool)),
- this, SLOT(updateLocationDescription()));
- connect(m_ui->parkingRadio, SIGNAL(toggled(bool)),
- this, SLOT(updateLocationDescription()));
- connect(m_ui->onFinalCheckbox, SIGNAL(toggled(bool)),
- this, SLOT(updateLocationDescription()));
-
-
- connect(m_ui->airportDiagram, &AirportDiagram::clickedRunway,
- this, &QtLauncher::onAirportDiagramClicked);
-=======
->>>>>>> Work on LocationWidget for Qt launcher
-
connect(m_ui->runButton, SIGNAL(clicked()), this, SLOT(onRun()));
connect(m_ui->quitButton, SIGNAL(clicked()), this, SLOT(onQuit()));
this, &QtLauncher::onAircraftInstalledCompleted);
connect(m_aircraftModel, &AircraftItemModel::aircraftInstallFailed,
this, &QtLauncher::onAircraftInstallFailed);
-
+ connect(m_aircraftModel, &AircraftItemModel::scanCompleted,
+ this, &QtLauncher::updateSelectedAircraft);
connect(m_ui->pathsButton, &QPushButton::clicked,
this, &QtLauncher::onEditPaths);
if (!m_recentAircraft.empty()) {
m_selectedAircraft = m_recentAircraft.front();
+ qDebug() << "restoring aircraft" << m_selectedAircraft;
} else {
+ qDebug() << "recent aircraft is empty";
// select the default C172p
}
m_aircraftProxy->setRatings(m_ratingFilters);
m_ui->commandLineArgs->setPlainText(settings.value("additional-args").toString());
+
+ qDebug() << "restoring settings";
}
void QtLauncher::saveSettings()
settings.setValue("additional-args", m_ui->commandLineArgs->toPlainText());
m_ui->location->saveSettings();
+ qDebug() << "saving settings";
}
void QtLauncher::setEnableDisableOptionFromCheckbox(QCheckBox* cbox, QString name) const
m_recentAircraft.prepend(m_selectedAircraft);
if (m_recentAircraft.size() > MAX_RECENT_AIRCRAFT)
m_recentAircraft.pop_back();
+
+ qDebug() << "recent aircraft is now" << m_recentAircraft;
}
m_ui->location->setLocationOptions();
reject();
}
-<<<<<<< 56d7d049bc0b7361d1799298c38e61084f5d5e3f
-void QtLauncher::onSearchAirports()
-{
- QString search = m_ui->airportEdit->text();
- m_airportsModel->setSearch(search);
-
- if (m_airportsModel->isSearchActive()) {
- m_ui->searchStatusText->setText(QString("Searching for '%1'").arg(search));
- m_ui->locationStack->setCurrentIndex(2);
- } else if (m_airportsModel->rowCount(QModelIndex()) == 1) {
- setBaseLocation(m_airportsModel->itemAtRow(0));
- m_ui->locationStack->setCurrentIndex(0);
- }
-}
-
-void QtLauncher::onAirportSearchComplete()
-{
- int numResults = m_airportsModel->rowCount(QModelIndex());
- if (numResults == 0) {
- m_ui->searchStatusText->setText(QString("No matching airports for '%1'").arg(m_ui->airportEdit->text()));
- } else if (numResults == 1) {
- setBaseLocation(m_airportsModel->itemAtRow(0));
- m_ui->locationStack->setCurrentIndex(0);
- } else {
- m_ui->locationStack->setCurrentIndex(1);
- }
-}
-
-void QtLauncher::onLocationChanged()
-{
- bool locIsAirport = FGAirport::isAirportType(m_location.ptr());
-
- m_ui->runwayCombo->setEnabled(locIsAirport);
- m_ui->parkingCombo->setEnabled(locIsAirport);
- if (locIsAirport) {
- FGAirport* apt = static_cast<FGAirport*>(m_location.ptr());
- m_ui->airportDiagram->setAirport(apt);
-
- m_ui->runwayRadio->setChecked(true); // default back to runway mode
- // unless multiplayer is enabled ?
- m_ui->airportDiagram->setEnabled(true);
-
- m_ui->runwayCombo->clear();
- m_ui->runwayCombo->addItem("Automatic", -1);
- for (unsigned int r=0; r<apt->numRunways(); ++r) {
- FGRunwayRef rwy = apt->getRunwayByIndex(r);
- // add runway with index as data role
- m_ui->runwayCombo->addItem(QString::fromStdString(rwy->ident()), r);
-
- m_ui->airportDiagram->addRunway(rwy);
- }
-
- m_ui->parkingCombo->clear();
- FGAirportDynamics* dynamics = apt->getDynamics();
- PositionedIDVec parkings = NavDataCache::instance()->airportItemsOfType(m_location->guid(),
- FGPositioned::PARKING);
- if (parkings.empty()) {
- m_ui->parkingCombo->setEnabled(false);
- m_ui->parkingRadio->setEnabled(false);
- } else {
- m_ui->parkingCombo->setEnabled(true);
- m_ui->parkingRadio->setEnabled(true);
- Q_FOREACH(PositionedID parking, parkings) {
- FGParking* park = dynamics->getParking(parking);
- m_ui->parkingCombo->addItem(QString::fromStdString(park->getName()),
- static_cast<qlonglong>(parking));
-
- m_ui->airportDiagram->addParking(park);
- }
- }
-
-
- } // of location is aiport
-
-
-
-
-}
-
-void QtLauncher::onOffsetRadioToggled(bool on)
-{
- m_ui->offsetNmSpinbox->setEnabled(on);
- m_ui->offsetBearingSpinbox->setEnabled(on);
- m_ui->trueBearing->setEnabled(on);
- m_ui->offsetBearingLabel->setEnabled(on);
- m_ui->offsetDistanceLabel->setEnabled(on);
-}
-
-void QtLauncher::onAirportDiagramClicked(FGRunwayRef rwy)
-{
- if (rwy) {
- m_ui->runwayRadio->setChecked(true);
- int rwyIndex = m_ui->runwayCombo->findText(QString::fromStdString(rwy->ident()));
- m_ui->runwayCombo->setCurrentIndex(rwyIndex);
- }
-
- updateLocationDescription();
-}
-=======
->>>>>>> Work on LocationWidget for Qt launcher
-
void QtLauncher::onToggleTerrasync(bool enabled)
{
if (enabled) {
void QtLauncher::onAircraftSelected(const QModelIndex& index)
{
m_selectedAircraft = index.data(AircraftURIRole).toUrl();
+ qDebug() << "selected aircraft is now" << m_selectedAircraft;
updateSelectedAircraft();
}