aboutsummaryrefslogtreecommitdiff
path: root/Src/external_dependencies/openmpt-trunk/mptrack/EffectVis.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/external_dependencies/openmpt-trunk/mptrack/EffectVis.h')
-rw-r--r--Src/external_dependencies/openmpt-trunk/mptrack/EffectVis.h145
1 files changed, 145 insertions, 0 deletions
diff --git a/Src/external_dependencies/openmpt-trunk/mptrack/EffectVis.h b/Src/external_dependencies/openmpt-trunk/mptrack/EffectVis.h
new file mode 100644
index 00000000..8ecad009
--- /dev/null
+++ b/Src/external_dependencies/openmpt-trunk/mptrack/EffectVis.h
@@ -0,0 +1,145 @@
+/*
+ * 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