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