1 /* $Id: sort.c 52956 2011-07-28 14:54:48Z akhaldi $
3 * PROJECT: ReactOS International Control Panel
4 * FILE: dll/cpl/intl/sort.c
5 * PURPOSE: Sorting property page
6 * PROGRAMMER: Eric Kohl
11 static BOOL bSortPage
= FALSE
;
14 static HWND hWndSortList
= NULL
;
18 SortTestEnumProc(LPTSTR lpLocale
)
22 lcid
= _tcstoul(lpLocale
, NULL
, 16);
24 if ((LANGIDFROMLCID(lcid
) == LANGIDFROMLCID(userLcid
)) &&
25 (SORTIDFROMLCID(lcid
) != SORTIDFROMLCID(userLcid
)))
33 IsSortPageNeeded(LCID lcid
)
35 /* Handle special case for Spanish (Spain) */
36 if (lcid
== MAKELCID(MAKELANGID(LANG_SPANISH
, SUBLANG_SPANISH
), SORT_DEFAULT
) ||
37 lcid
== MAKELCID(MAKELANGID(LANG_SPANISH
, SUBLANG_SPANISH_MODERN
), SORT_DEFAULT
))
43 EnumSystemLocales(SortTestEnumProc
, LCID_ALTERNATE_SORTS
);
50 SortEnumProc(LPTSTR lpLocale
)
56 lcid
= _tcstoul(lpLocale
, NULL
, 16);
58 if ((LANGIDFROMLCID(lcid
) == LANGIDFROMLCID(userLcid
)) &&
59 (SORTIDFROMLCID(lcid
) != SORTIDFROMLCID(userLcid
)))
61 GetLocaleInfo(lcid
, LOCALE_SSORTNAME
, lang
, sizeof(lang
)/sizeof(TCHAR
));
63 index
= SendMessage(hWndSortList
,
68 SendMessage(hWndSortList
,
78 CreateSortList(HWND hwnd
, LCID lcid
)
85 /* Handle special case for Spainish (Spain) */
86 if (lcid
== MAKELCID(MAKELANGID(LANG_SPANISH
, SUBLANG_SPANISH
), SORT_DEFAULT
) ||
87 lcid
== MAKELCID(MAKELANGID(LANG_SPANISH
, SUBLANG_SPANISH_MODERN
), SORT_DEFAULT
))
89 /* Add traditional sorting */
90 GetLocaleInfo(MAKELANGID(LANG_SPANISH
, SUBLANG_SPANISH
),
91 LOCALE_SSORTNAME
, lang
, sizeof(lang
)/sizeof(TCHAR
));
93 index
= SendMessage(hwnd
,
101 (LPARAM
)MAKELANGID(LANG_SPANISH
, SUBLANG_SPANISH
));
103 /* Add modern sorting */
104 GetLocaleInfo(MAKELANGID(LANG_SPANISH
, SUBLANG_SPANISH_MODERN
),
105 LOCALE_SSORTNAME
, lang
, sizeof(lang
)/sizeof(TCHAR
));
107 index
= SendMessage(hwnd
,
115 (LPARAM
)MAKELANGID(LANG_SPANISH
, SUBLANG_SPANISH_MODERN
));
121 GetLocaleInfo(lcid
& 0xFFFF, LOCALE_SSORTNAME
, lang
, sizeof(lang
)/sizeof(TCHAR
));
123 index
= SendMessage(hWndSortList
,
128 SendMessage(hWndSortList
,
131 (LPARAM
)lcid
& 0xFFFF);
133 EnumSystemLocales(SortEnumProc
, LCID_ALTERNATE_SORTS
);
136 /* Select current locale */
137 /* or should it be System and not user? */
138 GetLocaleInfo(lcid
, LOCALE_SSORTNAME
, lang
, sizeof(lang
));
146 /* Property page dialog callback */
148 SortPageProc(HWND hwndDlg
,
153 PGLOBALDATA pGlobalData
;
155 pGlobalData
= (PGLOBALDATA
)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
160 pGlobalData
= (PGLOBALDATA
)((LPPROPSHEETPAGE
)lParam
)->lParam
;
161 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pGlobalData
);
163 CreateSortList(GetDlgItem(hwndDlg
, IDC_SORTLIST_COMBO
), pGlobalData
->lcid
);
167 switch (LOWORD(wParam
))
169 case IDC_SORTLIST_COMBO
:
170 if (HIWORD(wParam
) == CBN_SELCHANGE
)
175 iCurSel
= SendDlgItemMessage(hwndDlg
,
180 if (iCurSel
== CB_ERR
)
183 NewLcid
= SendDlgItemMessage(hwndDlg
,
188 if (NewLcid
== (LCID
)CB_ERR
)
191 /* Save the new LCID */
192 pGlobalData
->lcid
= NewLcid
;
194 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
201 if (((LPNMHDR
)lParam
)->code
== (UINT
)PSN_APPLY
)
203 /* FIXME: Set locale ID: pGlobalData->lcid */