user event flagging (#25517)

* setup home_btn in sidebar

* create UserFlag msg

* replay: show and skip to user flags

* update translations

* bump to cereal master

* remove comment

Co-authored-by: Adeeb Shihadeh <adeebshihadeh@gmail.com>
pull/25532/head
Cameron Clough 3 years ago committed by GitHub
parent 10e414f990
commit b3cfe962cf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      cereal
  2. 11
      selfdrive/ui/qt/sidebar.cc
  3. 4
      selfdrive/ui/qt/sidebar.h
  4. 34
      selfdrive/ui/translations/main_ja.ts
  5. 34
      selfdrive/ui/translations/main_ko.ts
  6. 34
      selfdrive/ui/translations/main_pt.ts
  7. 34
      selfdrive/ui/translations/main_zh-CHS.ts
  8. 34
      selfdrive/ui/translations/main_zh-CHT.ts
  9. 8
      tools/replay/consoleui.cc
  10. 7
      tools/replay/replay.cc
  11. 5
      tools/replay/replay.h

@ -1 +1 @@
Subproject commit ecff0a284a2aa9879c4d04ea797356e4ef024dc4 Subproject commit 589ef049a7b0bac31f4c8987c0fc539839fae489

@ -33,7 +33,7 @@ void Sidebar::drawMetric(QPainter &p, const QPair<QString, QString> &label, QCol
} }
Sidebar::Sidebar(QWidget *parent) : QFrame(parent) { Sidebar::Sidebar(QWidget *parent) : QFrame(parent) {
home_img = loadPixmap("../assets/images/button_home.png", {180, 180}); home_img = loadPixmap("../assets/images/button_home.png", home_btn.size());
settings_img = loadPixmap("../assets/images/button_settings.png", settings_btn.size(), Qt::IgnoreAspectRatio); settings_img = loadPixmap("../assets/images/button_settings.png", settings_btn.size(), Qt::IgnoreAspectRatio);
connect(this, &Sidebar::valueChanged, [=] { update(); }); connect(this, &Sidebar::valueChanged, [=] { update(); });
@ -43,9 +43,16 @@ Sidebar::Sidebar(QWidget *parent) : QFrame(parent) {
setFixedWidth(300); setFixedWidth(300);
QObject::connect(uiState(), &UIState::uiUpdate, this, &Sidebar::updateState); QObject::connect(uiState(), &UIState::uiUpdate, this, &Sidebar::updateState);
pm = std::make_unique<PubMaster, const std::initializer_list<const char *>>({"userFlag"});
} }
void Sidebar::mouseReleaseEvent(QMouseEvent *event) { void Sidebar::mouseReleaseEvent(QMouseEvent *event) {
if (home_btn.contains(event->pos())) {
MessageBuilder msg;
msg.initEvent().initUserFlag();
pm->send("userFlag", msg);
}
if (settings_btn.contains(event->pos())) { if (settings_btn.contains(event->pos())) {
emit openSettings(); emit openSettings();
} }
@ -99,7 +106,7 @@ void Sidebar::paintEvent(QPaintEvent *event) {
p.setOpacity(0.65); p.setOpacity(0.65);
p.drawPixmap(settings_btn.x(), settings_btn.y(), settings_img); p.drawPixmap(settings_btn.x(), settings_btn.y(), settings_img);
p.setOpacity(1.0); p.setOpacity(1.0);
p.drawPixmap(60, 1080 - 180 - 40, home_img); p.drawPixmap(home_btn.x(), home_btn.y(), home_img);
// network // network
int x = 58; int x = 58;

@ -43,6 +43,7 @@ protected:
{cereal::DeviceState::NetworkType::CELL5_G, tr("5G")} {cereal::DeviceState::NetworkType::CELL5_G, tr("5G")}
}; };
const QRect home_btn = QRect(60, 860, 180, 180);
const QRect settings_btn = QRect(50, 35, 200, 117); const QRect settings_btn = QRect(50, 35, 200, 117);
const QColor good_color = QColor(255, 255, 255); const QColor good_color = QColor(255, 255, 255);
const QColor warning_color = QColor(218, 202, 37); const QColor warning_color = QColor(218, 202, 37);
@ -52,4 +53,7 @@ protected:
ItemStatus connect_status, panda_status, temp_status; ItemStatus connect_status, panda_status, temp_status;
QString net_type; QString net_type;
int net_strength = 0; int net_strength = 0;
private:
std::unique_ptr<PubMaster> pm;
}; };

