#define	STRICT
#include	<windows.h>
#include	<windowsx.h>
#include	<commctrl.h>
#include	<tchar.h>
#include	"kctrl.h"
#include	"controls.h"
#include	"basewin.h"
#include	"resource.h"
#include	"dialog.h"

extern	DWORD	AppVersion ;
extern	DWORD	DllVersion ;
extern	DWORD	g_dwTabSize ;
extern	DWORD	g_dwHMargin ;
extern	TCHAR	g_szEditor[ MAX_PATH ] ;

extern	void	ShowSIP( BOOL bShow ) ;

/*
 * リストボックス用の固定ピッチフォントを作成する
 */
HFONT
CreateListboxFont()
{
	LOGFONT         lf ;

	/* フォントを取得する */
	memset( &lf, 0, sizeof lf ) ;
	lf.lfPitchAndFamily = FIXED_PITCH | FF_MODERN ;
	lf.lfCharSet = 128 ;
	lf.lfHeight = 13 ;
	return CreateFontIndirect( &lf ) ;
}

/*
 * セットアップダイアログ
 */
class SetupDialog : public Window {
	HINSTANCE	m_hInst ;

public:
	SetupDialog( HINSTANCE hInst ) { m_hInst = hInst ; }

	void	WMCreate( HWND hDlg ) ;
	LRESULT	WMCommand( HWND hDlg, UINT msg, WPARAM wp, LPARAM lp ) ;
} ;

void
SetupDialog::WMCreate( HWND hDlg )
{
	SetDlgItemInt( hDlg, IDC_TABSIZE, g_dwTabSize, FALSE ) ;
	SetDlgItemInt( hDlg, IDC_HMARGIN, g_dwHMargin, FALSE ) ;
	SetDlgItemText( hDlg, IDC_EDITOR, g_szEditor ) ;
}

LRESULT
SetupDialog::WMCommand( HWND hDlg, UINT msg, WPARAM wp, LPARAM lp )
{
	DWORD	ret = 0 ;
	DWORD	dwTabSize, dwHMargin ;

	switch ( GET_WM_COMMAND_ID( wp, lp ) ) {
	case IDC_TABSIZE:
	case IDC_HMARGIN:
	case IDC_EDITOR:
		if ( GET_WM_COMMAND_CMD( wp, lp ) == EN_SETFOCUS ) {
			ShowSIP( TRUE ) ;
		}
		break ;
	case IDOK:
		ret = SETUP_RET_NORMAL ;
		/* TABサイズを取得する */
		dwTabSize = GetDlgItemInt( hDlg, IDC_TABSIZE, NULL, FALSE ) ;
		if ( !dwTabSize ) {
			MessageBeep( 0xFFFFFFFF ) ;
			break ;
		}
		/* HMarginサイズを取得する */
		dwHMargin = GetDlgItemInt( hDlg, IDC_HMARGIN, NULL, FALSE ) ;
		/* エディタープログラム名を取得する */
		GetDlgItemText( hDlg, IDC_EDITOR, g_szEditor, sizeof g_szEditor / sizeof *g_szEditor ) ;
		g_dwTabSize = dwTabSize ;
		g_dwHMargin = dwHMargin ;
		/* 画面構成の変更チェック */
		if ( (g_dwTabSize != dwTabSize) || (g_dwTabSize != dwHMargin) ) {
			/* 画面構成の変更が必要 */
			ret |= SETUP_RET_CHANGE ;
		}
		//
	case IDCANCEL:
		/* ダイアログ終了 */
		ShowSIP( FALSE ) ;
		EndDialog( hDlg, ret ) ;
		return TRUE ;
	}
	return 0 ;
}

BOOL
SetupDialogExec( HINSTANCE hInst, HWND hWnd, LPDWORD pResult )
{
	DWORD			ret ;
	SetupDialog		*pDialog = new SetupDialog( hInst ) ;

	ret = DialogBoxParam( hInst, MAKEINTRESOURCE(IDD_DLG_SETUP), hWnd, (DLGPROC) DlgProc, (LPARAM) pDialog ) ;
	if ( !ret ) {
		delete pDialog ;
		return FALSE ;
	}
	*pResult = ret ;
	delete pDialog ;
	return TRUE ;
}
