From 01e7d94a42883e7564845a01fe6dc127335a24c3 Mon Sep 17 00:00:00 2001 From: jsmolka Date: Wed, 5 Dec 2018 22:07:40 +0100 Subject: [PATCH] 0.1.9 release --- egg-player.pri | 2 +- egg-player.pro | 24 ++++++++++++---------- resource/css/bar.css | 35 ++++++++++++++++++++++++++------- src/core/audiofinder.cpp | 2 +- src/core/audiofinder.hpp | 4 ++-- src/core/bass/syncwrapper.hpp | 4 ++-- src/core/config/barjson.cpp | 34 ++++++++++++++++++++++++++------ src/core/config/barjson.hpp | 10 ++++++++-- src/core/config/libraryjson.cpp | 3 ++- src/core/database/infoitem.hpp | 4 ++-- src/core/macros.hpp | 3 --- src/core/tag.hpp | 16 +++++++-------- src/threading/thread.hpp | 4 ++-- src/widgets/audioswidget.cpp | 2 +- src/widgets/barwidget.cpp | 24 +++++++++++++++------- src/widgets/barwidget.hpp | 7 ++++--- src/widgets/durationslider.cpp | 12 +++++++++++ src/widgets/durationslider.hpp | 17 ++++++++++++++++ src/widgets/volumeslider.hpp | 14 +++++++++++++ todo.md | 8 -------- 20 files changed, 163 insertions(+), 66 deletions(-) create mode 100644 src/widgets/durationslider.cpp create mode 100644 src/widgets/durationslider.hpp create mode 100644 src/widgets/volumeslider.hpp diff --git a/egg-player.pri b/egg-player.pri index 72085d8..86e403f 100644 --- a/egg-player.pri +++ b/egg-player.pri @@ -1,6 +1,6 @@ RC_ICONS = resource/images/egg/egg.ico -VERSION = 0.1.8.5 +VERSION = 0.1.9.0 QMAKE_TARGET = Egg Player QMAKE_TARGET_PRODUCT = Egg Player diff --git a/egg-player.pro b/egg-player.pro index 93a4f64..42f6cc4 100644 --- a/egg-player.pro +++ b/egg-player.pro @@ -37,6 +37,7 @@ RESOURCES = egg-player.qrc DEFINES *= QT_USE_QSTRINGBUILDER HEADERS += \ + src/core/audios/audiosbase.hpp \ src/core/audios/currentstate.hpp \ src/core/bass/basserror.hpp \ src/core/bass/streamwrapper.hpp \ @@ -54,10 +55,12 @@ HEADERS += \ src/core/database/queryobject.hpp \ src/core/database/sqlquery.hpp \ src/core/database/tableitem.hpp \ + src/core/filesystem/directory.hpp \ src/core/filesystem/filesystemwatcher.hpp \ src/core/filesystem/uniquefileinfo.hpp \ src/core/filesystem/windowsfile.hpp \ src/core/audio.hpp \ + src/core/audiofinder.hpp \ src/core/audios.hpp \ src/core/bass.hpp \ src/core/bimap.hpp \ @@ -66,12 +69,14 @@ HEADERS += \ src/core/constants.hpp \ src/core/cover.hpp \ src/core/duration.hpp \ + src/core/filesystem.hpp \ src/core/iconcreator.hpp \ src/core/library.hpp \ src/core/logger.hpp \ src/core/macros.hpp \ src/core/player.hpp \ src/core/playlist.hpp \ + src/core/readablevector.hpp \ src/core/shortcut.hpp \ src/core/shortcutprocessor.hpp \ src/core/singleton.hpp \ @@ -95,6 +100,7 @@ HEADERS += \ src/widgets/barwidget.hpp \ src/widgets/borderlayout.hpp \ src/widgets/clickablestyle.hpp \ + src/widgets/durationslider.hpp \ src/widgets/eggwidget.hpp \ src/widgets/iconbutton.hpp \ src/widgets/librarywidget.hpp \ @@ -106,13 +112,10 @@ HEADERS += \ src/widgets/smoothtablewidget.hpp \ src/widgets/tablewidget.hpp \ src/widgets/volumebutton.hpp \ - src/core/filesystem/directory.hpp \ - src/core/filesystem.hpp \ - src/core/readablevector.hpp \ - src/core/audios/audiosbase.hpp \ - src/core/audiofinder.hpp + src/widgets/volumeslider.hpp SOURCES += \ + src/core/audios/audiosbase.cpp \ src/core/audios/currentstate.cpp \ src/core/bass/basserror.cpp \ src/core/bass/streamwrapper.cpp \ @@ -129,10 +132,12 @@ SOURCES += \ src/core/database/infoitem.cpp \ src/core/database/queryobject.cpp \ src/core/database/sqlquery.cpp \ + src/core/filesystem/directory.cpp \ src/core/filesystem/filesystemwatcher.cpp \ src/core/filesystem/uniquefileinfo.cpp \ src/core/filesystem/windowsfile.cpp \ src/core/audio.cpp \ + src/core/audiofinder.cpp \ src/core/audios.cpp \ src/core/bass.cpp \ src/core/cache.cpp \ @@ -140,6 +145,7 @@ SOURCES += \ src/core/constants.cpp \ src/core/cover.cpp \ src/core/duration.cpp \ + src/core/filesystem.cpp \ src/core/iconcreator.cpp \ src/core/library.cpp \ src/core/logger.cpp \ @@ -165,6 +171,7 @@ SOURCES += \ src/widgets/barwidget.cpp \ src/widgets/borderlayout.cpp \ src/widgets/clickablestyle.cpp \ + src/widgets/durationslider.cpp \ src/widgets/eggwidget.cpp \ src/widgets/iconbutton.cpp \ src/widgets/librarywidget.cpp \ @@ -176,8 +183,5 @@ SOURCES += \ src/widgets/smoothtablewidget.cpp \ src/widgets/tablewidget.cpp \ src/widgets/volumebutton.cpp \ - src/main.cpp \ - src/core/filesystem/directory.cpp \ - src/core/filesystem.cpp \ - src/core/audios/audiosbase.cpp \ - src/core/audiofinder.cpp + src/main.cpp + diff --git a/resource/css/bar.css b/resource/css/bar.css index d036b83..c418920 100644 --- a/resource/css/bar.css +++ b/resource/css/bar.css @@ -2,9 +2,12 @@ * The css files should only be used to edit color related things. All other * values can and should changed through the config. The following values will * be replaced by config values. - * - groove-height + * - groove-size-duration + * - groove-size-volume * - handle-size * - handle-size-half + * - handle-size-pressed + * - handle-size-pressed-half * - icon-size-half */ @@ -20,12 +23,20 @@ LockableIconButton[locked=true] { background: rgba(255, 255, 255, 0.3); } -Slider::groove:horizontal { +Slider::sub-page { + background: white; +} + +Slider::add-page { background: rgb(150, 150, 150); - height: groove-height; } -Slider::handle:horizontal { +DurationSlider::groove:horizontal { + background: rgb(150, 150, 150); + height: groove-size-duration; +} + +DurationSlider::handle:horizontal { background: white; width: handle-size; height: handle-size; @@ -34,10 +45,20 @@ Slider::handle:horizontal { border-radius: handle-size-half; } -Slider::sub-page { +DurationSlider::handle:horizontal:hover { + background: rgb(175, 175, 175); +} + +DurationSlider::handle:horizontal:pressed { background: white; + width: handle-size-pressed; + height: handle-size-pressed; + margin-top: -handle-size-pressed-half; + margin-bottom: -handle-size-pressed-half; + border-radius: handle-size-pressed-half; } -Slider::add-page { - background: rgb(150, 150, 150); +VolumeSlider::groove:horizontal { + background: rgb(150, 150, 150); + height: groove-size-volume; } diff --git a/src/core/audiofinder.cpp b/src/core/audiofinder.cpp index 6b3811d..b1bb1d9 100644 --- a/src/core/audiofinder.cpp +++ b/src/core/audiofinder.cpp @@ -25,7 +25,7 @@ void AudioFinder::addKey(const QString &key) m_reset.start(qApp->keyboardInputInterval()); } -int AudioFinder::search() +int AudioFinder::find() { if (!m_audios || m_index == -1 || m_string.isEmpty()) return -1; diff --git a/src/core/audiofinder.hpp b/src/core/audiofinder.hpp index 8fc3769..35b6003 100644 --- a/src/core/audiofinder.hpp +++ b/src/core/audiofinder.hpp @@ -11,12 +11,12 @@ class AudioFinder : public QObject Q_OBJECT public: - AudioFinder(QObject *parent = nullptr); + explicit AudioFinder(QObject *parent = nullptr); void setAudios(Audios *audios); void addKey(const QString &key); - int search(); + int find(); private slots: void reset(); diff --git a/src/core/bass/syncwrapper.hpp b/src/core/bass/syncwrapper.hpp index 4f71a00..aa6f849 100644 --- a/src/core/bass/syncwrapper.hpp +++ b/src/core/bass/syncwrapper.hpp @@ -16,8 +16,8 @@ class SyncWrapper : protected BassError public: SyncWrapper(); - EGG_CPROP(std::function, function, setFunction, function) - EGG_PPROP(void *, functionData, setFunctionData, functionData) + EGG_C_PROP(std::function, function, setFunction, function) + EGG_P_PROP(void *, functionData, setFunctionData, functionData) bool isValid() const; diff --git a/src/core/config/barjson.cpp b/src/core/config/barjson.cpp index 198bb97..5951b08 100644 --- a/src/core/config/barjson.cpp +++ b/src/core/config/barjson.cpp @@ -48,18 +48,30 @@ QJsonObject cfg::SliderJson::toObject() const void cfg::SliderJson::setDefaults() { - setDefault("grooveHeight", 2); - setDefault("handleSize", 16); + setDefault("grooveSizeDuration", 2); + setDefault("grooveSizeVolume", 6); + setDefault("handleSize", 14); + setDefault("handleSizePressed", 16); } -void cfg::SliderJson::setGrooveHeight(int height) +void cfg::SliderJson::setGrooveSizeDuration(int height) { - set("grooveHeight", height); + set("grooveSizeDuration", height); } -int cfg::SliderJson::grooveHeight() const +int cfg::SliderJson::grooveSizeDuration() const { - return scale(get("grooveHeight").toInt()); + return scale(get("grooveSizeDuration").toInt()); +} + +void cfg::SliderJson::setGrooveSizeVolume(int height) +{ + set("grooveSizeVolume", height); +} + +int cfg::SliderJson::grooveSizeVolume() const +{ + return scale(get("grooveSizeVolume").toInt()); } void cfg::SliderJson::setHandleSize(int size) @@ -72,6 +84,16 @@ int cfg::SliderJson::handleSize() const return scale(get("handleSize").toInt()); } +void cfg::SliderJson::setHandleSizePressed(int size) +{ + set("handleSizePressed", size); +} + +int cfg::SliderJson::handleSizePressed() const +{ + return scale(get("handleSizePressed").toInt()); +} + void cfg::BarJson::loadFromObject(const QJsonObject &object) { setObject(object); diff --git a/src/core/config/barjson.hpp b/src/core/config/barjson.hpp index c4f61f7..9063fee 100644 --- a/src/core/config/barjson.hpp +++ b/src/core/config/barjson.hpp @@ -29,11 +29,17 @@ class SliderJson : public JsonObject void setDefaults() override; - void setGrooveHeight(int height); - int grooveHeight() const; + void setGrooveSizeDuration(int height); + int grooveSizeDuration() const; + + void setGrooveSizeVolume(int height); + int grooveSizeVolume() const; void setHandleSize(int size); int handleSize() const; + + void setHandleSizePressed(int size); + int handleSizePressed() const; }; class BarJson : public JsonObject diff --git a/src/core/config/libraryjson.cpp b/src/core/config/libraryjson.cpp index cdc7b1b..2580447 100644 --- a/src/core/config/libraryjson.cpp +++ b/src/core/config/libraryjson.cpp @@ -56,7 +56,8 @@ void cfg::LibraryJson::setPaths(const QStrings &paths) QStrings cfg::LibraryJson::paths() const { QStrings paths; - for (const QJsonValue &value : get("paths").toArray()) + const QJsonArray values = get("paths").toArray(); + for (const QJsonValue &value : values) paths << value.toString(); return paths; diff --git a/src/core/database/infoitem.hpp b/src/core/database/infoitem.hpp index 43f5c91..770dedc 100644 --- a/src/core/database/infoitem.hpp +++ b/src/core/database/infoitem.hpp @@ -12,8 +12,8 @@ class InfoItem : public TableItem public: InfoItem(); - EGG_PPROP(int, id, setId, id) - EGG_PPROP(int, version, setVersion, version) + EGG_P_PROP(int, id, setId, id) + EGG_P_PROP(int, version, setVersion, version) bool exists(); bool insert(); diff --git a/src/core/macros.hpp b/src/core/macros.hpp index 145aefe..9c1c5d4 100644 --- a/src/core/macros.hpp +++ b/src/core/macros.hpp @@ -41,7 +41,4 @@ static_cast( \ *this).func()) \ -#define EGG_PPROP EGG_P_PROP -#define EGG_CPROP EGG_C_PROP - #endif // MACROS_HPP diff --git a/src/core/tag.hpp b/src/core/tag.hpp index 6a6b617..4247bd4 100644 --- a/src/core/tag.hpp +++ b/src/core/tag.hpp @@ -11,14 +11,14 @@ class Tag Tag(); explicit Tag(const QString &file); - EGG_CPROP(QString, file, setFile, file) - EGG_CPROP(QString, title, setTitle, title) - EGG_CPROP(QString, artist, setArtist, artist) - EGG_CPROP(QString, album, setAlbum, album) - EGG_CPROP(QString, genre, setGenre, genre) - EGG_PPROP(int, year, setYear, year) - EGG_PPROP(int, track, setTrack, track) - EGG_PPROP(int, duration, setDuration, duration) + EGG_C_PROP(QString, file, setFile, file) + EGG_C_PROP(QString, title, setTitle, title) + EGG_C_PROP(QString, artist, setArtist, artist) + EGG_C_PROP(QString, album, setAlbum, album) + EGG_C_PROP(QString, genre, setGenre, genre) + EGG_P_PROP(int, year, setYear, year) + EGG_P_PROP(int, track, setTrack, track) + EGG_P_PROP(int, duration, setDuration, duration) bool read(); }; diff --git a/src/threading/thread.hpp b/src/threading/thread.hpp index 0349862..6ac5992 100644 --- a/src/threading/thread.hpp +++ b/src/threading/thread.hpp @@ -12,8 +12,8 @@ class Thread : public QThread public: explicit Thread(QObject *parent = nullptr); - EGG_PPROP(int, objects, setObjects, objects) - EGG_PPROP(int, maxObjects, setMaxObjects, maxObjects) + EGG_P_PROP(int, objects, setObjects, objects) + EGG_P_PROP(int, maxObjects, setMaxObjects, maxObjects) void incrementObjects(); void decrementObjects(); diff --git a/src/widgets/audioswidget.cpp b/src/widgets/audioswidget.cpp index d0eca33..f9e9c03 100644 --- a/src/widgets/audioswidget.cpp +++ b/src/widgets/audioswidget.cpp @@ -68,7 +68,7 @@ void AudiosWidget::keyboardSearch(const QString &search) void AudiosWidget::keyPressEvent(QKeyEvent *event) { m_finder.addKey(event->text()); - const int row = m_finder.search(); + const int row = m_finder.find(); if (row != -1) { scrollTo(model()->index(row, 0)); diff --git a/src/widgets/barwidget.cpp b/src/widgets/barwidget.cpp index abccf69..cad19e8 100644 --- a/src/widgets/barwidget.cpp +++ b/src/widgets/barwidget.cpp @@ -40,9 +40,9 @@ BarWidget::BarWidget(QWidget *parent) connect(&m_loopButton, &LockableIconButton::locked, &egg_player.playlist(), &Playlist::setLoop); connect(&m_volumeButton, &IconButton::released, this, &BarWidget::onVolumeButtonPressed); - connect(&m_durationSlider, &Slider::sliderMoved, this, &BarWidget::onDurationSliderMoved); - connect(&m_durationSlider, &Slider::sliderValueChanged, &egg_player, &Player::setPosition); - connect(&m_volumeSlider, &Slider::sliderMoved, &egg_player, &Player::setVolume); + connect(&m_durationSlider, &DurationSlider::sliderMoved, this, &BarWidget::onDurationSliderMoved); + connect(&m_durationSlider, &DurationSlider::sliderValueChanged, &egg_player, &Player::setPosition); + connect(&m_volumeSlider, &VolumeSlider::sliderMoved, &egg_player, &Player::setVolume); } void BarWidget::setColor(const QColor &color) @@ -182,10 +182,20 @@ void BarWidget::initUi() void BarWidget::initStyle() { + const int grooveSizeDuration = cfg_bar.slider().grooveSizeDuration(); + const int grooveSizeVolume = cfg_bar.slider().grooveSizeVolume(); + const int handleSize = cfg_bar.slider().handleSize(); + const int handleSizePressed = cfg_bar.slider().handleSizePressed(); + const int iconSize = cfg_bar.iconSize(); + setStyleSheet(FileUtil::read(constants::css::Bar) - .replace("groove-height", QString::number(cfg_bar.slider().grooveHeight())) - .replace("handle-size-half", QString::number(cfg_bar.slider().handleSize() / 2)) - .replace("handle-size", QString::number(cfg_bar.slider().handleSize())) - .replace("icon-size-half", QString::number(cfg_bar.iconSize() / 2)) + .replace("groove-size-duration", QString::number(grooveSizeDuration)) + .replace("groove-size-volume", QString::number(grooveSizeVolume)) + .replace("handle-size-pressed-half", QString::number(handleSizePressed / 2)) + .replace("handle-size-pressed", QString::number(handleSizePressed)) + .replace("handle-size-half", QString::number(handleSize / 2)) + .replace("handle-size", QString::number(handleSize)) + .replace("icon-size-half", QString::number(iconSize / 2)) + ); } diff --git a/src/widgets/barwidget.hpp b/src/widgets/barwidget.hpp index ed67a91..d29e9f9 100644 --- a/src/widgets/barwidget.hpp +++ b/src/widgets/barwidget.hpp @@ -5,11 +5,12 @@ #include #include "core/audio.hpp" +#include "widgets/durationslider.hpp" #include "widgets/iconbutton.hpp" #include "widgets/lockableiconbutton.hpp" #include "widgets/playpausebutton.hpp" -#include "widgets/slider.hpp" #include "widgets/volumebutton.hpp" +#include "widgets/volumeslider.hpp" class BarWidget : public QWidget { @@ -50,8 +51,8 @@ private slots: LockableIconButton m_loopButton; VolumeButton m_volumeButton; - Slider m_durationSlider; - Slider m_volumeSlider; + DurationSlider m_durationSlider; + VolumeSlider m_volumeSlider; }; #endif // BARWIDGET_HPP diff --git a/src/widgets/durationslider.cpp b/src/widgets/durationslider.cpp new file mode 100644 index 0000000..dfc22ea --- /dev/null +++ b/src/widgets/durationslider.cpp @@ -0,0 +1,12 @@ +#include "durationslider.hpp" + +DurationSlider::DurationSlider(QWidget *parent) + : Slider(parent) +{ + connect(this, &DurationSlider::sliderReleased, this, &DurationSlider::onReleased); +} + +void DurationSlider::onReleased() +{ + repaint(); +} diff --git a/src/widgets/durationslider.hpp b/src/widgets/durationslider.hpp new file mode 100644 index 0000000..781a630 --- /dev/null +++ b/src/widgets/durationslider.hpp @@ -0,0 +1,17 @@ +#ifndef DURATIONSLIDER_HPP +#define DURATIONSLIDER_HPP + +#include "widgets/slider.hpp" + +class DurationSlider : public Slider +{ + Q_OBJECT + +public: + explicit DurationSlider(QWidget *parent = nullptr); + +private slots: + void onReleased(); +}; + +#endif // DURATIONSLIDER_HPP diff --git a/src/widgets/volumeslider.hpp b/src/widgets/volumeslider.hpp new file mode 100644 index 0000000..0e6a969 --- /dev/null +++ b/src/widgets/volumeslider.hpp @@ -0,0 +1,14 @@ +#ifndef VOLUMESLIDER_HPP +#define VOLUMESLIDER_HPP + +#include "widgets/slider.hpp" + +class VolumeSlider : public Slider +{ + Q_OBJECT + +public: + using Slider::Slider; +}; + +#endif // VOLUMESLIDER_HPP diff --git a/todo.md b/todo.md index 3f88623..012760c 100644 --- a/todo.md +++ b/todo.md @@ -1,9 +1 @@ # Things to do - -## User Interface - -### Bar -- use different sliders for volume and duration - - make the volume slider pop out instead of hiding other icons - - improve the duration slider style (include some form of hover effect) - - create a unique handle for the duration slider \ No newline at end of file