open file dialog clicking on file/folder labels.

se atasca y se pone a 100%, los faders no refrescan como debieran,
parece que se saturan las señales.
This commit is contained in:
snt 2024-05-04 19:35:12 +02:00
parent 5a7a82736f
commit 389966782d
11 changed files with 86 additions and 25 deletions

View file

@ -2,6 +2,7 @@ TEMPLATE = app
TARGET = libremediaserver-audio
QT += webkitwidgets widgets
HEADERS += src/libremediaserver-audio.h \
src/clickablelabel.h \
src/dmxwidget.h \
src/libremediaserver-audio-gui.h \
src/main.h \
@ -16,6 +17,7 @@ HEADERS += src/libremediaserver-audio.h \
src/settings.h \
src/slidergroup.h
SOURCES += src/main.cpp \
src/clickablelabel.cpp \
src/dmxwidget.cpp \
src/libremediaserver-audio-gui.cpp \
src/miniaudio.c \

View file

@ -9,7 +9,7 @@ AudioLayerWidget::AudioLayerWidget(QWidget *parent, int layer):
QVBoxLayout *layout = new QVBoxLayout;
QVBoxLayout *playback = new QVBoxLayout;
m_folderValue = new QLabel;
m_folderValue = new ClickableLabel;
//m_folderValue->setMaximumWidth(160);
m_folderValue->setAlignment(Qt::AlignHCenter);
m_folderValue->setStyleSheet(
@ -17,7 +17,9 @@ AudioLayerWidget::AudioLayerWidget(QWidget *parent, int layer):
"background-color: black;"
);
playback->addWidget(m_folderValue);
m_fileValue = new QLabel;
m_fileValue = new ClickableLabel;
connect(m_fileValue, SIGNAL(clicked()), this, SLOT(openMediaDialog()));
connect(m_folderValue, SIGNAL(clicked()), this, SLOT(openMediaDialog()));
//m_fileValue->setMaximumWidth(160);
m_fileValue->setAlignment(Qt::AlignHCenter);
m_fileValue->setStyleSheet(
@ -52,6 +54,7 @@ AudioLayerWidget::AudioLayerWidget(QWidget *parent, int layer):
m_progressTime->setMaximumWidth(75);
m_progressTime->setFocusPolicy(Qt::NoFocus);
m_progressTime->setAlignment(Qt::AlignHCenter);
m_progressTime->setContentsMargins(0,0,0,0);
m_totalTimeValue = new QTimeEdit;
m_totalTimeValue->setObjectName("Track Length");
m_totalTimeValue->setToolTip("Track Length");
@ -61,6 +64,7 @@ AudioLayerWidget::AudioLayerWidget(QWidget *parent, int layer):
m_totalTimeValue->setMaximumWidth(75);
m_totalTimeValue->setFocusPolicy(Qt::NoFocus);
m_totalTimeValue->setAlignment(Qt::AlignHCenter);
m_totalTimeValue->setContentsMargins(0,0,0,0);
QHBoxLayout *status = new QHBoxLayout;
status->addWidget(m_progressTime);
status->addWidget(m_totalTimeValue);
@ -115,13 +119,28 @@ void AudioLayerWidget::toggleSuspendResume()
break;
case Status::Paused:
case Status::Stopped:
this->setPlaybackStatus(Status::PlayingOnce);
//this->setPlaybackStatus(Status::PlayingOnce);
emit uiPlaybackChanged(m_layer, Status::PlayingOnce);
case Status::Iddle:
break;
}
}
void AudioLayerWidget::openMediaDialog()
{
QFileDialog dialog(this);
dialog.setFileMode(QFileDialog::ExistingFile);
dialog.setNameFilter(tr("Sound Tracks (*.mp3 *.mp3 *.flac *.wav"));
dialog.setViewMode(QFileDialog::Detail);
dialog.setDirectory(Settings::getInstance()->getPathMedia());
if (!dialog.exec())
return;
QStringList fileNames;
fileNames = dialog.selectedFiles();
emit uiLoadMedia(m_layer, fileNames.at(0));
this->fileLoaded(fileNames.at(0));
}
// from DMX signals
void AudioLayerWidget::setVol(float vol)
{
@ -157,10 +176,12 @@ void AudioLayerWidget::fileLoaded(QString file)
void AudioLayerWidget::setPlaybackStatus(Status status)
{
if (StatusStr[status] == m_suspendResumeButton->text())
return;
m_suspendResumeButton->blockSignals(true);
m_status = status;
if (status == Status::Stopped)
m_progress->setValue(0);
m_suspendResumeButton->blockSignals(true);
m_suspendResumeButton->setText(StatusStr[status]);
m_suspendResumeButton->blockSignals(false);
}

View file

@ -3,11 +3,13 @@
#include <QPushButton>
#include <QTimeEdit>
#include <QLabel>
#include <QFileDialog>
#include <QProgressBar>
#include "defines.h"
#include "slidergroup.h"
#include "clickablelabel.h"
#include "settings.h"
class AudioLayerWidget : public QWidget
{
@ -28,8 +30,8 @@ private:
Status m_status;
int m_layer;
QPushButton *m_suspendResumeButton;
QLabel *m_fileValue;
QLabel * m_folderValue;
ClickableLabel *m_fileValue;
ClickableLabel * m_folderValue;
SliderGroup *m_volume;
SliderGroup *m_pan;
SliderGroup *m_pitch;
@ -46,10 +48,13 @@ public slots:
void durationChanged(float dur);
void refreshUi(float progress);
private slots:
void openMediaDialog();
signals:
void uiPlaybackChanged(int layer, Status s);
void uiSliderChanged(int layer, Slider s, int value);
void uiLoadMedia(int layer, QString s);
};
#endif // AUDIOLAYERWIDGET_H

View file

@ -10,6 +10,7 @@ AudioWidget::AudioWidget(QWidget *parent) :
m_layout->insertWidget(i, alw);
connect(alw, SIGNAL(uiSliderChanged(int, Slider, int)), this, SIGNAL(uiSliderChanged(int, Slider, int)));
connect(alw, SIGNAL(uiPlaybackChanged(int, Status)), this, SIGNAL(uiPlaybackChanged(int, Status)));
connect(alw, SIGNAL(uiLoadMedia(int, QString)), this, SIGNAL(uiLoadMedia(int, QString)));
}
m_layout->setSpacing(0);
m_layout->setContentsMargins(1, 1, 1, 1);
@ -50,12 +51,3 @@ void AudioWidget::cursorChanged(int layer, float cursor)
AudioLayerWidget *alw = dynamic_cast<AudioLayerWidget *>(item->widget());
alw->refreshUi(cursor);
}
/*
void AudioWidget::uiSliderAction(int layer, Slider s, float value)
{
emit uiSliderChanged(layer, s, value);
}
void AudioWidget::uiChangePlaybackStatus(int layer, Status s) {
emit uiPlaybackChanged(layer, s);
}*/

