- Implement "Set Default" button

- Added checking whether there was already layout

svn path=/trunk/; revision=33515
This commit is contained in:
Dmitry Chapyshev 2008-05-14 15:51:53 +00:00
parent 3c2cc97af2
commit 5a803bf1bf
15 changed files with 148 additions and 10 deletions

View file

@ -74,7 +74,7 @@ AddNewLayout(HWND hwndDlg)
{
TCHAR NewLayout[CCH_ULONG_DEC + 1], Lang[MAX_PATH],
LangID[CCH_LAYOUT_ID + 1], Layout[MAX_PATH],
SubPath[CCH_LAYOUT_ID + 1];
SubPath[CCH_LAYOUT_ID + 1], szMessage[MAX_PATH];
INT iLayout, iLang;
HKEY hKey, hSubKey;
DWORD cValues;
@ -92,10 +92,20 @@ AddNewLayout(HWND hwndDlg)
iLang = SendMessage(hLangList, CB_GETCURSEL, 0, 0);
lcid = SendMessage(hLangList, CB_GETITEMDATA, iLang, 0);
pts = (PTSTR) SendMessage(hLayoutList, CB_GETITEMDATA, iLayout, 0);
GetLocaleInfo(MAKELCID(lcid, SORT_DEFAULT), LOCALE_ILANGUAGE, Lang, sizeof(Lang) / sizeof(TCHAR));
wsprintf(LangID, _T("0000%s"), Lang);
if (IsLayoutExists(pts, LangID))
{
LoadString(hApplet, IDS_LAYOUT_EXISTS2, szMessage, sizeof(szMessage) / sizeof(TCHAR));
MessageBox(hwndDlg, szMessage, NULL, MB_OK | MB_ICONINFORMATION);
RegCloseKey(hKey);
return;
}
if (GetLayoutName(LangID, Layout))
{
if ((SendMessage(hLayoutList, CB_SELECTSTRING, (WPARAM) -1, (LPARAM)Layout) != CB_ERR)&&
@ -106,8 +116,6 @@ AddNewLayout(HWND hwndDlg)
else SubPath[0] = '\0';
}
pts = (PTSTR) SendMessage(hLayoutList, CB_GETITEMDATA, iLayout, 0);
if (_tcslen(SubPath) != 0)
{
if (RegCreateKeyEx(HKEY_CURRENT_USER, _T("Keyboard Layout\\Substitutes"), 0, NULL,

View file

@ -41,6 +41,8 @@ BOOL
GetLayoutName(LPCTSTR szLCID, LPTSTR szName);
VOID
UpdateLayoutsList(VOID);
BOOL
IsLayoutExists(LPTSTR szLayoutID, LPTSTR szLangID);
/* keysettings.c */
INT_PTR CALLBACK

View file

@ -87,6 +87,8 @@ BEGIN
IDS_LAYOUT "Êëàâèàòóðíà ïîäðåäáà"
IDS_REM_QUESTION "Do you want to remove selected keyboard layout?"
IDS_CONFIRMATION "Confirmation"
IDS_LAYOUT_EXISTS "This layout already exists."
IDS_LAYOUT_EXISTS2 "This layout already exists and can not be added."
END
STRINGTABLE

View file

@ -88,6 +88,8 @@ BEGIN
IDS_LAYOUT "Tastaturlayout"
IDS_REM_QUESTION "Do you want to remove selected keyboard layout?"
IDS_CONFIRMATION "Confirmation"
IDS_LAYOUT_EXISTS "This layout already exists."
IDS_LAYOUT_EXISTS2 "This layout already exists and can not be added."
END
STRINGTABLE

View file

@ -87,6 +87,8 @@ BEGIN
IDS_LAYOUT "ÄéÜôáîç ðëçêôñïëïãßïõ"
IDS_REM_QUESTION "Do you want to remove selected keyboard layout?"
IDS_CONFIRMATION "Confirmation"
IDS_LAYOUT_EXISTS "This layout already exists."
IDS_LAYOUT_EXISTS2 "This layout already exists and can not be added."
END
STRINGTABLE

View file

@ -85,8 +85,10 @@ BEGIN
IDS_WHATS_THIS "What's This?"
IDS_LANGUAGE "Language"
IDS_LAYOUT "Keyboard Layout"
IDS_REM_QUESTION "Do you want to remove selected keyboard layout?"
IDS_CONFIRMATION "Confirmation"
IDS_REM_QUESTION "Do you want to remove selected keyboard layout?"
IDS_CONFIRMATION "Confirmation"
IDS_LAYOUT_EXISTS "This layout already exists."
IDS_LAYOUT_EXISTS2 "This layout already exists and can not be added."
END
STRINGTABLE

View file

@ -92,6 +92,8 @@ BEGIN
IDS_LAYOUT "Distribución del teclado"
IDS_REM_QUESTION "¿Quiere eliminar la distribución del teclado seleccionada?"
IDS_CONFIRMATION "Confirmación"
IDS_LAYOUT_EXISTS "This layout already exists."
IDS_LAYOUT_EXISTS2 "This layout already exists and can not be added."
END
STRINGTABLE

View file

@ -87,6 +87,8 @@ BEGIN
IDS_LAYOUT "Keyboard Layout"
IDS_REM_QUESTION "Do you want to remove selected keyboard layout?"
IDS_CONFIRMATION "Confirmation"
IDS_LAYOUT_EXISTS "This layout already exists."
IDS_LAYOUT_EXISTS2 "This layout already exists and can not be added."
END
/* FIXME : To improve/complete */

View file

@ -87,6 +87,8 @@ BEGIN
IDS_LAYOUT "Disposizione tastiera"
IDS_REM_QUESTION "Volete rimuovere la disposizione di tastiera selezionata?"
IDS_CONFIRMATION "Conferma"
IDS_LAYOUT_EXISTS "This layout already exists."
IDS_LAYOUT_EXISTS2 "This layout already exists and can not be added."
END
STRINGTABLE

View file

@ -94,6 +94,8 @@ BEGIN
IDS_LAYOUT "Uk³ad klawiatury"
IDS_REM_QUESTION "Do you want to remove selected keyboard layout?"
IDS_CONFIRMATION "Confirmation"
IDS_LAYOUT_EXISTS "This layout already exists."
IDS_LAYOUT_EXISTS2 "This layout already exists and can not be added."
END
STRINGTABLE

View file

@ -85,8 +85,10 @@ BEGIN
IDS_WHATS_THIS "×òî ýòî?"
IDS_LANGUAGE "ßçûê ââîäà"
IDS_LAYOUT "Ðàñêëàäêà"
IDS_REM_QUESTION "Âû äåéñòâèòåëüíî õîòèòå óäàëèòü âûáðàííóþ ðàñêëàäêó êëàâèàòóðû?"
IDS_CONFIRMATION "Ïîäòâåðæäåíèå"
IDS_REM_QUESTION "Вы действительно хотите удалить выбранную раскладку клавиатуры?"
IDS_CONFIRMATION "Подтверждение"
IDS_LAYOUT_EXISTS "Такая раскладка уже существует."
IDS_LAYOUT_EXISTS2 "Такая раскладка уже существует и не может быть добавлена."
END
STRINGTABLE

View file

@ -91,6 +91,8 @@ BEGIN
IDS_LAYOUT "Rozloženie klávesnice"
IDS_REM_QUESTION "Do you want to remove selected keyboard layout?"
IDS_CONFIRMATION "Confirmation"
IDS_LAYOUT_EXISTS "This layout already exists."
IDS_LAYOUT_EXISTS2 "This layout already exists and can not be added."
END
STRINGTABLE

View file

@ -96,6 +96,8 @@ BEGIN
IDS_LAYOUT "Keyboard Layout"
IDS_REM_QUESTION "Do you want to remove selected keyboard layout?"
IDS_CONFIRMATION "Confirmation"
IDS_LAYOUT_EXISTS "This layout already exists."
IDS_LAYOUT_EXISTS2 "This layout already exists and can not be added."
END
STRINGTABLE

View file

@ -52,6 +52,8 @@
#define IDS_LAYOUT 9
#define IDS_REM_QUESTION 10
#define IDS_CONFIRMATION 11
#define IDS_LAYOUT_EXISTS 12
#define IDS_LAYOUT_EXISTS2 13
/* Layouts */
#define IDS_US_LAYOUT 5000

View file

@ -36,6 +36,72 @@ IsLayoutSelected()
return iIndex;
}
BOOL
IsLayoutExists(LPTSTR szLayoutID, LPTSTR szLangID)
{
HKEY hKey, hSubKey;
TCHAR szPreload[CCH_LAYOUT_ID + 1], szLayoutNum[3 + 1],
szTmp[CCH_LAYOUT_ID + 1], szOldLangID[CCH_LAYOUT_ID + 1];
DWORD dwIndex = 0, dwType, dwSize;
BOOL IsLangExists = FALSE;
LANGID langid;
if (RegOpenKeyEx(HKEY_CURRENT_USER, _T("Keyboard Layout\\Preload"),
0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS)
{
dwSize = sizeof(szLayoutNum);
while (RegEnumValue(hKey, dwIndex, szLayoutNum, &dwSize, NULL, &dwType, NULL, NULL) == ERROR_SUCCESS)
{
dwSize = sizeof(szPreload);
if (RegQueryValueEx(hKey, szLayoutNum, NULL, NULL, (LPBYTE)szPreload, &dwSize) != ERROR_SUCCESS)
{
RegCloseKey(hKey);
return FALSE;
}
langid = (LANGID)_tcstoul(szPreload, NULL, 16);
GetLocaleInfo(langid, LOCALE_ILANGUAGE, szTmp, sizeof(szTmp) / sizeof(TCHAR));
wsprintf(szOldLangID, _T("0000%s"), szTmp);
if (_tcscmp(szOldLangID, szLangID) == 0) IsLangExists = TRUE;
if (szPreload[0] == 'd')
{
if (RegOpenKeyEx(HKEY_CURRENT_USER, _T("Keyboard Layout\\Substitutes"),
0, KEY_QUERY_VALUE, &hSubKey) == ERROR_SUCCESS)
{
dwSize = sizeof(szTmp);
RegQueryValueEx(hSubKey, szPreload, NULL, NULL, (LPBYTE)szTmp, &dwSize);
if ((_tcscmp(szTmp, szLayoutID) == 0)&&(IsLangExists))
{
RegCloseKey(hSubKey);
RegCloseKey(hKey);
return TRUE;
}
}
}
else
{
if (_tcscmp(szPreload, szLayoutID) == 0)
{
RegCloseKey(hKey);
return TRUE;
}
}
IsLangExists = FALSE;
dwSize = sizeof(szLayoutNum);
dwIndex++;
}
RegCloseKey(hKey);
}
return FALSE;
}
static HICON
CreateLayoutIcon(LPTSTR szInd)
{
@ -314,7 +380,7 @@ DeleteLayout(VOID)
LVITEM item;
HKEY hKey, hSubKey;
HWND hLayoutList = GetDlgItem(MainDlgWnd, IDC_KEYLAYOUT_LIST);
TCHAR szLayoutNum[10 + 1], szTitle[MAX_PATH],
TCHAR szLayoutNum[3 + 1], szTitle[MAX_PATH],
szConf[MAX_PATH], szPreload[CCH_LAYOUT_ID + 1];
DWORD dwSize;
@ -368,12 +434,40 @@ DeleteLayout(VOID)
}
}
static VOID
SetDefaultLayout()
{
HKL hKl;
TCHAR szLCID[CCH_LAYOUT_ID + 1], szLayoutNum[CCH_ULONG_DEC + 1];
LVITEM item;
INT LayoutNum;
if (IsLayoutSelected() != -1)
{
ZeroMemory(&item, sizeof(LVITEM));
item.mask = LVIF_PARAM;
item.iItem = IsLayoutSelected();
(VOID) ListView_GetItem(GetDlgItem(MainDlgWnd, IDC_KEYLAYOUT_LIST), &item);
LayoutNum = (INT) item.lParam;
_ultot(LayoutNum, szLayoutNum, 10);
if (GetLayoutID(szLayoutNum, szLCID))
{
hKl = LoadKeyboardLayout(szLCID, KLF_ACTIVATE);
SystemParametersInfo(SPI_SETDEFAULTINPUTLANG, 0, &hKl, SPIF_SENDWININICHANGE);
}
}
}
static VOID
SaveInputLang(HWND hDlg)
{
HKEY hKey, hSubKey;
TCHAR szLayoutID[CCH_LAYOUT_ID + 1], szLayoutNum[CCH_ULONG_DEC + 1],
szPreload[CCH_LAYOUT_ID + 1], LangID[CCH_LAYOUT_ID + 1],
szPreload[CCH_LAYOUT_ID + 1], LangID[CCH_LAYOUT_ID + 1], szMessage[MAX_PATH],
Lang[MAX_PATH], SubPath[MAX_PATH];
PTSTR pts;
INT iLayout;
@ -405,6 +499,15 @@ SaveInputLang(HWND hDlg)
GetLocaleInfo(langid, LOCALE_ILANGUAGE, Lang, sizeof(Lang) / sizeof(TCHAR));
wsprintf(LangID, _T("0000%s"), Lang);
if (IsLayoutExists(pts, LangID))
{
LoadString(hApplet, IDS_LAYOUT_EXISTS, szMessage, sizeof(szMessage) / sizeof(TCHAR));
MessageBox(hDlg, szMessage, NULL, MB_OK | MB_ICONINFORMATION);
RegCloseKey(hKey);
return;
}
if (szPreload[0] == 'd')
{
if (_tcscmp(LangID, pts) == 0)
@ -614,7 +717,8 @@ SettingPageProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
break;
case IDC_SET_DEFAULT:
SetDefaultLayout();
UpdateLayoutsList();
break;
}
break;