2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Display Control Panel
4 * FILE: dll/cpl/desk/appearance.c
5 * PURPOSE: Appearance property page
7 * PROGRAMMERS: Trevor McCort (lycan359@gmail.com)
8 * Timo Kreuzer (timo[dot]kreuzer[at]web[dot]de)
13 /******************************************************************************/
16 AppearancePage_ShowColorScemes(GLOBALS
*g
, HWND hwndColor
, INT ThemeId
)
20 SendMessage(hwndColor
, CB_RESETCONTENT
, 0, 0);
22 if(g
->bThemeActive
== FALSE
)
24 for(i
= 0; i
< g_TemplateCount
; i
++)
26 iListIndex
= SendMessage(hwndColor
, CB_ADDSTRING
, 0, (LPARAM
)g_ColorSchemes
[i
].strLegacyName
);
27 SendMessage(hwndColor
, CB_SETITEMDATA
, iListIndex
, i
);
28 if (lstrcmp(g_ColorSchemes
[i
].strKeyName
, g
->strSelectedStyle
) == 0)
31 SendMessage(hwndColor
, CB_SETCURSEL
, (WPARAM
)iListIndex
, 0);
37 PTHEME pTheme
= (PTHEME
)DSA_GetItemPtr(g
->Themes
, ThemeId
);
38 for(i
= 0; i
< pTheme
->ColorsCount
; i
++)
40 PTHEME_STYLE pStyleName
;
41 pStyleName
= (PTHEME_STYLE
)DSA_GetItemPtr(pTheme
->Colors
, i
);
42 iListIndex
= SendMessage(hwndColor
, CB_ADDSTRING
, 0, (LPARAM
)pStyleName
->DisplayName
);
43 SendMessage(hwndColor
, CB_SETITEMDATA
, iListIndex
, i
);
44 if(i
== 0 || (g
->pszColorName
&& wcscmp(pStyleName
->StlyeName
, g
->pszColorName
) == 0))
47 SendMessage(hwndColor
, CB_SETCURSEL
, (WPARAM
)iListIndex
, 0);
54 AppearancePage_OnInit(HWND hwndDlg
)
56 INT i
, /*TemplateCount,*/ iListIndex
;
57 HWND hwndColor
, hwndTheme
;
60 g
= (GLOBALS
*)LocalAlloc(LPTR
, sizeof(GLOBALS
));
64 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)g
);
66 LoadCurrentScheme(&g
->Scheme
);
67 g
->SchemeAdv
= g
->Scheme
;
68 g
->bThemeChanged
= FALSE
;
69 g
->bSchemeChanged
= FALSE
;
70 g
->hBoldFont
= g
->hItalicFont
= NULL
;
71 g
->hbmpColor
[0] = g
->hbmpColor
[1] = g
->hbmpColor
[2] = NULL
;
72 g
->bInitializing
= FALSE
;
73 g
->bThemeActive
= FALSE
;
77 /*TemplateCount = */ LoadSchemePresetEntries(g
->strSelectedStyle
);
79 hwndColor
= GetDlgItem(hwndDlg
, IDC_APPEARANCE_COLORSCHEME
);
81 g
->bInitializing
= TRUE
;
83 hwndTheme
= GetDlgItem(hwndDlg
, IDC_APPEARANCE_VISUAL_STYLE
);
84 for(i
= 0; i
< g
->ThemesCount
; i
++)
86 PTHEME pTheme
= (PTHEME
)DSA_GetItemPtr(g
->Themes
, i
);
87 iListIndex
= SendMessage(hwndTheme
, CB_ADDSTRING
, 0, (LPARAM
)pTheme
->displayName
);
88 SendMessage(hwndTheme
, CB_SETITEMDATA
, iListIndex
, i
);
89 if((!pTheme
->themeFileName
&& !IsThemeActive()) ||
90 (pTheme
->themeFileName
&& g
->pszThemeFileName
&& wcscmp(pTheme
->themeFileName
, g
->pszThemeFileName
) == 0 ))
93 g
->bThemeActive
= (pTheme
->themeFileName
!= NULL
);
94 SendMessage(hwndTheme
, CB_SETCURSEL
, (WPARAM
)iListIndex
, 0);
95 AppearancePage_ShowColorScemes(g
, hwndColor
, i
);
100 g
->bInitializing
= FALSE
;
106 AppearancePage_OnDestroy(HWND hwndDlg
, GLOBALS
*g
)
112 GetSelectedId(HWND hwndDlg
, int nIDDlgItem
)
117 hwndCombo
= GetDlgItem(hwndDlg
, nIDDlgItem
);
118 sel
= SendMessage(hwndCombo
, CB_GETCURSEL
, 0, 0);
121 return (INT
)SendMessage(hwndCombo
, CB_GETITEMDATA
, (WPARAM
)sel
, 0);
125 AppearancePageProc(HWND hwndDlg
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
)
130 g
= (GLOBALS
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
135 return AppearancePage_OnInit(hwndDlg
);
138 AppearancePage_OnDestroy(hwndDlg
, g
);
142 switch (LOWORD(wParam
))
144 case IDC_APPEARANCE_EFFECTS
:
145 if (DialogBoxParam(hApplet
, MAKEINTRESOURCE(IDD_EFFAPPEARANCE
),
146 hwndDlg
, EffAppearanceDlgProc
, (LPARAM
)g
) == IDOK
)
148 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
149 g
->Scheme
= g
->SchemeAdv
;
150 g
->bSchemeChanged
= TRUE
;
151 // Effects dialog doesn't change the color scheme, therefore the following lines are commented out, until fixed finally
152 //g->SchemeId = -1; /* Customized */
153 //SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_COLORSCHEME, CB_SETCURSEL, (WPARAM)-1, 0);
154 //SetDlgItemText(hwndDlg, IDC_APPEARANCE_COLORSCHEME, TEXT(""));
155 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->Scheme
);
159 case IDC_APPEARANCE_ADVANCED
:
160 if (DialogBoxParam(hApplet
, MAKEINTRESOURCE(IDD_ADVAPPEARANCE
),
161 hwndDlg
, AdvAppearanceDlgProc
, (LPARAM
)g
) == IDOK
)
163 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
164 g
->bSchemeChanged
= TRUE
;
165 g
->Scheme
= g
->SchemeAdv
;
166 g
->SchemeId
= -1; /* Customized */
167 g_GlobalData
.desktop_color
= g
->Scheme
.crColor
[COLOR_DESKTOP
];
169 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_COLORSCHEME
, CB_SETCURSEL
, (WPARAM
)-1, 0);
170 SetDlgItemText(hwndDlg
, IDC_APPEARANCE_COLORSCHEME
, TEXT(""));
172 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->Scheme
);
176 case IDC_APPEARANCE_COLORSCHEME
:
177 if (HIWORD(wParam
) == CBN_SELCHANGE
&& !g
->bInitializing
)
179 INT SchemeId
= GetSelectedId(hwndDlg
, IDC_APPEARANCE_COLORSCHEME
);
181 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
183 if(g
->bThemeActive
== FALSE
)
187 g
->bSchemeChanged
= TRUE
;
188 if (SchemeId
!= -1 && LoadSchemeFromReg(&Scheme
, SchemeId
))
191 g_GlobalData
.desktop_color
= g
->Scheme
.crColor
[COLOR_DESKTOP
];
192 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&Scheme
);
197 g
->bThemeChanged
= TRUE
;
201 case IDC_APPEARANCE_VISUAL_STYLE
:
202 if (HIWORD(wParam
) == CBN_SELCHANGE
&& !g
->bInitializing
)
204 INT ThemeId
= GetSelectedId(hwndDlg
, IDC_APPEARANCE_VISUAL_STYLE
);
205 HWND hwndColor
= GetDlgItem(hwndDlg
, IDC_APPEARANCE_COLORSCHEME
);
207 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
209 g
->bThemeActive
= (ThemeId
!=0);
210 g
->bThemeChanged
= TRUE
;
211 AppearancePage_ShowColorScemes(g
, hwndColor
, ThemeId
);
218 lpnm
= (LPNMHDR
)lParam
;
223 g
->ThemeId
= GetSelectedId(hwndDlg
, IDC_APPEARANCE_VISUAL_STYLE
);
224 g
->SchemeId
= GetSelectedId(hwndDlg
, IDC_APPEARANCE_COLORSCHEME
);
226 if(g
->bSchemeChanged
)
228 ApplyScheme(&g
->Scheme
, g
->SchemeId
);
233 PTHEME pTheme
= (PTHEME
)DSA_GetItemPtr(g
->Themes
, g
->ThemeId
);
234 ActivateTheme(pTheme
, g
->SchemeId
, 0);
237 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->Scheme
);
238 g
->bThemeChanged
= FALSE
;
239 g
->bSchemeChanged
= FALSE
;
240 SetWindowLongPtr(hwndDlg
, DWLP_MSGRESULT
, (LONG_PTR
)PSNRET_NOERROR
);
244 SetWindowLongPtr(hwndDlg
, DWLP_MSGRESULT
, (LONG_PTR
)FALSE
);
248 if (g
->Scheme
.crColor
[COLOR_DESKTOP
] != g_GlobalData
.desktop_color
)
250 g
->Scheme
.crColor
[COLOR_DESKTOP
] = g_GlobalData
.desktop_color
;
251 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->Scheme
);