2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Display Control Panel
4 * FILE: lib/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_OnInit(HWND hwndDlg
)
18 TCHAR strSelectedStyle
[4];
19 INT i
, TemplateCount
, iListIndex
;
23 g
= (GLOBALS
*)LocalAlloc(LPTR
, sizeof(GLOBALS
));
27 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)g
);
29 LoadCurrentTheme(&g
->Theme
);
30 g
->ThemeAdv
= g
->Theme
;
31 g
->bHasChanged
= FALSE
;
32 g
->hBoldFont
= g
->hItalicFont
= NULL
;
33 g
->hbmpColor
[0] = g
->hbmpColor
[1] = g
->hbmpColor
[2] = NULL
;
34 g
->bInitializing
= FALSE
;
36 TemplateCount
= LoadThemePresetEntries(strSelectedStyle
);
38 hwndCombo
= GetDlgItem(hwndDlg
, IDC_APPEARANCE_COLORSCHEME
);
40 g
->bInitializing
= TRUE
;
41 for(i
= 0; i
< TemplateCount
; i
++)
43 iListIndex
= SendMessage(hwndCombo
, CB_ADDSTRING
, 0, (LPARAM
)g_ThemeTemplates
[i
].strLegacyName
);
44 SendMessage(hwndCombo
, CB_SETITEMDATA
, iListIndex
, i
);
45 if (lstrcmp(g_ThemeTemplates
[i
].strKeyName
, strSelectedStyle
) == 0)
48 SendMessage(hwndCombo
, CB_SETCURSEL
, (WPARAM
)iListIndex
, 0);
51 g
->bInitializing
= FALSE
;
57 AppearancePage_OnDestroy(HWND hwndDlg
, GLOBALS
*g
)
63 GetSelectedThemeId(HWND hwndDlg
)
68 hwndCombo
= GetDlgItem(hwndDlg
, IDC_APPEARANCE_COLORSCHEME
);
69 sel
= SendMessage(hwndCombo
, CB_GETCURSEL
, 0, 0);
72 return (INT
)SendMessage(hwndCombo
, CB_GETITEMDATA
, (WPARAM
)sel
, 0);
76 AppearancePageProc(HWND hwndDlg
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
)
81 g
= (GLOBALS
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
86 return AppearancePage_OnInit(hwndDlg
);
89 AppearancePage_OnDestroy(hwndDlg
, g
);
93 switch (LOWORD(wParam
))
95 case IDC_APPEARANCE_EFFECTS
:
96 if (DialogBoxParam(hApplet
, MAKEINTRESOURCE(IDD_EFFAPPEARANCE
),
97 hwndDlg
, EffAppearanceDlgProc
, (LPARAM
)g
) == IDOK
)
99 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
100 g
->Theme
= g
->ThemeAdv
;
101 g
->bHasChanged
= TRUE
;
102 // Effects dialog doesn't change the color scheme, therefore the following lines are commented out, until fixed finally
103 //g->ThemeId = -1; /* Customized */
104 //SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_COLORSCHEME, CB_SETCURSEL, (WPARAM)-1, 0);
105 //SetDlgItemText(hwndDlg, IDC_APPEARANCE_COLORSCHEME, TEXT(""));
106 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->Theme
);
110 case IDC_APPEARANCE_ADVANCED
:
111 if (DialogBoxParam(hApplet
, MAKEINTRESOURCE(IDD_ADVAPPEARANCE
),
112 hwndDlg
, AdvAppearanceDlgProc
, (LPARAM
)g
) == IDOK
)
114 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
115 g
->bHasChanged
= TRUE
;
116 g
->Theme
= g
->ThemeAdv
;
117 g
->ThemeId
= -1; /* Customized */
118 g_GlobalData
.desktop_color
= g
->Theme
.crColor
[COLOR_DESKTOP
];
120 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_COLORSCHEME
, CB_SETCURSEL
, (WPARAM
)-1, 0);
121 SetDlgItemText(hwndDlg
, IDC_APPEARANCE_COLORSCHEME
, TEXT(""));
123 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->Theme
);
127 case IDC_APPEARANCE_COLORSCHEME
:
128 if (HIWORD(wParam
) == CBN_SELCHANGE
&& !g
->bInitializing
)
131 INT ThemeId
= GetSelectedThemeId(hwndDlg
);
132 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
133 g
->bHasChanged
= TRUE
;
134 if (ThemeId
!= -1 && LoadThemeFromReg(&Theme
, ThemeId
))
137 g
->ThemeId
= ThemeId
;
138 g_GlobalData
.desktop_color
= g
->Theme
.crColor
[COLOR_DESKTOP
];
139 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&Theme
);
147 lpnm
= (LPNMHDR
)lParam
;
153 INT ThemeId
= GetSelectedThemeId(hwndDlg
);
154 ApplyTheme(&g
->Theme
, ThemeId
);
155 g
->ThemeId
= ThemeId
;
156 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->Theme
);
157 g
->bHasChanged
= FALSE
;
159 SetWindowLongPtr(hwndDlg
, DWLP_MSGRESULT
, (LONG_PTR
)PSNRET_NOERROR
);
163 SetWindowLongPtr(hwndDlg
, DWLP_MSGRESULT
, (LONG_PTR
)FALSE
);
167 if (g
->Theme
.crColor
[COLOR_DESKTOP
] != g_GlobalData
.desktop_color
)
169 g
->Theme
.crColor
[COLOR_DESKTOP
] = g_GlobalData
.desktop_color
;
170 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->Theme
);