Add settings option for Evidence double-click that can be turned off (single-click evidence view) and more (#749)
* Add 'evidence_one_click_view' courtroom_design.ini function, which allows you to treat every click as if it's a double-click (meaning every click will bring evidence overlay) Fix name not being set to read only when evidence is initialized If evidence is double-clicked and overlay is visible, trigger "on_x_clicked" behavior Make sure evidence is selected when double-click is called Stop hovering from changing name text if overlay is visible Simplify on_evidence_x_clicked "modified" check by simply checking if "ui_evidence_ok" is visible * Fix pressing "cancel" when trying to switch between evidence still acting the same as "discard" * Remove unnecessary ic message input focus setters for evidence, make only the Present button set focus on ic message input * Fix second page ignoring the evidence_one_click_view setting because of a wrong ID being used for the double-click call * Make evidence_switch() have everything required to properly switch between private/global * Make evidence cursor start at the top when looking at evidence description * Change it from theme setting to settings option * Make evidence double click default option to "true" due to it being the default for years Co-authored-by: Salanto <62221668+Salanto@users.noreply.github.com>
This commit is contained in:
parent
7301e62c73
commit
3c3002122e
@ -538,6 +538,9 @@ public:
|
|||||||
// Get whether to opt out of player count metrics sent to the master server
|
// Get whether to opt out of player count metrics sent to the master server
|
||||||
bool get_player_count_optout();
|
bool get_player_count_optout();
|
||||||
|
|
||||||
|
// Whether opening evidence requires a single or double click
|
||||||
|
bool get_evidence_double_click();
|
||||||
|
|
||||||
// Currently defined subtheme
|
// Currently defined subtheme
|
||||||
QString subtheme;
|
QString subtheme;
|
||||||
|
|
||||||
|
@ -51,6 +51,8 @@ private:
|
|||||||
QLabel *ui_subtheme_label;
|
QLabel *ui_subtheme_label;
|
||||||
QComboBox *ui_subtheme_combobox;
|
QComboBox *ui_subtheme_combobox;
|
||||||
QPushButton *ui_theme_reload_button;
|
QPushButton *ui_theme_reload_button;
|
||||||
|
QLabel *ui_evidence_double_click_lbl;
|
||||||
|
QCheckBox *ui_evidence_double_click_cb;
|
||||||
QLabel *ui_animated_theme_lbl;
|
QLabel *ui_animated_theme_lbl;
|
||||||
QCheckBox *ui_animated_theme_cb;
|
QCheckBox *ui_animated_theme_cb;
|
||||||
QFrame *ui_theme_log_divider;
|
QFrame *ui_theme_log_divider;
|
||||||
|
@ -974,7 +974,7 @@ private slots:
|
|||||||
void on_evidence_button_clicked();
|
void on_evidence_button_clicked();
|
||||||
|
|
||||||
void on_evidence_delete_clicked();
|
void on_evidence_delete_clicked();
|
||||||
void on_evidence_x_clicked();
|
bool on_evidence_x_clicked();
|
||||||
void on_evidence_ok_clicked();
|
void on_evidence_ok_clicked();
|
||||||
void on_evidence_switch_clicked();
|
void on_evidence_switch_clicked();
|
||||||
void on_evidence_transfer_clicked();
|
void on_evidence_transfer_clicked();
|
||||||
|
@ -465,6 +465,18 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app)
|
|||||||
|
|
||||||
ui_gameplay_form->setWidget(row, QFormLayout::FieldRole, ui_category_stop_cb);
|
ui_gameplay_form->setWidget(row, QFormLayout::FieldRole, ui_category_stop_cb);
|
||||||
|
|
||||||
|
row += 1;
|
||||||
|
ui_evidence_double_click_lbl = new QLabel(ui_form_layout_widget);
|
||||||
|
ui_evidence_double_click_lbl->setText(tr("Evidence Double Click:"));
|
||||||
|
ui_evidence_double_click_lbl->setToolTip(
|
||||||
|
tr("If ticked, Evidence needs a double-click to view rather than a single click."));
|
||||||
|
|
||||||
|
ui_gameplay_form->setWidget(row, QFormLayout::LabelRole, ui_evidence_double_click_lbl);
|
||||||
|
|
||||||
|
ui_evidence_double_click_cb = new QCheckBox(ui_form_layout_widget);
|
||||||
|
|
||||||
|
ui_gameplay_form->setWidget(row, QFormLayout::FieldRole, ui_evidence_double_click_cb);
|
||||||
|
|
||||||
// Finish gameplay tab
|
// Finish gameplay tab
|
||||||
QScrollArea *scroll = new QScrollArea(this);
|
QScrollArea *scroll = new QScrollArea(this);
|
||||||
scroll->setWidget(ui_form_layout_widget);
|
scroll->setWidget(ui_form_layout_widget);
|
||||||
@ -1210,6 +1222,7 @@ void AOOptionsDialog::update_values() {
|
|||||||
ui_suppress_audio_spinbox->setValue(ao_app->get_default_suppress_audio());
|
ui_suppress_audio_spinbox->setValue(ao_app->get_default_suppress_audio());
|
||||||
ui_bliprate_spinbox->setValue(ao_app->read_blip_rate());
|
ui_bliprate_spinbox->setValue(ao_app->read_blip_rate());
|
||||||
ui_default_showname_textbox->setText(ao_app->get_default_showname());
|
ui_default_showname_textbox->setText(ao_app->get_default_showname());
|
||||||
|
ui_evidence_double_click_cb->setChecked(ao_app->get_evidence_double_click());
|
||||||
|
|
||||||
auto *defaultMount = new QListWidgetItem(tr("%1 (default)")
|
auto *defaultMount = new QListWidgetItem(tr("%1 (default)")
|
||||||
.arg(ao_app->get_base_path()));
|
.arg(ao_app->get_base_path()));
|
||||||
@ -1273,6 +1286,7 @@ void AOOptionsDialog::save_pressed()
|
|||||||
configini->setValue("demo_logging_enabled", ui_log_demo_cb->isChecked());
|
configini->setValue("demo_logging_enabled", ui_log_demo_cb->isChecked());
|
||||||
configini->setValue("continuous_playback", ui_continuous_cb->isChecked());
|
configini->setValue("continuous_playback", ui_continuous_cb->isChecked());
|
||||||
configini->setValue("category_stop", ui_category_stop_cb->isChecked());
|
configini->setValue("category_stop", ui_category_stop_cb->isChecked());
|
||||||
|
configini->setValue("evidence_double_click", ui_evidence_double_click_cb->isChecked());
|
||||||
QFile *callwordsini = new QFile(ao_app->get_base_path() + "callwords.ini");
|
QFile *callwordsini = new QFile(ao_app->get_base_path() + "callwords.ini");
|
||||||
|
|
||||||
if (callwordsini->open(QIODevice::WriteOnly | QIODevice::Truncate |
|
if (callwordsini->open(QIODevice::WriteOnly | QIODevice::Truncate |
|
||||||
|
102
src/evidence.cpp
102
src/evidence.cpp
@ -12,6 +12,7 @@ void Courtroom::initialize_evidence()
|
|||||||
ui_evidence_name->setAlignment(Qt::AlignCenter);
|
ui_evidence_name->setAlignment(Qt::AlignCenter);
|
||||||
ui_evidence_name->setFrame(false);
|
ui_evidence_name->setFrame(false);
|
||||||
ui_evidence_name->setObjectName("ui_evidence_name");
|
ui_evidence_name->setObjectName("ui_evidence_name");
|
||||||
|
ui_evidence_name->setReadOnly(true);
|
||||||
|
|
||||||
ui_evidence_buttons = new QWidget(ui_evidence);
|
ui_evidence_buttons = new QWidget(ui_evidence);
|
||||||
ui_evidence_buttons->setObjectName("ui_evidence_buttons");
|
ui_evidence_buttons->setObjectName("ui_evidence_buttons");
|
||||||
@ -449,17 +450,22 @@ void Courtroom::on_evidence_clicked(int p_id)
|
|||||||
}
|
}
|
||||||
else if (f_real_id > local_evidence_list.size())
|
else if (f_real_id > local_evidence_list.size())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (!ao_app->get_evidence_double_click()){
|
||||||
|
on_evidence_double_clicked(p_id);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ui_evidence_overlay->isVisible()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
ui_evidence_name->setText(local_evidence_list.at(f_real_id).name);
|
ui_evidence_name->setText(local_evidence_list.at(f_real_id).name);
|
||||||
|
|
||||||
for (AOEvidenceButton *i_button : qAsConst(ui_evidence_list))
|
for (AOEvidenceButton *i_button : qAsConst(ui_evidence_list))
|
||||||
i_button->set_selected(false);
|
i_button->set_selected(false);
|
||||||
|
|
||||||
ui_evidence_list.at(p_id)->set_selected(true);
|
ui_evidence_list.at(p_id)->set_selected(true);
|
||||||
|
|
||||||
current_evidence = f_real_id;
|
current_evidence = f_real_id;
|
||||||
|
|
||||||
// ui_ic_chat_message->setFocus();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Courtroom::on_evidence_double_clicked(int p_id)
|
void Courtroom::on_evidence_double_clicked(int p_id)
|
||||||
@ -469,6 +475,17 @@ void Courtroom::on_evidence_double_clicked(int p_id)
|
|||||||
if (f_real_id >= local_evidence_list.size())
|
if (f_real_id >= local_evidence_list.size())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (ui_evidence_overlay->isVisible()) {
|
||||||
|
if (!on_evidence_x_clicked()) {
|
||||||
|
// We're told not to switch over to the other evidence ("cancel" clicked)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (AOEvidenceButton *i_button : qAsConst(ui_evidence_list))
|
||||||
|
i_button->set_selected(false);
|
||||||
|
|
||||||
|
ui_evidence_list.at(p_id)->set_selected(true);
|
||||||
current_evidence = f_real_id;
|
current_evidence = f_real_id;
|
||||||
|
|
||||||
evi_type f_evi = local_evidence_list.at(f_real_id);
|
evi_type f_evi = local_evidence_list.at(f_real_id);
|
||||||
@ -477,6 +494,7 @@ void Courtroom::on_evidence_double_clicked(int p_id)
|
|||||||
ui_evidence_description->appendPlainText(f_evi.description);
|
ui_evidence_description->appendPlainText(f_evi.description);
|
||||||
ui_evidence_description->setReadOnly(false);
|
ui_evidence_description->setReadOnly(false);
|
||||||
ui_evidence_description->setToolTip(tr("Click to edit..."));
|
ui_evidence_description->setToolTip(tr("Click to edit..."));
|
||||||
|
ui_evidence_description->moveCursor(QTextCursor::Start);
|
||||||
|
|
||||||
ui_evidence_name->setText(f_evi.name);
|
ui_evidence_name->setText(f_evi.name);
|
||||||
ui_evidence_name->setReadOnly(false);
|
ui_evidence_name->setReadOnly(false);
|
||||||
@ -489,12 +507,15 @@ void Courtroom::on_evidence_double_clicked(int p_id)
|
|||||||
ui_evidence->show();
|
ui_evidence->show();
|
||||||
ui_evidence_overlay->show();
|
ui_evidence_overlay->show();
|
||||||
ui_evidence_ok->hide();
|
ui_evidence_ok->hide();
|
||||||
|
|
||||||
ui_ic_chat_message->setFocus();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Courtroom::on_evidence_hover(int p_id, bool p_state)
|
void Courtroom::on_evidence_hover(int p_id, bool p_state)
|
||||||
{
|
{
|
||||||
|
if (ui_evidence_overlay->isVisible()) {
|
||||||
|
// Ignore hovering behavior if we're in the process of viewing a piece of evidence
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
int final_id = p_id + max_evidence_on_page * current_evidence_page;
|
int final_id = p_id + max_evidence_on_page * current_evidence_page;
|
||||||
|
|
||||||
if (p_state) {
|
if (p_state) {
|
||||||
@ -514,8 +535,6 @@ void Courtroom::on_evidence_left_clicked()
|
|||||||
--current_evidence_page;
|
--current_evidence_page;
|
||||||
|
|
||||||
set_evidence_page();
|
set_evidence_page();
|
||||||
|
|
||||||
ui_ic_chat_message->setFocus();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Courtroom::on_evidence_right_clicked()
|
void Courtroom::on_evidence_right_clicked()
|
||||||
@ -523,8 +542,6 @@ void Courtroom::on_evidence_right_clicked()
|
|||||||
++current_evidence_page;
|
++current_evidence_page;
|
||||||
|
|
||||||
set_evidence_page();
|
set_evidence_page();
|
||||||
|
|
||||||
ui_ic_chat_message->setFocus();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Courtroom::on_evidence_present_clicked()
|
void Courtroom::on_evidence_present_clicked()
|
||||||
@ -557,24 +574,18 @@ void Courtroom::on_evidence_delete_clicked()
|
|||||||
}
|
}
|
||||||
|
|
||||||
current_evidence = 0;
|
current_evidence = 0;
|
||||||
|
|
||||||
ui_ic_chat_message->setFocus();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Courtroom::on_evidence_x_clicked()
|
bool Courtroom::on_evidence_x_clicked()
|
||||||
{
|
{
|
||||||
if (current_evidence >=
|
if (current_evidence >=
|
||||||
local_evidence_list.size()) // Should never happen but you never know.
|
local_evidence_list.size()) // Should never happen but you never know.
|
||||||
return;
|
return true;
|
||||||
|
|
||||||
evi_type fake_evidence;
|
if (ui_evidence_ok->isHidden()) {
|
||||||
fake_evidence.name = ui_evidence_name->text();
|
// Nothing was modified
|
||||||
fake_evidence.description = ui_evidence_description->toPlainText();
|
|
||||||
fake_evidence.image = ui_evidence_image_name->text();
|
|
||||||
if (!compare_evidence_changed(fake_evidence,
|
|
||||||
local_evidence_list.at(current_evidence))) {
|
|
||||||
evidence_close();
|
evidence_close();
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
QMessageBox *msgBox = new QMessageBox;
|
QMessageBox *msgBox = new QMessageBox;
|
||||||
msgBox->setAttribute(Qt::WA_DeleteOnClose);
|
msgBox->setAttribute(Qt::WA_DeleteOnClose);
|
||||||
@ -588,16 +599,14 @@ void Courtroom::on_evidence_x_clicked()
|
|||||||
case QMessageBox::Save:
|
case QMessageBox::Save:
|
||||||
evidence_close();
|
evidence_close();
|
||||||
on_evidence_ok_clicked();
|
on_evidence_ok_clicked();
|
||||||
break;
|
return true;
|
||||||
case QMessageBox::Discard:
|
case QMessageBox::Discard:
|
||||||
evidence_close();
|
evidence_close();
|
||||||
break;
|
return true;
|
||||||
case QMessageBox::Cancel:
|
case QMessageBox::Cancel:
|
||||||
// Cancel was clicked, do nothing
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
// should never be reached
|
// Cancel was clicked, report that.
|
||||||
break;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -629,28 +638,7 @@ void Courtroom::on_evidence_ok_clicked()
|
|||||||
|
|
||||||
void Courtroom::on_evidence_switch_clicked()
|
void Courtroom::on_evidence_switch_clicked()
|
||||||
{
|
{
|
||||||
evidence_close();
|
|
||||||
evidence_switch(!current_evidence_global);
|
evidence_switch(!current_evidence_global);
|
||||||
if (current_evidence_global) {
|
|
||||||
ui_evidence_switch->set_image("evidence_global");
|
|
||||||
ui_evidence->set_image("evidence_background");
|
|
||||||
ui_evidence_overlay->set_image("evidence_overlay");
|
|
||||||
ui_evidence_transfer->set_image("evidence_transfer");
|
|
||||||
ui_evidence_transfer->setToolTip(
|
|
||||||
tr("Transfer evidence to private inventory."));
|
|
||||||
ui_evidence_switch->setToolTip(
|
|
||||||
tr("Current evidence is global. Click to switch to private."));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
ui_evidence_switch->set_image("evidence_private");
|
|
||||||
ui_evidence->set_image("evidence_background_private");
|
|
||||||
ui_evidence_overlay->set_image("evidence_overlay_private");
|
|
||||||
ui_evidence_transfer->set_image("evidence_transfer_private");
|
|
||||||
ui_evidence_transfer->setToolTip(
|
|
||||||
tr("Transfer evidence to global inventory."));
|
|
||||||
ui_evidence_switch->setToolTip(
|
|
||||||
tr("Current evidence is private. Click to switch to global."));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Courtroom::on_evidence_transfer_clicked()
|
void Courtroom::on_evidence_transfer_clicked()
|
||||||
@ -708,11 +696,11 @@ void Courtroom::evidence_close()
|
|||||||
ui_evidence_name->setReadOnly(true);
|
ui_evidence_name->setReadOnly(true);
|
||||||
ui_evidence_image_name->setReadOnly(true);
|
ui_evidence_image_name->setReadOnly(true);
|
||||||
ui_evidence_overlay->hide();
|
ui_evidence_overlay->hide();
|
||||||
ui_ic_chat_message->setFocus();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Courtroom::evidence_switch(bool global)
|
void Courtroom::evidence_switch(bool global)
|
||||||
{
|
{
|
||||||
|
evidence_close();
|
||||||
current_evidence_global = global;
|
current_evidence_global = global;
|
||||||
is_presenting_evidence = false;
|
is_presenting_evidence = false;
|
||||||
ui_evidence_present->set_image("present");
|
ui_evidence_present->set_image("present");
|
||||||
@ -722,12 +710,28 @@ void Courtroom::evidence_switch(bool global)
|
|||||||
ui_evidence_present->show();
|
ui_evidence_present->show();
|
||||||
ui_evidence_save->hide();
|
ui_evidence_save->hide();
|
||||||
ui_evidence_load->hide();
|
ui_evidence_load->hide();
|
||||||
|
ui_evidence_switch->set_image("evidence_global");
|
||||||
|
ui_evidence->set_image("evidence_background");
|
||||||
|
ui_evidence_overlay->set_image("evidence_overlay");
|
||||||
|
ui_evidence_transfer->set_image("evidence_transfer");
|
||||||
|
ui_evidence_transfer->setToolTip(
|
||||||
|
tr("Transfer evidence to private inventory."));
|
||||||
|
ui_evidence_switch->setToolTip(
|
||||||
|
tr("Current evidence is global. Click to switch to private."));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
local_evidence_list = private_evidence_list;
|
local_evidence_list = private_evidence_list;
|
||||||
ui_evidence_present->hide();
|
ui_evidence_present->hide();
|
||||||
ui_evidence_save->show();
|
ui_evidence_save->show();
|
||||||
ui_evidence_load->show();
|
ui_evidence_load->show();
|
||||||
|
ui_evidence_switch->set_image("evidence_private");
|
||||||
|
ui_evidence->set_image("evidence_background_private");
|
||||||
|
ui_evidence_overlay->set_image("evidence_overlay_private");
|
||||||
|
ui_evidence_transfer->set_image("evidence_transfer_private");
|
||||||
|
ui_evidence_transfer->setToolTip(
|
||||||
|
tr("Transfer evidence to global inventory."));
|
||||||
|
ui_evidence_switch->setToolTip(
|
||||||
|
tr("Current evidence is private. Click to switch to global."));
|
||||||
}
|
}
|
||||||
current_evidence_page = 0;
|
current_evidence_page = 0;
|
||||||
set_evidence_page();
|
set_evidence_page();
|
||||||
|
@ -1232,3 +1232,9 @@ bool AOApplication::get_player_count_optout()
|
|||||||
return configini->value("player_count_optout", "false").value<QString>()
|
return configini->value("player_count_optout", "false").value<QString>()
|
||||||
.startsWith("true");
|
.startsWith("true");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool AOApplication::get_evidence_double_click()
|
||||||
|
{
|
||||||
|
return configini->value("evidence_double_click", "true").value<QString>()
|
||||||
|
.startsWith("true");
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user