Add a search bar for server list

Add options for sticky sounds, sticky effects and sticky preanims
Optimize the search for areas and music (previously, area search also searched for music in the background, causing lag with huge music lists)
This commit is contained in:
Crystalwarrior 2020-03-12 18:09:56 +03:00
parent ce3269cc36
commit 7aa24bf501
8 changed files with 204 additions and 51 deletions

View File

@ -188,6 +188,18 @@ public:
// from the config.ini. // from the config.ini.
bool is_colorlog_enabled(); bool is_colorlog_enabled();
// Returns the value of whether sticky sounds should be a thing.
// from the config.ini.
bool is_stickysounds_enabled();
// Returns the value of whether sticky effects should be a thing.
// from the config.ini.
bool is_stickyeffects_enabled();
// Returns the value of whether sticky preanims should be a thing.
// from the config.ini.
bool is_stickypres_enabled();
// Returns the value of the maximum amount of lines the IC chatlog // Returns the value of the maximum amount of lines the IC chatlog
// may contain, from config.ini. // may contain, from config.ini.
int get_max_log_size(); int get_max_log_size();

View File

@ -75,6 +75,15 @@ private:
QLabel *ui_colorlog_lbl; QLabel *ui_colorlog_lbl;
QCheckBox *ui_colorlog_cb; QCheckBox *ui_colorlog_cb;
QLabel *ui_stickysounds_lbl;
QCheckBox *ui_stickysounds_cb;
QLabel *ui_stickyeffects_lbl;
QCheckBox *ui_stickyeffects_cb;
QLabel *ui_stickypres_lbl;
QCheckBox *ui_stickypres_cb;
QWidget *ui_callwords_tab; QWidget *ui_callwords_tab;
QWidget *ui_callwords_widget; QWidget *ui_callwords_widget;
QVBoxLayout *ui_callwords_layout; QVBoxLayout *ui_callwords_layout;

View File

@ -66,6 +66,7 @@ private:
AOButton *ui_about; AOButton *ui_about;
QTreeWidget *ui_server_list; QTreeWidget *ui_server_list;
QLineEdit *ui_server_search;
QLabel *ui_player_count; QLabel *ui_player_count;
AOTextArea *ui_description; AOTextArea *ui_description;
@ -97,6 +98,7 @@ private slots:
void on_about_clicked(); void on_about_clicked();
void on_server_list_clicked(QTreeWidgetItem* p_item, int column); void on_server_list_clicked(QTreeWidgetItem* p_item, int column);
void on_server_list_doubleclicked(QTreeWidgetItem* p_item, int column); void on_server_list_doubleclicked(QTreeWidgetItem* p_item, int column);
void on_server_search_edited(QString p_text);
void on_chatfield_return_pressed(); void on_chatfield_return_pressed();
}; };

View File

