diff --git a/libremediaserver-audio.pro b/libremediaserver-audio.pro index 77f5c0b..011aa46 100644 --- a/libremediaserver-audio.pro +++ b/libremediaserver-audio.pro @@ -2,6 +2,8 @@ TEMPLATE = app TARGET = libremediaserver-audio QT += webkitwidgets widgets HEADERS += src/libremediaserver-audio.h \ + cuetrackwidget.h \ + src/dialgroup.h \ src/editcuetrackwidget.h \ src/cuetracklistwidget.h \ src/showplayer.h \ @@ -25,6 +27,8 @@ HEADERS += src/libremediaserver-audio.h \ src/settings.h \ src/slidergroup.h SOURCES += src/main.cpp \ + cuetrackwidget.cpp \ + src/dialgroup.cpp \ src/editcuetrackwidget.cpp \ src/cuetracklistwidget.cpp \ src/showplayer.cpp \ @@ -45,6 +49,7 @@ SOURCES += src/main.cpp \ src/settings.cpp \ src/slidergroup.cpp FORMS += \ + cuetrackwidget.ui \ src/showplayer.ui \ src/libremediaserver-audio-ui.ui CCFLAG += -msse2 -mavx2 diff --git a/src/cuetrackwidget.cpp b/src/cuetrackwidget.cpp new file mode 100644 index 0000000..659a7fe --- /dev/null +++ b/src/cuetrackwidget.cpp @@ -0,0 +1,14 @@ +#include "cuetrackwidget.h" +#include "ui_cuetrackwidget.h" + +CuetrackWidget::CuetrackWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::CuetrackWidget) +{ + ui->setupUi(this); +} + +CuetrackWidget::~CuetrackWidget() +{ + delete ui; +} diff --git a/src/cuetrackwidget.h b/src/cuetrackwidget.h new file mode 100644 index 0000000..d28f076 --- /dev/null +++ b/src/cuetrackwidget.h @@ -0,0 +1,23 @@ +#ifndef CUETRACKWIDGET_H +#define CUETRACKWIDGET_H + +#include +#include + +namespace Ui { +class CuetrackWidget; +} + +class CuetrackWidget : public QWidget +{ + Q_OBJECT + +public: + explicit CuetrackWidget(QWidget *parent = nullptr); + ~CuetrackWidget(); + +private: + Ui::CuetrackWidget *ui; +}; + +#endif // CUETRACKWIDGET_H diff --git a/src/cuetrackwidget.ui b/src/cuetrackwidget.ui new file mode 100644 index 0000000..8915532 --- /dev/null +++ b/src/cuetrackwidget.ui @@ -0,0 +1,157 @@ + + + CuetrackWidget + + + + 0 + 0 + 640 + 193 + + + + Form + + + + + 10 + 40 + 238 + 85 + + + + + + + + + + Fade time in seconds + + + Fade In + + + Fade In Time in seconds + + + true + + + QAbstractSpinBox::PlusMinus + + + + + + false + + + + + + + + + 99990000.000000000000000 + + + QAbstractSpinBox::AdaptiveDecimalStepType + + + + + + + CheckBox + + + + + + + + + + + + + + + 260 + 40 + 341 + 121 + + + + + + + + + + + + + + + + + + + + + + + + 0 + 10 + 631 + 25 + + + + Qt::Horizontal + + + + + 0 + 0 + + + + + 100 + 0 + + + + 24 + + + + + + 100 + 0 + + + + + + + 400 + 0 + + + + + + + + diff --git a/src/dialgroup.cpp b/src/dialgroup.cpp new file mode 100644 index 0000000..b5bf768 --- /dev/null +++ b/src/dialgroup.cpp @@ -0,0 +1,94 @@ +#include "dialgroup.h" +#include +#include +#include + +DialGroup::DialGroup(QString name, + int min, + int max, + int decimals, + QWidget *parent) + : QWidget(parent) +{ + layout = new QVBoxLayout; + layout->setAlignment(Qt::AlignHCenter); + layout->setContentsMargins(0, 0, 0, 0); + slider.setFocusPolicy(Qt::StrongFocus); + slider.setTickPosition(QSlider::TicksBothSides); + slider.setTickInterval((max - min) / 11); + slider.setMinimumHeight(0); + slider.setSingleStep(1); + slider.setRange(min, max); + slider.setValue(0); + slider.setMinimumWidth(50); + slider.setToolTip(name); + slider.setStyleSheet("QDial {" + "border: 1px solid #aa8895;" + "background: #20182d;" + "margin: 0px;}" + "QSlider::groove:vertical {" + "border: 1px solid #999999;" + "width: 25px;}" + "QDial::tickmarks:vertical {" + "background-color: black;" + "background: red;" + "color: white;}" + slider.setContentsMargins(0, 0, 0, 0); + valueBox.setFocusPolicy(Qt::NoFocus); + valueBox.setButtonSymbols(QAbstractSpinBox::NoButtons); + valueBox.setMinimumWidth(50); + if (decimals) { + valueBox.setRange(-84.0f, 0.0f); + valueBox.setSpecialValueText("-inf"); + } else + valueBox.setRange(min, max); + valueBox.setValue(0); + valueBox.setDecimals(decimals); + valueBox.setObjectName(name); + valueBox.setToolTip(name); + valueBox.setAlignment(Qt::AlignHCenter); + valueBox.setContentsMargins(0, 0, 0, 0); + connect(&slider, SIGNAL(valueChanged(int)), this, SLOT(sliderValueChanged(int))); + layout->addWidget(&slider); + layout->addWidget(&valueBox); + this->setStyleSheet("border: 1px solid #aa8895;" + "background-color: black;" + "margin: 1px;" + ); + layout->setSpacing(0); + layout->setContentsMargins(0, 0, 0, 0); + this->setLayout(layout); +} + +void SliderGroup::sliderValueChanged(int value) +{ + valueBox.blockSignals(true); + if (valueBox.decimals()) { + float db = ((float)value / 771.0f) - 85.0f; + if (db <= -84.5f) { + valueBox.setSpecialValueText("-inf"); + } else + valueBox.setValue(db); + } else { + valueBox.setValue(value); + } + valueBox.blockSignals(false); + emit valueChanged(value); +}; + +void SliderGroup::setValue(float value) +{ + float db; + + slider.blockSignals(true); + valueBox.blockSignals(true); + if (int(value) != slider.value()) + slider.setValue(value); + if (valueBox.decimals()) { + db = (float)(value / 771.0f) - 85.0f; + valueBox.setValue(db); + } else + valueBox.setValue(value); + slider.blockSignals(false); + valueBox.blockSignals(false); +} diff --git a/src/dialgroup.h b/src/dialgroup.h new file mode 100644 index 0000000..3866c1c --- /dev/null +++ b/src/dialgroup.h @@ -0,0 +1,34 @@ +#ifndef SLIDERGROUP_H +#define SLIDERGROUP_H + +#include +#include +#include +#include + +#include "clickabledoublespinbox.h" + +class DialGroup : public QWidget +{ + Q_OBJECT +public: + DialGroup(QString name, + int min, + int max, + int decimals, + QWidget *parent = nullptr); + +signals: + void valueChanged(int value); + +public slots: + void setValue(float value); + void sliderValueChanged(int value); + +private: + QDial slider; + ClickableDoubleSpinBox valueBox; + +}; + +#endif diff --git a/src/slidergroup.cpp b/src/slidergroup.cpp index 481d554..8e9a3b6 100644 --- a/src/slidergroup.cpp +++ b/src/slidergroup.cpp @@ -38,16 +38,16 @@ SliderGroup::SliderGroup(QString name, "margin: 0px;}" "QSlider::groove:vertical {" "border: 1px solid #999999;" - "width: 25px;" - "margin: -4px;}" + "width: 25px;}" "QSlider::handle:vertical {" "background: white;" - "border: 1px solid #5c5c5c;" + "border: 2px solid #5c5c5c;" "width: 29px;" - "height: 7px;" - "margin: -2px;" + "height: 10px;" "border-radius: 2px;}" - "Qslider::tickmarks:vertical {background: white;" + "Qslider::tickmarks:vertical {" + "background-color: black;" + "background: red;" "color: white;}" "QSlider::add-page:vertical {background: blue;}" "QSlider::sub-page:vertical {background: #20182d;}");