📄 config.c
字号:
/*
* This file is part of Saenaru.
*
* Copyright (C) 2003 Hye-Shik Chang. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Perky$
*/
/*++
Copyright (c) 1990-1998 Microsoft Corporation, All Rights Reserved
Module Name:
CONFIG.c
++*/
#include "windows.h"
#include "immdev.h"
#include "saenaru.h"
#include "prsht.h"
#include "resource.h"
#include "malloc.h"
#define MAX_PAGES 3
/**********************************************************************/
/* */
/* AddPage() */
/* */
/**********************************************************************/
void PASCAL AddPage(LPPROPSHEETHEADER ppsh, UINT id, DLGPROC pfn)
{
if (ppsh->nPages < MAX_PAGES) {
PROPSHEETPAGE psp;
psp.dwSize = sizeof(psp);
psp.dwFlags = PSP_DEFAULT;
psp.hInstance = hInst;
psp.pszTemplate = MAKEINTRESOURCE(id);
psp.pfnDlgProc = pfn;
psp.lParam = 0;
ppsh->phpage[ppsh->nPages] = CreatePropertySheetPage(&psp);
if (ppsh->phpage[ppsh->nPages])
ppsh->nPages++;
}
}
/**********************************************************************/
/* */
/* ImeConfigure() */
/* */
/**********************************************************************/
BOOL WINAPI ImeConfigure(HKL hKL,HWND hWnd, DWORD dwMode, LPVOID lpData)
{
HPROPSHEETPAGE rPages[MAX_PAGES];
PROPSHEETHEADER psh;
ImeLog(LOGF_API, TEXT("ImeConfigure"));
psh.dwSize = sizeof(psh);
psh.dwFlags = PSH_PROPTITLE;
psh.hwndParent = hWnd;
psh.hInstance = hInst;
psh.pszCaption = MAKEINTRESOURCE(IDS_CONFIGNAME);
psh.nPages = 0;
psh.nStartPage = 0;
psh.phpage = rPages;
switch (dwMode)
{
case IME_CONFIG_GENERAL:
AddPage(&psh, DLG_GENERAL, GeneralDlgProc);
AddPage(&psh, DLG_ABOUT, AboutDlgProc);
#ifdef DEBUG
AddPage(&psh, DLG_DEBUG, DebugOptionDlgProc);
#endif
PropertySheet(&psh);
break;
default:
break;
}
return TRUE;
}
/**********************************************************************/
/* */
/* AboutConfigure() */
/* */
/**********************************************************************/
INT_PTR CALLBACK AboutDlgProc(HWND hDlg, UINT message , WPARAM wParam, LPARAM lParam)
{
NMHDR FAR *lpnm;
LPPROPSHEETPAGE lpPropSheet = (LPPROPSHEETPAGE)(GetWindowLongPtr(hDlg, DWLP_USER));
switch(message)
{
case WM_NOTIFY:
lpnm = (NMHDR FAR *)lParam;
switch(lpnm->code)
{
case PSN_SETACTIVE:
break;
case PSN_KILLACTIVE:
break;
case PSN_APPLY:
break;
case PSN_RESET:
break;
case PSN_HELP:
break;
default:
return FALSE;
}
break;
case WM_INITDIALOG:
SetWindowLongPtr(hDlg, DWLP_USER, (LONG_PTR) lParam);
lpPropSheet = (LPPROPSHEETPAGE)lParam;
break;
case WM_DESTROY:
break;
case WM_HELP:
break;
case WM_CONTEXTMENU: // right mouse click
break;
case WM_COMMAND:
break;
default:
return FALSE;
}
return TRUE;
}
/**********************************************************************/
/* */
/* GeneralConfigure() */
/* */
/**********************************************************************/
INT_PTR CALLBACK GeneralDlgProc(HWND hDlg, UINT message , WPARAM wParam, LPARAM lParam)
{
DWORD dwTemp;
NMHDR FAR *lpnm;
HWND hwndRadio;
LPPROPSHEETPAGE lpPropSheet = (LPPROPSHEETPAGE)(GetWindowLongPtr(hDlg, DWLP_USER));
switch(message)
{
case WM_NOTIFY:
lpnm = (NMHDR FAR *)lParam;
switch(lpnm->code)
{
case PSN_SETACTIVE:
break;
case PSN_KILLACTIVE:
break;
case PSN_APPLY:
dwTemp = 0;
if (IsDlgButtonChecked(hDlg, IDC_COMPOSITE_TYPING))
dwTemp |= COMPOSITE_TYPING;
if (IsDlgButtonChecked(hDlg, IDC_CONCURRENT_TYPING))
dwTemp |= CONCURRENT_TYPING;
if (IsDlgButtonChecked(hDlg, IDC_BACKSPACE_BY_JAMO))
dwTemp |= BACKSPACE_BY_JAMO;
if (IsDlgButtonChecked(hDlg, IDC_KSX1002_SUPPORT))
dwTemp |= KSX1002_SUPPORT;
if (IsDlgButtonChecked(hDlg, IDC_KSX1001_SUPPORT))
dwTemp |= KSX1001_SUPPORT;
if (IsDlgButtonChecked(hDlg, IDC_FULL_MULTIJOMO))
dwTemp |= FULL_MULTIJOMO;
if (IsDlgButtonChecked(hDlg, IDC_DVORAK_SUPPORT))
{
dwImeFlag |= SAENARU_DVORAK;
dwTemp |= SAENARU_DVORAK;
} else
dwImeFlag &= ~SAENARU_DVORAK;
dwOptionFlag = dwTemp;
SetDwordToSetting(TEXT("OptionFlag"), dwOptionFlag);
dwTemp = 0;
if (dwLayoutFlag == 0)
dwLayoutFlag = LAYOUT_OLD2BUL;
if (IsDlgButtonChecked(hDlg, IDC_LAYOUT_OLD2BUL))
dwTemp = LAYOUT_OLD2BUL;
else if (IsDlgButtonChecked(hDlg, IDC_LAYOUT_3FIN))
dwTemp = LAYOUT_3FIN;
else if (IsDlgButtonChecked(hDlg, IDC_LAYOUT_390))
dwTemp = LAYOUT_390;
else if (IsDlgButtonChecked(hDlg, IDC_LAYOUT_NEW2BUL))
dwTemp = LAYOUT_NEW2BUL;
else if (IsDlgButtonChecked(hDlg, IDC_LAYOUT_NEW3BUL))
dwTemp = LAYOUT_NEW3BUL;
else if (IsDlgButtonChecked(hDlg, IDC_LAYOUT_AHNMATAE))
dwTemp = LAYOUT_AHNMATAE;
else if (IsDlgButtonChecked(hDlg, IDC_LAYOUT_3SUN))
dwTemp = LAYOUT_3SUN;
else if (IsDlgButtonChecked(hDlg, IDC_LAYOUT_USER))
dwTemp = LAYOUT_USER;
dwLayoutFlag = dwTemp;
SetDwordToSetting(TEXT("LayoutFlag"), dwLayoutFlag);
set_keyboard(dwLayoutFlag);
break;
case PSN_RESET:
break;
case PSN_HELP:
break;
default:
return FALSE;
}
break;
case WM_INITDIALOG:
SetWindowLongPtr(hDlg, DWLP_USER, (LONG_PTR)lParam);
lpPropSheet = (LPPROPSHEETPAGE)lParam;
#if 0
if (hwndRadio = GetDlgItem (hDlg, IDC_LAYOUT_NEW2BUL) )
SendMessage (hwndRadio, BM_SETCHECK, BST_CHECKED, 0) ;
else if (hwndRadio = GetDlgItem (hDlg, IDC_LAYOUT_NEW3BUL) )
SendMessage (hwndRadio, BM_SETCHECK, BST_CHECKED, 0) ;
else if (hwndRadio = GetDlgItem (hDlg, IDC_LAYOUT_OLD2BUL) )
SendMessage (hwndRadio, BM_SETCHECK, BST_CHECKED, 0) ;
else if (hwndRadio = GetDlgItem (hDlg, IDC_LAYOUT_3BULFINAL) )
SendMessage (hwndRadio, BM_SETCHECK, BST_CHECKED, 0) ;
else if (hwndRadio = GetDlgItem (hDlg, IDC_LAYOUT_390) )
SendMessage (hwndRadio, BM_SETCHECK, BST_CHECKED, 0) ;
else if (hwndRadio = GetDlgItem (hDlg, IDC_LAYOUT_AHNMATAE) )
SendMessage (hwndRadio, BM_SETCHECK, BST_CHECKED, 0) ;
#endif
/* Global options */
CheckDlgButton(hDlg, IDC_CONCURRENT_TYPING,
(dwOptionFlag & CONCURRENT_TYPING) ? 1 : 0);
CheckDlgButton(hDlg, IDC_COMPOSITE_TYPING,
(dwOptionFlag & COMPOSITE_TYPING) ? 1 : 0);
CheckDlgButton(hDlg, IDC_KSX1001_SUPPORT,
(dwOptionFlag & KSX1001_SUPPORT) ? 1 : 0);
CheckDlgButton(hDlg, IDC_KSX1002_SUPPORT,
(dwOptionFlag & KSX1002_SUPPORT) ? 1 : 0);
CheckDlgButton(hDlg, IDC_BACKSPACE_BY_JAMO,
(dwOptionFlag & BACKSPACE_BY_JAMO) ? 1 : 0);
CheckDlgButton(hDlg, IDC_FULL_MULTIJOMO,
(dwOptionFlag & FULL_MULTIJOMO) ? 1 : 0);
CheckDlgButton(hDlg, IDC_DVORAK_SUPPORT,
(dwOptionFlag & SAENARU_DVORAK) ? 1 : 0);
/* Layout */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -