3 * PROJECT: ReactOS International Control Panel
4 * FILE: dll/cpl/intl/sort.c
5 * PURPOSE: Sorting property page
6 * PROGRAMMER: Eric Kohl
17 static BOOL bSortPage
= FALSE
;
20 static HWND hWndSortList
= NULL
;
24 SortTestEnumProc(LPTSTR lpLocale
)
28 lcid
= _tcstoul(lpLocale
, NULL
, 16);
30 if ((LANGIDFROMLCID(lcid
) == LANGIDFROMLCID(userLcid
)) &&
31 (SORTIDFROMLCID(lcid
) != SORTIDFROMLCID(userLcid
)))
39 IsSortPageNeeded(LCID lcid
)
41 /* Handle special case for Spanish (Spain) */
42 if (lcid
== MAKELCID(MAKELANGID(LANG_SPANISH
, SUBLANG_SPANISH
), SORT_DEFAULT
) ||
43 lcid
== MAKELCID(MAKELANGID(LANG_SPANISH
, SUBLANG_SPANISH_MODERN
), SORT_DEFAULT
))
49 EnumSystemLocales(SortTestEnumProc
, LCID_ALTERNATE_SORTS
);
56 SortEnumProc(LPTSTR lpLocale
)
62 lcid
= _tcstoul(lpLocale
, NULL
, 16);
64 if ((LANGIDFROMLCID(lcid
) == LANGIDFROMLCID(userLcid
)) &&
65 (SORTIDFROMLCID(lcid
) != SORTIDFROMLCID(userLcid
)))
67 GetLocaleInfo(lcid
, LOCALE_SSORTNAME
, lang
, sizeof(lang
)/sizeof(TCHAR
));
69 index
= SendMessage(hWndSortList
,
74 SendMessage(hWndSortList
,
84 CreateSortList(HWND hwnd
, LCID lcid
)
91 /* Handle special case for Spainish (Spain) */
92 if (lcid
== MAKELCID(MAKELANGID(LANG_SPANISH
, SUBLANG_SPANISH
), SORT_DEFAULT
) ||
93 lcid
== MAKELCID(MAKELANGID(LANG_SPANISH
, SUBLANG_SPANISH_MODERN
), SORT_DEFAULT
))
95 /* Add traditional sorting */
96 GetLocaleInfo(MAKELANGID(LANG_SPANISH
, SUBLANG_SPANISH
),
97 LOCALE_SSORTNAME
, lang
, sizeof(lang
)/sizeof(TCHAR
));
99 index
= SendMessage(hwnd
,
107 (LPARAM
)MAKELANGID(LANG_SPANISH
, SUBLANG_SPANISH
));
109 /* Add modern sorting */
110 GetLocaleInfo(MAKELANGID(LANG_SPANISH
, SUBLANG_SPANISH_MODERN
),
111 LOCALE_SSORTNAME
, lang
, sizeof(lang
)/sizeof(TCHAR
));
113 index
= SendMessage(hwnd
,
121 (LPARAM
)MAKELANGID(LANG_SPANISH
, SUBLANG_SPANISH_MODERN
));
127 GetLocaleInfo(lcid
& 0xFFFF, LOCALE_SSORTNAME
, lang
, sizeof(lang
)/sizeof(TCHAR
));
129 index
= SendMessage(hWndSortList
,
134 SendMessage(hWndSortList
,
137 (LPARAM
)lcid
& 0xFFFF);
139 EnumSystemLocales(SortEnumProc
, LCID_ALTERNATE_SORTS
);
142 /* Select current locale */
143 /* or should it be System and not user? */
144 GetLocaleInfo(lcid
, LOCALE_SSORTNAME
, lang
, sizeof(lang
));
152 /* Property page dialog callback */
154 SortPageProc(HWND hwndDlg
,
159 PGLOBALDATA pGlobalData
;
161 pGlobalData
= (PGLOBALDATA
)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
166 pGlobalData
= (PGLOBALDATA
)((LPPROPSHEETPAGE
)lParam
)->lParam
;
167 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pGlobalData
);
169 CreateSortList(GetDlgItem(hwndDlg
, IDC_SORTLIST_COMBO
), pGlobalData
->lcid
);
173 switch (LOWORD(wParam
))
175 case IDC_SORTLIST_COMBO
:
176 if (HIWORD(wParam
) == CBN_SELCHANGE
)
181 iCurSel
= SendDlgItemMessage(hwndDlg
,
186 if (iCurSel
== CB_ERR
)
189 NewLcid
= SendDlgItemMessage(hwndDlg
,
194 if (NewLcid
== (LCID
)CB_ERR
)
197 /* Save the new LCID */
198 pGlobalData
->lcid
= NewLcid
;
200 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
207 if (((LPNMHDR
)lParam
)->code
== (UINT
)PSN_APPLY
)
209 /* FIXME: Set locale ID: pGlobalData->lcid */