2 * PROJECT: ReactOS International Control Panel
3 * FILE: dll/cpl/intl/sort.c
4 * PURPOSE: Sorting property page
5 * PROGRAMMER: Eric Kohl
10 static BOOL bSortPage
= FALSE
;
13 static HWND hWndSortList
= NULL
;
17 SortTestEnumProc(PWSTR lpLocale
)
21 lcid
= wcstoul(lpLocale
, NULL
, 16);
23 if ((LANGIDFROMLCID(lcid
) == LANGIDFROMLCID(userLcid
)) &&
24 (SORTIDFROMLCID(lcid
) != SORTIDFROMLCID(userLcid
)))
32 IsSortPageNeeded(LCID lcid
)
34 /* Handle special case for Spanish (Spain) */
35 if (lcid
== MAKELCID(MAKELANGID(LANG_SPANISH
, SUBLANG_SPANISH
), SORT_DEFAULT
) ||
36 lcid
== MAKELCID(MAKELANGID(LANG_SPANISH
, SUBLANG_SPANISH_MODERN
), SORT_DEFAULT
))
42 EnumSystemLocalesW(SortTestEnumProc
, LCID_ALTERNATE_SORTS
);
49 SortEnumProc(LPTSTR lpLocale
)
55 lcid
= wcstoul(lpLocale
, NULL
, 16);
57 if ((LANGIDFROMLCID(lcid
) == LANGIDFROMLCID(userLcid
)) &&
58 (SORTIDFROMLCID(lcid
) != SORTIDFROMLCID(userLcid
)))
60 GetLocaleInfoW(lcid
, LOCALE_SSORTNAME
, lang
, sizeof(lang
)/sizeof(WCHAR
));
62 index
= SendMessageW(hWndSortList
,
67 SendMessageW(hWndSortList
,
77 CreateSortList(HWND hwnd
, LCID lcid
)
84 /* Handle special case for Spainish (Spain) */
85 if (lcid
== MAKELCID(MAKELANGID(LANG_SPANISH
, SUBLANG_SPANISH
), SORT_DEFAULT
) ||
86 lcid
== MAKELCID(MAKELANGID(LANG_SPANISH
, SUBLANG_SPANISH_MODERN
), SORT_DEFAULT
))
88 /* Add traditional sorting */
89 GetLocaleInfoW(MAKELANGID(LANG_SPANISH
, SUBLANG_SPANISH
),
90 LOCALE_SSORTNAME
, lang
, sizeof(lang
)/sizeof(TCHAR
));
92 index
= SendMessageW(hwnd
,
100 (LPARAM
)MAKELANGID(LANG_SPANISH
, SUBLANG_SPANISH
));
102 /* Add modern sorting */
103 GetLocaleInfoW(MAKELANGID(LANG_SPANISH
, SUBLANG_SPANISH_MODERN
),
104 LOCALE_SSORTNAME
, lang
, sizeof(lang
)/sizeof(TCHAR
));
106 index
= SendMessageW(hwnd
,
114 (LPARAM
)MAKELANGID(LANG_SPANISH
, SUBLANG_SPANISH_MODERN
));
120 GetLocaleInfoW(lcid
& 0xFFFF, LOCALE_SSORTNAME
, lang
, sizeof(lang
)/sizeof(WCHAR
));
122 index
= SendMessageW(hWndSortList
,
127 SendMessageW(hWndSortList
,
130 (LPARAM
)lcid
& 0xFFFF);
132 EnumSystemLocalesW(SortEnumProc
, LCID_ALTERNATE_SORTS
);
135 /* Select current locale */
136 /* or should it be System and not user? */
137 GetLocaleInfoW(lcid
, LOCALE_SSORTNAME
, lang
, sizeof(lang
)/sizeof(WCHAR
));
145 /* Property page dialog callback */
147 SortPageProc(HWND hwndDlg
,
152 PGLOBALDATA pGlobalData
;
154 pGlobalData
= (PGLOBALDATA
)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
159 pGlobalData
= (PGLOBALDATA
)((LPPROPSHEETPAGE
)lParam
)->lParam
;
160 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pGlobalData
);
162 CreateSortList(GetDlgItem(hwndDlg
, IDC_SORTLIST_COMBO
), pGlobalData
->UserLCID
);
166 switch (LOWORD(wParam
))
168 case IDC_SORTLIST_COMBO
:
169 if (HIWORD(wParam
) == CBN_SELCHANGE
)
171 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
178 if (((LPNMHDR
)lParam
)->code
== (UINT
)PSN_APPLY
)
183 iCurSel
= SendDlgItemMessage(hwndDlg
,
188 if (iCurSel
== CB_ERR
)
191 NewLcid
= SendDlgItemMessage(hwndDlg
,
196 if (NewLcid
== (LCID
)CB_ERR
)
199 /* Save the new LCID */
200 pGlobalData
->UserLCID
= NewLcid
;
201 pGlobalData
->fUserLocaleChanged
= TRUE
;