87 lines
1.7 KiB
C++
87 lines
1.7 KiB
C++
#pragma once
|
|
|
|
#include <QWidget>
|
|
|
|
class QDoubleSpinBox;
|
|
class QSlider;
|
|
class QSpinBox;
|
|
|
|
namespace gui {
|
|
|
|
class Float01ParamControl final : public QWidget {
|
|
Q_OBJECT
|
|
public:
|
|
explicit Float01ParamControl(QWidget* parent = nullptr);
|
|
|
|
void setValue01(double v);
|
|
double value01() const;
|
|
|
|
void setEnabled(bool on);
|
|
|
|
signals:
|
|
void valueChanged01(double v);
|
|
|
|
private:
|
|
void syncFromSlider();
|
|
void syncFromSpin();
|
|
|
|
QSlider* m_slider = nullptr;
|
|
QDoubleSpinBox* m_spin = nullptr;
|
|
bool m_block = false;
|
|
};
|
|
|
|
class Vec2ParamControl final : public QWidget {
|
|
Q_OBJECT
|
|
public:
|
|
explicit Vec2ParamControl(QWidget* parent = nullptr);
|
|
|
|
void setValue(int x, int y);
|
|
[[nodiscard]] int x() const;
|
|
[[nodiscard]] int y() const;
|
|
|
|
[[nodiscard]] bool isActivelyEditing() const;
|
|
|
|
void setEnabled(bool on);
|
|
|
|
signals:
|
|
void valueChanged(int x, int y);
|
|
|
|
private:
|
|
void emitIfChanged();
|
|
|
|
QSpinBox* m_sx = nullptr;
|
|
QSpinBox* m_sy = nullptr;
|
|
bool m_block = false;
|
|
int m_lastX = 0;
|
|
int m_lastY = 0;
|
|
};
|
|
|
|
/// 世界坐标等:可直接键盘输入小数,带宽幅
|
|
class Vec2DoubleParamControl final : public QWidget {
|
|
Q_OBJECT
|
|
public:
|
|
explicit Vec2DoubleParamControl(QWidget* parent = nullptr);
|
|
|
|
void setValue(double x, double y);
|
|
[[nodiscard]] double x() const;
|
|
[[nodiscard]] double y() const;
|
|
|
|
[[nodiscard]] bool isActivelyEditing() const;
|
|
|
|
void setEnabled(bool on);
|
|
|
|
signals:
|
|
void valueChanged(double x, double y);
|
|
|
|
private:
|
|
void emitIfChanged();
|
|
|
|
QDoubleSpinBox* m_sx = nullptr;
|
|
QDoubleSpinBox* m_sy = nullptr;
|
|
bool m_block = false;
|
|
double m_lastX = 0.0;
|
|
double m_lastY = 0.0;
|
|
};
|
|
|
|
} // namespace gui
|