//--------------------------------------------------------------------------- #include #pragma hdrstop #include "GlobalUnit.h" #include "CompletePanelUnit.h" //--------------------------------------------------------------------------- #pragma package(smart_init) __fastcall CompletePanelUnit::TPanel::TPanel(TComponent* AOwner) : TShowBarsPanel(AOwner) { m_iModifyBeginBar = m_iModifyBeginPoint = m_iModifyEndBar = m_iModifyEndPoint = -1; m_bShowModifyPos = false; m_imgBeginPos = m_imgEndPos = NULL; m_nChordWidth = 40; m_nChordHeight = 20; } //--------------------------------------------------------------------------- __fastcall CompletePanelUnit::TPanel::~TPanel() { if( m_imgBeginPos ) delete m_imgBeginPos; if( m_imgEndPos ) delete m_imgEndPos; } //--------------------------------------------------------------------------- void CompletePanelUnit::TPanel::InitialVars() { //计算总小节数 int nTotalBarCount = 0; for( int i=0; inStageBars; } TShowBarsPanel::InitialVars( nTotalBarCount ); } //--------------------------------------------------------------------------- void __fastcall CompletePanelUnit::TPanel::CreateWnd(void) { TShowBarsPanel::CreateWnd(); if( !ParentBackground ){ m_imgBeginPos = new TPngImage(); m_imgBeginPos->LoadFromResourceName(int(HInstance), L"RecordBeginPos"); m_imgEndPos = new TPngImage(); m_imgEndPos->LoadFromResourceName(int(HInstance), L"RecordEndPos"); m_nModifyFlagWidth = m_imgBeginPos->Width; m_nModifyFlagHeight = m_imgBeginPos->Height; } } //--------------------------------------------------------------------------- void __fastcall CompletePanelUnit::TPanel::SetBarTitle( int iBar, String& strText ) { // } //--------------------------------------------------------------------------- void __fastcall CompletePanelUnit::TPanel::DrawBarOperation( int iBar, int leftDraw, int topDraw ) { if( m_bShowModifyPos ){ //绘制重录起止标志 if( m_iModifyBeginBar==iBar ){ int X = leftDraw + m_iModifyBeginPoint - m_nModifyFlagWidth/2; int Y = topDraw + 2; Canvas->Draw(X, Y, m_imgBeginPos); } if( m_iModifyEndBar==iBar ){ int X = leftDraw + m_iModifyEndPoint - m_nModifyFlagWidth/2; int Y = topDraw + 2; Canvas->Draw(X, Y, m_imgEndPos); } } } //--------------------------------------------------------------------------- void __fastcall CompletePanelUnit::TPanel::DrawBarBkgnd( int iBar, int leftDraw, int topDraw ) { TRect rectBar; rectBar.left = leftDraw; rectBar.right = rectBar.left + m_nDataWidth; rectBar.top = topDraw; rectBar.bottom = rectBar.top + m_nDataHeight; int iFirstBar, iStage = FindStage( iBar, &iFirstBar ); if( iStage<0 ) return; COMPOSESTAGE* pStage = g_lstComposeStages[iStage]; COLORREF clrNormal, clrDisable; if( pStage->iMelodyStage>=COMPOSE_ENDING_1 ){ clrNormal = g_clrEnding[pStage->iMelodyStage - COMPOSE_ENDING_1]; clrDisable = g_clrEndingDisable[pStage->iMelodyStage - COMPOSE_ENDING_1]; } else if( pStage->iMelodyStage>=COMPOSE_INTRO_1 ){ clrNormal = g_clrIntro[pStage->iMelodyStage - COMPOSE_INTRO_1]; clrDisable = g_clrIntroDisable[pStage->iMelodyStage - COMPOSE_INTRO_1]; } else{ clrNormal = g_clrStage[pStage->iVar % STAGE_VAR_NUM]; clrDisable = g_clrStageDisable[pStage->iVar % STAGE_VAR_NUM]; } if( !m_bShowModifyPos || m_iModifyBeginBar<0 && m_iModifyEndBar<0 || ( m_iModifyEndBar<0 || iBarm_iModifyBeginBar){ Canvas->Brush->Color = clrNormal; Canvas->FillRect( rectBar ); } else if( iBar=0 && iBar>m_iModifyEndBar ){ Canvas->Brush->Color = clrDisable; Canvas->FillRect( rectBar ); } else{ if( iBar==m_iModifyBeginBar && iBar==m_iModifyEndBar ){ if( m_iModifyBeginPoint>0 ){ Canvas->Brush->Color = clrDisable; rectBar.right = leftDraw + m_iModifyBeginPoint; Canvas->FillRect( rectBar ); } Canvas->Brush->Color = clrNormal; rectBar.left = leftDraw + m_iModifyBeginPoint; rectBar.right = leftDraw + m_iModifyEndPoint; Canvas->FillRect( rectBar ); if( m_iModifyEndPointBrush->Color = clrDisable; rectBar.left = leftDraw + m_iModifyEndPoint; rectBar.right = leftDraw + m_nDataWidth; Canvas->FillRect( rectBar ); } } else if( iBar==m_iModifyBeginBar ){ if( m_iModifyBeginPoint>0 ){ Canvas->Brush->Color = clrDisable; rectBar.right = leftDraw + m_iModifyBeginPoint; Canvas->FillRect( rectBar ); } if( m_iModifyBeginPointBrush->Color = clrNormal; rectBar.left = leftDraw + m_iModifyBeginPoint; rectBar.right = leftDraw + m_nDataWidth; Canvas->FillRect( rectBar ); } } else if( iBar==m_iModifyEndBar ){ if( m_iModifyEndPoint>0 ){ Canvas->Brush->Color = clrNormal; rectBar.right = leftDraw + m_iModifyEndPoint; Canvas->FillRect( rectBar ); } if( m_iModifyEndPointBrush->Color = clrDisable; rectBar.left = leftDraw + m_iModifyEndPoint; rectBar.right = leftDraw + m_nDataWidth; Canvas->FillRect( rectBar ); } } } } //--------------------------------------------------------------------------- #define COLOR_WAVE_NEW RGB(15,229,226) #define COLOR_WAVE_OLD RGB(75,148,147) void __fastcall CompletePanelUnit::TPanel::DrawBarContext( int iBar, int leftDraw, int topDraw ) { //绘制波形 TColor clrOld = Canvas->Pen->Color; int mid = topDraw + m_nDataHeight/2; BARVOLS *pBV = g_lstCompleteVols[iBar]; if( iBar>=g_lstCompleteVols.size() || pBV->bInvalid ) return; if( pBV->bRecording ) Canvas->Pen->Color = COLOR_WAVE_NEW; else Canvas->Pen->Color = COLOR_WAVE_OLD; for( int k=0; kaVols[k]!=0 && pBV->aVols[k]!=-1 ){ DWORD wLeft = LOWORD(pBV->aVols[k]), wRight = HIWORD(pBV->aVols[k]); int yTop = mid - ((14 * wLeft )/0x8000), yBottom = mid + ((14 * wRight )/0x8000); if( yBottom>yTop ){ Canvas->MoveTo( leftDraw+k, yTop ); Canvas->LineTo( leftDraw+k, yBottom ); } } } Canvas->Pen->Color = clrOld; } //--------------------------------------------------------------------------- void __fastcall CompletePanelUnit::TPanel::BarPosChanged() { // } //--------------------------------------------------------------------------- bool CompletePanelUnit::TPanel::SetModifyPos( bool bBegin, int iNewBar, int iNewPoint ) { int iBeginBar, iBeginPoint, iEndBar, iEndPoint; bool bSet = false; if( bBegin ){ iBeginBar = iNewBar, iBeginPoint = iNewPoint; iEndBar = m_iModifyEndBar; iEndPoint = m_iModifyEndPoint; int iBPoints = iBeginBar * m_nDataWidth + iBeginPoint, iEPoints = iEndBar * m_nDataWidth + iEndPoint; if( iBPoints<0 ) iBPoints = 0; if( iEPoints<0 ) iEPoints = m_nBarNum * m_nDataWidth - 1; if( iEPoints >= iBPoints ){ if( iEPoints < iBPoints + 15 ){ iBPoints = iEPoints - 15; iBeginBar = iBPoints / m_nDataWidth; iBeginPoint = iBPoints % m_nDataWidth; } m_iModifyBeginBar = iBeginBar; m_iModifyBeginPoint = iBeginPoint; bSet = true; } } else{ iBeginBar = m_iModifyBeginBar; iBeginPoint = m_iModifyBeginPoint; iEndBar = iNewBar; iEndPoint = iNewPoint; int iBPoints = iBeginBar * m_nDataWidth + iBeginPoint, iEPoints = iEndBar * m_nDataWidth + iEndPoint; if( iBPoints<0 ) iBPoints = 0; if( iEPoints<0 ) iEPoints = m_nBarNum * m_nDataWidth - 1; if( iEPoints >= iBPoints ){ if( iEPoints < iBPoints + 15 ){ iEPoints = iBPoints + 15; iEndBar = iEPoints / POINTS_PER_BAR; iEndPoint = iEPoints % POINTS_PER_BAR; } m_iModifyEndBar = iEndBar; m_iModifyEndPoint = iEndPoint; bSet = true; } } Invalidate(); return bSet; } //--------------------------------------------------------------------------- void CompletePanelUnit::TPanel::GetModifyPos( bool bBegin, int& iBar, int& iPoint ) { if( bBegin ){ iBar = m_iModifyBeginBar; iPoint = m_iModifyBeginPoint; } else{ iBar = m_iModifyEndBar; iPoint = m_iModifyEndPoint; } } //--------------------------------------------------------------------------- void CompletePanelUnit::TPanel::ShowModifyPos( bool bShow ) { m_bShowModifyPos = bShow; if( !bShow ){ m_iModifyBeginBar = m_iModifyBeginPoint = m_iModifyEndBar = m_iModifyEndPoint = -1; } Invalidate(); } //--------------------------------------------------------------------------- int CompletePanelUnit::TPanel::FindStage( int iBar, int *piFirstBar ) { if( iBar>=0 ){ int nStageNum = g_lstComposeStages.size(); int nBarCount = 0; for( int i=0; inStageBars; if( iBar=g_lstComposeStages.size() ) return -1; int nBarCount = 0; for( int i=0; inStageBars; } return nBarCount; } //--------------------------------------------------------------------------- void CompletePanelUnit::TPanel::InvalidateStage( int iStage, int iArea ) { int iFirstBar = FirstBar( iStage ); COMPOSESTAGE * pStage = g_lstComposeStages[iStage]; for( int i=0; inStageBars; i++ ){ InvalidateBar( iFirstBar+i, 0, m_nBarWidth, iArea ); } } //---------------------------------------------------------------------------