@ -876,71 +876,71 @@ location set</source>
<context> <context>
<name>Sidebar</name> <name>Sidebar</name>
<message> <message>
<location filename="../qt/sidebar.cc" line="67"/> <location filename="../qt/sidebar.cc" line="75"/>
<location filename="../qt/sidebar.cc" line="69"/> <location filename="../qt/sidebar.cc" line="77"/>
<source>CONNECT</source> <source>CONNECT</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="67"/> <location filename="../qt/sidebar.cc" line="75"/>
<source>OFFLINE</source> <source>OFFLINE</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="69"/> <location filename="../qt/sidebar.cc" line="77"/>
<location filename="../qt/sidebar.cc" line="82"/> <location filename="../qt/sidebar.cc" line="90"/>
<source>ONLINE</source> <source>ONLINE</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="69"/> <location filename="../qt/sidebar.cc" line="77"/>
<source>ERROR</source> <source>ERROR</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="73"/> <location filename="../qt/sidebar.cc" line="81"/>
<location filename="../qt/sidebar.cc" line="76"/> <location filename="../qt/sidebar.cc" line="84"/>
<location filename="../qt/sidebar.cc" line="78"/> <location filename="../qt/sidebar.cc" line="86"/>
<source>TEMP</source> <source>TEMP</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="73"/> <location filename="../qt/sidebar.cc" line="81"/>
<source>HIGH</source> <source>HIGH</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="76"/> <location filename="../qt/sidebar.cc" line="84"/>
<source>GOOD</source> <source>GOOD</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="78"/> <location filename="../qt/sidebar.cc" line="86"/>
<source>OK</source> <source>OK</source>
<translation>OK</translation> <translation>OK</translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="82"/> <location filename="../qt/sidebar.cc" line="90"/>
<source>VEHICLE</source> <source>VEHICLE</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="84"/> <location filename="../qt/sidebar.cc" line="92"/>
<source>NO</source> <source>NO</source>
<translation>NO</translation> <translation>NO</translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="84"/> <location filename="../qt/sidebar.cc" line="92"/>
<source>PANDA</source> <source>PANDA</source>
<translation>PANDA</translation> <translation>PANDA</translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="86"/> <location filename="../qt/sidebar.cc" line="94"/>
<source>GPS</source> <source>GPS</source>
<translation>GPS</translation> <translation>GPS</translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="86"/> <location filename="../qt/sidebar.cc" line="94"/>
<source>SEARCH</source> <source>SEARCH</source>
<translation></translation> <translation></translation>
</message> </message>