View file

@ -21,14 +21,11 @@ public:
void playbackChanged(int layer, Status status);
void cursorChanged(int layer, float cursor);
QHBoxLayout *m_layout;
/*
public slots:
void uiSliderAction(int layer, Slider s, float value);
void uiChangePlaybackStatus(int layer, Status s);
*/
signals:
void uiPlaybackChanged(int layer, Status s);
void uiSliderChanged(int layer, Slider s, int vol);
void uiLoadMedia(int layer, QString s);
};
#endif // AUDIOWIDGET_H

13
src/clickablelabel.cpp Normal file
View file

@ -0,0 +1,13 @@
#include "clickablelabel.h"
ClickableLabel::ClickableLabel(QWidget *parent, Qt::WindowFlags f)
: QLabel{parent}
{
}
ClickableLabel::~ClickableLabel() {}
void ClickableLabel::mousePressEvent(QMouseEvent* event) {
emit clicked();
}

22
src/clickablelabel.h Normal file
View file

@ -0,0 +1,22 @@
#ifndef CLICKABLELABEL_H
#define CLICKABLELABEL_H
#include <QLabel>
#include <QWidget>
#include <Qt>
class ClickableLabel : public QLabel
{
Q_OBJECT
public:
explicit ClickableLabel(QWidget *parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags());
~ClickableLabel();
signals:
void clicked();
protected:
void mousePressEvent(QMouseEvent* event);
};
#endif // CLICKABLELABEL_H

