You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							102 lines
						
					
					
						
							2.5 KiB
						
					
					
				
			
		
		
	
	
							102 lines
						
					
					
						
							2.5 KiB
						
					
					
				#pragma once
 | 
						|
 | 
						|
#include <future>
 | 
						|
#include <vector>
 | 
						|
 | 
						|
#include <QFrame>
 | 
						|
#include <QJsonArray>
 | 
						|
#include <QJsonDocument>
 | 
						|
#include <QJsonObject>
 | 
						|
#include <QLabel>
 | 
						|
#include <QPushButton>
 | 
						|
#include <QVBoxLayout>
 | 
						|
 | 
						|
#include "common/params.h"
 | 
						|
#include "selfdrive/ui/qt/util.h"
 | 
						|
#include "selfdrive/ui/qt/widgets/controls.h"
 | 
						|
 | 
						|
const QString NAV_TYPE_FAVORITE = "favorite";
 | 
						|
const QString NAV_TYPE_RECENT = "recent";
 | 
						|
 | 
						|
const QString NAV_FAVORITE_LABEL_HOME = "home";
 | 
						|
const QString NAV_FAVORITE_LABEL_WORK = "work";
 | 
						|
 | 
						|
class DestinationWidget;
 | 
						|
 | 
						|
class NavManager : public QObject {
 | 
						|
  Q_OBJECT
 | 
						|
 | 
						|
public:
 | 
						|
  static NavManager *instance();
 | 
						|
  QJsonArray currentLocations() const { return locations; }
 | 
						|
  QJsonObject currentDestination() const { return current_dest; }
 | 
						|
  void setCurrentDestination(const QJsonObject &loc);
 | 
						|
  qint64 getLastActivity(const QJsonObject &loc) const;
 | 
						|
 | 
						|
signals:
 | 
						|
  void updated();
 | 
						|
 | 
						|
private:
 | 
						|
  NavManager(QObject *parent);
 | 
						|
  void parseLocationsResponse(const QString &response, bool success);
 | 
						|
  void sortLocations();
 | 
						|
 | 
						|
  Params params;
 | 
						|
  QString prev_response;
 | 
						|
  QJsonArray locations;
 | 
						|
  QJsonObject current_dest;
 | 
						|
  std::future<void> write_param_future;
 | 
						|
};
 | 
						|
 | 
						|
class MapSettings : public QFrame {
 | 
						|
  Q_OBJECT
 | 
						|
public:
 | 
						|
  explicit MapSettings(bool closeable = false, QWidget *parent = nullptr);
 | 
						|
  void navigateTo(const QJsonObject &place);
 | 
						|
 | 
						|
private:
 | 
						|
  void showEvent(QShowEvent *event) override;
 | 
						|
  void refresh();
 | 
						|
 | 
						|
  QVBoxLayout *destinations_layout;
 | 
						|
  DestinationWidget *current_widget;
 | 
						|
  DestinationWidget *home_widget;
 | 
						|
  DestinationWidget *work_widget;
 | 
						|
  std::vector<DestinationWidget *> widgets;
 | 
						|
 | 
						|
signals:
 | 
						|
  void closeSettings();
 | 
						|
};
 | 
						|
 | 
						|
class DestinationWidget : public QPushButton {
 | 
						|
  Q_OBJECT
 | 
						|
public:
 | 
						|
  explicit DestinationWidget(QWidget *parent = nullptr);
 | 
						|
  void set(const QJsonObject &location, bool current = false);
 | 
						|
  void unset(const QString &label, bool current = false);
 | 
						|
 | 
						|
signals:
 | 
						|
  void actionClicked();
 | 
						|
  void navigateTo(const QJsonObject &destination);
 | 
						|
 | 
						|
private:
 | 
						|
  struct NavIcons {
 | 
						|
    QPixmap home, work, favorite, recent, directions;
 | 
						|
  };
 | 
						|
 | 
						|
  static NavIcons icons() {
 | 
						|
    static NavIcons nav_icons {
 | 
						|
      loadPixmap("../assets/navigation/icon_home.svg", {48, 48}),
 | 
						|
      loadPixmap("../assets/navigation/icon_work.svg", {48, 48}),
 | 
						|
      loadPixmap("../assets/navigation/icon_favorite.svg", {48, 48}),
 | 
						|
      loadPixmap("../assets/navigation/icon_recent.svg", {48, 48}),
 | 
						|
      loadPixmap("../assets/navigation/icon_directions.svg", {48, 48}),
 | 
						|
    };
 | 
						|
    return nav_icons;
 | 
						|
  }
 | 
						|
 | 
						|
private:
 | 
						|
  QLabel *icon, *title, *subtitle;
 | 
						|
  QPushButton *action;
 | 
						|
  QJsonObject dest;
 | 
						|
};
 | 
						|
 |