@ -12,7 +12,7 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app) : QDi
ui_settings_buttons = new QDialogButtonBox(this); ui_settings_buttons = new QDialogButtonBox(this);
QSizePolicy sizePolicy1(QSizePolicy::Expanding, QSizePolicy::MinimumExpanding); QSizePolicy sizePolicy1(QSizePolicy::Minimum, QSizePolicy::MinimumExpanding);
sizePolicy1.setHorizontalStretch(0); sizePolicy1.setHorizontalStretch(0);
sizePolicy1.setVerticalStretch(0); sizePolicy1.setVerticalStretch(0);
sizePolicy1.setHeightForWidth(ui_settings_buttons->sizePolicy().hasHeightForWidth()); sizePolicy1.setHeightForWidth(ui_settings_buttons->sizePolicy().hasHeightForWidth());
@ -39,7 +39,7 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app) : QDi
ui_gameplay_tab->setSizePolicy(sizePolicy1); ui_gameplay_tab->setSizePolicy(sizePolicy1);
ui_settings_tabs->addTab(ui_gameplay_tab, tr("Gameplay")); ui_settings_tabs->addTab(ui_gameplay_tab, tr("Gameplay"));
ui_form_layout_widget = new QWidget(ui_gameplay_tab); ui_form_layout_widget = new QWidget(ui_gameplay_tab);
ui_form_layout_widget->setGeometry(QRect(10, 10, 361, 211)); ui_form_layout_widget->setGeometry(QRect(10, 10, 361, 361));
ui_form_layout_widget->setSizePolicy(sizePolicy1); ui_form_layout_widget->setSizePolicy(sizePolicy1);
ui_gameplay_form = new QFormLayout(ui_form_layout_widget); ui_gameplay_form = new QFormLayout(ui_form_layout_widget);
@ -242,6 +242,42 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app) : QDi
ui_gameplay_form->setWidget(row, QFormLayout::FieldRole, ui_colorlog_cb); ui_gameplay_form->setWidget(row, QFormLayout::FieldRole, ui_colorlog_cb);
row += 1;
ui_stickysounds_lbl = new QLabel(ui_form_layout_widget);
ui_stickysounds_lbl->setText(tr("Sticky Sounds:"));
ui_stickysounds_lbl->setToolTip(tr("Turn this on to prevent the sound dropdown from clearing the sound after playing it."));
ui_gameplay_form->setWidget(row, QFormLayout::LabelRole, ui_stickysounds_lbl);
ui_stickysounds_cb = new QCheckBox(ui_form_layout_widget);
ui_stickysounds_cb->setChecked(ao_app->is_stickysounds_enabled());
ui_gameplay_form->setWidget(row, QFormLayout::FieldRole, ui_stickysounds_cb);
row += 1;
ui_stickyeffects_lbl = new QLabel(ui_form_layout_widget);
ui_stickyeffects_lbl->setText(tr("Sticky Effects:"));
ui_stickyeffects_lbl->setToolTip(tr("Turn this on to prevent the effects dropdown from clearing the effect after playing it."));
ui_gameplay_form->setWidget(row, QFormLayout::LabelRole, ui_stickyeffects_lbl);
ui_stickyeffects_cb = new QCheckBox(ui_form_layout_widget);
ui_stickyeffects_cb->setChecked(ao_app->is_stickyeffects_enabled());
ui_gameplay_form->setWidget(row, QFormLayout::FieldRole, ui_stickyeffects_cb);
row += 1;
ui_stickypres_lbl = new QLabel(ui_form_layout_widget);
ui_stickypres_lbl->setText(tr("Sticky Preanims:"));
ui_stickypres_lbl->setToolTip(tr("Turn this on to prevent preanimation checkbox from clearing after playing the emote."));
ui_gameplay_form->setWidget(row, QFormLayout::LabelRole, ui_stickypres_lbl);
ui_stickypres_cb = new QCheckBox(ui_form_layout_widget);
ui_stickypres_cb->setChecked(ao_app->is_stickypres_enabled());
ui_gameplay_form->setWidget(row, QFormLayout::FieldRole, ui_stickypres_cb);
QScrollArea *scroll = new QScrollArea; QScrollArea *scroll = new QScrollArea;
scroll->setWidget(ui_form_layout_widget); scroll->setWidget(ui_form_layout_widget);
ui_gameplay_tab->setLayout(new QVBoxLayout); ui_gameplay_tab->setLayout(new QVBoxLayout);
@ -599,6 +635,9 @@ void AOOptionsDialog::save_pressed()
configini->setValue("effects", ui_effects_cb->isChecked()); configini->setValue("effects", ui_effects_cb->isChecked());
configini->setValue("framenetwork", ui_framenetwork_cb->isChecked()); configini->setValue("framenetwork", ui_framenetwork_cb->isChecked());
configini->setValue("colorlog", ui_colorlog_cb->isChecked()); configini->setValue("colorlog", ui_colorlog_cb->isChecked());
configini->setValue("stickysounds", ui_stickysounds_cb->isChecked());
configini->setValue("stickyeffects", ui_stickyeffects_cb->isChecked());
configini->setValue("stickypres", ui_stickypres_cb->isChecked());
QFile* callwordsini = new QFile(ao_app->get_base_path() + "callwords.ini"); QFile* callwordsini = new QFile(ao_app->get_base_path() + "callwords.ini");

View File

