TTKMusicPlayer  4.2.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musicsongstoolboxwidget.cpp
Go to the documentation of this file.
2 #include "musicitemrenameedit.h"
3 #include "musicsettingmanager.h"
4 #include "musictinyuiobject.h"
5 #include "musicimageutils.h"
6 #include "musicapplication.h"
7 #include "musictopareawidget.h"
8 #include "musicwidgetutils.h"
9 #include "musicsong.h"
10 
11 MusicSongsToolBoxTopWidget::MusicSongsToolBoxTopWidget(int index, const QString &text, QWidget *parent)
12  : MusicFunctionToolBoxTopWidget(index, text, parent),
13  m_songSort(nullptr),
14  m_renameEdit(nullptr)
15 {
16  QPushButton *shareListButton = new QPushButton(this);
17  shareListButton->setToolTip(tr("Share Playlist"));
18  shareListButton->setStyleSheet(TTK::UI::TinyBtnShare);
19  shareListButton->setCursor(QCursor(Qt::PointingHandCursor));
20  shareListButton->setGeometry(265, 12, 16, 16);
21 
22  QPushButton *menuButton = new QPushButton(this);
23  menuButton->setToolTip(tr("Menu"));
24  menuButton->setStyleSheet(TTK::UI::TinyBtnListMenu);
25  menuButton->setCursor(QCursor(Qt::PointingHandCursor));
26  menuButton->setGeometry(290, 12, 16, 16);
27  connect(menuButton, SIGNAL(clicked()), SLOT(showMenu()));
28 
29 #ifdef Q_OS_UNIX
30  shareListButton->setFocusPolicy(Qt::NoFocus);
31  menuButton->setFocusPolicy(Qt::NoFocus);
32 #endif
33 }
34 
36 {
37  delete m_renameEdit;
38 }
39 
41 {
42  Q_EMIT deleteRowItem(m_index);
43 }
44 
46 {
47  Q_EMIT deleteAllItems(m_index);
48 }
49 
51 {
52  if(!m_renameEdit)
53  {
54  m_renameEdit = new MusicItemRenameEidt(title(false), this);
55  connect(m_renameEdit, SIGNAL(renameFinished(QString)), SLOT(changItemName(QString)));
56  m_renameEdit->setGeometry(m_labelIcon->width(), 3, RENAME_WIDTH, height() - 6);
57  }
58  m_renameEdit->show();
59 }
60 
62 {
63  Q_EMIT changRowItemName(m_index, name);
64 
65  m_renameEdit->deleteLater();
66  m_renameEdit = nullptr;
67 }
68 
70 {
71  Q_EMIT addNewFiles(m_index);
72 }
73 
75 {
76  Q_EMIT addNewDir(m_index);
77 }
78 
80 {
82 }
83 
85 {
86  QMenu menu(this);
87  menu.setStyleSheet(TTK::UI::MenuStyle02);
88  menu.addAction(tr("Create Item"), this, SIGNAL(addNewRowItem()));
89  menu.addSeparator();
90 
91  QMenu *addNewFilesMenu = menu.addMenu(tr("Add New Files"));
92  bool disable = TTK::playlistRowValid(m_index);
93  addNewFilesMenu->setEnabled(disable);
94  addNewFilesMenu->addAction(tr("Open Files"), this, SLOT(addNewFilesChanged()));
95  addNewFilesMenu->addAction(tr("Open Dir"), this, SLOT(addNewDirChanged()));
96  TTK::Widget::adjustMenuPosition(addNewFilesMenu);
97 
98  menu.addAction(tr("Play Later"), this, SLOT(addToPlayLater()));
99  menu.addAction(tr("Add To Playlist"), this, SLOT(addToPlayedList()));
100 
101  QMenu *sortFilesMenu = menu.addMenu(tr("Sort"));
102  sortFilesMenu->addAction(tr("Sort By FileName"))->setData(0);
103  sortFilesMenu->addAction(tr("Sort By Singer"))->setData(1);
104  sortFilesMenu->addAction(tr("Sort By FileSize"))->setData(2);
105  sortFilesMenu->addAction(tr("Sort By AddTime"))->setData(3);
106  sortFilesMenu->addAction(tr("Sort By Duration"))->setData(4);
107  sortFilesMenu->addAction(tr("Sort By PlayCount"))->setData(5);
108  TTK::Widget::adjustMenuPosition(sortFilesMenu);
109  connect(sortFilesMenu, SIGNAL(triggered(QAction*)), SLOT(songListSortBy(QAction*)));
110 
111  if(m_songSort)
112  {
113  const QList<QAction*> actions(sortFilesMenu->actions());
114  if(-1 < m_songSort->m_type && m_songSort->m_type < actions.count())
115  {
116  const bool asc = m_songSort->m_order == Qt::AscendingOrder;
117  actions[m_songSort->m_type]->setIcon(QIcon(asc ? ":/tiny/lb_sort_asc" : ":/tiny/lb_sort_desc"));
118  }
119  }
120 
121  menu.addAction(tr("Export List"), this, SLOT(exportSongsItem()));
122  menu.addSeparator();
123 
124  disable = isItemEnabled();
125  menu.addAction(tr("Delete All"), this, SLOT(deleteAllItemsChanged()));
126  menu.addAction(QIcon(":/contextMenu/btn_delete"), tr("Delete Item"), this, SLOT(deleteRowItemChanged()))->setEnabled(disable);
127  menu.addAction(tr("Rename"), this, SLOT(changRowItemNameChanged()))->setEnabled(disable);
128 
129  menu.exec(QCursor::pos());
130 }
131 
133 {
134  if(m_songSort)
135  {
136  const int type = m_songSort->m_type;
137  const int newType = action->data().toInt();
138  m_songSort->m_type = newType;
139 
140  if(type == newType)
141  {
142  const bool asc = m_songSort->m_order == Qt::AscendingOrder;
143  m_songSort->m_order = asc ? Qt::DescendingOrder : Qt::AscendingOrder;
144  }
145  else
146  {
147  m_songSort->m_order = Qt::AscendingOrder;
148  }
149  Q_EMIT songListSortBy(m_index);
150  }
151 }
152 
154 {
155  Q_EMIT addToPlayLater(m_index);
156 }
157 
159 {
160  Q_EMIT addToPlayedList(m_index);
161 }
162 
164 {
166 }
167 
168 void MusicSongsToolBoxTopWidget::contextMenuEvent(QContextMenuEvent *event)
169 {
170  Q_UNUSED(event);
171  showMenu();
172 }
173 
175 {
177 
178  QPainter painter(this);
179  painter.setRenderHints(QPainter::Antialiasing);
180 
182  {
183  m_isActive = false;
184  painter.fillRect(0, 1, width(), height() - 2, QColor(0, 0, 0, 50));
185  }
186 }
187 
188 
189 
191  : MusicSongsToolBoxTopWidget(-1, {}, parent)
192 {
193  move(0, 0);
194  setFixedWidth(LEFT_SIDE_WIDTH_MIN);
195  m_isBlockMoveExpand = true;
196 
197  hide();
198 
199  m_updateTimer = new QTimer(this);
200  m_updateTimer->setInterval(200 * TTK_DN_MS);
201  connect(m_updateTimer, SIGNAL(timeout()), SLOT(update()));
202  m_updateTimer->start();
203 }
204 
206 {
207  m_updateTimer->stop();
208  delete m_updateTimer;
209 }
210 
212 {
214  alpha = TTK::Image::boundValue<int>(0xFF, 0x1F, TTK_RN_MAX - alpha);
215 
216  QWidget::paintEvent(event);
217  QPainter painter(this);
218 
219  QLinearGradient gradient;
220  gradient.setStart(0, 32);
221  gradient.setFinalStop(0, height());
222  gradient.setColorAt(0.1, QColor(150, 150, 150, 150));
223  gradient.setColorAt(0.9, QColor(180, 180, 180, 50));
224  painter.fillRect(0, 32, width(), height(), gradient);
225 
226  const QPixmap pix(MusicTopAreaWidget::instance()->renderPixmap());
227  painter.drawPixmap(0, 0, width(), height() - 3, pix.copy(1, 91, width(), height() - 3));
228  painter.fillRect(QRect(0, 0, width(), height() - 3), QColor(255, 255, 255, alpha));
229 }
230 
231 
232 
233 MusicSongsToolBoxWidgetItem::MusicSongsToolBoxWidgetItem(int index, const QString &text, QWidget *parent)
235 {
236  m_topWidget = new MusicSongsToolBoxTopWidget(index, text, this);
237  connect(m_topWidget, SIGNAL(addNewRowItem()), SIGNAL(addNewRowItem()));
238  connect(m_topWidget, SIGNAL(deleteRowItem(int)), SIGNAL(deleteRowItem(int)));
239  connect(m_topWidget, SIGNAL(deleteAllItems(int)), SIGNAL(deleteAllItems(int)));
240  connect(m_topWidget, SIGNAL(changRowItemName(int,QString)), SIGNAL(changRowItemName(int,QString)));
241  connect(m_topWidget, SIGNAL(addNewFiles(int)), SIGNAL(addNewFiles(int)));
242  connect(m_topWidget, SIGNAL(addNewDir(int)), SIGNAL(addNewDir(int)));
243  connect(m_topWidget, SIGNAL(songListSortBy(int)), SIGNAL(songListSortBy(int)));
244  connect(m_topWidget, SIGNAL(addToPlayLater(int)), SIGNAL(addToPlayLater(int)));
245  connect(m_topWidget, SIGNAL(addToPlayedList(int)), SIGNAL(addToPlayedList(int)));
246 
247  initialize();
248 }
249 
251 {
253 }
254 
255 
256 
259 {
260 
261 }
262 
264 {
265  for(int i = 0; i < m_items.count(); ++i)
266  {
267  MusicFunctionToolBoxWidgetItem *it = m_items[i].m_itemWidget;
268  if(it->item() == item)
269  {
270  TTKObjectCast(MusicSongsToolBoxWidgetItem*, it)->setSongSort(sort);
271  return;
272  }
273  }
274 }
275 
277 {
278  int index = MUSIC_NORMAL_LIST;
279  for(int i = 0; i < m_items.count(); ++i)
280  {
281  if(TTK::playlistRowValid(i) && m_items[i].m_itemWidget->isExpand())
282  {
283  index = i;
284  break;
285  }
286  }
287  return index;
288 }
289 
291 {
293  it->addCellItem(item);
294  it->setExpand(true);
295  return it;
296 }
The class of the tool box widget item.
MusicSongsToolBoxTopWidget(int index, const QString &text, QWidget *parent=nullptr)
static MusicApplication * instance()
The class of the function tool box widget.
The class of the function tool box top widget.
static constexpr const char * TinyBtnShare
virtual MusicFunctionToolBoxWidgetItem * initialItem(QWidget *item, const QString &text) overridefinal
void addNewDir(int index)
void setSongSort(MusicSongSort *sort)
void deleteAllItems(int index)
void changRowItemName(int index, const QString &name)
MusicItemRenameEidt * m_renameEdit
The class of the tool box top widget.
void songListSortBy(int index)
void setSongSort(QWidget *item, MusicSongSort *sort)
#define TTK_RN_MAX
Definition: ttkglobal.h:439
The class of the item rename edit.
virtual void paintEvent(QPaintEvent *event) override
void addNewFiles(int index)
virtual bool isItemEnabled() const overridefinal
virtual void paintEvent(QPaintEvent *event) overridefinal
const char * name
Definition: http_parser.c:458
The class of the function tool box widget item.
MusicSongsToolBoxWidgetItem(int index, const QString &text, QWidget *parent=nullptr)
void changRowItemName(int index, const QString &name)
TTK_MODULE_EXPORT bool playlistRowValid(int index) noexcept
Definition: musicsong.cpp:95
void deleteRowItem(int index)
void songListSortBy(int index)
MusicSongsToolBoxWidget(QWidget *parent=nullptr)
The class of the music song sort tag.
Definition: musicsong.h:142
static constexpr int RENAME_WIDTH
static const QString MenuStyle02
void changItemName(const QString &name)
void deleteAllItems(int index)
void addToPlayLater(int index)
virtual void paintEvent(QPaintEvent *event) override
virtual void contextMenuEvent(QContextMenuEvent *event) overridefinal
MusicSongsToolBoxMaskWidget(QWidget *parent=nullptr)
MusicToolBoxWidgetItemList m_items
void exportSongsItem(int index)
void addToPlayedList(int index)
static unsigned char alpha[symbols+1]
Definition: rsecc.c:50
void deleteRowItem(int index)
static constexpr const char * TinyBtnListMenu
Qt::SortOrder m_order
Definition: musicsong.h:145
#define MUSIC_NORMAL_LIST
TTK_MODULE_EXPORT void adjustMenuPosition(QMenu *menu)
static MusicTopAreaWidget * instance()
#define TTK_DN_MS
Definition: ttkglobal.h:349
#define G_SETTING_PTR
#define TTKObjectCast(x, y)
Definition: ttkqtglobal.h:82
void addNewFiles(int index)
MusicFunctionToolBoxTopWidget * m_topWidget
#define LEFT_SIDE_WIDTH_MIN
Definition: musicobject.h:169