123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- /*
- * PatternEditorDialogs.h
- * ----------------------
- * Purpose: Code for various dialogs that are used in the pattern 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 "dlg_misc.h" // for keyboard control
- #include "EffectInfo.h"
- #include "PatternCursor.h"
- #include "TrackerSettings.h"
- #include "ResizableDialog.h"
- #include "ColorPickerButton.h"
- OPENMPT_NAMESPACE_BEGIN
- class CModDoc;
- struct SplitKeyboardSettings;
- class CPatternPropertiesDlg: public CDialog
- {
- protected:
- CModDoc &modDoc;
- TempoSwing m_tempoSwing;
- PATTERNINDEX m_nPattern;
- public:
- CPatternPropertiesDlg(CModDoc &modParent, PATTERNINDEX nPat, CWnd *parent=NULL)
- : CDialog(IDD_PATTERN_PROPERTIES, parent)
- , modDoc(modParent)
- , m_nPattern(nPat)
- { }
- protected:
- BOOL OnInitDialog() override;
- void OnOK() override;
- afx_msg void OnHalfRowNumber();
- afx_msg void OnDoubleRowNumber();
- afx_msg void OnOverrideSignature();
- afx_msg void OnTempoSwing();
- DECLARE_MESSAGE_MAP()
- };
- //////////////////////////////////////////////////////////////////////////
- // Command Editing
- class CEditCommand: public CDialog
- {
- protected:
- CComboBox cbnNote, cbnInstr, cbnVolCmd, cbnCommand, cbnPlugParam;
- CSliderCtrl sldVolParam, sldParam;
- CSoundFile &sndFile;
- const CModSpecifications *oldSpecs = nullptr;
- ModCommand *m = nullptr;
- EffectInfo effectInfo;
- PATTERNINDEX editPattern = PATTERNINDEX_INVALID;
- CHANNELINDEX editChannel = CHANNELINDEX_INVALID;
- ROWINDEX editRow = ROWINDEX_INVALID;
- UINT xParam, xMultiplier;
- bool modified = false;
- public:
- CEditCommand(CSoundFile &sndFile);
- public:
- bool ShowEditWindow(PATTERNINDEX pat, const PatternCursor &cursor, CWnd *parent);
- protected:
- void InitAll() { InitNote(); InitVolume(); InitEffect(); InitPlugParam(); }
- void InitNote();
- void InitVolume();
- void InitEffect();
- void InitPlugParam();
- void UpdateVolCmdRange();
- void UpdateVolCmdValue();
- void UpdateEffectRange(bool set);
- void UpdateEffectValue(bool set);
- void PrepareUndo(const char *description);
- //{{AFX_VIRTUAL(CEditCommand)
- void DoDataExchange(CDataExchange *pDX) override;
- void OnOK() override { ShowWindow(SW_HIDE); }
- void OnCancel() override { ShowWindow(SW_HIDE); }
- BOOL PreTranslateMessage(MSG *pMsg) override;
- afx_msg void OnActivate(UINT nState, CWnd *pWndOther, BOOL bMinimized);
- afx_msg void OnClose() { ShowWindow(SW_HIDE); }
- afx_msg void OnNoteChanged();
- afx_msg void OnVolCmdChanged();
- afx_msg void OnCommandChanged();
- afx_msg void OnPlugParamChanged();
- afx_msg void OnHScroll(UINT, UINT, CScrollBar *);
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
- };
- /////////////////////////////////////////////////////////////////////////
- // Chord Editor
- class CChordEditor : public ResizableDialog
- {
- protected:
- CKeyboardControl m_Keyboard;
- CComboBox m_CbnShortcut, m_CbnBaseNote, m_CbnNote[MPTChord::notesPerChord - 1];
- MPTChords m_chords;
- MPTChord::NoteType m_mouseDownKey = MPTChord::noNote, m_dragKey = MPTChord::noNote;
-
- static constexpr MPTChord::NoteType CHORD_MIN = -24;
- static constexpr MPTChord::NoteType CHORD_MAX = 24;
- public:
- CChordEditor(CWnd *parent = nullptr);
- protected:
- MPTChord &GetChord();
- void DoDataExchange(CDataExchange* pDX) override;
- BOOL OnInitDialog() override;
- void OnOK() override;
- void UpdateKeyboard();
- afx_msg LRESULT OnKeyboardNotify(WPARAM, LPARAM);
- afx_msg void OnChordChanged();
- afx_msg void OnBaseNoteChanged();
- afx_msg void OnNote1Changed() { OnNoteChanged(0); }
- afx_msg void OnNote2Changed() { OnNoteChanged(1); }
- afx_msg void OnNote3Changed() { OnNoteChanged(2); }
- void OnNoteChanged(int noteIndex);
- DECLARE_MESSAGE_MAP()
- };
- /////////////////////////////////////////////////////////////////////////
- // Keyboard Split Settings (pattern editor)
- class CSplitKeyboardSettings : public CDialog
- {
- protected:
- CComboBox m_CbnSplitInstrument, m_CbnSplitNote, m_CbnOctaveModifier, m_CbnSplitVolume;
- CSoundFile &sndFile;
- public:
- SplitKeyboardSettings &m_Settings;
- CSplitKeyboardSettings(CWnd *parent, CSoundFile &sf, SplitKeyboardSettings &settings) : CDialog(IDD_KEYBOARD_SPLIT, parent), sndFile(sf), m_Settings(settings) { }
- protected:
- void DoDataExchange(CDataExchange* pDX) override;
- BOOL OnInitDialog() override;
- void OnOK() override;
- void OnCancel() override;
- afx_msg void OnOctaveModifierChanged();
- DECLARE_MESSAGE_MAP()
- };
- /////////////////////////////////////////////////////////////////////////
- // Show channel properties from pattern editor
- class QuickChannelProperties : public CDialog
- {
- protected:
- CModDoc *m_document = nullptr;
- CHANNELINDEX m_channel = 0;
- bool m_visible = false;
- bool m_settingsChanged = false;
- bool m_settingColor = false;
- ColorPickerButton m_colorBtn, m_colorBtnPrev, m_colorBtnNext;
- CSliderCtrl m_volSlider, m_panSlider;
- CSpinButtonCtrl m_volSpin, m_panSpin;
- CEdit m_nameEdit;
- public:
- QuickChannelProperties() = default;
- ~QuickChannelProperties();
- void Show(CModDoc *modDoc, CHANNELINDEX chn, CPoint position);
- void UpdateDisplay();
- CHANNELINDEX GetChannel() const { return m_channel; }
- protected:
- void DoDataExchange(CDataExchange *pDX) override;
- void PrepareUndo();
- void PickColorFromChannel(CHANNELINDEX channel);
- afx_msg void OnActivate(UINT nState, CWnd *, BOOL);
- afx_msg void OnVolChanged();
- afx_msg void OnPanChanged();
- afx_msg void OnHScroll(UINT, UINT, CScrollBar *);
- afx_msg void OnMuteChanged();
- afx_msg void OnSurroundChanged();
- afx_msg void OnNameChanged();
- afx_msg void OnPrevChannel();
- afx_msg void OnNextChannel();
- afx_msg void OnChangeColor();
- afx_msg void OnPickPrevColor();
- afx_msg void OnPickNextColor();
- afx_msg LRESULT OnCustomKeyMsg(WPARAM, LPARAM);
- afx_msg BOOL OnToolTipText(UINT, NMHDR *pNMHDR, LRESULT *pResult);
- BOOL PreTranslateMessage(MSG *pMsg);
- DECLARE_MESSAGE_MAP();
- };
- OPENMPT_NAMESPACE_END
|