/* * 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 &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 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