133 lines
3.9 KiB
C++
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;
|
|
}; |