bool CRecentImp<T, S>::MoveItem( int nSrcIndex, int nDstIndex ) { int i; bool bFavorite; if( ! IsAvailable() ) return false; if( nSrcIndex < 0 || nSrcIndex >= *m_pnUserItemCount ) return false; if( nDstIndex < 0 || nDstIndex >= *m_pnUserItemCount ) return false; if( nSrcIndex == nDstIndex ) return true; DataType pri; //移動する情報を退避 memcpy_raw( &pri, GetItemPointer( nSrcIndex ), sizeof(pri) ); bFavorite = IsFavorite( nSrcIndex ); if( nSrcIndex < nDstIndex ) { for( i = nSrcIndex; i < nDstIndex; i++ ) { CopyItem( i + 1, i ); } } else { for( i = nSrcIndex; i > nDstIndex; i-- ) { CopyItem( i - 1, i ); } } //新しい位置に格納 memcpy_raw( GetItemPointer( nDstIndex ), &pri, sizeof(pri) ); SetFavorite( nDstIndex, bFavorite ); return true; }
/*! KEYDATA配列にデータをセット */ static void SetKeyNameArrVal( DLLSHAREDATA* pShareData, int nIdx, const KEYDATAINIT* pKeydataInit ) { KEYDATA* pKeydata = &pShareData->m_Common.m_sKeyBind.m_pKeyNameArr[nIdx]; pKeydata->m_nKeyCode = pKeydataInit->m_nKeyCode; if ( 0xFFFF < pKeydataInit->m_nKeyNameId ) { _tcscpy( pKeydata->m_szKeyName, pKeydataInit->m_pszKeyName ); } assert( sizeof(pKeydata->m_nFuncCodeArr) == sizeof(pKeydataInit->m_nFuncCodeArr) ); memcpy_raw( pKeydata->m_nFuncCodeArr, pKeydataInit->m_nFuncCodeArr, sizeof(pKeydataInit->m_nFuncCodeArr) ); }
bool CRecentImp<T, S>::CopyItem( int nSrcIndex, int nDstIndex ) { if( ! IsAvailable() ) return false; if( nSrcIndex < 0 || nSrcIndex >= m_nArrayCount ) return false; if( nDstIndex < 0 || nDstIndex >= m_nArrayCount ) return false; if( nSrcIndex == nDstIndex ) return true; memcpy_raw( GetItemPointer( nDstIndex ), GetItemPointer( nSrcIndex ), sizeof(DataType) ); //(void)SetFavorite( nDstIndex, IsFavorite( nSrcIndex ) ); //内部処理しないとだめ。 if( m_pbUserItemFavorite ) m_pbUserItemFavorite[nDstIndex] = m_pbUserItemFavorite[nSrcIndex]; return true; }
bool CRecentImp<T, S>::EditItemText( int nIndex, LPCTSTR pText ) { DataType data; ReceiveType receiveData; memcpy_raw( &data, GetItemPointer( nIndex ), sizeof(data) ); if( !TextToDataType( &data, pText ) ){ return false; } if( !DataToReceiveType( &receiveData, &data ) ){ return false; } int findIndex = FindItem( receiveData ); if( -1 != findIndex && nIndex != findIndex ){ // 重複不可。ただし同じ場合は大文字小文字の変更かもしれないのでOK return false; } CopyItem( GetItemPointer(nIndex), receiveData ); return true; }