@ -1214,6 +1214,7 @@ void Courtroom::enter_courtroom()
void Courtroom::list_music() void Courtroom::list_music()
{ {
ui_music_list->clear(); ui_music_list->clear();
ui_music_search->setText("");
QString f_file = "courtroom_design.ini"; QString f_file = "courtroom_design.ini";
@ -1256,6 +1257,7 @@ void Courtroom::list_music()
void Courtroom::list_areas() void Courtroom::list_areas()
{ {
ui_area_list->clear(); ui_area_list->clear();
ui_music_search->setText("");
QString f_file = "courtroom_design.ini"; QString f_file = "courtroom_design.ini";
@ -1292,41 +1294,38 @@ void Courtroom::list_areas()
i_area.append(arup_locks.at(n_area)); i_area.append(arup_locks.at(n_area));
} }
if (i_area.toLower().contains(ui_music_search->text().toLower())) QTreeWidgetItem *treeItem = new QTreeWidgetItem(ui_area_list);
{ treeItem->setText(0, area_list.at(n_area));
QTreeWidgetItem *treeItem = new QTreeWidgetItem(ui_area_list); treeItem->setText(1, i_area);
treeItem->setText(0, area_list.at(n_area));
treeItem->setText(1, i_area);
if (ao_app->arup_enabled) if (ao_app->arup_enabled)
{
// Coloring logic here.
treeItem->setBackground(0, free_brush);
if (arup_locks.at(n_area) == "LOCKED")
{ {
// Coloring logic here. treeItem->setBackground(1, locked_brush);
treeItem->setBackground(0, free_brush);
if (arup_locks.at(n_area) == "LOCKED")
{
treeItem->setBackground(1, locked_brush);
}
else
{
if (arup_statuses.at(n_area) == "LOOKING-FOR-PLAYERS")
treeItem->setBackground(1, lfp_brush);
else if (arup_statuses.at(n_area) == "CASING")
treeItem->setBackground(1, casing_brush);
else if (arup_statuses.at(n_area) == "RECESS")
treeItem->setBackground(1, recess_brush);
else if (arup_statuses.at(n_area) == "RP")
treeItem->setBackground(1, rp_brush);
else if (arup_statuses.at(n_area) == "GAMING")
treeItem->setBackground(1, gaming_brush);
}
} }
else else
{ {
treeItem->setBackground(1, free_brush); if (arup_statuses.at(n_area) == "LOOKING-FOR-PLAYERS")
treeItem->setBackground(1, lfp_brush);
else if (arup_statuses.at(n_area) == "CASING")
treeItem->setBackground(1, casing_brush);
else if (arup_statuses.at(n_area) == "RECESS")
treeItem->setBackground(1, recess_brush);
else if (arup_statuses.at(n_area) == "RP")
treeItem->setBackground(1, rp_brush);
else if (arup_statuses.at(n_area) == "GAMING")
treeItem->setBackground(1, gaming_brush);
} }
++n_listed_areas;
} }
else
{
treeItem->setBackground(1, free_brush);
}
++n_listed_areas;
} }
} }
@ -1412,6 +1411,13 @@ void Courtroom::on_chat_return_pressed()
packet_contents.append(current_side); packet_contents.append(current_side);
packet_contents.append(get_char_sfx()); packet_contents.append(get_char_sfx());
if (ui_pre->isChecked() && !ao_app->is_stickysounds_enabled())
{
ui_sfx_dropdown->blockSignals(true);
ui_sfx_dropdown->setCurrentIndex(0);
ui_sfx_dropdown->blockSignals(false);
ui_sfx_remove->hide();
}
int f_emote_mod = ao_app->get_emote_mod(current_char, current_emote); int f_emote_mod = ao_app->get_emote_mod(current_char, current_emote);
@ -1568,10 +1574,13 @@ void Courtroom::on_chat_return_pressed()
QString fx_sound = ao_app->get_effect_sound(effect, current_char); QString fx_sound = ao_app->get_effect_sound(effect, current_char);
QString p_effect = ao_app->read_char_ini(current_char, "effects", "Options"); QString p_effect = ao_app->read_char_ini(current_char, "effects", "Options");
packet_contents.append(effect + "|" + p_effect + "|" + fx_sound); packet_contents.append(effect + "|" + p_effect + "|" + fx_sound);
ui_effects_dropdown->blockSignals(true); if (!ao_app->is_stickyeffects_enabled())
ui_effects_dropdown->setCurrentIndex(0); {
ui_effects_dropdown->blockSignals(false); ui_effects_dropdown->blockSignals(true);
effect = ""; ui_effects_dropdown->setCurrentIndex(0);
ui_effects_dropdown->blockSignals(false);
effect = "";
}
} }
ao_app->send_server_packet(new AOPacket("MS", packet_contents)); ao_app->send_server_packet(new AOPacket("MS", packet_contents));
@ -1658,7 +1667,8 @@ void Courtroom::handle_chatmessage(QStringList *p_contents)
realization_state = 0; realization_state = 0;
screenshake_state = 0; screenshake_state = 0;
is_presenting_evidence = false; is_presenting_evidence = false;
ui_pre->setChecked(false); if (!ao_app->is_stickypres_enabled())
ui_pre->setChecked(false);
ui_hold_it->set_image("holdit"); ui_hold_it->set_image("holdit");
ui_objection->set_image("objection"); ui_objection->set_image("objection");
ui_take_that->set_image("takethat"); ui_take_that->set_image("takethat");
@ -3327,25 +3337,52 @@ void Courtroom::on_ooc_toggle_clicked()
void Courtroom::on_music_search_edited(QString p_text) void Courtroom::on_music_search_edited(QString p_text)
{ {
// Iterate through all QTreeWidgetItem items // Iterate through all QTreeWidgetItem items
QTreeWidgetItemIterator it(ui_music_list); if (!ui_music_list->isHidden())
while (*it)
{ {
(*it)->setHidden(p_text != ""); QTreeWidgetItemIterator it(ui_music_list);
++it; while (*it)
{
(*it)->setHidden(p_text != "");
++it;
}
}
if (!ui_area_list->isHidden())
{
QTreeWidgetItemIterator ait(ui_area_list);
while (*ait)
{
(*ait)->setHidden(p_text != "");
++ait;
}
} }
if (p_text != "") if (p_text != "")
{ {
//Search in metadata if (!ui_music_list->isHidden())
QList<QTreeWidgetItem*> clist = ui_music_list->findItems(ui_music_search->text(), Qt::MatchContains|Qt::MatchRecursive, 1);
foreach(QTreeWidgetItem* item, clist)
{ {
if (item->parent() != nullptr) //So the category shows up too //Search in metadata
item->parent()->setHidden(false); QList<QTreeWidgetItem*> clist = ui_music_list->findItems(ui_music_search->text(), Qt::MatchContains|Qt::MatchRecursive, 1);
item->setHidden(false); foreach(QTreeWidgetItem* item, clist)
{
if (item->parent() != nullptr) //So the category shows up too
item->parent()->setHidden(false);
item->setHidden(false);
}
}
if (!ui_area_list->isHidden())
{
//Search in metadata
QList<QTreeWidgetItem*> alist = ui_area_list->findItems(ui_music_search->text(), Qt::MatchContains|Qt::MatchRecursive, 1);
foreach(QTreeWidgetItem* item, alist)
{
if (item->parent() != nullptr) //So the category shows up too
item->parent()->setHidden(false);
item->setHidden(false);
}
} }
} }
list_areas();
} }
void Courtroom::on_pos_dropdown_changed(int p_index) void Courtroom::on_pos_dropdown_changed(int p_index)

