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