View file

@ -3,10 +3,10 @@
#define VERSION "LibreMediaServerAudio 0.2.0 Antigona Release"
#define COPYRIGHT "(C) 2014-2024 Santi Noreña <lms@criptomart.net>"
#define LICENSE "GPL 3 Licensed. See LICENSE.txt.\nSound guys are not allowed to use this software."
#define LICENSE "GPL 3 Licensed. See LICENSE.txt."
#define DEFAULT_FILE "lms-audio.xlm"
#define MAX_LAYERS 16
#define UI_REFRESH_TIME 200
#define MAX_LAYERS 4
#define UI_REFRESH_TIME 1000
// struct where save the DMX settings for each layer
struct dmxSetting {

View file

@ -126,6 +126,7 @@ void libreMediaServerAudio::refreshUi() {
Status s = m_mae.getStatus(i);
if (s == Status::PlayingOnce || s == Status::PlayingLoop) {
m_lmsUi->m_aw->cursorChanged(i, m_mae.getCursor(i));
//m_lmsUi->m_aw->playbackChanged(i, s);
}
}
}
@ -136,6 +137,7 @@ void libreMediaServerAudio::setUi(libreMediaServerAudioUi *lmsUi)
connect(m_ola, SIGNAL(universeReceived(int)), m_lmsUi->m_dmxWidget, SLOT(updateWatchDMX(int)));
connect(m_lmsUi->m_aw, SIGNAL(uiSliderChanged(int, Slider, int)), this, SLOT(uiSliderChanged(int, Slider, int)));
connect(m_lmsUi->m_aw, SIGNAL(uiPlaybackChanged(int, Status)), this, SLOT(uiPlaybackChanged(int, Status)));
connect(m_lmsUi->m_aw, SIGNAL(uiLoadMedia(int, QString)), this, SLOT(uiLoadMedia(int, QString)));
};
void libreMediaServerAudio::uiSliderChanged(int layer, Slider s, int value)
@ -158,4 +160,8 @@ void libreMediaServerAudio::uiPlaybackChanged(int layer, Status s)
m_mae.playbackChanged(layer, s);
}
void libreMediaServerAudio::uiLoadMedia(int layer, QString s)
{
m_mae.loadMedia(layer, s.toLatin1().data());
}
#endif

View file

@ -56,6 +56,7 @@ private slots:
void refreshUi();
void uiSliderChanged(int layer, Slider s, int value);
void uiPlaybackChanged(int layer, Status s);
void uiLoadMedia(int layer, QString s);
#endif
};

View file

@ -122,6 +122,7 @@ ma_result MiniAudioEngine::loadMedia(int layer, char *file)
MA_SOUND_FLAG_NO_SPATIALIZATION \
/*| MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_DECODE \
| MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_ASYNC \
| MA_SOUND_FLAG_NO_PITCH \
| MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_STREAM \*/
, NULL, NULL, &m_currentSound[layer]);
if (result != MA_SUCCESS)
@ -249,6 +250,7 @@ void MiniAudioEngine::setCursor(int layer, int cursor)
ma_sound_get_length_in_pcm_frames(&m_currentSound[layer], &f);
f = (cursor * f) / 65025;
ma_sound_seek_to_pcm_frame(&m_currentSound[layer], f);
// ToDo: change the loop entry point too
}
Status MiniAudioEngine::getStatus(int layer)