diff --git a/include/courtroom.h b/include/courtroom.h index a8942efe2..f8d10e00b 100644 --- a/include/courtroom.h +++ b/include/courtroom.h @@ -229,6 +229,9 @@ class Courtroom : public QMainWindow { void list_music(); void list_areas(); + // player list build function + void set_player_list(QStringList players); + // Debug log (formerly master server chat log) void debug_message_handler(QtMsgType type, const QMessageLogContext &context, const QString &msg); @@ -769,6 +772,7 @@ class Courtroom : public QMainWindow { QListWidget *ui_mute_list; QTreeWidget *ui_area_list; QTreeWidget *ui_music_list; + QTreeWidget *ui_player_list; ScrollText *ui_music_name; InterfaceLayer *ui_music_display; diff --git a/src/courtroom.cpp b/src/courtroom.cpp index a09b5dbc4..7425e54eb 100644 --- a/src/courtroom.cpp +++ b/src/courtroom.cpp @@ -193,6 +193,15 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow() ui_music_list->setUniformRowHeights(true); ui_music_list->setObjectName("ui_music_list"); + ui_player_list = new QTreeWidget(this); + ui_player_list->setColumnCount(1); + ui_player_list->setHeaderHidden(true); + ui_player_list->header()->setStretchLastSection(false); + ui_player_list->header()->setSectionResizeMode(QHeaderView::ResizeToContents); + ui_player_list->setContextMenuPolicy(Qt::CustomContextMenu); + ui_player_list->setUniformRowHeights(true); + ui_player_list->setObjectName("ui_player_list"); + ui_music_display = new InterfaceLayer(this, ao_app); ui_music_display->set_play_once(false); ui_music_display->set_cull_image(false); @@ -1133,6 +1142,9 @@ void Courtroom::set_widgets() else ui_music_list->setIndentation(music_list_indentation.toInt()); + set_size_and_pos(ui_player_list, "player_list"); + ui_player_list->header()->setMinimumSectionSize(ui_player_list->width()); + QString music_list_animated = ao_app->get_design_element("music_list_animated", "courtroom_design.ini"); ui_music_list->setAnimated(music_list_animated == "1" || music_list_animated.startsWith("true")); @@ -1479,6 +1491,7 @@ void Courtroom::set_fonts(QString p_char) set_font(ui_debug_log, "", "debug_log", p_char); set_font(ui_server_chatlog, "", "server_chatlog", p_char); set_font(ui_music_list, "", "music_list", p_char); + set_font(ui_player_list, "", "player_list", p_char); set_font(ui_area_list, "", "area_list", p_char); set_font(ui_music_name, "", "music_name", p_char); @@ -2096,6 +2109,27 @@ void Courtroom::list_areas() } } +void Courtroom::set_player_list(QStringList players) +{ + ui_player_list->clear(); + QBrush player_list_brush(ao_app->get_color("player_list_color", "courtroom_design.ini")); + int player_index = 0; + for (QString &player : players) { + QString player_char_name = "" + if (player.split('"').size() > 1) { + player_char_name = player.split('"')[1]; + } + QTreeWidgetItem *treeItem = ui_player_list->topLevelItem(player_index); + if (treeItem == nullptr) { + treeItem = new QTreeWidgetItem(ui_player_list); + } + treeItem->setText(1, player); + treeItem->setIcon(1, QIcon(ao_app->get_image_suffix(ao_app->get_character_path(player_char_name, "char_icon")))); + treeItem->setBackground(1, player_list_brush); + ++player_index; + } +} + void Courtroom::debug_message_handler(QtMsgType type, const QMessageLogContext &context, const QString &msg) { diff --git a/src/packet_distribution.cpp b/src/packet_distribution.cpp index 2e6c63bc2..5939096b6 100644 --- a/src/packet_distribution.cpp +++ b/src/packet_distribution.cpp @@ -709,6 +709,11 @@ void AOApplication::server_packet_received(AOPacket *p_packet) w_courtroom->format_clock(id, time_format, timer_value); } } + else if (header == "PL") { + if (courtroom_constructed && f_contents.size() > 0) { + w_courtroom->set_player_list(f_contents); + } + } else if (header == "CHECK") { if (!courtroom_constructed) goto end;