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

appearance.c
Go to the documentation of this file.
00001 /*
00002  * COPYRIGHT:       See COPYING in the top level directory
00003  * PROJECT:         ReactOS Display Control Panel
00004  * FILE:            dll/cpl/desk/appearance.c
00005  * PURPOSE:         Appearance property page
00006  *
00007  * PROGRAMMERS:     Trevor McCort (lycan359@gmail.com)
00008  *                  Timo Kreuzer (timo[dot]kreuzer[at]web[dot]de)
00009  */
00010 
00011 #include "desk.h"
00012 
00013 /******************************************************************************/
00014 
00015 static void
00016 AppearancePage_ShowColorScemes(GLOBALS *g, HWND hwndColor, INT ThemeId)
00017 {
00018     int i, iListIndex;
00019 
00020     SendMessage(hwndColor, CB_RESETCONTENT , 0, 0);
00021 
00022     if(g->bThemeActive == FALSE)
00023     {
00024         for(i = 0; i < g_TemplateCount; i++)
00025         {
00026             iListIndex = SendMessage(hwndColor, CB_ADDSTRING, 0, (LPARAM)g_ColorSchemes[i].strLegacyName);
00027             SendMessage(hwndColor, CB_SETITEMDATA, iListIndex, i);
00028             if (lstrcmp(g_ColorSchemes[i].strKeyName, g->strSelectedStyle) == 0)
00029             {
00030                 g->SchemeId = i;
00031                 SendMessage(hwndColor, CB_SETCURSEL, (WPARAM)iListIndex, 0);
00032             }
00033         }
00034     }
00035     else
00036     {
00037         PTHEME pTheme = (PTHEME)DSA_GetItemPtr(g->Themes, ThemeId);
00038         for(i = 0; i < pTheme->ColorsCount; i++)
00039         {
00040             PTHEME_STYLE pStyleName;
00041             pStyleName = (PTHEME_STYLE)DSA_GetItemPtr(pTheme->Colors, i);
00042             iListIndex = SendMessage(hwndColor, CB_ADDSTRING, 0, (LPARAM)pStyleName->DisplayName);
00043             SendMessage(hwndColor, CB_SETITEMDATA, iListIndex, i);
00044             if(i == 0 || (g->pszColorName && wcscmp(pStyleName->StlyeName, g->pszColorName) == 0))
00045             {
00046                 g->SchemeId = i;
00047                 SendMessage(hwndColor, CB_SETCURSEL, (WPARAM)iListIndex, 0);
00048             }
00049         }
00050     }
00051 }
00052 
00053 static INT_PTR
00054 AppearancePage_OnInit(HWND hwndDlg)
00055 {
00056     INT i, /*TemplateCount,*/ iListIndex;
00057     HWND hwndColor, hwndTheme;
00058     GLOBALS *g;
00059 
00060     g = (GLOBALS*)LocalAlloc(LPTR, sizeof(GLOBALS));
00061     if (g == NULL)
00062         return FALSE;
00063 
00064     SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)g);
00065 
00066     LoadCurrentScheme(&g->Scheme);
00067     g->SchemeAdv = g->Scheme;
00068     g->bThemeChanged = FALSE;
00069     g->bSchemeChanged = FALSE;
00070     g->hBoldFont = g->hItalicFont = NULL;
00071     g->hbmpColor[0] = g->hbmpColor[1] = g->hbmpColor[2] = NULL;
00072     g->bInitializing = FALSE;
00073     g->bThemeActive = FALSE;
00074 
00075     LoadThemes(g);
00076 
00077     /*TemplateCount = */ LoadSchemePresetEntries(g->strSelectedStyle);
00078 
00079     hwndColor = GetDlgItem(hwndDlg, IDC_APPEARANCE_COLORSCHEME);
00080     g->SchemeId = -1;
00081     g->bInitializing = TRUE;
00082 
00083     hwndTheme = GetDlgItem(hwndDlg, IDC_APPEARANCE_VISUAL_STYLE);
00084     for(i = 0; i < g->ThemesCount; i++)
00085     {
00086         PTHEME pTheme = (PTHEME)DSA_GetItemPtr(g->Themes, i);
00087         iListIndex = SendMessage(hwndTheme, CB_ADDSTRING, 0, (LPARAM)pTheme->displayName);
00088         SendMessage(hwndTheme, CB_SETITEMDATA, iListIndex, i);
00089         if((!pTheme->themeFileName && !IsThemeActive()) || 
00090            (pTheme->themeFileName && g->pszThemeFileName && wcscmp(pTheme->themeFileName, g->pszThemeFileName) == 0 ))
00091         {
00092             g->ThemeId = i;
00093             g->bThemeActive = (pTheme->themeFileName != NULL);
00094             SendMessage(hwndTheme, CB_SETCURSEL, (WPARAM)iListIndex, 0);
00095             AppearancePage_ShowColorScemes(g, hwndColor, i);
00096         }
00097 
00098     }
00099 
00100     g->bInitializing = FALSE;
00101 
00102     return FALSE;
00103 }
00104 
00105 static VOID
00106 AppearancePage_OnDestroy(HWND hwndDlg, GLOBALS *g)
00107 {
00108     LocalFree(g);
00109 }
00110 
00111 static INT
00112 GetSelectedId(HWND hwndDlg, int nIDDlgItem)
00113 {
00114     HWND hwndCombo;
00115     INT sel;
00116 
00117     hwndCombo = GetDlgItem(hwndDlg, nIDDlgItem);
00118     sel = SendMessage(hwndCombo, CB_GETCURSEL, 0, 0);
00119     if (sel == CB_ERR)
00120         return -1;
00121     return (INT)SendMessage(hwndCombo, CB_GETITEMDATA, (WPARAM)sel, 0);
00122 }
00123 
00124 INT_PTR CALLBACK
00125 AppearancePageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
00126 {
00127     GLOBALS *g;
00128     LPNMHDR lpnm;
00129 
00130     g = (GLOBALS*)GetWindowLongPtr(hwndDlg, DWLP_USER);
00131 
00132     switch (uMsg)
00133     {
00134         case WM_INITDIALOG:
00135             return AppearancePage_OnInit(hwndDlg);
00136 
00137         case WM_DESTROY:
00138             AppearancePage_OnDestroy(hwndDlg, g);
00139             break;
00140 
00141         case WM_COMMAND:
00142             switch (LOWORD(wParam))
00143             {
00144                 case IDC_APPEARANCE_EFFECTS:
00145                     if (DialogBoxParam(hApplet, MAKEINTRESOURCE(IDD_EFFAPPEARANCE),
00146                                        hwndDlg, EffAppearanceDlgProc, (LPARAM)g) == IDOK)
00147                     {
00148                         PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
00149                         g->Scheme = g->SchemeAdv;
00150                         g->bSchemeChanged = TRUE;
00151                         // Effects dialog doesn't change the color scheme, therefore the following lines are commented out, until fixed finally
00152                         //g->SchemeId = -1; /* Customized */
00153                         //SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_COLORSCHEME, CB_SETCURSEL, (WPARAM)-1, 0);
00154                         //SetDlgItemText(hwndDlg, IDC_APPEARANCE_COLORSCHEME, TEXT(""));
00155                         SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->Scheme);
00156                     }
00157                     break;
00158 
00159                 case IDC_APPEARANCE_ADVANCED:
00160                     if (DialogBoxParam(hApplet, MAKEINTRESOURCE(IDD_ADVAPPEARANCE),
00161                                        hwndDlg, AdvAppearanceDlgProc, (LPARAM)g) == IDOK)
00162                     {
00163                         PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
00164                         g->bSchemeChanged = TRUE;
00165                         g->Scheme = g->SchemeAdv;
00166                         g->SchemeId = -1;   /* Customized */
00167                         g_GlobalData.desktop_color = g->Scheme.crColor[COLOR_DESKTOP];
00168 
00169                         SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_COLORSCHEME, CB_SETCURSEL, (WPARAM)-1, 0);
00170                         SetDlgItemText(hwndDlg, IDC_APPEARANCE_COLORSCHEME, TEXT(""));
00171 
00172                         SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->Scheme);
00173                     }
00174                     break;
00175 
00176                 case IDC_APPEARANCE_COLORSCHEME:
00177                     if (HIWORD(wParam) == CBN_SELCHANGE && !g->bInitializing)
00178                     {
00179                         INT SchemeId = GetSelectedId(hwndDlg, IDC_APPEARANCE_COLORSCHEME);
00180 
00181                         PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
00182 
00183                         if(g->bThemeActive == FALSE)
00184                         {
00185                             COLOR_SCHEME Scheme;
00186 
00187                             g->bSchemeChanged = TRUE;
00188                             if (SchemeId != -1 && LoadSchemeFromReg(&Scheme, SchemeId))
00189                             {
00190                                 g->Scheme = Scheme;
00191                                 g_GlobalData.desktop_color = g->Scheme.crColor[COLOR_DESKTOP];
00192                                 SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&Scheme);
00193                             }
00194                         }
00195                         else
00196                         {
00197                             g->bThemeChanged = TRUE;
00198                         }
00199                     }
00200                     break;
00201                 case IDC_APPEARANCE_VISUAL_STYLE:
00202                     if (HIWORD(wParam) == CBN_SELCHANGE && !g->bInitializing)
00203                     {
00204                         INT ThemeId = GetSelectedId(hwndDlg, IDC_APPEARANCE_VISUAL_STYLE);
00205                         HWND hwndColor = GetDlgItem(hwndDlg, IDC_APPEARANCE_COLORSCHEME);
00206 
00207                         PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
00208 
00209                         g->bThemeActive = (ThemeId!=0);
00210                         g->bThemeChanged = TRUE;
00211                         AppearancePage_ShowColorScemes(g, hwndColor, ThemeId);
00212                     }
00213                     break;
00214             }
00215             break;
00216 
00217         case WM_NOTIFY:
00218             lpnm = (LPNMHDR)lParam;
00219             switch (lpnm->code)
00220             {
00221                 case PSN_APPLY:
00222 
00223                     g->ThemeId = GetSelectedId(hwndDlg, IDC_APPEARANCE_VISUAL_STYLE);
00224                     g->SchemeId = GetSelectedId(hwndDlg, IDC_APPEARANCE_COLORSCHEME);
00225 
00226                     if(g->bSchemeChanged)
00227                     {
00228                         ApplyScheme(&g->Scheme, g->SchemeId);
00229                     }
00230 
00231                     if(g->bThemeChanged)
00232                     {
00233                         PTHEME pTheme = (PTHEME)DSA_GetItemPtr(g->Themes, g->ThemeId);
00234                         ActivateTheme(pTheme, g->SchemeId, 0);
00235                     }
00236 
00237                     SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->Scheme);
00238                     g->bThemeChanged = FALSE;
00239                     g->bSchemeChanged = FALSE;
00240                     SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, (LONG_PTR)PSNRET_NOERROR);
00241                     return TRUE;
00242 
00243                 case PSN_KILLACTIVE:
00244                     SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, (LONG_PTR)FALSE);
00245                     return TRUE;
00246 
00247                 case PSN_SETACTIVE:
00248                     if (g->Scheme.crColor[COLOR_DESKTOP] != g_GlobalData.desktop_color)
00249                     {
00250                         g->Scheme.crColor[COLOR_DESKTOP] = g_GlobalData.desktop_color;
00251                         SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->Scheme);
00252                     }
00253                     break;
00254             }
00255             break;
00256     }
00257 
00258     return FALSE;
00259 }

Generated on Sun May 27 2012 04:20:52 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.