diff --git a/data/ui/options_dialog.ui b/data/ui/options_dialog.ui index 882092e..0441867 100644 --- a/data/ui/options_dialog.ui +++ b/data/ui/options_dialog.ui @@ -11,7 +11,7 @@ - Qt::NoContextMenu + Qt::ContextMenuPolicy::NoContextMenu Settings @@ -20,7 +20,7 @@ - Qt::NoFocus + Qt::FocusPolicy::NoFocus 0 @@ -39,9 +39,9 @@ 0 - -385 + -585 394 - 878 + 902 @@ -131,10 +131,10 @@ - QFrame::HLine + QFrame::Shape::HLine - QFrame::Sunken + QFrame::Shadow::Sunken @@ -198,7 +198,7 @@ Chat Rate Limit: - Qt::AutoText + Qt::TextFormat::AutoText @@ -215,10 +215,10 @@ - QFrame::HLine + QFrame::Shape::HLine - QFrame::Sunken + QFrame::Shadow::Sunken @@ -272,10 +272,10 @@ - QFrame::HLine + QFrame::Shape::HLine - QFrame::Sunken + QFrame::Shadow::Sunken @@ -560,23 +560,6 @@ - - - - - - - - - - - If ticked, some windows restore their last known position where they were closed. - - - Restore Window Position - - - @@ -609,6 +592,33 @@ + + + + If ticked, some windows restore their last known position where they were closed. + + + Restore Window Position + + + + + + + + + + + + + + Playerlist Format: + + + + + + @@ -653,10 +663,10 @@ - QFrame::HLine + QFrame::Shape::HLine - QFrame::Sunken + QFrame::Shadow::Sunken @@ -683,10 +693,10 @@ - QFrame::HLine + QFrame::Shape::HLine - QFrame::Sunken + QFrame::Shadow::Sunken @@ -819,7 +829,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -858,10 +868,10 @@ - Qt::Horizontal + Qt::Orientation::Horizontal - QSizePolicy::Expanding + QSizePolicy::Policy::Expanding @@ -1116,10 +1126,10 @@ Default: 0. - QFrame::HLine + QFrame::Shape::HLine - QFrame::Sunken + QFrame::Shadow::Sunken diff --git a/src/aoapplication.cpp b/src/aoapplication.cpp index 2547008..696d35d 100644 --- a/src/aoapplication.cpp +++ b/src/aoapplication.cpp @@ -166,6 +166,12 @@ void AOApplication::call_settings_menu() if (is_lobby_constructed()) {} l_dialog->exec(); + + if (is_courtroom_constructed()) + { + w_courtroom->playerList()->reloadPlayers(); + } + delete l_dialog; } diff --git a/src/options.cpp b/src/options.cpp index 5c53a5d..a865146 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -638,6 +638,16 @@ void Options::setCallwords(QStringList value) config.setValue("callwords", value); } +QString Options::playerlistFormatString() const +{ + return config.value("visuals/playerlist_format", "[{id}] {character} {displayname} {username}").toString(); +} + +void Options::setPlayerlistFormatString(QString value) +{ + config.setValue("visuals/playerlist_format", value); +} + void Options::clearConfig() { config.clear(); diff --git a/src/options.h b/src/options.h index f96f994..58b0225 100644 --- a/src/options.h +++ b/src/options.h @@ -257,6 +257,9 @@ public: QStringList callwords() const; void setCallwords(QStringList value); + QString playerlistFormatString() const; + void setPlayerlistFormatString(QString value); + // Clears the configuration file. Essentially restoring it to default. void clearConfig(); diff --git a/src/widgets/aooptionsdialog.cpp b/src/widgets/aooptionsdialog.cpp index 2c7b4e2..4ff9dc1 100644 --- a/src/widgets/aooptionsdialog.cpp +++ b/src/widgets/aooptionsdialog.cpp @@ -309,7 +309,6 @@ void AOOptionsDialog::setupUI() qWarning() << "Unable to open file " << l_uiFile.fileName(); return; } - ui_settings_widget = l_loader.load(&l_uiFile, this); auto l_layout = new QVBoxLayout(this); @@ -372,6 +371,7 @@ void AOOptionsDialog::setupUI() FROM_UI(QCheckBox, evidence_double_click_cb); FROM_UI(QCheckBox, slides_cb); FROM_UI(QCheckBox, restoreposition_cb); + FROM_UI(QLineEdit, playerlist_format_edit); registerOption("theme_scaling_factor_sb", &Options::themeScalingFactor, &Options::setThemeScalingFactor); registerOption("animated_theme_cb", &Options::animatedThemeEnabled, &Options::setAnimatedThemeEnabled); @@ -410,6 +410,7 @@ void AOOptionsDialog::setupUI() registerOption("evidence_double_click_cb", &Options::evidenceDoubleClickEdit, &Options::setEvidenceDoubleClickEdit); registerOption("slides_cb", &Options::slidesEnabled, &Options::setSlidesEnabled); registerOption("restoreposition_cb", &Options::restoreWindowPositionEnabled, &Options::setRestoreWindowPositionEnabled); + registerOption("playerlist_format_edit", &Options::playerlistFormatString, &Options::setPlayerlistFormatString); // Callwords tab. This could just be a QLineEdit, but no, we decided to allow // people to put a billion entries in. diff --git a/src/widgets/aooptionsdialog.h b/src/widgets/aooptionsdialog.h index 20c95a3..4409c9e 100644 --- a/src/widgets/aooptionsdialog.h +++ b/src/widgets/aooptionsdialog.h @@ -48,7 +48,6 @@ private: QPushButton *ui_theme_folder_button; QCheckBox *ui_evidence_double_click_cb; QCheckBox *ui_slides_cb; - QCheckBox *ui_restoreposition_cb; QCheckBox *ui_animated_theme_cb; QSpinBox *ui_stay_time_spinbox; QCheckBox *ui_instant_objection_cb; @@ -76,6 +75,8 @@ private: QCheckBox *ui_continuous_cb; QCheckBox *ui_category_stop_cb; QCheckBox *ui_sfx_on_idle_cb; + QCheckBox *ui_restoreposition_cb; + QLineEdit *ui_playerlist_format_edit; // The callwords tab QPlainTextEdit *ui_callwords_textbox; diff --git a/src/widgets/playerlistwidget.cpp b/src/widgets/playerlistwidget.cpp index 1dabe15..7691378 100644 --- a/src/widgets/playerlistwidget.cpp +++ b/src/widgets/playerlistwidget.cpp @@ -70,12 +70,21 @@ void PlayerListWidget::updatePlayer(const PlayerUpdate &update) filterPlayerList(); } +void PlayerListWidget::reloadPlayers() +{ + for (const PlayerData &player : qAsConst(m_player_map)) + { + updatePlayer(player.id, false); + } +} + void PlayerListWidget::setAuthenticated(bool f_state) { m_is_authenticated = f_state; for (const PlayerData &data : qAsConst(m_player_map)) { updatePlayer(data.id, false); + filterPlayerList(); } } @@ -148,7 +157,7 @@ void PlayerListWidget::filterPlayerList() qWarning() << "Trying to filter item that does not exist. This indicates either a broken server-implementation or a bad demo file."; break; } - item->setHidden(m_player_map[item->data(Qt::UserRole).toInt()].area_id != area_id); + item->setHidden(m_player_map[item->data(Qt::UserRole).toInt()].area_id != area_id && !m_is_authenticated); } } @@ -186,9 +195,6 @@ void PlayerListWidget::updatePlayer(int playerId, bool updateIcon) QString PlayerListWidget::formatLabel(const PlayerData &data) { - if (m_is_authenticated) - { - return QString("%1 %2 %3").arg(data.character, data.character_name, data.name).simplified(); - } - return QString("%1 %2").arg(data.character, data.character_name).simplified(); + QString format = Options::getInstance().playerlistFormatString(); + return format.replace("{id}", QString::number(data.id)).replace("{character}", data.character).replace("{displayname}", data.character_name.isEmpty() ? "No Data" : data.character_name).replace("{username}", m_is_authenticated ? data.name : "").simplified(); } diff --git a/src/widgets/playerlistwidget.h b/src/widgets/playerlistwidget.h index 217c9f9..7886e28 100644 --- a/src/widgets/playerlistwidget.h +++ b/src/widgets/playerlistwidget.h @@ -16,6 +16,7 @@ public: void registerPlayer(const PlayerRegister &update); void updatePlayer(const PlayerUpdate &update); + void reloadPlayers(); void setAuthenticated(bool f_state);