aluf/src/PlayerControls.h

133 lines
3.9 KiB
C++

// src/PlayerControls.h
#pragma once
#include <QWidget>
#include <QSlider>
#include <QPushButton>
#include <QCheckBox>
#include <QLabel>
#include <QComboBox>
#include "VisualizerWidget.h"
#include "CommonWidgets.h"
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 isTrails() const { return m_checkTrails->isChecked(); }
bool isAlbumColors() const { return m_checkAlbumColors->isChecked(); }
bool isShadow() const { return m_checkShadow->isChecked(); }
bool isMirrored() const { return m_checkMirrored->isChecked(); }
int getBins() const { return m_sliderBins->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 trails, bool albumColors, bool shadow, bool mirrored, int bins, float brightness, int granularity, int detail, float strength, int bpmScaleIndex);
signals:
void paramsChanged(bool glass, bool focus, bool trails, bool albumColors, bool shadow, bool mirrored, float hue, float contrast, float brightness, int granularity, int detail, float strength);
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_checkTrails;
QCheckBox* m_checkAlbumColors;
QCheckBox* m_checkShadow;
QCheckBox* m_checkMirrored;
XYPad* m_padDsp;
XYPad* m_padColor;
QSlider* m_sliderBins;
QLabel* m_lblBins;
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;
};