View File

@ -159,10 +159,13 @@ void Courtroom::select_emote(int p_id)
{ {
ui_pre->setChecked(!ui_pre->isChecked()); ui_pre->setChecked(!ui_pre->isChecked());
} }
else if (emote_mod == 1 || emote_mod == 4) else if (!ao_app->is_stickypres_enabled())
ui_pre->setChecked(true); {
else if (emote_mod == 1 || emote_mod == 4)
ui_pre->setChecked(false); ui_pre->setChecked(true);
else
ui_pre->setChecked(false);
}
ui_emote_dropdown->setCurrentIndex(current_emote); ui_emote_dropdown->setCurrentIndex(current_emote);

View File

@ -25,6 +25,10 @@ Lobby::Lobby(AOApplication *p_ao_app) : QMainWindow()
ui_server_list->setHeaderLabels({"#", "Name"});//, "Players"}); ui_server_list->setHeaderLabels({"#", "Name"});//, "Players"});
ui_server_list->hideColumn(0); ui_server_list->hideColumn(0);
ui_server_search = new QLineEdit(this);
ui_server_search->setFrame(false);
ui_server_search->setPlaceholderText(tr("Search"));
ui_player_count = new QLabel(this); ui_player_count = new QLabel(this);
ui_description = new AOTextArea(this); ui_description = new AOTextArea(this);
ui_description->setOpenExternalLinks(true); ui_description->setOpenExternalLinks(true);
@ -53,6 +57,7 @@ Lobby::Lobby(AOApplication *p_ao_app) : QMainWindow()
connect(ui_about, SIGNAL(clicked()), this, SLOT(on_about_clicked())); connect(ui_about, SIGNAL(clicked()), this, SLOT(on_about_clicked()));
connect(ui_server_list, SIGNAL(itemClicked(QTreeWidgetItem*, int)), this, SLOT(on_server_list_clicked(QTreeWidgetItem*, int))); connect(ui_server_list, SIGNAL(itemClicked(QTreeWidgetItem*, int)), this, SLOT(on_server_list_clicked(QTreeWidgetItem*, int)));
connect(ui_server_list, SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)), this, SLOT(on_server_list_doubleclicked(QTreeWidgetItem*, int))); connect(ui_server_list, SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)), this, SLOT(on_server_list_doubleclicked(QTreeWidgetItem*, int)));
connect(ui_server_search, SIGNAL(textChanged(QString)), this, SLOT(on_server_search_edited(QString)));
connect(ui_chatmessage, SIGNAL(returnPressed()), this, SLOT(on_chatfield_return_pressed())); connect(ui_chatmessage, SIGNAL(returnPressed()), this, SLOT(on_chatfield_return_pressed()));
connect(ui_cancel, SIGNAL(clicked()), ao_app, SLOT(loading_cancelled())); connect(ui_cancel, SIGNAL(clicked()), ao_app, SLOT(loading_cancelled()));
@ -116,6 +121,9 @@ void Lobby::set_widgets()
ui_server_list->setStyleSheet("background-color: rgba(0, 0, 0, 0);" ui_server_list->setStyleSheet("background-color: rgba(0, 0, 0, 0);"
"font: bold;"); "font: bold;");
set_size_and_pos(ui_server_search, "server_search");
ui_server_search->setStyleSheet("background-color: rgba(0, 0, 0, 0);");
set_size_and_pos(ui_player_count, "player_count"); set_size_and_pos(ui_player_count, "player_count");
ui_player_count->setText(tr("Offline")); ui_player_count->setText(tr("Offline"));
ui_player_count->setStyleSheet("font: bold;" ui_player_count->setStyleSheet("font: bold;"
@ -409,6 +417,30 @@ void Lobby::on_server_list_doubleclicked(QTreeWidgetItem* p_item, int column)
on_connect_released(); on_connect_released();
} }
void Lobby::on_server_search_edited(QString p_text)
{
// Iterate through all QTreeWidgetItem items
QTreeWidgetItemIterator it(ui_server_list);
while (*it)
{
(*it)->setHidden(p_text != "");
++it;
}
if (p_text != "")
{
//Search in metadata
QList<QTreeWidgetItem*> clist = ui_server_list->findItems(ui_server_search->text(), Qt::MatchContains|Qt::MatchRecursive, 1);
foreach(QTreeWidgetItem* item, clist)
{
if (item->parent() != nullptr) //So the category shows up too
item->parent()->setHidden(false);
item->setHidden(false);
}
}
}
void Lobby::on_chatfield_return_pressed() void Lobby::on_chatfield_return_pressed()
{ {
//no you can't send empty messages //no you can't send empty messages
@ -435,13 +467,14 @@ void Lobby::list_servers()
ui_server_list->setSortingEnabled(false); ui_server_list->setSortingEnabled(false);
ui_server_list->clear(); ui_server_list->clear();
ui_server_search->setText("");
int i = 0; int i = 0;
for (server_type i_server : ao_app->get_server_list()) for (server_type i_server : ao_app->get_server_list())
{ {
QTreeWidgetItem *treeItem = new QTreeWidgetItem(ui_server_list); QTreeWidgetItem *treeItem = new QTreeWidgetItem(ui_server_list);
treeItem->setText(0, QString::number(i)); treeItem->setText(0, QString::number(i));
treeItem->setText(1, i_server.name); treeItem->setText(1, i_server.name);
// treeItem->setText(2, "-");
i++; i++;
} }
ui_server_list->setSortingEnabled(true); ui_server_list->setSortingEnabled(true);

View File

@ -987,6 +987,24 @@ bool AOApplication::is_colorlog_enabled()
return result.startsWith("true"); return result.startsWith("true");
} }
bool AOApplication::is_stickysounds_enabled()
{
QString result = configini->value("stickysounds", "false").value<QString>();
return result.startsWith("true");
}
bool AOApplication::is_stickyeffects_enabled()
{
QString result = configini->value("stickyeffects", "false").value<QString>();
return result.startsWith("true");
}
bool AOApplication::is_stickypres_enabled()
{
QString result = configini->value("stickypres", "false").value<QString>();
return result.startsWith("true");
}
bool AOApplication::get_casing_enabled() bool AOApplication::get_casing_enabled()
{ {
QString result = configini->value("casing_enabled", "false").value<QString>(); QString result = configini->value("casing_enabled", "false").value<QString>();