123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 |
- /*
- * Globals.h
- * ---------
- * Purpose: Implementation of various views of the tracker interface.
- * 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"
- OPENMPT_NAMESPACE_BEGIN
- #ifndef WM_HELPHITTEST
- #define WM_HELPHITTEST 0x366
- #endif
- #ifndef HID_BASE_COMMAND
- #define HID_BASE_COMMAND 0x10000
- #endif
- #define ID_EDIT_MIXPASTE ID_EDIT_PASTE_SPECIAL //rewbs.mixPaste
- class CModControlView;
- class CModControlBar;
- class CModDoc;
- class CModControlBar: public CToolBarCtrl
- {
- public:
- BOOL Init(CImageList &icons, CImageList &disabledIcons);
- void UpdateStyle();
- BOOL AddButton(UINT nID, int iImage=0, UINT nStyle=TBSTYLE_BUTTON, UINT nState=TBSTATE_ENABLED);
- afx_msg LRESULT OnHelpHitTest(WPARAM, LPARAM);
- DECLARE_MESSAGE_MAP()
- };
- class CModControlDlg: public CDialog
- {
- protected:
- CModDoc &m_modDoc;
- CSoundFile &m_sndFile;
- CModControlView &m_parent;
- HWND m_hWndView;
- LONG m_nLockCount;
- int m_nDPIx, m_nDPIy; // Cached DPI settings
- BOOL m_bInitialized;
- public:
- CModControlDlg(CModControlView &parent, CModDoc &document);
- virtual ~CModControlDlg();
-
- public:
- void SetViewWnd(HWND hwndView) { m_hWndView = hwndView; }
- HWND GetViewWnd() const { return m_hWndView; }
- LRESULT SendViewMessage(UINT uMsg, LPARAM lParam=0) const;
- BOOL PostViewMessage(UINT uMsg, LPARAM lParam=0) const;
- LRESULT SwitchToView() const { return SendViewMessage(VIEWMSG_SETACTIVE); }
- void LockControls() { m_nLockCount++; }
- void UnlockControls() { PostMessage(WM_MOD_UNLOCKCONTROLS); }
- bool IsLocked() const { return (m_nLockCount > 0); }
- virtual Setting<LONG> &GetSplitPosRef() = 0; //rewbs.varWindowSize
- afx_msg void OnEditCut() { if (m_hWndView) ::SendMessage(m_hWndView, WM_COMMAND, ID_EDIT_CUT, 0); }
- afx_msg void OnEditCopy() { if (m_hWndView) ::SendMessage(m_hWndView, WM_COMMAND, ID_EDIT_COPY, 0); }
- afx_msg void OnEditPaste() { if (m_hWndView) ::SendMessage(m_hWndView, WM_COMMAND, ID_EDIT_PASTE, 0); }
- afx_msg void OnEditMixPaste() { if (m_hWndView) ::SendMessage(m_hWndView, WM_COMMAND, ID_EDIT_MIXPASTE, 0); }
- afx_msg void OnEditMixPasteITStyle() { if (m_hWndView) ::SendMessage(m_hWndView, WM_COMMAND, ID_EDIT_MIXPASTE_ITSTYLE, 0); }
- afx_msg void OnEditPasteFlood() { if (m_hWndView) ::SendMessage(m_hWndView, WM_COMMAND, ID_EDIT_PASTEFLOOD, 0); }
- afx_msg void OnEditPushForwardPaste() { if (m_hWndView) ::SendMessage(m_hWndView, WM_COMMAND, ID_EDIT_PUSHFORWARDPASTE, 0); }
- afx_msg void OnEditFind() { if (m_hWndView) ::SendMessage(m_hWndView, WM_COMMAND, ID_EDIT_FIND, 0); }
- afx_msg void OnEditFindNext() { if (m_hWndView) ::SendMessage(m_hWndView, WM_COMMAND, ID_EDIT_FINDNEXT, 0); }
- afx_msg void OnSwitchToView() { if (m_hWndView) ::PostMessage(m_hWndView, WM_MOD_VIEWMSG, VIEWMSG_SETFOCUS, 0); }
- //{{AFX_VIRTUAL(CModControlDlg)
- void OnOK() override {}
- void OnCancel() override {}
- virtual void RecalcLayout() = 0;
- virtual void UpdateView(UpdateHint, CObject *) = 0;
- virtual CRuntimeClass *GetAssociatedViewClass() { return nullptr; }
- virtual LRESULT OnModCtrlMsg(WPARAM wParam, LPARAM lParam);
- virtual void OnActivatePage(LPARAM) {}
- virtual void OnDeactivatePage() {}
- BOOL OnInitDialog() override;
- INT_PTR OnToolHitTest(CPoint point, TOOLINFO *pTI) const override;
- virtual BOOL GetToolTipText(UINT, LPTSTR) { return FALSE; }
- //}}AFX_VIRTUAL
- //{{AFX_MSG(CModControlDlg)
- afx_msg void OnSize(UINT nType, int cx, int cy);
- afx_msg LRESULT OnUnlockControls(WPARAM, LPARAM) { if (m_nLockCount > 0) m_nLockCount--; return 0; }
- afx_msg BOOL OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult);
- afx_msg LRESULT OnDPIChanged(WPARAM = 0, LPARAM = 0);
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
- };
- class CModTabCtrl: public CTabCtrl
- {
- public:
- BOOL InsertItem(int nIndex, LPCTSTR pszText, LPARAM lParam=0, int iImage=-1);
- BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID);
- LPARAM GetItemData(int nIndex);
- };
- class CModControlView: public CView
- {
- public:
- enum Views
- {
- VIEW_UNKNOWN = -1,
- VIEW_GLOBALS = 0,
- VIEW_PATTERNS,
- VIEW_SAMPLES,
- VIEW_INSTRUMENTS,
- VIEW_COMMENTS,
- VIEW_PLUGINS,
- MAX_PAGES
- };
- protected:
- CModTabCtrl m_TabCtrl;
- CModControlDlg *m_Pages[MAX_PAGES];
- int m_nActiveDlg, m_nInstrumentChanged;
- HWND m_hWndView, m_hWndMDI;
- protected: // create from serialization only
- CModControlView();
- DECLARE_DYNCREATE(CModControlView)
- public:
- virtual ~CModControlView() {}
- CModDoc* GetDocument() const { return (CModDoc *)m_pDocument; }
- void SampleChanged(SAMPLEINDEX smp);
- void InstrumentChanged(int nInstr=-1) { m_nInstrumentChanged = nInstr; }
- int GetInstrumentChange() const { return m_nInstrumentChanged; }
- void SetMDIParentFrame(HWND hwnd) { m_hWndMDI = hwnd; }
- void ForceRefresh();
- CModControlDlg *GetCurrentControlDlg() { return m_Pages[m_nActiveDlg]; }
- protected:
- void RecalcLayout();
- void UpdateView(UpdateHint hint, CObject *pHint = nullptr);
- BOOL SetActivePage(int nIndex = -1, LPARAM lParam=-1);
- public:
- int GetActivePage() const { return m_nActiveDlg; }
- protected:
- //{{AFX_VIRTUAL(CModControlView)
- public:
- BOOL PreCreateWindow(CREATESTRUCT& cs) override;
- protected:
- void OnInitialUpdate() override; // called first time after construct
- void OnDraw(CDC *) override {}
- void OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) override;
- //}}AFX_VIRTUAL
- protected:
- //{{AFX_MSG(CModControlView)
- afx_msg void OnSize(UINT nType, int cx, int cy);
- afx_msg void OnDestroy();
- afx_msg void OnTabSelchange(NMHDR* pNMHDR, LRESULT* pResult);
- afx_msg void OnEditCut() { if (m_hWndView) ::SendMessage(m_hWndView, WM_COMMAND, ID_EDIT_CUT, 0); }
- afx_msg void OnEditCopy() { if (m_hWndView) ::SendMessage(m_hWndView, WM_COMMAND, ID_EDIT_COPY, 0); }
- afx_msg void OnEditPaste() { if (m_hWndView) ::SendMessage(m_hWndView, WM_COMMAND, ID_EDIT_PASTE, 0); }
- afx_msg void OnEditMixPaste() { if (m_hWndView) ::SendMessage(m_hWndView, WM_COMMAND, ID_EDIT_MIXPASTE, 0); } //rewbs.mixPaste
- afx_msg void OnEditMixPasteITStyle() { if (m_hWndView) ::SendMessage(m_hWndView, WM_COMMAND, ID_EDIT_MIXPASTE_ITSTYLE, 0); }
- afx_msg void OnEditFind() { if (m_hWndView) ::SendMessage(m_hWndView, WM_COMMAND, ID_EDIT_FIND, 0); }
- afx_msg void OnEditFindNext() { if (m_hWndView) ::SendMessage(m_hWndView, WM_COMMAND, ID_EDIT_FINDNEXT, 0); }
- afx_msg void OnSwitchToView() { if (m_hWndView) ::PostMessage(m_hWndView, WM_MOD_VIEWMSG, VIEWMSG_SETFOCUS, 0); }
- afx_msg LRESULT OnActivateModView(WPARAM, LPARAM);
- afx_msg LRESULT OnModCtrlMsg(WPARAM wParam, LPARAM lParam);
- afx_msg LRESULT OnGetToolTipText(WPARAM, LPARAM);
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
- };
- // Non-client button attributes
- #define NCBTNS_MOUSEOVER 0x01
- #define NCBTNS_CHECKED 0x02
- #define NCBTNS_DISABLED 0x04
- #define NCBTNS_PUSHED 0x08
- class CModScrollView: public CScrollView
- {
- protected:
- HWND m_hWndCtrl;
- int m_nScrollPosX, m_nScrollPosY;
- int m_nDPIx, m_nDPIy; // Cached DPI settings
- public:
- DECLARE_SERIAL(CModScrollView)
- CModScrollView() : m_hWndCtrl(nullptr), m_nScrollPosX(0), m_nScrollPosY(0) { }
- virtual ~CModScrollView() {}
- public:
- CModDoc* GetDocument() const { return (CModDoc *)m_pDocument; }
- LRESULT SendCtrlMessage(UINT uMsg, LPARAM lParam=0) const;
- void SendCtrlCommand(int id) const;
- BOOL PostCtrlMessage(UINT uMsg, LPARAM lParam=0) const;
- void UpdateIndicator(LPCTSTR lpszText = nullptr);
- public:
- //{{AFX_VIRTUAL(CModScrollView)
- void OnInitialUpdate() override;
- void OnDraw(CDC *) override {}
- void OnPrepareDC(CDC*, CPrintInfo*) override {}
- void OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) override;
- virtual void UpdateView(UpdateHint, CObject *) {}
- virtual LRESULT OnModViewMsg(WPARAM wParam, LPARAM lParam);
- virtual BOOL OnDragonDrop(BOOL, const DRAGONDROP *) { return FALSE; }
- virtual LRESULT OnPlayerNotify(Notification *) { return 0; }
- //}}AFX_VIRTUAL
- CModControlDlg *GetControlDlg() { return static_cast<CModControlView *>(CWnd::FromHandle(m_hWndCtrl))->GetCurrentControlDlg(); }
- protected:
- //{{AFX_MSG(CModScrollView)
- afx_msg void OnDestroy();
- afx_msg LRESULT OnReceiveModViewMsg(WPARAM wParam, LPARAM lParam);
- afx_msg BOOL OnMouseWheel(UINT fFlags, short zDelta, CPoint point);
- afx_msg void OnMouseHWheel(UINT fFlags, short zDelta, CPoint point);
- afx_msg LRESULT OnDragonDropping(WPARAM bDoDrop, LPARAM lParam) { return OnDragonDrop((BOOL)bDoDrop, (const DRAGONDROP *)lParam); }
- afx_msg LRESULT OnUpdatePosition(WPARAM, LPARAM);
- afx_msg LRESULT OnDPIChanged(WPARAM = 0, LPARAM = 0);
- // Fixes for 16-bit limitation in MFC's CScrollView
- BOOL OnScroll(UINT nScrollCode, UINT nPos, BOOL bDoScroll = TRUE) override;
- BOOL OnScrollBy(CSize sizeScroll, BOOL bDoScroll = TRUE) override;
- int SetScrollPos(int nBar, int nPos, BOOL bRedraw = TRUE);
- void SetScrollSizes(int nMapMode, SIZE sizeTotal, const SIZE& sizePage = CScrollView::sizeDefault, const SIZE& sizeLine = CScrollView::sizeDefault);
- BOOL OnGesturePan(CPoint ptFrom, CPoint ptTo) override;
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
- };
- /////////////////////////////////////////////////////////////////////////////
- //{{AFX_INSERT_LOCATION}}
- // Microsoft Developer Studio will insert additional declarations immediately before the previous line.
- OPENMPT_NAMESPACE_END
|