@ -876,71 +876,71 @@ location set</source>
<context> <context>
<name>Sidebar</name> <name>Sidebar</name>
<message> <message>
<location filename="../qt/sidebar.cc" line="67"/> <location filename="../qt/sidebar.cc" line="75"/>
<location filename="../qt/sidebar.cc" line="69"/> <location filename="../qt/sidebar.cc" line="77"/>
<source>CONNECT</source> <source>CONNECT</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="67"/> <location filename="../qt/sidebar.cc" line="75"/>
<source>OFFLINE</source> <source>OFFLINE</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="69"/> <location filename="../qt/sidebar.cc" line="77"/>
<location filename="../qt/sidebar.cc" line="82"/> <location filename="../qt/sidebar.cc" line="90"/>
<source>ONLINE</source> <source>ONLINE</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="69"/> <location filename="../qt/sidebar.cc" line="77"/>
<source>ERROR</source> <source>ERROR</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="73"/> <location filename="../qt/sidebar.cc" line="81"/>
<location filename="../qt/sidebar.cc" line="76"/> <location filename="../qt/sidebar.cc" line="84"/>
<location filename="../qt/sidebar.cc" line="78"/> <location filename="../qt/sidebar.cc" line="86"/>
<source>TEMP</source> <source>TEMP</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="73"/> <location filename="../qt/sidebar.cc" line="81"/>
<source>HIGH</source> <source>HIGH</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="76"/> <location filename="../qt/sidebar.cc" line="84"/>
<source>GOOD</source> <source>GOOD</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="78"/> <location filename="../qt/sidebar.cc" line="86"/>
<source>OK</source> <source>OK</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="82"/> <location filename="../qt/sidebar.cc" line="90"/>
<source>VEHICLE</source> <source>VEHICLE</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="84"/> <location filename="../qt/sidebar.cc" line="92"/>
<source>NO</source> <source>NO</source>
<translation>NO</translation> <translation>NO</translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="84"/> <location filename="../qt/sidebar.cc" line="92"/>
<source>PANDA</source> <source>PANDA</source>
<translation>PANDA</translation> <translation>PANDA</translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="86"/> <location filename="../qt/sidebar.cc" line="94"/>
<source>GPS</source> <source>GPS</source>
<translation>GPS</translation> <translation>GPS</translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="86"/> <location filename="../qt/sidebar.cc" line="94"/>
<source>SEARCH</source> <source>SEARCH</source>
<translation></translation> <translation></translation>
</message> </message>

@ -880,71 +880,71 @@ trabalho definido</translation>
<context> <context>
<name>Sidebar</name> <name>Sidebar</name>
<message> <message>
<location filename="../qt/sidebar.cc" line="67"/> <location filename="../qt/sidebar.cc" line="75"/>
<location filename="../qt/sidebar.cc" line="69"/> <location filename="../qt/sidebar.cc" line="77"/>
<source>CONNECT</source> <source>CONNECT</source>
<translation>CONEXÃO</translation> <translation>CONEXÃO</translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="67"/> <location filename="../qt/sidebar.cc" line="75"/>
<source>OFFLINE</source> <source>OFFLINE</source>
<translation>DESCONEC</translation> <translation>DESCONEC</translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="69"/> <location filename="../qt/sidebar.cc" line="77"/>
<location filename="../qt/sidebar.cc" line="82"/> <location filename="../qt/sidebar.cc" line="90"/>
<source>ONLINE</source> <source>ONLINE</source>
<translation>CONECTADO</translation> <translation>CONECTADO</translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="69"/> <location filename="../qt/sidebar.cc" line="77"/>
<source>ERROR</source> <source>ERROR</source>
<translation>ERRO</translation> <translation>ERRO</translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="73"/> <location filename="../qt/sidebar.cc" line="81"/>
<location filename="../qt/sidebar.cc" line="76"/> <location filename="../qt/sidebar.cc" line="84"/>
<location filename="../qt/sidebar.cc" line="78"/> <location filename="../qt/sidebar.cc" line="86"/>
<source>TEMP</source> <source>TEMP</source>
<translation>TEMP</translation> <translation>TEMP</translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="73"/> <location filename="../qt/sidebar.cc" line="81"/>
<source>HIGH</source> <source>HIGH</source>
<translation>ALTA</translation> <translation>ALTA</translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="76"/> <location filename="../qt/sidebar.cc" line="84"/>
<source>GOOD</source> <source>GOOD</source>
<translation>BOA</translation> <translation>BOA</translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="78"/> <location filename="../qt/sidebar.cc" line="86"/>
<source>OK</source> <source>OK</source>
<translation>OK</translation> <translation>OK</translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="82"/> <location filename="../qt/sidebar.cc" line="90"/>
<source>VEHICLE</source> <source>VEHICLE</source>
<translation>VEÍCULO</translation> <translation>VEÍCULO</translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="84"/> <location filename="../qt/sidebar.cc" line="92"/>
<source>NO</source> <source>NO</source>
<translation>SEM</translation> <translation>SEM</translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="84"/> <location filename="../qt/sidebar.cc" line="92"/>
<source>PANDA</source> <source>PANDA</source>
<translation>PANDA</translation> <translation>PANDA</translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="86"/> <location filename="../qt/sidebar.cc" line="94"/>
<source>GPS</source> <source>GPS</source>
<translation>GPS</translation> <translation>GPS</translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="86"/> <location filename="../qt/sidebar.cc" line="94"/>
<source>SEARCH</source> <source>SEARCH</source>
<translation>PROCURA</translation> <translation>PROCURA</translation>
</message> </message>

