198 lines
5.0 KiB
C++
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
|