146 lines
3.5 KiB
C++
146 lines
3.5 KiB
C++
/*
|
|
* 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
|