/
Shymer123
/
Messenger
Обзор
Документация
Войти
/
Shymer123
/
Messenger
Код
Запросы
0
Задачи
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
UI_Client/SourceFiles/Ui/ContactsMenu/StartInterface/StartInterface.cpp
255 строк
9 KB
Shymer123
The code has been refactored, now there are no incomprehensible UserRole, etc.
19 май 2025, 13:22
19 май 2025, 13:22
f8b3525
Код
Авторство
О чём код?
#include "StartInterface.h" #include "DataModels/contact_data.h" #include "Processes/ContactsMenu/ContactsMenuProcess.h" #include "RequestResponseHandler/dependencyManager.h" #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 <QLabel> #include <QPushButton> #include <QListView> #include <QLineEdit> #include <QHBoxLayout> #include <QJsonObject> #include <QJsonArray> #include <QPropertyAnimation> #include <QStandardItemModel> #include <QPainter> namespace Ui { namespace ContactsMenu { StartInterfaceContactsMenu::StartInterfaceContactsMenu(QWidget* parent) : QWidget(parent) { setFixedSize(360, 590); setObjectName("wdg_startInterface_menu"); m_communicationHandler = DependencyManager::instance().communicationHandler(); m_userID = UserData::instance().getID(); m_userName = UserData::instance().getUserName(); setupFull(); } StartInterfaceContactsMenu::~StartInterfaceContactsMenu() { contactsMenuProcess->deleteLater(); } void StartInterfaceContactsMenu::setContactsMenuProcess(Processes::ContactsMenuProcess* contactsMenuProcess) { this->contactsMenuProcess = contactsMenuProcess; this->contactsMenuProcess->renderingContactList(m_userID, [this]() { connectSignals(); m_scrollBar->raise(); m_scrollBarOverlay->raise(); }); } void StartInterfaceContactsMenu::paintEvent(QPaintEvent* event) { Q_UNUSED(event); QStyleOption opt; opt.initFrom(this); QPainter p(this); style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); } void StartInterfaceContactsMenu::resizeEvent(QResizeEvent* event) { if(m_scrollBar && m_scrollBarOverlay) { m_scrollBar->setGeometry(width() - m_scrollBar->width() - 7, 80, m_scrollBar->width(), height() - 140); m_scrollBarOverlay->setGeometry(width() - m_scrollBar->width() - 7, 80, m_scrollBar->width(), height() - 140); } QWidget::resizeEvent(event); } void StartInterfaceContactsMenu::setupFull() { setupHeader(); setupSearchLayout(); setupScrollBar(); setupContactsList(); setupButtonsLayout(); setupAnimation(); QVBoxLayout* vMainLayout = new QVBoxLayout; vMainLayout->addWidget(m_headerLabel); vMainLayout->addLayout(m_searchLayout); vMainLayout->addWidget(m_contactsList); vMainLayout->addLayout(m_buttonsLayout); vMainLayout->setContentsMargins(0, 0, 0, 0); vMainLayout->setSpacing(0); setLayout(vMainLayout); addContactWidget = new AddContact(parentWidget()); addContactWidget->hide(); } void StartInterfaceContactsMenu::setupHeader() { m_headerLabel = new QLabel(tr("Contacts"), this); m_headerLabel->setObjectName("lbl_startInterface_header"); } void StartInterfaceContactsMenu::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_startInterface_search"); m_searchLayout = new QHBoxLayout; m_searchLayout->addWidget(m_searchIconLabel); m_searchLayout->addWidget(m_searchField); } void StartInterfaceContactsMenu::setupContactsList() { m_contactsList = new QListView(this); m_contactsList->setItemDelegate(new Widgets::ContactsListDelegate()); m_contactsList->setMouseTracking(true); m_contactsList->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); m_contactsList->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); m_contactsList->setResizeMode(QListView::Adjust); m_contactsList->setObjectName("lst_startInterface_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 StartInterfaceContactsMenu::setupScrollBar() { m_scrollBarOverlay = new Widgets::ScrollBarOverlay(this); m_scrollBar = new Widgets::ScrollBar(this); m_scrollBarOverlay->resize(m_scrollBarOverlay->sizeHint()); m_scrollBar->resize(m_scrollBar->sizeHint()); m_scrollBar->show(); m_scrollBarOverlay->show(); } void StartInterfaceContactsMenu::setupButtonsLayout() { m_addContactButton = new QPushButton(tr("Add contact"), this); m_addContactButton->setObjectName("btn_startInterface_add_contact"); m_closeButton = new QPushButton(tr("Close"), this); m_closeButton->setObjectName("btn_startInterface_close"); m_buttonsLayout = new QHBoxLayout; m_buttonsLayout->addWidget(m_addContactButton); m_buttonsLayout->addStretch(); m_buttonsLayout->addWidget(m_closeButton); m_buttonsLayout->setContentsMargins(5, 5, 5, 5); } void StartInterfaceContactsMenu::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, &StartInterfaceContactsMenu::onAnimationFinished); } void StartInterfaceContactsMenu::animateContactsMenu(bool show) { m_animation->setDirection(show ? QPropertyAnimation::Forward : QPropertyAnimation::Backward); if (!m_isAnimationRunning) { m_isAnimationRunning = true; this->show(); m_animation->start(); } } void StartInterfaceContactsMenu::onAnimationFinished() { m_isAnimationRunning = false; if (m_animation->direction() == QPropertyAnimation::Backward) { this->hide(); this->deleteLater(); } emit animatedFinishedSignal(); } void StartInterfaceContactsMenu::updateGeometry() { this->setGeometry(parentWidget()->width() / 2 - 150, parentWidget()->height() / 2 - 270, this->width(), this->height()); 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(), parentWidget()->height())); } void StartInterfaceContactsMenu::connectSignals() { connect(m_closeButton, &QPushButton::clicked, this, &StartInterfaceContactsMenu::onClickedClose); connect(m_addContactButton, &QPushButton::clicked, this, &StartInterfaceContactsMenu::onClickedAddContact); 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) { QString contactName = m_contactsList->model()->data(index, static_cast<int>(ContactRoles::Name)).toString(); emit clickedElementContactList(contactName); }); } void StartInterfaceContactsMenu::onClickedClose() { emit clickedCloseSignal(); } void StartInterfaceContactsMenu::onClickedAddContact() { hide(); addContactWidget->setGeometry(this->geometry()); addContactWidget->show(); connect(addContactWidget, &AddContact::clickedCancelSignal, this, &StartInterfaceContactsMenu::onClickedCloseInAddContact, Qt::ConnectionType::UniqueConnection); } void StartInterfaceContactsMenu::onClickedCloseInAddContact() { addContactWidget->hide(); this->setGeometry(addContactWidget->geometry()); this->show(); contactsMenuProcess->renderingContactList(m_userID, [](){}); } AddContact* StartInterfaceContactsMenu::getAddContactWidget() { return addContactWidget; } QListView* StartInterfaceContactsMenu::getContactListWidget() const { return m_contactsList; } } // namespace ContactsMenu } // namespace Ui