- Remove ALL the unneeded "author date id revision" svn properties.
[reactos.git] / reactos / dll / cpl / powercfg / hibernate.c
1 /* $Id: hibernate.c 54535 2011-11-29 14:55:58Z dgorbachev $
2 *
3 * PROJECT: ReactOS Power Configuration Applet
4 * LICENSE: GPL - See COPYING in the top level directory
5 * FILE: dll/cpl/powercfg/hibernate.c
6 * PURPOSE: hibernate tab 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 //#ifndef NSTATUS
14 //typedef long NTSTATUS;
15 //#endif
16
17 #include "powercfg.h"
18
19 BOOLEAN Pos_InitData();
20 void Adv_InitDialog();
21
22
23 static VOID
24 Hib_InitDialog(HWND hwndDlg)
25 {
26 SYSTEM_POWER_CAPABILITIES PowerCaps;
27 MEMORYSTATUSEX msex;
28 TCHAR szSize[MAX_PATH];
29 TCHAR szTemp[MAX_PATH];
30 ULARGE_INTEGER FreeBytesAvailable, TotalNumberOfBytes, TotalNumberOfFreeBytes;
31
32 if (GetPwrCapabilities(&PowerCaps))
33 {
34 CheckDlgButton(hwndDlg,
35 IDC_HIBERNATEFILE,
36 PowerCaps.HiberFilePresent ? BST_CHECKED : BST_UNCHECKED);
37
38 msex.dwLength = sizeof(msex);
39 if (!GlobalMemoryStatusEx(&msex))
40 {
41 return; // FIXME
42 }
43
44 if (GetWindowsDirectory(szTemp,MAX_PATH))
45 {
46 if (!GetDiskFreeSpaceEx(szTemp,&FreeBytesAvailable, &TotalNumberOfBytes, &TotalNumberOfFreeBytes))
47 TotalNumberOfFreeBytes.QuadPart = 0;
48 }
49 else
50 {
51 if (!GetDiskFreeSpaceEx(NULL,&FreeBytesAvailable, &TotalNumberOfBytes, &TotalNumberOfFreeBytes))
52 TotalNumberOfFreeBytes.QuadPart = 0;
53 }
54
55 if (TotalNumberOfFreeBytes.QuadPart > 0x100000)
56 {
57 if (LoadString(hApplet, IDS_SIZEMB, szTemp, MAX_PATH))
58 {
59 _stprintf(szSize,szTemp,TotalNumberOfFreeBytes.QuadPart / 0x100000);
60 SetDlgItemText(hwndDlg, IDC_FREESPACE, szSize);
61 }
62 }
63 else
64 {
65 if (LoadString(hApplet, IDS_SIZEBYTS, szTemp, MAX_PATH))
66 {
67 _stprintf(szSize,szTemp,TotalNumberOfFreeBytes.QuadPart);
68 SetDlgItemText(hwndDlg, IDC_FREESPACE, szSize);
69 }
70 }
71
72 if (msex.ullTotalPhys>0x100000)
73 {
74 if (LoadString(hApplet, IDS_SIZEMB, szTemp, MAX_PATH))
75 {
76 _stprintf(szSize,szTemp,msex.ullTotalPhys/0x100000);
77 SetDlgItemText(hwndDlg, IDC_SPACEFORHIBERNATEFILE,szSize);
78 }
79 }
80 else
81 {
82 if (LoadString(hApplet, IDS_SIZEBYTS, szTemp, MAX_PATH))
83 {
84 _stprintf(szSize,szTemp,msex.ullTotalPhys);
85 SetDlgItemText(hwndDlg, IDC_SPACEFORHIBERNATEFILE, szSize);
86 }
87 }
88
89 if (TotalNumberOfFreeBytes.QuadPart < msex.ullTotalPhys && !PowerCaps.HiberFilePresent)
90 {
91 EnableWindow(GetDlgItem(hwndDlg, IDC_HIBERNATEFILE), FALSE);
92 ShowWindow(GetDlgItem(hwndDlg, IDC_TOLESSFREESPACE), TRUE);
93 }
94 else
95 {
96 ShowWindow(GetDlgItem(hwndDlg, IDC_TOLESSFREESPACE), FALSE);
97 EnableWindow(GetDlgItem(hwndDlg, IDC_HIBERNATEFILE), TRUE);
98 }
99 }
100 }
101
102 INT_PTR
103 Hib_SaveData(HWND hwndDlg)
104 {
105 BOOLEAN bHibernate;
106
107 bHibernate = (BOOLEAN)(IsDlgButtonChecked(hwndDlg, IDC_HIBERNATEFILE) == BST_CHECKED);
108
109 if (CallNtPowerInformation(SystemReserveHiberFile,&bHibernate, sizeof(bHibernate), NULL, 0) == STATUS_SUCCESS)
110 {
111 Pos_InitData();
112 Adv_InitDialog();
113 Hib_InitDialog(hwndDlg);
114 return TRUE;
115 }
116
117 return FALSE;
118 }
119
120 /* Property page dialog callback */
121 INT_PTR CALLBACK
122 HibernateDlgProc(HWND hwndDlg,
123 UINT uMsg,
124 WPARAM wParam,
125 LPARAM lParam)
126 {
127 switch(uMsg)
128 {
129 case WM_INITDIALOG:
130 Hib_InitDialog(hwndDlg);
131 return TRUE;
132 case WM_COMMAND:
133 switch(LOWORD(wParam))
134 {
135 case IDC_HIBERNATEFILE:
136 if (HIWORD(wParam) == BN_CLICKED)
137 {
138 PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
139 }
140 }
141 break;
142 case WM_NOTIFY:
143 {
144 LPNMHDR lpnm = (LPNMHDR)lParam;
145 if (lpnm->code == (UINT)PSN_APPLY)
146 {
147 return Hib_SaveData(hwndDlg);
148 }
149 }
150 }
151 return FALSE;
152 }