Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenappearance.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
1.7.6.1
|