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