TTKMusicPlayer  3.7.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musicbackgroundlistwidget.cpp
Go to the documentation of this file.
2 #include "musicextractwrapper.h"
3 #include "musictoastlabel.h"
4 #include "musicwidgetutils.h"
5 
6 #include <QMouseEvent>
7 
9  : QLabel(parent),
10  m_isSelected(false),
11  m_printMask(false),
12  m_selectedEnabled(true),
13  m_closeEnabled(false),
14  m_showNameEnabled(true)
15 {
16  setFixedSize(137, 100);
17  setCursor(Qt::PointingHandCursor);
18 }
19 
21 {
22  if(!m_path.isEmpty())
23  {
26  {
27  updatePixmap(image);
28  }
29  }
30 }
31 
33 {
34  m_imageInfo = image.m_item;
35  setPixmap(image.m_pix.scaled(size()));
36 }
37 
39 {
40  if(item.isValid() && m_imageInfo.isValid())
41  {
42  return item.m_name == m_imageInfo.m_name;
43  }
44  return false;
45 }
46 
48 {
49  m_isSelected = v;
50  update();
51 }
52 
54 {
56  update();
57 }
58 
60 {
61  m_closeEnabled = v;
62  update();
63 }
64 
66 {
68  update();
69 }
70 
72 {
73  Q_UNUSED(event);
74  if(m_closeEnabled && QRect(width() - 16 - 6, 6, 16, 16).contains(event->pos()))
75  {
76  Q_EMIT closeClicked(this);
77  }
78  else
79  {
80  Q_EMIT itemClicked(this);
81  }
82 }
83 
85 {
86  QLabel::leaveEvent(event);
87  m_printMask = false;
88  update();
89 }
90 
92 {
93  QLabel::enterEvent(event);
94  m_printMask = true;
95  update();
96 }
97 
98 void MusicBackgroundListItem::paintEvent(QPaintEvent *event)
99 {
100  QLabel::paintEvent(event);
101 
103  {
104  QPainter painter(this);
105  painter.drawPixmap(width() - 17, height() - 17, 17, 17, QPixmap(":/tiny/lb_selected"));
106  }
107 
108  if(m_printMask)
109  {
110  QPainter painter(this);
111  painter.fillRect(rect(), QColor(0, 0, 0, 155));
112 
113  QFont font = painter.font();
114  font.setPixelSize(13);
115  painter.setFont(font);
116 
117  painter.setPen(Qt::white);
119  {
120  painter.drawText((width() - TTK::Widget::fontTextWidth(painter.font(), m_name)) / 2, 32, m_name);
121  }
122 
123  QString v = QString::number(m_imageInfo.m_useCount);
124  painter.drawText((width() - TTK::Widget::fontTextWidth(painter.font(), v)) / 2, 50, v);
125  v = m_imageInfo.m_name;
126  painter.drawText((width() - TTK::Widget::fontTextWidth(painter.font(), v)) / 2, 68, v);
127 
128  if(m_closeEnabled)
129  {
130  QPainter painter(this);
131  painter.drawPixmap(width() - 18 - 4, 4, 18, 18, QPixmap(":/functions/btn_close_hover"));
132  }
133  }
134 }
135 
136 
138  : QWidget(parent),
139  m_type(CachedModule),
140  m_currentItem(nullptr)
141 {
142  m_gridLayout = new QGridLayout(this);
143  m_gridLayout->setAlignment(Qt::AlignLeft | Qt::AlignTop);
144  m_gridLayout->setContentsMargins(7, 0, 7, 0);
145  setLayout(m_gridLayout);
146 }
147 
149 {
150  clearItems();
151  delete m_gridLayout;
152 }
153 
155 {
157  {
158  if(item->fileName() == name)
159  {
160  item->setSelected(true);
161  m_currentItem = item;
162  break;
163  }
164  }
165 }
166 
168 {
170  {
171  item->setSelected(false);
172  }
173 }
174 
176 {
177  qDeleteAll(m_items);
178  m_items.clear();
179  m_currentItem = nullptr;
180 }
181 
182 void MusicBackgroundListWidget::addCellItem(const QString &icon, bool state)
183 {
185  item->setCloseEnabled(state);
186  item->setPixmap(QPixmap(icon).scaled(item->size()));
187 
189  connect(item, SIGNAL(closeClicked(MusicBackgroundListItem*)), SLOT(itemCloseClicked(MusicBackgroundListItem*)));
190  m_gridLayout->addWidget(item, m_items.count() / MIN_ITEM_COUNT, m_items.count() % MIN_ITEM_COUNT, Qt::AlignLeft | Qt::AlignTop);
191  m_items << item;
192 }
193 
194 void MusicBackgroundListWidget::addCellItem(const QString &name, const QString &path, bool state)
195 {
197  item->setCloseEnabled(state);
198  item->setFileName(name);
199  item->setFilePath(path);
200  item->updatePixmap();
201 
203  connect(item, SIGNAL(closeClicked(MusicBackgroundListItem*)), SLOT(itemCloseClicked(MusicBackgroundListItem*)));
204  m_gridLayout->addWidget(item, m_items.count() / MIN_ITEM_COUNT, m_items.count() % MIN_ITEM_COUNT, Qt::AlignLeft | Qt::AlignTop);
205  m_items << item;
206 }
207 
208 void MusicBackgroundListWidget::updateItem(const MusicBackgroundImage &image, const QString &path)
209 {
211  {
212  if(item->fileName().isEmpty())
213  {
214  item->setShowNameEnabled(false);
215  item->setSelectEnabled(false);
216  item->setFileName(path);
217  item->updatePixmap(image);
218  break;
219  }
220  }
221 }
222 
223 bool MusicBackgroundListWidget::contains(const QString &name) const
224 {
226  {
227  if(item->fileName() == name)
228  {
229  return true;
230  }
231  }
232 
233  return false;
234 }
235 
237 {
239  {
240  if(item->contains(image.m_item))
241  {
242  return true;
243  }
244  }
245 
246  return false;
247 }
248 
250 {
251  for(int i = 0; i < m_items.count(); ++i)
252  {
253  if(m_items[i] == item)
254  {
255  return i;
256  }
257  }
258 
259  return -1;
260 }
261 
263 {
265  {
266  if(item->fileName() == name)
267  {
268  return item;
269  }
270  }
271 
272  return nullptr;
273 }
274 
276 {
278  {
279  if(item->contains(image.m_item))
280  {
281  return item;
282  }
283  }
284 
285  return nullptr;
286 }
287 
289 {
290  if(!m_items.isEmpty())
291  {
292  currentItemClicked(m_items.back());
293  }
294 }
295 
297 {
298  if(m_items.count() == 1)
299  {
300  MusicToastLabel::popup(tr("Last one item can not be deleted"));
301  return;
302  }
303 
304  const int index = find(item);
305  const int cIndex = find(m_currentItem);
306  QFile::remove(item->filePath());
307  m_gridLayout->removeWidget(item);
308  m_items.takeAt(index)->deleteLater();
309 
310  if(index == cIndex)
311  {
312  m_currentItem = nullptr;
313  if(!m_items.isEmpty())
314  {
315  currentItemClicked(m_items[index == 0 ? 0 : index - 1]);
316  }
317  }
318 
319  for(int i = index; i < m_items.count(); ++i)
320  {
321  m_gridLayout->addWidget(m_items[i], i / MIN_ITEM_COUNT, i % MIN_ITEM_COUNT, Qt::AlignLeft | Qt::AlignTop);
322  }
323 }
324 
326 {
327  if(m_currentItem)
328  {
329  m_currentItem->setSelected(false);
330  }
331 
332  m_currentItem = item;
333  m_currentItem->setSelected(true);
334  Q_EMIT itemClicked(m_type, item->fileName());
335 }
#define QtEnterEvent
Event enter.
Definition: ttkqtcompat.h:160
virtual void paintEvent(QPaintEvent *event) overridefinal
MusicBackgroundListItem * m_currentItem
QList< MusicBackgroundListItem * > m_items
MusicBackgroundListItem(QWidget *parent=nullptr)
voidpf void uLong size
Definition: ioapi.h:136
The class of the background list item.
void addCellItem(const QString &icon, bool state)
void closeClicked(MusicBackgroundListItem *item)
virtual void mousePressEvent(QMouseEvent *event) overridefinal
static void popup(const QString &text)
void setFilePath(const QString &path)
virtual void enterEvent(QtEnterEvent *event) overridefinal
#define qAsConst
Definition: ttkqtglobal.h:53
The class of the skin backgroud image.
const char * name
Definition: http_parser.c:458
void updateItem(const MusicBackgroundImage &image, const QString &path)
void itemClicked(int type, const QString &name)
MusicBackgroundListWidget(QWidget *parent=nullptr)
The class of the skin item.
void setFileName(const QString &name)
bool contains(const QString &name) const
void itemClicked(MusicBackgroundListItem *item)
bool contains(const MusicSkinItem &item) const
int find(MusicBackgroundListItem *item) const
TTK_MODULE_EXPORT int fontTextWidth(const QFont &font, const QString &text)
static bool outputSkin(MusicBackgroundImage *image, const QString &input)
#define MIN_ITEM_COUNT
void setCurrentItemName(const QString &name)
virtual void leaveEvent(QEvent *event) overridefinal
state
Definition: http_parser.c:279
void currentItemClicked(MusicBackgroundListItem *item)
void itemCloseClicked(MusicBackgroundListItem *item)