28 m_listFunctionWidget(nullptr),
29 m_songSearchWidget(nullptr)
62 inDeed.remove(item.m_itemIndex);
69 for(
const int item :
qAsConst(inDeed))
92 case MUSIC_RECENT_LIST:
114 return inDeed.isEmpty();
119 for(
int i = 0; i < items.count(); ++i)
141 const QFileInfo fin(path);
149 files << fin.absoluteFilePath();
164 if(item->
m_songs.contains(song))
178 files << fin.absoluteFilePath();
200 progress.
setTitle(tr(
"Import file mode"));
201 progress.setRange(0, files.count());
207 for(
const QString &path :
qAsConst(files))
214 progress.setValue(++i);
261 if(playlistRow < 0 || playlistRow >=
m_containerItems.count() || path.isEmpty())
267 for(
int i = 0; i < songs->count(); ++i)
285 if(index < 0 || index >= songs->count())
290 return songs->at(index).path();
301 if(row >= result.count() || row < 0)
362 QString
name = tr(
"Default Item");
377 message.
setText(tr(
"Are you sure to delete?"));
389 m_itemList.front().m_widgetItem->setExpand(
false);
407 message.
setText(tr(
"Are you sure to delete?"));
416 m_itemList.front().m_widgetItem->setExpand(
false);
441 if(widget->rowCount() > 0)
443 widget->setCurrentCell(0, 1);
593 for(
int i = 0; i < searchedSongs.count(); ++i)
614 for(
int i = 0; i < searchedSongs.count(); ++i)
616 if(searchedSongs[i].contains(text, Qt::CaseInsensitive))
642 if(lastPlayIndex.count() != 3)
648 const int index = lastPlayIndex[2].toInt();
674 if(item->
m_songs.removeOne(song))
710 if(item->
m_songs.removeOne(song))
728 int index = songItem->
m_songs.indexOf(song);
734 index = songItem->
m_songs.count() - 1;
753 QStringList files(items);
758 const MusicSongList *musicSongs = &item->
m_songs;
761 int index = musicSongs->count() - 1;
762 if(musicSongs->contains(song))
764 index = musicSongs->indexOf(song);
781 QStringList deleteFiles;
782 for(
int i = index.count() - 1; i >= 0; --i)
785 deleteFiles << song.
path();
790 if(playIndex > -1 && playIndex < songs.count())
792 if(songs[playIndex] == song)
817 for(
int i = start; i > end; --i)
824 for(
int i = start; i < end; ++i)
857 if(!songs.isEmpty() && index < songs.count())
872 if(songs->isEmpty() || index >= songs->count())
879 MusicSongList *recentSongs = &item->
m_songs;
881 if(!recentSongs->contains(recentSong))
885 recentSongs->takeFirst();
889 recentSong.setPlayCount(recentSong.playCount() + 1);
890 recentSongs->append(recentSong);
893 const QString title(QString(
"%1[%2]").arg(item->
m_itemName).arg(recentSongs->count()));
900 if(recentSong == song)
902 song.setPlayCount(song.playCount() + 1);
961 for(
int i = 0; i < songs->count(); ++i)
963 (*songs)[i].setSort(sort);
968 std::sort(songs->begin(), songs->end());
972 std::sort(songs->begin(), songs->end(), std::greater<MusicSong>());
978 index = songs->indexOf(song);
1022 MusicSongsToolBoxWidget::resizeEvent(event);
1028 MusicSongsToolBoxWidget::dragEnterEvent(event);
1029 event->setDropAction(Qt::IgnoreAction);
1035 MusicSongsToolBoxWidget::dragMoveEvent(event);
1037 bool contains =
false;
1045 QWidget *container = item.m_widgetItem->item();
1046 if(item.m_widgetItem->isActive() || (container && container->isVisible()))
1052 event->setDropAction(contains ? Qt::CopyAction : Qt::IgnoreAction);
1058 MusicSongsToolBoxWidget::dropEvent(event);
1067 QWidget *container = item.m_widgetItem->item();
1068 if(item.m_widgetItem->isActive() || (container && container->isVisible()))
1071 const QMimeData *data =
event->mimeData();
1073 for(
const QUrl &url : data->urls())
1075 files << url.toLocalFile();
1086 MusicSongsToolBoxWidget::contextMenuEvent(event);
1090 menu.addAction(tr(
"Create Item"),
this, SLOT(
addNewRowItem()));
1097 menu.exec(QCursor::pos());
1118 QString check =
name;
1121 bool hasName =
false;
1124 if(check == songItem.m_itemName)
1127 check = name + QString::number(i);
1178 const QString title(QString(
"%1[%2]").arg(item->
m_itemName).arg(item->
m_songs.count()));
1219 item.m_itemWidget->setPlaylistRow(index);
1222 TTK::IndexPropertyList
items;
1236 for(
int i = begin; i < end; ++i)
1238 items << TTK::IndexProperty(i + 1, i);
1243 for(
int i = end; i > begin; --i)
1245 items << TTK::IndexProperty(i, i - 1);
#define TTKStaticCast(x, y)
TTK_MODULE_EXPORT QByteArray md5(const QByteArray &data)
The class of the search result data item.
static MusicApplication * instance()
virtual void setVisible(bool visible) overridefinal
void setText(const QString &text) const
TTK_MODULE_EXPORT bool playlistRowValid(int index)
#define QtContainerSwap(p, i, j)
Container swap.
void addSongToLovestList(bool state=true)
MusicSongItemList m_containerItems
QString path() const noexcept
void playIndexBy(int row)
The class of the messagebox widget.
#define MUSIC_RECENT_LIST
#define TTKGenerateSingleWidget(...)
void removeItemAt(const QStringList &path, bool remove, bool current, int playlistRow)
void importSongsByDir(int index=TTK_LOW_LEVEL)
The class of the index property.
TTKSearchItems m_searchResultItems
static void popup(const QString &text)
TTK_MODULE_EXPORT QString pefix(const QString &name)
TTK_MODULE_EXPORT QString generateNetworkSongPath(const QString &path)
void importSongsByFiles(int index=TTK_LOW_LEVEL)
MusicAbstractSongsListTableWidget * m_itemWidget
void playIndexClicked(int row, int column)
TTK_MODULE_EXPORT QFileInfoList fileInfoListByPath(const QString &dpath, const QStringList &filter={}, bool recursively=true)
TTK_MODULE_EXPORT QString splitToken(const QString &name)
static const QString MenuStyle02
The class of the music song item.
#define MUSIC_NETWORK_LIST
#define MUSIC_LOVEST_LIST
void setPlayCount(const int c) noexcept
bool hasSearchResult() const
#define TTK_FILE_SUFFIX(fin)
The class of the music song info.
The class of the song search widget.
void removeLoveItemAt(const QString &path, bool current)
#define MUSIC_NORMAL_LIST
int playCount() const noexcept
TTK_MODULE_EXPORT bool isNetworkUrl(const QString &path)
TTK_MODULE_EXPORT MusicSongList generateSongList(const QString &path)
#define TTKObjectCast(x, y)