123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278 |
- /*
- * SampleEditorDialogs.h
- * ---------------------
- * Purpose: Code for various dialogs that are used in the sample editor.
- * 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 "../common/FileReaderFwd.h"
- #include "../soundlib/SampleIO.h"
- #include "../tracklib/FadeLaws.h"
- #include "CDecimalSupport.h"
- OPENMPT_NAMESPACE_BEGIN
- //////////////////////////////////////////////////////////////////////////
- // Sample amplification dialog
- class CAmpDlg: public CDialog
- {
- public:
- struct AmpSettings
- {
- Fade::Law fadeLaw;
- int fadeInStart, fadeOutEnd;
- int16 factor;
- bool fadeIn, fadeOut;
- };
- AmpSettings &m_settings;
- int16 m_nFactorMin, m_nFactorMax;
- protected:
- CComboBoxEx m_fadeBox;
- CImageList m_list;
- CNumberEdit m_edit, m_editFadeIn, m_editFadeOut;
- bool m_locked = true;
- public:
- CAmpDlg(CWnd *parent, AmpSettings &settings, int16 factorMin = int16_min, int16 factorMax = int16_max);
- protected:
- void DoDataExchange(CDataExchange* pDX) override;
- BOOL OnInitDialog() override;
- void OnOK() override;
- void OnDestroy();
- afx_msg void EnableFadeIn() { if(!m_locked) CheckDlgButton(IDC_CHECK1, BST_CHECKED); }
- afx_msg void EnableFadeOut() { if(!m_locked) CheckDlgButton(IDC_CHECK2, BST_CHECKED); }
- DECLARE_MESSAGE_MAP()
- };
- //////////////////////////////////////////////////////////////////////////
- // Sample import dialog
- class CRawSampleDlg: public CDialog
- {
- friend class AutodetectFormatDlg;
- protected:
- static SampleIO m_format;
- static SmpLength m_offset;
- CSpinButtonCtrl m_SpinOffset;
- FileReader &m_file;
- bool m_rememberFormat = false;
- public:
- SampleIO GetSampleFormat() const { return m_format; }
- void SetSampleFormat(SampleIO nFormat) { m_format = nFormat; }
- bool GetRemeberFormat() const { return m_rememberFormat; };
- void SetRememberFormat(bool remember) { m_rememberFormat = remember; };
- SmpLength GetOffset() const { return m_offset; }
- void SetOffset(SmpLength offset) { m_offset = offset; }
- public:
- CRawSampleDlg(FileReader &file, CWnd *parent = nullptr)
- : CDialog(IDD_LOADRAWSAMPLE, parent)
- , m_file(file) {}
- protected:
- void DoDataExchange(CDataExchange *pDX) override;
- BOOL OnInitDialog() override;
- void OnOK() override;
- void UpdateDialog();
- void OnBitDepthChanged(UINT id);
- void OnEncodingChanged(UINT id);
- void OnAutodetectFormat();
- DECLARE_MESSAGE_MAP()
- };
- /////////////////////////////////////////////////////////////////////////
- // Add silence dialog - add silence to a sample
- class AddSilenceDlg: public CDialog
- {
- public:
- enum AddSilenceOptions
- {
- kSilenceAtBeginning, // Add at beginning of sample
- kSilenceAtEnd, // Add at end of sample
- kResize, // Resize sample
- kOPLInstrument, // Initialize as OPL instrument
- };
- enum Unit
- {
- kSamples = 0,
- kMilliseconds,
- };
- SmpLength m_numSamples; // Add x samples (also containes the return value in all cases)
- SmpLength m_length; // Set size to x samples (init value: current sample size)
- AddSilenceOptions m_editOption; // See above
- protected:
- static SmpLength m_addSamples;
- static SmpLength m_createSamples;
- uint32 m_sampleRate;
- Unit m_unit = kSamples;
- bool m_allowOPL;
- public:
- AddSilenceDlg(CWnd *parent, SmpLength origLength, uint32 sampleRate, bool allowOPL);
- BOOL OnInitDialog() override;
- void OnOK() override;
-
- protected:
- AddSilenceOptions GetEditMode() const;
- afx_msg void OnEditModeChanged();
- afx_msg void OnUnitChanged();
- DECLARE_MESSAGE_MAP()
- };
- /////////////////////////////////////////////////////////////////////////
- // Sample grid dialog
- class CSampleGridDlg: public CDialog
- {
- public:
- SmpLength m_nSegments, m_nMaxSegments;
- protected:
- CEdit m_EditSegments;
- CSpinButtonCtrl m_SpinSegments;
- public:
- CSampleGridDlg(CWnd *parent, SmpLength nSegments, SmpLength nMaxSegments) : CDialog(IDD_SAMPLE_GRID_SIZE, parent) { m_nSegments = nSegments; m_nMaxSegments = nMaxSegments; };
- protected:
- void DoDataExchange(CDataExchange* pDX) override;
- BOOL OnInitDialog() override;
- void OnOK() override;
- };
- /////////////////////////////////////////////////////////////////////////
- // Sample cross-fade dialog
- class CSampleXFadeDlg: public CDialog
- {
- public:
- static uint32 m_fadeLength;
- static uint32 m_fadeLaw;
- static bool m_afterloopFade;
- static bool m_useSustainLoop;
- SmpLength m_loopLength = 0, m_maxLength = 0;
- protected:
- CSliderCtrl m_SliderLength, m_SliderFadeLaw;
- CEdit m_EditSamples;
- CSpinButtonCtrl m_SpinSamples;
- CButton m_RadioNormalLoop, m_RadioSustainLoop;
- ModSample &m_sample;
- bool m_editLocked = true;
- public:
- CSampleXFadeDlg(CWnd *parent, ModSample &sample)
- : CDialog(IDD_SAMPLE_XFADE, parent)
- , m_sample(sample) {}
- SmpLength PercentToSamples(uint32 percent) const { return Util::muldivr_unsigned(percent, m_loopLength, 100000); }
- uint32 SamplesToPercent(SmpLength samples) const { return Util::muldivr_unsigned(samples, 100000, m_loopLength); }
- protected:
- void DoDataExchange(CDataExchange* pDX) override;
- BOOL OnInitDialog() override;
- void OnOK() override;
- afx_msg void OnLoopTypeChanged();
- afx_msg void OnFadeLengthChanged();
- afx_msg void OnHScroll(UINT, UINT, CScrollBar *);
- afx_msg BOOL OnToolTipText(UINT, NMHDR *pNMHDR, LRESULT *pResult);
- DECLARE_MESSAGE_MAP()
- };
- /////////////////////////////////////////////////////////////////////////
- // Resampling dialog
- class CResamplingDlg: public CDialog
- {
- public:
- enum ResamplingOption
- {
- Upsample,
- Downsample,
- Custom
- };
- protected:
- ResamplingMode m_srcMode;
- uint32 m_frequency;
- bool m_resampleAll;
- static uint32 m_lastFrequency;
- static ResamplingOption m_lastChoice;
- static bool m_updatePatterns;
- public:
- CResamplingDlg(CWnd *parent, uint32 frequency, ResamplingMode srcMode, bool resampleAll) : CDialog(IDD_RESAMPLE, parent), m_srcMode(srcMode), m_frequency(frequency), m_resampleAll(resampleAll) { };
- uint32 GetFrequency() const { return m_frequency; }
- ResamplingMode GetFilter() const { return m_srcMode; }
- static ResamplingOption GetResamplingOption() { return m_lastChoice; }
- static bool UpdatePatternCommands() { return m_updatePatterns; }
- protected:
- BOOL OnInitDialog() override;
- void OnOK() override;
- afx_msg void OnFocusEdit() { CheckRadioButton(IDC_RADIO1, IDC_RADIO3, IDC_RADIO3); }
- DECLARE_MESSAGE_MAP()
- };
- /////////////////////////////////////////////////////////////////////////
- // Sample mix dialog
- class CMixSampleDlg: public CDialog
- {
- protected:
- // Dialog controls
- CEdit m_EditOffset;
- CNumberEdit m_EditVolOriginal, m_EditVolMix;
- CSpinButtonCtrl m_SpinOffset, m_SpinVolOriginal, m_SpinVolMix;
- public:
- static SmpLength sampleOffset;
- static int amplifyOriginal;
- static int amplifyMix;
- public:
- CMixSampleDlg(CWnd *parent);
- protected:
- void DoDataExchange(CDataExchange* pDX) override;
- BOOL OnInitDialog() override;
- void OnOK() override;
- };
- OPENMPT_NAMESPACE_END
|