mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2024-11-14 21:37:52 -07:00
Qt/NetPlay: Implement MD5 dialog
This commit is contained in:
parent
962af060a0
commit
d5629017b9
134
Source/Core/DolphinQt2/NetPlay/MD5Dialog.cpp
Normal file
134
Source/Core/DolphinQt2/NetPlay/MD5Dialog.cpp
Normal file
@ -0,0 +1,134 @@
|
||||
// Copyright 2017 Dolphin Emulator Project
|
||||
// Licensed under GPLv2+
|
||||
// Refer to the license.txt file included.
|
||||
|
||||
#include "MD5Dialog.h"
|
||||
|
||||
#include "DolphinQt2/Settings.h"
|
||||
|
||||
#include <QDialogButtonBox>
|
||||
#include <QGroupBox>
|
||||
#include <QLabel>
|
||||
#include <QProgressBar>
|
||||
#include <QVBoxLayout>
|
||||
|
||||
static QString GetPlayerNameFromPID(int pid)
|
||||
{
|
||||
QString player_name = QObject::tr("Invalid Player ID");
|
||||
for (const auto* player : Settings::Instance().GetNetPlayClient()->GetPlayers())
|
||||
{
|
||||
if (player->pid == pid)
|
||||
{
|
||||
player_name = QString::fromStdString(player->name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return player_name;
|
||||
}
|
||||
|
||||
MD5Dialog::MD5Dialog(QWidget* parent) : QDialog(parent)
|
||||
{
|
||||
CreateWidgets();
|
||||
ConnectWidgets();
|
||||
setWindowTitle(tr("MD5 Checksum"));
|
||||
}
|
||||
|
||||
void MD5Dialog::CreateWidgets()
|
||||
{
|
||||
m_main_layout = new QVBoxLayout;
|
||||
m_progress_box = new QGroupBox;
|
||||
m_progress_layout = new QVBoxLayout;
|
||||
m_button_box = new QDialogButtonBox(QDialogButtonBox::Close);
|
||||
m_check_label = new QLabel;
|
||||
|
||||
m_progress_box->setLayout(m_progress_layout);
|
||||
|
||||
m_main_layout->addWidget(m_progress_box);
|
||||
m_main_layout->addWidget(m_check_label);
|
||||
m_main_layout->addWidget(m_button_box);
|
||||
setLayout(m_main_layout);
|
||||
}
|
||||
|
||||
void MD5Dialog::ConnectWidgets()
|
||||
{
|
||||
connect(m_button_box, &QDialogButtonBox::rejected, this, &MD5Dialog::reject);
|
||||
}
|
||||
|
||||
void MD5Dialog::show(const QString& title)
|
||||
{
|
||||
m_progress_box->setTitle(title);
|
||||
|
||||
for (auto& pair : m_progress_bars)
|
||||
{
|
||||
m_progress_layout->removeWidget(pair.second);
|
||||
pair.second->deleteLater();
|
||||
}
|
||||
|
||||
for (auto& pair : m_status_labels)
|
||||
{
|
||||
m_progress_layout->removeWidget(pair.second);
|
||||
pair.second->deleteLater();
|
||||
}
|
||||
|
||||
m_progress_bars.clear();
|
||||
m_status_labels.clear();
|
||||
|
||||
for (const auto* player : Settings::Instance().GetNetPlayClient()->GetPlayers())
|
||||
{
|
||||
m_progress_bars[player->pid] = new QProgressBar;
|
||||
m_status_labels[player->pid] = new QLabel;
|
||||
|
||||
m_progress_layout->addWidget(m_progress_bars[player->pid]);
|
||||
m_progress_layout->addWidget(m_status_labels[player->pid]);
|
||||
}
|
||||
|
||||
m_last_result = "";
|
||||
|
||||
QDialog::show();
|
||||
}
|
||||
|
||||
void MD5Dialog::SetProgress(int pid, int progress)
|
||||
{
|
||||
QString player_name = GetPlayerNameFromPID(pid);
|
||||
|
||||
if (!m_status_labels.count(pid))
|
||||
return;
|
||||
|
||||
m_status_labels[pid]->setText(
|
||||
tr("%1[%2]: %3 %").arg(player_name, QString::number(pid), QString::number(progress)));
|
||||
m_progress_bars[pid]->setValue(progress);
|
||||
}
|
||||
|
||||
void MD5Dialog::SetResult(int pid, const std::string& result)
|
||||
{
|
||||
QString player_name = GetPlayerNameFromPID(pid);
|
||||
|
||||
if (!m_status_labels.count(pid))
|
||||
return;
|
||||
|
||||
m_status_labels[pid]->setText(
|
||||
tr("%1[%2]: %3").arg(player_name, QString::number(pid), QString::fromStdString(result)));
|
||||
|
||||
if (m_last_result == "")
|
||||
{
|
||||
m_check_label->setText(tr("The hashes match!"));
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_last_result != result)
|
||||
{
|
||||
m_check_label->setText(tr("The hashes do not match!"));
|
||||
}
|
||||
|
||||
m_last_result = result;
|
||||
}
|
||||
|
||||
void MD5Dialog::reject()
|
||||
{
|
||||
auto* server = Settings::Instance().GetNetPlayServer();
|
||||
|
||||
if (server)
|
||||
server->AbortMD5();
|
||||
|
||||
QDialog::reject();
|
||||
}
|
42
Source/Core/DolphinQt2/NetPlay/MD5Dialog.h
Normal file
42
Source/Core/DolphinQt2/NetPlay/MD5Dialog.h
Normal file
@ -0,0 +1,42 @@
|
||||
// Copyright 2017 Dolphin Emulator Project
|
||||
// Licensed under GPLv2+
|
||||
// Refer to the license.txt file included.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <QDialog>
|
||||
|
||||
class QDialogButtonBox;
|
||||
class QGroupBox;
|
||||
class QLabel;
|
||||
class QProgressBar;
|
||||
class QVBoxLayout;
|
||||
class QWidget;
|
||||
|
||||
class MD5Dialog : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
MD5Dialog(QWidget* parent);
|
||||
|
||||
void show(const QString& title);
|
||||
void SetProgress(int pid, int progress);
|
||||
void SetResult(int pid, const std::string& md5);
|
||||
|
||||
void reject() override;
|
||||
|
||||
private:
|
||||
void CreateWidgets();
|
||||
void ConnectWidgets();
|
||||
|
||||
std::map<int, QProgressBar*> m_progress_bars;
|
||||
std::map<int, QLabel*> m_status_labels;
|
||||
|
||||
std::string m_last_result;
|
||||
|
||||
QGroupBox* m_progress_box;
|
||||
QVBoxLayout* m_progress_layout;
|
||||
QVBoxLayout* m_main_layout;
|
||||
QLabel* m_check_label;
|
||||
QDialogButtonBox* m_button_box;
|
||||
};
|
Loading…
Reference in New Issue
Block a user