1 |
// Vance Thrift and Biller File Utility 2 |
2 |
// |
3 |
// Douglas Thrift |
4 |
// |
5 |
// $Id: ScanUtility.cxx,v 1.4 2003/08/19 08:19:24 douglas Exp $ |
6 |
|
7 |
#include "ScanUtility.h" |
8 |
|
9 |
ScanUtility::ScanUtility() |
10 |
{ |
11 |
number = count++; |
12 |
utilities.insert(pair<unsigned, ScanUtility*>(number, this)); |
13 |
title = new char[programName.length() + 16]; |
14 |
|
15 |
sprintf(title, "%s - Scan Utility", programName.c_str()); |
16 |
loadDirs(); |
17 |
|
18 |
PROPSHEETPAGE page; |
19 |
|
20 |
// start |
21 |
page.dwSize = sizeof(page); |
22 |
page.dwFlags = PSP_DEFAULT | PSP_USEHICON | PSP_USETITLE | |
23 |
PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE; |
24 |
page.hInstance = gui.instance; |
25 |
page.pszTemplate = MAKEINTRESOURCE(IDD_SCAN_START); |
26 |
page.hIcon = gui.icon; |
27 |
page.pszTitle = title; |
28 |
page.pfnDlgProc = start; |
29 |
page.lParam = number; |
30 |
page.pszHeaderTitle = "Start"; |
31 |
page.pszHeaderSubTitle = "Change any settings before scanning."; |
32 |
|
33 |
wizard[0] = CreatePropertySheetPage(&page); |
34 |
} |
35 |
|
36 |
ScanUtility::~ScanUtility() |
37 |
{ |
38 |
utilities.erase(number); |
39 |
saveDirs(); |
40 |
|
41 |
delete [] title; |
42 |
} |
43 |
|
44 |
void ScanUtility::run(void) |
45 |
{ |
46 |
PROPSHEETHEADER header; |
47 |
|
48 |
// header |
49 |
header.dwSize = sizeof(header); |
50 |
header.dwFlags = PSH_DEFAULT | PSH_HEADER | PSH_USEICONID | PSH_WIZARD97; |
51 |
header.hwndParent = NULL; |
52 |
header.hInstance = gui.instance; |
53 |
header.pszIcon = MAKEINTRESOURCE(IDI_VTB_ICON); |
54 |
header.nPages = 1; |
55 |
header.nStartPage = 0; |
56 |
header.phpage = wizard; |
57 |
header.pszbmHeader = MAKEINTRESOURCE(IDB_VTB_BMP); |
58 |
|
59 |
PropertySheet(&header); |
60 |
} |
61 |
|
62 |
unsigned ScanUtility::count = 0; |
63 |
map<unsigned, ScanUtility*> ScanUtility::utilities; |
64 |
map<HWND, ScanUtility*> ScanUtility::windows; |
65 |
|
66 |
void ScanUtility::loadDirs(void) |
67 |
{ |
68 |
HKEY key; |
69 |
|
70 |
if (RegOpenKeyEx(HKEY_CURRENT_USER, |
71 |
"Software\\DouglasThrift\\VTBFileUtil2", 0, KEY_READ, &key) == |
72 |
ERROR_SUCCESS) |
73 |
{ |
74 |
DWORD type; |
75 |
BYTE data[MAX_PATH]; |
76 |
DWORD size = MAX_PATH; |
77 |
|
78 |
if (RegQueryValueEx(key, "ScanDir", NULL, &type, data, &size) == |
79 |
ERROR_SUCCESS) |
80 |
{ |
81 |
char* buffer = new char[size]; |
82 |
|
83 |
data[size - 1] = '\0'; |
84 |
|
85 |
switch (type) |
86 |
{ |
87 |
case REG_EXPAND_SZ: |
88 |
sprintf(buffer, "%s", data); |
89 |
ExpandEnvironmentStrings(buffer, scanDir, MAX_PATH); |
90 |
cerr << "scanDir = " << scanDir << "\n"; |
91 |
break; |
92 |
case REG_SZ: |
93 |
sprintf(scanDir, "%s", data); |
94 |
cerr << "scanDir = " << scanDir << "\n"; |
95 |
break; |
96 |
default: |
97 |
setScanDir(); |
98 |
break; |
99 |
} |
100 |
|
101 |
delete [] buffer; |
102 |
} |
103 |
else |
104 |
{ |
105 |
setScanDir(); |
106 |
} |
107 |
|
108 |
size = MAX_PATH; |
109 |
|
110 |
if (RegQueryValueEx(key, "SaveDir", NULL, &type, data, &size) == |
111 |
ERROR_SUCCESS) |
112 |
{ |
113 |
char* buffer = new char[size]; |
114 |
|
115 |
data[size - 1] = '\0'; |
116 |
|
117 |
switch (type) |
118 |
{ |
119 |
case REG_EXPAND_SZ: |
120 |
sprintf(buffer, "%s", data); |
121 |
ExpandEnvironmentStrings(buffer, saveDir, MAX_PATH); |
122 |
cerr << "saveDir = " << saveDir << "\n"; |
123 |
break; |
124 |
case REG_SZ: |
125 |
sprintf(saveDir, "%s", data); |
126 |
cerr << "saveDir = " << saveDir << "\n"; |
127 |
break; |
128 |
default: |
129 |
setSaveDir(); |
130 |
break; |
131 |
} |
132 |
|
133 |
delete [] buffer; |
134 |
} |
135 |
else |
136 |
{ |
137 |
setSaveDir(); |
138 |
} |
139 |
|
140 |
RegCloseKey(key); |
141 |
} |
142 |
else |
143 |
{ |
144 |
setScanDir(); |
145 |
setSaveDir(); |
146 |
} |
147 |
} |
148 |
|
149 |
void ScanUtility::saveDirs(void) |
150 |
{ |
151 |
HKEY key; |
152 |
|
153 |
if (RegCreateKeyEx(HKEY_CURRENT_USER, |
154 |
"Software\\DouglasThrift\\VTBFileUtil2", 0, NULL, |
155 |
REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &key, NULL) == ERROR_SUCCESS) |
156 |
{ |
157 |
if (RegSetValueEx(key, "ScanDir", 0, REG_SZ, LPBYTE(scanDir), |
158 |
strlen(scanDir) + 1) != ERROR_SUCCESS) |
159 |
{ |
160 |
error(); |
161 |
} |
162 |
|
163 |
if (RegSetValueEx(key, "SaveDir", 0, REG_SZ, LPBYTE(saveDir), |
164 |
strlen(saveDir) + 1) != ERROR_SUCCESS) |
165 |
{ |
166 |
error(); |
167 |
} |
168 |
|
169 |
RegCloseKey(key); |
170 |
} |
171 |
else |
172 |
{ |
173 |
error(); |
174 |
} |
175 |
} |
176 |
|
177 |
void ScanUtility::setScanDir(HWND parent) |
178 |
{ |
179 |
sprintf(scanDir, "C:\\ScannedFiles\\"); |
180 |
|
181 |
// |
182 |
} |
183 |
|
184 |
void ScanUtility::setSaveDir(HWND parent) |
185 |
{ |
186 |
sprintf(saveDir, "C:\\ScannedFiles\\Individual2003\\"); |
187 |
|
188 |
// |
189 |
} |
190 |
|
191 |
INT_PTR ScanUtility::start(HWND dialog, UINT msg, WPARAM w, LPARAM l) |
192 |
{ |
193 |
map<HWND, ScanUtility*>::iterator itor = windows.find(dialog); |
194 |
ScanUtility* data = itor->second; |
195 |
|
196 |
switch (msg) |
197 |
{ |
198 |
case WM_INITDIALOG: |
199 |
center(GetParent(dialog)); |
200 |
{ |
201 |
map<unsigned, ScanUtility*>::iterator itor = utilities.find(l); |
202 |
|
203 |
windows.insert(pair<HWND, ScanUtility*>(dialog, itor->second)); |
204 |
} |
205 |
break; |
206 |
case WM_NOTIFY: |
207 |
{ |
208 |
LPNMHDR nm = (LPNMHDR) l; |
209 |
|
210 |
switch (nm->code) |
211 |
{ |
212 |
case PSN_SETACTIVE: |
213 |
PropSheet_SetWizButtons(GetParent(dialog), PSWIZB_NEXT); |
214 |
break; |
215 |
} |
216 |
} |
217 |
case WM_DESTROY: |
218 |
windows.erase(dialog); |
219 |
break; |
220 |
} |
221 |
|
222 |
return FALSE; |
223 |
} |