I've updated the icons to a new hallow outline transparent look. added
stop, next file, previous file buttons along with the added feasures the buttons represent. i've also added png versions of all of the icons just in case the svg versions are not practical to use. i also fully built out a tray icon functionality so the application can now minimize to system tray. also updated the app logo to a new flat icon type sinewave look. then finally, i've added the restore button to the tray icon so it will restore the window back in front from the tray.
|
@ -17,16 +17,16 @@ SOURCES += main.cpp\
|
||||||
gui/ui.cpp\
|
gui/ui.cpp\
|
||||||
gui/icon.cpp \
|
gui/icon.cpp \
|
||||||
io/aud_file.cpp \
|
io/aud_file.cpp \
|
||||||
io/conf.cpp \
|
io/conf.cpp \
|
||||||
io/idm.cpp \
|
io/idm.cpp \
|
||||||
io/int.cpp
|
io/int.cpp
|
||||||
|
|
||||||
HEADERS += gui/ui.h\
|
HEADERS += gui/ui.h\
|
||||||
gui/icon.h \
|
gui/icon.h \
|
||||||
io/aud_file.h \
|
io/aud_file.h \
|
||||||
io/conf.h \
|
io/conf.h \
|
||||||
io/idm.h \
|
io/idm.h \
|
||||||
io/int.h
|
io/int.h
|
||||||
|
|
||||||
RESOURCES += icon_files.qrc
|
RESOURCES += icon_files.qrc
|
||||||
|
|
||||||
|
|
BIN
app_logo.ico
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 3.7 KiB |
89
gui/icon.cpp
|
@ -17,29 +17,73 @@ Icon::Icon(IconType t, QWidget *parent) : QToolButton(parent)
|
||||||
stateChanged(QMediaPlayer::StoppedState);
|
stateChanged(QMediaPlayer::StoppedState);
|
||||||
setToolTip(tr("Pause/Play"));
|
setToolTip(tr("Pause/Play"));
|
||||||
|
|
||||||
connect(this, SIGNAL(clicked()), this, SLOT(buttonClicked()));
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case MENU:
|
case MENU:
|
||||||
{
|
{
|
||||||
loadImg(":/menu");
|
loadImg(":/svg/menu");
|
||||||
setToolTip(tr("Menu"));
|
setToolTip(tr("Menu"));
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case OPEN:
|
case OPEN:
|
||||||
{
|
{
|
||||||
loadImg(":/open");
|
loadImg(":/svg/open");
|
||||||
setToolTip(tr("Open File"));
|
setToolTip(tr("Open File"));
|
||||||
|
|
||||||
connect(this, SIGNAL(clicked()), this, SLOT(buttonClicked()));
|
break;
|
||||||
|
}
|
||||||
|
case STOP:
|
||||||
|
{
|
||||||
|
loadImg(":/svg/stop");
|
||||||
|
setToolTip(tr("Stop"));
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case PREV:
|
||||||
|
{
|
||||||
|
loadImg(":/svg/prev");
|
||||||
|
setToolTip(tr("Previous File"));
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case NEXT:
|
||||||
|
{
|
||||||
|
loadImg(":/svg/next");
|
||||||
|
setToolTip(tr("Next File"));
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case VOL_UP:
|
||||||
|
{
|
||||||
|
loadImg(":/svg/volume_up");
|
||||||
|
setToolTip(tr("Volume Up"));
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case VOL_DOWN:
|
||||||
|
{
|
||||||
|
loadImg(":/svg/volume_down");
|
||||||
|
setToolTip(tr("Volume Down"));
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case RESTORE:
|
||||||
|
{
|
||||||
|
loadImg(":/svg/restore");
|
||||||
|
setToolTip(tr("Restore"));
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type = t;
|
if (t != MENU)
|
||||||
|
{
|
||||||
|
connect(this, SIGNAL(clicked()), this, SLOT(buttonClicked()));
|
||||||
|
}
|
||||||
|
|
||||||
|
type = t;
|
||||||
|
volSlider = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Icon::buttonClicked()
|
void Icon::buttonClicked()
|
||||||
|
@ -59,6 +103,30 @@ void Icon::buttonClicked()
|
||||||
{
|
{
|
||||||
emit open();
|
emit open();
|
||||||
}
|
}
|
||||||
|
else if (type == NEXT)
|
||||||
|
{
|
||||||
|
emit next();
|
||||||
|
}
|
||||||
|
else if (type == PREV)
|
||||||
|
{
|
||||||
|
emit prev();
|
||||||
|
}
|
||||||
|
else if (type == STOP)
|
||||||
|
{
|
||||||
|
emit stop();
|
||||||
|
}
|
||||||
|
else if ((type == VOL_DOWN) && volSlider)
|
||||||
|
{
|
||||||
|
volSlider->setValue(volSlider->value() - 1);
|
||||||
|
}
|
||||||
|
else if ((type == VOL_UP) && volSlider)
|
||||||
|
{
|
||||||
|
volSlider->setValue(volSlider->value() + 1);
|
||||||
|
}
|
||||||
|
else if (type == RESTORE)
|
||||||
|
{
|
||||||
|
emit restore();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Icon::paintEvent(QPaintEvent *)
|
void Icon::paintEvent(QPaintEvent *)
|
||||||
|
@ -75,11 +143,11 @@ void Icon::stateChanged(QMediaPlayer::State state)
|
||||||
|
|
||||||
if (state == QMediaPlayer::PlayingState)
|
if (state == QMediaPlayer::PlayingState)
|
||||||
{
|
{
|
||||||
loadImg(":/pause");
|
loadImg(":/svg/pause");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
loadImg(":/play");
|
loadImg(":/svg/play");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,3 +157,8 @@ void Icon::loadImg(const QString &path)
|
||||||
|
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Icon::setSlider(QSlider *slider)
|
||||||
|
{
|
||||||
|
volSlider = slider;
|
||||||
|
}
|
||||||
|
|
16
gui/icon.h
|
@ -12,6 +12,7 @@
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QRect>
|
#include <QRect>
|
||||||
#include <QDesktopWidget>
|
#include <QDesktopWidget>
|
||||||
|
#include <QSlider>
|
||||||
|
|
||||||
class Icon : public QToolButton
|
class Icon : public QToolButton
|
||||||
{
|
{
|
||||||
|
@ -23,11 +24,19 @@ public:
|
||||||
{
|
{
|
||||||
PAUSE_PLAY,
|
PAUSE_PLAY,
|
||||||
MENU,
|
MENU,
|
||||||
OPEN
|
OPEN,
|
||||||
|
STOP,
|
||||||
|
PREV,
|
||||||
|
NEXT,
|
||||||
|
VOL_UP,
|
||||||
|
VOL_DOWN,
|
||||||
|
RESTORE
|
||||||
};
|
};
|
||||||
|
|
||||||
Icon(IconType t, QWidget *parent = 0);
|
Icon(IconType t, QWidget *parent = 0);
|
||||||
|
|
||||||
|
void setSlider(QSlider *slider);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
|
||||||
void stateChanged(QMediaPlayer::State state);
|
void stateChanged(QMediaPlayer::State state);
|
||||||
|
@ -37,6 +46,7 @@ private:
|
||||||
IconType type;
|
IconType type;
|
||||||
QMediaPlayer::State playerState;
|
QMediaPlayer::State playerState;
|
||||||
QString svgFile;
|
QString svgFile;
|
||||||
|
QSlider *volSlider;
|
||||||
|
|
||||||
void paintEvent(QPaintEvent *);
|
void paintEvent(QPaintEvent *);
|
||||||
void loadImg(const QString &path);
|
void loadImg(const QString &path);
|
||||||
|
@ -51,6 +61,10 @@ signals:
|
||||||
void play();
|
void play();
|
||||||
void settings();
|
void settings();
|
||||||
void open();
|
void open();
|
||||||
|
void next();
|
||||||
|
void prev();
|
||||||
|
void stop();
|
||||||
|
void restore();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // ICON_H
|
#endif // ICON_H
|
||||||
|
|
113
gui/ui.cpp
|
@ -2,10 +2,17 @@
|
||||||
|
|
||||||
Ui::Ui(const QStringList &args, QWidget *parent) : QWidget(parent)
|
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);
|
||||||
|
Icon *trayPausePlay = new Icon(Icon::PAUSE_PLAY, this);
|
||||||
|
Icon *trayOpen = new Icon(Icon::OPEN, this);
|
||||||
|
Icon *trayStop = new Icon(Icon::STOP, this);
|
||||||
|
Icon *trayNext = new Icon(Icon::NEXT, this);
|
||||||
|
Icon *trayPrev = new Icon(Icon::PREV, this);
|
||||||
|
Icon *trayRestore = new Icon(Icon::RESTORE, this);
|
||||||
|
|
||||||
|
trayMenu = new QMenu(this);
|
||||||
fileName = new QLabel(this);
|
fileName = new QLabel(this);
|
||||||
slider = new QSlider(this);
|
slider = new QSlider(this);
|
||||||
menu = new QMenu(this);
|
menu = new QMenu(this);
|
||||||
|
@ -13,6 +20,9 @@ Ui::Ui(const QStringList &args, QWidget *parent) : QWidget(parent)
|
||||||
settings = new Icon(Icon::MENU, this);
|
settings = new Icon(Icon::MENU, this);
|
||||||
pausePlay = new Icon(Icon::PAUSE_PLAY, this);
|
pausePlay = new Icon(Icon::PAUSE_PLAY, this);
|
||||||
open = new Icon(Icon::OPEN, this);
|
open = new Icon(Icon::OPEN, this);
|
||||||
|
stop = new Icon(Icon::STOP, this);
|
||||||
|
next = new Icon(Icon::NEXT, this);
|
||||||
|
prev = new Icon(Icon::PREV, this);
|
||||||
player = new QMediaPlayer(this);
|
player = new QMediaPlayer(this);
|
||||||
ioDev = new AudFile(this);
|
ioDev = new AudFile(this);
|
||||||
conf = new Conf(this);
|
conf = new Conf(this);
|
||||||
|
@ -29,22 +39,44 @@ Ui::Ui(const QStringList &args, QWidget *parent) : QWidget(parent)
|
||||||
fileName->setFont(fnt);
|
fileName->setFont(fnt);
|
||||||
slider->setOrientation(Qt::Horizontal);
|
slider->setOrientation(Qt::Horizontal);
|
||||||
trayIcon->show();
|
trayIcon->show();
|
||||||
|
trayIcon->setContextMenu(trayMenu);
|
||||||
conf->populateOptionsMenu(menu, this);
|
conf->populateOptionsMenu(menu, this);
|
||||||
player->setVolume(conf->getVolume());
|
player->setVolume(conf->getVolume());
|
||||||
|
trayMenu->addAction(new MenuItem(trayPausePlay->toolTip(), trayPausePlay, this));
|
||||||
|
trayMenu->addAction(new MenuItem(trayOpen->toolTip(), trayOpen, this));
|
||||||
|
trayMenu->addAction(new MenuItem(trayStop->toolTip(), trayStop, this));
|
||||||
|
trayMenu->addAction(new MenuItem(trayNext->toolTip(), trayNext, this));
|
||||||
|
trayMenu->addAction(new MenuItem(trayPrev->toolTip(), trayPrev, this));
|
||||||
|
trayMenu->addAction(new MenuItem(trayRestore->toolTip(), trayRestore, this));
|
||||||
|
btnLayout->addWidget(prev);
|
||||||
btnLayout->addWidget(pausePlay);
|
btnLayout->addWidget(pausePlay);
|
||||||
|
btnLayout->addWidget(stop);
|
||||||
|
btnLayout->addWidget(next);
|
||||||
btnLayout->addWidget(open);
|
btnLayout->addWidget(open);
|
||||||
btnLayout->addWidget(settings);
|
btnLayout->addWidget(settings);
|
||||||
mainLayout->addWidget(fileName);
|
mainLayout->addWidget(fileName);
|
||||||
mainLayout->addWidget(slider);
|
mainLayout->addWidget(slider);
|
||||||
mainLayout->addWidget(btnWid, 0, Qt::AlignCenter);
|
mainLayout->addWidget(btnWid, 0, Qt::AlignCenter);
|
||||||
|
|
||||||
|
connect(trayRestore, SIGNAL(restore()), this, SLOT(showNormal()));
|
||||||
|
connect(trayPausePlay, SIGNAL(pause()), player, SLOT(pause()));
|
||||||
|
connect(trayPausePlay, SIGNAL(play()), player, SLOT(play()));
|
||||||
|
connect(trayNext, SIGNAL(next()), this, SLOT(nextFile()));
|
||||||
|
connect(trayPrev, SIGNAL(prev()), this, SLOT(prevFile()));
|
||||||
|
connect(trayStop, SIGNAL(stop()), this, SLOT(stopPlayer()));
|
||||||
|
connect(trayOpen, SIGNAL(open()), this, SLOT(openDialog()));
|
||||||
|
connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(trayActivated(QSystemTrayIcon::ActivationReason)));
|
||||||
connect(pausePlay, SIGNAL(pause()), player, SLOT(pause()));
|
connect(pausePlay, SIGNAL(pause()), player, SLOT(pause()));
|
||||||
connect(pausePlay, SIGNAL(play()), player, SLOT(play()));
|
connect(pausePlay, SIGNAL(play()), player, SLOT(play()));
|
||||||
|
connect(next, SIGNAL(next()), this, SLOT(nextFile()));
|
||||||
|
connect(prev, SIGNAL(prev()), this, SLOT(prevFile()));
|
||||||
|
connect(stop, SIGNAL(stop()), this, SLOT(stopPlayer()));
|
||||||
connect(open, SIGNAL(open()), this, SLOT(openDialog()));
|
connect(open, SIGNAL(open()), this, SLOT(openDialog()));
|
||||||
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(positionChanged(qint64)), this, SLOT(posChanged(qint64)));
|
connect(player, SIGNAL(stateChanged(QMediaPlayer::State)), trayPausePlay, SLOT(stateChanged(QMediaPlayer::State)));
|
||||||
connect(player, SIGNAL(durationChanged(qint64)), this, SLOT(durChanged(qint64)));
|
connect(ioDev, SIGNAL(posChanged(qint64)), this, SLOT(posChanged(qint64)));
|
||||||
|
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)));
|
||||||
|
@ -57,9 +89,7 @@ Ui::Ui(const QStringList &args, QWidget *parent) : QWidget(parent)
|
||||||
|
|
||||||
void Ui::play(const QString &path)
|
void Ui::play(const QString &path)
|
||||||
{
|
{
|
||||||
player->blockSignals(true);
|
stopPlayer();
|
||||||
player->stop();
|
|
||||||
pausePlay->stateChanged(QMediaPlayer::StoppedState);
|
|
||||||
|
|
||||||
if (ioDev->openFile(path))
|
if (ioDev->openFile(path))
|
||||||
{
|
{
|
||||||
|
@ -68,9 +98,8 @@ void Ui::play(const QString &path)
|
||||||
conf->setLastPath(info.path());
|
conf->setLastPath(info.path());
|
||||||
fileName->setText(info.fileName());
|
fileName->setText(info.fileName());
|
||||||
player->setMedia(0, ioDev);
|
player->setMedia(0, ioDev);
|
||||||
slider->setValue(0);
|
slider->setMinimum(ioDev->getOffset());
|
||||||
slider->setMinimum(0);
|
slider->setMaximum(ioDev->size());
|
||||||
pausePlay->stateChanged(QMediaPlayer::PlayingState);
|
|
||||||
player->play();
|
player->play();
|
||||||
|
|
||||||
adjustSize();
|
adjustSize();
|
||||||
|
@ -79,8 +108,14 @@ void Ui::play(const QString &path)
|
||||||
{
|
{
|
||||||
error(QMediaPlayer::ResourceError);
|
error(QMediaPlayer::ResourceError);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
player->blockSignals(false);
|
void Ui::stopPlayer()
|
||||||
|
{
|
||||||
|
ioDev->blockSignals(true);
|
||||||
|
player->stop();
|
||||||
|
ioDev->blockSignals(false);
|
||||||
|
slider->setValue(ioDev->getOffset());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Ui::openDialog()
|
void Ui::openDialog()
|
||||||
|
@ -139,25 +174,29 @@ void Ui::sliderReleased()
|
||||||
{
|
{
|
||||||
pressed = false;
|
pressed = false;
|
||||||
|
|
||||||
player->setPosition(slider->value());
|
float pos = (float) slider->value() - ioDev->getOffset();
|
||||||
|
float max = (float) slider->maximum() - ioDev->getOffset();
|
||||||
|
float mul = pos / max;
|
||||||
|
|
||||||
|
player->setPosition(mul * player->duration());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Ui::posChanged(qint64 pos)
|
void Ui::posChanged(qint64 pos)
|
||||||
{
|
{
|
||||||
if (!pressed) slider->setSliderPosition(pos);
|
if (!pressed) slider->setSliderPosition(pos);
|
||||||
|
|
||||||
if ((slider->sliderPosition() == slider->maximum()) && conf->nextFile())
|
|
||||||
{
|
|
||||||
QTimer::singleShot(1000, this, SLOT(nextFile()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Ui::durChanged(qint64 len)
|
|
||||||
{
|
|
||||||
slider->setMaximum(len);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Ui::nextFile()
|
void Ui::nextFile()
|
||||||
|
{
|
||||||
|
fileDir('+');
|
||||||
|
}
|
||||||
|
|
||||||
|
void Ui::prevFile()
|
||||||
|
{
|
||||||
|
fileDir('-');
|
||||||
|
}
|
||||||
|
|
||||||
|
void Ui::fileDir(char direction)
|
||||||
{
|
{
|
||||||
QDir dir(conf->getLastPath());
|
QDir dir(conf->getLastPath());
|
||||||
|
|
||||||
|
@ -173,7 +212,8 @@ void Ui::nextFile()
|
||||||
|
|
||||||
if (pos != -1)
|
if (pos != -1)
|
||||||
{
|
{
|
||||||
pos++;
|
if (direction == '+') pos++;
|
||||||
|
else if (direction == '-') pos--;
|
||||||
|
|
||||||
if (pos < list.size())
|
if (pos < list.size())
|
||||||
{
|
{
|
||||||
|
@ -181,3 +221,28 @@ void Ui::nextFile()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Ui::trayActivated(QSystemTrayIcon::ActivationReason reason)
|
||||||
|
{
|
||||||
|
Q_UNUSED(reason);
|
||||||
|
|
||||||
|
trayMenu->popup(trayIcon->geometry().center());
|
||||||
|
}
|
||||||
|
|
||||||
|
void Ui::changeEvent(QEvent *event)
|
||||||
|
{
|
||||||
|
if (event->type() == QEvent::WindowStateChange)
|
||||||
|
{
|
||||||
|
if (windowState() & Qt::WindowMinimized)
|
||||||
|
{
|
||||||
|
hide();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Ui::closeEvent(QCloseEvent *event)
|
||||||
|
{
|
||||||
|
Q_UNUSED(event);
|
||||||
|
|
||||||
|
QCoreApplication::exit();
|
||||||
|
}
|
||||||
|
|
16
gui/ui.h
|
@ -20,6 +20,10 @@
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
#include <QSystemTrayIcon>
|
#include <QSystemTrayIcon>
|
||||||
#include <QIcon>
|
#include <QIcon>
|
||||||
|
#include <QEvent>
|
||||||
|
#include <QAction>
|
||||||
|
#include <QCloseEvent>
|
||||||
|
#include <QCoreApplication>
|
||||||
|
|
||||||
#include "icon.h"
|
#include "icon.h"
|
||||||
#include "../io/aud_file.h"
|
#include "../io/aud_file.h"
|
||||||
|
@ -39,20 +43,30 @@ private:
|
||||||
QSystemTrayIcon *trayIcon;
|
QSystemTrayIcon *trayIcon;
|
||||||
Conf *conf;
|
Conf *conf;
|
||||||
QMenu *menu;
|
QMenu *menu;
|
||||||
|
QMenu *trayMenu;
|
||||||
Icon *pausePlay;
|
Icon *pausePlay;
|
||||||
Icon *open;
|
Icon *open;
|
||||||
|
Icon *next;
|
||||||
|
Icon *prev;
|
||||||
|
Icon *stop;
|
||||||
bool pressed;
|
bool pressed;
|
||||||
|
|
||||||
|
void fileDir(char direction);
|
||||||
|
void changeEvent(QEvent *event);
|
||||||
|
void closeEvent(QCloseEvent *event);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
|
||||||
void error(QMediaPlayer::Error error);
|
void error(QMediaPlayer::Error error);
|
||||||
void sliderPressed();
|
void sliderPressed();
|
||||||
void sliderReleased();
|
void sliderReleased();
|
||||||
void posChanged(qint64 pos);
|
void posChanged(qint64 pos);
|
||||||
void durChanged(qint64 len);
|
|
||||||
void openDialog();
|
void openDialog();
|
||||||
void nextFile();
|
void nextFile();
|
||||||
|
void prevFile();
|
||||||
|
void stopPlayer();
|
||||||
void play(const QString &path);
|
void play(const QString &path);
|
||||||
|
void trayActivated(QSystemTrayIcon::ActivationReason reason);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,29 @@
|
||||||
<RCC>
|
<RCC>
|
||||||
<qresource prefix="/">
|
<qresource prefix="/">
|
||||||
|
<file alias="logo">app_logo.ico</file>
|
||||||
|
</qresource>
|
||||||
|
<qresource prefix="/svg">
|
||||||
<file alias="open">svg/open.svg</file>
|
<file alias="open">svg/open.svg</file>
|
||||||
<file alias="pause">svg/pause.svg</file>
|
<file alias="pause">svg/pause.svg</file>
|
||||||
<file alias="play">svg/play.svg</file>
|
<file alias="play">svg/play.svg</file>
|
||||||
<file alias="menu">svg/menu.svg</file>
|
<file alias="menu">svg/menu.svg</file>
|
||||||
<file alias="logo">app_logo.ico</file>
|
<file alias="next">svg/next.svg</file>
|
||||||
|
<file alias="prev">svg/prev.svg</file>
|
||||||
|
<file alias="stop">svg/stop.svg</file>
|
||||||
|
<file alias="volume_up">svg/volume_up.svg</file>
|
||||||
|
<file alias="volume_down">svg/volume_down.svg</file>
|
||||||
|
<file alias="restore">svg/restore.svg</file>
|
||||||
|
</qresource>
|
||||||
|
<qresource prefix="/png">
|
||||||
|
<file alias="open">png/open.png</file>
|
||||||
|
<file alias="pause">png/pause.png</file>
|
||||||
|
<file alias="play">png/play.png</file>
|
||||||
|
<file alias="menu">png/menu.png</file>
|
||||||
|
<file alias="next">png/next.png</file>
|
||||||
|
<file alias="prev">png/prev.png</file>
|
||||||
|
<file alias="stop">png/stop.png</file>
|
||||||
|
<file alias="volume_up">png/volume_up.png</file>
|
||||||
|
<file alias="volume_down">png/volume_down.png</file>
|
||||||
|
<file alias="restore">png/restore.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|
|
@ -2,7 +2,9 @@
|
||||||
|
|
||||||
AudFile::AudFile(QObject *parent) : QFile(parent)
|
AudFile::AudFile(QObject *parent) : QFile(parent)
|
||||||
{
|
{
|
||||||
offset = 0;
|
offset = 0;
|
||||||
|
buffRate = 0;
|
||||||
|
init = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
AudFile::~AudFile()
|
AudFile::~AudFile()
|
||||||
|
@ -14,6 +16,9 @@ bool AudFile::openFile(const QString &path)
|
||||||
{
|
{
|
||||||
close();
|
close();
|
||||||
|
|
||||||
|
init = true;
|
||||||
|
buffRate = 0;
|
||||||
|
|
||||||
setFileName(path);
|
setFileName(path);
|
||||||
|
|
||||||
bool ret = open(QFile::ReadOnly);
|
bool ret = open(QFile::ReadOnly);
|
||||||
|
@ -57,10 +62,46 @@ bool AudFile::openFile(const QString &path)
|
||||||
|
|
||||||
bool AudFile::seek(qint64 off)
|
bool AudFile::seek(qint64 off)
|
||||||
{
|
{
|
||||||
return QFile::seek(offset + off);
|
qint64 newPos = offset + off;
|
||||||
|
|
||||||
|
if (init)
|
||||||
|
{
|
||||||
|
if ((off) && (!buffRate))
|
||||||
|
{
|
||||||
|
buffRate = off;
|
||||||
|
|
||||||
|
emit duration(getDuration());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (newPos >= size())
|
||||||
|
{
|
||||||
|
init = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
emit posChanged(pos());
|
||||||
|
|
||||||
|
if (newPos >= size())
|
||||||
|
{
|
||||||
|
QTimer::singleShot(2000, this, SLOT(delayFinished()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return QFile::seek(newPos);
|
||||||
}
|
}
|
||||||
|
|
||||||
qint64 AudFile::size() const
|
qint64 AudFile::getOffset()
|
||||||
{
|
{
|
||||||
return QFile::size() - offset;
|
return offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
qint64 AudFile::getDuration()
|
||||||
|
{
|
||||||
|
return ((size() - offset) / buffRate) * 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AudFile::delayFinished()
|
||||||
|
{
|
||||||
|
emit endOfPlayback();
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,8 @@
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include <QTimerEvent>
|
#include <QTimer>
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
class AudFile : public QFile
|
class AudFile : public QFile
|
||||||
{
|
{
|
||||||
|
@ -13,7 +14,13 @@ class AudFile : public QFile
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
qint64 buffRate;
|
||||||
qint64 offset;
|
qint64 offset;
|
||||||
|
bool init;
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
|
||||||
|
void delayFinished();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -21,9 +28,16 @@ public:
|
||||||
|
|
||||||
bool openFile(const QString &path);
|
bool openFile(const QString &path);
|
||||||
bool seek(qint64 off);
|
bool seek(qint64 off);
|
||||||
qint64 size() const;
|
qint64 getOffset();
|
||||||
|
qint64 getDuration();
|
||||||
|
|
||||||
~AudFile();
|
~AudFile();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
|
||||||
|
void posChanged(qint64 off);
|
||||||
|
void endOfPlayback();
|
||||||
|
void duration(qint64 msec);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // AUD_FILE_H
|
#endif // AUD_FILE_H
|
||||||
|
|
35
io/conf.cpp
|
@ -8,14 +8,23 @@ MenuItem::MenuItem(const QString &label, QWidget *widget, QObject *parent) : QWi
|
||||||
|
|
||||||
QWidget *MenuItem::createWidget(QWidget *parent)
|
QWidget *MenuItem::createWidget(QWidget *parent)
|
||||||
{
|
{
|
||||||
QWidget *widget = new QWidget(parent);
|
if (str.isEmpty())
|
||||||
QHBoxLayout *layout = new QHBoxLayout(widget);
|
{
|
||||||
|
wid->setParent(parent);
|
||||||
|
|
||||||
layout->addWidget(new QLabel(str, parent));
|
return wid;
|
||||||
layout->addStretch();
|
}
|
||||||
layout->addWidget(wid, 0, Qt::AlignRight);
|
else
|
||||||
|
{
|
||||||
|
QWidget *widget = new QWidget(parent);
|
||||||
|
QHBoxLayout *layout = new QHBoxLayout(widget);
|
||||||
|
|
||||||
return widget;
|
layout->addWidget(wid);
|
||||||
|
layout->addWidget(new QLabel(str, parent));
|
||||||
|
|
||||||
|
return widget;
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Conf::Conf(QObject *parent) : QObject(parent)
|
Conf::Conf(QObject *parent) : QObject(parent)
|
||||||
|
@ -70,23 +79,27 @@ 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);
|
||||||
|
Icon *volUp = new Icon(Icon::VOL_UP, parent);
|
||||||
|
Icon *volDown = new Icon(Icon::VOL_DOWN, parent);
|
||||||
|
|
||||||
|
volUp->setSlider(volSlider);
|
||||||
|
volDown->setSlider(volSlider);
|
||||||
volSlider->setMinimum(0);
|
volSlider->setMinimum(0);
|
||||||
volSlider->setMaximum(100);
|
volSlider->setMaximum(100);
|
||||||
volSlider->setValue(getVolume());
|
volSlider->setValue(getVolume());
|
||||||
volSlider->setOrientation(Qt::Horizontal);
|
volSlider->setOrientation(Qt::Horizontal);
|
||||||
volLayout->addWidget(new QLabel("-"));
|
volLayout->addWidget(volDown);
|
||||||
volLayout->addWidget(volSlider);
|
volLayout->addWidget(volSlider);
|
||||||
volLayout->addWidget(new QLabel("+"));
|
volLayout->addWidget(volUp);
|
||||||
nextBox->setText("");
|
nextBox->setText(tr("Auto play next file in directory"));
|
||||||
nextBox->setChecked(nextFile());
|
nextBox->setChecked(nextFile());
|
||||||
|
|
||||||
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)));
|
||||||
|
|
||||||
menu->addAction(new MenuItem(tr("Volume"), volWidget, this));
|
menu->addAction(new MenuItem("", volWidget, this));
|
||||||
menu->addAction(new MenuItem(tr("Auto play next file in directory"), nextBox, this));
|
menu->addAction(new MenuItem("", nextBox, this));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Conf::setLastPath(const QString &path)
|
void Conf::setLastPath(const QString &path)
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
|
|
||||||
#include "idm.h"
|
#include "idm.h"
|
||||||
|
#include "../gui/icon.h"
|
||||||
|
|
||||||
class MenuItem : public QWidgetAction
|
class MenuItem : public QWidgetAction
|
||||||
{
|
{
|
||||||
|
|
1
main.cpp
|
@ -8,6 +8,7 @@ int main(int argc, char *argv[])
|
||||||
QApplication app(argc, argv);
|
QApplication app(argc, argv);
|
||||||
Ui win(app.arguments());
|
Ui win(app.arguments());
|
||||||
|
|
||||||
|
app.setQuitOnLastWindowClosed(false);
|
||||||
win.show();
|
win.show();
|
||||||
|
|
||||||
return app.exec();
|
return app.exec();
|
||||||
|
|
BIN
png/menu.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
BIN
png/next.png
Normal file
After Width: | Height: | Size: 3.4 KiB |
BIN
png/open.png
Normal file
After Width: | Height: | Size: 2.2 KiB |
BIN
png/pause.png
Normal file
After Width: | Height: | Size: 2.2 KiB |
BIN
png/play.png
Normal file
After Width: | Height: | Size: 5.6 KiB |
BIN
png/prev.png
Normal file
After Width: | Height: | Size: 3.4 KiB |
BIN
png/restore.png
Normal file
After Width: | Height: | Size: 2.2 KiB |
BIN
png/stop.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
png/volume_down.png
Normal file
After Width: | Height: | Size: 2.9 KiB |
BIN
png/volume_up.png
Normal file
After Width: | Height: | Size: 3.0 KiB |
12
svg/menu.svg
|
@ -1,12 +1,12 @@
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="500px" height="500px" viewBox="0 0 5000 5000" preserveAspectRatio="xMidYMid meet">
|
<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="500px" height="500px" viewBox="0 0 5000 5000" preserveAspectRatio="xMidYMid meet">
|
||||||
<g id="layer1" fill="#ffffff" stroke="none">
|
<g id="layer1" fill="#5d5d5d" stroke="none">
|
||||||
<path d="M3880 3027 c-83 -30 -135 -63 -197 -126 -94 -95 -143 -219 -143 -361 0 -179 78 -329 225 -430 155 -107 390 -108 544 -4 151 102 231 252 231 434 0 50 -7 109 -16 141 -50 170 -182 306 -343 353 -83 24 -221 21 -301 -7z"/>
|
<path d="M2387 2851 c-92 -37 -155 -97 -201 -191 -29 -60 -31 -73 -31 -170 0 -99 2 -110 33 -172 21 -43 51 -84 87 -117 178 -162 448 -105 557 117 31 62 33 73 33 172 0 97 -2 110 -31 170 -37 78 -99 141 -174 178 -73 36 -200 42 -273 13z"/>
|
||||||
<path d="M850 3017 c-160 -57 -275 -180 -324 -346 -21 -71 -21 -211 0 -282 35 -119 107 -219 209 -289 155 -107 390 -108 544 -4 151 102 231 252 231 434 0 50 -7 109 -16 141 -50 170 -182 306 -343 353 -83 24 -221 21 -301 -7z"/>
|
<path d="M3987 2851 c-92 -37 -155 -97 -201 -191 -29 -60 -31 -73 -31 -170 0 -99 2 -110 33 -172 137 -278 507 -278 644 0 31 62 33 73 33 172 0 97 -2 110 -31 170 -37 78 -99 141 -174 178 -73 36 -200 42 -273 13z"/>
|
||||||
<path d="M2360 3017 c-83 -30 -135 -63 -197 -126 -94 -95 -143 -219 -143 -361 0 -179 78 -329 225 -430 155 -107 390 -108 544 -4 151 102 231 252 231 434 0 50 -7 109 -16 141 -50 170 -182 306 -343 353 -83 24 -221 21 -301 -7z"/>
|
<path d="M777 2841 c-92 -37 -155 -97 -201 -191 -29 -60 -31 -73 -31 -170 0 -99 2 -110 33 -172 109 -222 379 -279 557 -117 36 33 66 74 87 117 31 62 33 73 33 172 0 97 -2 110 -31 170 -37 78 -99 141 -174 178 -73 36 -200 42 -273 13z"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="layer2" fill="#b6748b" stroke="none">
|
<g id="layer2" fill="#ffffff" fill-opacity="0.0" stroke="none">
|
||||||
<path d="M0 2500 l0 -2500 2500 0 2500 0 0 2500 0 2500 -2500 0 -2500 0 0 -2500z m4181 534 c161 -47 293 -183 343 -353 9 -32 16 -91 16 -141 0 -182 -80 -332 -231 -434 -154 -104 -389 -103 -544 4 -147 101 -225 251 -225 430 0 289 214 509 496 510 54 0 112 -6 145 -16z m-3030 -10 c161 -47 293 -183 343 -353 9 -32 16 -91 16 -141 0 -182 -80 -332 -231 -434 -154 -104 -389 -103 -544 4 -147 101 -225 251 -225 430 0 289 214 509 496 510 54 0 112 -6 145 -16z m1510 0 c161 -47 293 -183 343 -353 9 -32 16 -91 16 -141 0 -182 -80 -332 -231 -434 -154 -104 -389 -103 -544 4 -147 101 -225 251 -225 430 0 289 214 509 496 510 54 0 112 -6 145 -16z"/>
|
<path d="M0 2500 l0 -2500 2500 0 2500 0 0 2500 0 2500 -2500 0 -2500 0 0 -2500z m2660 338 c75 -37 137 -100 174 -178 29 -60 31 -73 31 -170 0 -99 -2 -110 -33 -172 -109 -222 -379 -279 -557 -117 -36 33 -66 74 -87 117 -31 62 -33 73 -33 172 0 97 2 110 31 170 46 94 109 154 201 191 73 29 200 23 273 -13z m1600 0 c75 -37 137 -100 174 -178 29 -60 31 -73 31 -170 0 -99 -2 -110 -33 -172 -109 -222 -379 -279 -557 -117 -36 33 -66 74 -87 117 -31 62 -33 73 -33 172 0 97 2 110 31 170 46 94 109 154 201 191 73 29 200 23 273 -13z m-3210 -10 c75 -37 137 -100 174 -178 29 -60 31 -73 31 -170 0 -99 -2 -110 -33 -172 -137 -278 -507 -278 -644 0 -31 62 -33 73 -33 172 0 97 2 110 31 170 46 94 109 154 201 191 73 29 200 23 273 -13z"/>
|
||||||
</g>
|
</g>
|
||||||
|
|
||||||
</svg>
|
</svg>
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.7 KiB |
11
svg/next.svg
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||||
|
<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="500px" height="500px" viewBox="0 0 5000 5000" preserveAspectRatio="xMidYMid meet">
|
||||||
|
<g id="layer1" fill="#5d5d5d" stroke="none">
|
||||||
|
<path d="M1387 4414 c-4 -4 -7 -857 -7 -1896 0 -1506 3 -1888 13 -1888 16 0 91 62 889 732 378 318 690 578 693 578 3 0 5 -299 5 -665 l0 -665 335 0 335 0 0 1900 0 1900 -335 0 -335 0 -2 -665 -3 -665 -671 568 c-369 312 -719 612 -778 667 -105 98 -125 113 -139 99z m2043 -1909 l0 -1675 -110 0 -110 0 0 760 c0 755 0 760 -20 760 -11 0 -62 -35 -113 -77 -154 -128 -1203 -1009 -1334 -1121 l-123 -104 0 1461 0 1460 583 -483 c321 -266 626 -517 678 -559 52 -42 137 -112 189 -157 57 -48 104 -80 118 -80 l22 0 0 745 0 745 110 0 110 0 0 -1675z"/>
|
||||||
|
</g>
|
||||||
|
<g id="layer2" fill="#ffffff" fill-opacity="0.0" stroke="none">
|
||||||
|
<path d="M0 2500 l0 -2500 2500 0 2500 0 0 2500 0 2500 -2500 0 -2500 0 0 -2500z m1526 1815 c59 -55 409 -355 778 -667 l671 -568 3 665 2 665 335 0 335 0 0 -1900 0 -1900 -335 0 -335 0 0 665 c0 366 -2 665 -5 665 -3 0 -315 -260 -693 -578 -798 -670 -873 -732 -889 -732 -10 0 -13 382 -13 1888 0 1039 3 1892 7 1896 14 14 34 -1 139 -99z"/>
|
||||||
|
<path d="M3210 3435 l0 -745 -22 0 c-14 0 -61 32 -118 80 -52 45 -137 115 -189 157 -52 42 -357 293 -678 559 l-583 483 0 -1460 0 -1461 123 104 c131 112 1180 993 1334 1121 51 42 102 77 113 77 20 0 20 -5 20 -760 l0 -760 110 0 110 0 0 1675 0 1675 -110 0 -110 0 0 -745z"/>
|
||||||
|
</g>
|
||||||
|
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.5 KiB |
11
svg/open.svg
|
@ -1,10 +1,11 @@
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 5010 5000" preserveAspectRatio="xMidYMid meet">
|
<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="500px" height="500px" viewBox="0 0 5000 5000" preserveAspectRatio="xMidYMid meet">
|
||||||
<g id="layer1" fill="#ffffff" stroke="none">
|
<g id="layer1" fill="#5d5d5d" stroke="none">
|
||||||
<path d="M770 2490 l0 -1200 895 0 895 0 0 160 0 160 825 0 825 0 0 1040 0 1040 -1720 0 -1720 0 0 -1200z"/>
|
<path d="M760 2570 l0 -1670 785 0 785 0 0 205 0 205 955 0 955 0 0 1465 0 1465 -1740 0 -1740 0 0 -1670z m3170 205 l0 -1185 -970 0 -970 0 0 -205 0 -205 -470 0 -470 0 0 1390 0 1390 1440 0 1440 0 0 -1185z"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="layer2" fill="#10715B" stroke="none">
|
<g id="layer2" fill="#ffffff" fill-opacity="0.0" stroke="none">
|
||||||
<path d="M0 2500 l0 -2500 2505 0 2505 0 0 2500 0 2500 -2505 0 -2505 0 0 -2500z m4210 150 l0 -1040 -825 0 -825 0 0 -160 0 -160 -895 0 -895 0 0 1200 0 1200 1720 0 1720 0 0 -1040z"/>
|
<path d="M0 2500 l0 -2500 2500 0 2500 0 0 2500 0 2500 -2500 0 -2500 0 0 -2500z m4240 275 l0 -1465 -955 0 -955 0 0 -205 0 -205 -785 0 -785 0 0 1670 0 1670 1740 0 1740 0 0 -1465z"/>
|
||||||
|
<path d="M1050 2570 l0 -1390 470 0 470 0 0 205 0 205 970 0 970 0 0 1185 0 1185 -1440 0 -1440 0 0 -1390z"/>
|
||||||
</g>
|
</g>
|
||||||
|
|
||||||
</svg>
|
</svg>
|
Before Width: | Height: | Size: 624 B After Width: | Height: | Size: 878 B |
|
@ -1,11 +1,13 @@
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 5010 5000" preserveAspectRatio="xMidYMid meet">
|
<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="500px" height="500px" viewBox="0 0 5000 5000" preserveAspectRatio="xMidYMid meet">
|
||||||
<g id="layer1" fill="#ffffff" stroke="none">
|
<g id="layer1" fill="#5d5d5d" stroke="none">
|
||||||
<path d="M1220 2575 l0 -1925 385 0 385 0 0 1925 0 1925 -385 0 -385 0 0 -1925z"/>
|
<path d="M1350 2490 l0 -1900 335 0 335 0 0 1900 0 1900 -335 0 -335 0 0 -1900z m440 5 l0 -1675 -110 0 -110 0 0 1675 0 1675 110 0 110 0 0 -1675z"/>
|
||||||
<path d="M2870 2575 l0 -1925 385 0 385 0 0 1925 0 1925 -385 0 -385 0 0 -1925z"/>
|
<path d="M2970 2495 l0 -1895 330 0 330 0 0 1895 0 1895 -330 0 -330 0 0 -1895z m430 10 l0 -1675 -110 0 -110 0 0 1675 0 1675 110 0 110 0 0 -1675z"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="layer2" fill="#1134c1" stroke="none">
|
<g id="layer2" fill="#ffffff" fill-opacity="0.0" stroke="none">
|
||||||
<path d="M0 2500 l0 -2500 2505 0 2505 0 0 2500 0 2500 -2505 0 -2505 0 0 -2500z m1990 75 l0 -1925 -385 0 -385 0 0 1925 0 1925 385 0 385 0 0 -1925z m1650 0 l0 -1925 -385 0 -385 0 0 1925 0 1925 385 0 385 0 0 -1925z"/>
|
<path d="M0 2500 l0 -2500 2500 0 2500 0 0 2500 0 2500 -2500 0 -2500 0 0 -2500z m2020 -10 l0 -1900 -335 0 -335 0 0 1900 0 1900 335 0 335 0 0 -1900z m1610 5 l0 -1895 -330 0 -330 0 0 1895 0 1895 330 0 330 0 0 -1895z"/>
|
||||||
|
<path d="M1570 2495 l0 -1675 110 0 110 0 0 1675 0 1675 -110 0 -110 0 0 -1675z"/>
|
||||||
|
<path d="M3180 2505 l0 -1675 110 0 110 0 0 1675 0 1675 -110 0 -110 0 0 -1675z"/>
|
||||||
</g>
|
</g>
|
||||||
|
|
||||||
</svg>
|
</svg>
|
Before Width: | Height: | Size: 716 B After Width: | Height: | Size: 1.0 KiB |
11
svg/play.svg
|
@ -1,10 +1,11 @@
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 5010 5000" preserveAspectRatio="xMidYMid meet">
|
<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="500px" height="500px" viewBox="0 0 5000 5000" preserveAspectRatio="xMidYMid meet">
|
||||||
<g id="layer1" fill="#ffffff" stroke="none">
|
<g id="layer1" fill="#5d5d5d" stroke="none">
|
||||||
<path d="M1395 4388 c-3 -7 -4 -870 -3 -1918 3 -1803 4 -1905 20 -1905 24 0 2658 1893 2658 1910 0 14 -2628 1918 -2654 1923 -9 2 -18 -2 -21 -10z"/>
|
<path d="M1387 4413 c-4 -3 -7 -856 -7 -1895 0 -1504 3 -1888 13 -1888 17 0 99 68 1229 1017 560 471 1018 862 1018 869 0 6 -11 19 -24 28 -52 34 -1977 1666 -2086 1768 -110 103 -128 116 -143 101z m1955 -1872 l26 -26 -646 -542 c-356 -298 -749 -627 -874 -732 l-228 -191 0 1459 0 1460 848 -701 c466 -385 859 -712 874 -727z"/>
|
||||||
</g>
|
</g>
|
||||||
<g id="layer2" fill="#1134c1" stroke="none">
|
<g id="layer2" fill="#ffffff" fill-opacity="0.0" stroke="none">
|
||||||
<path d="M0 2500 l0 -2500 2505 0 2505 0 0 2500 0 2500 -2505 0 -2505 0 0 -2500z m2751 942 c725 -525 1319 -960 1319 -967 0 -17 -2634 -1910 -2658 -1910 -16 0 -17 102 -20 1905 -1 1048 0 1911 3 1918 3 8 12 12 21 10 8 -2 609 -432 1335 -956z"/>
|
<path d="M0 2500 l0 -2500 2500 0 2500 0 0 2500 0 2500 -2500 0 -2500 0 0 -2500z m1530 1812 c109 -102 2034 -1734 2086 -1768 13 -9 24 -22 24 -28 0 -7 -458 -398 -1018 -869 -1130 -949 -1212 -1017 -1229 -1017 -10 0 -13 384 -13 1888 0 1039 3 1892 7 1895 15 15 33 2 143 -101z"/>
|
||||||
|
<path d="M1620 2509 l0 -1459 228 191 c125 105 518 434 874 732 l646 542 -26 26 c-15 15 -408 342 -874 727 l-848 701 0 -1460z"/>
|
||||||
</g>
|
</g>
|
||||||
|
|
||||||
</svg>
|
</svg>
|
Before Width: | Height: | Size: 721 B After Width: | Height: | Size: 1.1 KiB |
11
svg/prev.svg
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||||
|
<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="500px" height="500px" viewBox="0 0 5000 5000" preserveAspectRatio="xMidYMid meet">
|
||||||
|
<g id="layer1" fill="#5d5d5d" stroke="none">
|
||||||
|
<path d="M1350 2490 l0 -1900 335 0 335 0 2 665 3 665 690 -585 c380 -321 732 -623 782 -671 61 -56 98 -84 108 -80 13 5 15 215 15 1896 0 1507 -3 1890 -13 1890 -16 0 -91 -62 -889 -732 -378 -318 -690 -578 -693 -578 -3 0 -5 299 -5 665 l0 665 -335 0 -335 0 0 -1900z m440 920 c0 -755 0 -760 20 -760 11 0 62 35 113 78 154 127 1203 1008 1335 1120 l122 104 0 -1461 0 -1460 -583 483 c-321 266 -626 517 -678 559 -52 42 -137 112 -189 157 -57 48 -104 80 -117 80 l-23 0 0 -745 0 -745 -110 0 -110 0 0 1675 0 1675 110 0 110 0 0 -760z"/>
|
||||||
|
</g>
|
||||||
|
<g id="layer2" fill="#ffffff" fill-opacity="0.0" stroke="none">
|
||||||
|
<path d="M0 2500 l0 -2500 2500 0 2500 0 0 2500 0 2500 -2500 0 -2500 0 0 -2500z m2020 1225 c0 -366 2 -665 5 -665 3 0 315 260 693 578 798 670 873 732 889 732 10 0 13 -383 13 -1890 0 -1681 -2 -1891 -15 -1896 -10 -4 -47 24 -108 80 -50 48 -402 350 -782 671 l-690 585 -3 -665 -2 -665 -335 0 -335 0 0 1900 0 1900 335 0 335 0 0 -665z"/>
|
||||||
|
<path d="M1570 2495 l0 -1675 110 0 110 0 0 745 0 745 23 0 c13 0 60 -32 117 -80 52 -45 137 -115 189 -157 52 -42 357 -293 678 -559 l583 -483 0 1460 0 1461 -122 -104 c-132 -112 -1181 -993 -1335 -1120 -51 -43 -102 -78 -113 -78 -20 0 -20 5 -20 760 l0 760 -110 0 -110 0 0 -1675z"/>
|
||||||
|
</g>
|
||||||
|
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.5 KiB |
12
svg/restore.svg
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||||
|
<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="500px" height="500px" viewBox="0 0 5000 5000" preserveAspectRatio="xMidYMid meet">
|
||||||
|
<g id="layer1" fill="#5d5d5d" stroke="none">
|
||||||
|
<path d="M1480 3865 l0 -365 -375 0 -375 0 0 -1390 0 -1390 1395 0 1395 0 0 365 0 365 375 0 375 0 0 1390 0 1390 -1395 0 -1395 0 0 -365z m2540 -1025 l0 -1170 -1160 0 -1160 0 0 878 c0 482 3 1009 7 1170 l6 292 1154 0 1153 0 0 -1170z m-2540 -475 l0 -915 895 0 895 0 0 -255 0 -255 -1155 0 -1155 0 0 1170 0 1170 260 0 260 0 0 -915z"/>
|
||||||
|
</g>
|
||||||
|
<g id="layer2" fill="#ffffff" stroke="none">
|
||||||
|
<path d="M0 2500 l0 -2500 2500 0 2500 0 0 2500 0 2500 -2500 0 -2500 0 0 -2500z m4270 340 l0 -1390 -375 0 -375 0 0 -365 0 -365 -1395 0 -1395 0 0 1390 0 1390 375 0 375 0 0 365 0 365 1395 0 1395 0 0 -1390z"/>
|
||||||
|
<path d="M1707 3718 c-4 -161 -7 -688 -7 -1170 l0 -878 1160 0 1160 0 0 1170 0 1170 -1153 0 -1154 0 -6 -292z"/>
|
||||||
|
<path d="M960 2110 l0 -1170 1155 0 1155 0 0 255 0 255 -895 0 -895 0 0 915 0 915 -260 0 -260 0 0 -1170z"/>
|
||||||
|
</g>
|
||||||
|
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.1 KiB |
11
svg/stop.svg
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||||
|
<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="500px" height="500px" viewBox="0 0 5000 5000" preserveAspectRatio="xMidYMid meet">
|
||||||
|
<g id="layer1" fill="#5d5d5d" stroke="none">
|
||||||
|
<path d="M760 2500 l0 -1740 1740 0 1740 0 0 1740 0 1740 -1740 0 -1740 0 0 -1740z m3170 0 l0 -1460 -1440 0 -1440 0 0 1460 0 1460 1440 0 1440 0 0 -1460z"/>
|
||||||
|
</g>
|
||||||
|
<g id="layer2" fill="#ffffff" fill-opacity="0.0" stroke="none">
|
||||||
|
<path d="M0 2500 l0 -2500 2500 0 2500 0 0 2500 0 2500 -2500 0 -2500 0 0 -2500z m4240 0 l0 -1740 -1740 0 -1740 0 0 1740 0 1740 1740 0 1740 0 0 -1740z"/>
|
||||||
|
<path d="M1050 2500 l0 -1460 1440 0 1440 0 0 1460 0 1460 -1440 0 -1440 0 0 -1460z"/>
|
||||||
|
</g>
|
||||||
|
|
||||||
|
</svg>
|
After Width: | Height: | Size: 778 B |
12
svg/volume_down.svg
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||||
|
<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="500px" height="500px" viewBox="0 0 5000 5000" preserveAspectRatio="xMidYMid meet">
|
||||||
|
<g id="layer1" fill="#5d5d5d" stroke="none">
|
||||||
|
<path d="M2735 4015 l-639 -475 -553 0 -553 0 0 -1035 0 -1035 563 0 562 -1 620 -494 c527 -421 625 -494 653 -495 l32 0 0 2005 0 2005 -23 0 c-15 0 -248 -167 -662 -475z m515 -1535 c0 -929 -2 -1690 -5 -1690 -2 0 -239 187 -526 415 l-522 415 -518 0 -519 0 0 880 0 880 518 0 517 0 520 394 c286 217 523 395 528 395 4 1 7 -759 7 -1689z"/>
|
||||||
|
<path d="M1620 2425 l0 -75 420 0 420 0 0 75 0 75 -420 0 -420 0 0 -75z"/>
|
||||||
|
</g>
|
||||||
|
<g id="layer2" fill="#ffffff" fill-opacity="0.0" stroke="none">
|
||||||
|
<path d="M0 2500 l0 -2500 2500 0 2500 0 0 2500 0 2500 -2500 0 -2500 0 0 -2500z m3420 -15 l0 -2005 -32 0 c-28 1 -126 74 -653 495 l-620 494 -562 1 -563 0 0 1035 0 1035 553 0 553 0 639 475 c414 308 647 475 662 475 l23 0 0 -2005z"/>
|
||||||
|
<path d="M2715 3774 l-520 -394 -517 0 -518 0 0 -880 0 -880 519 0 518 0 522 -415 c287 -228 524 -415 526 -415 3 0 5 761 5 1690 0 930 -3 1690 -7 1689 -5 0 -242 -178 -528 -395z m-255 -1349 l0 -75 -420 0 -420 0 0 75 0 75 420 0 420 0 0 -75z"/>
|
||||||
|
</g>
|
||||||
|
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
12
svg/volume_up.svg
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||||
|
<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="500px" height="500px" viewBox="0 0 5000 5000" preserveAspectRatio="xMidYMid meet">
|
||||||
|
<g id="layer1" fill="#5d5d5d" stroke="none">
|
||||||
|
<path d="M2735 4015 l-639 -475 -553 0 -553 0 0 -1035 0 -1035 563 0 562 -1 620 -494 c527 -421 625 -494 653 -495 l32 0 0 2005 0 2005 -23 0 c-15 0 -248 -167 -662 -475z m515 -1535 c0 -929 -2 -1690 -5 -1690 -2 0 -239 187 -526 415 l-522 415 -518 0 -519 0 0 880 0 880 518 0 517 0 520 394 c286 217 523 395 528 395 4 1 7 -759 7 -1689z"/>
|
||||||
|
<path d="M1950 2680 l0 -180 -165 0 -165 0 0 -75 0 -75 165 0 165 0 0 -165 0 -165 75 0 75 0 0 165 0 165 180 0 180 0 0 75 0 75 -180 0 -180 0 0 180 0 180 -75 0 -75 0 0 -180z"/>
|
||||||
|
</g>
|
||||||
|
<g id="layer2" fill="#ffffff" fill-opacity="0.0" stroke="none">
|
||||||
|
<path d="M0 2500 l0 -2500 2500 0 2500 0 0 2500 0 2500 -2500 0 -2500 0 0 -2500z m3420 -15 l0 -2005 -32 0 c-28 1 -126 74 -653 495 l-620 494 -562 1 -563 0 0 1035 0 1035 553 0 553 0 639 475 c414 308 647 475 662 475 l23 0 0 -2005z"/>
|
||||||
|
<path d="M2715 3774 l-520 -394 -517 0 -518 0 0 -880 0 -880 519 0 518 0 522 -415 c287 -228 524 -415 526 -415 3 0 5 761 5 1690 0 930 -3 1690 -7 1689 -5 0 -242 -178 -528 -395z m-615 -1094 l0 -180 180 0 180 0 0 -75 0 -75 -180 0 -180 0 0 -165 0 -165 -75 0 -75 0 0 165 0 165 -165 0 -165 0 0 75 0 75 165 0 165 0 0 180 0 180 75 0 75 0 0 -180z"/>
|
||||||
|
</g>
|
||||||
|
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.4 KiB |