TTKMusicPlayer  4.3.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musiccloudtablewidget.cpp
Go to the documentation of this file.
2 #include "musicconnectionpool.h"
3 #include "musicnumberutils.h"
4 #include "musictoastlabel.h"
5 
6 Q_DECLARE_METATYPE(MusicCloudDataItem)
7 
10 {
11  setColumnCount(4);
12 
13  QHeaderView *headerView = horizontalHeader();
14  headerView->resizeSection(0, 10);
15  headerView->resizeSection(1, 168);
16  headerView->resizeSection(2, 83);
17  headerView->resizeSection(3, 50);
18 
20  setItemDelegateForColumn(2, m_progressBarDelegate);
21  setSelectionMode(QAbstractItemView::ExtendedSelection);
22 
24  verticalScrollBar()->setStyleSheet(TTK::UI::ScrollBarStyle03);
25 
26  setFixedHeight(0);
27 
29 }
30 
32 {
34 }
35 
37 {
38  QHeaderView *headerView = horizontalHeader();
39  QTableWidgetItem *item = new QTableWidgetItem;
40  setItem(index, 0, item);
41 
42  item = new QTableWidgetItem;
43  item->setToolTip(record.name());
44  item->setText(TTK::Widget::elidedText(font(), item->toolTip(), Qt::ElideRight, headerView->sectionSize(1) - 20));
45  item->setForeground(QColor(TTK::UI::Color01));
46  QtItemSetTextAlignment(item, Qt::AlignLeft | Qt::AlignVCenter);
47  setItem(index, 1, item);
48 
49  item = new QTableWidgetItem;
50  item->setData(TTK_PROGRESS_ROLE, 100);
51  setItem(index, 2, item);
52 
53  item = new QTableWidgetItem(record.sizeStr());
54  item->setForeground(QColor(TTK::UI::Color01));
55  QtItemSetTextAlignment(item, Qt::AlignRight | Qt::AlignVCenter);
56  item->setData(TTK_TIME_ROLE, record.addTimeStr());
57  setItem(index, 3, item);
58 
59  setFixedHeight(totalRowHeight());
60 }
61 
62 
65 {
66  setColumnCount(3);
67 
68  QHeaderView *headerView = horizontalHeader();
69  headerView->resizeSection(0, 10);
70  headerView->resizeSection(1, 251);
71  headerView->resizeSection(2, 50);
72 
74  setSelectionMode(QAbstractItemView::ExtendedSelection);
75 
77  verticalScrollBar()->setStyleSheet(TTK::UI::ScrollBarStyle03);
78 
79  setFixedHeight(0);
80 
82 }
83 
85 {
87 }
88 
90 {
91  for(const MusicSong &song : *m_songs)
92  {
93  if(song.name() == item.m_data.m_name && song.size() == item.m_data.m_size)
94  {
95  return; // find the same one
96  }
97  }
98 
99  const int count = rowCount() + 1;
100  setRowCount(count);
101 
102  MusicSong record(item.m_path);
103  record.setName(item.m_data.m_name);
105  record.setAddTimeStr(QString::number(TTKDateTime::currentTimestamp()));
106  m_songs->append(record);
107 
108  addCellItem(count - 1, record);
110 }
111 
113 {
114  if(!isValid())
115  {
116  MusicToastLabel::popup(tr("Please select one item first"));
117  return;
118  }
119 
120  QTableWidgetItem *it = item(currentRow(), 0);
121  if(it == nullptr)
122  {
123  return;
124  }
125 
126  const QString data(it->data(TTK_DATA_ROLE).toString());
127  if(!data.isEmpty())
128  {
129  Q_EMIT reuploadFilesToServer({data});
130  }
131 }
132 
134 {
135  if(!isValid())
136  {
137  MusicToastLabel::popup(tr("Please select one item first"));
138  return;
139  }
140 
141  QStringList datas;
142  for(const int row : selectedRows())
143  {
144  QTableWidgetItem *it = item(row, 0);
145  if(it == nullptr)
146  {
147  continue;
148  }
149 
150  const QString data(it->data(TTK_DATA_ROLE).toString());
151  if(!data.isEmpty())
152  {
153  datas << data;
154  }
155  }
156 
157  if(!datas.isEmpty())
158  {
159  Q_EMIT reuploadFilesToServer(datas);
160  }
161 }
162 
164 {
165  QHeaderView *headerView = horizontalHeader();
166  QTableWidgetItem *item = new QTableWidgetItem;
167  item->setData(TTK_DATA_ROLE, record.path());
168  setItem(index, 0, item);
169 
170  item = new QTableWidgetItem;
171  item->setToolTip(record.name());
172  item->setText(TTK::Widget::elidedText(font(), item->toolTip(), Qt::ElideRight, headerView->sectionSize(1) - 20));
173  item->setForeground(QColor(TTK::UI::Color01));
174  QtItemSetTextAlignment(item, Qt::AlignLeft | Qt::AlignVCenter);
175  setItem(index, 1, item);
176 
177  item = new QTableWidgetItem(record.sizeStr());
178  item->setForeground(QColor(TTK::UI::Color01));
179  QtItemSetTextAlignment(item, Qt::AlignRight | Qt::AlignVCenter);
180  item->setData(TTK_TIME_ROLE, record.addTimeStr());
181  setItem(index, 2, item);
182 
183  setFixedHeight(totalRowHeight());
184 }
185 
186 void MusicCloudUploadTableWidget::contextMenuEvent(QContextMenuEvent *event)
187 {
188  Q_UNUSED(event);
189  QMenu menu(this);
190  menu.setStyleSheet(TTK::UI::MenuStyle02);
191 
192  const bool status = !(m_songs->isEmpty() || TTK::String::isNetworkUrl(currentSongPath()));
193  menu.addAction(tr("Song Info..."), this, SLOT(showFileInformation()))->setEnabled(status);
194  menu.addAction(QIcon(":/contextMenu/btn_local_file"), tr("Open File Dir"), this, SLOT(openFileDir()))->setEnabled(status);
195  menu.addSeparator();
196 
197  menu.addAction(QIcon(":/contextMenu/btn_delete"), tr("Delete"), this, SLOT(removeItemAt()))->setEnabled(status);
198  menu.addAction(tr("Delete All"), this, SLOT(clearItems()))->setEnabled(status);
199  menu.addSeparator();
200 
201  menu.addAction(tr("Reupload"), this, SLOT(reuploadFile()))->setEnabled(status);
202  menu.addAction(tr("Reupload All"), this, SLOT(reuploadFiles()))->setEnabled(status);
203  menu.addSeparator();
204  menu.exec(QCursor::pos());
205 }
QString sizeStr() const noexcept
Definition: musicsong.h:72
static qint64 currentTimestamp() noexcept
Definition: ttktime.cpp:249
QString path() const noexcept
Definition: musicsong.h:89
The class of the cloud shared song download table widget.
virtual void contextMenuEvent(QContextMenuEvent *event) overridefinal
#define TTK_PROGRESS_ROLE
#define QtItemSetTextAlignment(p, a)
Item text alignment.
Definition: ttkqtcompat.h:45
TTK_MODULE_EXPORT QString sizeByteToLabel(qint64 size)
QString m_name
Definition: qsyncdataitem.h:29
void setName(const QString &n) noexcept
Definition: musicsong.h:77
static void popup(const QString &text)
virtual void addCellItem(int index, const MusicSong &record) overridefinal
static const QString ScrollBarStyle03
The class of the cloud data item.
void uploadFileError(const MusicCloudDataItem &item)
TTKIntList selectedRows() const
void setAddTimeStr(const QString &t) noexcept
Definition: musicsong.h:60
TTK_MODULE_EXPORT bool isNetworkUrl(const QString &path) noexcept
bool isValid() const noexcept
virtual void addCellItem(int index, const MusicSong &record) overridefinal
TTK_MODULE_EXPORT void setTransparent(QWidget *widget, int alpha)
void setSizeStr(const QString &s) noexcept
Definition: musicsong.h:68
TTK_MODULE_EXPORT QString elidedText(const QFont &font, const QString &text, Qt::TextElideMode mode, int width)
The class of the download abstract table widget.
MusicCloudUploadTableWidget(QWidget *parent=nullptr)
#define TTK_CONNECTIONPOOL_UNREGISTER(object)
QString name() const noexcept
Definition: musicsong.h:81
static const QString MenuStyle02
QString addTimeStr() const noexcept
Definition: musicsong.h:64
static constexpr unsigned int Color01
Color QRgb.
Definition: musicuiobject.h:32
The class of the music song info.
Definition: musicsong.h:28
#define TTK_TIME_ROLE
void reuploadFilesToServer(const QStringList &items)
#define TTK_DATA_ROLE
#define TTK_CONNECTIONPOOL_REGISTER(object)