⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cdlgfavorite.cpp

📁 日本的开源编辑器源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*!	@file
	@brief お気に入り設定ダイアログボックス

	@author MIK
	$Revision: 1.5 $
*/
/*
	Copyright (C) 2003, MIK

	This software is provided 'as-is', without any express or implied
	warranty. In no event will the authors be held liable for any damages
	arising from the use of this software.

	Permission is granted to anyone to use this software for any purpose, 
	including commercial applications, and to alter it and redistribute it 
	freely, subject to the following restrictions:

		1. The origin of this software must not be misrepresented;
		   you must not claim that you wrote the original software.
		   If you use this software in a product, an acknowledgment
		   in the product documentation would be appreciated but is
		   not required.

		2. Altered source versions must be plainly marked as such, 
		   and must not be misrepresented as being the original software.

		3. This notice may not be removed or altered from any source
		   distribution.
*/



#include <stdio.h>
#include "sakura_rc.h"
#include "global.h"
#include "funccode.h"
#include "mymessage.h"
#include "CDialog.h"
#include "CDlgFavorite.h"
#include "etc_uty.h"
#include "debug.h"
#include "my_icmp.h"

#include "sakura.hh"
const DWORD p_helpids[] = {
	IDC_TAB_FAVORITE,				HIDC_TAB_FAVORITE,				//タブ
	IDC_LIST_FAVORITE_FILE,			HIDC_LIST_FAVORITE_FILE,		//ファイル
	IDC_LIST_FAVORITE_FOLDER,		HIDC_LIST_FAVORITE_FOLDER,		//フォルダ
	IDC_LIST_FAVORITE_SEARCH,		HIDC_LIST_FAVORITE_SEARCH,		//検索
	IDC_LIST_FAVORITE_REPLACE,		HIDC_LIST_FAVORITE_REPLACE,		//置換
	IDC_LIST_FAVORITE_GREP_FILE,	HIDC_LIST_FAVORITE_GREPFILE,	//GREPファイル
	IDC_LIST_FAVORITE_GREP_FOLDER,	HIDC_LIST_FAVORITE_GREPFOLDER,	//GREPフォルダ
	IDC_LIST_FAVORITE_CMD,			HIDC_LIST_FAVORITE_CMD,			//コマンド
	IDOK,							HIDC_FAVORITE_IDOK,				//OK
	IDCANCEL,						HIDC_FAVORITE_IDCANCEL,			//キャンセル
	IDC_BUTTON_HELP,				HIDC_BUTTON_FAVORITE_HELP,		//ヘルプ
//	IDC_STATIC,						-1,
	0, 0
};



//SDKにしか定義されていない。
#ifndef	ListView_SetCheckState
//#if (_WIN32_IE >= 0x0300)
#define ListView_SetCheckState(hwndLV, i, fCheck) \
  ListView_SetItemState(hwndLV, i, INDEXTOSTATEIMAGEMASK((fCheck)?2:1), LVIS_STATEIMAGEMASK)
//#endif
#endif



