forked from jrywu/DIME
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ShowConfig.cpp
136 lines (105 loc) · 4.24 KB
/
ShowConfig.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#include "Globals.h"
#include "DIME.h"
#include "TfInputProcessorProfile.h"
#include "BuildInfo.h"
//+---------------------------------------------------------------------------
//
// ITfFnConfigure::Show
//
//----------------------------------------------------------------------------
// static dialog procedure
HRESULT CDIME::Show(_In_opt_ HWND hwndParent, _In_ LANGID inLangid, _In_ REFGUID inRefGuidProfile)
{
debugPrint(L"CDIME::Show()");
if (_IsStoreAppMode() || _IsUILessMode() || _IsSecureMode()) return S_OK;
CTfInputProcessorProfile* profile = new CTfInputProcessorProfile();
LANGID langid = inLangid;
GUID guidProfile = inRefGuidProfile;
// called from hotkey in IME
if (guidProfile == GUID_NULL)
CConfig::SetIMEMode(Global::imeMode);
else if (guidProfile == Global::DIMEDayiGuidProfile)
CConfig::SetIMEMode(IME_MODE_DAYI);
else if (guidProfile == Global::DIMEPhoneticGuidProfile)
CConfig::SetIMEMode(IME_MODE_PHONETIC);
else if (guidProfile == Global::DIMEArrayGuidProfile)
CConfig::SetIMEMode(IME_MODE_ARRAY);
else if (guidProfile == Global::DIMEGenericGuidProfile)
CConfig::SetIMEMode(IME_MODE_GENERIC);
if (SUCCEEDED(profile->CreateInstance()))
{
if (langid == 0)
profile->GetCurrentLanguage(&langid);
if (guidProfile == GUID_NULL)
{
CLSID clsid;
profile->GetDefaultLanguageProfile(langid, GUID_TFCAT_TIP_KEYBOARD, &clsid, &guidProfile);
}
CDIMEArray <LanguageProfileInfo> langProfileInfoList;
profile->GetReverseConversionProviders(langid, &langProfileInfoList);
CConfig::SetReverseConvervsionInfoList(&langProfileInfoList);
}
delete profile;
_LoadConfig(FALSE,CConfig::GetIMEMode()); // prevent set _imeMode being set if config triggered by control panel options button
if (_IsComposing() && _pContext) _EndComposition(_pContext);
_DeleteCandidateList(TRUE, _pContext);
// comctl32.dll and comdlg32.dll can't be loaded into immersivemode (app container), thus use late binding here.
HINSTANCE dllCtlHandle = NULL;
dllCtlHandle = LoadLibrary(L"comctl32.dll");
_T_CreatePropertySheetPage _CreatePropertySheetPage = NULL;
_T_PropertySheet _PropertySheet = NULL;
if (dllCtlHandle)
{
_CreatePropertySheetPage = reinterpret_cast<_T_CreatePropertySheetPage> (GetProcAddress(dllCtlHandle, "CreatePropertySheetPageW"));
_PropertySheet = reinterpret_cast<_T_PropertySheet> (GetProcAddress(dllCtlHandle, "PropertySheetW"));
}
debugPrint(L"CDIME::Show() , ITfFnConfigure::Show(), _autoCompose = %d, _doBeep = %d", CConfig::GetAutoCompose(), CConfig::GetDoBeep());
PROPSHEETPAGE psp;
PROPSHEETHEADER psh;
struct {
int id;
DLGPROC DlgProc;
} DlgPage[] = {
{ IDD_DIALOG_COMMON, CConfig::CommonPropertyPageWndProc },
{ IDD_DIALOG_DICTIONARY, CConfig::DictionaryPropertyPageWndProc }
};
HPROPSHEETPAGE hpsp[_countof(DlgPage)];
int i;
ZeroMemory(&psp, sizeof(PROPSHEETPAGE));
psp.dwSize = sizeof(PROPSHEETPAGE);
psp.dwFlags = PSP_PREMATURE;
psp.hInstance = Global::dllInstanceHandle;
for (i = 0; i<_countof(DlgPage); i++)
{
psp.pszTemplate = MAKEINTRESOURCE(DlgPage[i].id);
psp.pfnDlgProc = DlgPage[i].DlgProc;
if (_CreatePropertySheetPage)
hpsp[i] = (*_CreatePropertySheetPage)(&psp);
}
ZeroMemory(&psh, sizeof(PROPSHEETHEADER));
psh.dwSize = sizeof(PROPSHEETHEADER);
psh.dwFlags = PSH_DEFAULT | PSH_NOCONTEXTHELP;
psh.hInstance = Global::dllInstanceHandle;
psh.hwndParent = hwndParent;
psh.nPages = _countof(DlgPage);
psh.phpage = hpsp;
psh.pszCaption = L"DIME User Settings";
WCHAR dialogCaption[MAX_PATH] = { 0 };
if (CConfig::GetIMEMode() == IME_MODE_DAYI)
StringCchCat(dialogCaption, MAX_PATH, L"DIME 大易輸入法設定");
else if (CConfig::GetIMEMode() == IME_MODE_ARRAY)
StringCchCat(dialogCaption, MAX_PATH, L"DIME 行列輸入法設定");
else if (CConfig::GetIMEMode() == IME_MODE_GENERIC)
StringCchCat(dialogCaption, MAX_PATH, L"DIME 自建輸入法設定");
else if (CConfig::GetIMEMode() == IME_MODE_PHONETIC)
StringCchCat(dialogCaption, MAX_PATH, L"DIME 傳統注音輸入法設定");
StringCchPrintf(dialogCaption, MAX_PATH, L"%s v%d.%d.%d.%d", dialogCaption,
BUILD_VER_MAJOR, BUILD_VER_MINOR, BUILD_COMMIT_COUNT, BUILD_DATE_1);
psh.pszCaption = dialogCaption;
//PropertySheet(&psh);
if (_PropertySheet)
(*_PropertySheet)(&psh);
if(dllCtlHandle)
FreeLibrary(dllCtlHandle);
return S_OK;
}