Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3ca276059a | |||
| 83080b71cd | |||
| 553d8cd9b0 | |||
| 46a1d97e14 | |||
| 20f0fa742f |
+118
-16
@@ -1,10 +1,96 @@
|
||||
#include "common.h"
|
||||
|
||||
#include "calbum.h"
|
||||
#include "ctrack.h"
|
||||
|
||||
|
||||
cAlbum::cAlbum(const QString& szAlbum, const QString &szLeadArtist) :
|
||||
class cAlbumCompare
|
||||
{
|
||||
public:
|
||||
cAlbumCompare(qint32 sort) : m_sort(sort) {}
|
||||
|
||||
bool operator()(cAlbum* lpFirst, cAlbum* lpSecond)
|
||||
{
|
||||
if(m_sort & SORT_BAND_ASC)
|
||||
{
|
||||
if(lpFirst->band() < lpSecond->band())
|
||||
return(true);
|
||||
else if(lpFirst->band() > lpSecond->band())
|
||||
return(false);
|
||||
else
|
||||
{
|
||||
if(m_sort & SORT_ALBUM_ASC)
|
||||
{
|
||||
if(lpFirst->album() < lpSecond->album())
|
||||
return(true);
|
||||
else
|
||||
return(false);
|
||||
}
|
||||
else if(m_sort & SORT_ALBUM_DESC)
|
||||
{
|
||||
if(lpFirst->album() > lpSecond->album())
|
||||
return(true);
|
||||
else
|
||||
return(false);
|
||||
}
|
||||
else
|
||||
return(false);
|
||||
}
|
||||
}
|
||||
else if(m_sort & SORT_BAND_DESC)
|
||||
{
|
||||
if(lpFirst->band() > lpSecond->band())
|
||||
return(true);
|
||||
else if(lpFirst->band() < lpSecond->band())
|
||||
return(false);
|
||||
else
|
||||
{
|
||||
if(m_sort & SORT_ALBUM_ASC)
|
||||
{
|
||||
if(lpFirst->album() < lpSecond->album())
|
||||
return(true);
|
||||
else
|
||||
return(false);
|
||||
}
|
||||
else if(m_sort & SORT_ALBUM_DESC)
|
||||
{
|
||||
if(lpFirst->album() > lpSecond->album())
|
||||
return(true);
|
||||
else
|
||||
return(false);
|
||||
}
|
||||
else
|
||||
return(false);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(m_sort & SORT_ALBUM_ASC)
|
||||
{
|
||||
if(lpFirst->album() < lpSecond->album())
|
||||
return(true);
|
||||
else
|
||||
return(false);
|
||||
}
|
||||
else if(m_sort & SORT_ALBUM_DESC)
|
||||
{
|
||||
if(lpFirst->album() > lpSecond->album())
|
||||
return(true);
|
||||
else
|
||||
return(false);
|
||||
}
|
||||
else
|
||||
return(false);
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
qint32 m_sort;
|
||||
};
|
||||
|
||||
cAlbum::cAlbum(const QString& szAlbum, const QString &szBand) :
|
||||
m_szAlbum(szAlbum),
|
||||
m_szLeadArtist(szLeadArtist)
|
||||
m_szBand(szBand)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -18,19 +104,19 @@ QString cAlbum::album()
|
||||
return(m_szAlbum);
|
||||
}
|
||||
|
||||
void cAlbum::setLeadArtist(const QString& szLeadArtist)
|
||||
void cAlbum::setBand(const QString& szBand)
|
||||
{
|
||||
m_szLeadArtist = szLeadArtist;
|
||||
m_szBand = szBand;
|
||||
}
|
||||
|
||||
QString cAlbum::leadArtist()
|
||||
QString cAlbum::band()
|
||||
{
|
||||
return(m_szLeadArtist);
|
||||
return(m_szBand);
|
||||
}
|
||||
|
||||
cTrack* cAlbum::addTrack(const QString& szTitle, const qint16& trackNumber, const QString& szPartOfSet, const QString& szBand, const QString& szComposer, const QDate &recordingTime)
|
||||
cTrack* cAlbum::addTrack(const QString& szTitle, const QString &szTrackNumber, const QString& szPartOfSet, const QString& szBand, const QString& szLeadArtist, const QString& szComposer, const QDate &recordingTime, const QString& szFileName)
|
||||
{
|
||||
return(m_trackList.add(this, szTitle, trackNumber, szPartOfSet, szBand, szComposer, recordingTime));
|
||||
return(m_trackList.add(this, szTitle, szTrackNumber, szPartOfSet, szBand, szLeadArtist, szComposer, recordingTime, szFileName));
|
||||
}
|
||||
|
||||
cTrackList cAlbum::trackList()
|
||||
@@ -38,23 +124,39 @@ cTrackList cAlbum::trackList()
|
||||
return(m_trackList);
|
||||
}
|
||||
|
||||
cAlbum* cAlbumList::add(const QString& szAlbum, const QString& szLeadArtist)
|
||||
void cAlbum::sortTracks(qint32 sort)
|
||||
{
|
||||
QString szAlbum1 = szAlbum;
|
||||
QString szLeadArtist1 = szLeadArtist;
|
||||
m_trackList.sort(sort);
|
||||
}
|
||||
|
||||
cAlbum* cAlbumList::add(const QString& szAlbum, const QString& szBand)
|
||||
{
|
||||
QString szAlbum1 = szAlbum;
|
||||
QString szBand1 = szBand;
|
||||
|
||||
if(szAlbum1.isEmpty())
|
||||
szAlbum1 = "*** NO ALBUM ***";
|
||||
if(szLeadArtist1.isEmpty())
|
||||
szLeadArtist1 = "*** NO LEAD ARTIST ***";
|
||||
szAlbum1 = "*** NO ALBUM ***";
|
||||
if(szBand1.isEmpty())
|
||||
szBand1 = "*** NO BAND ***";
|
||||
|
||||
for(int x = 0;x < count();x++)
|
||||
{
|
||||
if(at(x)->album() == szAlbum1 && at(x)->leadArtist() == szLeadArtist1)
|
||||
if(at(x)->album() == szAlbum1 && at(x)->band() == szBand1)
|
||||
return(at(x));
|
||||
}
|
||||
|
||||
cAlbum* lpAlbumNew = new cAlbum(szAlbum1, szLeadArtist1);
|
||||
cAlbum* lpAlbumNew = new cAlbum(szAlbum1, szBand1);
|
||||
append(lpAlbumNew);
|
||||
return(lpAlbumNew);
|
||||
}
|
||||
|
||||
void cAlbumList::sort(qint32 sort)
|
||||
{
|
||||
std::sort(begin(), end(), cAlbumCompare(sort));
|
||||
|
||||
if(sort & SORT_TRACK_ASC || sort & SORT_TRACK_DESC)
|
||||
{
|
||||
for(int x = 0;x < count();x++)
|
||||
at(x)->sortTracks(sort);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,19 +15,21 @@ class cTrackList;
|
||||
class cAlbum
|
||||
{
|
||||
public:
|
||||
cAlbum(const QString& szAlbum, const QString& szLeadArtist);
|
||||
cAlbum(const QString& szAlbum, const QString& szBand);
|
||||
|
||||
void setAlbum(const QString& szAlbum);
|
||||
QString album();
|
||||
|
||||
void setLeadArtist(const QString& szLeadArtist);
|
||||
QString leadArtist();
|
||||
void setBand(const QString& szBand);
|
||||
QString band();
|
||||
|
||||
cTrack* addTrack(const QString& szTitle, const qint16& trackNumber, const QString& szPartOfSet, const QString& szBand, const QString& szComposer, const QDate& recordingTime);
|
||||
cTrack* addTrack(const QString& szTitle, const QString& szTrackNumber, const QString& szPartOfSet, const QString& szBand, const QString &szLeadArtist, const QString& szComposer, const QDate& recordingTime, const QString &szFileName);
|
||||
cTrackList trackList();
|
||||
|
||||
void sortTracks(qint32 sort);
|
||||
private:
|
||||
QString m_szAlbum;
|
||||
QString m_szLeadArtist;
|
||||
QString m_szBand;
|
||||
cTrackList m_trackList;
|
||||
};
|
||||
|
||||
@@ -36,7 +38,9 @@ Q_DECLARE_METATYPE(cAlbum*)
|
||||
class cAlbumList : public QList<cAlbum*>
|
||||
{
|
||||
public:
|
||||
cAlbum* add(const QString& szAlbum, const QString &szLeadArtist);
|
||||
cAlbum* add(const QString& szAlbum, const QString &szBand);
|
||||
void sort(qint32 sort);
|
||||
private:
|
||||
};
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -93,7 +93,7 @@ int cDatabase::initDB()
|
||||
" album TEXT, "
|
||||
" title TEXT, "
|
||||
" copyright TEXT, "
|
||||
" tracknumber INTEGER, "
|
||||
" trackNumber TEXT, "
|
||||
" contentGroupDescription TEXT, "
|
||||
" subTitle TEXT, "
|
||||
" originalAlbum TEXT, "
|
||||
|
||||
+153
-212
@@ -74,31 +74,12 @@ cMainWindow::cMainWindow(QWidget *parent) :
|
||||
m_lpDB = new cDatabase(this);
|
||||
|
||||
m_lpMusicListModel = new QStandardItemModel(0, 3);
|
||||
ui->m_lpMusicListOriginal->setModel(m_lpMusicListModel);
|
||||
ui->m_lpMusicListOriginal->setItemDelegate(new cMusicViewItemDelegate(ui->m_lpMusicListOriginal));
|
||||
ui->m_lpMusicListNew->setModel(m_lpMusicListModel);
|
||||
ui->m_lpMusicListNew->setItemDelegate(new cMusicViewItemDelegate(ui->m_lpMusicListNew));
|
||||
ui->m_lpMusicList->setModel(m_lpMusicListModel);
|
||||
// ui->m_lpMusicList->setItemDelegate(new cMusicViewItemDelegate(ui->m_lpMusicList));
|
||||
|
||||
connect(ui->m_lpMusicListOriginal, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(onCustomContextMenuRequestedOriginal(QPoint)));
|
||||
connect(ui->m_lpMusicListNew, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(onCustomContextMenuRequestedNew(QPoint)));
|
||||
|
||||
connect(ui->m_lpMusicListOriginal, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(onDoubleClickedOriginal(QModelIndex)));
|
||||
connect(ui->m_lpMusicListNew, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(onDoubleClickedNew(QModelIndex)));
|
||||
|
||||
connect(ui->m_lpMusicListOriginal, SIGNAL(pressed(QModelIndex)), this, SLOT(onPressedOriginal(QModelIndex)));
|
||||
connect(ui->m_lpMusicListNew, SIGNAL(pressed(QModelIndex)), this, SLOT(onPressedNew(QModelIndex)));
|
||||
|
||||
connect(ui->m_lpMusicListOriginal, SIGNAL(expanded(QModelIndex)), this, SLOT(onExpandedOriginal(QModelIndex)));
|
||||
connect(ui->m_lpMusicListNew, SIGNAL(expanded(QModelIndex)), this, SLOT(onExpandedNew(QModelIndex)));
|
||||
|
||||
connect(ui->m_lpMusicListOriginal, SIGNAL(collapsed(QModelIndex)), this, SLOT(onCollapsedOriginal(QModelIndex)));
|
||||
connect(ui->m_lpMusicListNew, SIGNAL(collapsed(QModelIndex)), this, SLOT(onCollapsedNew(QModelIndex)));
|
||||
|
||||
connect(ui->m_lpMusicListOriginal->selectionModel(), &QItemSelectionModel::selectionChanged, this, &cMainWindow::onSelectionChangedOriginal);
|
||||
connect(ui->m_lpMusicListNew->selectionModel(), &QItemSelectionModel::selectionChanged, this, &cMainWindow::onSelectionChangedNew);
|
||||
|
||||
connect(ui->m_lpMusicListOriginal->verticalScrollBar(), &QScrollBar::valueChanged, this, &cMainWindow::onScrollbarValueChangedOriginal);
|
||||
connect(ui->m_lpMusicListNew->verticalScrollBar(), &QScrollBar::valueChanged, this, &cMainWindow::onScrollbarValueChangedNew);
|
||||
connect(ui->m_lpMusicList, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(onCustomContextMenuRequested(QPoint)));
|
||||
connect(ui->m_lpMusicList, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(onDoubleClicked(QModelIndex)));
|
||||
connect(ui->m_lpMusicList, SIGNAL(pressed(QModelIndex)), this, SLOT(onPressed(QModelIndex)));
|
||||
|
||||
loadDB();
|
||||
displayDB();
|
||||
@@ -132,20 +113,84 @@ void cMainWindow::initSettings()
|
||||
void cMainWindow::loadDB()
|
||||
{
|
||||
QSqlQuery query;
|
||||
QString szOldLeadArtist = "";
|
||||
QString szOldAlbum = "";
|
||||
QString szAlbum;
|
||||
QString szTitle;
|
||||
qint16 iTrackNumber;
|
||||
QString szTrackNumber;
|
||||
QString szPartOfSet;
|
||||
QString szLeadArtist;
|
||||
QString szBand;
|
||||
QString szComposer;
|
||||
QDate recordingTime;
|
||||
QString szFileName;
|
||||
|
||||
cAlbum* lpAlbum = 0;
|
||||
|
||||
query.prepare("SELECT leadArtist, album, title, trackNumber, partOfSet, band, composer, recordingTime FROM file ORDER BY leadArtist, album, trackNumber;");
|
||||
query.prepare("SELECT id, "
|
||||
" fileName, "
|
||||
" fileSize, "
|
||||
" fileDate, "
|
||||
" fileType, "
|
||||
" length, "
|
||||
" bitrate, "
|
||||
" sampleRate, "
|
||||
" channels, "
|
||||
" bitsPerSample, "
|
||||
" layer, "
|
||||
" version, "
|
||||
" sampleWidth, "
|
||||
" sampleFrames, "
|
||||
" isEncrypted, "
|
||||
" trackGain, "
|
||||
" albumGain, "
|
||||
" trackPeak, "
|
||||
" albumPeak, "
|
||||
" protectionenabled, "
|
||||
" channelMode, "
|
||||
" isCopyrighted, "
|
||||
" isOriginal, "
|
||||
" album, "
|
||||
" title, "
|
||||
" copyright, "
|
||||
" trackNumber, "
|
||||
" contentGroupDescription, "
|
||||
" subTitle, "
|
||||
" originalAlbum, "
|
||||
" partOfSet, "
|
||||
" subTitleOfSet, "
|
||||
" internationalStandardRecordingCode, "
|
||||
" leadArtist, "
|
||||
" band, "
|
||||
" conductor, "
|
||||
" interpret, "
|
||||
" originalArtist, "
|
||||
" textWriter, "
|
||||
" originalTextWriter, "
|
||||
" composer, "
|
||||
" encodedBy, "
|
||||
" beatsPerMinute, "
|
||||
" language, "
|
||||
" contentType, "
|
||||
" mediaType, "
|
||||
" mood, "
|
||||
" producedNotice, "
|
||||
" publisher, "
|
||||
" fileOwner, "
|
||||
" internetRadioStationName, "
|
||||
" internetRadioStationOwner, "
|
||||
" originalFilename, "
|
||||
" playlistDelay, "
|
||||
" encodingTime, "
|
||||
" originalReleaseTime, "
|
||||
" recordingTime, "
|
||||
" releaseTime, "
|
||||
" taggingTime, "
|
||||
" swhwSettings, "
|
||||
" albumSortOrder, "
|
||||
" performerSortOrder, "
|
||||
" titleSortOrder, "
|
||||
" synchronizedLyrics, "
|
||||
" unsynchronizedLyrics "
|
||||
"FROM file;");
|
||||
if(!query.exec())
|
||||
{
|
||||
myDebug << query.lastError().text();
|
||||
@@ -156,23 +201,17 @@ void cMainWindow::loadDB()
|
||||
{
|
||||
szAlbum = query.value("album").toString();
|
||||
szTitle = query.value("title").toString();
|
||||
iTrackNumber = query.value("trackNumber").toInt();
|
||||
szTrackNumber = query.value("trackNumber").toString();
|
||||
szPartOfSet = query.value("partOfSet").toString();
|
||||
szLeadArtist = query.value("leadArtist").toString();
|
||||
szBand = query.value("band").toString();
|
||||
szComposer = query.value("composer").toString();
|
||||
recordingTime = query.value("recordingTime").toDate();
|
||||
szFileName = query.value("fileName").toString();
|
||||
|
||||
if(szOldLeadArtist != szLeadArtist || szOldAlbum != szAlbum)
|
||||
{
|
||||
szOldLeadArtist = szLeadArtist;
|
||||
szOldAlbum = szAlbum;
|
||||
|
||||
lpAlbum = m_albumList.add(szAlbum, szLeadArtist);
|
||||
}
|
||||
|
||||
lpAlbum = m_albumList.add(szAlbum, szBand);
|
||||
if(lpAlbum)
|
||||
lpAlbum->addTrack(szTitle, iTrackNumber, szPartOfSet, szBand, szComposer, recordingTime);
|
||||
lpAlbum->addTrack(szTitle, szTrackNumber, szPartOfSet, szBand, szLeadArtist, szComposer, recordingTime, szFileName);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -180,34 +219,32 @@ void cMainWindow::displayDB()
|
||||
{
|
||||
m_lpMusicListModel->clear();
|
||||
|
||||
m_albumList.sort(SORT_ALBUM_ASC | SORT_BAND_ASC | SORT_TRACK_ASC);
|
||||
|
||||
QStringList header;
|
||||
header << "Original" << "New";
|
||||
header << tr("Track") << tr("Nr") << tr("Set") << tr("Year") << tr("Filename");
|
||||
|
||||
m_lpMusicListModel->setHorizontalHeaderLabels(header);
|
||||
|
||||
ui->m_lpMusicListOriginal->setColumnHidden(1, true);
|
||||
ui->m_lpMusicListNew->setColumnHidden(0, true);
|
||||
|
||||
QString szOldLeadArtist = "OldLeadArtist";
|
||||
QString szOldAlbum = "OldAlbum";
|
||||
QList<QStandardItem*> lpLeadArtistItem;
|
||||
QString szOldBand = "OldBand";
|
||||
QString szOldAlbum = "OldAlbum";
|
||||
QList<QStandardItem*> lpBandItem;
|
||||
QList<QStandardItem*> lpAlbumItem;
|
||||
|
||||
for(int x = 0;x < m_albumList.count();x++)
|
||||
{
|
||||
cAlbum* lpAlbum = m_albumList.at(x);
|
||||
|
||||
if(szOldLeadArtist != lpAlbum->leadArtist())
|
||||
if(szOldBand != lpAlbum->band())
|
||||
{
|
||||
|
||||
szOldLeadArtist = lpAlbum->leadArtist();
|
||||
szOldBand = lpAlbum->band();
|
||||
szOldAlbum = "";
|
||||
|
||||
lpLeadArtistItem.clear();
|
||||
lpLeadArtistItem.append(new QStandardItem(szOldLeadArtist));
|
||||
lpLeadArtistItem.append(new QStandardItem(szOldLeadArtist));
|
||||
|
||||
m_lpMusicListModel->appendRow(lpLeadArtistItem);
|
||||
lpBandItem.clear();
|
||||
lpBandItem.append(newItem(szOldBand, USERROLE_TYPE_BAND, QVariant::fromValue(lpAlbum), Qt::AlignLeft, true, false, QColor(), QColor(191, 191, 191)));
|
||||
m_lpMusicListModel->appendRow(lpBandItem);
|
||||
ui->m_lpMusicList->setFirstColumnSpanned(lpBandItem[0]->index().row(), m_lpMusicListModel->invisibleRootItem()->index(), true);
|
||||
}
|
||||
|
||||
if(szOldAlbum != lpAlbum->album())
|
||||
@@ -215,11 +252,9 @@ void cMainWindow::displayDB()
|
||||
szOldAlbum = lpAlbum->album();
|
||||
|
||||
lpAlbumItem.clear();
|
||||
lpAlbumItem.append(new QStandardItem(szOldAlbum));
|
||||
lpAlbumItem.at(0)->setData(QVariant::fromValue(lpAlbum), Qt::UserRole+MUSICLIST_ORI_ALBUM);
|
||||
lpAlbumItem.append(new QStandardItem(szOldAlbum));
|
||||
|
||||
lpLeadArtistItem.at(0)->appendRow(lpAlbumItem);
|
||||
lpAlbumItem.append(newItem(szOldAlbum, USERROLE_TYPE_ALBUM, QVariant::fromValue(lpAlbum), Qt::AlignLeft, false, true, QColor(), QColor(223, 223, 223)));
|
||||
lpBandItem[0]->appendRow(lpAlbumItem);
|
||||
ui->m_lpMusicList->setFirstColumnSpanned(lpAlbumItem[0]->index().row(), lpBandItem[0]->index(), true);
|
||||
}
|
||||
|
||||
cTrackList trackList = lpAlbum->trackList();
|
||||
@@ -228,189 +263,95 @@ void cMainWindow::displayDB()
|
||||
cTrack* lpTrack = trackList.at(y);
|
||||
|
||||
QList<QStandardItem*> lpTrackItem;
|
||||
lpTrackItem.append(new QStandardItem(lpTrack->title()));
|
||||
lpTrackItem.append(new QStandardItem(lpTrack->title()));
|
||||
lpAlbumItem.at(0)->appendRow(lpTrackItem);
|
||||
lpTrackItem.append(newItem(lpTrack->title(), USERROLE_TYPE_TRACK, QVariant::fromValue(lpTrack)));
|
||||
lpTrackItem.append(newItem(lpTrack->trackNumber(), USERROLE_TYPE_TRACK, QVariant::fromValue(lpTrack), Qt::AlignRight));
|
||||
lpTrackItem.append(newItem(lpTrack->partOfSet(), USERROLE_TYPE_TRACK, QVariant::fromValue(lpTrack), Qt::AlignRight));
|
||||
lpTrackItem.append(newItem(QString::number(lpTrack->recordingTime().year()), USERROLE_TYPE_TRACK, QVariant::fromValue(lpTrack), Qt::AlignRight));
|
||||
lpTrackItem.append(newItem(lpTrack->fileName(), USERROLE_TYPE_TRACK, QVariant::fromValue(lpTrack)));
|
||||
lpAlbumItem[0]->appendRow(lpTrackItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void cMainWindow::onCustomContextMenuRequestedOriginal(const QPoint &pos)
|
||||
QStandardItem* cMainWindow::newItem(const QString& szText, qint32 type, const QVariant& data, Qt::Alignment align, bool bold, bool italic, const QColor &foreground, const QColor &background)
|
||||
{
|
||||
onCustomContextMenuRequested(ui->m_lpMusicListOriginal, pos);
|
||||
}
|
||||
QStandardItem* lpItem = new QStandardItem(szText);
|
||||
lpItem->setTextAlignment(align);
|
||||
|
||||
void cMainWindow::onDoubleClickedOriginal(const QModelIndex &index)
|
||||
{
|
||||
onDoubleClicked(index);
|
||||
}
|
||||
|
||||
void cMainWindow::onPressedOriginal(const QModelIndex &index)
|
||||
{
|
||||
onPressed(index);
|
||||
}
|
||||
|
||||
void cMainWindow::onExpandedOriginal(const QModelIndex &index)
|
||||
{
|
||||
ui->m_lpMusicListNew->expand(index);
|
||||
}
|
||||
|
||||
void cMainWindow::onCollapsedOriginal(const QModelIndex &index)
|
||||
{
|
||||
ui->m_lpMusicListNew->collapse(index);
|
||||
}
|
||||
|
||||
void cMainWindow::onSelectionChangedOriginal(const QItemSelection &selected, const QItemSelection &deselected)
|
||||
{
|
||||
if(m_bProcessing)
|
||||
return;
|
||||
|
||||
m_bProcessing = true;
|
||||
|
||||
QItemSelectionModel* lpOriginal = ui->m_lpMusicListOriginal->selectionModel();
|
||||
QItemSelectionModel* lpNew = ui->m_lpMusicListNew->selectionModel();
|
||||
QModelIndexList selected1 = lpOriginal->selectedIndexes();
|
||||
|
||||
lpNew->clearSelection();
|
||||
|
||||
for(int z = 0;z < selected1.count();z++)
|
||||
if(bold || italic)
|
||||
{
|
||||
|
||||
QStandardItem* lpItem = m_lpMusicListModel->itemFromIndex(selected1.at(z));
|
||||
QModelIndex index = lpItem->index();
|
||||
lpNew->select(index, QItemSelectionModel::Select);
|
||||
QFont font = lpItem->font();
|
||||
font.setBold(bold);
|
||||
font.setItalic(italic);
|
||||
lpItem->setFont(font);
|
||||
}
|
||||
|
||||
m_bProcessing = false;
|
||||
if(foreground.isValid())
|
||||
lpItem->setForeground(QBrush(foreground));
|
||||
|
||||
if(background.isValid())
|
||||
lpItem->setBackground(QBrush(background));
|
||||
|
||||
lpItem->setData(type, USERROLE_TYPE);
|
||||
lpItem->setData(data, USERROLE_VALUE);
|
||||
return(lpItem);
|
||||
}
|
||||
|
||||
void cMainWindow::onScrollbarValueChangedOriginal(int value)
|
||||
void cMainWindow::onCustomContextMenuRequested(const QPoint &/*pos*/)
|
||||
{
|
||||
if(m_bProcessing)
|
||||
return;
|
||||
/*
|
||||
QMenu* lpMenu = new QMenu(this);
|
||||
|
||||
m_bProcessing = true;
|
||||
lpMenu->addAction("add", this, SLOT(onActionAdd()));
|
||||
|
||||
ui->m_lpMusicListNew->verticalScrollBar()->setValue(value);
|
||||
lpMenu->addAction("update all", this, SLOT(onActionUpdateAll()));
|
||||
lpMenu->addAction("update unfinished", this, SLOT(onActionUpdateUnfinished()));
|
||||
lpMenu->addSeparator();
|
||||
|
||||
m_bProcessing = false;
|
||||
}
|
||||
|
||||
void cMainWindow::onCustomContextMenuRequestedNew(const QPoint &pos)
|
||||
{
|
||||
onCustomContextMenuRequested(ui->m_lpMusicListNew, pos);
|
||||
}
|
||||
|
||||
void cMainWindow::onDoubleClickedNew(const QModelIndex &index)
|
||||
{
|
||||
onDoubleClicked(index);
|
||||
}
|
||||
|
||||
void cMainWindow::onPressedNew(const QModelIndex &index)
|
||||
{
|
||||
onPressed(index);
|
||||
}
|
||||
|
||||
void cMainWindow::onExpandedNew(const QModelIndex &index)
|
||||
{
|
||||
ui->m_lpMusicListOriginal->expand(index);
|
||||
}
|
||||
|
||||
void cMainWindow::onCollapsedNew(const QModelIndex &index)
|
||||
{
|
||||
ui->m_lpMusicListOriginal->collapse(index);
|
||||
}
|
||||
|
||||
void cMainWindow::onSelectionChangedNew(const QItemSelection &selected, const QItemSelection &deselected)
|
||||
{
|
||||
if(m_bProcessing)
|
||||
return;
|
||||
|
||||
m_bProcessing = true;
|
||||
|
||||
QItemSelectionModel* lpOriginal = ui->m_lpMusicListOriginal->selectionModel();
|
||||
QItemSelectionModel* lpNew = ui->m_lpMusicListNew->selectionModel();
|
||||
QModelIndexList selected2 = lpNew->selectedIndexes();
|
||||
|
||||
lpOriginal->clearSelection();
|
||||
|
||||
for(int z = 0;z < selected2.count();z++)
|
||||
{
|
||||
QStandardItem* lpItem = m_lpMusicListModel->itemFromIndex(selected2.at(z));
|
||||
QModelIndex index = lpItem->index();
|
||||
lpOriginal->select(index, QItemSelectionModel::Select);
|
||||
}
|
||||
|
||||
m_bProcessing = false;
|
||||
}
|
||||
|
||||
void cMainWindow::onScrollbarValueChangedNew(int value)
|
||||
{
|
||||
if(m_bProcessing)
|
||||
return;
|
||||
|
||||
m_bProcessing = true;
|
||||
|
||||
ui->m_lpMusicListOriginal->verticalScrollBar()->setValue(value);
|
||||
|
||||
m_bProcessing = false;
|
||||
}
|
||||
|
||||
void cMainWindow::onCustomContextMenuRequested(const QTreeView* lpTreeView, const QPoint &pos)
|
||||
{
|
||||
/*
|
||||
QMenu* lpMenu = new QMenu(this);
|
||||
|
||||
lpMenu->addAction("add", this, SLOT(onActionAdd()));
|
||||
|
||||
lpMenu->addAction("update all", this, SLOT(onActionUpdateAll()));
|
||||
lpMenu->addAction("update unfinished", this, SLOT(onActionUpdateUnfinished()));
|
||||
lpMenu->addSeparator();
|
||||
|
||||
if(lpTreeView->selectionModel()->selectedRows().count() == 1)
|
||||
{
|
||||
cSerie* lpSerie = m_lpSeriesListModel->itemFromIndex(lpTreeView->selectionModel()->selectedRows().at(0))->data(Qt::UserRole).value<cSerie*>();
|
||||
if(lpSerie)
|
||||
if(lpTreeView->selectionModel()->selectedRows().count() == 1)
|
||||
{
|
||||
lpMenu->addAction("update", this, SLOT(onActionUpdate()));
|
||||
lpMenu->addAction("delete", this, SLOT(onActionDelete()));
|
||||
lpMenu->addAction("edit", this, SLOT(onActionEdit()));
|
||||
lpMenu->addSeparator();
|
||||
|
||||
if(!lpSerie->IMDBID().isEmpty())
|
||||
lpMenu->addAction("open IMDB", this, SLOT(onActionGotoIMDB()));
|
||||
|
||||
if(!lpSerie->download().isEmpty())
|
||||
cSerie* lpSerie = m_lpSeriesListModel->itemFromIndex(lpTreeView->selectionModel()->selectedRows().at(0))->data(Qt::UserRole).value<cSerie*>();
|
||||
if(lpSerie)
|
||||
{
|
||||
lpMenu->addAction("open download link", this, SLOT(onActionGotoDownload()));
|
||||
lpMenu->addAction("copy download link", this, SLOT(onActionCopyDownload()));
|
||||
lpMenu->addAction("update", this, SLOT(onActionUpdate()));
|
||||
lpMenu->addAction("delete", this, SLOT(onActionDelete()));
|
||||
lpMenu->addAction("edit", this, SLOT(onActionEdit()));
|
||||
lpMenu->addSeparator();
|
||||
|
||||
if(!lpSerie->IMDBID().isEmpty())
|
||||
lpMenu->addAction("open IMDB", this, SLOT(onActionGotoIMDB()));
|
||||
|
||||
if(!lpSerie->download().isEmpty())
|
||||
{
|
||||
lpMenu->addAction("open download link", this, SLOT(onActionGotoDownload()));
|
||||
lpMenu->addAction("copy download link", this, SLOT(onActionCopyDownload()));
|
||||
}
|
||||
lpMenu->addAction("open all download links", this, SLOT(onActionGotoAllDownload()));
|
||||
lpMenu->addAction("open all download links (open)", this, SLOT(onActionGotoAllDownloadOpen()));
|
||||
lpMenu->addSeparator();
|
||||
lpMenu->addAction("load images", this, SLOT(onActionLoadPictures()));
|
||||
}
|
||||
lpMenu->addAction("open all download links", this, SLOT(onActionGotoAllDownload()));
|
||||
lpMenu->addAction("open all download links (open)", this, SLOT(onActionGotoAllDownloadOpen()));
|
||||
}
|
||||
else if(lpTreeView->selectionModel()->selectedRows().count())
|
||||
{
|
||||
lpMenu->addAction("update selected", this, SLOT(onActionUpdate()));
|
||||
lpMenu->addAction("delete selected", this, SLOT(onActionDelete()));
|
||||
lpMenu->addSeparator();
|
||||
lpMenu->addAction("load images", this, SLOT(onActionLoadPictures()));
|
||||
}
|
||||
}
|
||||
else if(lpTreeView->selectionModel()->selectedRows().count())
|
||||
{
|
||||
lpMenu->addAction("update selected", this, SLOT(onActionUpdate()));
|
||||
lpMenu->addAction("delete selected", this, SLOT(onActionDelete()));
|
||||
|
||||
lpMenu->addSeparator();
|
||||
lpMenu->addAction("load images", this, SLOT(onActionLoadPictures()));
|
||||
}
|
||||
lpMenu->addAction("export...", this, SLOT(onActionExport()));
|
||||
|
||||
lpMenu->addSeparator();
|
||||
lpMenu->addAction("export...", this, SLOT(onActionExport()));
|
||||
|
||||
lpMenu->popup(lpTreeView->viewport()->mapToGlobal(pos));
|
||||
*/
|
||||
lpMenu->popup(lpTreeView->viewport()->mapToGlobal(pos));
|
||||
*/
|
||||
}
|
||||
|
||||
void cMainWindow::onDoubleClicked(const QModelIndex &index)
|
||||
void cMainWindow::onDoubleClicked(const QModelIndex &/*index*/)
|
||||
{
|
||||
}
|
||||
|
||||
void cMainWindow::onPressed(const QModelIndex &index)
|
||||
void cMainWindow::onPressed(const QModelIndex &/*index*/)
|
||||
{
|
||||
switch(QGuiApplication::mouseButtons())
|
||||
{
|
||||
|
||||
+5
-18
@@ -42,27 +42,14 @@ private:
|
||||
void loadDB();
|
||||
void displayDB();
|
||||
|
||||
void onCustomContextMenuRequested(const QTreeView *lpTreeView, const QPoint &pos);
|
||||
void onDoubleClicked(const QModelIndex &index);
|
||||
void onPressed(const QModelIndex &index);
|
||||
QStandardItem* newItem(const QString& szText, qint32 type, const QVariant &data, Qt::Alignment align = Qt::AlignLeft, bool bold = false, bool italic = false, const QColor& foreground = QColor(), const QColor& background = QColor());
|
||||
|
||||
protected:
|
||||
void initSettings();
|
||||
private slots:
|
||||
void onCustomContextMenuRequestedOriginal(const QPoint &pos);
|
||||
void onDoubleClickedOriginal(const QModelIndex &index);
|
||||
void onPressedOriginal(const QModelIndex &index);
|
||||
void onExpandedOriginal(const QModelIndex &index);
|
||||
void onCollapsedOriginal(const QModelIndex &index);
|
||||
void onSelectionChangedOriginal(const QItemSelection &selected, const QItemSelection &deselected);
|
||||
void onScrollbarValueChangedOriginal(int value);
|
||||
|
||||
void onCustomContextMenuRequestedNew(const QPoint &pos);
|
||||
void onDoubleClickedNew(const QModelIndex &index);
|
||||
void onPressedNew(const QModelIndex &index);
|
||||
void onExpandedNew(const QModelIndex &index);
|
||||
void onCollapsedNew(const QModelIndex &index);
|
||||
void onSelectionChangedNew(const QItemSelection &selected, const QItemSelection &deselected);
|
||||
void onScrollbarValueChangedNew(int value);
|
||||
void onCustomContextMenuRequested(const QPoint &pos);
|
||||
void onDoubleClicked(const QModelIndex &index);
|
||||
void onPressed(const QModelIndex &index);
|
||||
};
|
||||
|
||||
#endif // CMAINWINDOW_H
|
||||
|
||||
+1
-7
@@ -16,13 +16,7 @@
|
||||
<widget class="QWidget" name="centralWidget">
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QSplitter" name="m_lpSplitter">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<widget class="QTreeView" name="m_lpMusicListOriginal"/>
|
||||
<widget class="QTreeView" name="m_lpMusicListNew"/>
|
||||
</widget>
|
||||
<widget class="QTreeView" name="m_lpMusicList"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
|
||||
+3
-5
@@ -66,7 +66,6 @@ void cMediaInfo::clear()
|
||||
m_szSubTitle = "";
|
||||
m_szAlbum = "";
|
||||
m_szOriginalAlbum = "";
|
||||
m_szTrackNumber = "";
|
||||
m_szPartOfSet = "";
|
||||
m_szSubTitleOfSet = "";
|
||||
m_szInternationalStandardRecordingCode = "";
|
||||
@@ -119,7 +118,6 @@ void cMediaInfo::clear()
|
||||
m_szTitle = "";
|
||||
m_szRating = "";
|
||||
m_szCopyright = "";
|
||||
m_szTrackNumber = "";
|
||||
m_iYear = -1;
|
||||
|
||||
m_iID3v2Version = -1;
|
||||
@@ -487,9 +485,9 @@ qint32 cMediaInfo::writeFilename()
|
||||
}
|
||||
|
||||
if(query.next())
|
||||
query.prepare("UPDATE file SET fileType=:fileType, length=:length, bitrate=:bitrate, sampleRate=:sampleRate, channels=:channels, bitsPerSample=:bitsPerSample, layer=:layer, version=:version, sampleWidth=:sampleWidth, sampleFrames=:sampleFrames, isEncrypted=:isEncrypted, trackGain=:trackGain, albumGain=:albumGain, trackPeak=:trackPeak, albumPeak=:albumPeak, protectionEnabled=:protectionEnabled, channelMode=:channelMode, isCopyrighted=:isCopyrighted, isOriginal=:isOriginal, album=:album, title=:title, copyright=:copyright, tracknumber=:tracknumber, contentGroupDescription=:contentGroupDescription, subTitle=:subTitle, originalAlbum=:originalAlbum, partOfSet=:partOfSet, subTitleOfSet=:subTitleOfSet, internationalStandardRecordingCode=:internationalStandardRecordingCode, leadArtist=:leadArtist, band=:band, conductor=:conductor, interpret=:interpret, originalArtist=:originalArtist, textWriter=:textWriter, originalTextWriter=:originalTextWriter, composer=:composer, encodedBy=:encodedBy, beatsPerMinute=:beatsPerMinute, language=:language, contentType=:contentType, mediaType=:mediaType, mood=:mood, producedNotice=:producedNotice, publisher=:publisher, fileOwner=:fileOwner, internetRadioStationName=:internetRadioStationName, internetRadioStationOwner=:internetRadioStationOwner, originalFilename=:originalFilename, playlistDelay=:playlistDelay, encodingTime=:encodingTime, originalReleaseTime=:originalReleaseTime, recordingTime=:recordingTime, releaseTime=:releaseTime, taggingTime=:taggingTime, swhwSettings=:swhwSettings, albumSortOrder=:albumSortOrder, performerSortOrder=:performerSortOrder, titleSortOrder=:titleSortOrder, synchronizedLyrics=:synchronizedLyrics, unsynchronizedLyrics=:unsynchronizedLyrics WHERE filename=:filename AND filesize=:filesize AND filedate=:filedate;");
|
||||
query.prepare("UPDATE file SET fileType=:fileType, length=:length, bitrate=:bitrate, sampleRate=:sampleRate, channels=:channels, bitsPerSample=:bitsPerSample, layer=:layer, version=:version, sampleWidth=:sampleWidth, sampleFrames=:sampleFrames, isEncrypted=:isEncrypted, trackGain=:trackGain, albumGain=:albumGain, trackPeak=:trackPeak, albumPeak=:albumPeak, protectionEnabled=:protectionEnabled, channelMode=:channelMode, isCopyrighted=:isCopyrighted, isOriginal=:isOriginal, album=:album, title=:title, copyright=:copyright, trackNumber=:trackNumber, contentGroupDescription=:contentGroupDescription, subTitle=:subTitle, originalAlbum=:originalAlbum, partOfSet=:partOfSet, subTitleOfSet=:subTitleOfSet, internationalStandardRecordingCode=:internationalStandardRecordingCode, leadArtist=:leadArtist, band=:band, conductor=:conductor, interpret=:interpret, originalArtist=:originalArtist, textWriter=:textWriter, originalTextWriter=:originalTextWriter, composer=:composer, encodedBy=:encodedBy, beatsPerMinute=:beatsPerMinute, language=:language, contentType=:contentType, mediaType=:mediaType, mood=:mood, producedNotice=:producedNotice, publisher=:publisher, fileOwner=:fileOwner, internetRadioStationName=:internetRadioStationName, internetRadioStationOwner=:internetRadioStationOwner, originalFilename=:originalFilename, playlistDelay=:playlistDelay, encodingTime=:encodingTime, originalReleaseTime=:originalReleaseTime, recordingTime=:recordingTime, releaseTime=:releaseTime, taggingTime=:taggingTime, swhwSettings=:swhwSettings, albumSortOrder=:albumSortOrder, performerSortOrder=:performerSortOrder, titleSortOrder=:titleSortOrder, synchronizedLyrics=:synchronizedLyrics, unsynchronizedLyrics=:unsynchronizedLyrics WHERE filename=:filename AND filesize=:filesize AND filedate=:filedate;");
|
||||
else
|
||||
query.prepare("INSERT INTO file (fileName, fileSize, fileDate, fileType, length, bitrate, sampleRate, channels, bitsPerSample, layer, version, sampleWidth, sampleFrames, isEncrypted, trackGain, albumGain, trackPeak, albumPeak, protectionEnabled, channelMode, isCopyrighted, isOriginal, album, title, copyright, tracknumber, contentGroupDescription, subTitle, originalAlbum, partOfSet, subTitleOfSet, internationalStandardRecordingCode, leadArtist, band, conductor, interpret, originalArtist, textWriter, originalTextWriter, composer, encodedBy, beatsPerMinute, language, contentType, mediaType, mood, producedNotice, publisher, fileOwner, internetRadioStationName, internetRadioStationOwner, originalFilename, playlistDelay, encodingTime, originalReleaseTime, recordingTime, releaseTime, taggingTime, swhwSettings, albumSortOrder, performerSortOrder, titleSortOrder, synchronizedLyrics, unsynchronizedLyrics) VALUES (:fileName, :fileSize, :fileDate, :fileType, :length, :bitrate, :sampleRate, :channels, :bitsPerSample, :layer, :version, :sampleWidth, :sampleFrames, :isEncrypted, :trackGain, :albumGain, :trackPeak, :albumPeak, :protectionEnabled, :channelMode, :isCopyrighted, :isOriginal, :album, :title, :copyright, :tracknumber, :contentGroupDescription, :subTitle, :originalAlbum, :partOfSet, :subTitleOfSet, :internationalStandardRecordingCode, :leadArtist, :band, :conductor, :interpret, :originalArtist, :textWriter, :originalTextWriter, :composer, :encodedBy, :beatsPerMinute, :language, :contentType, :mediaType, :mood, :producedNotice, :publisher, :fileOwner, :internetRadioStationName, :internetRadioStationOwner, :originalFilename, :playlistDelay, :encodingTime, :originalReleaseTime, :recordingTime, :releaseTime, :taggingTime, :swhwSettings, :albumSortOrder, :performerSortOrder, :titleSortOrder, :synchronizedLyrics, :unsynchronizedLyrics);");
|
||||
query.prepare("INSERT INTO file (fileName, fileSize, fileDate, fileType, length, bitrate, sampleRate, channels, bitsPerSample, layer, version, sampleWidth, sampleFrames, isEncrypted, trackGain, albumGain, trackPeak, albumPeak, protectionEnabled, channelMode, isCopyrighted, isOriginal, album, title, copyright, trackNumber, contentGroupDescription, subTitle, originalAlbum, partOfSet, subTitleOfSet, internationalStandardRecordingCode, leadArtist, band, conductor, interpret, originalArtist, textWriter, originalTextWriter, composer, encodedBy, beatsPerMinute, language, contentType, mediaType, mood, producedNotice, publisher, fileOwner, internetRadioStationName, internetRadioStationOwner, originalFilename, playlistDelay, encodingTime, originalReleaseTime, recordingTime, releaseTime, taggingTime, swhwSettings, albumSortOrder, performerSortOrder, titleSortOrder, synchronizedLyrics, unsynchronizedLyrics) VALUES (:fileName, :fileSize, :fileDate, :fileType, :length, :bitrate, :sampleRate, :channels, :bitsPerSample, :layer, :version, :sampleWidth, :sampleFrames, :isEncrypted, :trackGain, :albumGain, :trackPeak, :albumPeak, :protectionEnabled, :channelMode, :isCopyrighted, :isOriginal, :album, :title, :copyright, :trackNumber, :contentGroupDescription, :subTitle, :originalAlbum, :partOfSet, :subTitleOfSet, :internationalStandardRecordingCode, :leadArtist, :band, :conductor, :interpret, :originalArtist, :textWriter, :originalTextWriter, :composer, :encodedBy, :beatsPerMinute, :language, :contentType, :mediaType, :mood, :producedNotice, :publisher, :fileOwner, :internetRadioStationName, :internetRadioStationOwner, :originalFilename, :playlistDelay, :encodingTime, :originalReleaseTime, :recordingTime, :releaseTime, :taggingTime, :swhwSettings, :albumSortOrder, :performerSortOrder, :titleSortOrder, :synchronizedLyrics, :unsynchronizedLyrics);");
|
||||
|
||||
query.bindValue(":fileName", fileName());
|
||||
query.bindValue(":fileSize", fileSize());
|
||||
@@ -516,7 +514,7 @@ qint32 cMediaInfo::writeFilename()
|
||||
query.bindValue(":album", album());
|
||||
query.bindValue(":title", title());
|
||||
query.bindValue(":copyright", copyright());
|
||||
query.bindValue(":tracknumber", trackNumber());
|
||||
query.bindValue(":trackNumber", trackNumber());
|
||||
query.bindValue(":contentGroupDescription", contentGroupDescription());
|
||||
query.bindValue(":subTitle", subTitle());
|
||||
query.bindValue(":originalAlbum", originalAlbum());
|
||||
|
||||
@@ -2,6 +2,9 @@
|
||||
#define COMMON_H
|
||||
|
||||
|
||||
#include <QDebug>
|
||||
|
||||
|
||||
#define MUSICLIST_ORI_ALBUM 0
|
||||
#define MUSICLIST_ORI_TRACK 1
|
||||
|
||||
@@ -9,11 +12,24 @@
|
||||
#define MUSICLIST_NEW_TRACK 3
|
||||
|
||||
|
||||
#include <QDebug>
|
||||
#define SORT_ALBUM_ASC 0x0001
|
||||
#define SORT_ALBUM_DESC 0x0002
|
||||
#define SORT_BAND_ASC 0x0004
|
||||
#define SORT_BAND_DESC 0x0008
|
||||
|
||||
#define SORT_TRACK_ASC 0x0010
|
||||
#define SORT_TRACK_DESC 0x0020
|
||||
|
||||
|
||||
//#define myDebug qDebug() << __FILE__ << "(" << __LINE__ << ") - " << __PRETTY_FUNCTION__ << ":"
|
||||
#define myDebug qDebug() << __FILE__ << "(" << __LINE__ << ") - " << __FUNCTION__ << ":"
|
||||
#define USERROLE_TYPE (Qt::UserRole+1)
|
||||
#define USERROLE_VALUE (Qt::UserRole+2)
|
||||
|
||||
#define USERROLE_TYPE_BAND 1
|
||||
#define USERROLE_TYPE_ALBUM 2
|
||||
#define USERROLE_TYPE_TRACK 3
|
||||
|
||||
|
||||
#define myDebug qDebug() << __FILE__ << "(" << __LINE__ << ") - " << __PRETTY_FUNCTION__ << ":"
|
||||
|
||||
|
||||
#endif // COMMON_H
|
||||
|
||||
+84
-11
@@ -1,14 +1,69 @@
|
||||
#include "common.h"
|
||||
|
||||
#include "ctrack.h"
|
||||
|
||||
|
||||
cTrack::cTrack(cAlbum* lpAlbum, const QString& szTitle, const qint16& trackNumber, const QString& szPartOfSet, const QString& szBand, const QString& szComposer, const QDate& recordingTime) :
|
||||
class cTrackCompare
|
||||
{
|
||||
public:
|
||||
cTrackCompare(qint32 sort) : m_sort(sort) {}
|
||||
|
||||
bool operator()(cTrack* lpFirst, cTrack* lpSecond)
|
||||
{
|
||||
qint16 t1 = 0;
|
||||
qint16 t2 = 0;
|
||||
if(!lpFirst->trackNumber().isEmpty())
|
||||
{
|
||||
if(lpFirst->trackNumber().contains("/"))
|
||||
t1 = lpFirst->trackNumber().left(lpFirst->trackNumber().indexOf("/")).toInt();
|
||||
else
|
||||
t1 = lpFirst->trackNumber().toInt();
|
||||
}
|
||||
|
||||
if(!lpSecond->trackNumber().isEmpty())
|
||||
{
|
||||
if(lpSecond->trackNumber().contains("/"))
|
||||
t2 = lpSecond->trackNumber().left(lpSecond->trackNumber().indexOf("/")).toInt();
|
||||
else
|
||||
t2 = lpSecond->trackNumber().toInt();
|
||||
}
|
||||
|
||||
if(m_sort & SORT_TRACK_ASC)
|
||||
{
|
||||
if(t1 < t2)
|
||||
return(true);
|
||||
else if(t1 > t2)
|
||||
return(false);
|
||||
else
|
||||
return(false);
|
||||
}
|
||||
else if(m_sort & SORT_TRACK_DESC)
|
||||
{
|
||||
if(t1 > t2)
|
||||
return(true);
|
||||
else if(t1 < t2)
|
||||
return(false);
|
||||
else
|
||||
return(false);
|
||||
}
|
||||
else
|
||||
return(false);
|
||||
}
|
||||
|
||||
private:
|
||||
qint32 m_sort;
|
||||
};
|
||||
|
||||
cTrack::cTrack(cAlbum* lpAlbum, const QString& szTitle, const QString &szTrackNumber, const QString& szPartOfSet, const QString& szBand, const QString& szLeadArtist, const QString& szComposer, const QDate& recordingTime, const QString& szFileName) :
|
||||
m_lpAlbum(lpAlbum),
|
||||
m_szTitle(szTitle),
|
||||
m_iTrackNumber(trackNumber),
|
||||
m_szTrackNumber(szTrackNumber),
|
||||
m_szPartOfSet(szPartOfSet),
|
||||
m_szBand(szBand),
|
||||
m_szLeadArtist(szLeadArtist),
|
||||
m_szComposer(szComposer),
|
||||
m_recordingTime(recordingTime)
|
||||
m_recordingTime(recordingTime),
|
||||
m_szFileName(szFileName)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -32,14 +87,14 @@ QString cTrack::title()
|
||||
return(m_szTitle);
|
||||
}
|
||||
|
||||
void cTrack::setTrackNumber(const qint16& trackNumber)
|
||||
void cTrack::setTrackNumber(const QString &szTrackNumber)
|
||||
{
|
||||
m_iTrackNumber = trackNumber;
|
||||
m_szTrackNumber = szTrackNumber;
|
||||
}
|
||||
|
||||
qint16 cTrack::trackNumber()
|
||||
QString cTrack::trackNumber()
|
||||
{
|
||||
return(m_iTrackNumber);
|
||||
return(m_szTrackNumber);
|
||||
}
|
||||
|
||||
void cTrack::setPartOfSet(const QString& szPartOfSet)
|
||||
@@ -82,20 +137,38 @@ QDate cTrack::recordingTime()
|
||||
return(m_recordingTime);
|
||||
}
|
||||
|
||||
cTrack* cTrackList::add(cAlbum* lpAlbum, const QString& szTitle, const qint16& trackNumber, const QString& szPartOfSet, const QString& szBand, const QString& szComposer, const QDate &recordingTime)
|
||||
void cTrack::setFileName(const QString& szFileName)
|
||||
{
|
||||
m_szFileName = szFileName;
|
||||
}
|
||||
|
||||
QString cTrack::fileName()
|
||||
{
|
||||
return(m_szFileName);
|
||||
}
|
||||
|
||||
cTrack* cTrackList::add(cAlbum* lpAlbum, const QString& szTitle, const QString& szTrackNumber, const QString& szPartOfSet, const QString& szBand, const QString& szLeadArtist, const QString& szComposer, const QDate& recordingTime, const QString& szFileName)
|
||||
{
|
||||
QString szTitle1 = szTitle;
|
||||
QString szBand1 = szBand;
|
||||
QString szLeadArtist1 = szLeadArtist;
|
||||
QString szComposer1 = szComposer;
|
||||
|
||||
if(szTitle1.isEmpty())
|
||||
szTitle1 = "*** NO TITLE ***";
|
||||
if(szBand1.isEmpty())
|
||||
szBand1 = "*** NO BAND ***";
|
||||
szBand1 = "*** NO BAND ***";
|
||||
if(szLeadArtist1.isEmpty())
|
||||
szLeadArtist1 = "*** NO LEAD ARTIST ***";
|
||||
if(szComposer1.isEmpty())
|
||||
szComposer1 = "*** NO COMPOSER ***";
|
||||
szComposer1 = "*** NO COMPOSER ***";
|
||||
|
||||
cTrack* lpTrackNew = new cTrack(lpAlbum, szTitle1, trackNumber, szPartOfSet, szBand1, szComposer1, recordingTime);
|
||||
cTrack* lpTrackNew = new cTrack(lpAlbum, szTitle1, szTrackNumber, szPartOfSet, szBand1, szLeadArtist1, szComposer1, recordingTime, szFileName);
|
||||
append(lpTrackNew);
|
||||
return(lpTrackNew);
|
||||
}
|
||||
|
||||
void cTrackList::sort(qint32 sort)
|
||||
{
|
||||
std::sort(begin(), end(), cTrackCompare(sort));
|
||||
}
|
||||
|
||||
@@ -10,10 +10,70 @@
|
||||
|
||||
class cAlbum;
|
||||
|
||||
/*
|
||||
" fileName TEXT, "
|
||||
" fileSize INTEGER, "
|
||||
" fileDate DATE, "
|
||||
" fileType TEXT, "
|
||||
" length INTEGER, "
|
||||
" bitrate INTEGER, "
|
||||
" sampleRate INTEGER, "
|
||||
" channels INTEGER, "
|
||||
" bitsPerSample INTEGER, "
|
||||
" layer INTEGER, "
|
||||
" version INTEGER, "
|
||||
" sampleWidth INTEGER, "
|
||||
" sampleFrames INTEGER, "
|
||||
" isEncrypted BOOL, "
|
||||
" trackGain INTEGER, "
|
||||
" albumGain INTEGER, "
|
||||
" trackPeak INTEGER, "
|
||||
" albumPeak INTEGER, "
|
||||
" protectionEnabled BOOL, "
|
||||
" channelMode INTEGER, "
|
||||
" isCopyrighted BOOL, "
|
||||
" isOriginal BOOL, "
|
||||
" copyright TEXT, "
|
||||
" contentGroupDescription TEXT, "
|
||||
" subTitle TEXT, "
|
||||
" originalAlbum TEXT, "
|
||||
" subTitleOfSet TEXT, "
|
||||
" internationalStandardRecordingCode TEXT, "
|
||||
" leadArtist TEXT, "
|
||||
" conductor TEXT, "
|
||||
" interpret TEXT, "
|
||||
" originalArtist TEXT, "
|
||||
" textWriter TEXT, "
|
||||
" originalTextWriter TEXT, "
|
||||
" encodedBy TEXT, "
|
||||
" beatsPerMinute INTEGER, "
|
||||
" language TEXT, "
|
||||
" contentType TEXT, "
|
||||
" mediaType TEXT, "
|
||||
" mood TEXT, "
|
||||
" producedNotice TEXT, "
|
||||
" publisher TEXT, "
|
||||
" fileOwner TEXT, "
|
||||
" internetRadioStationName TEXT, "
|
||||
" internetRadioStationOwner TEXT, "
|
||||
" originalFilename TEXT, "
|
||||
" playlistDelay TEXT, "
|
||||
" encodingTime INTEGER, "
|
||||
" originalReleaseTime DATE, "
|
||||
" releaseTime DATE, "
|
||||
" taggingTime DATE, "
|
||||
" swhwSettings TEXT, "
|
||||
" albumSortOrder TEXT, "
|
||||
" performerSortOrder TEXT, "
|
||||
" titleSortOrder TEXT, "
|
||||
" synchronizedLyrics TEXT, "
|
||||
" unsynchronizedLyrics TEXT)"))
|
||||
*/
|
||||
|
||||
class cTrack
|
||||
{
|
||||
public:
|
||||
cTrack(cAlbum* lpAlbum, const QString& szTitle, const qint16& trackNumber, const QString& szPartOfSet, const QString& szBand, const QString& szComposer, const QDate& recordingTime);
|
||||
cTrack(cAlbum* lpAlbum, const QString& szTitle, const QString& szTrackNumber, const QString& szPartOfSet, const QString& szBand, const QString &szLeadArtist, const QString& szComposer, const QDate& recordingTime, const QString &szFileName);
|
||||
|
||||
void setAlbum(cAlbum* lpAlbum);
|
||||
cAlbum* album();
|
||||
@@ -21,8 +81,8 @@ public:
|
||||
void setTitle(const QString& szTitle);
|
||||
QString title();
|
||||
|
||||
void setTrackNumber(const qint16& trackNumber);
|
||||
qint16 trackNumber();
|
||||
void setTrackNumber(const QString& szTrackNumber);
|
||||
QString trackNumber();
|
||||
|
||||
void setPartOfSet(const QString& szPartOfSet);
|
||||
QString partOfSet();
|
||||
@@ -30,20 +90,28 @@ public:
|
||||
void setBand(const QString& szBand);
|
||||
QString band();
|
||||
|
||||
void setLeadArtist(const QString& szLeadArtist);
|
||||
QString leadArtist();
|
||||
|
||||
void setComposer(const QString& szComposer);
|
||||
QString composer();
|
||||
|
||||
void setRecordingTime(const QDate &recordingTime);
|
||||
QDate recordingTime();
|
||||
|
||||
void setFileName(const QString& szFileName);
|
||||
QString fileName();
|
||||
|
||||
private:
|
||||
cAlbum* m_lpAlbum;
|
||||
QString m_szTitle;
|
||||
qint16 m_iTrackNumber;
|
||||
QString m_szTrackNumber;
|
||||
QString m_szPartOfSet;
|
||||
QString m_szBand;
|
||||
QString m_szLeadArtist;
|
||||
QString m_szComposer;
|
||||
QDate m_recordingTime;
|
||||
QString m_szFileName;
|
||||
};
|
||||
|
||||
Q_DECLARE_METATYPE(cTrack*)
|
||||
@@ -51,7 +119,8 @@ Q_DECLARE_METATYPE(cTrack*)
|
||||
class cTrackList : public QList<cTrack*>
|
||||
{
|
||||
public:
|
||||
cTrack* add(cAlbum* lpAlbum, const QString& szTitle, const qint16& trackNumber, const QString& szPartOfSet, const QString& szBand, const QString& szComposer, const QDate& recordingTime);
|
||||
cTrack* add(cAlbum* lpAlbum, const QString& szTitle, const QString& szTrackNumber, const QString& szPartOfSet, const QString& szBand, const QString& szLeadArtist, const QString& szComposer, const QDate& recordingTime, const QString& szFileName);
|
||||
void sort(qint32 sort);
|
||||
};
|
||||
|
||||
#endif // CTRACK_H
|
||||
|
||||
+2
-1
@@ -58,6 +58,7 @@ HEADERS += cmainwindow.h \
|
||||
cpixmap.h \
|
||||
cmusicviewitemdelegate.h \
|
||||
calbum.h \
|
||||
ctrack.h
|
||||
ctrack.h \
|
||||
common.h
|
||||
|
||||
FORMS += cmainwindow.ui
|
||||
|
||||
Reference in New Issue
Block a user