CDlgFavorite::CDlgFavorite()
{
	int	i;

	m_nCurrentTab = 0;
	strcpy( m_szMsg, "" );

	{
		memset( p_favorite_info, 0, sizeof( p_favorite_info ) );

		i = 0;
		p_favorite_info[i].m_pRecent    = &m_cRecentFile;
		p_favorite_info[i].m_pszCaption = "ファイル";
		p_favorite_info[i].m_nId        = IDC_LIST_FAVORITE_FILE;
		p_favorite_info[i].m_bHaveFavorite = true;
		p_favorite_info[i].m_bHaveView  = true;

		i++;
		p_favorite_info[i].m_pRecent    = &m_cRecentFolder;
		p_favorite_info[i].m_pszCaption = "フォルダ";
		p_favorite_info[i].m_nId        = IDC_LIST_FAVORITE_FOLDER;
		p_favorite_info[i].m_bHaveFavorite = true;
		p_favorite_info[i].m_bHaveView  = true;

		i++;
		p_favorite_info[i].m_pRecent    = &m_cRecentSearch;
		p_favorite_info[i].m_pszCaption = "検索";
		p_favorite_info[i].m_nId        = IDC_LIST_FAVORITE_SEARCH;
		p_favorite_info[i].m_bHaveFavorite = false;
		p_favorite_info[i].m_bHaveView  = false;

		i++;
		p_favorite_info[i].m_pRecent    = &m_cRecentReplace;
		p_favorite_info[i].m_pszCaption = "置換";
		p_favorite_info[i].m_nId        = IDC_LIST_FAVORITE_REPLACE;
		p_favorite_info[i].m_bHaveFavorite = false;
		p_favorite_info[i].m_bHaveView  = false;

		i++;
		p_favorite_info[i].m_pRecent    = &m_cRecentGrepFile;
		p_favorite_info[i].m_pszCaption = "GREPファイル";
		p_favorite_info[i].m_nId        = IDC_LIST_FAVORITE_GREP_FILE;
		p_favorite_info[i].m_bHaveFavorite = false;
		p_favorite_info[i].m_bHaveView  = false;

		i++;
		p_favorite_info[i].m_pRecent    = &m_cRecentGrepFolder;
		p_favorite_info[i].m_pszCaption = "GREPフォルダ";
		p_favorite_info[i].m_nId        = IDC_LIST_FAVORITE_GREP_FOLDER;
		p_favorite_info[i].m_bHaveFavorite = false;
		p_favorite_info[i].m_bHaveView  = false;

		i++;
		p_favorite_info[i].m_pRecent    = &m_cRecentCmd;
		p_favorite_info[i].m_pszCaption = "コマンド";
		p_favorite_info[i].m_nId        = IDC_LIST_FAVORITE_CMD;
		p_favorite_info[i].m_bHaveFavorite = false;
		p_favorite_info[i].m_bHaveView  = false;

		i++;
		p_favorite_info[i].m_pRecent    = NULL;
		p_favorite_info[i].m_pszCaption = NULL;
		p_favorite_info[i].m_nId        = -1;
		p_favorite_info[i].m_bHaveFavorite = false;
		p_favorite_info[i].m_bHaveView  = false;

		/* これ以上増やすときはテーブルサイズも書き換えてね */
	}

	{
		//ファイル
		(void)m_cRecentFile.EasyCreate( RECENT_FOR_FILE );

		//フォルダ
		(void)m_cRecentFolder.EasyCreate( RECENT_FOR_FOLDER );

		//検索
		(void)m_cRecentSearch.EasyCreate( RECENT_FOR_SEARCH );

		//置換
		(void)m_cRecentReplace.EasyCreate( RECENT_FOR_REPLACE );

		//GREPファイル
		(void)m_cRecentGrepFile.EasyCreate( RECENT_FOR_GREP_FILE );

		//GREPフォルダ
		(void)m_cRecentGrepFolder.EasyCreate( RECENT_FOR_GREP_FOLDER );

		//コマンド
		(void)m_cRecentCmd.EasyCreate( RECENT_FOR_CMD );
	}
}

CDlgFavorite::~CDlgFavorite()
{
	CRecent	*pRecent;
	int		nTab;

	for( nTab = 0; NULL != (pRecent = p_favorite_info[nTab].m_pRecent); nTab++ )
	{
		pRecent->Terminate();
	}
}

/* モーダルダイアログの表示 */
int CDlgFavorite::DoModal(
	HINSTANCE	hInstance,
	HWND		hwndParent,
	LPARAM		lParam
)
{
	return (int)CDialog::DoModal( hInstance, hwndParent, IDD_FAVORITE, lParam );
}

/* ダイアログデータの設定 */
void CDlgFavorite::SetData( void )
{
	int		nTab;

	for( nTab = 0; NULL != p_favorite_info[nTab].m_pRecent; nTab++ )
	{
		SetDataOne( nTab, 0 );
	}

	::SetDlgItemText( m_hWnd, IDC_STATIC_FAVORITE_MSG, "" );

	return;
}

