/
Shymer123
/
Messenger
Обзор
Документация
Войти
/
Shymer123
/
Messenger
Код
Запросы
0
Задачи
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
UI_Client/SourceFiles/Ui/AddMembersMenu/AddMembersMenu.cpp
227 строк
8 KB
Shymer123
The code has been refactored, now there are no incomprehensible UserRole, etc.
19 май 2025, 13:22
19 май 2025, 13:22
f8b3525
Код
Авторство
О чём код?
#include "AddMembersMenu.h" #include "Processes/AddMembersMenu/AddMembersMenuProcess.h" #include <QLabel> #include <QLineEdit> #include "DataModels/user_data.h" #include "Ui/Widgets/Delegates/ContactsList/ContactsListDelegate.h" #include "Ui/Widgets/ScrollBars/ScrollBar.h" #include "Ui/Widgets/ScrollBars/ScrollBarOverlay.h" #include "SharedEnums/ContactRoles.h" #include <QHBoxLayout> #include <QListView> #include <QPainter> #include <QPushButton> #include <QPropertyAnimation> namespace Ui { namespace AddMembersMenu { AddMembersMenu::AddMembersMenu(const QString& groupName, Processes::GroupProcess* groupProcess, QWidget* parent) : QWidget(parent), m_groupName(groupName), groupProcess(groupProcess) { setFixedSize(360, 590); setObjectName("wdg_addMembersMenu_add_members_menu"); m_userID = UserData::instance().getID(); m_userName = UserData::instance().getUserName(); setupFull(); } AddMembersMenu::~AddMembersMenu() {} void AddMembersMenu::setChatProcess(Processes::ChatProcess* chatProcess) { m_addMembersMenuProcess->setChatProcess(chatProcess); } void AddMembersMenu::paintEvent(QPaintEvent* event) { Q_UNUSED(event); QStyleOption opt; opt.initFrom(this); QPainter p(this); style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); } void AddMembersMenu::resizeEvent(QResizeEvent* event) { QWidget::resizeEvent(event); if(m_scrollBar) { m_scrollBar->setGeometry(width() - m_scrollBar->width() - 7, 85, m_scrollBar->width(), height() - 140); m_scrollBarOverlay->setGeometry(width() - m_scrollBar->width() - 7, 85, m_scrollBar->width(), height() - 140); } } void AddMembersMenu::setupFull() { setupHeaderLabel(); setupSearchLayout(); setupScrollBar(); setupContactsList(); setupButtonsLayout(); setupAnimation(); QVBoxLayout* vLayout = new QVBoxLayout; vLayout->setContentsMargins(0, 0, 0, 0); vLayout->setSpacing(0); vLayout->addWidget(m_headerLabel); vLayout->addLayout(m_searchLayout); vLayout->addWidget(m_contactsList); vLayout->addLayout(m_buttonsLayout); setLayout(vLayout); m_addMembersMenuProcess = new Processes::AddMembersMenuProcess(m_groupName, this); m_addMembersMenuProcess->setContactsList(m_contactsList); m_addMembersMenuProcess->setGroupProcess(groupProcess); m_addMembersMenuProcess->renderingContactsList([this]() { connectSignals(); m_scrollBarOverlay->raise(); m_scrollBar->raise(); }); connect(m_addMembersMenuProcess, &QObject::destroyed, this, [this]() { m_addMembersMenuProcess = nullptr; }); } void AddMembersMenu::setupHeaderLabel() { m_headerLabel = new QLabel(tr("Add Members"), this); m_headerLabel->setObjectName("lbl_addMembersMenu_create"); } void AddMembersMenu::setupSearchLayout() { m_searchIconLabel = new QLabel(this); m_searchIconLabel->setPixmap(QPixmap(":/icons/ContactsMenu/search.png")); m_searchIconLabel->setFixedSize(32, 32); m_searchField = new QLineEdit(this); m_searchField->setPlaceholderText(tr("Search")); m_searchField->setObjectName("txt_addMembersMenu_search"); m_searchLayout = new QHBoxLayout; m_searchLayout->addWidget(m_searchIconLabel); m_searchLayout->addWidget(m_searchField); } void AddMembersMenu::setupContactsList() { Widgets::ContactsListDelegate* delegate = new Widgets::ContactsListDelegate(this); delegate->setEnableOutLine(true); m_contactsList = new QListView(this); m_contactsList->setItemDelegate(delegate); m_contactsList->setMouseTracking(true); m_contactsList->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); m_contactsList->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); m_contactsList->setResizeMode(QListView::Adjust); m_contactsList->setObjectName("lst_addMembersMenu_contacts"); int itemHeight = 60; m_contactsList->verticalScrollBar()->setSingleStep(itemHeight / 2); m_scrollBar->setRange(m_contactsList->verticalScrollBar()->minimum(), m_contactsList->verticalScrollBar()->maximum()); m_scrollBarOverlay->setRange(m_contactsList->verticalScrollBar()->minimum(), m_contactsList->verticalScrollBar()->maximum()); m_scrollBar->setPageStep(m_contactsList->height() + 60); } void AddMembersMenu::setupScrollBar() { m_scrollBar = new Widgets::ScrollBar(this); m_scrollBar->resize(m_scrollBar->sizeHint()); m_scrollBarOverlay = new Widgets::ScrollBarOverlay(this); m_scrollBarOverlay->resize(m_scrollBarOverlay->sizeHint()); } void AddMembersMenu::setupButtonsLayout() { m_cancelButton = new QPushButton(tr("Cancel"), this); m_cancelButton->setFixedSize(70, 30); m_cancelButton->setObjectName("btn_addMembersMenu_cancel"); m_createButton = new QPushButton(tr("Create"), this); m_createButton->setFixedSize(70, 30); m_createButton->setObjectName("btn_addMembersMenu_finalize"); m_buttonsLayout = new QHBoxLayout; m_buttonsLayout->setContentsMargins(5, 5, 5, 5); m_buttonsLayout->addStretch(); m_buttonsLayout->addWidget(m_cancelButton); m_buttonsLayout->addWidget(m_createButton); } void AddMembersMenu::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, &AddMembersMenu::onAnimatedFinished); } void AddMembersMenu::animateAddMembersMenu(bool show) { m_animation->setDirection(show ? QPropertyAnimation::Forward : QPropertyAnimation::Backward); if (!m_isAnimationRunning) { m_isAnimationRunning = true; this->show(); m_animation->start(); } } void AddMembersMenu::onAnimatedFinished() { m_isAnimationRunning = false; if (m_animation->direction() == QPropertyAnimation::Backward) { this->hide(); } emit animatedFinishedSignal(); } void AddMembersMenu::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 AddMembersMenu::connectSignals() { connect(m_cancelButton, &QPushButton::clicked, this, [this](){ emit cancelClickedSignal(); }); connect(m_contactsList->verticalScrollBar(), &QScrollBar::rangeChanged, m_scrollBar, &QScrollBar::setRange); connect(m_contactsList->verticalScrollBar(), &QScrollBar::valueChanged, m_scrollBar, &QScrollBar::setValue); connect(m_scrollBar, &QScrollBar::valueChanged, m_contactsList->verticalScrollBar(), &QScrollBar::setValue); connect(m_contactsList, &QAbstractItemView::clicked, this, [this](const QModelIndex& index) { bool isSelected = m_contactsList->model()->data(index, static_cast<int>(ContactRoles::isSelected)).toBool(); m_contactsList->model()->setData(index, !isSelected, static_cast<int>(ContactRoles::isSelected)); m_contactsList->update(); }); connect(m_createButton, &QPushButton::clicked, m_addMembersMenuProcess, &Processes::AddMembersMenuProcess::onClickedCreateButton); } } // namespace AddMembersMenu } // namespace Ui