/
Shymer123
/
Messenger
Обзор
Документация
Войти
/
Shymer123
/
Messenger
Код
Запросы
0
Задачи
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
UI_Client/SourceFiles/Ui/GroupMenu/GroupMenu.cpp
190 строк
5 KB
Shymer123
The code has been refactored, now there are no incomprehensible UserRole, etc.
19 май 2025, 13:22
19 май 2025, 13:22
f8b3525
Код
Авторство
О чём код?
#include "GroupMenu.h" #include "Processes/Group/GroupProcess.h" #include "Ui/AddMembersMenu/AddMembersMenu.h" #include "DataModels/user_data.h" #include "Ui/Widgets/Buttons/IconButton/IconButton.h" #include "Ui/Widgets/Inputs/AnimatedLineEdit/AnimatedLineEdit.h" #include <QStyleOption> #include <QPainter> #include <QVBoxLayout> #include <QPropertyAnimation> namespace Ui { namespace GroupMenu { GroupMenu::GroupMenu(QWidget* parent) : QWidget(parent) { setFixedSize(360, 150); setObjectName("wdg_groupMenu_group_menu"); m_userID = UserData::instance().getID(); m_userName = UserData::instance().getUserName(); setupFull(); } GroupMenu::~GroupMenu() {} void GroupMenu::setChatProcess(Processes::ChatProcess* chatProcess) { m_chatProcess = chatProcess; } void GroupMenu::setGroupMenuProcess(Processes::GroupProcess* groupProcess) { this->groupProcess = groupProcess; } void GroupMenu::paintEvent(QPaintEvent* event) { Q_UNUSED(event); QStyleOption opt; opt.initFrom(this); QPainter p(this); style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); } void GroupMenu::setupFull() { setupIconButton(); setupNameField(); setupButtonsLayout(); setupAnimation(); connectSignals(); QVBoxLayout* vLayout = new QVBoxLayout; vLayout->addWidget(m_nameField); vLayout->addLayout(m_buttonsLayout); QHBoxLayout* hLayout = new QHBoxLayout; hLayout->addWidget(m_iconButton, 1, Qt::AlignTop); hLayout->addLayout(vLayout); setLayout(hLayout); } void GroupMenu::setupIconButton() { m_iconButton = new Widgets::IconButton("", false, this); m_iconButton->setBackgroudColor(QColor(155, 175, 212)); } void GroupMenu::setupNameField() { m_nameField = new Widgets::AnimatedLineEdit(tr("Group name"), this); m_nameField->setFixedWidth(220); } void GroupMenu::setupButtonsLayout() { m_cancelButton = new QPushButton("Cancel", this); m_cancelButton->setFixedSize(70, 30); m_cancelButton->setObjectName("btn_groupMenu_cancel"); m_nextButton = new QPushButton("Next", this); m_nextButton->setFixedSize(70, 30); m_nextButton->setObjectName("btn_groupMenu_next"); m_buttonsLayout = new QHBoxLayout; m_buttonsLayout->addWidget(m_cancelButton); m_buttonsLayout->addWidget(m_nextButton); m_buttonsLayout->setAlignment(Qt::AlignRight); } void GroupMenu::setupAnimation() { m_animation = new QPropertyAnimation(this, "geometry"); m_animation->setDuration(200); m_animation->setStartValue(QRect(parentWidget()->width(), parentWidget()->height() / 2 - 270, this->width(), this->height())); m_animation->setEndValue(QRect(parentWidget()->width() / 2 - 150, parentWidget()->height() / 2 - 270, this->width(), this->height())); connect(m_animation, &QPropertyAnimation::finished, this, &GroupMenu::onAnimatedFinished); } void GroupMenu::animateGroupMenu(bool show) { m_animation->setDirection(show ? QPropertyAnimation::Forward : QPropertyAnimation::Backward); if (!m_isAnimationRunning) { m_isAnimationRunning = true; this->show(); m_animation->start(); } } void GroupMenu::onAnimatedFinished() { m_isAnimationRunning = false; if (m_animation->direction() == QPropertyAnimation::Backward) { this->hide(); this->deleteLater(); } emit animatedFinishedSignal(); } void GroupMenu::updateGeometry() { this->setGeometry(0, 0, this->width(), parentWidget()->height()); m_animation->setStartValue(QRect(-this->width(), 0, this->width(), parentWidget()->height())); m_animation->setEndValue(QRect(0, 0, this->width(), parentWidget()->height())); } void GroupMenu::connectSignals() { connect(m_cancelButton, &QPushButton::clicked, this, [this]() { emit clickedCloseSignal(); }); connect(m_nextButton, &QPushButton::clicked, this, &GroupMenu::onClickedNext); } void GroupMenu::onClickedNext() { if(m_nameField->getText().isEmpty()) { m_nameField->setColorUpdate("error"); return; } m_groupName = m_nameField->getText(); hide(); membersMenuWidget = new AddMembersMenu::AddMembersMenu(m_groupName, groupProcess, parentWidget()); membersMenuWidget->setGeometry(this->geometry()); membersMenuWidget->show(); membersMenuWidget->setChatProcess(m_chatProcess); connect(membersMenuWidget, &AddMembersMenu::AddMembersMenu::cancelClickedSignal, this, &GroupMenu::onClickedCancelInMembersMenu); } void GroupMenu::onClickedCancelInMembersMenu() { if(membersMenuWidget) { membersMenuWidget->hide(); this->setGeometry(membersMenuWidget->geometry()); this->show(); } } AddMembersMenu::AddMembersMenu* GroupMenu::getAddMembersMenu() { if(membersMenuWidget) { return membersMenuWidget; } return nullptr; } } // namespace GroupMenu } // namespace Ui