@ -874,71 +874,71 @@ location set</source>
<context> <context>
<name>Sidebar</name> <name>Sidebar</name>
<message> <message>
<location filename="../qt/sidebar.cc" line="67"/> <location filename="../qt/sidebar.cc" line="75"/>
<location filename="../qt/sidebar.cc" line="69"/> <location filename="../qt/sidebar.cc" line="77"/>
<source>CONNECT</source> <source>CONNECT</source>
<translation>CONNECT</translation> <translation>CONNECT</translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="67"/> <location filename="../qt/sidebar.cc" line="75"/>
<source>OFFLINE</source> <source>OFFLINE</source>
<translation>线</translation> <translation>线</translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="69"/> <location filename="../qt/sidebar.cc" line="77"/>
<location filename="../qt/sidebar.cc" line="82"/> <location filename="../qt/sidebar.cc" line="90"/>
<source>ONLINE</source> <source>ONLINE</source>
<translation>线</translation> <translation>线</translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="69"/> <location filename="../qt/sidebar.cc" line="77"/>
<source>ERROR</source> <source>ERROR</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="73"/> <location filename="../qt/sidebar.cc" line="81"/>
<location filename="../qt/sidebar.cc" line="76"/> <location filename="../qt/sidebar.cc" line="84"/>
<location filename="../qt/sidebar.cc" line="78"/> <location filename="../qt/sidebar.cc" line="86"/>
<source>TEMP</source> <source>TEMP</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="73"/> <location filename="../qt/sidebar.cc" line="81"/>
<source>HIGH</source> <source>HIGH</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="76"/> <location filename="../qt/sidebar.cc" line="84"/>
<source>GOOD</source> <source>GOOD</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="78"/> <location filename="../qt/sidebar.cc" line="86"/>
<source>OK</source> <source>OK</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="82"/> <location filename="../qt/sidebar.cc" line="90"/>
<source>VEHICLE</source> <source>VEHICLE</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="84"/> <location filename="../qt/sidebar.cc" line="92"/>
<source>NO</source> <source>NO</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="84"/> <location filename="../qt/sidebar.cc" line="92"/>
<source>PANDA</source> <source>PANDA</source>
<translation>PANDA</translation> <translation>PANDA</translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="86"/> <location filename="../qt/sidebar.cc" line="94"/>
<source>GPS</source> <source>GPS</source>
<translation>GPS</translation> <translation>GPS</translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="86"/> <location filename="../qt/sidebar.cc" line="94"/>
<source>SEARCH</source> <source>SEARCH</source>
<translation></translation> <translation></translation>
</message> </message>

