[POWERCFG] Fix indentation. No code changes!
[reactos.git] / dll / cpl / powercfg / powercfg.c
1 /*
2 * PROJECT: ReactOS Power Configuration Applet
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: dll/cpl/powercfg/powercfg.c
5 * PURPOSE: initialization of applet
6 * PROGRAMMERS: Alexander Wurzinger (Lohnegrim at gmx dot net)
7 * Johannes Anderwald (johannes.anderwald@reactos.org)
8 * Martin Rottensteiner
9 * Dmitry Chapyshev (lentind@yandex.ru)
10 */
11
12 #include "powercfg.h"
13
14 #include <winreg.h>
15 #include <regstr.h>
16
17 #define NUM_APPLETS (1)
18
19 static LONG APIENTRY Applet1(HWND hwnd, UINT uMsg, LPARAM wParam, LPARAM lParam);
20
21
22 HINSTANCE hApplet = 0;
23 GLOBAL_POWER_POLICY gGPP;
24 TCHAR langSel[255];
25
26 /* Applets */
27 APPLET Applets[NUM_APPLETS] =
28 {
29 {IDC_CPLICON_1, IDS_CPLNAME_1, IDS_CPLDESCRIPTION_1, Applet1}
30 };
31
32 static BOOL CALLBACK
33 PropSheetAddPage(HPROPSHEETPAGE hpage, LPARAM lParam)
34 {
35 PROPSHEETHEADER *ppsh = (PROPSHEETHEADER *)lParam;
36 if (ppsh != NULL && ppsh->nPages < MAX_POWER_PAGES)
37 {
38 ppsh->phpage[ppsh->nPages++] = hpage;
39 return TRUE;
40 }
41
42 return FALSE;
43 }
44
45 static BOOL
46 InitPropSheetPage(PROPSHEETHEADER *ppsh, WORD idDlg, DLGPROC DlgProc)
47 {
48 HPROPSHEETPAGE hPage;
49 PROPSHEETPAGE psp;
50
51 if (ppsh->nPages < MAX_POWER_PAGES)
52 {
53 ZeroMemory(&psp, sizeof(psp));
54 psp.dwSize = sizeof(psp);
55 psp.dwFlags = PSP_DEFAULT;
56 psp.hInstance = hApplet;
57 psp.pszTemplate = MAKEINTRESOURCE(idDlg);
58 psp.pfnDlgProc = DlgProc;
59
60 hPage = CreatePropertySheetPage(&psp);
61 if (hPage != NULL)
62 {
63 return PropSheetAddPage(hPage, (LPARAM)ppsh);
64 }
65 }
66
67 return FALSE;
68 }
69
70 static int CALLBACK
71 PropSheetProc(HWND hwndDlg, UINT uMsg, LPARAM lParam)
72 {
73 // NOTE: This callback is needed to set large icon correctly.
74 HICON hIcon;
75
76 switch (uMsg)
77 {
78 case PSCB_INITIALIZED:
79 {
80 hIcon = LoadIconW(hApplet, MAKEINTRESOURCEW(IDC_CPLICON_1));
81 SendMessageW(hwndDlg, WM_SETICON, ICON_BIG, (LPARAM)hIcon);
82 break;
83 }
84 }
85 return 0;
86 }
87
88 /* First Applet */
89 static LONG APIENTRY
90 Applet1(HWND hwnd, UINT uMsg, LPARAM wParam, LPARAM lParam)
91 {
92 HPROPSHEETPAGE hpsp[MAX_POWER_PAGES];
93 PROPSHEETHEADER psh;
94 HPSXA hpsxa = NULL;
95 TCHAR Caption[1024];
96 SYSTEM_POWER_CAPABILITIES spc;
97 LONG ret;
98
99 UNREFERENCED_PARAMETER(uMsg);
100 UNREFERENCED_PARAMETER(wParam);
101 UNREFERENCED_PARAMETER(lParam);
102
103 memset(Caption, 0x0, sizeof(Caption));
104 LoadString(hApplet, IDS_CPLNAME_1, Caption, sizeof(Caption) / sizeof(TCHAR));
105
106 ZeroMemory(&psh, sizeof(PROPSHEETHEADER));
107 psh.dwSize = sizeof(PROPSHEETHEADER);
108 psh.dwFlags = PSH_PROPTITLE | PSH_USEICONID | PSH_USECALLBACK;
109 psh.hwndParent = hwnd;
110 psh.hInstance = hApplet;
111 psh.pszIcon = MAKEINTRESOURCEW(IDC_CPLICON_1);
112 psh.pszCaption = Caption;
113 psh.nPages = 0;
114 psh.nStartPage = 0;
115 psh.phpage = hpsp;
116 psh.pfnCallback = PropSheetProc;
117
118 InitPropSheetPage(&psh, IDD_PROPPAGEPOWERSCHEMES, PowerSchemesDlgProc);
119 if (GetPwrCapabilities(&spc))
120 {
121 if (spc.SystemBatteriesPresent)
122 {
123 InitPropSheetPage(&psh, IDD_PROPPAGEALARMS, AlarmsDlgProc);
124 }
125 }
126 InitPropSheetPage(&psh, IDD_PROPPAGEADVANCED, AdvancedDlgProc);
127 InitPropSheetPage(&psh, IDD_PROPPAGEHIBERNATE, HibernateDlgProc);
128
129 /* Load additional pages provided by shell extensions */
130 hpsxa = SHCreatePropSheetExtArray(HKEY_LOCAL_MACHINE, REGSTR_PATH_CONTROLSFOLDER TEXT("\\Power"), MAX_POWER_PAGES - psh.nPages);
131 if (hpsxa != NULL)
132 SHAddFromPropSheetExtArray(hpsxa, PropSheetAddPage, (LPARAM)&psh);
133
134 ret = (LONG)(PropertySheet(&psh) != -1);
135
136 if (hpsxa != NULL)
137 SHDestroyPropSheetExtArray(hpsxa);
138
139 return ret;
140 }
141
142 /* Control Panel Callback */
143 LONG CALLBACK
144 CPlApplet(HWND hwndCPl,
145 UINT uMsg,
146 LPARAM lParam1,
147 LPARAM lParam2)
148 {
149 int i = (int)lParam1;
150
151 switch (uMsg)
152 {
153 case CPL_INIT:
154 {
155 return TRUE;
156 }
157
158 case CPL_GETCOUNT:
159 {
160 return NUM_APPLETS;
161 }
162
163 case CPL_INQUIRE:
164 {
165 CPLINFO *CPlInfo = (CPLINFO*)lParam2;
166 CPlInfo->lData = 0;
167 CPlInfo->idIcon = Applets[i].idIcon;
168 CPlInfo->idName = Applets[i].idName;
169 CPlInfo->idInfo = Applets[i].idDescription;
170 break;
171 }
172
173 case CPL_DBLCLK:
174 {
175 Applets[i].AppletProc(hwndCPl, uMsg, lParam1, lParam2);
176 break;
177 }
178 }
179
180 return FALSE;
181 }
182
183
184 BOOLEAN WINAPI
185 DllMain(HINSTANCE hinstDLL,
186 DWORD dwReason,
187 LPVOID lpvReserved)
188 {
189 UNREFERENCED_PARAMETER(lpvReserved);
190
191 switch(dwReason)
192 {
193 case DLL_PROCESS_ATTACH:
194 case DLL_THREAD_ATTACH:
195 hApplet = hinstDLL;
196 break;
197 }
198
199 return TRUE;
200 }