Skip to content

Commit 0c10f03

Browse files
authored
[Feature] Add support for custom playerlist formatting, show all users when authenticated (#1046)
* Playerlist QoL * Remove excessive whitespaces * Add placeholder when displayname is unavailable
1 parent 851b8c6 commit 0c10f03

8 files changed

Lines changed: 83 additions & 45 deletions

File tree

data/ui/options_dialog.ui

Lines changed: 47 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
</rect>
1212
</property>
1313
<property name="contextMenuPolicy">
14-
<enum>Qt::NoContextMenu</enum>
14+
<enum>Qt::ContextMenuPolicy::NoContextMenu</enum>
1515
</property>
1616
<property name="windowTitle">
1717
<string>Settings</string>
@@ -20,7 +20,7 @@
2020
<item>
2121
<widget class="QTabWidget" name="settings_tabs">
2222
<property name="focusPolicy">
23-
<enum>Qt::NoFocus</enum>
23+
<enum>Qt::FocusPolicy::NoFocus</enum>
2424
</property>
2525
<property name="currentIndex">
2626
<number>0</number>
@@ -39,9 +39,9 @@
3939
<property name="geometry">
4040
<rect>
4141
<x>0</x>
42-
<y>-385</y>
42+
<y>-585</y>
4343
<width>394</width>
44-
<height>878</height>
44+
<height>902</height>
4545
</rect>
4646
</property>
4747
<layout class="QFormLayout" name="formLayout">
@@ -131,10 +131,10 @@
131131
<item row="6" column="1">
132132
<widget class="QFrame" name="theme_log_divider">
133133
<property name="frameShape">
134-
<enum>QFrame::HLine</enum>
134+
<enum>QFrame::Shape::HLine</enum>
135135
</property>
136136
<property name="frameShadow">
137-
<enum>QFrame::Sunken</enum>
137+
<enum>QFrame::Shadow::Sunken</enum>
138138
</property>
139139
</widget>
140140
</item>
@@ -198,7 +198,7 @@
198198
<string>Chat Rate Limit:</string>
199199
</property>
200200
<property name="textFormat">
201-
<enum>Qt::AutoText</enum>
201+
<enum>Qt::TextFormat::AutoText</enum>
202202
</property>
203203
</widget>
204204
</item>
@@ -215,10 +215,10 @@
215215
<item row="11" column="1">
216216
<widget class="QFrame" name="log_names_divider">
217217
<property name="frameShape">
218-
<enum>QFrame::HLine</enum>
218+
<enum>QFrame::Shape::HLine</enum>
219219
</property>
220220
<property name="frameShadow">
221-
<enum>QFrame::Sunken</enum>
221+
<enum>QFrame::Shadow::Sunken</enum>
222222
</property>
223223
</widget>
224224
</item>
@@ -272,10 +272,10 @@
272272
<item row="15" column="1">
273273
<widget class="QFrame" name="net_divider">
274274
<property name="frameShape">
275-
<enum>QFrame::HLine</enum>
275+
<enum>QFrame::Shape::HLine</enum>
276276
</property>
277277
<property name="frameShadow">
278-
<enum>QFrame::Sunken</enum>
278+
<enum>QFrame::Shadow::Sunken</enum>
279279
</property>
280280
</widget>
281281
</item>
@@ -560,23 +560,6 @@
560560
</property>
561561
</widget>
562562
</item>
563-
<item row="35" column="1">
564-
<widget class="QCheckBox" name="restoreposition_cb">
565-
<property name="text">
566-
<string/>
567-
</property>
568-
</widget>
569-
</item>
570-
<item row="35" column="0">
571-
<widget class="QLabel" name="restoreposition_lbl">
572-
<property name="toolTip">
573-
<string>If ticked, some windows restore their last known position where they were closed.</string>
574-
</property>
575-
<property name="text">
576-
<string>Restore Window Position</string>
577-
</property>
578-
</widget>
579-
</item>
580563
<item row="19" column="0">
581564
<widget class="QLabel" name="resize_lbl">
582565
<property name="toolTip">
@@ -609,6 +592,33 @@
609592
</item>
610593
</widget>
611594
</item>
595+
<item row="34" column="0">
596+
<widget class="QLabel" name="restoreposition_lbl">
597+
<property name="toolTip">
598+
<string>If ticked, some windows restore their last known position where they were closed.</string>
599+
</property>
600+
<property name="text">
601+
<string>Restore Window Position</string>
602+
</property>
603+
</widget>
604+
</item>
605+
<item row="34" column="1">
606+
<widget class="QCheckBox" name="restoreposition_cb">
607+
<property name="text">
608+
<string/>
609+
</property>
610+
</widget>
611+
</item>
612+
<item row="35" column="0">
613+
<widget class="QLabel" name="playerlist_format_lbl">
614+
<property name="text">
615+
<string>Playerlist Format:</string>
616+
</property>
617+
</widget>
618+
</item>
619+
<item row="35" column="1">
620+
<widget class="QLineEdit" name="playerlist_format_edit"/>
621+
</item>
612622
</layout>
613623
</widget>
614624
</widget>
@@ -653,10 +663,10 @@
653663
<item row="1" column="0" colspan="2">
654664
<widget class="QFrame" name="audio_volume_divider">
655665
<property name="frameShape">
656-
<enum>QFrame::HLine</enum>
666+
<enum>QFrame::Shape::HLine</enum>
657667
</property>
658668
<property name="frameShadow">
659-
<enum>QFrame::Sunken</enum>
669+
<enum>QFrame::Shadow::Sunken</enum>
660670
</property>
661671
</widget>
662672
</item>
@@ -683,10 +693,10 @@
683693
<item row="3" column="0" colspan="2">
684694
<widget class="QFrame" name="volume_blip_divider">
685695
<property name="frameShape">
686-
<enum>QFrame::HLine</enum>
696+
<enum>QFrame::Shape::HLine</enum>
687697
</property>
688698
<property name="frameShadow">
689-
<enum>QFrame::Sunken</enum>
699+
<enum>QFrame::Shadow::Sunken</enum>
690700
</property>
691701
</widget>
692702
</item>
@@ -819,7 +829,7 @@
819829
<item row="2" column="5">
820830
<spacer name="mount_buttons_spacer_2">
821831
<property name="orientation">
822-
<enum>Qt::Horizontal</enum>
832+
<enum>Qt::Orientation::Horizontal</enum>
823833
</property>
824834
<property name="sizeHint" stdset="0">
825835
<size>
@@ -858,10 +868,10 @@
858868
<item row="2" column="2">
859869
<spacer name="mount_buttons_spacer">
860870
<property name="orientation">
861-
<enum>Qt::Horizontal</enum>
871+
<enum>Qt::Orientation::Horizontal</enum>
862872
</property>
863873
<property name="sizeType">
864-
<enum>QSizePolicy::Expanding</enum>
874+
<enum>QSizePolicy::Policy::Expanding</enum>
865875
</property>
866876
<property name="sizeHint" stdset="0">
867877
<size>
@@ -1116,10 +1126,10 @@ Default: 0.</string>
11161126
<item>
11171127
<widget class="QFrame" name="privacy_separator">
11181128
<property name="frameShape">
1119-
<enum>QFrame::HLine</enum>
1129+
<enum>QFrame::Shape::HLine</enum>
11201130
</property>
11211131
<property name="frameShadow">
1122-
<enum>QFrame::Sunken</enum>
1132+
<enum>QFrame::Shadow::Sunken</enum>
11231133
</property>
11241134
</widget>
11251135
</item>

src/aoapplication.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,12 @@ void AOApplication::call_settings_menu()
166166
if (is_lobby_constructed())
167167
{}
168168
l_dialog->exec();
169+
170+
if (is_courtroom_constructed())
171+
{
172+
w_courtroom->playerList()->reloadPlayers();
173+
}
174+
169175
delete l_dialog;
170176
}
171177

