TTKMusicPlayer  4.3.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musicartistlistquerywidget.cpp
Go to the documentation of this file.
4 #include "musicpagequerywidget.h"
5 #include "musicrightareawidget.h"
6 #include "ttkclickedgroup.h"
7 #include "musicqueryitemwidget.h"
8 
11  m_initialized(false),
12  m_categoryChanged(false),
13  m_gridLayout(nullptr),
14  m_pageQueryWidget(nullptr),
15  m_categoryButton(nullptr)
16 {
17  m_container->show();
18  layout()->removeWidget(m_mainWidget);
19  layout()->addWidget(m_container);
20  m_container->addWidget(m_mainWidget);
21 
22  m_networkRequest = G_DOWNLOAD_QUERY_PTR->makeArtistListRequest(this);
24 }
25 
27 {
28  delete m_gridLayout;
29  delete m_categoryButton;
30  delete m_pageQueryWidget;
31 }
32 
34 {
37 }
38 
40 {
41  setCurrentValue(id);
42 }
43 
45 {
46  if(m_resizeWidgets.isEmpty() || !m_gridLayout)
47  {
48  return;
49  }
50 
51  for(const Data &data : qAsConst(m_resizeWidgets))
52  {
53  m_gridLayout->removeWidget(data.m_label);
54  }
55 
57  const int lineNumber = (QUERY_WIDGET_WIDTH - lineSize / 2) / lineSize;
58  for(int i = 0; i < m_resizeWidgets.count(); ++i)
59  {
60  m_gridLayout->addWidget(m_resizeWidgets[i].m_label, i / lineNumber, i % lineNumber, Qt::AlignCenter);
61  }
62 }
63 
65 {
66  if(!m_initialized)
67  {
68  delete m_statusLabel;
69  m_statusLabel = nullptr;
70 
71  m_container->removeWidget(m_mainWidget);
72  QScrollArea *scrollArea = new QScrollArea(this);
74  m_container->addWidget(scrollArea);
75 
76  m_initialized = true;
77  QVBoxLayout *mainLayout = TTKObjectCast(QVBoxLayout*, m_mainWidget->layout());
78  QWidget *containTopWidget = new QWidget(m_mainWidget);
79  QVBoxLayout *containTopLayout = new QVBoxLayout(containTopWidget);
80  containTopLayout->setContentsMargins(30, 0, 30, 0);
81 
84  containTopLayout->addWidget(m_categoryButton);
85  //
86  QWidget *containNumberWidget = new QWidget(containTopWidget);
87  QHBoxLayout *containNumberLayout = new QHBoxLayout(containNumberWidget);
88 #ifdef Q_OS_WIN
89  containNumberLayout->setSpacing(10);
90 #endif
91  TTKClickedGroup *clickedGroup = new TTKClickedGroup(this);
92  connect(clickedGroup, SIGNAL(clicked(int)), SLOT(numberButtonClicked(int)));
93 
94  for(int i = -1; i < 27; ++i)
95  {
96  TTKClickedLabel *label = new TTKClickedLabel(QString(TTKStaticCast(char, i + 65)), containNumberWidget);
97  label->setStyleSheet(QString("QLabel::hover{ %1 } QLabel{ %2 }").arg(TTK::UI::ColorStyle07, TTK::UI::ColorStyle08));
98 
99  if(i == -1)
100  {
101  label->setText(tr("Hot"));
102  }
103  else if(i == 26)
104  {
105  label->setText(tr("#"));
106  }
107 
108  clickedGroup->addWidget(label);
109  containNumberLayout->addWidget(label);
110  }
111 
112  containNumberWidget->setLayout(containNumberLayout);
113  containTopLayout->addWidget(containNumberWidget);
114  containTopWidget->setLayout(containTopLayout);
115 
116  QFrame *line = new QFrame(m_mainWidget);
117  line->setFrameShape(QFrame::HLine);
118  line->setStyleSheet(TTK::UI::ColorStyle12);
119 
120  QWidget *containWidget = new QWidget(m_mainWidget);
121  m_gridLayout = new QGridLayout(containWidget);
122  m_gridLayout->setVerticalSpacing(15);
123  containWidget->setLayout(m_gridLayout);
124 
125  mainLayout->addWidget(containTopWidget);
126  mainLayout->addWidget(line);
127  mainLayout->addWidget(containWidget);
128 
130  connect(m_pageQueryWidget, SIGNAL(clicked(int)), SLOT(buttonClicked(int)));
131 
133  mainLayout->addStretch(1);
134  }
135 
137  {
138  m_categoryChanged = false;
140  }
141 
144  label->setResultDataItem(item);
145 
146  const int lineSize = MusicTextQueryItemWidget::LINE_SPACING_SIZE;
147  const int lineNumber = (QUERY_WIDGET_WIDTH - lineSize / 2) / lineSize;
148  m_gridLayout->addWidget(label, m_resizeWidgets.count() / lineNumber, m_resizeWidgets.count() % lineNumber, Qt::AlignCenter);
149  m_resizeWidgets.append({label, label->font()});
150 }
151 
153 {
155 }
156 
158 {
159  if(m_categoryButton)
160  {
161  m_value.clear();
162  m_categoryId = category.m_key;
163 
164  m_categoryButton->setText(category.m_value);
166 
168  }
169 }
170 
172 {
176 }
177 
179 {
181  m_categoryChanged = true;
182  m_networkRequest->startToSearch(QString("%1%2%3").arg(m_categoryId, TTK_SPLITER).arg(index));
183 }
static MusicRightAreaWidget * instance()
MusicPageQueryWidget * m_pageQueryWidget
#define TTKStaticCast(x, y)
Definition: ttkglobal.h:231
virtual void resizeGeometry() overridefinal
The class of the search result data item.
MusicArtistListQueryWidget(QWidget *parent=nullptr)
int pageTotalSize() const noexcept
void setResultDataItem(const MusicResultDataItem &item)
#define TTK_SPLITER
Definition: ttkglobal.h:275
virtual void setCurrentValue(const QString &value)
The class of the label widget that can click.
static const QString ColorStyle12
Definition: musicuiobject.h:70
static constexpr int LINE_SPACING_SIZE
void setCategory(const QString &server, QObject *obj)
void addWidget(QWidget *widget, int id=-1)
#define qAsConst
Definition: ttkqtglobal.h:57
void showArtistFound(const QString &text, const QString &id)
#define TTK_NORMAL_LEVEL
Definition: ttkglobal.h:333
void categoryChanged(const MusicResultsCategoryItem &category)
The class of the page query widget.
virtual void startToPage(int offset)
void page(int index, int total)
MusicArtistListQueryCategoryPopWidget * m_categoryButton
static const QString ColorStyle08
Definition: musicuiobject.h:58
TTK_MODULE_EXPORT void generateVScrollAreaStyle(QWidget *widget, QWidget *parent, bool background=true)
The class of the text query item widget.
void currentItemClicked(const MusicResultDataItem &item)
The class of the item query widget base.
static const QString ColorStyle07
Definition: musicuiobject.h:55
virtual void setCurrentKey(const QString &id) overridefinal
The class of the results category item.
virtual void setCurrentValue(const QString &value) overridefinal
QWidget * createPageWidget(QWidget *parent, int total)
void createArtistListItem(const MusicResultDataItem &item)
MusicAbstractQueryRequest * m_networkRequest
#define G_DOWNLOAD_QUERY_PTR
#define QUERY_WIDGET_WIDTH
virtual void startToSearch(const QString &value)=0
The class of the artist list query category pop widget.
The class of the label widget click group mapper.
#define TTKObjectCast(x, y)
Definition: ttkqtglobal.h:82
QString queryServer() const noexcept