Skip to content

Commit

Permalink
Merge 931b07e into 17bcab7
Browse files Browse the repository at this point in the history
  • Loading branch information
berryzplus authored Sep 12, 2020
2 parents 17bcab7 + 931b07e commit 51ca690
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 86 deletions.
23 changes: 5 additions & 18 deletions sakura_core/cmd/CViewCommander_CustMenu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,33 +23,21 @@
/* 右クリックメニュー */
void CViewCommander::Command_MENU_RBUTTON( void )
{
int nId;
int nLength;
// HGLOBAL hgClip;
// char* pszClip;
int i;
/* ポップアップメニュー(右クリック) */
nId = m_pCommanderView->CreatePopUpMenu_R();
auto nId = m_pCommanderView->CreatePopUpMenu_R();
if( 0 == nId ){
return;
}
switch( nId ){
case IDM_COPYDICINFO:
{
nLength = m_pCommanderView->m_cTipWnd.m_cInfo.GetStringLength();
const WCHAR* pszStr = m_pCommanderView->m_cTipWnd.m_cInfo.GetStringPtr();
WCHAR* pszWork = _wcsdup( pszStr );
CNativeW cInfo = m_pCommanderView->m_cTipWnd.GetInfoText();

// 見た目と同じように、\n を CR+LFへ変換する
for( i = 0; i < nLength ; ++i){
if( pszWork[i] == L'\\' && pszWork[i + 1] == L'n'){
pszWork[i] = WCODE::CR;
pszWork[i + 1] = WCODE::LF;
}
}
cInfo.Replace( L"\n", L"\r\n" );

/* クリップボードにデータを設定 */
m_pCommanderView->MySetClipboardData( pszWork, nLength, false );
free( pszWork );
m_pCommanderView->MySetClipboardData( cInfo.GetStringPtr(), cInfo.GetStringLength(), false );

break;
}
Expand All @@ -68,7 +56,6 @@ void CViewCommander::Command_MENU_RBUTTON( void )

default:
/* コマンドコードによる処理振り分け */
// HandleCommand( nId, true, 0, 0, 0, 0 );
::PostMessageCmd( GetMainWindow(), WM_COMMAND, MAKELONG( nId, 0 ), (LPARAM)NULL );
break;
}
Expand Down
118 changes: 55 additions & 63 deletions sakura_core/view/CEditView_Search.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -106,85 +106,77 @@ BOOL CEditView::KeyWordHelpSearchDict( LID_SKH nID, POINT* po, RECT* rc )
*/
BOOL CEditView::KeySearchCore( const CNativeW* pcmemCurText )
{
CNativeW* pcmemRefKey;
int nCmpLen = STRNCMP_MAX; // 2006.04.10 fon
int nLine; // 2006.04.10 fon
/* tooltipバッファ初期化 */
m_cTipWnd.m_cInfo.Clear();

m_cTipWnd.m_cInfo.SetString( L"" ); /* tooltipバッファ初期化 */
/* 1行目にキーワード表示の場合 */
if(m_pTypeData->m_bUseKeyHelpKeyDisp){ /* キーワードも表示する */ // 2006.04.10 fon
m_cTipWnd.m_cInfo.AppendString( L"[ " );
m_cTipWnd.m_cInfo.AppendString( pcmemCurText->GetStringPtr() );
m_cTipWnd.m_cInfo.AppendString( L" ]" );
if( m_pTypeData->m_bUseKeyHelpKeyDisp ){ /* キーワードも表示する */ // 2006.04.10 fon
m_cTipWnd.m_cInfo.AppendStringF( L"[ %s ]", pcmemCurText->GetStringPtr() );
}
/* 途中まで一致を使う場合 */
if(m_pTypeData->m_bUseKeyHelpPrefix)
nCmpLen = wcslen( pcmemCurText->GetStringPtr() ); // 2006.04.10 fon

// 一致確認する最大文字数、途中まで一致を使う場合は短くする
const int nCmpLen = m_pTypeData->m_bUseKeyHelpPrefix
? std::min( STRNCMP_MAX, (int)::wcslen( pcmemCurText->GetStringPtr() ) )
: STRNCMP_MAX;

// 検索前にヒットフラグをクリアしておく
m_cTipWnd.m_KeyWasHit = FALSE;
for(int i =0 ; i < m_pTypeData->m_nKeyHelpNum; i++){ //最大数:MAX_KEYHELP_FILE

// 辞書ファイルの冊数、最大値は MAX_KEYHELP_FILE 。
const int nKeyHelpNum = std::min(m_pTypeData->m_nKeyHelpNum, (int)MAX_KEYHELP_FILE);

for( int i = 0; i < nKeyHelpNum; i++ ){
if( m_pTypeData->m_KeyHelpArr[i].m_bUse ){
// 2006.04.10 fon (nCmpLen,pcmemRefKey,nSearchLine)引数を追加
CNativeW* pcmemRefText;
int nSearchResult=m_cDicMgr.CDicMgr::Search(
CNativeW* pcmemRefKey = NULL;
CNativeW* pcmemRefText = NULL;
int nLine;
const auto& szPath = m_pTypeData->m_KeyHelpArr[i].m_szPath;
const int nSearchResult = m_cDicMgr.CDicMgr::Search(
pcmemCurText->GetStringPtr(),
nCmpLen,
&pcmemRefKey,
&pcmemRefText,
m_pTypeData->m_KeyHelpArr[i].m_szPath,
szPath,
&nLine
);
if(nSearchResult){
/* 該当するキーがある */
LPWSTR pszWork = pcmemRefText->GetStringPtr();

/* 該当するキーがある */
if( nSearchResult ){
// バッファが空でなければseparator挿入
if( m_cTipWnd.GetInfoText().GetStringLength() != 0 ){
m_cTipWnd.m_cInfo.AppendString( L"\n--------------------\n" );
}

/* 有効になっている辞書を全部なめて、ヒットの都度説明の継ぎ増し */
if(m_pTypeData->m_bUseKeyHelpAllSearch){ /* ヒットした次の辞書も検索 */ // 2006.04.10 fon
/* バッファに前のデータが詰まっていたらseparator挿入 */
if(m_cTipWnd.m_cInfo.GetStringLength() != 0)
m_cTipWnd.m_cInfo.AppendString( LS(STR_ERR_DLGEDITVW5) );
else
m_cTipWnd.m_cInfo.AppendString( LS(STR_ERR_DLGEDITVW6) ); /* 先頭の場合 */
/* 辞書のパス挿入 */
{
WCHAR szFile[MAX_PATH];
// 2013.05.08 表示するのはファイル名(拡張子なし)のみにする
_wsplitpath( m_pTypeData->m_KeyHelpArr[i].m_szPath, NULL, NULL, szFile, NULL );
m_cTipWnd.m_cInfo.AppendString( szFile );
}
m_cTipWnd.m_cInfo.AppendString( L"\n" );
/* 前方一致でヒットした単語を挿入 */
if(m_pTypeData->m_bUseKeyHelpPrefix){ /* 選択範囲で前方一致検索 */
m_cTipWnd.m_cInfo.AppendString( pcmemRefKey->GetStringPtr() );
m_cTipWnd.m_cInfo.AppendString( L" >>\n" );
}/* 調査した「意味」を挿入 */
m_cTipWnd.m_cInfo.AppendString( pszWork );
delete pcmemRefText;
delete pcmemRefKey; // 2006.07.02 genta
/* タグジャンプ用の情報を残す */
if(!m_cTipWnd.m_KeyWasHit){
m_cTipWnd.m_nSearchDict=i; /* 辞書を開くとき最初にヒットした辞書を開く */
m_cTipWnd.m_nSearchLine=nLine;
m_cTipWnd.m_KeyWasHit = TRUE;
}
if( m_pTypeData->m_bUseKeyHelpAllSearch ){ /* ヒットした次の辞書も検索 */
/* 複数辞書をなめるので辞書のパス挿入、表示するのはファイル名(拡張子なし)のみ */
WCHAR szFile[MAX_PATH];
_wsplitpath( szPath, NULL, NULL, szFile, NULL );
m_cTipWnd.m_cInfo.AppendStringF( L"■%s\n", szFile );
}

/* 前方一致でヒットした単語を挿入 */
if( m_pTypeData->m_bUseKeyHelpPrefix ){ /* 選択範囲で前方一致検索 */
m_cTipWnd.m_cInfo.AppendStringF(L"%s >>\n", pcmemRefKey->GetStringPtr() );
}
else{ /* 最初のヒット項目のみ返す場合 */
/* キーワードが入っていたらseparator挿入 */
if(m_cTipWnd.m_cInfo.GetStringLength() != 0)
m_cTipWnd.m_cInfo.AppendString( L"\n--------------------\n" );

/* 前方一致でヒットした単語を挿入 */
if(m_pTypeData->m_bUseKeyHelpPrefix){ /* 選択範囲で前方一致検索 */
m_cTipWnd.m_cInfo.AppendString( pcmemRefKey->GetStringPtr() );
m_cTipWnd.m_cInfo.AppendString( L" >>\n" );
}

/* 調査した「意味」を挿入 */
m_cTipWnd.m_cInfo.AppendString( pszWork );
delete pcmemRefText;
delete pcmemRefKey; // 2006.07.02 genta
/* 調査した「意味」を挿入 */
m_cTipWnd.m_cInfo.AppendString( UnEscapeInfoText( *pcmemRefText ) );

/* 最初のヒット項目のみ返す場合、または、初回ヒットの場合 */
if( !m_pTypeData->m_bUseKeyHelpAllSearch
|| !m_cTipWnd.m_KeyWasHit ){
/* タグジャンプ用の情報を残す */
m_cTipWnd.m_nSearchDict=i;
m_cTipWnd.m_nSearchLine=nLine;
m_cTipWnd.m_nSearchDict = i;
m_cTipWnd.m_nSearchLine = nLine;
m_cTipWnd.m_KeyWasHit = TRUE;
}

delete pcmemRefText;
delete pcmemRefKey;

/* 最初のヒット項目のみ返す場合 */
if( !m_pTypeData->m_bUseKeyHelpAllSearch ){
return TRUE;
}
}
Expand Down
17 changes: 13 additions & 4 deletions sakura_core/window/CTipWnd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,14 @@
// ダミー文字列
static constexpr WCHAR szDummy[] = { L" " };

/* Tipの内容データを設定するためにエスケープ解除を行う */
const WCHAR* UnEscapeInfoText( CNativeW& cInfo )
{
cInfo.Replace( L"\\n", L"\n" );
cInfo.Replace( L"\\x53", L"\\" );
return cInfo.GetStringPtr();
}

/* CTipWndクラス デストラクタ */
CTipWnd::CTipWnd()
: CWnd(L"::CTipWnd")
Expand Down Expand Up @@ -105,6 +113,7 @@ void CTipWnd::Show( int nX, int nY, const WCHAR* szText, RECT* pRect )

if( NULL != szText ){
m_cInfo.SetString( szText );
UnEscapeInfoText( m_cInfo );
}

hdc = ::GetDC( GetHwnd() );
Expand Down Expand Up @@ -166,7 +175,7 @@ void CTipWnd::ComputeWindowSize(
const bool isEndOfText = ( pszText[i] == '\0' );
// iの位置にNUL終端、または"\n"がある場合
if ( isEndOfText
|| ( i + 1 < cchText && pszText[i] == '\\' && pszText[i + 1] == 'n' ) ) {
|| pszText[i] == '\n' ) {
// 計測結果を格納する矩形
CMyRect rc;
// 計測対象の文字列がブランクでない場合
Expand Down Expand Up @@ -197,7 +206,7 @@ void CTipWnd::ComputeWindowSize(
}

// 次の行の開始位置を設定する
nLineBgn = i + 2; // "\\n" の文字数
nLineBgn = i + 1; // "\n" の文字数
i = nLineBgn;
}else{
// 現在位置の文字がTCHAR単位で何文字に当たるか計算してインデックスを進める
Expand Down Expand Up @@ -247,7 +256,7 @@ void CTipWnd::DrawTipText(
const bool isEndOfText = ( pszText[i] == '\0' );
// iの位置にNUL終端、または"\n"がある場合
if ( isEndOfText
|| ( i + 1 < cchText && pszText[i] == '\\' && pszText[i + 1] == 'n' ) ) {
|| pszText[i] == '\n' ) {
int nHeight;
// 計測対象の文字列がブランクでない場合
if ( 0 < i - nLineBgn ) {
Expand All @@ -269,7 +278,7 @@ void CTipWnd::DrawTipText(
}

// 次の行の開始位置を設定する
nLineBgn = i + 2; // "\\n" の文字数
nLineBgn = i + 1; // "\n" の文字数
i = nLineBgn;
}else{
// 現在位置の文字がTCHAR単位で何文字に当たるか計算してインデックスを進める
Expand Down
11 changes: 10 additions & 1 deletion sakura_core/window/CTipWnd.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@
class CTipWnd;

#include "CWnd.h"
#include "mem/CMemory.h"
#include "mem/CNativeW.h"

/*-----------------------------------------------------------------------
クラスの宣言
-----------------------------------------------------------------------*/
Expand Down Expand Up @@ -74,5 +75,13 @@ class CTipWnd final : public CWnd

/* 仮想関数 メッセージ処理 詳しくは実装を参照 */
LRESULT OnPaint(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) override;/* 描画処理 */

public:
/* Tipの内容データを取得する */
const CNativeW& GetInfoText() const { return m_cInfo; }
};

/* Tipの内容データを設定するためにエスケープ解除を行う */
const WCHAR* UnEscapeInfoText( CNativeW& cInfo );

#endif /* SAKURA_CTIPWND_E3DB6CF2_888C_42F5_953E_D923221F0B16_H_ */

0 comments on commit 51ca690

Please sign in to comment.