@ -876,71 +876,71 @@ location set</source>
<context> <context>
<name>Sidebar</name> <name>Sidebar</name>
<message> <message>
<location filename="../qt/sidebar.cc" line="67"/> <location filename="../qt/sidebar.cc" line="75"/>
<location filename="../qt/sidebar.cc" line="69"/> <location filename="../qt/sidebar.cc" line="77"/>
<source>CONNECT</source> <source>CONNECT</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="67"/> <location filename="../qt/sidebar.cc" line="75"/>
<source>OFFLINE</source> <source>OFFLINE</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="69"/> <location filename="../qt/sidebar.cc" line="77"/>
<location filename="../qt/sidebar.cc" line="82"/> <location filename="../qt/sidebar.cc" line="90"/>
<source>ONLINE</source> <source>ONLINE</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="69"/> <location filename="../qt/sidebar.cc" line="77"/>
<source>ERROR</source> <source>ERROR</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="73"/> <location filename="../qt/sidebar.cc" line="81"/>
<location filename="../qt/sidebar.cc" line="76"/> <location filename="../qt/sidebar.cc" line="84"/>
<location filename="../qt/sidebar.cc" line="78"/> <location filename="../qt/sidebar.cc" line="86"/>
<source>TEMP</source> <source>TEMP</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="73"/> <location filename="../qt/sidebar.cc" line="81"/>
<source>HIGH</source> <source>HIGH</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="76"/> <location filename="../qt/sidebar.cc" line="84"/>
<source>GOOD</source> <source>GOOD</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="78"/> <location filename="../qt/sidebar.cc" line="86"/>
<source>OK</source> <source>OK</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="82"/> <location filename="../qt/sidebar.cc" line="90"/>
<source>VEHICLE</source> <source>VEHICLE</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="84"/> <location filename="../qt/sidebar.cc" line="92"/>
<source>NO</source> <source>NO</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="84"/> <location filename="../qt/sidebar.cc" line="92"/>
<source>PANDA</source> <source>PANDA</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="86"/> <location filename="../qt/sidebar.cc" line="94"/>
<source>GPS</source> <source>GPS</source>
<translation>GPS</translation> <translation>GPS</translation>
</message> </message>
<message> <message>
<location filename="../qt/sidebar.cc" line="86"/> <location filename="../qt/sidebar.cc" line="94"/>
<source>SEARCH</source> <source>SEARCH</source>
<translation></translation> <translation></translation>
</message> </message>