src/options.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -638,6 +638,16 @@ void Options::setCallwords(QStringList value)
638638
config.setValue("callwords", value);
639639
}
640640

641+
QString Options::playerlistFormatString() const
642+
{
643+
return config.value("visuals/playerlist_format", "[{id}] {character} {displayname} {username}").toString();
644+
}
645+
646+
void Options::setPlayerlistFormatString(QString value)
647+
{
648+
config.setValue("visuals/playerlist_format", value);
649+
}
650+
641651
void Options::clearConfig()
642652
{
643653
config.clear();

src/options.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,9 @@ class Options
257257
QStringList callwords() const;
258258
void setCallwords(QStringList value);
259259

260+
QString playerlistFormatString() const;
261+
void setPlayerlistFormatString(QString value);
262+
260263
// Clears the configuration file. Essentially restoring it to default.
261264
void clearConfig();
262265

src/widgets/aooptionsdialog.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,6 @@ void AOOptionsDialog::setupUI()
309309
qWarning() << "Unable to open file " << l_uiFile.fileName();
310310
return;
311311
}
312-
313312
ui_settings_widget = l_loader.load(&l_uiFile, this);
314313

315314
auto l_layout = new QVBoxLayout(this);
@@ -372,6 +371,7 @@ void AOOptionsDialog::setupUI()
372371
FROM_UI(QCheckBox, evidence_double_click_cb);
373372
FROM_UI(QCheckBox, slides_cb);
374373
FROM_UI(QCheckBox, restoreposition_cb);
374+
FROM_UI(QLineEdit, playerlist_format_edit);
375375