/* ダイアログデータの設定 */
void CDlgFavorite::SetDataOne( int nIndex, int nCurrentIndex )
{
	HWND	hwndList;
	int		i;
	char	tmp[1024];
	int		nViewCount;
	const char	*p;
	CRecent	*pRecent;
	LV_ITEM	lvi;
	int		nNewFocus = -1;

	pRecent = p_favorite_info[nIndex].m_pRecent;

	/* リスト */
	hwndList = ::GetDlgItem( m_hWnd, p_favorite_info[nIndex].m_nId );
	ListView_DeleteAllItems( hwndList );  /* リストを空にする */

	nViewCount = pRecent->GetViewCount();
	p_favorite_info[nIndex].m_nViewCount = nViewCount;

	for( i = 0; i < pRecent->GetItemCount(); i++ )
	{
		wsprintf( tmp, "%s", (i < nViewCount) ? " " : "(非表示)" );
		lvi.mask     = LVIF_TEXT | LVIF_PARAM;
		lvi.pszText  = tmp;
		lvi.iItem    = i;
		lvi.iSubItem = 0;
		lvi.lParam   = 0;
		ListView_InsertItem( hwndList, &lvi );

		p = pRecent->GetDataOfItem( i );
		wsprintf( tmp, "%s", p ? p : "" );
		lvi.mask     = LVIF_TEXT;
		lvi.iItem    = i;
		lvi.iSubItem = 1;
		lvi.pszText  = tmp;
		ListView_SetItem( hwndList, &lvi );

		if( p_favorite_info[nIndex].m_bHaveFavorite )
		{
			ListView_SetCheckState( hwndList, i, (BOOL)pRecent->IsFavorite( i ) );
		}
		ListView_SetItemState( hwndList, i, 0, LVIS_SELECTED | LVIS_FOCUSED );

		if( i == nCurrentIndex ) nNewFocus = i;
	}

	//アイテムがあってどれも非選択なら最初を選択する。
	if( i > 0 && -1 != nCurrentIndex && nNewFocus == -1 )
	{
		nNewFocus = 0;
	}

	if( -1 != nNewFocus )
	{
		ListView_SetItemState( hwndList, nNewFocus, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED );
		ListView_EnsureVisible( hwndList, nNewFocus, FALSE );
	}

	return;
}

/* ダイアログデータの取得 */
/* TRUE==正常  FALSE==入力エラー */
int CDlgFavorite::GetData( void )
{
	HWND	hwndList;
	int		nCount;
	int		i;
	BOOL	bret;
	CRecent	*pRecent;
	int		nTab;

	for( nTab = 0; NULL != (pRecent = p_favorite_info[nTab].m_pRecent); nTab++ )
	{
		if( p_favorite_info[nTab].m_bHaveFavorite )
		{
			hwndList = GetDlgItem( m_hWnd, p_favorite_info[nTab].m_nId );

			nCount = ListView_GetItemCount( hwndList );

			//お気に入りフラグを更新する。
			for( i = 0; i < nCount; i++ )
			{
				bret = ListView_GetCheckState( hwndList, i );
				(void)pRecent->SetFavorite( i, bret ? true : false );
			}

			//リストを更新する。
			pRecent->UpdateView();
		}
	}

	return TRUE;
}

BOOL CDlgFavorite::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam )
{
	HWND		hwndList;
	HWND		hwndBaseList;
	HWND		hwndTab;
	TCITEM		tcitem;
	LV_COLUMN	col;
	RECT		rc;
	CRecent		*pRecent;
	int			nTab;
	POINT		po;
	long		lngStyle;

	m_hWnd = hwndDlg;

	hwndTab = ::GetDlgItem( hwndDlg, IDC_TAB_FAVORITE );
	TabCtrl_DeleteAllItems( hwndTab );

	//リストビューの表示位置を取得する。
	m_nCurrentTab = 0;
	hwndBaseList = ::GetDlgItem( hwndDlg, p_favorite_info[0].m_nId );
	{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -