consoleui.h 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #pragma once
  2. #include <array>
  3. #include <QBasicTimer>
  4. #include <QObject>
  5. #include <QSocketNotifier>
  6. #include <QTimer>
  7. #include <QTimerEvent>
  8. #include "tools/replay/replay.h"
  9. #include <ncurses.h>
  10. class ConsoleUI : public QObject {
  11. Q_OBJECT
  12. public:
  13. ConsoleUI(Replay *replay, QObject *parent = 0);
  14. ~ConsoleUI();
  15. inline static const std::array speed_array = {0.2f, 0.5f, 1.0f, 2.0f, 3.0f};
  16. private:
  17. void initWindows();
  18. void handleKey(char c);
  19. void displayHelp();
  20. void displayTimelineDesc();
  21. void updateTimeline();
  22. void updateSummary();
  23. void updateStatus();
  24. void pauseReplay(bool pause);
  25. enum Status { Waiting, Playing, Paused };
  26. enum Win { Title, Stats, Log, LogBorder, DownloadBar, Timeline, TimelineDesc, Help, CarState, Max};
  27. std::array<WINDOW*, Win::Max> w{};
  28. SubMaster sm;
  29. Replay *replay;
  30. QBasicTimer getch_timer;
  31. QTimer sm_timer;
  32. QSocketNotifier notifier{0, QSocketNotifier::Read, this};
  33. int max_width, max_height;
  34. Status status = Status::Waiting;
  35. signals:
  36. void updateProgressBarSignal(uint64_t cur, uint64_t total, bool success);
  37. void logMessageSignal(ReplyMsgType type, const QString &msg);
  38. private slots:
  39. void readyRead();
  40. void timerEvent(QTimerEvent *ev);
  41. void updateProgressBar(uint64_t cur, uint64_t total, bool success);
  42. void logMessage(ReplyMsgType type, const QString &msg);
  43. };