From a2872f64798742badf7724e50cd60698a074d4c9 Mon Sep 17 00:00:00 2001 From: Crylia Date: Thu, 21 Mar 2024 00:29:07 +0100 Subject: [PATCH] did main work on the page selector --- assets/icons/{songControl => }/home.svg | 0 assets/resources.qrc | 2 +- src/Public/Modules/PageNavigator/pages.cpp | 11 ++++ src/Public/Modules/PageNavigator/pages.h | 1 + .../PlaylistNavigator/PlaylistWidget.cpp | 3 ++ .../PlaylistNavigator/PlaylistWidget.h | 1 + src/Public/Tools/SvgToPixmap.hpp | 16 ++++++ .../Widgets/PageNavigator/PageNavigator.cpp | 54 +++++++++++++++++++ .../Widgets/PageNavigator/PageNavigator.h | 20 +++++++ .../Widgets/PageNavigator/SelectHandler.hpp | 54 +++++++++++++++++++ 10 files changed, 161 insertions(+), 1 deletion(-) rename assets/icons/{songControl => }/home.svg (100%) create mode 100644 src/Public/Tools/SvgToPixmap.hpp create mode 100644 src/Public/Widgets/PageNavigator/PageNavigator.cpp create mode 100644 src/Public/Widgets/PageNavigator/PageNavigator.h create mode 100644 src/Public/Widgets/PageNavigator/SelectHandler.hpp diff --git a/assets/icons/songControl/home.svg b/assets/icons/home.svg similarity index 100% rename from assets/icons/songControl/home.svg rename to assets/icons/home.svg diff --git a/assets/resources.qrc b/assets/resources.qrc index 26c4512..1c9cbad 100755 --- a/assets/resources.qrc +++ b/assets/resources.qrc @@ -14,7 +14,7 @@ icons/songControl/volume-off.svg icons/songControl/volume-medium.svg icons/songControl/arrow-expand.svg - icons/songControl/home.svg + icons/home.svg icons/songControl/magnify.svg diff --git a/src/Public/Modules/PageNavigator/pages.cpp b/src/Public/Modules/PageNavigator/pages.cpp index 2dd9a9c..a916f65 100755 --- a/src/Public/Modules/PageNavigator/pages.cpp +++ b/src/Public/Modules/PageNavigator/pages.cpp @@ -11,6 +11,17 @@ Pages::Pages(QWidget* parent) :QFrame(parent) { )"); this->setFixedSize(300, 180); + + QVBoxLayout* layout = new QVBoxLayout(this); + + PageNavigator* home = new PageNavigator("Home", ":icons/home.svg"); + PageNavigator* localFiles = new PageNavigator("Local Files", ":icons/home.svg"); + PageNavigator* playlist = new PageNavigator("Playlist", ":icons/songControl/magnify.svg"); + + + layout->addWidget(home); + layout->addWidget(localFiles); + layout->addWidget(playlist); } Pages::~Pages( ) { } diff --git a/src/Public/Modules/PageNavigator/pages.h b/src/Public/Modules/PageNavigator/pages.h index 7be1ca3..e9a98c0 100755 --- a/src/Public/Modules/PageNavigator/pages.h +++ b/src/Public/Modules/PageNavigator/pages.h @@ -2,6 +2,7 @@ #include #include +#include "../../Widgets/PageNavigator/PageNavigator.h" class Pages : public QFrame { diff --git a/src/Public/Modules/PlaylistNavigator/PlaylistWidget.cpp b/src/Public/Modules/PlaylistNavigator/PlaylistWidget.cpp index be0cd52..18d0d57 100755 --- a/src/Public/Modules/PlaylistNavigator/PlaylistWidget.cpp +++ b/src/Public/Modules/PlaylistNavigator/PlaylistWidget.cpp @@ -9,6 +9,9 @@ PlaylistWidget::PlaylistWidget(QWidget* parent) : QFrame(parent) { this->setFixedWidth(300); + QVBoxLayout* mainLayout = new QVBoxLayout(this); + mainLayout->addSpacing(10); + } PlaylistWidget::~PlaylistWidget( ) { } diff --git a/src/Public/Modules/PlaylistNavigator/PlaylistWidget.h b/src/Public/Modules/PlaylistNavigator/PlaylistWidget.h index 455a626..e90efe7 100755 --- a/src/Public/Modules/PlaylistNavigator/PlaylistWidget.h +++ b/src/Public/Modules/PlaylistNavigator/PlaylistWidget.h @@ -2,6 +2,7 @@ #include #include +#include class PlaylistWidget : public QFrame { diff --git a/src/Public/Tools/SvgToPixmap.hpp b/src/Public/Tools/SvgToPixmap.hpp new file mode 100644 index 0000000..417bd5c --- /dev/null +++ b/src/Public/Tools/SvgToPixmap.hpp @@ -0,0 +1,16 @@ +#pragma once + +#include +#include +#include +#include + +static QPixmap RenderSvg(QString path, int w, int h) { + QSvgRenderer renderer(path); + QPixmap pixmap(w, h); + pixmap.fill(Qt::transparent); + QPainter painter(&pixmap); + renderer.render(&painter); + + return pixmap; +} diff --git a/src/Public/Widgets/PageNavigator/PageNavigator.cpp b/src/Public/Widgets/PageNavigator/PageNavigator.cpp new file mode 100644 index 0000000..0d96fc8 --- /dev/null +++ b/src/Public/Widgets/PageNavigator/PageNavigator.cpp @@ -0,0 +1,54 @@ +#include "PageNavigator.h" +#include "SelectHandler.hpp" + +PageNavigator::PageNavigator(QString text, QString icon, QWidget* parent) + :m_text(new QLabel(text)), m_icon(new QLabel( )) { + + m_icon->setPixmap(icon); + + setObjectName("PageNavigator"); + setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + setStyleSheet(R"( + #PageNavigator{ + border: 4px solid #414141; + border-radius: 8px; + color: #E0E0E0; + } + )"); + + QFont font = m_text->font( ); + font.setPointSize(16); + font.setWeight(QFont::Bold); + m_text->setFont(font); + + QHBoxLayout* layout = new QHBoxLayout(this); + layout->addWidget(m_icon, 0, Qt::AlignLeft); + layout->addWidget(m_text, 1, Qt::AlignLeft); + + connect(this, &QPushButton::clicked, [this]( ) { + SelectHandler* sh = SelectHandler::GetInstance( ); + + sh->setSelected(this); + }); + +} + +void PageNavigator::unselect( ) { + setStyleSheet(R"( + #PageNavigator{ + border: 4px solid #414141; + border-radius: 6px; + color: #E0E0E0; + } + )"); +} + +void PageNavigator::select( ) { + setStyleSheet(R"( + #PageNavigator{ + border: 4px solid #81D4FA; + border-radius: 6px; + color: #E0E0E0; + } + )"); +} diff --git a/src/Public/Widgets/PageNavigator/PageNavigator.h b/src/Public/Widgets/PageNavigator/PageNavigator.h new file mode 100644 index 0000000..d19d869 --- /dev/null +++ b/src/Public/Widgets/PageNavigator/PageNavigator.h @@ -0,0 +1,20 @@ +#pragma once + +#include +#include +#include +#include +#include + +class PageNavigator :public QPushButton { + Q_OBJECT +private: + QLabel* m_text; + QLabel* m_icon; + +public: + PageNavigator(QString text, QString icon, QWidget* parent = nullptr); + + void unselect( ); + void select( ); +}; diff --git a/src/Public/Widgets/PageNavigator/SelectHandler.hpp b/src/Public/Widgets/PageNavigator/SelectHandler.hpp new file mode 100644 index 0000000..3c0a33a --- /dev/null +++ b/src/Public/Widgets/PageNavigator/SelectHandler.hpp @@ -0,0 +1,54 @@ +#pragma once + +#include +#include "PageNavigator.h" + +/* + Singleton to handle PageNavigator widget selects +*/ +class SelectHandler { +public: + static SelectHandler* GetInstance( ); + + ~SelectHandler( ) { } + SelectHandler(const SelectHandler&) = delete; + void operator=(const SelectHandler&) = delete; + + void setSelected(PageNavigator* newSelected); + + PageNavigator* getSelected( ); + +private: + SelectHandler( ) { } + + static SelectHandler* instance; + + PageNavigator* selected = nullptr; +}; + +SelectHandler* SelectHandler::instance = nullptr; + +SelectHandler* SelectHandler::GetInstance( ) { + if (instance == nullptr) + instance = new SelectHandler( ); + return instance; +} + +void SelectHandler::setSelected(PageNavigator* newSelected) { + if (!newSelected && (newSelected == selected)) + return; + + if (this->selected == nullptr) { + this->selected = newSelected; + newSelected->select( ); + return; + } + + selected->unselect( ); + newSelected->select( ); + this->selected = newSelected; +} + +PageNavigator* SelectHandler::getSelected( ) { + return selected; +}