📄 crecent.cpp
字号:
if( nDstIndex < 0 || nDstIndex >= m_nArrayCount ) return false;
if( nSrcIndex == nDstIndex ) return true;
memcpy( GetArrayOffset( nDstIndex ), GetArrayOffset( nSrcIndex ), m_nItemSize );
//(void)SetFavorite( nDstIndex, IsFavorite( nSrcIndex ) );
//内部処理しないとだめ。
if( m_pbUserItemFavorite ) m_pbUserItemFavorite[nDstIndex] = m_pbUserItemFavorite[nSrcIndex];
return true;
}
/*
アイテムをゼロクリアする。
*/
void CRecent::ZeroItem( int nIndex )
{
if( ! IsAvailable() ) return;
if( nIndex < 0 || nIndex >= m_nArrayCount ) return;
memset( GetArrayOffset( nIndex ), 0, m_nItemSize );
//(void)SetFavorite( nIndex, false );
//内部処理しないとだめ。
if( m_pbUserItemFavorite ) m_pbUserItemFavorite[nIndex] = false;
return;
}
/*
アイテムを削除する。
*/
bool CRecent::DeleteItem( int nIndex )
{
int i;
if( ! IsAvailable() ) return false;
if( nIndex < 0 || nIndex >= *m_pnUserItemCount ) return false;
ZeroItem( nIndex );
//以降のアイテムを前に詰める。
for( i = nIndex; i < *m_pnUserItemCount - 1; i++ )
{
CopyItem( i + 1, i );
}
ZeroItem( i );
*m_pnUserItemCount -= 1;
return true;
}
/*
すべてのアイテムを削除する。
@note ゼロクリアを可能とするため、すべてが対象になる。
*/
void CRecent::DeleteAllItem( void )
{
int i;
if( ! IsAvailable() ) return;
for( i = 0; i < m_nArrayCount; i++ )
{
ZeroItem( i );
}
*m_pnUserItemCount = 0;
return;
}
/*
アイテムを取得する。
@note 取得後のポインタはユーザ管理の構造体にキャストして参照してください。
*/
const char *CRecent::GetItem( int nIndex )
{
if( ! IsAvailable() ) return NULL;
if( nIndex < 0 || nIndex >= *m_pnUserItemCount ) return NULL;
return GetArrayOffset( nIndex );
}
/*
アイテムの比較要素を取得する。
@note 取得後のポインタはユーザ管理の構造体にキャストして参照してください。
*/
const char *CRecent::GetDataOfItem( int nIndex )
{
const char *p;
if( ! IsAvailable() ) return NULL;
if( nIndex < 0 || nIndex >= *m_pnUserItemCount ) return NULL;
p = GetItem( nIndex );
if( NULL == p ) return NULL;
return &p[ m_nOffset ];
}
/*
アイテムを先頭に追加する。
@note すでに登録済みの場合は先頭に移動する。
@note いっぱいのときは最古のアイテムを削除する。
@note お気に入りは削除されない。
*/
bool CRecent::AppendItem( const char *pszItemData )
{
int nIndex;
int i;
char *p;
if( ! IsAvailable() ) return false;
if( NULL == pszItemData ) return false;
//登録済みか調べる。
nIndex = FindItem( &pszItemData[ m_nOffset ] );
if( nIndex >= 0 )
{
//最新の情報に更新する。
if( m_nCmpSize > 0 )
memcpy( GetArrayOffset( nIndex ), pszItemData, m_nItemSize );
else //文字列として受け取る。
{
p = GetArrayOffset( nIndex );
strncpy( p, pszItemData, m_nItemSize );
p[ m_nItemSize - 1 ] = '\0';
}
//先頭に持ってくる。
(void)MoveItem( nIndex, 0 );
goto reconfigure;
}
//いっぱいのときは最古の通常アイテムを削除する。
if( m_nArrayCount <= *m_pnUserItemCount )
{
nIndex = GetOldestItem( *m_pnUserItemCount - 1, false );
if( -1 == nIndex )
{
return false;
}
(void)DeleteItem( nIndex );
}
for( i = *m_pnUserItemCount; i > 0; i-- )
{
CopyItem( i - 1, i );
}
if( m_nCmpSize > 0 )
memcpy( GetArrayOffset( 0 ), pszItemData, m_nItemSize );
else //文字列として受け取る。
{
p = GetArrayOffset( 0 );
strncpy( p, pszItemData, m_nItemSize );
p[ m_nItemSize - 1 ] = '\0';
}
//(void)SetFavorite( 0, true );
//内部処理しないとだめ。
if( m_pbUserItemFavorite ) m_pbUserItemFavorite[0] = false;
*m_pnUserItemCount += 1;
reconfigure:
//お気に入りを表示内に移動する。
if( m_pnUserViewCount )
{
(void)ChangeViewCount( *m_pnUserViewCount );
}
return true;
}
/*
アイテムを検索する。
*/
int CRecent::FindItem( const char *pszItemData )
{
int i;
const char *p, *q;
if( ! IsAvailable() ) return -1;
if( NULL == pszItemData ) return -1;
//p = &pszItemData[m_nOffset];
p = pszItemData;
for( i = 0; i < *m_pnUserItemCount; i++ )
{
q = GetArrayOffset( i ) + m_nOffset;
switch( m_nCmpType )
{
case RECENT_CMP_STRICMP: //stricmp
if( stricmp( p, q ) == 0 ) return i;
break;
case RECENT_CMP_STRNCMP: //strncmp
if( strncmp( p, q, m_nCmpSize ) == 0 ) return i;
break;
case RECENT_CMP_STRNICMP: //strnicmp
if( strnicmp( p, q, m_nCmpSize ) == 0 ) return i;
break;
case RECENT_CMP_MEMCMP: //memcmp
if( memcmp( p, q, m_nCmpSize ) == 0 ) return i;
break;
case RECENT_CMP_MEMICMP: //memicmp
if( memicmp( p, q, m_nCmpSize ) == 0 ) return i;
break;
case RECENT_CMP_STRCMP: //strcmp
default:
if( strcmp( p, q ) == 0 ) return i;
break;
}
}
return -1;
}
bool CRecent::EasyCreate( int nRecentType )
{
switch( nRecentType )
{
case RECENT_FOR_FILE: //ファイル
return Create(
(char*)m_pShareData->m_fiMRUArr,
&m_pShareData->m_nMRUArrNum,
m_pShareData->m_bMRUArrFavorite,
MAX_MRU,
&(m_pShareData->m_Common.m_nMRUArrNum_MAX),
sizeof( FileInfo ),
(int)(&((FileInfo*)0)->m_szPath[0]),
sizeof( ((FileInfo*)0)->m_szPath ), //_MAX_PATH
RECENT_CMP_STRICMP
);
case RECENT_FOR_FOLDER: //フォルダ
return Create(
(char*)m_pShareData->m_szOPENFOLDERArr,
&m_pShareData->m_nOPENFOLDERArrNum,
m_pShareData->m_bOPENFOLDERArrFavorite,
MAX_OPENFOLDER,
&(m_pShareData->m_Common.m_nOPENFOLDERArrNum_MAX),
sizeof( m_pShareData->m_szOPENFOLDERArr[0] ), //_MAX_PATH
0,
0, //AppendItemのデータは文字列
RECENT_CMP_STRICMP
);
case RECENT_FOR_SEARCH: //検索
return Create(
(char*)m_pShareData->m_szSEARCHKEYArr,
&m_pShareData->m_nSEARCHKEYArrNum,
NULL /*m_pShareData->m_bSEARCHKEYArrFavorite*/,
MAX_SEARCHKEY,
NULL,
sizeof( m_pShareData->m_szSEARCHKEYArr[0] ), //_MAX_PATH
0,
0, //AppendItemのデータは文字列
RECENT_CMP_STRCMP
);
case RECENT_FOR_REPLACE: //置換
return Create(
(char*)m_pShareData->m_szREPLACEKEYArr,
&m_pShareData->m_nREPLACEKEYArrNum,
NULL /*m_pShareData->m_bREPLACEKEYArrFavorite*/,
MAX_REPLACEKEY,
NULL,
sizeof( m_pShareData->m_szREPLACEKEYArr[0] ), //_MAX_PATH
0,
0, //AppendItemのデータは文字列
RECENT_CMP_STRCMP
);
case RECENT_FOR_GREP_FILE: //GREPファイル
return Create(
(char*)m_pShareData->m_szGREPFILEArr,
&m_pShareData->m_nGREPFILEArrNum,
NULL /*m_pShareData->m_bGREPFILEArrFavorite*/,
MAX_GREPFILE,
NULL,
sizeof( m_pShareData->m_szGREPFILEArr[0] ), //_MAX_PATH
0,
0, //AppendItemのデータは文字列
RECENT_CMP_STRICMP
);
case RECENT_FOR_GREP_FOLDER: //GREPフォルダ
return Create(
(char*)m_pShareData->m_szGREPFOLDERArr,
&m_pShareData->m_nGREPFOLDERArrNum,
NULL /*m_pShareData->m_bGREPFOLDERArrFavorite*/,
MAX_GREPFOLDER,
NULL,
sizeof( m_pShareData->m_szGREPFOLDERArr[0] ), //_MAX_PATH
0,
0, //AppendItemのデータは文字列
RECENT_CMP_STRICMP
);
case RECENT_FOR_CMD: //コマンド
return Create(
(char*)m_pShareData->m_szCmdArr,
&m_pShareData->m_nCmdArrNum,
NULL /*m_pShareData->m_bCmdArrFavorite*/,
MAX_CMDARR,
NULL,
sizeof( m_pShareData->m_szCmdArr[0] ), //MAX_CMDLEN
0,
0, //AppendItemのデータは文字列
RECENT_CMP_STRCMP
);
//@@@ 2003.06.28 MIK 追加
case RECENT_FOR_EDITNODE: //ウインドウリスト
return Create(
(char*)m_pShareData->m_pEditArr,
&m_pShareData->m_nEditArrNum,
NULL,
MAX_EDITWINDOWS,
NULL,
sizeof( m_pShareData->m_pEditArr[0] ),
(int)(&((EditNode*)0)->m_hWnd),
sizeof( ((EditNode*)0)->m_hWnd ), //sizeof(HWND)
RECENT_CMP_MEMCMP
);
case RECENT_FOR_TAGJUMP_KEYWORD: //タグジャンプキーワード 2005.04.03 MIK
return Create(
(char*)m_pShareData->m_szTagJumpKeywordArr,
&m_pShareData->m_nTagJumpKeywordArrNum,
NULL /*m_pShareData->m_bTagJumpKeywordArrFavorite*/,
MAX_TAGJUMP_KEYWORD,
NULL,
sizeof( m_pShareData->m_szTagJumpKeywordArr[0] ), //_MAX_PATH
0,
0, //AppendItemのデータは文字列
RECENT_CMP_STRCMP
);
default:
return false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -