ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/proj/trunk/VTBFileUtil2/ScanUtility.cxx
(Generate patch)

Comparing trunk/VTBFileUtil2/ScanUtility.cxx (file contents):
Revision 270 by douglas, 2003-08-19T01:19:24-07:00 vs.
Revision 271 by douglas, 2003-08-19T22:49:34-07:00

# Line 2 | Line 2
2   //
3   // Douglas Thrift
4   //
5 < // $Id: ScanUtility.cxx,v 1.4 2003/08/19 08:19:24 douglas Exp $
5 > // $Id: ScanUtility.cxx,v 1.5 2003/08/20 05:49:34 douglas Exp $
6  
7   #include "ScanUtility.h"
8  
# Line 15 | Line 15 | ScanUtility::ScanUtility()
15          sprintf(title, "%s - Scan Utility", programName.c_str());
16          loadDirs();
17          
18        PROPSHEETPAGE page;
19
18          // start
19 <        page.dwSize = sizeof(page);
20 <        page.dwFlags = PSP_DEFAULT | PSP_USEHICON | PSP_USETITLE |
19 >        wizard[0].dwSize = sizeof(wizard[0]);
20 >        wizard[0].dwFlags = PSP_DEFAULT | PSP_USEHICON | PSP_USETITLE |
21                  PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
22 <        page.hInstance = gui.instance;
23 <        page.pszTemplate = MAKEINTRESOURCE(IDD_SCAN_START);
24 <        page.hIcon = gui.icon;
25 <        page.pszTitle = title;
26 <        page.pfnDlgProc = start;
27 <        page.lParam = number;
28 <        page.pszHeaderTitle = "Start";
29 <        page.pszHeaderSubTitle = "Change any settings before scanning.";
32 <
33 <        wizard[0] = CreatePropertySheetPage(&page);
22 >        wizard[0].hInstance = gui.instance;
23 >        wizard[0].pszTemplate = MAKEINTRESOURCE(IDD_START);
24 >        wizard[0].hIcon = gui.icon;
25 >        wizard[0].pszTitle = title;
26 >        wizard[0].pfnDlgProc = start;
27 >        wizard[0].lParam = number;
28 >        wizard[0].pszHeaderTitle = "Start";
29 >        wizard[0].pszHeaderSubTitle = "Change any settings before scanning.";
30   }
31  
32   ScanUtility::~ScanUtility()
# Line 47 | Line 43 | void ScanUtility::run(void)
43  
44          // header
45          header.dwSize = sizeof(header);
46 <        header.dwFlags = PSH_DEFAULT | PSH_HEADER | PSH_USEICONID | PSH_WIZARD97;
46 >        header.dwFlags = PSH_DEFAULT | PSH_HEADER | PSH_PROPSHEETPAGE |
47 >                PSH_USEICONID | PSH_WIZARD97;
48          header.hwndParent = NULL;
49          header.hInstance = gui.instance;
50          header.pszIcon = MAKEINTRESOURCE(IDI_VTB_ICON);
51          header.nPages = 1;
52          header.nStartPage = 0;
53 <        header.phpage = wizard;
53 >        header.ppsp = wizard;
54          header.pszbmHeader = MAKEINTRESOURCE(IDB_VTB_BMP);
55  
56          PropertySheet(&header);
# Line 68 | Line 65 | void ScanUtility::loadDirs(void)
65          HKEY key;
66  
67          if (RegOpenKeyEx(HKEY_CURRENT_USER,
68 <                "Software\\DouglasThrift\\VTBFileUtil2", 0, KEY_READ, &key) ==
68 >                "Software\\DouglasThrift\\VTBFileUtil2", 0, KEY_QUERY_VALUE, &key) ==
69                  ERROR_SUCCESS)
70          {
71                  DWORD type;
72 <                BYTE data[MAX_PATH];
72 >                char data[MAX_PATH];
73                  DWORD size = MAX_PATH;
74  
75 <                if (RegQueryValueEx(key, "ScanDir", NULL, &type, data, &size) ==
76 <                        ERROR_SUCCESS)
75 >                if (RegQueryValueEx(key, "ScanDir", NULL, &type, LPBYTE(data), &size)
76 >                        == ERROR_SUCCESS)
77                  {
81                        char* buffer = new char[size];
82
78                          data[size - 1] = '\0';
79  
80                          switch (type)
81                          {
82                          case REG_EXPAND_SZ:
83 <                                sprintf(buffer, "%s", data);
84 <                                ExpandEnvironmentStrings(buffer, scanDir, MAX_PATH);
90 <                                cerr << "scanDir = " << scanDir << "\n";
83 >                                scanDir = data;
84 >                                scanEnv = true;
85                                  break;
86                          case REG_SZ:
87 <                                sprintf(scanDir, "%s", data);
88 <                                cerr << "scanDir = " << scanDir << "\n";
87 >                                scanDir = data;
88 >                                scanEnv = false;
89                                  break;
90                          default:
91                                  setScanDir();
92                                  break;
93                          }
100
101                        delete [] buffer;
94                  }
95                  else
96                  {
# Line 107 | Line 99 | void ScanUtility::loadDirs(void)
99  
100                  size = MAX_PATH;
101  
102 <                if (RegQueryValueEx(key, "SaveDir", NULL, &type, data, &size) ==
103 <                        ERROR_SUCCESS)
102 >                if (RegQueryValueEx(key, "SaveDir", NULL, &type, LPBYTE(data), &size)
103 >                        == ERROR_SUCCESS)
104                  {
113                        char* buffer = new char[size];
114                        
105                          data[size - 1] = '\0';
106  
107                          switch (type)
108                          {
109                          case REG_EXPAND_SZ:
110 <                                sprintf(buffer, "%s", data);
111 <                                ExpandEnvironmentStrings(buffer, saveDir, MAX_PATH);
122 <                                cerr << "saveDir = " << saveDir << "\n";
110 >                                saveDir = data;
111 >                                saveEnv = true;
112                                  break;
113                          case REG_SZ:
114 <                                sprintf(saveDir, "%s", data);
115 <                                cerr << "saveDir = " << saveDir << "\n";
114 >                                saveDir = data;
115 >                                saveEnv = false;
116                                  break;
117                          default:
118                                  setSaveDir();
119                                  break;
120                          }
132
133                        delete [] buffer;
121                  }
122                  else
123                  {
# Line 144 | Line 131 | void ScanUtility::loadDirs(void)
131                  setScanDir();
132                  setSaveDir();
133          }
134 +
135 +        if (debug) cerr << "scanDir = " << scanDir << "\n"
136 +                << "scanEnv = " << scanEnv << "\n"
137 +                << "saveDir = " << saveDir << "\n"
138 +                << "saveEnv = " << saveEnv << "\n";
139   }
140  
141   void ScanUtility::saveDirs(void)
# Line 152 | Line 144 | void ScanUtility::saveDirs(void)
144  
145          if (RegCreateKeyEx(HKEY_CURRENT_USER,
146                  "Software\\DouglasThrift\\VTBFileUtil2", 0, NULL,
147 <                REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &key, NULL) == ERROR_SUCCESS)
147 >                REG_OPTION_NON_VOLATILE, KEY_QUERY_VALUE | KEY_SET_VALUE, NULL, &key,
148 >                NULL) == ERROR_SUCCESS)
149          {
150 <                if (RegSetValueEx(key, "ScanDir", 0, REG_SZ, LPBYTE(scanDir),
151 <                        strlen(scanDir) + 1) != ERROR_SUCCESS)
150 >                DWORD type;
151 >                char data[MAX_PATH];
152 >                DWORD size = MAX_PATH;
153 >
154 >                if (RegQueryValueEx(key, "ScanDir", NULL, &type, LPBYTE(data), &size)
155 >                        == ERROR_SUCCESS)
156 >                {
157 >                        data[size - 1] = '\0';
158 >                }
159 >                else
160 >                {
161 >                        data[0] = '\0';
162 >                }
163 >
164 >                if (scanDir != data || type != (scanEnv ? REG_EXPAND_SZ : REG_SZ))
165 >                {
166 >                        if (RegSetValueEx(key, "ScanDir", 0, scanEnv ? REG_EXPAND_SZ :
167 >                                REG_SZ, LPBYTE(scanDir.c_str()), scanDir.length() + 1) !=
168 >                                ERROR_SUCCESS)
169 >                        {
170 >                                error();
171 >                        }
172 >                }
173 >
174 >                size = MAX_PATH;
175 >
176 >                if (RegQueryValueEx(key, "SaveDir", NULL, &type, LPBYTE(data), &size)
177 >                        == ERROR_SUCCESS)
178 >                {
179 >                        data[size - 1] = '\0';
180 >                }
181 >                else
182                  {
183 <                        error();
183 >                        data[0] = '\0';
184                  }
185  
186 <                if (RegSetValueEx(key, "SaveDir", 0, REG_SZ, LPBYTE(saveDir),
164 <                        strlen(saveDir) + 1) != ERROR_SUCCESS)
186 >                if (saveDir != data || type != (saveEnv ? REG_EXPAND_SZ : REG_SZ))
187                  {
188 <                        error();
188 >                        if (RegSetValueEx(key, "SaveDir", 0, saveEnv ? REG_EXPAND_SZ :
189 >                                REG_SZ, LPBYTE(saveDir.c_str()), saveDir.length() + 1) !=
190 >                                ERROR_SUCCESS)
191 >                        {
192 >                                error();
193 >                        }
194                  }
195  
196                  RegCloseKey(key);
# Line 176 | Line 203 | void ScanUtility::saveDirs(void)
203  
204   void ScanUtility::setScanDir(HWND parent)
205   {
206 <        sprintf(scanDir, "C:\\ScannedFiles\\");
206 >        BROWSEINFO info;
207 >
208 >        info.hwndOwner = parent;
209 >        info.pidlRoot = NULL;
210 >        info.pszDisplayName = NULL;
211 >        info.lpszTitle = "Select the Scan Directory";
212 >        info.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT;
213 >        info.lpfn = browse;
214 >        info.lParam = MAKELPARAM(number, true);
215 >        info.iImage = 0;
216 >
217 >        do
218 >        {
219 >                LPITEMIDLIST id = SHBrowseForFolder(&info);
220 >
221 >                if (id != NULL)
222 >                {
223 >                        char folder[MAX_PATH];
224 >
225 >                        if (SHGetPathFromIDList(id, folder))
226 >                        {
227 >                                scanDir = folder;
228 >                                scanEnv = false;
229 >                        }
230 >                }
231 >
232 >                LPMALLOC destruct;
233  
234 <        //
234 >                SHGetMalloc(&destruct);
235 >                destruct->Free(id);
236 >                destruct->Release();
237 >
238 >                if (scanDir == "")
239 >                {
240 >                        switch (MessageBox(parent, "Scan Directory needs to be selected.",
241 >                                programName.c_str(), MB_ABORTRETRYIGNORE | MB_ICONERROR))
242 >                        {
243 >                        case IDABORT:
244 >                                exit(1);
245 >                                break;
246 >                        case IDRETRY:
247 >                                break;
248 >                        case IDIGNORE:
249 >                                Beep(2200, 250);
250 >                                Beep(1100, 500);
251 >                                Beep(3300, 250);
252 >                                exit(2);
253 >                                break;
254 >                        }
255 >                }
256 >        }
257 >        while (scanDir == "");
258   }
259  
260   void ScanUtility::setSaveDir(HWND parent)
261   {
262 <        sprintf(saveDir, "C:\\ScannedFiles\\Individual2003\\");
262 >        BROWSEINFO info;
263 >
264 >        info.hwndOwner = parent;
265 >        info.pidlRoot = NULL;
266 >        info.pszDisplayName = NULL;
267 >        info.lpszTitle = "Select the Save Directory";
268 >        info.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT;
269 >        info.lpfn = browse;
270 >        info.lParam = MAKELPARAM(number, false);
271 >        info.iImage = 0;
272  
273 <        //
273 >        do
274 >        {
275 >                LPITEMIDLIST id = SHBrowseForFolder(&info);
276 >
277 >                if (id != NULL)
278 >                {
279 >                        char folder[MAX_PATH];
280 >
281 >                        if (SHGetPathFromIDList(id, folder))
282 >                        {
283 >                                saveDir = folder;
284 >                                saveEnv = false;
285 >                        }
286 >                }
287 >
288 >                LPMALLOC destruct;
289 >
290 >                SHGetMalloc(&destruct);
291 >                destruct->Free(id);
292 >                destruct->Release();
293 >
294 >                if (saveDir == "")
295 >                {
296 >                        switch (MessageBox(parent, "Scan Directory needs to be selected.",
297 >                                programName.c_str(), MB_ABORTRETRYIGNORE | MB_ICONERROR))
298 >                        {
299 >                        case IDABORT:
300 >                                exit(1);
301 >                                break;
302 >                        case IDRETRY:
303 >                                break;
304 >                        case IDIGNORE:
305 >                                Beep(2200, 250);
306 >                                Beep(1100, 500);
307 >                                Beep(3300, 250);
308 >                                exit(2);
309 >                                break;
310 >                        }
311 >                }
312 >        }
313 >        while (saveDir == "");
314 > }
315 >
316 > int ScanUtility::browse(HWND dialog, UINT msg, LPARAM l, LPARAM d)
317 > {
318 >        map<unsigned, ScanUtility*>::iterator itor = utilities.find(LOWORD(d));
319 >        ScanUtility* data = itor->second;
320 >
321 >        switch (msg)
322 >        {
323 >        case BFFM_INITIALIZED:
324 >                center(dialog);
325 >                SendMessage(dialog, BFFM_SETOKTEXT, 0,
326 >                        LPARAM(toWide("&Select").c_str()));
327 >                SendMessage(dialog, BFFM_SETEXPANDED, FALSE, CSIDL_DRIVES);
328 >                if (HIWORD(d) ? data->scanEnv : data->saveEnv)
329 >                {
330 >                        char folder[MAX_PATH];
331 >
332 >                        ExpandEnvironmentStrings(HIWORD(d) ? data->scanDir.c_str() :
333 >                                data->saveDir.c_str(), folder, MAX_PATH);
334 >                        SendMessage(dialog, BFFM_SETSELECTION, TRUE, LPARAM(folder));
335 >                }
336 >                else
337 >                {
338 >                        SendMessage(dialog, BFFM_SETSELECTION, TRUE, LPARAM(HIWORD(d) ?
339 >                                data->scanDir.c_str() : data->saveDir.c_str()));
340 >                }
341 >                break;
342 >        case BFFM_SELCHANGED:
343 >                {
344 >                        IShellFolder* object;
345 >
346 >                        SHGetDesktopFolder(&object);
347 >
348 >                        STRRET thing;
349 >                        char* folder;
350 >
351 >                        object->GetDisplayNameOf(LPCITEMIDLIST(l), SHGDN_FORPARSING,
352 >                                &thing);
353 >                        StrRetToStr(&thing, LPCITEMIDLIST(l), &folder);
354 >                        SendMessage(dialog, BFFM_SETSTATUSTEXT, 0, LPARAM(folder));
355 >
356 >                        if (PathIsUNCServer(folder))
357 >                        {
358 >                                SendMessage(dialog, BFFM_ENABLEOK, 0, 0);
359 >                        }
360 >
361 >                        CoTaskMemFree(folder);
362 >                        object->Release();
363 >                }
364 >                break;
365 >        }
366 >
367 >        return 0;
368   }
369  
370   INT_PTR ScanUtility::start(HWND dialog, UINT msg, WPARAM w, LPARAM l)
# Line 198 | Line 377 | INT_PTR ScanUtility::start(HWND dialog,
377          case WM_INITDIALOG:
378                  center(GetParent(dialog));
379                  {
380 <                        map<unsigned, ScanUtility*>::iterator itor = utilities.find(l);
380 >                        LPPROPSHEETPAGE page = LPPROPSHEETPAGE(l);
381 >                        map<unsigned, ScanUtility*>::iterator itor =
382 >                                utilities.find(page->lParam);
383  
384                          windows.insert(pair<HWND, ScanUtility*>(dialog, itor->second));
385                  }
# Line 211 | Line 392 | INT_PTR ScanUtility::start(HWND dialog,
392                          {
393                          case PSN_SETACTIVE:
394                                  PropSheet_SetWizButtons(GetParent(dialog), PSWIZB_NEXT);
395 +                                {
396 +                                        char folder[44];
397 +
398 +                                        PathCompactPathEx(folder, data->scanDir.c_str(), 44, 0);
399 +                                        SetDlgItemText(dialog, IDC_START_SCAN_TEXT, folder);
400 +                                        PathCompactPathEx(folder, data->saveDir.c_str(), 44, 0);
401 +                                        SetDlgItemText(dialog, IDC_START_SAVE_TEXT, folder);
402 +                                }
403                                  break;
404                          }
405                  }
406 <        case WM_DESTROY:
407 <                windows.erase(dialog);
406 >                break;
407 >        case WM_COMMAND:
408 >                switch (LOWORD(w))
409 >                {
410 >                case IDC_START_SCAN_BROWSE:
411 >                        data->setScanDir(dialog);
412 >                        {
413 >                                char folder[44];
414 >
415 >                                PathCompactPathEx(folder, data->scanDir.c_str(), 44, 0);
416 >                                SetDlgItemText(dialog, IDC_START_SCAN_TEXT, folder);
417 >                        }
418 >                        break;
419 >                case IDC_START_SAVE_BROWSE:
420 >                        data->setSaveDir(dialog);
421 >                        {
422 >                                char folder[44];
423 >
424 >                                PathCompactPathEx(folder, data->saveDir.c_str(), 44, 0);
425 >                                SetDlgItemText(dialog, IDC_START_SAVE_TEXT, folder);
426 >                        }
427 >                        break;
428 >                }
429                  break;
430          }
431  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines