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 g
->ThemeId
= -1; /* Customized */
106 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_COLORSCHEME
, CB_SETCURSEL
, (WPARAM
)-1, 0);
107 SetDlgItemText(hwndDlg
, IDC_APPEARANCE_COLORSCHEME
, TEXT(""));
108 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->Theme
);
112 case IDC_APPEARANCE_ADVANCED
:
113 if (DialogBoxParam(hApplet
, MAKEINTRESOURCE(IDD_ADVAPPEARANCE
),
114 hwndDlg
, AdvAppearanceDlgProc
, (LPARAM
)g
) == IDOK
)
116 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
117 g
->Theme
= g
->ThemeAdv
;
118 g_GlobalData
.desktop_color
= g
->Theme
.crColor
[COLOR_DESKTOP
];
119 g
->bHasChanged
= TRUE
;
120 g
->ThemeId
= -1; /* Customized */
121 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_COLORSCHEME
, CB_SETCURSEL
, (WPARAM
)-1, 0);
122 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 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&Theme
);
146 lpnm
= (LPNMHDR
)lParam
;
152 INT ThemeId
= GetSelectedThemeId(hwndDlg
);
153 ApplyTheme(&g
->Theme
, ThemeId
);
154 g
->ThemeId
= ThemeId
;
155 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->Theme
);
156 g
->bHasChanged
= FALSE
;
158 SetWindowLongPtr(hwndDlg
, DWLP_MSGRESULT
, (LONG_PTR
)PSNRET_NOERROR
);
162 SetWindowLongPtr(hwndDlg
, DWLP_MSGRESULT
, (LONG_PTR
)FALSE
);
166 if (g
->Theme
.crColor
[COLOR_DESKTOP
] != g_GlobalData
.desktop_color
)
168 g
->Theme
.crColor
[COLOR_DESKTOP
] = g_GlobalData
.desktop_color
;
169 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->Theme
);