ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

sort.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.