123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- /*
- * ChannelManagerDlg.h
- * -------------------
- * Purpose: Dialog class for moving, removing, managing channels
- * 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 "PatternEditorDialogs.h"
- OPENMPT_NAMESPACE_BEGIN
- class CModDoc;
- class CChannelManagerDlg: public CDialog
- {
- enum Tab
- {
- kSoloMute = 0,
- kRecordSelect = 1,
- kPluginState = 2,
- kReorderRemove = 3,
- };
- public:
- static CChannelManagerDlg * sharedInstance() { return sharedInstance_; }
- static CChannelManagerDlg * sharedInstanceCreate();
- static void DestroySharedInstance() { delete sharedInstance_; sharedInstance_ = nullptr; }
- void SetDocument(CModDoc *modDoc);
- CModDoc *GetDocument() const { return m_ModDoc; }
- bool IsDisplayed() const;
- void Update(UpdateHint hint, CObject* pHint);
- void Show();
- void Hide();
- private:
- static CChannelManagerDlg *sharedInstance_;
- QuickChannelProperties m_quickChannelProperties;
- protected:
- enum ButtonAction : uint8
- {
- kUndetermined,
- kAction1,
- kAction2,
- };
- enum MouseButton : uint8
- {
- CM_BT_NONE,
- CM_BT_LEFT,
- CM_BT_RIGHT,
- };
- CChannelManagerDlg();
- ~CChannelManagerDlg();
- CHANNELINDEX memory[4][MAX_BASECHANNELS];
- std::array<CHANNELINDEX, MAX_BASECHANNELS> pattern;
- std::bitset<MAX_BASECHANNELS> removed;
- std::bitset<MAX_BASECHANNELS> select;
- std::bitset<MAX_BASECHANNELS> state;
- CRect move[MAX_BASECHANNELS];
- CRect m_drawableArea;
- CModDoc *m_ModDoc = nullptr;
- HBITMAP m_bkgnd = nullptr;
- Tab m_currentTab = kSoloMute;
- int m_downX = 0, m_downY = 0;
- int m_moveX = 0, m_moveY = 0;
- int m_buttonHeight = 0;
- ButtonAction m_buttonAction;
- bool m_leftButton = false;
- bool m_rightButton = false;
- bool m_moveRect = false;
- bool m_show = false;
- bool ButtonHit(CPoint point, CHANNELINDEX *id, CRect *invalidate) const;
- void MouseEvent(UINT nFlags, CPoint point, MouseButton button);
- void ResetState(bool bSelection = true, bool bMove = true, bool bButton = true, bool bInternal = true, bool bOrder = false);
- void ResizeWindow();
- //{{AFX_VIRTUAL(CChannelManagerDlg)
- BOOL OnInitDialog() override;
- //}}AFX_VIRTUAL
- //{{AFX_MSG(CChannelManagerDlg)
- afx_msg void OnApply();
- afx_msg void OnClose();
- afx_msg void OnSelectAll();
- afx_msg void OnInvert();
- afx_msg void OnAction1();
- afx_msg void OnAction2();
- afx_msg void OnStore();
- afx_msg void OnRestore();
- afx_msg void OnTabSelchange(NMHDR*, LRESULT* pResult);
- afx_msg void OnPaint();
- afx_msg void OnMouseMove(UINT nFlags,CPoint point);
- afx_msg void OnLButtonUp(UINT nFlags,CPoint point);
- afx_msg void OnLButtonDown(UINT nFlags,CPoint point);
- afx_msg void OnRButtonUp(UINT nFlags,CPoint point);
- afx_msg void OnRButtonDown(UINT nFlags,CPoint point);
- afx_msg void OnMButtonDown(UINT nFlags,CPoint point);
- afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
- afx_msg void OnRButtonDblClk(UINT nFlags, CPoint point);
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP();
- };
- OPENMPT_NAMESPACE_END
|