made better use of Ui::trayActivated() so it can not only display the

context menu, it will also show the app when double clicked.
AudFile::getDuration() and AudFile::duration() can now calculate the
length of the audio based on the rate at which QMediaPlayer calls
AudFile::seek() and the amount of data it pulls at a time. it converts
that time internally to a string, where it is then used to display on
Ui::timeDisp. i've also modified the minimize to tray function as a
feasure that can be turned on/off within Conf and added the needed check
box to the config menu.
This commit is contained in:
Maurice O'Neal 2016-10-25 20:00:33 -04:00 committed by Maurice O'Neal
parent 2fa5bc7bf3
commit c3ec7e7085
5 changed files with 59 additions and 15 deletions

View File

@ -5,6 +5,7 @@ Ui::Ui(const QStringList &args, QWidget *parent) : QWidget(parent)
QWidget *btnWid = new QWidget(this); QWidget *btnWid = new QWidget(this);
QHBoxLayout *btnLayout = new QHBoxLayout(btnWid); QHBoxLayout *btnLayout = new QHBoxLayout(btnWid);
QVBoxLayout *mainLayout = new QVBoxLayout(this); QVBoxLayout *mainLayout = new QVBoxLayout(this);
QLabel *timeDisp = new QLabel("00:00:00", this);
Icon *trayPausePlay = new Icon(Icon::PAUSE_PLAY, this); Icon *trayPausePlay = new Icon(Icon::PAUSE_PLAY, this);
Icon *trayOpen = new Icon(Icon::OPEN, this); Icon *trayOpen = new Icon(Icon::OPEN, this);
Icon *trayStop = new Icon(Icon::STOP, this); Icon *trayStop = new Icon(Icon::STOP, this);
@ -38,7 +39,7 @@ Ui::Ui(const QStringList &args, QWidget *parent) : QWidget(parent)
fileName->setText(tr("Ready")); fileName->setText(tr("Ready"));
fileName->setFont(fnt); fileName->setFont(fnt);
slider->setOrientation(Qt::Horizontal); slider->setOrientation(Qt::Horizontal);
trayIcon->show(); trayIcon->setVisible(conf->trayIcon());
trayIcon->setContextMenu(trayMenu); trayIcon->setContextMenu(trayMenu);
conf->populateOptionsMenu(menu, this); conf->populateOptionsMenu(menu, this);
player->setVolume(conf->getVolume()); player->setVolume(conf->getVolume());
@ -56,6 +57,7 @@ Ui::Ui(const QStringList &args, QWidget *parent) : QWidget(parent)
btnLayout->addWidget(settings); btnLayout->addWidget(settings);
mainLayout->addWidget(fileName); mainLayout->addWidget(fileName);
mainLayout->addWidget(slider); mainLayout->addWidget(slider);
mainLayout->addWidget(timeDisp, 0, Qt::AlignCenter);
mainLayout->addWidget(btnWid, 0, Qt::AlignCenter); mainLayout->addWidget(btnWid, 0, Qt::AlignCenter);
connect(trayRestore, SIGNAL(restore()), this, SLOT(showNormal())); connect(trayRestore, SIGNAL(restore()), this, SLOT(showNormal()));
@ -75,11 +77,13 @@ Ui::Ui(const QStringList &args, QWidget *parent) : QWidget(parent)
connect(player, SIGNAL(error(QMediaPlayer::Error)), this, SLOT(error(QMediaPlayer::Error))); connect(player, SIGNAL(error(QMediaPlayer::Error)), this, SLOT(error(QMediaPlayer::Error)));
connect(player, SIGNAL(stateChanged(QMediaPlayer::State)), pausePlay, SLOT(stateChanged(QMediaPlayer::State))); connect(player, SIGNAL(stateChanged(QMediaPlayer::State)), pausePlay, SLOT(stateChanged(QMediaPlayer::State)));
connect(player, SIGNAL(stateChanged(QMediaPlayer::State)), trayPausePlay, SLOT(stateChanged(QMediaPlayer::State))); connect(player, SIGNAL(stateChanged(QMediaPlayer::State)), trayPausePlay, SLOT(stateChanged(QMediaPlayer::State)));
connect(ioDev, SIGNAL(duration(QString)), timeDisp, SLOT(setText(QString)));
connect(ioDev, SIGNAL(posChanged(qint64)), this, SLOT(posChanged(qint64))); connect(ioDev, SIGNAL(posChanged(qint64)), this, SLOT(posChanged(qint64)));
connect(ioDev, SIGNAL(endOfPlayback()), this, SLOT(nextFile())); connect(ioDev, SIGNAL(endOfPlayback()), this, SLOT(nextFile()));
connect(slider, SIGNAL(sliderPressed()), this, SLOT(sliderPressed())); connect(slider, SIGNAL(sliderPressed()), this, SLOT(sliderPressed()));
connect(slider, SIGNAL(sliderReleased()), this, SLOT(sliderReleased())); connect(slider, SIGNAL(sliderReleased()), this, SLOT(sliderReleased()));
connect(conf, SIGNAL(volume(int)), player, SLOT(setVolume(int))); connect(conf, SIGNAL(volume(int)), player, SLOT(setVolume(int)));
connect(conf, SIGNAL(enableTrayIcon(bool)), trayIcon, SLOT(setVisible(bool)));
if (args.size() > 1) if (args.size() > 1)
{ {
@ -224,14 +228,21 @@ void Ui::fileDir(char direction)
void Ui::trayActivated(QSystemTrayIcon::ActivationReason reason) void Ui::trayActivated(QSystemTrayIcon::ActivationReason reason)
{ {
Q_UNUSED(reason); if (reason == QSystemTrayIcon::DoubleClick)
{
showNormal();
raise();
activateWindow();
}
else if (reason == QSystemTrayIcon::Trigger)
{
trayMenu->popup(trayIcon->geometry().center()); trayMenu->popup(trayIcon->geometry().center());
}
} }
void Ui::changeEvent(QEvent *event) void Ui::changeEvent(QEvent *event)
{ {
if (event->type() == QEvent::WindowStateChange) if ((event->type() == QEvent::WindowStateChange) && conf->trayIcon())
{ {
if (windowState() & Qt::WindowMinimized) if (windowState() & Qt::WindowMinimized)
{ {

View File

@ -96,9 +96,13 @@ qint64 AudFile::getOffset()
return offset; return offset;
} }
qint64 AudFile::getDuration() QString AudFile::getDuration()
{ {
return ((size() - offset) / buffRate) * 1000; QTime time(0, 0, 0, 0);
time = time.addMSecs((size() / buffRate) * 1000);
return time.toString("hh:mm:ss");
} }
void AudFile::delayFinished() void AudFile::delayFinished()

View File

@ -6,7 +6,9 @@
#include <QObject> #include <QObject>
#include <QString> #include <QString>
#include <QTimer> #include <QTimer>
#include <QTime>
#include <QDebug> #include <QDebug>
#include <QStringList>
class AudFile : public QFile class AudFile : public QFile
{ {
@ -29,7 +31,7 @@ public:
bool openFile(const QString &path); bool openFile(const QString &path);
bool seek(qint64 off); bool seek(qint64 off);
qint64 getOffset(); qint64 getOffset();
qint64 getDuration(); QString getDuration();
~AudFile(); ~AudFile();
@ -37,7 +39,7 @@ signals:
void posChanged(qint64 off); void posChanged(qint64 off);
void endOfPlayback(); void endOfPlayback();
void duration(qint64 msec); void duration(QString timeStr);
}; };
#endif // AUD_FILE_H #endif // AUD_FILE_H

View File

@ -23,7 +23,6 @@ QWidget *MenuItem::createWidget(QWidget *parent)
layout->addWidget(new QLabel(str, parent)); layout->addWidget(new QLabel(str, parent));
return widget; return widget;
} }
} }
@ -46,12 +45,15 @@ Conf::Conf(QObject *parent) : QObject(parent)
QByteArray pathBa = idm.value(LAST_PATH); QByteArray pathBa = idm.value(LAST_PATH);
QByteArray nextBa = idm.value(NEXT_FILE); QByteArray nextBa = idm.value(NEXT_FILE);
QByteArray trayBa = idm.value(TRAY_ICON);
QByteArray volBa = idm.value(VOLUME); QByteArray volBa = idm.value(VOLUME);
if (!pathBa.isEmpty()) lastPath = pathBa; if (!pathBa.isEmpty()) lastPath = pathBa;
else lastPath = QDir::homePath(); else lastPath = QDir::homePath();
if (!nextBa.isEmpty()) nextFileState = (nextBa == "Y"); if (!nextBa.isEmpty()) nextFileState = (nextBa == "Y");
else nextFileState = true; else nextFileState = true;
if (!trayBa.isEmpty()) showTrayIcon = (trayBa == "Y");
else showTrayIcon = false;
if (!volBa.isEmpty()) volumeValue = rdInt(volBa); if (!volBa.isEmpty()) volumeValue = rdInt(volBa);
else volumeValue = 50; else volumeValue = 50;
} }
@ -67,6 +69,9 @@ void Conf::sync()
if (nextFileState) idm.insert(NEXT_FILE, "Y"); if (nextFileState) idm.insert(NEXT_FILE, "Y");
else idm.insert(NEXT_FILE, "N"); else idm.insert(NEXT_FILE, "N");
if (showTrayIcon) idm.insert(TRAY_ICON, "Y");
else idm.insert(TRAY_ICON, "N");
QFile file(confPath(), this); QFile file(confPath(), this);
file.open(QFile::WriteOnly | QFile::Truncate); file.open(QFile::WriteOnly | QFile::Truncate);
@ -79,6 +84,7 @@ void Conf::populateOptionsMenu(QMenu *menu, QWidget *parent)
QHBoxLayout *volLayout = new QHBoxLayout(volWidget); QHBoxLayout *volLayout = new QHBoxLayout(volWidget);
QSlider *volSlider = new QSlider(parent); QSlider *volSlider = new QSlider(parent);
QCheckBox *nextBox = new QCheckBox(parent); QCheckBox *nextBox = new QCheckBox(parent);
QCheckBox *trayBox = new QCheckBox(parent);
Icon *volUp = new Icon(Icon::VOL_UP, parent); Icon *volUp = new Icon(Icon::VOL_UP, parent);
Icon *volDown = new Icon(Icon::VOL_DOWN, parent); Icon *volDown = new Icon(Icon::VOL_DOWN, parent);
@ -93,13 +99,17 @@ void Conf::populateOptionsMenu(QMenu *menu, QWidget *parent)
volLayout->addWidget(volUp); volLayout->addWidget(volUp);
nextBox->setText(tr("Auto play next file in directory")); nextBox->setText(tr("Auto play next file in directory"));
nextBox->setChecked(nextFile()); nextBox->setChecked(nextFile());
trayBox->setText(tr("Enable tray icon"));
trayBox->setChecked(trayIcon());
connect(volSlider, SIGNAL(valueChanged(int)), this, SLOT(setVolume(int))); connect(volSlider, SIGNAL(valueChanged(int)), this, SLOT(setVolume(int)));
connect(volSlider, SIGNAL(valueChanged(int)), this, SIGNAL(volume(int))); connect(volSlider, SIGNAL(valueChanged(int)), this, SIGNAL(volume(int)));
connect(nextBox, SIGNAL(clicked(bool)), this, SLOT(setNextFile(bool))); connect(nextBox, SIGNAL(clicked(bool)), this, SLOT(setNextFile(bool)));
connect(trayBox, SIGNAL(clicked(bool)), this, SLOT(setTrayIcon(bool)));
menu->addAction(new MenuItem("", volWidget, this)); menu->addAction(new MenuItem("", volWidget, this));
menu->addAction(new MenuItem("", nextBox, this)); menu->addAction(new MenuItem("", nextBox, this));
menu->addAction(new MenuItem("", trayBox, this));
} }
void Conf::setLastPath(const QString &path) void Conf::setLastPath(const QString &path)
@ -112,6 +122,13 @@ void Conf::setNextFile(bool state)
nextFileState = state; sync(); nextFileState = state; sync();
} }
void Conf::setTrayIcon(bool state)
{
emit enableTrayIcon(state);
showTrayIcon = state; sync();
}
void Conf::setVolume(int value) void Conf::setVolume(int value)
{ {
emit volume(value); emit volume(value);
@ -134,6 +151,11 @@ bool Conf::nextFile()
return nextFileState; return nextFileState;
} }
bool Conf::trayIcon()
{
return showTrayIcon;
}
int Conf::getVolume() int Conf::getVolume()
{ {
return volumeValue; return volumeValue;

View File

@ -42,10 +42,12 @@ private:
{ {
LAST_PATH = 1, LAST_PATH = 1,
NEXT_FILE, NEXT_FILE,
VOLUME VOLUME,
TRAY_ICON
}; };
QString lastPath; QString lastPath;
bool showTrayIcon;
bool nextFileState; bool nextFileState;
int volumeValue; int volumeValue;
@ -57,11 +59,13 @@ public slots:
void setLastPath(const QString &path); void setLastPath(const QString &path);
void setNextFile(bool state); void setNextFile(bool state);
void setVolume(int value); void setVolume(int value);
void setTrayIcon(bool state);
public: public:
QString getLastPath(); QString getLastPath();
bool nextFile(); bool nextFile();
bool trayIcon();
void populateOptionsMenu(QMenu *menu, QWidget *parent); void populateOptionsMenu(QMenu *menu, QWidget *parent);
int getVolume(); int getVolume();
@ -69,7 +73,8 @@ public:
signals: signals:
void volume(int); void volume(int value);
void enableTrayIcon(bool state);
}; };
#endif // CONF_H #endif // CONF_H