You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
482 lines
13 KiB
482 lines
13 KiB
/*
|
|
-
|
|
- Locale UI - info about redoing the TAB ORDER for various locales at runtime
|
|
*
|
|
*
|
|
*/
|
|
#include "_apipch.h"
|
|
|
|
int rgHomeAddressIDs[] =
|
|
{
|
|
IDC_STATIC_ETCHED,
|
|
IDC_DETAILS_HOME_STATIC_ADDRESS,
|
|
IDC_DETAILS_HOME_EDIT_ADDRESS,
|
|
IDC_DETAILS_HOME_STATIC_CITY,
|
|
IDC_DETAILS_HOME_EDIT_CITY,
|
|
IDC_DETAILS_HOME_STATIC_STATE,
|
|
IDC_DETAILS_HOME_EDIT_STATE,
|
|
IDC_DETAILS_HOME_STATIC_ZIP,
|
|
IDC_DETAILS_HOME_EDIT_ZIP,
|
|
IDC_DETAILS_HOME_STATIC_COUNTRY,
|
|
IDC_DETAILS_HOME_EDIT_COUNTRY,
|
|
-1, // use -1 to terminate this array
|
|
};
|
|
|
|
int rgBusinessAddressIDs[] =
|
|
{
|
|
IDC_STATIC_ETCHED,
|
|
IDC_DETAILS_BUSINESS_STATIC_ADDRESS,
|
|
IDC_DETAILS_BUSINESS_EDIT_ADDRESS,
|
|
IDC_DETAILS_BUSINESS_STATIC_CITY,
|
|
IDC_DETAILS_BUSINESS_EDIT_CITY,
|
|
IDC_DETAILS_BUSINESS_STATIC_STATE,
|
|
IDC_DETAILS_BUSINESS_EDIT_STATE,
|
|
IDC_DETAILS_BUSINESS_STATIC_ZIP,
|
|
IDC_DETAILS_BUSINESS_EDIT_ZIP,
|
|
IDC_DETAILS_BUSINESS_STATIC_COUNTRY,
|
|
IDC_DETAILS_BUSINESS_EDIT_COUNTRY,
|
|
IDC_DETAILS_BUSINESS_STATIC_COMPANY,
|
|
IDC_DETAILS_BUSINESS_EDIT_COMPANY,
|
|
-1, // use -1 to terminate this array
|
|
};
|
|
|
|
|
|
int rgDistListAddressIDs[] =
|
|
{
|
|
IDC_STATIC_ETCHED,
|
|
IDC_DISTLIST_STATIC_STREET,
|
|
IDC_DISTLIST_EDIT_ADDRESS,
|
|
IDC_DISTLIST_STATIC_CITY,
|
|
IDC_DISTLIST_EDIT_CITY,
|
|
IDC_DISTLIST_STATIC_STATE,
|
|
IDC_DISTLIST_EDIT_STATE,
|
|
IDC_DISTLIST_STATIC_ZIP,
|
|
IDC_DISTLIST_EDIT_ZIP,
|
|
IDC_DISTLIST_STATIC_COUNTRY,
|
|
IDC_DISTLIST_EDIT_COUNTRY,
|
|
-1, // use -1 to terminate this array
|
|
};
|
|
|
|
enum tabIDs
|
|
{
|
|
tabEtched=0,
|
|
tabStaticAddress,
|
|
tabEditAddress,
|
|
tabStaticCity,
|
|
tabEditCity,
|
|
tabStaticState,
|
|
tabEditState,
|
|
tabStaticZip,
|
|
tabEditZip,
|
|
tabStaticCountry,
|
|
tabEditCountry,
|
|
tabStaticCompany,
|
|
tabEditCompany,
|
|
tabMax
|
|
};
|
|
|
|
int rgPersonalNameIDs[] =
|
|
{
|
|
IDC_DETAILS_PERSONAL_FRAME_NAME,
|
|
IDC_DETAILS_PERSONAL_STATIC_FIRSTNAME,
|
|
IDC_DETAILS_PERSONAL_EDIT_FIRSTNAME,
|
|
IDC_DETAILS_PERSONAL_STATIC_MIDDLENAME,
|
|
IDC_DETAILS_PERSONAL_EDIT_MIDDLENAME,
|
|
IDC_DETAILS_PERSONAL_STATIC_LASTNAME,
|
|
IDC_DETAILS_PERSONAL_EDIT_LASTNAME,
|
|
-1,
|
|
};
|
|
|
|
enum tabNameIDs
|
|
{
|
|
tabFrame=0,
|
|
tabStaticFirst,
|
|
tabEditFirst,
|
|
tabStaticMiddle,
|
|
tabEditMiddle,
|
|
tabStaticLast,
|
|
tabEditLast,
|
|
tabNameMax,
|
|
};
|
|
|
|
/*
|
|
The following is the information on which this localization is based
|
|
|
|
H Honorific, T Title, F FirstName, S SecondName, L Lastname,
|
|
C Companyname, 1 Address1, 2 Address2, c City, s State/Province, p Postal Code,
|
|
n Nation (Country), w Country Code
|
|
|
|
LCID Locale Name 1st row 2nd row 3rd row 4th row 5th row 6th row 7th row 8th row Note
|
|
0c09 English (Australia) HFSL C12cspn
|
|
|
|
0416 Portuguese (Brazil) HFSL C12pcsn "2" is not normally used
|
|
|
|
0402 Bulgarian nspc12C HFSL
|
|
|
|
1009 English (Canada) HFSL C12cspn "S" and "2" are not normally used
|
|
|
|
0c0c French (Canada) HFSL C12cspn "S" and "2" are not normally used
|
|
|
|
0804 China nsc12 LFH
|
|
|
|
041a 0c1a, 081a 0424 Croatian Serbian Slovenian HFSL C12pcsn
|
|
|
|
0405 Czech HFSL C12pcsn
|
|
|
|
0406 Danish HTFSL C12wpcn
|
|
|
|
040b Finnish TFSL C12pcn
|
|
|
|
040c French (Standard) HFL C12pcn
|
|
|
|
0407 German (Standard) HTFL C12wpcn
|
|
|
|
0408 Greek TFSL C12pcn
|
|
|
|
040e (home) Hungary HLFS c12psn
|
|
040e (bus) Hungary HLFS Cpc12sn
|
|
|
|
0410 Italian (Standard) TFL C12wpcsn
|
|
|
|
0411 Japanese npsc12C LFH
|
|
|
|
0412 Korean nsc12Cp
|
|
|
|
080a 100a 140a 1c0a 200a 240a 280a 2c0a 300a 340a 380a 3c0a 400a 440a 480a
|
|
4c0a 500a Spanish (Latin America) THFSL C12pcsn
|
|
|
|
043e Malaysian HFSL C12pcsn
|
|
|
|
0413 Dutch (Standard) TFSL C12pcn
|
|
|
|
xx14 (home) Norwegian TFL 12pcn
|
|
xx14 (bus) Norwegian TFL C12pcn
|
|
|
|
0415 Polish HFSL C12pcsn
|
|
|
|
0816 Portuguese (Portugal) HFSL C12cpn There are kommas between each HFS and L
|
|
|
|
0418 Romanian HFSL C12pcsn
|
|
|
|
0419 Russian npsc12C L FS
|
|
|
|
040a, 0c0a Spanish (Spain) HFSL C12pcn
|
|
|
|
041d Swedish TFL C12pcn
|
|
|
|
100c, 0807 0810 Swiss HFSL C12pcn
|
|
|
|
041f Turkish HFSL C12pcn
|
|
|
|
0409 English (US) HFSL C12cspn
|
|
|
|
|
|
*/
|
|
|
|
//
|
|
// For entering names in the WAB, the order is FirstMiddleLast for all languages except
|
|
// Japanese, Korean, Chinese, Russian and Hungarian
|
|
//
|
|
// However we have a seperate personal tab for Japanese, Korean and Chinese so
|
|
// we don't need to do anything for those languages .. just Russian and Hungarian
|
|
//
|
|
|
|
// LFS
|
|
static const int tabLayoutName[] = {
|
|
tabFrame,
|
|
tabStaticLast, tabEditLast,
|
|
tabStaticFirst, tabEditFirst,
|
|
tabStaticMiddle,tabEditMiddle,
|
|
};
|
|
|
|
/*
|
|
Note that in creating the layouts below we are assuming that
|
|
|
|
// C12pcn == C12pcsn
|
|
// C12wpcsn == C12pcsn
|
|
// C12wpcn == C12pcsn
|
|
// nsc12 == nspc12C
|
|
// C12cpn == C12cspn
|
|
|
|
Otherwise we have too many to deal with
|
|
*/
|
|
|
|
|
|
// C12cspn
|
|
// 0416 1009 0c0c 0409
|
|
// C12cpn == C12cspn
|
|
// 0816
|
|
static const int tabLayout1[] = {
|
|
tabEtched,
|
|
tabStaticCompany, tabEditCompany, //C
|
|
tabStaticAddress, tabEditAddress, //12
|
|
tabStaticCity, tabEditCity, //c
|
|
tabStaticState, tabEditState, //s
|
|
tabStaticZip, tabEditZip, //p
|
|
tabStaticCountry, tabEditCountry //n
|
|
};
|
|
|
|
// C12pcsn
|
|
// 041a 0c1a 081a 0424 0405 080a 100a 140a
|
|
// 1c0a 200a 240a 280a 2c0a 300a 340a 380a 3c0a
|
|
// 400a 440a 480a 4c0a 500a 043e 0415 0418
|
|
// C12pcn == C12pcsn
|
|
// 040b 040c 0408 0413 xx14 040a 0c0a 041d 100c 0807 0810 041f
|
|
// C12wpcsn == C12pcsn
|
|
// 0410
|
|
// C12wpcn = C12pcsn
|
|
// 0406 0407
|
|
static const int tabLayout2[] = {
|
|
tabEtched,
|
|
tabStaticCompany, tabEditCompany, //C
|
|
tabStaticAddress, tabEditAddress, //12
|
|
tabStaticZip, tabEditZip, //p
|
|
tabStaticCity, tabEditCity, //c
|
|
tabStaticState, tabEditState, //s
|
|
tabStaticCountry, tabEditCountry //n
|
|
};
|
|
|
|
// npsc12C
|
|
// 0411 0419
|
|
static const int tabLayout3[] = {
|
|
tabEtched,
|
|
tabStaticCountry, tabEditCountry, //n
|
|
tabStaticZip, tabEditZip, //p
|
|
tabStaticState, tabEditState, //s
|
|
tabStaticCity, tabEditCity, //c
|
|
tabStaticAddress, tabEditAddress, //12
|
|
tabStaticCompany, tabEditCompany, //C
|
|
};
|
|
|
|
// nspc12C
|
|
// 0402
|
|
// nsc12 == nspc12C
|
|
// 0804
|
|
static const int tabLayout4[] = {
|
|
tabEtched,
|
|
tabStaticCountry, tabEditCountry, //n
|
|
tabStaticState, tabEditState, //s
|
|
tabStaticZip, tabEditZip, //p
|
|
tabStaticCity, tabEditCity, //c
|
|
tabStaticAddress, tabEditAddress, //12
|
|
tabStaticCompany, tabEditCompany, //C
|
|
};
|
|
|
|
|
|
// nsc12Cp
|
|
// 0412
|
|
static const int tabLayout5[] = {
|
|
tabEtched,
|
|
tabStaticCountry, tabEditCountry, //n
|
|
tabStaticState, tabEditState, //s
|
|
tabStaticCity, tabEditCity, //c
|
|
tabStaticAddress, tabEditAddress, //12
|
|
tabStaticCompany, tabEditCompany, //C
|
|
tabStaticZip, tabEditZip, //p
|
|
};
|
|
|
|
|
|
// c12psn
|
|
// 040e - home
|
|
static const int tabLayout6[] = {
|
|
tabEtched,
|
|
tabStaticCity, tabEditCity, //c
|
|
tabStaticAddress, tabEditAddress, //12
|
|
tabStaticZip, tabEditZip, //p
|
|
tabStaticState, tabEditState, //s
|
|
tabStaticCountry, tabEditCountry, //n
|
|
tabStaticCompany, tabEditCompany, //C
|
|
};
|
|
|
|
|
|
// Cpc12sn
|
|
// 040e - business
|
|
static const int tabLayout7[] = {
|
|
tabEtched,
|
|
tabStaticCompany, tabEditCompany, //C
|
|
tabStaticZip, tabEditZip, //p
|
|
tabStaticCity, tabEditCity, //c
|
|
tabStaticAddress, tabEditAddress, //12
|
|
tabStaticState, tabEditState, //s
|
|
tabStaticCountry, tabEditCountry //n
|
|
};
|
|
|
|
|
|
|
|
/*
|
|
-
|
|
- GetLocaleTemplate
|
|
*
|
|
* Checks the current user locale and the prop sheet being modified and returns a pointer
|
|
* to the correct template
|
|
*
|
|
*/
|
|
void GetLocaleTemplate(LPINT * lppTemplate, int nPropSheet)
|
|
{
|
|
LCID lcid = GetUserDefaultLCID();
|
|
|
|
*lppTemplate = NULL;
|
|
|
|
if(nPropSheet == contactPersonal)
|
|
{
|
|
switch(lcid)
|
|
{
|
|
case 0x0419: //russian
|
|
case 0x040e: //hungarian
|
|
//case 0x0804: //chinese //These 3 are commented out because they get their own dlg template
|
|
//case 0x0411: //japanese
|
|
//case 0x0412: //korean
|
|
*lppTemplate = (LPINT) tabLayoutName;
|
|
break;
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
switch(lcid)
|
|
{
|
|
case 0x0c09: //english
|
|
case 0x0416: //Portuguese (Brazil)
|
|
case 0x1009: //English (Canada)
|
|
case 0x0c0c: //French (Canada)
|
|
case 0x0409: //English (US)
|
|
case 0x0816: //Portuguese (Portugal)
|
|
*lppTemplate = (LPINT) tabLayout1;
|
|
break;
|
|
|
|
case 0x041a: case 0x0c1a: case 0x081a: case 0x0424: //Croatian Serbian Slovenian
|
|
case 0x0405: //Czech
|
|
case 0x080a: case 0x100a: case 0x140a: case 0x1c0a: case 0x200a: case 0x240a:
|
|
case 0x280a: case 0x2c0a: case 0x300a: case 0x340a: case 0x380a: case 0x3c0a:
|
|
case 0x400a: case 0x440a: case 0x480a: case 0x4c0a: case 0x500a: // Latin America
|
|
case 0x043e: //Malaysia
|
|
case 0x0415: //Polish
|
|
case 0x0418: //Romanian
|
|
case 0x040b: //Finnish
|
|
case 0x040c: //French (Standard)
|
|
case 0x0408: //Greek
|
|
case 0x0413: //Dutch (Standard)
|
|
case 0x040a: case 0x0c0a: //Spanish (Spain)
|
|
case 0x041d: //Swedish
|
|
case 0x100c: case 0x0807: case 0x0810: //Swiss
|
|
case 0x041f: //Turkish
|
|
case 0x0410: //Italian (Standard)
|
|
case 0x0406: //Danish
|
|
case 0x0407: //German (Standard)
|
|
case 0x0414: case 0x0814: //Norwegian
|
|
*lppTemplate = (LPINT) tabLayout2;
|
|
break;
|
|
|
|
case 0x0411: //Japanese
|
|
case 0x0419: //Russian
|
|
*lppTemplate = (LPINT) tabLayout3;
|
|
break;
|
|
|
|
case 0x0402: //Bulgarian
|
|
case 0x0804: //China
|
|
*lppTemplate = (LPINT) tabLayout4;
|
|
break;
|
|
|
|
case 0x0412: //Korean
|
|
*lppTemplate = (LPINT) tabLayout5;
|
|
break;
|
|
|
|
case 0x040e: //Hungary
|
|
if(nPropSheet == contactBusiness)
|
|
*lppTemplate = (LPINT) tabLayout7;
|
|
else
|
|
*lppTemplate = (LPINT) tabLayout6;
|
|
break;
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
/*
|
|
-
|
|
- ChangeLocaleBasedTabOrder
|
|
-
|
|
// To reorder the tabbing in a dialog, we basically need to reset the Z-orders of the child
|
|
// controls with respect to each other ..
|
|
//
|
|
// Thus we will get a handle to all the child controls, and reorder them after the IDC_STATIC_ETCHED
|
|
// based on the template we will create for reoldering ..
|
|
//
|
|
// The templates will vary by locale and are different for home and business since business needs to include
|
|
// country ..
|
|
//
|
|
// So to do this, we will get an array that will list the relative order of the UI controls
|
|
// Then we will load the hWnds of the UI controls in the order we want them
|
|
// Then we will do a SetWindowPos for each successive item in the array to follow the one before
|
|
//
|
|
// The hard part is creating all the array information in the first place
|
|
//
|
|
*/
|
|
void ChangeLocaleBasedTabOrder(HWND hWnd, int nPropSheet)
|
|
{
|
|
#if 0
|
|
int * rgIDs = NULL;
|
|
int nCount = 0, i = 0, n=0;
|
|
HWND * rghWnd = NULL;
|
|
int * lpTabOrderTemplate = NULL;
|
|
|
|
switch(nPropSheet)
|
|
{
|
|
case contactPersonal:
|
|
rgIDs = rgPersonalNameIDs;
|
|
break;
|
|
case contactHome:
|
|
rgIDs = rgHomeAddressIDs;
|
|
break;
|
|
case contactBusiness:
|
|
rgIDs = rgBusinessAddressIDs;
|
|
break;
|
|
case groupOther:
|
|
rgIDs = rgDistListAddressIDs;
|
|
break;
|
|
default:
|
|
goto out;
|
|
break;
|
|
}
|
|
|
|
rghWnd = LocalAlloc(LMEM_ZEROINIT, sizeof(HWND)*tabMax);
|
|
if(!rghWnd)
|
|
goto out;
|
|
|
|
GetLocaleTemplate(&lpTabOrderTemplate, nPropSheet);
|
|
if(!lpTabOrderTemplate)
|
|
goto out;
|
|
|
|
nCount = 0;
|
|
for(i=0;i<tabMax && rgIDs[i]!=-1;i++)
|
|
{
|
|
int tabPos = lpTabOrderTemplate[i];
|
|
|
|
// Need to ignore the company-name related ids from the home and group panes
|
|
if( (nPropSheet == contactHome || nPropSheet == groupOther) &&
|
|
(tabPos == tabStaticCompany || tabPos == tabEditCompany) )
|
|
continue;
|
|
|
|
rghWnd[nCount] = GetDlgItem(hWnd, rgIDs[tabPos]);
|
|
|
|
nCount++;
|
|
}
|
|
|
|
//for(i=1;i<nCount;i++)
|
|
// SetWindowPos(rghWnd[i-1], rghWnd[i], 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
|
|
|
|
// Starting backwards, we will put each item on the top - that way we know these are all topmost
|
|
// in the right order ..
|
|
//
|
|
// Not sure if this is completely foolproof or not ..
|
|
//
|
|
for(i=nCount-1;i>=0;i--)
|
|
SetWindowPos(rghWnd[i], HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
|
|
|
|
|
|
out:
|
|
LocalFreeAndNull((LPVOID*)&rghWnd);
|
|
#endif
|
|
return;
|
|
}
|
|
|