123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- /*
- * EffectVis.h
- * -----------
- * Purpose: Implementation of parameter visualisation dialog.
- * Notes : (currently none)
- * Authors: 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 "EffectInfo.h"
- OPENMPT_NAMESPACE_BEGIN
- class CViewPattern;
- class CModDoc;
- class CSoundFile;
- #define FXVSTATUS_LDRAGGING 0x01
- #define FXVSTATUS_RDRAGGING 0x02
- // EffectVis dialog
- class CEffectVis : public CDialog
- {
- DECLARE_DYNAMIC(CEffectVis)
- public:
- enum EditAction
- {
- kAction_OverwriteFX,
- kAction_OverwriteFXWithNote,
- kAction_FillFX,
- kAction_OverwritePC,
- kAction_FillPC,
- kAction_Preserve
- };
- CEffectVis(CViewPattern *pViewPattern, ROWINDEX startRow, ROWINDEX endRow, CHANNELINDEX nchn, CModDoc &modDoc, PATTERNINDEX pat);
- void UpdateSelection(ROWINDEX startRow, ROWINDEX endRow, CHANNELINDEX nchn, PATTERNINDEX pat);
- void Update();
- void OpenEditor(CWnd *parent);
- void SetPlayCursor(PATTERNINDEX nPat, ROWINDEX nRow);
- void DoClose();
- afx_msg void OnSize(UINT nType, int cx, int cy);
- protected:
- void DoDataExchange(CDataExchange* pDX) override; // DDX/DDV support
- void PostNcDestroy() override;
- EffectInfo effectInfo;
- CBitmap m_bGrid, m_bNodes, m_bPlayPos;
- HBITMAP m_pbOldGrid = nullptr, m_pbOldNodes = nullptr, m_pbOldPlayPos = nullptr;
- CDC m_dcGrid, m_dcNodes, m_dcPlayPos;
- void DrawNodes();
- void DrawGrid();
- void ShowVis(CDC *pDC);
- void ShowVisImage(CDC *pDC);
- RECT invalidated;
- ROWINDEX m_nLastDrawnRow = ROWINDEX_INVALID; // for interpolation
- int m_nLastDrawnY = -1; // for interpolation
- int m_nRowToErase = -1;
- int m_nParamToErase = -1;
- int m_nodeSizeHalf; // Half width of a node;
- int m_marginBottom;
- int m_innerBorder;
- ROWINDEX m_nOldPlayPos = ROWINDEX_INVALID;
- ModCommand m_templatePCNote;
- protected:
- ROWINDEX m_startRow;
- ROWINDEX m_endRow;
- ROWINDEX m_nRows;
- CHANNELINDEX m_nChan;
- PATTERNINDEX m_nPattern;
- int m_nFillEffect;
- static EditAction m_nAction;
- int m_nDragItem = -1;
- UINT m_nBtnMouseOver;
- DWORD m_dwStatus = 0;
- float m_pixelsPerRow = 1, m_pixelsPerFXParam = 1, m_pixelsPerPCParam = 1;
- bool m_forceRedraw = true;
- void InvalidateRow(int row);
- int RowToScreenX(ROWINDEX row) const;
- int RowToScreenY(ROWINDEX row) const;
- int PCParamToScreenY(uint16 param) const;
- int FXParamToScreenY(uint16 param) const;
- uint16 GetParam(ROWINDEX row) const;
- EffectCommand GetCommand(ROWINDEX row) const;
- void SetParamFromY(ROWINDEX row, int y);
- void SetCommand(ROWINDEX row, EffectCommand cmd);
- ModCommand::PARAM ScreenYToFXParam(int y) const;
- uint16 ScreenYToPCParam(int y) const;
- ROWINDEX ScreenXToRow(int x) const;
- bool IsPcNote(ROWINDEX row) const;
- void SetPcNote(ROWINDEX row);
- CModDoc &m_ModDoc;
- CSoundFile &m_SndFile;
- CRect m_rcDraw;
- CRect m_rcFullWin;
- CComboBox m_cmbEffectList, m_cmbActionList;
- CEdit m_edVisStatus;
- void OnOK() override;
- void OnCancel() override;
- afx_msg void OnClose();
- CViewPattern *m_pViewPattern;
- DECLARE_MESSAGE_MAP()
- BOOL OnInitDialog() override;
- afx_msg void OnPaint();
- protected:
- afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
- afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
- afx_msg void OnMouseMove(UINT nFlags, CPoint point);
- afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
- afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
- afx_msg void OnEffectChanged();
- afx_msg void OnActionChanged();
- afx_msg BOOL OnEraseBkgnd(CDC *) { return TRUE; }
- void MakeChange(ROWINDEX currentRow, int newY);
- };
- OPENMPT_NAMESPACE_END
|