//--------------------------------------------------------------------------- #include #pragma hdrstop #include "BackupUnit.h" //--------------------------------------------------------------------------- #pragma package(smart_init) TMelodyBackup::TMelodyBackup() { m_iKey = -1; m_nBarCount = 0; m_nStageCount = 0; m_bModified = false; m_aChords = NULL; m_aFills = NULL; m_aStages = NULL; } TMelodyBackup::~TMelodyBackup() { Clear(); } void TMelodyBackup::Clear() { m_iKey = -1; m_nBarCount = 0; m_nStageCount = 0; m_bModified = false; if( m_aChords ){ delete[] m_aChords; m_aChords = NULL; } if( m_aFills ){ delete[] m_aFills; m_aFills = NULL; } if( m_aStages ){ delete[] m_aStages; m_aStages = NULL; } } void TMelodyBackup::Backup() { //±¸·ÝMelodyÊý¾Ý m_iKey = g_iMelodyKey; if( m_nBarCount!=g_lstMelodyBars.size() ){ m_nBarCount = g_lstMelodyBars.size(); if( m_aChords ){ delete m_aChords; m_aChords = NULL; } m_aChords = new int[m_nBarCount][2]; if( m_aFills ){ delete m_aFills; m_aFills = NULL; } m_aFills = new int[m_nBarCount]; } if( m_nStageCount!=g_lstMelodyStages.size() ){ m_nStageCount = g_lstMelodyStages.size(); if( m_aStages ){ delete m_aStages; m_aStages = NULL; } m_aStages = new int[g_lstMelodyStages.size()][3]; } for( int i=0; iiChords[0]; m_aChords[i][1] = pMBar->iChords[1]; m_aFills[i] = pMBar->iFill; } for( int i=0; iiFirstBar; m_aStages[i][1] = pStage->iLastBar; m_aStages[i][2] = pStage->iVar; } m_bModified = false; } void TMelodyBackup::Restore() { g_iMelodyKey = m_iKey; for( int i=0; iiChords[0] = m_aChords[i][0]; pMBar->iChords[1] = m_aChords[i][1]; pMBar->iFill = m_aFills[i]; } if( m_nStageCount!=g_lstMelodyStages.size() ){ ClearGlobalVars( LIST_MELODYSTAGES ); for( int i=0; iiFirstBar = m_aStages[i][0]; pStage->iLastBar = m_aStages[i][1]; pStage->iVar = m_aStages[i][2]; g_lstMelodyStages.push_back( pStage ); } } else{ for( int i=0; iiFirstBar = m_aStages[i][0]; pStage->iLastBar = m_aStages[i][1]; pStage->iVar = m_aStages[i][2]; } } m_bModified = false; } BOOL TMelodyBackup::CheckModified( int iCheckType ) { if( iCheckType==CHECK_GET ){ return m_bModified; } m_bModified &= ~iCheckType; if( iCheckType & CHECK_KEY ){ if( m_iKey != g_iMelodyKey ) m_bModified |= CHECK_KEY; } if( iCheckType & CHECK_BAR ){ if( m_nBarCount!=g_lstMelodyBars.size() ){ m_bModified |= CHECK_BAR; } } if( !(m_bModified & CHECK_BAR) && ((iCheckType & CHECK_CHORD)||(iCheckType & CHECK_FILL) )){ for( int i=0; iiChords[0] || m_aChords[i][1]!=pMBar->iChords[1] ){ m_bModified |= CHECK_CHORD; } } if( !(m_bModified & CHECK_FILL ) && (iCheckType & CHECK_FILL ) ){ if( m_aFills[i]!=pMBar->iFill ){ m_bModified |= CHECK_FILL; } } } } if( iCheckType & CHECK_STAGE ){ if( m_nStageCount!=g_lstMelodyStages.size() ){ m_bModified |= CHECK_STAGE; } } if( !(m_bModified & CHECK_STAGE) && ((iCheckType & CHECK_POS)||(iCheckType & CHECK_VAR))){ for( int i=0; iiFirstBar || m_aStages[i][1]!=pStage->iLastBar ){ m_bModified |= CHECK_POS; } } if( !(m_bModified & CHECK_VAR) && (iCheckType & CHECK_VAR ) ){ if( m_aStages[i][2]!=pStage->iVar ){ m_bModified |= CHECK_VAR; } } } } return m_bModified; } TComposeBackup::TComposeBackup() { m_nStageCount = 0; m_bModified = false; m_iKey = -1; } TComposeBackup::~TComposeBackup() { Clear(); } void TComposeBackup::Backup( int iKey ) { Clear(); m_iKey = iKey; m_nStageCount = g_lstComposeStages.size(); for( int i=0; iiMelodyStage = pBkStage->iMelodyStage; pNewStage->nStageBars = pBkStage->nStageBars; pNewStage->iVar = pBkStage->iVar; pNewStage->idStyle = pBkStage->idStyle; pNewStage->strStyleName = pBkStage->strStyleName; for( int j=0; jaFills.size(); j++ ){ pNewStage->aFills.push_back(pBkStage->aFills[j]); } m_lstStages.push_back( pNewStage ); } m_bModified = false; } void TComposeBackup::Restore() { if( m_nStageCount!=g_lstComposeStages.size() ){ ClearGlobalVars( LIST_COMPOSESTAGES ); for( int i=0; iiMelodyStage = pBkStage->iMelodyStage; pNewStage->nStageBars = pBkStage->nStageBars; pNewStage->iVar = pBkStage->iVar; pNewStage->idStyle = pBkStage->idStyle; pNewStage->strStyleName = pBkStage->strStyleName; for( int j=0; jaFills.size(); j++ ){ pNewStage->aFills.push_back(pBkStage->aFills[j]); } g_lstComposeStages.push_back( pNewStage ); } } else{ for( int i=0; iiMelodyStage = pBkStage->iMelodyStage; pCStage->nStageBars = pBkStage->nStageBars; pCStage->iVar = pBkStage->iVar; pCStage->idStyle = pBkStage->idStyle; pCStage->aFills.clear(); for( int j=0; jaFills.size(); j++ ){ pCStage->aFills.push_back(pBkStage->aFills[j]); } } } m_bModified = false; } BOOL TComposeBackup::CheckModified( int iCheckType ) { if( iCheckType==CHECK_GET ){ return m_bModified; } m_bModified &= ~iCheckType; if( iCheckType & CHECK_STAGE ){ if( m_nStageCount!=g_lstComposeStages.size() ){ m_bModified |= CHECK_STAGE; } } if( !(m_bModified & CHECK_STAGE) && (iCheckType & CHECK_STAGE || iCheckType & CHECK_POS || iCheckType & CHECK_VAR || iCheckType & CHECK_FILL || iCheckType & CHECK_STYLE ) ){ for( int i=0; iiMelodyStage!=pBkStage->iMelodyStage || pCpStage->nStageBars!=pBkStage->nStageBars ){ m_bModified |= CHECK_POS; } } if( !(m_bModified & CHECK_VAR) && (iCheckType & CHECK_VAR) ){ if( pCpStage->iVar!=pBkStage->iVar ){ m_bModified |= CHECK_VAR; } } if( !(m_bModified & CHECK_STYLE) && (iCheckType & CHECK_STYLE) ){ if( pCpStage->idStyle!=pBkStage->idStyle ){ m_bModified |= CHECK_STYLE; } } if( !(m_bModified & CHECK_FILL) && (iCheckType & CHECK_FILL) ){ if( pCpStage->aFills.size()!=pBkStage->aFills.size() ){ m_bModified |= CHECK_FILL; } else{ for( int j=0; jaFills.size(); j++ ){ if( pCpStage->aFills[j]!=pBkStage->aFills[j] ){ m_bModified |= CHECK_FILL; break; } } } } } } return m_bModified; } void TComposeBackup::Clear() { m_iKey = -1; for( int i=0; i