- u_async.c: process immediate_queue BEFORE epoll_wait in uasync_poll - stcp_link.c: defensive NULL etcp_conn/etcp_link in stcp_link_close - utun_instance.c: move stcp_server_list_destroy_all to Phase J (before ETCP), add deferred drain in both Phase J and L - stcp.h/c: STCP_HS_ENC_CLIENT 6→38, STCP_HS_ENC_SERVER 7→39, exchange ed25519_pubkey in both handshake directions - etcp_connections.c: copy peer_ed25519 from STCP to ETCP_CONN in etcp_link_enter_ready_tcp; guard link->etcp in tcp_link_close_cb - chat_sync.c: fix lk->conn NULL dereference for TCP links - test_stcp.c: update stcp_server_create/stcp_client_connect callsites - tools/chat_tcp_test: change transport udp→tcp
52 lines
1.4 KiB
C++
52 lines
1.4 KiB
C++
#include "creategroupdialog.h"
|
|
#include <QVBoxLayout>
|
|
#include <QHBoxLayout>
|
|
#include <QLabel>
|
|
#include <QPushButton>
|
|
|
|
CreateGroupDialog::CreateGroupDialog(QWidget* parent)
|
|
: QDialog(parent)
|
|
, m_nameEdit(new QLineEdit(this))
|
|
{
|
|
setWindowTitle("Создать группу");
|
|
setMinimumWidth(350);
|
|
setModal(true);
|
|
|
|
auto* layout = new QVBoxLayout(this);
|
|
|
|
auto* nameLabel = new QLabel("Название группы:", this);
|
|
layout->addWidget(nameLabel);
|
|
|
|
m_nameEdit->setPlaceholderText("Введите название...");
|
|
m_nameEdit->setMaxLength(128);
|
|
layout->addWidget(m_nameEdit);
|
|
|
|
layout->addSpacing(12);
|
|
|
|
auto* btnLayout = new QHBoxLayout();
|
|
btnLayout->addStretch();
|
|
|
|
auto* cancelBtn = new QPushButton("Отмена", this);
|
|
connect(cancelBtn, &QPushButton::clicked, this, &QDialog::reject);
|
|
btnLayout->addWidget(cancelBtn);
|
|
|
|
auto* createBtn = new QPushButton("Создать", this);
|
|
createBtn->setDefault(true);
|
|
connect(createBtn, &QPushButton::clicked, this, [this]() {
|
|
if (m_nameEdit->text().trimmed().isEmpty()) {
|
|
m_nameEdit->setFocus();
|
|
return;
|
|
}
|
|
accept();
|
|
});
|
|
btnLayout->addWidget(createBtn);
|
|
|
|
layout->addLayout(btnLayout);
|
|
|
|
m_nameEdit->setFocus();
|
|
}
|
|
|
|
QString CreateGroupDialog::groupName() const {
|
|
return m_nameEdit->text().trimmed();
|
|
}
|