winamp/Src/external_dependencies/openmpt-trunk/mptrack/Mainbar.h
2024-09-24 14:54:57 +02:00

198 lines
5.0 KiB
C++

/*
* Mainbar.h
* ---------
* Purpose: Implementation of OpenMPT's window toolbar.
* 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 "UpdateToolTip.h"
OPENMPT_NAMESPACE_BEGIN
class CStereoVU: public CStatic
{
protected:
uint8 numChannels;
uint32 vuMeter[4];
DWORD lastVuUpdateTime;
int lastV[4];
bool lastClip[4];
bool horizontal;
bool allowRightToLeft;
public:
CStereoVU() { numChannels = 2; MemsetZero(vuMeter); lastVuUpdateTime = timeGetTime(); horizontal = true; MemsetZero(lastV); MemsetZero(lastClip); allowRightToLeft = false; }
void SetVuMeter(uint8 validChannels, const uint32 channels[4], bool force=false);
void SetOrientation(bool h) { horizontal = h; }
protected:
void DrawVuMeters(CDC &dc, bool redraw=false);
void DrawVuMeter(CDC &dc, const CRect &rect, int index, bool redraw=false);
protected:
afx_msg void OnPaint();
afx_msg void OnLButtonDown(UINT, CPoint);
DECLARE_MESSAGE_MAP();
};
#define MIN_BASEOCTAVE 0
#define MAX_BASEOCTAVE 8
class CSoundFile;
class CModDoc;
class CModTree;
class CMainFrame;
class CToolBarEx: public CToolBar
{
protected:
bool m_bVertical = false, m_bFlatButtons = false;
public:
CToolBarEx() {}
~CToolBarEx() override {}
public:
BOOL EnableControl(CWnd &wnd, UINT nIndex, UINT nHeight=0);
void ChangeCtrlStyle(LONG lStyle, BOOL bSetStyle);
void EnableFlatButtons(BOOL bFlat);
public:
//{{AFX_VIRTUAL(CToolBarEx)
CSize CalcDynamicLayout(int nLength, DWORD dwMode) override;
virtual void SetHorizontal();
virtual void SetVertical();
//}}AFX_VIRTUAL
};
class CMainToolBar: public CToolBarEx
{
protected:
UpdateToolTip m_tooltip;
CImageListEx m_ImageList, m_ImageListDisabled;
CStatic m_EditTempo, m_EditSpeed, m_EditOctave, m_EditRowsPerBeat;
CStatic m_StaticTempo, m_StaticSpeed, m_StaticRowsPerBeat;
CSpinButtonCtrl m_SpinTempo, m_SpinSpeed, m_SpinOctave, m_SpinRowsPerBeat;
int nCurrentSpeed, nCurrentOctave, nCurrentRowsPerBeat;
TEMPO nCurrentTempo;
public:
CStereoVU m_VuMeter;
public:
CMainToolBar() {}
~CMainToolBar() override {}
protected:
void SetRowsPerBeat(ROWINDEX nNewRPB);
public:
//{{AFX_VIRTUAL(CMainToolBar)
void SetHorizontal() override;
void SetVertical() override;
//}}AFX_VIRTUAL
public:
#if MPT_COMPILER_CLANG
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Woverloaded-virtual"
#endif // MPT_COMPILER_CLANG
BOOL Create(CWnd *parent);
#if MPT_COMPILER_CLANG
#pragma clang diagnostic pop
#endif // MPT_COMPILER_CLANG
void Init(CMainFrame *);
UINT GetBaseOctave() const;
BOOL SetBaseOctave(UINT nOctave);
BOOL SetCurrentSong(CSoundFile *pModDoc);
bool ShowUpdateInfo(const CString &newVersion, const CString &infoURL, bool showHighLight);
void RemoveUpdateInfo();
protected:
//{{AFX_MSG(CMainToolBar)
afx_msg void OnVScroll(UINT, UINT, CScrollBar *);
afx_msg void OnTbnDropDownToolBar(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg BOOL OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnSelectMIDIDevice(UINT id);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
class CModTreeBar: public CDialogBar
{
protected:
enum Status
{
MTB_VERTICAL = 0x01,
MTB_CAPTURE = 0x02,
MTB_DRAGGING = 0x04,
MTB_TRACKER = 0x08,
};
DWORD m_dwStatus = 0; // MTB_XXXX
UINT m_nCursorDrag = 0;
CPoint ptDragging;
UINT m_cxOriginal = 0, m_cyOriginal = 0, m_nTrackPos = 0;
UINT m_nTreeSplitRatio = 0;
public:
CModTree *m_pModTree = nullptr, *m_pModTreeData = nullptr;
CModTreeBar();
~CModTreeBar() override;
public:
void Init();
void RecalcLayout();
void DoMouseMove(CPoint point);
void DoLButtonDown(CPoint point);
void DoLButtonUp();
void CancelTracking();
void OnInvertTracker(UINT x);
void RefreshDlsBanks();
void RefreshMidiLibrary();
void OnOptionsChanged();
void OnDocumentCreated(CModDoc *pModDoc);
void OnDocumentClosed(CModDoc *pModDoc);
void OnUpdate(CModDoc *pModDoc, UpdateHint hint, CObject *pHint = nullptr);
void UpdatePlayPos(CModDoc *pModDoc, Notification *pNotify);
HWND GetModTreeHWND(); //rewbs.customKeys
LRESULT SendMessageToModTree(UINT cmdID, WPARAM wParam, LPARAM lParam);
bool SetTreeSoundfile(FileReader &file);
protected:
//{{AFX_VIRTUAL(CModTreeBar)
CSize CalcFixedLayout(BOOL bStretch, BOOL bHorz) override;
//}}AFX_VIRTUAL
protected:
//{{AFX_MSG(CModTreeBar)
afx_msg void OnNcPaint();
afx_msg LRESULT OnNcHitTest(CPoint point);
afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS* lpncsp);
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnNcMouseMove(UINT nHitTest, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnNcLButtonDown(UINT, CPoint);
afx_msg void OnLButtonDown(UINT, CPoint);
afx_msg void OnNcLButtonUp(UINT, CPoint);
afx_msg void OnLButtonUp(UINT, CPoint);
afx_msg void OnNcRButtonDown(UINT, CPoint) { CancelTracking(); }
afx_msg void OnRButtonDown(UINT, CPoint) { CancelTracking(); }
afx_msg LRESULT OnInitDialog(WPARAM, LPARAM);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
OPENMPT_NAMESPACE_END