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)
14 #include "appearance.h"
16 /******************************************************************************/
19 AppearancePage_OnInit(HWND hwndDlg
)
21 TCHAR strSelectedStyle
[4];
22 INT i
, TemplateCount
, iListIndex
;
26 g
= (GLOBALS
*)LocalAlloc(LPTR
, sizeof(GLOBALS
));
30 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)g
);
32 LoadCurrentTheme(&g
->Theme
);
33 g
->ThemeAdv
= g
->Theme
;
34 g
->bHasChanged
= FALSE
;
35 g
->hBoldFont
= g
->hItalicFont
= NULL
;
36 g
->hbmpColor
[0] = g
->hbmpColor
[1] = g
->hbmpColor
[2] = NULL
;
37 g
->bInitializing
= FALSE
;
39 TemplateCount
= LoadThemePresetEntries(strSelectedStyle
);
41 hwndCombo
= GetDlgItem(hwndDlg
, IDC_APPEARANCE_COLORSCHEME
);
43 g
->bInitializing
= TRUE
;
44 for(i
= 0; i
< TemplateCount
; i
++)
46 iListIndex
= SendMessage(hwndCombo
, CB_ADDSTRING
, 0, (LPARAM
)g_ThemeTemplates
[i
].strLegacyName
);
47 SendMessage(hwndCombo
, CB_SETITEMDATA
, iListIndex
, i
);
48 if (lstrcmp(g_ThemeTemplates
[i
].strKeyName
, strSelectedStyle
) == 0)
51 SendMessage(hwndCombo
, CB_SETCURSEL
, (WPARAM
)iListIndex
, 0);
54 g
->bInitializing
= FALSE
;
60 AppearancePage_OnDestroy(HWND hwndDlg
, GLOBALS
*g
)
66 GetSelectedThemeId(HWND hwndDlg
)
71 hwndCombo
= GetDlgItem(hwndDlg
, IDC_APPEARANCE_COLORSCHEME
);
72 sel
= SendMessage(hwndCombo
, CB_GETCURSEL
, 0, 0);
75 return (INT
)SendMessage(hwndCombo
, CB_GETITEMDATA
, (WPARAM
)sel
, 0);
79 AppearancePageProc(HWND hwndDlg
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
)
84 g
= (GLOBALS
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
89 return AppearancePage_OnInit(hwndDlg
);
92 AppearancePage_OnDestroy(hwndDlg
, g
);
96 switch (LOWORD(wParam
))
98 case IDC_APPEARANCE_EFFECTS
:
99 if (DialogBoxParam(hApplet
, MAKEINTRESOURCE(IDD_EFFAPPEARANCE
),
100 hwndDlg
, EffAppearanceDlgProc
, (LPARAM
)g
) == IDOK
)
102 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
103 g
->Theme
= g
->ThemeAdv
;
104 g
->bHasChanged
= TRUE
;
105 // Effects dialog doesn't change the color scheme, therefore the following lines are commented out, until fixed finally
106 //g->ThemeId = -1; /* Customized */
107 //SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_COLORSCHEME, CB_SETCURSEL, (WPARAM)-1, 0);
108 //SetDlgItemText(hwndDlg, IDC_APPEARANCE_COLORSCHEME, TEXT(""));
109 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->Theme
);
113 case IDC_APPEARANCE_ADVANCED
:
114 if (DialogBoxParam(hApplet
, MAKEINTRESOURCE(IDD_ADVAPPEARANCE
),
115 hwndDlg
, AdvAppearanceDlgProc
, (LPARAM
)g
) == IDOK
)
117 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
118 g
->bHasChanged
= TRUE
;
119 g
->Theme
= g
->ThemeAdv
;
120 g
->ThemeId
= -1; /* Customized */
121 g_GlobalData
.desktop_color
= g
->Theme
.crColor
[COLOR_DESKTOP
];
123 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_COLORSCHEME
, CB_SETCURSEL
, (WPARAM
)-1, 0);
124 SetDlgItemText(hwndDlg
, IDC_APPEARANCE_COLORSCHEME
, TEXT(""));
126 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->Theme
);
130 case IDC_APPEARANCE_COLORSCHEME
:
131 if (HIWORD(wParam
) == CBN_SELCHANGE
&& !g
->bInitializing
)
134 INT ThemeId
= GetSelectedThemeId(hwndDlg
);
135 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
136 g
->bHasChanged
= TRUE
;
137 if (ThemeId
!= -1 && LoadThemeFromReg(&Theme
, ThemeId
))
140 g
->ThemeId
= ThemeId
;
141 g_GlobalData
.desktop_color
= g
->Theme
.crColor
[COLOR_DESKTOP
];
142 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&Theme
);
150 lpnm
= (LPNMHDR
)lParam
;
156 INT ThemeId
= GetSelectedThemeId(hwndDlg
);
157 ApplyTheme(&g
->Theme
, ThemeId
);
158 g
->ThemeId
= ThemeId
;
159 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->Theme
);
160 g
->bHasChanged
= FALSE
;
162 SetWindowLongPtr(hwndDlg
, DWLP_MSGRESULT
, (LONG_PTR
)PSNRET_NOERROR
);
166 SetWindowLongPtr(hwndDlg
, DWLP_MSGRESULT
, (LONG_PTR
)FALSE
);
170 if (g
->Theme
.crColor
[COLOR_DESKTOP
] != g_GlobalData
.desktop_color
)
172 g
->Theme
.crColor
[COLOR_DESKTOP
] = g_GlobalData
.desktop_color
;
173 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->Theme
);