TTKMusicPlayer  3.7.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 
28  G_CONNECTION_PTR->setValue(className(), this);
29 }
30 
32 {
33  G_CONNECTION_PTR->removeValue(this);
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(totalHeight());
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 
81  G_CONNECTION_PTR->setValue(className(), this);
82 }
83 
85 {
86  G_CONNECTION_PTR->removeValue(this);
87 }
88 
90 {
91  const int count = rowCount() + 1;
92  setRowCount(count);
93 
94  MusicSong record;
95  record.setName(item.m_dataItem.m_name);
96  record.setPath(item.m_path);
98 
99  addCellItem(count - 1, record);
100 }
101 
103 {
104  if(!isValid())
105  {
106  MusicToastLabel::popup(tr("Please select one item first"));
107  return;
108  }
109 
110  QTableWidgetItem *it = item(currentRow(), 0);
111  if(it == nullptr)
112  {
113  return;
114  }
115 
116  const QString data(it->data(TTK_DATA_ROLE).toString());
117  if(!data.isEmpty())
118  {
119  Q_EMIT reuploadFilesToServer({data});
120  }
121 }
122 
124 {
125  if(!isValid())
126  {
127  MusicToastLabel::popup(tr("Please select one item first"));
128  return;
129  }
130 
131  QStringList datas;
132  for(const int index : selectedIndexList())
133  {
134  QTableWidgetItem *it = item(index, 0);
135  if(it == nullptr)
136  {
137  continue;
138  }
139 
140  const QString data(it->data(TTK_DATA_ROLE).toString());
141  if(!data.isEmpty())
142  {
143  datas << data;
144  }
145  }
146 
147  if(!datas.isEmpty())
148  {
149  Q_EMIT reuploadFilesToServer(datas);
150  }
151 }
152 
154 {
155  QHeaderView *headerView = horizontalHeader();
156  QTableWidgetItem *item = new QTableWidgetItem;
157  item->setData(TTK_DATA_ROLE, record.path());
158  setItem(index, 0, item);
159 
160  item = new QTableWidgetItem;
161  item->setToolTip(record.name());
162  item->setText(TTK::Widget::elidedText(font(), item->toolTip(), Qt::ElideRight, headerView->sectionSize(1) - 20));
163  item->setForeground(QColor(TTK::UI::Color01));
164  QtItemSetTextAlignment(item, Qt::AlignLeft | Qt::AlignVCenter);
165  setItem(index, 1, item);
166 
167  item = new QTableWidgetItem(record.sizeStr());
168  item->setForeground(QColor(TTK::UI::Color01));
169  QtItemSetTextAlignment(item, Qt::AlignRight | Qt::AlignVCenter);
170  item->setData(TTK_TIME_ROLE, record.addTimeStr());
171  setItem(index, 2, item);
172 
173  setFixedHeight(totalHeight());
174 }
175 
176 void MusicCloudUploadTableWidget::contextMenuEvent(QContextMenuEvent *event)
177 {
178  Q_UNUSED(event);
179  QMenu menu(this);
180  menu.setStyleSheet(TTK::UI::MenuStyle02);
181 
182  const bool status = !(m_songs->isEmpty() || TTK::String::isNetworkUrl(currentSongPath()));
183  menu.addAction(tr("Song Info..."), this, SLOT(showFileInformation()))->setEnabled(status);
184  menu.addAction(QIcon(":/contextMenu/btn_local_file"), tr("Open File Dir"), this, SLOT(openFileDir()))->setEnabled(status);
185  menu.addSeparator();
186 
187  menu.addAction(QIcon(":/contextMenu/btn_delete"), tr("Delete"), this, SLOT(removeItemAt()))->setEnabled(status);
188  menu.addAction(tr("Delete All"), this, SLOT(clearItems()))->setEnabled(status);
189  menu.addSeparator();
190 
191  menu.addAction(tr("Reupload"), this, SLOT(reuploadFile()))->setEnabled(status);
192  menu.addAction(tr("Reupload All"), this, SLOT(reuploadFiles()))->setEnabled(status);
193  menu.addSeparator();
194  menu.exec(QCursor::pos());
195 }
QString sizeStr() const noexcept
Definition: musicsong.h:73
QString path() const noexcept
Definition: musicsong.h:90
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
#define G_CONNECTION_PTR
QSyncDataItem m_dataItem
void setName(const QString &n) noexcept
Definition: musicsong.h:78
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)
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:69
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)
QString name() const noexcept
Definition: musicsong.h:82
static const QString MenuStyle02
QString addTimeStr() const noexcept
Definition: musicsong.h:65
TTKIntList selectedIndexList() const
static constexpr unsigned int Color01
Color QRgb.
Definition: musicuiobject.h:32
The class of the music song info.
Definition: musicsong.h:28
void setPath(const QString &p) noexcept
Definition: musicsong.h:86
#define TTK_TIME_ROLE
void reuploadFilesToServer(const QStringList &items)
#define TTK_DATA_ROLE
TTK_MODULE_EXPORT bool isNetworkUrl(const QString &path)