winamp/Src/external_dependencies/openmpt-trunk/mptrack/Ctrl_gen.h
2024-09-24 14:54:57 +02:00

119 lines
3.4 KiB
C++

/*
* ctrl_gen.h
* ----------
* Purpose: General tab, upper panel.
* Notes : (currently none)
* Authors: Olivier Lapicque
* OpenMPT Devs
* The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
*/
#pragma once
#include "openmpt/all/BuildSettings.hpp"
#include "CDecimalSupport.h"
OPENMPT_NAMESPACE_BEGIN
namespace Util { class MultimediaClock; }
class CVuMeter final : public CWnd
{
protected:
int m_lastDisplayedLevel = -1, m_lastLevel = 0;
DWORD m_lastVuUpdateTime;
public:
CVuMeter() { m_lastVuUpdateTime = timeGetTime(); }
void SetVuMeter(int level, bool force = false);
protected:
void DrawVuMeter(CDC &dc, bool redraw = false);
protected:
afx_msg void OnPaint();
DECLARE_MESSAGE_MAP();
};
class CCtrlGeneral final : public CModControlDlg
{
public:
CCtrlGeneral(CModControlView &parent, CModDoc &document);
Setting<LONG> &GetSplitPosRef() override { return TrackerSettings::Instance().glGeneralWindowHeight; }
private:
// Determine how the global volume slider should be scaled to actual global volume.
// Display range for XM / S3M should be 0...64, for other formats it's 0...256.
uint32 GetGlobalVolumeFactor() const
{
return (m_sndFile.GetType() & (MOD_TYPE_XM | MOD_TYPE_S3M)) ? uint32(MAX_SLIDER_GLOBAL_VOL / 64) : uint32(MAX_SLIDER_GLOBAL_VOL / 128);
}
public:
CEdit m_EditTitle, m_EditArtist;
CEdit m_EditSpeed, m_EditGlobalVol, m_EditRestartPos,
m_EditSamplePA, m_EditVSTiVol;
CNumberEdit m_EditTempo;
CButton m_BtnModType;
CSpinButtonCtrl m_SpinTempo, m_SpinSpeed, m_SpinGlobalVol, m_SpinRestartPos,
m_SpinSamplePA, m_SpinVSTiVol;
CComboBox m_CbnResampling;
CSliderCtrl m_SliderTempo, m_SliderSamplePreAmp, m_SliderGlobalVol, m_SliderVSTiVol;
CVuMeter m_VuMeterLeft, m_VuMeterRight;
std::unique_ptr<Util::MultimediaClock> m_tapTimer;
bool m_editsLocked = false;
TEMPO m_tempoMin, m_tempoMax;
//{{AFX_VIRTUAL(CCtrlGeneral)
BOOL OnInitDialog() override;
void DoDataExchange(CDataExchange *pDX) override; // DDX/DDV support
void RecalcLayout() override;
void UpdateView(UpdateHint hint, CObject *pObj = nullptr) override;
CRuntimeClass *GetAssociatedViewClass() override;
void OnActivatePage(LPARAM) override;
void OnDeactivatePage() override;
BOOL GetToolTipText(UINT uId, LPTSTR pszText) override;
//}}AFX_VIRTUAL
protected:
static constexpr int MAX_SLIDER_GLOBAL_VOL = 256;
static constexpr int MAX_SLIDER_VSTI_VOL = 255;
static constexpr int MAX_SLIDER_SAMPLE_VOL = 255;
// At this point, the tempo slider moves in more coarse steps to provide detailed values in the regions where it matters
static constexpr auto TEMPO_SPLIT_THRESHOLD = TEMPO(256, 0);
static constexpr int TEMPO_SPLIT_PRECISION = 3;
TEMPO TempoSliderRange() const;
TEMPO SliderToTempo(int value) const;
int TempoToSlider(TEMPO tempo) const;
//{{AFX_MSG(CCtrlGeneral)
afx_msg LRESULT OnUpdatePosition(WPARAM, LPARAM);
afx_msg void OnVScroll(UINT, UINT, CScrollBar *);
afx_msg void OnTapTempo();
afx_msg void OnTitleChanged();
afx_msg void OnArtistChanged();
afx_msg void OnTempoChanged();
afx_msg void OnSpeedChanged();
afx_msg void OnGlobalVolChanged();
afx_msg void OnVSTiVolChanged();
afx_msg void OnSamplePAChanged();
afx_msg void OnRestartPosChanged();
afx_msg void OnRestartPosDone();
afx_msg void OnSongProperties();
afx_msg void OnLoopSongChanged();
afx_msg void OnEnSetfocusEditSongtitle();
afx_msg void OnResamplingChanged();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
OPENMPT_NAMESPACE_END