376376
registerOption<QSpinBox, int>("theme_scaling_factor_sb", &Options::themeScalingFactor, &Options::setThemeScalingFactor);
377377
registerOption<QCheckBox, bool>("animated_theme_cb", &Options::animatedThemeEnabled, &Options::setAnimatedThemeEnabled);
@@ -410,6 +410,7 @@ void AOOptionsDialog::setupUI()
410410
registerOption<QCheckBox, bool>("evidence_double_click_cb", &Options::evidenceDoubleClickEdit, &Options::setEvidenceDoubleClickEdit);
411411
registerOption<QCheckBox, bool>("slides_cb", &Options::slidesEnabled, &Options::setSlidesEnabled);
412412
registerOption<QCheckBox, bool>("restoreposition_cb", &Options::restoreWindowPositionEnabled, &Options::setRestoreWindowPositionEnabled);
413+
registerOption<QLineEdit, QString>("playerlist_format_edit", &Options::playerlistFormatString, &Options::setPlayerlistFormatString);
413414

414415
// Callwords tab. This could just be a QLineEdit, but no, we decided to allow
415416
// people to put a billion entries in.

src/widgets/aooptionsdialog.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ class AOOptionsDialog : public QDialog
4848
QPushButton *ui_theme_folder_button;
4949
QCheckBox *ui_evidence_double_click_cb;
5050
QCheckBox *ui_slides_cb;
51-
QCheckBox *ui_restoreposition_cb;
5251
QCheckBox *ui_animated_theme_cb;
5352
QSpinBox *ui_stay_time_spinbox;
5453
QCheckBox *ui_instant_objection_cb;
@@ -76,6 +75,8 @@ class AOOptionsDialog : public QDialog
7675
QCheckBox *ui_continuous_cb;
7776
QCheckBox *ui_category_stop_cb;
7877
QCheckBox *ui_sfx_on_idle_cb;
78+
QCheckBox *ui_restoreposition_cb;
79+
QLineEdit *ui_playerlist_format_edit;
7980

8081
// The callwords tab
8182
QPlainTextEdit *ui_callwords_textbox;

src/widgets/playerlistwidget.cpp

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,12 +70,21 @@ void PlayerListWidget::updatePlayer(const PlayerUpdate &update)
7070
filterPlayerList();
7171
}
7272

73+
void PlayerListWidget::reloadPlayers()
74+
{
75+
for (const PlayerData &player : qAsConst(m_player_map))
76+
{
77+
updatePlayer(player.id, false);
78+
}
79+
}
80+
7381
void PlayerListWidget::setAuthenticated(bool f_state)
7482
{
7583
m_is_authenticated = f_state;
7684
for (const PlayerData &data : qAsConst(m_player_map))
7785
{
7886
updatePlayer(data.id, false);
87+
filterPlayerList();
7988
}
8089
}
8190

@@ -148,7 +157,7 @@ void PlayerListWidget::filterPlayerList()
148157
qWarning() << "Trying to filter item that does not exist. This indicates either a broken server-implementation or a bad demo file.";
149158
break;
150159
}
151-
item->setHidden(m_player_map[item->data(Qt::UserRole).toInt()].area_id != area_id);
160+
item->setHidden(m_player_map[item->data(Qt::UserRole).toInt()].area_id != area_id && !m_is_authenticated);
152161
}
153162
}
154163

@@ -186,9 +195,6 @@ void PlayerListWidget::updatePlayer(int playerId, bool updateIcon)
186195

187196
QString PlayerListWidget::formatLabel(const PlayerData &data)
188197
{
189-
if (m_is_authenticated)
190-
{
191-
return QString("%1 %2 %3").arg(data.character, data.character_name, data.name).simplified();
192-
}
193-
return QString("%1 %2").arg(data.character, data.character_name).simplified();
198+
QString format = Options::getInstance().playerlistFormatString();
199+
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();
194200
}

src/widgets/playerlistwidget.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ class PlayerListWidget : public QListWidget
1616

1717
void registerPlayer(const PlayerRegister &update);
1818
void updatePlayer(const PlayerUpdate &update);
19+
void reloadPlayers();
1920

2021
void setAuthenticated(bool f_state);
2122

0 commit comments

Comments
 (0)