aboutsummaryrefslogtreecommitdiff
path: root/src/widgets/moderator_dialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/widgets/moderator_dialog.cpp')
-rw-r--r--src/widgets/moderator_dialog.cpp102
1 files changed, 102 insertions, 0 deletions
diff --git a/src/widgets/moderator_dialog.cpp b/src/widgets/moderator_dialog.cpp
new file mode 100644
index 00000000..11b99ccf
--- /dev/null
+++ b/src/widgets/moderator_dialog.cpp
@@ -0,0 +1,102 @@
+#include "moderator_dialog.h"
+
+#include "aoapplication.h"
+#include "gui_utils.h"
+#include "options.h"
+
+#include <QDebug>
+#include <QFile>
+#include <QMessageBox>
+#include <QUiLoader>
+#include <QVBoxLayout>
+
+const QString ModeratorDialog::UI_FILE_PATH = "moderator_action_dialog.ui";
+
+ModeratorDialog::ModeratorDialog(int clientId, bool ban, AOApplication *ao_app, QWidget *parent)
+ : QWidget{parent}
+ , ao_app(ao_app)
+ , m_client_id(clientId)
+ , m_ban(ban)
+{
+ QFile file(Options::getInstance().getUIAsset(UI_FILE_PATH));
+ if (!file.open(QFile::ReadOnly))
+ {
+ qFatal("Unable to open file %s", qPrintable(file.fileName()));
+ return;
+ }
+
+ QUiLoader loader;
+ ui_widget = loader.load(&file, this);
+ auto layout = new QVBoxLayout(this);
+ layout->addWidget(ui_widget);
+
+ FROM_UI(QComboBox, action);
+ FROM_UI(QSpinBox, duration);
+ FROM_UI(QLabel, duration_label);
+ FROM_UI(QCheckBox, permanent);
+ FROM_UI(QTextEdit, details);
+ FROM_UI(QDialogButtonBox, button_box);
+
+ if (m_ban)
+ {
+ ui_action->addItem(tr("Ban"));
+ }
+ else
+ {
+ ui_action->addItem(tr("Kick"));
+ }
+
+ ui_duration->setVisible(m_ban);
+ ui_duration_label->setVisible(m_ban);
+ ui_permanent->setVisible(m_ban);
+
+ connect(ui_button_box, &QDialogButtonBox::accepted, this, &ModeratorDialog::onAcceptedClicked);
+ connect(ui_button_box, &QDialogButtonBox::rejected, this, &ModeratorDialog::close);
+}
+
+ModeratorDialog::~ModeratorDialog()
+{}
+
+void ModeratorDialog::onAcceptedClicked()
+{
+ QString reason = ui_details->toPlainText();
+ if (reason.isEmpty())
+ {
+ if (QMessageBox::question(this, tr("Confirmation"), tr("Are you sure you want to confirm without a reason?"), QMessageBox::Yes | QMessageBox::No) == QMessageBox::No)
+ {
+ return;
+ }
+ }
+
+ bool permanent = ui_permanent->isChecked();
+ if (permanent)
+ {
+ if (QMessageBox::question(this, tr("Confirmation"), tr("Are you sure you want to ban permanently?"), QMessageBox::Yes | QMessageBox::No) == QMessageBox::No)
+ {
+ return;
+ }
+ }
+
+ QStringList arglist;
+ arglist.append(QString::number(m_client_id));
+ if (m_ban)
+ {
+ if (permanent)
+ {
+ arglist.append("-1");
+ }
+ else
+ {
+ arglist.append(QString::number(ui_duration->value()));
+ }
+ }
+ else
+ {
+ arglist.append("0");
+ }
+ arglist.append(reason);
+
+ ao_app->send_server_packet(AOPacket("MA", arglist));
+
+ close();
+}