@ -18,6 +18,7 @@ const std::initializer_list<std::pair<std::string, std::string>> keyboard_shortc
{"space", "Pause/Resume"}, {"space", "Pause/Resume"},
{"e", "Next Engagement"}, {"e", "Next Engagement"},
{"d", "Next Disengagement"}, {"d", "Next Disengagement"},
{"t", "Next User Tag"}
}, },
{ {
{"enter", "Enter seek request"}, {"enter", "Enter seek request"},
@ -32,6 +33,7 @@ enum Color {
Yellow, Yellow,
Green, Green,
Red, Red,
Cyan,
BrightWhite, BrightWhite,
Engaged, Engaged,
Disengaged, Disengaged,
@ -70,6 +72,7 @@ ConsoleUI::ConsoleUI(Replay *replay, QObject *parent) : replay(replay), sm({"car
init_pair(Color::Debug, 246, COLOR_BLACK); // #949494 init_pair(Color::Debug, 246, COLOR_BLACK); // #949494
init_pair(Color::Yellow, 184, COLOR_BLACK); init_pair(Color::Yellow, 184, COLOR_BLACK);
init_pair(Color::Red, COLOR_RED, COLOR_BLACK); init_pair(Color::Red, COLOR_RED, COLOR_BLACK);
init_pair(Color::Cyan, COLOR_CYAN, COLOR_BLACK);
init_pair(Color::BrightWhite, 15, COLOR_BLACK); init_pair(Color::BrightWhite, 15, COLOR_BLACK);
init_pair(Color::Disengaged, COLOR_BLUE, COLOR_BLUE); init_pair(Color::Disengaged, COLOR_BLUE, COLOR_BLUE);
init_pair(Color::Engaged, 28, 28); init_pair(Color::Engaged, 28, 28);
@ -205,6 +208,7 @@ void ConsoleUI::displayTimelineDesc() {
{Color::Green, " Info ", true}, {Color::Green, " Info ", true},
{Color::Yellow, " Warning ", true}, {Color::Yellow, " Warning ", true},
{Color::Red, " Critical ", true}, {Color::Red, " Critical ", true},
{Color::Cyan, " User Tag ", true},
}; };
for (auto [color, name, bold] : indicators) { for (auto [color, name, bold] : indicators) {
add_str(w[Win::TimelineDesc], "__", color, bold); add_str(w[Win::TimelineDesc], "__", color, bold);
@ -263,6 +267,8 @@ void ConsoleUI::updateTimeline() {
if (type == TimelineType::Engaged) { if (type == TimelineType::Engaged) {
mvwchgat(win, 1, start_pos, end_pos - start_pos + 1, A_COLOR, Color::Engaged, NULL); mvwchgat(win, 1, start_pos, end_pos - start_pos + 1, A_COLOR, Color::Engaged, NULL);
mvwchgat(win, 2, start_pos, end_pos - start_pos + 1, A_COLOR, Color::Engaged, NULL); mvwchgat(win, 2, start_pos, end_pos - start_pos + 1, A_COLOR, Color::Engaged, NULL);
} else if (type == TimelineType::UserFlag) {
mvwchgat(win, 3, start_pos, end_pos - start_pos + 1, ACS_S3, Color::Cyan, NULL);
} else { } else {
auto color_id = Color::Green; auto color_id = Color::Green;
if (type != TimelineType::AlertInfo) { if (type != TimelineType::AlertInfo) {
@ -336,6 +342,8 @@ void ConsoleUI::handleKey(char c) {
replay->seekToFlag(FindFlag::nextEngagement); replay->seekToFlag(FindFlag::nextEngagement);
} else if (c == 'd') { } else if (c == 'd') {
replay->seekToFlag(FindFlag::nextDisEngagement); replay->seekToFlag(FindFlag::nextDisEngagement);
} else if (c == 't') {
replay->seekToFlag(FindFlag::nextUserFlag);
} else if (c == 'm') { } else if (c == 'm') {
replay->seekTo(+60, true); replay->seekTo(+60, true);
} else if (c == 'M') { } else if (c == 'M') {

@ -149,6 +149,9 @@ void Replay::buildTimeline() {
timeline.push_back({toSeconds(alert_begin), toSeconds(e->mono_time), alert_type}); timeline.push_back({toSeconds(alert_begin), toSeconds(e->mono_time), alert_type});
alert_begin = 0; alert_begin = 0;
} }
} else if (e->which == cereal::Event::Which::USER_FLAG) {
std::lock_guard lk(timeline_lock);
timeline.push_back({toSeconds(e->mono_time), toSeconds(e->mono_time), TimelineType::UserFlag});
} }
} }
} }
@ -163,6 +166,10 @@ std::optional<uint64_t> Replay::find(FindFlag flag) {
} else if (flag == FindFlag::nextDisEngagement && end_ts > cur_ts) { } else if (flag == FindFlag::nextDisEngagement && end_ts > cur_ts) {
return end_ts; return end_ts;
} }
} else if (type == TimelineType::UserFlag) {
if (flag == FindFlag::nextUserFlag && start_ts > cur_ts) {
return start_ts;
}
} }
} }
return std::nullopt; return std::nullopt;

@ -24,10 +24,11 @@ enum REPLAY_FLAGS {
enum class FindFlag { enum class FindFlag {
nextEngagement, nextEngagement,
nextDisEngagement nextDisEngagement,
nextUserFlag,
}; };
enum class TimelineType { None, Engaged, AlertInfo, AlertWarning, AlertCritical }; enum class TimelineType { None, Engaged, AlertInfo, AlertWarning, AlertCritical, UserFlag };
class Replay : public QObject { class Replay : public QObject {
Q_OBJECT Q_OBJECT

Loading…
Cancel
Save