X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=client%2Fmainwindow.cpp;h=24cdc8b564b66280f4095d90da1a49bebd5a14fd;hb=HEAD;hp=39e046c46c666cbd061dd0bca0ac02737038dc51;hpb=60f3a748a498395320247a117a0cbd9a08fecbb4;p=ultimatescore diff --git a/client/mainwindow.cpp b/client/mainwindow.cpp index 39e046c..24cdc8b 100644 --- a/client/mainwindow.cpp +++ b/client/mainwindow.cpp @@ -90,6 +90,24 @@ MainWindow::MainWindow(QWidget *parent) : ui(new Ui::MainWindow) { ui->setupUi(this); + for (QComboBox *team_combo : { ui->initials_1_edit, ui->initials_2_edit, ui->match_2_initials_1_edit, ui->match_2_initials_2_edit, ui->match_3_initials_1_edit, ui->match_3_initials_2_edit }) { + // team_combo->addItem("BFK", "navy"); + team_combo->addItem("BRI", "navy"); + team_combo->addItem("BSI1", "white"); + team_combo->addItem("BSI2", "black"); + team_combo->addItem("ESK", "white"); + team_combo->addItem("FRA", "navy"); + team_combo->addItem("NHHI", "navy"); + team_combo->addItem("NMBUI", "cyan"); + team_combo->addItem("OSI", "black"); + team_combo->addItem("PCL", "red"); + team_combo->addItem("STO", ""); + team_combo->addItem("TFK1", "yellow"); + team_combo->addItem("TFK2", "yellow"); + team_combo->addItem("TFK3", "yellow"); + team_combo->addItem("TSI", "orange"); + } + ws = new WSServer("127.0.0.1", 5250); ws->set_connection_callback([this](bool connected) { string msg = connected ? "Connected" : "Not connected"; @@ -100,10 +118,12 @@ MainWindow::MainWindow(QWidget *parent) : udp_thread = std::thread(&MainWindow::udp_thread_func, this, 6000); udp_thread2 = std::thread(&MainWindow::udp_thread_func, this, 6001); + udp_thread3 = std::thread(&MainWindow::udp_thread_func, this, 6002); connect(ui->ws_disconnect_btn, &QPushButton::clicked, this, &MainWindow::ws_disconnect_clicked); connect(ui->set_initials_btn, &QPushButton::clicked, this, &MainWindow::set_initials_clicked); connect(ui->set_match_2_initials_btn, &QPushButton::clicked, this, &MainWindow::set_match_2_initials_clicked); + connect(ui->set_match_3_initials_btn, &QPushButton::clicked, this, &MainWindow::set_match_3_initials_clicked); connect(ui->set_color_btn, &QPushButton::clicked, this, &MainWindow::set_color_clicked); connect(ui->set_score_btn, &QPushButton::clicked, this, &MainWindow::set_score_clicked); connect(ui->set_all_scorebug_btn, &QPushButton::clicked, this, &MainWindow::set_all_scorebug_clicked); @@ -120,6 +140,8 @@ MainWindow::MainWindow(QWidget *parent) : connect(ui->hide_clock_btn, &QPushButton::clicked, this, &MainWindow::hide_clock_clicked); connect(ui->show_match_2_btn, &QPushButton::clicked, this, &MainWindow::show_match_2_clicked); connect(ui->hide_match_2_btn, &QPushButton::clicked, this, &MainWindow::hide_match_2_clicked); + connect(ui->show_match_3_btn, &QPushButton::clicked, this, &MainWindow::show_match_3_clicked); + connect(ui->hide_match_3_btn, &QPushButton::clicked, this, &MainWindow::hide_match_3_clicked); connect(ui->set_comment_btn, &QPushButton::clicked, this, &MainWindow::set_comment_clicked); connect(ui->set_and_show_comment_btn, &QPushButton::clicked, this, &MainWindow::set_and_show_comment_clicked); @@ -140,10 +162,17 @@ MainWindow::MainWindow(QWidget *parent) : connect(ui->show_schedule_btn, &QPushButton::clicked, this, &MainWindow::show_schedule_clicked); connect(ui->show_carousel_btn, &QPushButton::clicked, this, &MainWindow::show_carousel_clicked); connect(ui->show_nothing_btn, &QPushButton::clicked, this, &MainWindow::show_nothing_clicked); - connect(ui->show_roster_1_btn, &QPushButton::clicked, this, [this]() { show_roster_clicked(ui->initials_1_edit->text().toStdString()); }); - connect(ui->show_roster_2_btn, &QPushButton::clicked, this, [this]() { show_roster_clicked(ui->initials_2_edit->text().toStdString()); }); + connect(ui->show_roster_1_btn, &QPushButton::clicked, this, [this]() { show_roster_clicked(ui->initials_1_edit->currentText().toStdString()); }); + connect(ui->show_roster_2_btn, &QPushButton::clicked, this, [this]() { show_roster_clicked(ui->initials_2_edit->currentText().toStdString()); }); connect(ui->show_roster_carousel_btn, &QPushButton::clicked, this, &MainWindow::show_roster_carousel_clicked); + connect(ui->initials_1_edit, QOverload::of(&QComboBox::currentIndexChanged), [=](int index) { + ui->color_1_edit->setText(ui->initials_1_edit->itemData(index).toString()); + }); + connect(ui->initials_2_edit, QOverload::of(&QComboBox::currentIndexChanged), [=](int index) { + ui->color_2_edit->setText(ui->initials_2_edit->itemData(index).toString()); + }); + autocomment_update(); const set> usb{{ 0x0e8f, 0x0041 }}; @@ -164,8 +193,8 @@ void MainWindow::ws_disconnect_clicked() void MainWindow::set_initials_clicked() { map param; - param["team1"] = escape_html(ui->initials_1_edit->text().toStdString()); - param["team2"] = escape_html(ui->initials_2_edit->text().toStdString()); + param["team1"] = escape_html(ui->initials_1_edit->currentText().toStdString()); + param["team2"] = escape_html(ui->initials_2_edit->currentText().toStdString()); ws->send_command("update " + serialize_as_json(param)); ws->send_command("eval setteams()"); } @@ -173,12 +202,21 @@ void MainWindow::set_initials_clicked() void MainWindow::set_match_2_initials_clicked() { map param; - param["team1"] = escape_html(ui->match_2_initials_1_edit->text().toStdString()); - param["team2"] = escape_html(ui->match_2_initials_2_edit->text().toStdString()); + param["team1"] = escape_html(ui->match_2_initials_1_edit->currentText().toStdString()); + param["team2"] = escape_html(ui->match_2_initials_2_edit->currentText().toStdString()); ws->send_command("update " + serialize_as_json(param)); ws->send_command("eval setteams2()"); } +void MainWindow::set_match_3_initials_clicked() +{ + map param; + param["team1"] = escape_html(ui->match_3_initials_1_edit->currentText().toStdString()); + param["team2"] = escape_html(ui->match_3_initials_2_edit->currentText().toStdString()); + ws->send_command("update " + serialize_as_json(param)); + ws->send_command("eval setteams3()"); +} + void MainWindow::set_color_clicked() { map param; @@ -231,12 +269,12 @@ void MainWindow::set_clock_limit_clicked() void MainWindow::start_and_show_clock_clicked() { - ws->send_command("eval startclock()"); // Also shows. + ws->send_command("eval startclock(0)"); // Also shows. } void MainWindow::stop_clock_clicked() { - ws->send_command("eval stopclock()"); + ws->send_command("eval stopclock(0)"); } void MainWindow::show_clock_clicked() @@ -259,6 +297,16 @@ void MainWindow::hide_match_2_clicked() ws->send_command("eval hidematch2()"); } +void MainWindow::show_match_3_clicked() +{ + ws->send_command("eval showmatch3()"); +} + +void MainWindow::hide_match_3_clicked() +{ + ws->send_command("eval hidematch3()"); +} + void MainWindow::set_comment_clicked() { map param; @@ -383,8 +431,8 @@ void MainWindow::show_carousel_clicked() void MainWindow::show_roster_carousel_clicked() { map param; - param["team1"] = escape_html(ui->initials_1_edit->text().toStdString()); - param["team2"] = escape_html(ui->initials_2_edit->text().toStdString()); + param["team1"] = escape_html(ui->initials_1_edit->currentText().toStdString()); + param["team2"] = escape_html(ui->initials_2_edit->currentText().toStdString()); ws->send_command("eval stopcarousel()"); ws->send_command("update " + serialize_as_json(param)); ws->send_command("eval showrostercarousel_from_state()"); @@ -467,6 +515,13 @@ int parse_clock(char ch1, char ch2) return s1 * 10 + s2; } +int parse_score(char ch2, char ch3) +{ + int s2 = parse_digit(ch2); + int s3 = parse_digit(ch3); + return s2 * 10 + s3; +} + int parse_score(char ch1, char ch2, char ch3) { int s1 = parse_digit(ch1); @@ -475,10 +530,27 @@ int parse_score(char ch1, char ch2, char ch3) return s1 * 100 + s2 * 10 + s3; } +int parse_score_weird(char ch1, char ch2, char ch3) +{ + char str[4]; + char *ptr = str; + if (ch1 != ' ') *ptr++ = ch1; + if (ch2 != ' ') *ptr++ = ch2; + if (ch3 != ' ') *ptr++ = ch3; + *ptr++ = 0; + + return atoi(str); +} + + void MainWindow::bt6000_message_received(const string &msg, int port) { fprintf(stderr, "BT6000 message: '%s' (port %d)\n", msg.c_str(), port); - if (port == 6001) { + if (port == 6002) { + if (!ui->bt6000_3_enable->isChecked()) { + return; + } + } else if (port == 6001) { if (!ui->bt6000_2_enable->isChecked()) { return; } @@ -500,26 +572,39 @@ void MainWindow::bt6000_message_received(const string &msg, int port) param["clock_sec"] = to_string(seconds); ws->send_command("update " + serialize_as_json(param)); - if (port == 6001) { - ws->send_command("eval adjustclock2fromstate()"); + if (port == 6002) { + ws->send_command("eval adjustclockfromstate(2)"); + if (clock_running) { + ws->send_command("eval startclock(2)"); + } else { + ws->send_command("eval stopclock(2)"); + } + } else if (port == 6001) { + ws->send_command("eval adjustclockfromstate(1)"); if (clock_running) { - ws->send_command("eval startclock2()"); + ws->send_command("eval startclock(1)"); } else { - ws->send_command("eval stopclock2()"); + ws->send_command("eval stopclock(1)"); } } else { - ws->send_command("eval adjustclockfromstate()"); + ws->send_command("eval adjustclockfromstate(0)"); if (clock_running) { - ws->send_command("eval startclock()"); + ws->send_command("eval startclock(0)"); } else { - ws->send_command("eval stopclock()"); + ws->send_command("eval stopclock(0)"); } } } if (msg.size() >= 10 && msg[0] == 'G' && msg[1] == '0' && msg[2] == '2') { int score1 = parse_score(msg[4], msg[5], msg[6]); int score2 = parse_score(msg[7], msg[8], msg[9]); - if (port == 6001) { + if (port == 6002) { + map param; + param["score1"] = to_string(score1); + param["score2"] = to_string(score2); + ws->send_command("update " + serialize_as_json(param)); + ws->send_command("eval setscore3()"); + } else if (port == 6001) { map param; param["score1"] = to_string(score1); param["score2"] = to_string(score2); @@ -531,6 +616,62 @@ void MainWindow::bt6000_message_received(const string &msg, int port) set_score_clicked(); } } + if (msg.size() >= 9 && msg[0] == 'G' && msg[1] == '1' && msg[2] == '0') { + // G10: Game clock, score, period? + bool clock_running = !(msg[3] & 0x02); +// bool klaxon = (msg[3] & 0x04); + int minutes = parse_clock(msg[4], msg[5]); + int seconds = parse_clock(msg[6], msg[7]); + int score1 = parse_score_weird(msg[8], msg[9], msg[10]); + int score2 = parse_score_weird(msg[11], msg[12], msg[13]); + + map param; + ws->send_command("update " + serialize_as_json(param)); + + if (port == 6002) { + map param; + param["score1"] = to_string(score1); + param["score2"] = to_string(score2); + ws->send_command("update " + serialize_as_json(param)); + ws->send_command("eval setscore3()"); + } else if (port == 6001) { + map param; + param["score1"] = to_string(score1); + param["score2"] = to_string(score2); + ws->send_command("update " + serialize_as_json(param)); + ws->send_command("eval setscore2()"); + } else { + map param; + param["clock_min"] = to_string(minutes); + param["clock_sec"] = to_string(seconds); + ws->send_command("update " + serialize_as_json(param)); + ui->score_1_box->setValue(score1); + ui->score_2_box->setValue(score2); + set_score_clicked(); + } + if (port == 6002) { + ws->send_command("eval adjustclockfromstate(2)"); + if (clock_running) { + ws->send_command("eval startclock(2)"); + } else { + ws->send_command("eval stopclock(2)"); + } + } else if (port == 6001) { + ws->send_command("eval adjustclockfromstate(1)"); + if (clock_running) { + ws->send_command("eval startclock(1)"); + } else { + ws->send_command("eval stopclock(1)"); + } + } else { + ws->send_command("eval adjustclockfromstate(0)"); + if (clock_running) { + ws->send_command("eval startclock(0)"); + } else { + ws->send_command("eval stopclock(0)"); + } + } + } // Ignore type 3 (penalties) and type 4 (timeouts). }