/
Shymer123
/
Messenger
Обзор
Документация
Войти
/
Shymer123
/
Messenger
Код
Запросы
0
Задачи
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
UI_Client/SourceFiles/Ui/NavigationMenu/NavigationMenu.cpp
256 строк
7 KB
Shymer123
A lot of bugs related to the creation of dialogs and groups have been
26 мар 2025, 16:07
26 мар 2025, 16:07
6a8c3e4
Код
Авторство
О чём код?
#include "NavigationMenu.h" #include "Settings/SettingsManager.h" #include "Ui/Widgets/Toggles/ToggleButton/ToggleButton.h" #include "applicationStyle.h" #include <QVBoxLayout> #include <QStyleOption> #include <QPainter> #include <QLabel> #include <QPushButton> #include <QPropertyAnimation> namespace Ui { namespace NavigationMenu { NavigationMenu::NavigationMenu(QWidget* parent) : QWidget(parent) { setFixedWidth(250); setObjectName("wdg_navigationMenu_navigation_menu"); setup(); } NavigationMenu::~NavigationMenu() {} void NavigationMenu::paintEvent(QPaintEvent* event) { Q_UNUSED(event); QStyleOption opt; opt.initFrom(this); QPainter p(this); style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); } void NavigationMenu::setUserName(const QString& userName) { m_nameLabel->setText(userName); } void NavigationMenu::setup() { createUserNameSection(); createSeparatorSection(); createGroupSection(); createChannelSection(); createContactsSection(); createFavouritesSection(); createSettingsSection(); createNightModeSection(); createInfoLabelSection(); connectSignals(); setupAnimation(); QVBoxLayout* vLayout = new QVBoxLayout(this); vLayout->setSpacing(0); vLayout->setContentsMargins(0, 0, 0, 0); vLayout->addWidget(m_nameLabel); vLayout->addWidget(m_separator); vLayout->addWidget(m_createGroupButton); vLayout->addWidget(m_createChannelButton); vLayout->addWidget(m_createContactsButton); vLayout->addWidget(m_createFavouritesButton); vLayout->addWidget(m_createSettingsButton); vLayout->addWidget(m_createNightModeButton); QWidget* stretchWidget = new QWidget(this); stretchWidget->setObjectName("wdg_navigationMenu_stretch"); vLayout->addWidget(stretchWidget); vLayout->setStretch(vLayout->indexOf(stretchWidget), 1); vLayout->addWidget(m_infoLabel); } void NavigationMenu::createUserNameSection() { m_nameLabel = new QLabel(this); m_nameLabel->setAlignment(Qt::AlignTop | Qt::AlignHCenter); m_nameLabel->setObjectName("lbl_navigationMenu_name"); } void NavigationMenu::createGroupSection() { QPixmap pixmap(":/icons/NavigationMenu/createGroup.png"); m_createGroupButton = new QPushButton(tr("Create a group"), this); m_createGroupButton->setIcon(QIcon(pixmap)); m_createGroupButton->setIconSize(QSize(20, 20)); m_createGroupButton->setObjectName("btn_navigationMenu_create_group"); } void NavigationMenu::createSeparatorSection() { m_separator = new QFrame(this); m_separator->setFrameShape(QFrame::HLine); m_separator->setFrameShadow(QFrame::Sunken); m_separator->setFixedHeight(2); m_separator->setObjectName("frame_navigationMenu_separator"); } void NavigationMenu::createChannelSection() { QPixmap pixmap(":/icons/NavigationMenu/createChannel.png"); m_createChannelButton = new QPushButton(tr("Create a channel"), this); m_createChannelButton->setIcon(QIcon(pixmap)); m_createChannelButton->setIconSize(QSize(20, 20)); m_createChannelButton->setObjectName("btn_navigationMenu_create_channel"); } void NavigationMenu::createContactsSection() { QPixmap pixmap(":/icons/NavigationMenu/contacts.png"); m_createContactsButton = new QPushButton(tr("Contacts"), this); m_createContactsButton->setIcon(QIcon(pixmap)); m_createContactsButton->setIconSize(QSize(20, 20)); m_createContactsButton->setObjectName("btn_navigationMenu_create_contacts"); } void NavigationMenu::createFavouritesSection() { QPixmap pixmap(":/icons/NavigationMenu/favourites.png"); m_createFavouritesButton = new QPushButton(tr("Favourites"), this); m_createFavouritesButton->setIcon(QIcon(pixmap)); m_createFavouritesButton->setIconSize(QSize(20, 20)); m_createFavouritesButton->setObjectName("btn_navigationMenu_create_favourites"); } void NavigationMenu::createSettingsSection() { QPixmap pixmap(":/icons/NavigationMenu/settings.png"); m_createSettingsButton = new QPushButton(tr("Settings"), this); m_createSettingsButton->setIcon(QIcon(pixmap)); m_createSettingsButton->setIconSize(QSize(20, 20)); m_createSettingsButton->setObjectName("btn_navigationMenu_create_settings"); } void NavigationMenu::createNightModeSection() { QPixmap pixmap(":/icons/NavigationMenu/nightMode.png"); m_createNightModeButton = new Widgets::ToggleButton(tr("Night mode"), this); m_createNightModeButton->setIcon(QIcon(pixmap)); m_createNightModeButton->setIconSize(QSize(20, 20)); QString style = Settings::SettingsManager::instance().loadSetting<QString>("theme", "light"); if(style == "light") { m_createNightModeButton->setChecked(false); } else { m_createNightModeButton->setChecked(true); } } void NavigationMenu::createInfoLabelSection() { m_infoLabel = new QLabel(this); m_infoLabel->setText("LumenSync\nBy Shymer123"); m_infoLabel->setObjectName("lbl_navigationMenu_info"); } void NavigationMenu::setupAnimation() { m_animation = new QPropertyAnimation(this, "geometry"); m_animation->setDuration(200); m_animation->setStartValue(QRect(-this->width(), 0, this->width(), parentWidget()->height())); m_animation->setEndValue(QRect(0, 0, this->width(), parentWidget()->height())); hide(); connect(m_animation, &QPropertyAnimation::finished, this, &NavigationMenu::onAnimationFinished); } void NavigationMenu::animateNavigationMenu(bool show) { m_animation->setDirection(show ? QPropertyAnimation::Forward : QPropertyAnimation::Backward); if (!m_isAnimationRunning) { m_isAnimationRunning = true; this->show(); m_animation->start(); } } void NavigationMenu::onAnimationFinished() { m_isAnimationRunning = false; if (m_animation->direction() == QPropertyAnimation::Backward) { this->hide(); } } void NavigationMenu::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 NavigationMenu::connectSignals() { connect(m_createGroupButton, &QPushButton::clicked, this, &NavigationMenu::onClickedCreateGroup); connect(m_createChannelButton, &QPushButton::clicked, this, &NavigationMenu::onClickedCreateChannel); connect(m_createContactsButton, &QPushButton::clicked, this, &NavigationMenu::onClickedContacts); connect(m_createFavouritesButton, &QPushButton::clicked, this, &NavigationMenu::onClickedFavourites); connect(m_createSettingsButton, &QPushButton::clicked, this, &NavigationMenu::onClickedSettings); connect(m_createNightModeButton, &QPushButton::clicked, this, &NavigationMenu::onClickedNightMode); } void NavigationMenu::onClickedCreateGroup() { emit onClickedCreateGroupSignal(); } void NavigationMenu::onClickedCreateChannel() { emit onClickedCreateChannelSignal(); } void NavigationMenu::onClickedContacts() { emit onClickedContactsSignal(); } void NavigationMenu::onClickedFavourites() { emit onClickedFavouritesSignal(); } void NavigationMenu::onClickedSettings() { emit onClickedSettingsSignal(); } void NavigationMenu::onClickedNightMode() { if(m_createNightModeButton->isChecked()) { ApplicationStyle::instance().setNightMode(); } else { ApplicationStyle::instance().setLightMode(); } } } // namespace NavigationMenu } // namespace Ui