Initial commit
This commit is contained in:
@@ -0,0 +1,326 @@
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
#ifndef ContentPanelUnitH
|
||||
#define ContentPanelUnitH
|
||||
|
||||
#include "SkinScrollBarUnit.h"
|
||||
#include "ToolpalPanel.h"
|
||||
#include "StyleItem.h"
|
||||
#include "MenuUnit.h"
|
||||
#include "BaseTrack.h"
|
||||
|
||||
#define BAR_CURSOR 0x00
|
||||
#define BAR_TITLE 0x100
|
||||
#define BAR_DATA 0x200
|
||||
#define BAR_TRACK 0x400
|
||||
#define BAR_LEFT 0x1000
|
||||
#define MIN_HDR_WIDTH 120
|
||||
#define MAX_HDR_WIDTH 240
|
||||
|
||||
typedef struct tagShowTrack
|
||||
{
|
||||
BYTE type;
|
||||
BYTE index;
|
||||
BYTE iHover;
|
||||
TBaseTrack* pTrack;
|
||||
|
||||
tagShowTrack( BYTE ty, BYTE ind, TBaseTrack* p )
|
||||
{
|
||||
type = ty;
|
||||
index = ind;
|
||||
iHover = 0;
|
||||
pTrack = p;
|
||||
};
|
||||
}TShowTrack, *PTShowTrack;
|
||||
|
||||
typedef vector<TShowTrack*> TShowTrackList;
|
||||
//---------------------------------------------------------------------------
|
||||
class TContentPanel : public Extctrls::TPanel
|
||||
{
|
||||
private:
|
||||
//显示相关
|
||||
HRGN m_rgnClip;
|
||||
bool m_bVertical; //竖版/横版
|
||||
|
||||
int m_iMode, //0=音频模式 1=和弦模式 2=风格模式
|
||||
m_nRowShow,
|
||||
m_nTrackShow,
|
||||
m_nColumnNum,
|
||||
m_nRowNum,
|
||||
m_nBarNum,
|
||||
m_iBeginShowRow,
|
||||
m_iBeginShowBar,
|
||||
m_iBeginShowTrack,
|
||||
|
||||
m_nBarWidth,
|
||||
m_nBarHeight,
|
||||
m_nDataWidth,
|
||||
m_nBarDrawHeight,
|
||||
m_nRowGapHeight, //播放区
|
||||
m_nTitleHeight, //小节区
|
||||
m_nChordHeight, //和弦区
|
||||
m_nTrackHeight, //轨道区
|
||||
m_nTrkHdrWidth, //轨道头宽度
|
||||
|
||||
m_nLeftBound,
|
||||
m_nLeftOriBound,
|
||||
m_nRightBound,
|
||||
m_nTopBound,
|
||||
m_nBottomBound;
|
||||
|
||||
TShowTrackList m_aTracks; //显示的轨道
|
||||
|
||||
TSkinScrollBar *m_sbVert,
|
||||
*m_sbHoriz;
|
||||
TToolpalPanel *m_pStylePanel, //风格面板
|
||||
*m_pChordPanel, //和弦面板
|
||||
*m_pTrackPanel; //轨道面板
|
||||
|
||||
//选择相关
|
||||
int m_iSelBarStart,
|
||||
m_iSelBarEnd,
|
||||
m_iSelPointStart,
|
||||
m_iSelPointEnd,
|
||||
m_iSelTrackBar,
|
||||
m_iSelTrackPoint,
|
||||
m_iSelTrack;
|
||||
|
||||
//录音/播放相关
|
||||
bool m_bPlaying;
|
||||
int m_iPlayBar,
|
||||
m_iPlayPoint;
|
||||
TBitmap *m_imgPlayCursor,
|
||||
*m_imgMidiIcon,
|
||||
*m_imgWaveIcon;
|
||||
|
||||
TPngImage * m_imgBeatHint[4],
|
||||
*m_pngChordUp,
|
||||
*m_pngChordDown,
|
||||
*m_pngChord2,
|
||||
*m_pngChord4,
|
||||
*m_pngChord6,
|
||||
*m_pngChord7,
|
||||
*m_pngChordI,
|
||||
*m_pngChordV,
|
||||
*m_pngChordMaj,
|
||||
*m_pngChordMin,
|
||||
*m_pngChordSus;
|
||||
int m_iBeatHint,
|
||||
m_lBeatHint,
|
||||
m_tBeatHint,
|
||||
m_wBeatHint,
|
||||
m_hBeatHint;
|
||||
|
||||
//和弦相关
|
||||
int m_nChordTxtWidth,
|
||||
m_nChordTxtHeight,
|
||||
m_iMinSelBar,
|
||||
m_iMaxSelBar,
|
||||
m_iSelCellStart,
|
||||
m_iSelCellEnd;
|
||||
|
||||
//复制剪切相关
|
||||
int m_iCopyBarStart,
|
||||
m_iCopyBarEnd,
|
||||
m_iCopyCellStart,
|
||||
m_iCopyCellEnd,
|
||||
m_iCopyPointStart,
|
||||
m_iCopyPointEnd,
|
||||
m_iCopyAudio;
|
||||
bool m_bCut;
|
||||
|
||||
//拖动相关
|
||||
int m_iDropBar,
|
||||
m_iMouseDownBar,
|
||||
m_iMouseDownPoint,
|
||||
m_iDragingStage,
|
||||
m_iDragAudio; //拖动的音频轨
|
||||
bool m_bDragReady, //鼠标拖动进行选择操作
|
||||
m_bDraging,
|
||||
m_bBrush;
|
||||
TPoint ptDown;
|
||||
TCommonItem *m_pItem;
|
||||
|
||||
TTimer *m_pTimer; //自动滚屏定时器
|
||||
|
||||
TMenuPanel *m_PopupMenu; //右键菜单 //add
|
||||
TApplicationEvents *m_ApplicationEvents;
|
||||
|
||||
void ChordPaste( int key[], int type[], int len, bool bAddUndo=true );
|
||||
// void ChangeMelodyKey( int Index );
|
||||
void ChangeBarsKey( int iBarStart, int iBarEnd, int iKey, int keys[] );
|
||||
void AudioMove( int iSrcTrack, int iBarStart, int iPointStart,
|
||||
int iBarEnd, int iPointEnd, bool bCut );
|
||||
void GetBarKeys( int iBarStart, int iBarEnd, int keys[] );
|
||||
void ChangeMidiTrack( int iMT=-1, int iSBar=-1, int iEBar=-1 );
|
||||
|
||||
void ClearShowTracks();
|
||||
void ShowTrackChangeState( int iTrack, int iType );
|
||||
void ShowPlayPoint();
|
||||
|
||||
void CalcViewArea();
|
||||
bool SetScrollView( int iFirstShowBar );
|
||||
|
||||
void DrawBars();
|
||||
void DrawBarTitle( int l, int r, int t, bool bSel );
|
||||
void DrawBarData( int iBar, int iStage, int iFirstBar, int left, int top );
|
||||
void DrawTrack( int iBar, int nBarNum, int left, int top, int iTrack );
|
||||
void DrawRowWave( int iBar, int nBarNum, int left, int top, int iWave );
|
||||
void DrawRowMidi( int iBar, int nBarNum, int left, int top, int iMidi );
|
||||
void DrawChord( TRect& rcDraw, int iBarKey, int iKey, int iType );
|
||||
|
||||
//HitTest返回iHitType值 -1=无效区域 0=行间空白 1=小节栏 2=和弦区 >=3 波形区
|
||||
DWORD HitTest( int X, int Y, int& iHitType, bool bHead=false );
|
||||
|
||||
void SelectRange( int iBarStart, int iPointStart, int iBarEnd, int iPointEnd, bool bInvalid=false );
|
||||
void SelectCopyBars( int iBarStart, int iBarEnd, bool bCut=false );
|
||||
void SelectCopyCells( int iBarStart, int iCellStart, int iBarEnd, int iCellEnd );
|
||||
void SelectCopyPos( int iBarStart, int iPointStart, int iBarEnd, int iPointEnd );
|
||||
void SetDropBar( int iBar );
|
||||
void SelectRangeByWave( int iHitBar, int iHitPoint );
|
||||
|
||||
int GetCell( int iPoint );
|
||||
void GetSelectChord( int& iBarKey, int& iChordKey, int& iChordType );
|
||||
|
||||
void DrawDragImg( int mode );
|
||||
void SetScrollTimer(TPoint ptMouse, bool bVertical=true);
|
||||
void HandleDropEvent( int iState=0 );
|
||||
bool HandleHoverEvent(TPoint ptMouse);
|
||||
void HandleBrush();
|
||||
|
||||
void OnAudioEffectProcess( int iFxType );
|
||||
void OnAudioEffectAdd( int iFxType );
|
||||
void OnWMScroll(TWMScroll &Message, bool bVertical);
|
||||
|
||||
void __fastcall DoHandleMessage(MSG &Msg, bool &Handled); //鼠标消息处理
|
||||
void __fastcall TimerProc(TObject* Sender);
|
||||
void __fastcall DoubleClick(TObject* sender);
|
||||
void __fastcall DoSetSelPosStart(System::TObject* Sender);
|
||||
void __fastcall DoSetSelPosEnd(System::TObject* Sender);
|
||||
void __fastcall DoDelSelPosStart(System::TObject* Sender);
|
||||
void __fastcall DoDelSelPosEnd(System::TObject* Sender);
|
||||
void __fastcall DoAudioFxProcess(System::TObject* Sender);
|
||||
void __fastcall DoAudioVstProcess(System::TObject* Sender);
|
||||
void __fastcall DoAudioAddFx(System::TObject* Sender);
|
||||
void __fastcall DoAudioAddVst(System::TObject* Sender);
|
||||
|
||||
MESSAGE void __fastcall OnMidiSwitch(TMessage &msg);
|
||||
MESSAGE void __fastcall UMMouseMove(TWMMouse &Message);
|
||||
MESSAGE void __fastcall UMMouseUp(TWMMouse &Message);
|
||||
MESSAGE void __fastcall WMEraseBkgnd(TWMEraseBkgnd &Message);
|
||||
MESSAGE void __fastcall WMSize(TWMSize &Message);
|
||||
MESSAGE void __fastcall WMVScroll(TWMScroll &Message);
|
||||
MESSAGE void __fastcall WMHScroll(TWMScroll &Message);
|
||||
MESSAGE void __fastcall WMMouseWheel(TWMMouseWheel &Message);
|
||||
MESSAGE void __fastcall WMMouseDown(TWMMouse &Message);
|
||||
|
||||
BEGIN_MESSAGE_MAP
|
||||
MESSAGE_HANDLER(WM_ERASEBKGND, TWMEraseBkgnd, WMEraseBkgnd)
|
||||
MESSAGE_HANDLER(WM_SIZE, TWMSize, WMSize)
|
||||
MESSAGE_HANDLER(WM_VSCROLL, TWMVScroll, WMVScroll)
|
||||
MESSAGE_HANDLER(WM_HSCROLL, TWMHScroll, WMHScroll)
|
||||
MESSAGE_HANDLER(WM_MOUSEWHEEL, TWMMouseWheel, WMMouseWheel)
|
||||
MESSAGE_HANDLER(WM_LBUTTONDOWN, TWMMouse, WMMouseDown)
|
||||
MESSAGE_HANDLER(WM_RBUTTONDOWN, TWMMouse, WMMouseDown)
|
||||
MESSAGE_HANDLER(UM_MOUSEMOVE, TWMMouseMove, UMMouseMove)
|
||||
MESSAGE_HANDLER(UM_MOUSEUP, TWMMouse, UMMouseUp)
|
||||
MESSAGE_HANDLER(UM_MIDISWITCH, TMessage, OnMidiSwitch)
|
||||
END_MESSAGE_MAP(Vcl::Extctrls::TPanel)
|
||||
|
||||
protected:
|
||||
virtual void __fastcall CreateWnd();
|
||||
virtual void __fastcall Paint(void);
|
||||
|
||||
public:
|
||||
inline void SetStylePanel( TToolpalPanel* pPanel ){ m_pStylePanel=pPanel; };
|
||||
inline void SetChordPanel( TToolpalPanel* pPanel ){ m_pChordPanel=pPanel; };
|
||||
inline void SetTrackPanel( TToolpalPanel* pPanel ){ m_pTrackPanel=pPanel; };
|
||||
inline void SetPopMenu( TMenuPanel* pMenu ){ m_PopupMenu = pMenu; };
|
||||
|
||||
void InitialVars( bool bClear = false );
|
||||
inline int GetBarNum(){ return m_nBarNum; };
|
||||
void AddNewBar( int iBar );
|
||||
void ShowBeatHint( int iBeat );
|
||||
|
||||
void SetMode( int iMode );
|
||||
void SetScrollMode( bool bVertical=true );
|
||||
inline bool IsVertical() { return m_bVertical; };
|
||||
inline void Play( bool bPlay ) { m_bPlaying=bPlay; };
|
||||
inline bool IsPlaying() { return m_bPlaying; };
|
||||
void SetPlayPoint( int iBar, int iPoint );
|
||||
|
||||
int GetShowTrackId( int type, int index );
|
||||
void SelectTrack( int iTrack, int iBar, int iPoint, bool bClear=true );
|
||||
void ShowTrack( int type, int index, bool bShow );
|
||||
void DeleteTrack( int type, int index );
|
||||
|
||||
void SetSelectRange( int iStartBar, int iStartPoint, int iEndBar, int iEndPoint, bool bInvalid=false );
|
||||
void GetSelectRange( int& iStartBar, int& iStartPoint, int& iEndBar, int& iEndPoint );
|
||||
inline bool IsModifyMode() { return !(m_iSelBarStart<0 && m_iSelBarEnd<0); };
|
||||
|
||||
bool SetSelectChord( int iKey, int iChordType );
|
||||
void GetChordDispalyKey( int iKey, int iBarKey, int& iMainKey, int& iAjustKey );
|
||||
|
||||
void SelectCells( int iBarStart, int iCellStart, int iBarEnd, int iCellEnd );
|
||||
void SelectStage( int iStage );
|
||||
void SelectBars( int iStartBar, int iEndBar );
|
||||
void GetSelectBars( int& iStartBar, int& iEndBar );
|
||||
|
||||
void InvalidateBar( int iBar, int iBeginPoint, int iEndPoint, int iArea=BAR_DATA );
|
||||
void InvalidateBars( int iBarStart, int iBarEnd, int iArea=BAR_DATA );
|
||||
void InvalidateShowBars( int iArea=BAR_TITLE|BAR_DATA|BAR_TRACK );
|
||||
void InvalidateStage( int iStage, int iArea=BAR_DATA );
|
||||
void ScrollView( int nPos, bool bVertical=true, bool bRedraw=true );
|
||||
|
||||
bool ShowDragImg( bool bShow=true, int iState=0 );
|
||||
TCommonItem* GetDropItem(){ return m_pItem; };
|
||||
void SetDropItem( TCommonItem* pItem ){ m_pItem = pItem; };
|
||||
void BeginBrush( TCommonItem* pBrushItem );
|
||||
void CancelBrush();
|
||||
bool IsStyleBrush() { return m_bBrush; };
|
||||
|
||||
void Undo( bool bUndo );
|
||||
|
||||
void __fastcall OnTrackStateChanged( int iType, int iIndex, BYTE iState, bool bUnset );
|
||||
void __fastcall OnStageChanged( int iStage, int iMode );
|
||||
void __fastcall OnChangeMelodyKey( int Index );
|
||||
void __fastcall OnDirectionKey( WORD key );
|
||||
|
||||
void __fastcall DoCancelAll(System::TObject* Sender);
|
||||
void __fastcall DoSelectAll(System::TObject* Sender);
|
||||
void __fastcall DoInsertBlankBar(System::TObject* Sender);
|
||||
void __fastcall DoBarsCopy(System::TObject* Sender);
|
||||
void __fastcall DoBarsCut(System::TObject* Sender);
|
||||
void __fastcall DoBarsDelete(System::TObject* Sender);
|
||||
void __fastcall DoBarsInsert(System::TObject* Sender);
|
||||
void __fastcall DoBarsChangeKey(System::TObject* Sender);
|
||||
void __fastcall DoChordCopy(System::TObject* Sender);
|
||||
void __fastcall DoChordPaste(System::TObject* Sender);
|
||||
void __fastcall DoChordDelete(System::TObject* Sender);
|
||||
void __fastcall DoAudioDelete(System::TObject* Sender);
|
||||
void __fastcall DoAudioCopy(System::TObject* Sender);
|
||||
void __fastcall DoAudioCut(System::TObject* Sender);
|
||||
void __fastcall DoAudioPaste(System::TObject* Sender);
|
||||
void __fastcall DoAudioLoad(System::TObject* Sender);
|
||||
void __fastcall DoTrackAdd(System::TObject* Sender);
|
||||
void __fastcall DoTrackDel(System::TObject* Sender);
|
||||
void __fastcall DoTrackShow(System::TObject* Sender);
|
||||
void __fastcall DoTrackHide(System::TObject* Sender);
|
||||
void __fastcall DoTrackSave(System::TObject* Sender);
|
||||
void __fastcall DoTrackMute(System::TObject* Sender);
|
||||
void __fastcall DoTrackSolo(System::TObject* Sender);
|
||||
void __fastcall DoInsertTexture(TObject* Sender);
|
||||
void __fastcall DoDeleteTexture(TObject* Sender);
|
||||
void __fastcall DoSwitchTexture(TObject* Sender);
|
||||
void __fastcall DoSwitchFontProg(TObject* Sender);
|
||||
void __fastcall DoTrackSwitchTexture(TObject* Sender);
|
||||
void __fastcall DoTrackSwitchFontProg(TObject* Sender);
|
||||
|
||||
void __fastcall CreateEditMenu(TMenuPanel *Menu, bool bEnabled);
|
||||
void __fastcall CreateTrackMenu(TMenuPanel *Menu, bool bEnabled);
|
||||
|
||||
__fastcall virtual TContentPanel(System::Classes::TComponent* AOwner);
|
||||
__fastcall ~TContentPanel();
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user