Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygensort.c
Go to the documentation of this file.
00001 /* $Id: sort.c 52956 2011-07-28 14:54:48Z akhaldi $ 00002 * 00003 * PROJECT: ReactOS International Control Panel 00004 * FILE: dll/cpl/intl/sort.c 00005 * PURPOSE: Sorting property page 00006 * PROGRAMMER: Eric Kohl 00007 */ 00008 00009 #include "intl.h" 00010 00011 static BOOL bSortPage = FALSE; 00012 static LCID userLcid; 00013 00014 static HWND hWndSortList = NULL; 00015 00016 00017 static BOOL CALLBACK 00018 SortTestEnumProc(LPTSTR lpLocale) 00019 { 00020 LCID lcid; 00021 00022 lcid = _tcstoul(lpLocale, NULL, 16); 00023 00024 if ((LANGIDFROMLCID(lcid) == LANGIDFROMLCID(userLcid)) && 00025 (SORTIDFROMLCID(lcid) != SORTIDFROMLCID(userLcid))) 00026 bSortPage = TRUE; 00027 00028 return TRUE; 00029 } 00030 00031 00032 BOOL 00033 IsSortPageNeeded(LCID lcid) 00034 { 00035 /* Handle special case for Spanish (Spain) */ 00036 if (lcid == MAKELCID(MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH), SORT_DEFAULT) || 00037 lcid == MAKELCID(MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_MODERN), SORT_DEFAULT)) 00038 return TRUE; 00039 00040 userLcid = lcid; 00041 bSortPage = FALSE; 00042 00043 EnumSystemLocales(SortTestEnumProc, LCID_ALTERNATE_SORTS); 00044 00045 return bSortPage; 00046 } 00047 00048 00049 static BOOL CALLBACK 00050 SortEnumProc(LPTSTR lpLocale) 00051 { 00052 LCID lcid; 00053 TCHAR lang[255]; 00054 INT index; 00055 00056 lcid = _tcstoul(lpLocale, NULL, 16); 00057 00058 if ((LANGIDFROMLCID(lcid) == LANGIDFROMLCID(userLcid)) && 00059 (SORTIDFROMLCID(lcid) != SORTIDFROMLCID(userLcid))) 00060 { 00061 GetLocaleInfo(lcid, LOCALE_SSORTNAME, lang, sizeof(lang)/sizeof(TCHAR)); 00062 00063 index = SendMessage(hWndSortList, 00064 CB_ADDSTRING, 00065 0, 00066 (LPARAM)lang); 00067 00068 SendMessage(hWndSortList, 00069 CB_SETITEMDATA, 00070 index, 00071 (LPARAM)lcid); 00072 } 00073 00074 return TRUE; 00075 } 00076 00077 static VOID 00078 CreateSortList(HWND hwnd, LCID lcid) 00079 { 00080 TCHAR lang[255]; 00081 INT index; 00082 00083 hWndSortList = hwnd; 00084 00085 /* Handle special case for Spainish (Spain) */ 00086 if (lcid == MAKELCID(MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH), SORT_DEFAULT) || 00087 lcid == MAKELCID(MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_MODERN), SORT_DEFAULT)) 00088 { 00089 /* Add traditional sorting */ 00090 GetLocaleInfo(MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH), 00091 LOCALE_SSORTNAME, lang, sizeof(lang)/sizeof(TCHAR)); 00092 00093 index = SendMessage(hwnd, 00094 CB_ADDSTRING, 00095 0, 00096 (LPARAM)lang); 00097 00098 SendMessage(hwnd, 00099 CB_SETITEMDATA, 00100 index, 00101 (LPARAM)MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH)); 00102 00103 /* Add modern sorting */ 00104 GetLocaleInfo(MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_MODERN), 00105 LOCALE_SSORTNAME, lang, sizeof(lang)/sizeof(TCHAR)); 00106 00107 index = SendMessage(hwnd, 00108 CB_ADDSTRING, 00109 0, 00110 (LPARAM)lang); 00111 00112 SendMessage(hwnd, 00113 CB_SETITEMDATA, 00114 index, 00115 (LPARAM)MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_MODERN)); 00116 } 00117 else 00118 { 00119 userLcid = lcid; 00120 00121 GetLocaleInfo(lcid & 0xFFFF, LOCALE_SSORTNAME, lang, sizeof(lang)/sizeof(TCHAR)); 00122 00123 index = SendMessage(hWndSortList, 00124 CB_ADDSTRING, 00125 0, 00126 (LPARAM)lang); 00127 00128 SendMessage(hWndSortList, 00129 CB_SETITEMDATA, 00130 index, 00131 (LPARAM)lcid & 0xFFFF); 00132 00133 EnumSystemLocales(SortEnumProc, LCID_ALTERNATE_SORTS); 00134 } 00135 00136 /* Select current locale */ 00137 /* or should it be System and not user? */ 00138 GetLocaleInfo(lcid, LOCALE_SSORTNAME, lang, sizeof(lang)); 00139 00140 SendMessage(hwnd, 00141 CB_SELECTSTRING, 00142 -1, 00143 (LPARAM)lang); 00144 } 00145 00146 /* Property page dialog callback */ 00147 INT_PTR CALLBACK 00148 SortPageProc(HWND hwndDlg, 00149 UINT uMsg, 00150 WPARAM wParam, 00151 LPARAM lParam) 00152 { 00153 PGLOBALDATA pGlobalData; 00154 00155 pGlobalData = (PGLOBALDATA)GetWindowLongPtr(hwndDlg, DWLP_USER); 00156 00157 switch (uMsg) 00158 { 00159 case WM_INITDIALOG: 00160 pGlobalData = (PGLOBALDATA)((LPPROPSHEETPAGE)lParam)->lParam; 00161 SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData); 00162 00163 CreateSortList(GetDlgItem(hwndDlg, IDC_SORTLIST_COMBO), pGlobalData->lcid); 00164 break; 00165 00166 case WM_COMMAND: 00167 switch (LOWORD(wParam)) 00168 { 00169 case IDC_SORTLIST_COMBO: 00170 if (HIWORD(wParam) == CBN_SELCHANGE) 00171 { 00172 LCID NewLcid; 00173 INT iCurSel; 00174 00175 iCurSel = SendDlgItemMessage(hwndDlg, 00176 IDC_SORTLIST_COMBO, 00177 CB_GETCURSEL, 00178 0, 00179 0); 00180 if (iCurSel == CB_ERR) 00181 break; 00182 00183 NewLcid = SendDlgItemMessage(hwndDlg, 00184 IDC_SORTLIST_COMBO, 00185 CB_GETITEMDATA, 00186 iCurSel, 00187 0); 00188 if (NewLcid == (LCID)CB_ERR) 00189 break; 00190 00191 /* Save the new LCID */ 00192 pGlobalData->lcid = NewLcid; 00193 00194 PropSheet_Changed(GetParent(hwndDlg), hwndDlg); 00195 } 00196 break; 00197 } 00198 break; 00199 00200 case WM_NOTIFY: 00201 if (((LPNMHDR)lParam)->code == (UINT)PSN_APPLY) 00202 { 00203 /* FIXME: Set locale ID: pGlobalData->lcid */ 00204 } 00205 break; 00206 } 00207 00208 return FALSE; 00209 } 00210 00211 /* EOF */ Generated on Mon May 28 2012 04:20:35 for ReactOS by
1.7.6.1
|