TTKMusicPlayer  3.7.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.
3 #include "musictinyuiobject.h"
5 #include "musicpagequerywidget.h"
6 #include "musicrightareawidget.h"
7 #include "ttkclickedgroup.h"
8 
9 static constexpr int WIDTH_LABEL_SIZE = 150;
10 static constexpr int HEIGHT_LABEL_SIZE = 25;
11 static constexpr int LINE_SPACING_SIZE = 150;
12 
14  : TTKClickedLabel(parent)
15 {
16  setAlignment(Qt::AlignCenter);
17  setStyleSheet(TTK::UI::ColorStyle02);
18  setFixedSize(WIDTH_LABEL_SIZE, HEIGHT_LABEL_SIZE);
19 
20  connect(this, SIGNAL(clicked()), SLOT(currentItemClicked()));
21 }
22 
24 {
25  m_itemData = item;
26  setToolTip(item.m_name);
27  setText(TTK::Widget::elidedText(font(), toolTip(), Qt::ElideRight, WIDTH_LABEL_SIZE));
28 }
29 
31 {
33 }
34 
35 
36 
39  m_initialized(false),
40  m_categoryChanged(false),
41  m_gridLayout(nullptr),
42  m_pageQueryWidget(nullptr),
43  m_categoryButton(nullptr)
44 {
45  m_container->show();
46  layout()->removeWidget(m_mainWindow);
47  layout()->addWidget(m_container);
48  m_container->addWidget(m_mainWindow);
49 
50  m_networkRequest = G_DOWNLOAD_QUERY_PTR->makeArtistListRequest(this);
52 }
53 
55 {
56  delete m_gridLayout;
57  delete m_categoryButton;
58  delete m_pageQueryWidget;
59 }
60 
62 {
65 }
66 
68 {
69  setCurrentValue(id);
70 }
71 
73 {
74  if(!m_resizeWidgets.isEmpty() && m_gridLayout)
75  {
76  for(const TTKResizeWidget &widget : qAsConst(m_resizeWidgets))
77  {
78  m_gridLayout->removeWidget(widget.m_label);
79  }
80 
81  const int lineNumber = QUERY_WIDGET_WIDTH / LINE_SPACING_SIZE;
82  for(int i = 0; i < m_resizeWidgets.count(); ++i)
83  {
84  m_gridLayout->addWidget(m_resizeWidgets[i].m_label, i / lineNumber, i % lineNumber, Qt::AlignCenter);
85  }
86  }
87 }
88 
90 {
91  if(!m_initialized)
92  {
93  delete m_statusLabel;
94  m_statusLabel = nullptr;
95 
96  m_container->removeWidget(m_mainWindow);
97  QScrollArea *scrollArea = new QScrollArea(this);
99  m_container->addWidget(scrollArea);
100 
101  m_initialized = true;
102  QVBoxLayout *mainLayout = TTKObjectCast(QVBoxLayout*, m_mainWindow->layout());
103  QWidget *containTopWidget = new QWidget(m_mainWindow);
104  QVBoxLayout *containTopLayout = new QVBoxLayout(containTopWidget);
105  containTopLayout->setContentsMargins(30, 0, 30, 0);
108  containTopLayout->addWidget(m_categoryButton);
109  //
110  QWidget *containNumberWidget = new QWidget(containTopWidget);
111  QHBoxLayout *containNumberLayout = new QHBoxLayout(containNumberWidget);
112 #ifdef Q_OS_WIN
113  containNumberLayout->setSpacing(10);
114 #endif
115  TTKClickedGroup *clickedGroup = new TTKClickedGroup(this);
116  connect(clickedGroup, SIGNAL(clicked(int)), SLOT(numberButtonClicked(int)));
117 
118  for(int i = -1; i < 27; ++i)
119  {
120  TTKClickedLabel *label = new TTKClickedLabel(QString(TTKStaticCast(char, i + 65)), containNumberWidget);
121  label->setStyleSheet(QString("QLabel::hover{%1} QLabel{%2}").arg(TTK::UI::ColorStyle07, TTK::UI::ColorStyle08));
122 
123  if(i == -1)
124  {
125  label->setText(tr("Hot"));
126  }
127  else if(i == 26)
128  {
129  label->setText(tr("#"));
130  }
131 
132  clickedGroup->mapped(label);
133  containNumberLayout->addWidget(label);
134  }
135 
136  containNumberWidget->setLayout(containNumberLayout);
137  containTopLayout->addWidget(containNumberWidget);
138  containTopWidget->setLayout(containTopLayout);
139 
140  QFrame *line = new QFrame(m_mainWindow);
141  line->setFrameShape(QFrame::HLine);
142  line->setStyleSheet(TTK::UI::ColorStyle12);
143 
144  QWidget *containWidget = new QWidget(m_mainWindow);
145  m_gridLayout = new QGridLayout(containWidget);
146  m_gridLayout->setVerticalSpacing(15);
147  containWidget->setLayout(m_gridLayout);
148 
149  mainLayout->addWidget(containTopWidget);
150  mainLayout->addWidget(line);
151  mainLayout->addWidget(containWidget);
152 
154  connect(m_pageQueryWidget, SIGNAL(clicked(int)), SLOT(buttonClicked(int)));
155 
157  mainLayout->addStretch(1);
158  }
159 
161  {
162  m_categoryChanged = false;
164  }
165 
167  connect(label, SIGNAL(currentItemClicked(MusicResultDataItem)), SLOT(currentArtistListClicked(MusicResultDataItem)));
168  label->setResultDataItem(item);
169 
170  const int lineNumber = QUERY_WIDGET_WIDTH / LINE_SPACING_SIZE;
171  m_gridLayout->addWidget(label, m_resizeWidgets.count() / lineNumber, m_resizeWidgets.count() % lineNumber, Qt::AlignCenter);
172 
173  m_resizeWidgets.push_back({label, label->font()});
174 }
175 
177 {
179 }
180 
182 {
183  if(m_categoryButton)
184  {
185  m_value.clear();
186  m_categoryId = category.m_key;
187 
188  m_categoryButton->setText(category.m_value);
190 
192  }
193 }
194 
196 {
197  while(!m_resizeWidgets.isEmpty())
198  {
199  QWidget *w = m_resizeWidgets.takeLast().m_label;
200  m_gridLayout->removeWidget(w);
201  delete w;
202  }
203 
206 }
207 
209 {
210  while(!m_resizeWidgets.isEmpty())
211  {
212  QWidget *w = m_resizeWidgets.takeLast().m_label;
213  m_gridLayout->removeWidget(w);
214  delete w;
215  }
216 
217  m_categoryChanged = true;
218  m_networkRequest->startToSearch(QString("%1%2%3").arg(m_categoryId, TTK_SPLITER).arg(index));
219 }
static MusicRightAreaWidget * instance()
MusicPageQueryWidget * m_pageQueryWidget
#define TTKStaticCast(x, y)
Definition: ttkglobal.h:159
The class of the artist list music item widget.
The class of the search result data item.
MusicArtistListQueryWidget(QWidget *parent=nullptr)
int pageTotalSize() const noexcept
#define TTK_SPLITER
Definition: ttkglobal.h:199
virtual void setCurrentValue(const QString &value)
The class of the label widget that can click.
static constexpr int WIDTH_LABEL_SIZE
static const QString ColorStyle12
Definition: musicuiobject.h:70
void mapped(QWidget *widget)
void setCategory(const QString &server, QObject *obj)
MusicArtistListQueryItemWidget(QWidget *parent=nullptr)
#define qAsConst
Definition: ttkqtglobal.h:53
static const QString ColorStyle02
Definition: musicuiobject.h:40
#define TTK_NORMAL_LEVEL
Definition: ttkglobal.h:254
void categoryChanged(const MusicResultsCategoryItem &category)
virtual void resizeWidget() overridefinal
The class of the page query widget.
static constexpr int LINE_SPACING_SIZE
virtual void startToPage(int offset)
TTK_MODULE_EXPORT QString elidedText(const QFont &font, const QString &text, Qt::TextElideMode mode, int width)
void page(int index, int total)
MusicArtistListQueryCategoryPopWidget * m_categoryButton
static const QString ColorStyle08
Definition: musicuiobject.h:58
The class of the item query widget base.
virtual void setCurrentID(const QString &id) overridefinal
static const QString ColorStyle07
Definition: musicuiobject.h:55
TTK_MODULE_EXPORT void generateVScrollAreaFormat(QWidget *widget, QWidget *parent, bool background=true)
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)
void currentArtistListClicked(const MusicResultDataItem &item)
void artistSearchByID(const QString &id)
void setResultDataItem(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.
static constexpr int HEIGHT_LABEL_SIZE
The class of the label widget click group mapper.
#define TTKObjectCast(x, y)
Definition: ttkqtglobal.h:60