102 lines
2.8 KiB
C++
102 lines
2.8 KiB
C++
#include "networkdetailwidget.h"
|
|
#include <QInputDialog>
|
|
#include <QLabel>
|
|
#include <QListWidget>
|
|
#include <QProgressBar>
|
|
#include <QPushButton>
|
|
#include <QVBoxLayout>
|
|
#include <QHBoxLayout>
|
|
|
|
NetworkDetailWidget::NetworkDetailWidget(QWidget *parent)
|
|
: QWidget(parent)
|
|
{
|
|
auto *layout = new QVBoxLayout(this);
|
|
layout->setContentsMargins(16, 16, 16, 16);
|
|
|
|
// Network name
|
|
m_nameLabel = new QLabel(this);
|
|
QFont nameFont;
|
|
nameFont.setPointSize(24);
|
|
m_nameLabel->setFont(nameFont);
|
|
layout->addWidget(m_nameLabel);
|
|
|
|
// Admin label
|
|
m_adminLabel = new QLabel(this);
|
|
layout->addWidget(m_adminLabel);
|
|
|
|
// Stream capacity progress bar
|
|
m_streamBar = new QProgressBar(this);
|
|
m_streamBar->setMinimum(0);
|
|
m_streamBar->setTextVisible(false);
|
|
layout->addWidget(m_streamBar);
|
|
|
|
m_streamBarLabel = new QLabel(this);
|
|
layout->addWidget(m_streamBarLabel);
|
|
|
|
layout->addStretch();
|
|
|
|
// Members header
|
|
auto *membersHeader = new QLabel("Members", this);
|
|
QFont headerFont;
|
|
headerFont.setBold(true);
|
|
membersHeader->setFont(headerFont);
|
|
layout->addWidget(membersHeader);
|
|
|
|
// Members list
|
|
m_membersList = new QListWidget(this);
|
|
layout->addWidget(m_membersList, 1);
|
|
|
|
// Button row
|
|
auto *buttonRow = new QHBoxLayout;
|
|
m_addMemberBtn = new QPushButton("Add Member", this);
|
|
buttonRow->addWidget(m_addMemberBtn);
|
|
buttonRow->addStretch();
|
|
layout->addLayout(buttonRow);
|
|
|
|
connect(m_addMemberBtn, &QPushButton::clicked, this, [this]() {
|
|
bool ok;
|
|
QString email = QInputDialog::getText(this, "Add Member",
|
|
"Email address:", QLineEdit::Normal,
|
|
QString(), &ok);
|
|
if (ok && !email.isEmpty())
|
|
{
|
|
emit addMemberRequested(m_networkId, email);
|
|
}
|
|
});
|
|
}
|
|
|
|
void NetworkDetailWidget::setNetwork(const Network &network, const QString ¤tUserEmail)
|
|
{
|
|
m_networkId = network.id;
|
|
|
|
m_nameLabel->setText(network.name);
|
|
m_adminLabel->setText("Admin: " + network.admin.emailPrefix);
|
|
|
|
m_streamBar->setMaximum(network.openStreamCapacity > 0 ? network.openStreamCapacity : 1);
|
|
m_streamBar->setValue(network.openStreamCount);
|
|
m_streamBarLabel->setText(QString("%1 / %2 open streams")
|
|
.arg(network.openStreamCount)
|
|
.arg(network.openStreamCapacity));
|
|
|
|
m_membersList->clear();
|
|
for (const auto &member : network.members)
|
|
{
|
|
m_membersList->addItem(member.email);
|
|
}
|
|
|
|
bool isAdmin = (!currentUserEmail.isEmpty() &&
|
|
currentUserEmail == network.admin.email);
|
|
m_addMemberBtn->setVisible(isAdmin);
|
|
}
|
|
|
|
void NetworkDetailWidget::clear()
|
|
{
|
|
m_networkId.clear();
|
|
m_nameLabel->setText("");
|
|
m_adminLabel->setText("");
|
|
m_streamBar->setValue(0);
|
|
m_streamBarLabel->setText("");
|
|
m_membersList->clear();
|
|
m_addMemberBtn->hide();
|
|
}
|