29 m_functionWidget(nullptr),
30 m_songSearchWidget(nullptr)
99 inNeed.remove(item.m_itemIndex);
102 if(!inNeed.isEmpty())
107 for(
const int item :
qAsConst(inNeed))
130 case MUSIC_RECENT_LIST:
152 return inNeed.isEmpty();
157 for(
int i = 0; i < items.count(); ++i)
177 const QFileInfo fin(path);
185 files << fin.absoluteFilePath();
203 item.
m_count = QString::number(size);
221 files << fin.absoluteFilePath();
236 progress.
setTitle(tr(
"Import file mode"));
237 progress.setRange(0, files.count());
278 if(playlistRow < 0 || playlistRow >=
m_containerItems.count() || path.isEmpty())
284 for(
int i = 0; i < songs->count(); ++i)
302 if(index < 0 || index >= songs->count())
307 return songs->at(index).path();
318 if(row >= result.count() || row < 0)
410 message.
setText(tr(
"Are you sure to delete?"));
422 m_items.first().m_itemWidget->setExpand(
false);
440 message.
setText(tr(
"Are you sure to delete?"));
449 m_items.first().m_itemWidget->setExpand(
false);
474 if(widget->rowCount() > 0)
476 widget->setCurrentCell(0, 1);
653 for(
int i = 0; i < searchedSongs.count(); ++i)
674 for(
int i = 0; i < searchedSongs.count(); ++i)
676 if(searchedSongs[i].contains(text, Qt::CaseInsensitive))
702 if(lastPlayIndex.count() != 3)
708 const int index = lastPlayIndex[2].toInt();
734 if(item->
m_songs.removeOne(song))
770 if(item->
m_songs.removeOne(song))
788 int index = it->
m_songs.indexOf(song);
794 index = it->
m_songs.count() - 1;
816 QStringList files(items);
821 const MusicSongList *musicSongs = &item->
m_songs;
824 int index = musicSongs->count() - 1;
825 if(musicSongs->contains(song))
827 index = musicSongs->indexOf(song);
844 QStringList deleteFiles;
845 for(
int i = rows.count() - 1; i >= 0; --i)
848 deleteFiles << song.
path();
853 if(playIndex > -1 && playIndex < songs.count())
855 if(songs[playIndex] == song)
866 QFile::remove(song.
path());
888 for(
int i = start; i > end; --i)
895 for(
int i = start; i < end; ++i)
928 if(!songs.isEmpty() && index < songs.count())
943 if(songs->isEmpty() || index >= songs->count())
950 MusicSongList *recentSongs = &item->
m_songs;
952 if(!recentSongs->contains(recentSong))
956 recentSongs->takeFirst();
960 recentSong.setPlayCount(recentSong.playCount() + 1);
961 recentSongs->append(recentSong);
964 const QString title(QString(
"%1[%2]").arg(item->
m_itemName).arg(recentSongs->count()));
971 if(recentSong == song)
973 song.setPlayCount(song.playCount() + 1);
1032 for(
int i = 0; i < songs->count(); ++i)
1034 (*songs)[i].setSort(sort);
1039 std::sort(songs->begin(), songs->end());
1043 std::sort(songs->begin(), songs->end(), std::greater<MusicSong>());
1049 index = songs->indexOf(song);
1093 MusicSongsToolBoxWidget::resizeEvent(event);
1099 MusicSongsToolBoxWidget::dragEnterEvent(event);
1100 event->setDropAction(Qt::IgnoreAction);
1106 MusicSongsToolBoxWidget::dragMoveEvent(event);
1115 data.m_itemWidget->isActive();
1118 event->setDropAction(Qt::CopyAction);
1124 MusicSongsToolBoxWidget::dropEvent(event);
1126 QStringList dirs, files;
1127 const QMimeData *data =
event->mimeData();
1129 for(
const QUrl &url : data->urls())
1131 const QString &path = url.toLocalFile();
1132 if(QFileInfo(path).isDir())
1142 bool contains =
false;
1150 if(data.m_itemWidget->isExpand() || data.m_itemWidget->isActive())
1166 QList<QStringList> files;
1168 for(
const QString &dir :
qAsConst(dirs))
1171 count += files.last().count();
1175 progress.
setTitle(tr(
"Import dir mode"));
1176 progress.setRange(0, count);
1180 for(
int i = 0; i < dirs.count(); ++i)
1183 item.
m_itemName = QFileInfo(dirs[i]).baseName();
1190 count += files[i].count();
1199 MusicSongsToolBoxWidget::contextMenuEvent(event);
1203 menu.addAction(tr(
"Create Item"),
this, SLOT(
addNewRowItem()));
1211 menu.exec(QCursor::pos());
1232 QString check =
name;
1238 if(check == item.m_itemName)
1241 check = name + QString::number(i);
1292 const QString title(QString(
"%1[%2]").arg(item->
m_itemName).arg(item->
m_songs.count()));
1333 item.m_itemWidget->setPlaylistRow(index);
1336 TTK::IndexPropertyList
items;
1350 for(
int i = begin; i < end; ++i)
1352 items << TTK::IndexProperty(i + 1, i);
1357 for(
int i = end; i > begin; --i)
1359 items << TTK::IndexProperty(i, i - 1);
1385 for(
const QString &path :
qAsConst(files))
1392 widget->setValue(++i + offset);
TTK_MODULE_EXPORT qint64 fetchFileSizeByUrl(const QString &url)
TTK_MODULE_EXPORT QString getExistingDirectory(QWidget *parent)
#define TTKStaticCast(x, y)
The class of the search result data item.
static QString message(const TTK::Attribute attr)
static MusicApplication * instance()
virtual void setVisible(bool visible) overridefinal
void setText(const QString &text) const
TTK_MODULE_EXPORT void generateNetworkSongMeta(const QString &id, const MusicResultDataItem &item)
#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
void removeItemAt(const QStringList &path, bool remove, bool current, int playlistRow)
bool hasSearchResult() const noexcept
TTK_MODULE_EXPORT QString generateNetworkSongMetaPath(const QString &path)
The class of the index property.
TTK_MODULE_EXPORT QByteArray md5(const QByteArray &data, bool base64=false)
TTKSearchItems m_searchResultItems
static void popup(const QString &text)
void clearSearchResult() noexcept
TTK_MODULE_EXPORT QString generateNetworkSongPath(const QString &path)
TTK_MODULE_EXPORT bool isNetworkUrl(const QString &path) noexcept
#define TTK_GENERATE_SINGLE_WIDGET(...)
TTK_MODULE_EXPORT bool playlistRowValid(int index) noexcept
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
TTK_MODULE_EXPORT QStringList getOpenFileNames(QWidget *parent, const QString &filter="Image Files (*.png *.bmp *.jpg)")
TTK_MODULE_EXPORT QStringList fileListByPath(const QString &dpath, const QStringList &filter={}, bool recursively=true)
#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
static qint64 formatDuration(const QString &time) noexcept
TTK_MODULE_EXPORT MusicSongList generateSongList(const QString &path)
#define TTKObjectCast(x, y)