aluf/src/PlayerControls.h

140 lines
3.7 KiB
C++

// src/PlayerControls.h
#pragma once
#include "CommonWidgets.h"
#include "VisualizerWidget.h"
#include <QCheckBox>
#include <QComboBox>
#include <QLabel>
#include <QPushButton>
#include <QSlider>
#include <QWidget>
class PlaybackWidget : public QWidget {
Q_OBJECT
public:
PlaybackWidget(QWidget *parent = nullptr);
void setPlaying(bool playing);
void updateSeek(float pos);
signals:
void playClicked();
void pauseClicked();
void nextClicked();
void prevClicked();
void seekChanged(float pos);
void settingsClicked();
private slots:
void onSeekPressed();
void onSeekReleased();
void onPlayToggle();
private:
QSlider *m_seekSlider;
bool m_seeking = false;
bool m_isPlaying = false;
QPushButton *m_btnPlay;
};
class SettingsWidget : public QWidget {
Q_OBJECT
public:
SettingsWidget(QWidget *parent = nullptr);
bool isGlass() const { return m_checkGlass->isChecked(); }
bool isFocus() const { return m_checkFocus->isChecked(); }
bool isAlbumColors() const { return m_checkAlbumColors->isChecked(); }
bool isMirrored() const { return m_checkMirrored->isChecked(); }
int getBins() const { return m_sliderBins->value(); }
int getFps() const { return m_sliderFps->value(); }
float getBrightness() const { return m_brightness; }
int getGranularity() const { return m_sliderGranularity->value(); }
int getDetail() const { return m_sliderDetail->value(); }
float getStrength() const { return m_strength; }
// Returns the multiplier (e.g., 1.0 for 1/4, 0.5 for 1/2)
float getBpmScale() const;
int getBpmScaleIndex() const;
void setParams(bool glass, bool focus, bool albumColors, bool mirrored,
int bins, int fps, float brightness, int granularity,
int detail, float strength, int bpmScaleIndex);
signals:
void paramsChanged(bool glass, bool focus, bool albumColors, bool mirrored,
float hue, float contrast, float brightness,
int granularity, int detail, float strength);
void fpsChanged(int fps);
void dspParamsChanged(int fft, int hop);
void binsChanged(int n);
void bpmScaleChanged(float scale);
void closeClicked();
private slots:
void emitParams();
void onDspPadChanged(float x, float y);
void onColorPadChanged(float x, float y);
void onBinsChanged(int val);
void onBrightnessChanged(int val);
void onSmoothingChanged(int val);
void onBpmScaleChanged(int index);
private:
QCheckBox *m_checkGlass;
QCheckBox *m_checkFocus;
QCheckBox *m_checkAlbumColors;
QCheckBox *m_checkMirrored;
XYPad *m_padDsp;
XYPad *m_padColor;
QSlider *m_sliderBins;
QLabel *m_lblBins;
QSlider *m_sliderFps;
QLabel *m_lblFps;
QSlider *m_sliderBrightness;
QLabel *m_lblBrightness;
QSlider *m_sliderGranularity;
QLabel *m_lblGranularity;
QSlider *m_sliderDetail;
QLabel *m_lblDetail;
QSlider *m_sliderStrength;
QLabel *m_lblStrength;
QComboBox *m_comboBpmScale;
float m_hue = 0.9f;
float m_contrast = 1.0f;
float m_brightness = 1.0f;
int m_granularity = 33;
int m_detail = 50;
float m_strength = 0.0f;
int m_fft = 4096;
int m_hop = 1024;
int m_bins = 26;
};
class PlayerPage : public QWidget {
Q_OBJECT
public:
PlayerPage(QWidget *parent = nullptr);
VisualizerWidget *visualizer() { return m_visualizer; }
PlaybackWidget *playback() { return m_playback; }
SettingsWidget *settings() { return m_settings; }
void setFullScreen(bool fs);
signals:
void toggleFullScreen();
protected:
void resizeEvent(QResizeEvent *event) override;
private slots:
void toggleOverlay();
void closeOverlay();
private:
VisualizerWidget *m_visualizer;
PlaybackWidget *m_playback;
SettingsWidget *m_settings;
OverlayWidget *m_overlay;
};