Skip to content

Commit b6e37a1

Browse files
committed
sequence info dialog enhanced
1 parent 4bcb6f7 commit b6e37a1

File tree

5 files changed

+66
-10
lines changed

5 files changed

+66
-10
lines changed

guiplayer.cpp

+35-8
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,18 @@
1616
along with this program. If not, see <http://www.gnu.org/licenses/>.
1717
*/
1818

19+
#include <QActionGroup>
20+
#include <QDesktopServices>
1921
#include <QFileDialog>
20-
#include <QToolTip>
21-
#include <QMessageBox>
22-
#include <QInputDialog>
2322
#include <QFileInfo>
23+
#include <QInputDialog>
24+
#include <QMessageBox>
25+
#include <QMimeData>
26+
#include <QStandardPaths>
2427
#include <QTime>
2528
#include <QTimer>
26-
#include <QMimeData>
29+
#include <QToolTip>
2730
#include <QtMath>
28-
#include <QActionGroup>
29-
#include <QStandardPaths>
30-
#include <QDesktopServices>
3131
#if QT_VERSION < QT_VERSION_CHECK(5,14,0)
3232
#include <QDesktopWidget>
3333
#else
@@ -1034,11 +1034,18 @@ void GUIPlayer::slotSwitchLanguage(QAction *action)
10341034
void GUIPlayer::slotFileInfo()
10351035
{
10361036
QString infostr;
1037+
QLocale locale(Settings::instance()->language());
10371038
if (m_player->song()->currentFile().isEmpty())
10381039
infostr = tr("<b>No file loaded</b>");
10391040
else {
10401041
infostr = tr("File: <b>%1</b><br>").arg(m_player->song()->currentFile());
1041-
QString s = m_player->song()->getFileFormat();
1042+
1043+
QFileInfo finfo(m_player->song()->currentFullFileName());
1044+
QString s = locale.toString(finfo.lastModified(), QLocale::LongFormat);
1045+
if (!s.isEmpty())
1046+
infostr += tr("Date: <b>%1</b><br/>").arg(s);
1047+
1048+
s = m_player->song()->getFileFormat();
10421049
if (!s.isEmpty())
10431050
infostr += tr("Format: <b>%1</b><br>").arg(s);
10441051

@@ -1070,6 +1077,26 @@ void GUIPlayer::slotFileInfo()
10701077
if (!s.isEmpty())
10711078
infostr += tr("Karaoke things: <b>%1</b><br>").arg(s);
10721079

1080+
s = QString::number(m_player->song()->getNumTracks());
1081+
if (!s.isEmpty())
1082+
infostr += tr("Number of tracks: <b>%1</b><br/>").arg(s);
1083+
1084+
s = QString::number(m_player->song()->size());
1085+
if (!s.isEmpty())
1086+
infostr += tr("Number of events: <b>%1</b><br/>").arg(s);
1087+
1088+
s = QString::number(m_player->song()->getDivision());
1089+
if (!s.isEmpty())
1090+
infostr += tr("Division: <b>%1 ppqn</b><br/>").arg(s);
1091+
1092+
s = QString::number(m_player->initialBPM());
1093+
if (!s.isEmpty())
1094+
infostr += tr("Initial tempo: <b>%7 bpm</b><br/>").arg(s);
1095+
1096+
s = m_player->song()->duration();
1097+
if (!s.isEmpty())
1098+
infostr += tr("Duration: <b>%1</b><br/>").arg(s);
1099+
10731100
s = m_player->song()->getMetadataInfo();
10741101
if (!s.isEmpty())
10751102
infostr += s;

seqplayer.cpp

+7-2
Original file line numberDiff line numberDiff line change
@@ -338,8 +338,8 @@ void SequencePlayer::playerLoop()
338338

339339
emit songStopped();
340340
if (!m_song.hasMoreEvents()) {
341-
qDebug() << "Final Song Position:" << m_songPositionTicks
342-
<< (currentTime - startTime).count() / 1e9;
341+
// qDebug() << "Final Song Position:" << m_songPositionTicks
342+
// << (currentTime - startTime).count() / 1e9;
343343
emit songFinished();
344344
}
345345
dispatcher->processEvents(eventFilter);
@@ -366,6 +366,11 @@ qreal SequencePlayer::currentBPM() const
366366
return bpm(m_song.currentTempo());
367367
}
368368

369+
qreal SequencePlayer::initialBPM() const
370+
{
371+
return bpm(m_song.initialTempo());
372+
}
373+
369374
Sequence *SequencePlayer::song()
370375
{
371376
return &m_song;

seqplayer.h

+1
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ class SequencePlayer : public QObject
4848
drumstick::rt::MIDIOutput* port() const;
4949
qreal bpm(qreal tempo) const;
5050
qreal currentBPM() const;
51+
qreal initialBPM() const;
5152
bool isRunning();
5253
Sequence *song();
5354
int getPosition();

sequence.cpp

+17
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,9 @@ void Sequence::clear()
291291
m_lowestMidiNote = 127;
292292
m_highestMidiNote = 0;
293293
m_curTrack = 0;
294+
m_duration = 0;
295+
m_initialTempo = 0;
296+
m_firstTime = true;
294297
m_codec = nullptr;
295298
m_infoMap.clear();
296299
for(int i=0; i<MIDI_STD_CHANNELS; ++i) {
@@ -422,6 +425,16 @@ int Sequence::errorsCount() const
422425
return m_loadingErrors.size();
423426
}
424427

428+
QString Sequence::duration() const
429+
{
430+
std::chrono::microseconds us = timeOfTicks(m_ticksDuration);
431+
qreal seconds = us.count() / 1e6;
432+
double fractpart, intpart;
433+
fractpart = modf(seconds, &intpart);
434+
QTime t = QTime(0, 0).addSecs(intpart).addMSecs(ceil(fractpart * 1000));
435+
return t.toString("hh:mm:ss.zzz");
436+
}
437+
425438
QTextCodec *Sequence::codec() const
426439
{
427440
return m_codec;
@@ -613,6 +626,10 @@ void Sequence::updateTempo(qreal newTempo)
613626
//qDebug() << Q_FUNC_INFO << newTempo;
614627
m_tempo = newTempo;
615628
timeCalculations();
629+
if (m_firstTime) {
630+
m_initialTempo = newTempo;
631+
m_firstTime = false;
632+
};
616633
}
617634
}
618635

sequence.h

+6
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,10 @@ class Sequence : public QObject
124124
QString loadingErrors() const;
125125
int errorsCount() const;
126126

127+
qsizetype size() const { return m_list.size(); }
128+
qreal initialTempo() const { return m_initialTempo; }
129+
QString duration() const;
130+
127131
signals:
128132
void loadingStart(int size);
129133
void loadingProgress(int pos);
@@ -289,6 +293,8 @@ public slots:
289293
QMap<int, int> m_trkChannel;
290294
QMap<QString, QString> m_infoMap;
291295
QList<QString> m_loadingErrors;
296+
bool m_firstTime{true};
297+
qreal m_initialTempo{0};
292298
};
293299

294300
#endif // SEQUENCE_H

0 commit comments

Comments
 (0)