TTKMusicPlayer  4.3.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musicplaylistquerywidget.cpp
Go to the documentation of this file.
2 #include "musicqueryitemwidget.h"
3 #include "musicpagequerywidget.h"
8 
11  m_initialized(false),
12  m_categoryChanged(false),
13  m_gridLayout(nullptr),
14  m_pageQueryWidget(nullptr),
15  m_infoWidget(nullptr),
16  m_categoryButton(nullptr)
17 {
18  m_container->show();
19  layout()->removeWidget(m_mainWidget);
20  layout()->addWidget(m_container);
21  m_container->addWidget(m_mainWidget);
22 
23  m_networkRequest = G_DOWNLOAD_QUERY_PTR->makePlaylistRequest(this);
25 }
26 
28 {
29  delete m_infoWidget;
30  delete m_gridLayout;
31  delete m_categoryButton;
32  delete m_pageQueryWidget;
33 }
34 
36 {
39 }
40 
42 {
45 }
46 
48 {
50  item.m_id = id;
51  currentItemClicked(item, true);
52 }
53 
55 {
56  if(m_infoWidget)
57  {
59  }
60 
61  if(m_resizeWidgets.isEmpty() || !m_gridLayout)
62  {
63  return;
64  }
65 
66  for(const Data &data : qAsConst(m_resizeWidgets))
67  {
68  m_gridLayout->removeWidget(data.m_label);
69  }
70 
72  const int lineNumber = (QUERY_WIDGET_WIDTH - lineSize / 2) / lineSize;
73  for(int i = 0; i < m_resizeWidgets.count(); ++i)
74  {
75  m_gridLayout->addWidget(m_resizeWidgets[i].m_label, i / lineNumber, i % lineNumber, Qt::AlignLeft);
76  }
77 }
78 
80 {
81  if(!m_initialized)
82  {
83  delete m_statusLabel;
84  m_statusLabel = nullptr;
85 
86  m_container->removeWidget(m_mainWidget);
87  QScrollArea *scrollArea = new QScrollArea(this);
89  m_container->addWidget(scrollArea);
90 
91  m_initialized = true;
92  QVBoxLayout *mainLayout = TTKObjectCast(QVBoxLayout*, m_mainWidget->layout());
93  QWidget *containTopWidget = new QWidget(m_mainWidget);
94  QHBoxLayout *containTopLayout = new QHBoxLayout(containTopWidget);
95  containTopLayout->setContentsMargins(10, 0, 10, 0);
96 
99  containTopLayout->addWidget(m_categoryButton);
100  containTopLayout->addStretch(1);
101 
102  const QStringList titles{tr("Recommend"), tr("Top"), tr("Hot"), tr("New")};
103  for(const QString &data : qAsConst(titles))
104  {
105  QFrame *hline = new QFrame(containTopWidget);
106  hline->setFrameShape(QFrame::VLine);
107  hline->setStyleSheet(TTK::UI::ColorStyle12);
108  containTopLayout->addWidget(new QLabel(data, containTopWidget));
109  containTopLayout->addWidget(hline);
110  }
111  containTopWidget->setLayout(containTopLayout);
112 
113  QFrame *line = new QFrame(m_mainWidget);
114  line->setFrameShape(QFrame::HLine);
115  line->setStyleSheet(TTK::UI::ColorStyle12);
116 
117  QWidget *containWidget = new QWidget(m_mainWidget);
118  m_gridLayout = new QGridLayout(containWidget);
119  m_gridLayout->setVerticalSpacing(20);
120  containWidget->setLayout(m_gridLayout);
121 
122  mainLayout->addWidget(containTopWidget);
123  mainLayout->addWidget(line);
124  mainLayout->addWidget(containWidget);
125 
127  connect(m_pageQueryWidget, SIGNAL(clicked(int)), SLOT(buttonClicked(int)));
128 
130  mainLayout->addStretch(1);
131  }
132 
134  {
135  m_categoryChanged = false;
137  }
138 
141  label->setShowTime(false);
142  label->setShowCount(true);
143  label->setResultDataItem(item, G_DOWNLOAD_QUERY_PTR->makeCoverRequest(this));
144 
146  const int lineNumber = (QUERY_WIDGET_WIDTH - lineSize / 2) / lineSize;
147  m_gridLayout->addWidget(label, m_resizeWidgets.count() / lineNumber, m_resizeWidgets.count() % lineNumber, Qt::AlignLeft);
148  m_resizeWidgets.append({label, label->font()});
149 }
150 
152 {
153  delete m_infoWidget;
155 
157  MusicResultDataItem info(item);
158  if(info.isEmpty())
159  {
160  req->startToQueryInfo(info);
161  }
162 
164  m_infoWidget->setResultDataItem(info, single ? nullptr : this);
165  m_container->addWidget(m_infoWidget);
166  m_container->setCurrentIndex(1);
167 }
168 
170 {
171  m_container->setCurrentIndex(0);
172 }
173 
175 {
176  if(m_categoryButton)
177  {
178  m_value.clear();
179  m_categoryChanged = true;
180  m_categoryButton->setText(category.m_value);
182 
185  }
186 }
187 
189 {
193 }
The class of the search result data item.
void currentItemClicked(const MusicResultDataItem &item, bool single=false)
int pageTotalSize() const noexcept
The class of the playlist music found category pop widget.
static constexpr int LINE_SPACING_SIZE
virtual void setCurrentValue(const QString &value)
The class of the query playlist data from net.
virtual void startToQueryInfo(MusicResultDataItem &item)=0
static const QString ColorStyle12
Definition: musicuiobject.h:70
virtual void startToSearchByID(const QString &value)
virtual void resizeGeometry() overridefinal
MusicPlaylistQueryWidget(QWidget *parent=nullptr)
#define qAsConst
Definition: ttkqtglobal.h:57
void setShowTime(bool v) noexcept
void setCategory(const QString &server, QObject *obj)
The class of the page query widget.
virtual void startToPage(int offset)
void setCurrentCategory(const MusicResultsCategoryItem &category)
void page(int index, int total)
TTK_MODULE_EXPORT void generateVScrollAreaStyle(QWidget *widget, QWidget *parent, bool background=true)
void createPlaylistItem(const MusicResultDataItem &item)
MusicPlaylistFoundCategoryPopWidget * m_categoryButton
The class of the item query widget base.
void setResultDataItem(const MusicResultDataItem &item, MusicCoverRequest *cover)
void setShowCount(bool v) noexcept
virtual void resizeGeometry() overridefinal
The class of the results category item.
QWidget * createPageWidget(QWidget *parent, int total)
void categoryChanged(const MusicResultsCategoryItem &category)
void setResultDataItem(const MusicResultDataItem &item, QObject *obj)
virtual void setCurrentKey(const QString &id) overridefinal
virtual void setCurrentValue(const QString &value) overridefinal
MusicAbstractQueryRequest * m_networkRequest
MusicPlaylistQueryInfoWidget * m_infoWidget
#define G_DOWNLOAD_QUERY_PTR
#define QUERY_WIDGET_WIDTH
void setQueryInput(MusicAbstractQueryRequest *query)
MusicPageQueryWidget * m_pageQueryWidget
The class of the playlist music query info widget.
#define TTKObjectCast(x, y)
Definition: ttkqtglobal.h:82
QString queryServer() const noexcept
The class of the square query item widget.