Merge HAL changes 34743, 34812, 34839, 34917, 35515, 35771, 35902, 35904,
[reactos.git] / reactos / dll / cpl / desk / effappdlg.c
1 /* $Id: effappdlg.c 24836 2007-02-12 03:12:56Z tkreuzer $
2 *
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS Display Control Panel
5 * FILE: dll/cpl/desk/effappdlg.c
6 * PURPOSE: Effects appearance dialog
7 *
8 * PROGRAMMER: Jan Roeloffzen (jroeloffzen[at]hotmail[dot]com)
9 *
10 */
11
12 #include "desk.h"
13 #include "appearance.h"
14
15 /* Update all the controls with the current values for the selected screen element */
16 static VOID
17 UpdateControls(HWND hwndDlg, GLOBALS *g)
18 {
19 WPARAM state;
20 state = SendDlgItemMessage(hwndDlg, IDC_EFFAPPEARANCE_ANIMATION, BM_GETCHECK, 0, 0);
21 g->ThemeAdv.Effects.bMenuAnimation = (state == BST_CHECKED) ? TRUE : FALSE;
22 EnableWindow(GetDlgItem(hwndDlg, IDC_EFFAPPEARANCE_ANIMATIONTYPE), g->ThemeAdv.Effects.bMenuAnimation);
23
24 //A boolean as an index for a 2-value list:
25 SendDlgItemMessage(hwndDlg, IDC_EFFAPPEARANCE_ANIMATIONTYPE, CB_SETCURSEL, (WPARAM)g->ThemeAdv.Effects.bMenuFade, 0);
26
27 state = SendDlgItemMessage(hwndDlg, IDC_EFFAPPEARANCE_KEYBOARDCUES, BM_GETCHECK, 0, 0);
28 g->ThemeAdv.Effects.bKeyboardCues = (state == BST_CHECKED) ? FALSE : TRUE;
29 }
30
31
32 static VOID
33 SaveCurrentValues(HWND hwndDlg, GLOBALS *g)
34 {
35 }
36
37 static VOID
38 AddToCombo(HWND hwndDlg, INT From, INT To, INT Combo)
39 {
40 INT iElement, iListIndex, i=0;
41 TCHAR tstrText[80];
42
43 for (iElement = From; iElement<=To; iElement++)
44 {
45 LoadString(hApplet, iElement, (LPTSTR)tstrText, 80);
46 iListIndex = SendDlgItemMessage(hwndDlg, Combo, CB_ADDSTRING, 0, (LPARAM)tstrText);
47 SendDlgItemMessage(hwndDlg, Combo, CB_SETITEMDATA, (WPARAM)iListIndex, (LPARAM)i++ );
48 }
49 }
50
51 /* Initialize the effects appearance dialog */
52 static VOID
53 EffAppearanceDlg_Init(HWND hwndDlg, GLOBALS *g)
54 {
55 WPARAM state;
56
57 /* Copy the current theme values */
58 g->ThemeAdv = g->Theme;
59
60 AddToCombo(hwndDlg, IDS_SLIDEEFFECT, IDS_FADEEFFECT, IDC_EFFAPPEARANCE_ANIMATIONTYPE);
61
62 state = g->ThemeAdv.Effects.bMenuAnimation ? BST_CHECKED : BST_UNCHECKED;
63 SendDlgItemMessage(hwndDlg, IDC_EFFAPPEARANCE_ANIMATION, BM_SETCHECK, state, 0);
64
65 state = g->ThemeAdv.Effects.bKeyboardCues ? BST_UNCHECKED : BST_CHECKED;
66 SendDlgItemMessage(hwndDlg, IDC_EFFAPPEARANCE_KEYBOARDCUES, BM_SETCHECK, state, 0);
67
68 /* Update the controls */
69 UpdateControls(hwndDlg, g);
70 }
71
72
73 static VOID
74 EffAppearanceDlg_CleanUp(HWND hwndDlg, GLOBALS* g)
75 {
76 }
77
78 INT_PTR CALLBACK
79 EffAppearanceDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
80 {
81 GLOBALS* g;
82
83 g = (GLOBALS*)GetWindowLongPtr(hwndDlg, DWLP_USER);
84
85 switch (uMsg)
86 {
87 case WM_INITDIALOG:
88 g = (GLOBALS*)lParam;
89 SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)g);
90 EffAppearanceDlg_Init(hwndDlg, g);
91 break;
92
93 case WM_DESTROY:
94 EffAppearanceDlg_CleanUp(hwndDlg, g);
95 break;
96
97 case WM_COMMAND:
98 switch(LOWORD(wParam))
99 {
100 case IDOK:
101 SaveCurrentValues(hwndDlg, g);
102 EndDialog(hwndDlg, 0);
103 break;
104
105 case IDCANCEL:
106 g->ThemeAdv = g->Theme;
107 EndDialog(hwndDlg, 0);
108 break;
109
110 case IDC_EFFAPPEARANCE_ANIMATION:
111 case IDC_EFFAPPEARANCE_KEYBOARDCUES:
112 if (HIWORD(wParam) == BN_CLICKED)
113 {
114 UpdateControls(hwndDlg, g);
115 }
116 break;
117
118 case IDC_EFFAPPEARANCE_ANIMATIONTYPE:
119 if (HIWORD(wParam) == CBN_SELCHANGE)
120 {
121 SaveCurrentValues(hwndDlg, g);
122 g->ThemeAdv.Effects.bMenuFade = SendDlgItemMessage(hwndDlg, IDC_EFFAPPEARANCE_ANIMATIONTYPE, CB_GETCURSEL, 0, 0);
123 UpdateControls(hwndDlg, g);
124 }
125 break;
126
127 default:
128 return FALSE;
129 }
130 break;
131
132 default:
133 return FALSE;
134 }
135
136 return TRUE;
137 }