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

Comparing trunk/VTBFileUtil2/DiscBrowse.cxx (file contents):
Revision 282 by douglas, 2003-08-25T23:41:12-07:00 vs.
Revision 283 by douglas, 2003-08-28T21:16:30-07:00

# Line 2 | Line 2
2   //
3   // Douglas Thrift
4   //
5 < // $Id: DiscBrowse.cxx,v 1.3 2003/08/26 06:41:12 douglas Exp $
5 > // $Id: DiscBrowse.cxx,v 1.4 2003/08/29 04:16:30 douglas Exp $
6  
7   #include "DiscBrowse.h"
8  
# Line 39 | Line 39 | DiscBrowse::DiscBrowse()
39          InsertMenuItem(popup, 1, TRUE, &separator);
40          InsertMenuItem(popup, 2, TRUE, &properties);
41  
42 +        numberWidth = 56;
43 +        nameWidth = 224;
44 +        fileWidth = 152;
45 +        sizeWidth = 72;
46 +
47          // start
48          wizard[0].dwSize = sizeof(wizard[0]);
49          wizard[0].dwFlags = PSP_DEFAULT | PSP_USETITLE | PSP_USEHEADERTITLE |
# Line 99 | Line 104 | map<HWND, DiscBrowse*> DiscBrowse::windo
104  
105   void DiscBrowse::loadDir(void)
106   {
107 <        //
107 >        HKEY key;
108 >
109 >        if (RegOpenKeyEx(HKEY_CURRENT_USER,
110 >                "Software\\DouglasThrift\\VTBFileUtil2", 0, KEY_QUERY_VALUE, &key) ==
111 >                ERROR_SUCCESS)
112 >        {
113 >                DWORD type;
114 >                char data[MAX_PATH];
115 >                DWORD size = MAX_PATH;
116 >
117 >                if (RegQueryValueEx(key, "DiscDir", NULL, &type, LPBYTE(data), &size)
118 >                        == ERROR_SUCCESS)
119 >                {
120 >                        data[size - 1] = '\0';
121 >
122 >                        switch (type)
123 >                        {
124 >                        case REG_EXPAND_SZ:
125 >                                {
126 >                                        char folder[MAX_PATH];
127 >
128 >                                        ExpandEnvironmentStrings(data, folder, MAX_PATH);
129 >
130 >                                        discDir = folder;
131 >                                }
132 >                                break;
133 >                        case REG_SZ:
134 >                                discDir = data;
135 >                                break;
136 >                        default:
137 >                                setDiscDir();
138 >                                break;
139 >                        }
140 >                }
141 >                else
142 >                {
143 >                        setDiscDir();
144 >                }
145 >
146 >                RegCloseKey(key);
147 >        }
148 >        else
149 >        {
150 >                setDiscDir();
151 >        }
152 >
153 >        if (debug) cerr << "discDir = " << discDir << "\n";
154   }
155  
156   void DiscBrowse::saveDir(void)
157   {
158 <        //
158 >        HKEY key;
159 >
160 >        if (RegCreateKeyEx(HKEY_CURRENT_USER,
161 >                "Software\\DouglasThrift\\VTBFileUtil2", 0, NULL,
162 >                REG_OPTION_NON_VOLATILE, KEY_QUERY_VALUE | KEY_SET_VALUE, NULL, &key,
163 >                NULL) == ERROR_SUCCESS)
164 >        {
165 >                DWORD type;
166 >                char data[MAX_PATH];
167 >                DWORD size = MAX_PATH;
168 >
169 >                if (RegQueryValueEx(key, "DiscDir", NULL, &type, LPBYTE(data), &size)
170 >                        == ERROR_SUCCESS)
171 >                {
172 >                        data[size - 1] = '\0';
173 >                }
174 >                else
175 >                {
176 >                        data[0] = '\0';
177 >                }
178 >
179 >                if (discDir != data || type != REG_SZ)
180 >                {
181 >                        if (RegSetValueEx(key, "DiscDir", 0, REG_SZ,
182 >                                LPBYTE(discDir.c_str()), discDir.length() + 1) !=
183 >                                ERROR_SUCCESS)
184 >                        {
185 >                                error();
186 >                        }
187 >                }
188 >
189 >                RegCloseKey(key);
190 >        }
191 >        else
192 >        {
193 >                error();
194 >        }
195   }
196  
197   void DiscBrowse::setDiscDir(HWND parent)
198   {
199 <        //
199 >        BROWSEINFO info;
200 >
201 >        info.hwndOwner = parent;
202 >        info.pidlRoot = NULL;
203 >        info.pszDisplayName = NULL;
204 >        info.lpszTitle = "Select the Disc";
205 >        info.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT;
206 >        info.lpfn = browse;
207 >        info.lParam = MAKELPARAM(number, true);
208 >        info.iImage = 0;
209 >
210 >        do
211 >        {
212 >                LPITEMIDLIST id = SHBrowseForFolder(&info);
213 >
214 >                if (id != NULL)
215 >                {
216 >                        char folder[MAX_PATH];
217 >
218 >                        if (SHGetPathFromIDList(id, folder)) discDir = folder;
219 >                }
220 >
221 >                LPMALLOC destruct;
222 >
223 >                SHGetMalloc(&destruct);
224 >                destruct->Free(id);
225 >                destruct->Release();
226 >
227 >                if (discDir == "")
228 >                {
229 >                        switch (MessageBox(parent, "Disc needs to be selected.",
230 >                                title.c_str(), MB_ABORTRETRYIGNORE | MB_ICONERROR))
231 >                        {
232 >                        case IDABORT:
233 >                                exit(1);
234 >                                break;
235 >                        case IDRETRY:
236 >                                break;
237 >                        case IDIGNORE:
238 >                                Beep(2200, 250);
239 >                                Beep(1100, 500);
240 >                                Beep(3300, 250);
241 >                                exit(2);
242 >                                break;
243 >                        }
244 >                }
245 >        }
246 >        while (discDir == "");
247 >
248 >        if (debug) cerr << "discDir = " << discDir << "\n";
249   }
250  
251   DiscBrowse* DiscBrowse::which(HWND window)
# Line 193 | Line 329 | INT_PTR DiscBrowse::start(HWND dialog, U
329                          case PSN_SETACTIVE:
330                                  PropSheet_SetWizButtons(GetParent(dialog), PSWIZB_FINISH |
331                                          PSWIZB_NEXT);
332 +
333 +                                {
334 +                                        SHFILEINFO info;
335 +
336 +                                        SHGetFileInfo(data->discDir.c_str(), 0, &info,
337 +                                                sizeof(info), SHGFI_ICONLOCATION);
338 +
339 +                                        HICON icon = ExtractAssociatedIcon(gui.instance,
340 +                                                info.szDisplayName, LPWORD(&info.iIcon));
341 +
342 +                                        SendDlgItemMessage(dialog, IDC_BEGIN_ICON, STM_SETIMAGE,
343 +                                                IMAGE_ICON, LPARAM(icon));
344 +                                }
345 +
346 +                                {
347 +                                        char folder[72];
348 +
349 +                                        PathCompactPathEx(folder, data->discDir.c_str(), 72, 0);
350 +                                        SetDlgItemText(dialog, IDC_BEGIN_TEXT, folder);
351 +                                }
352                                  break;
353                          }
354                  }
355                  break;
356 +        case WM_COMMAND:
357 +                switch (LOWORD(w))
358 +                {
359 +                case IDC_BEGIN_BROWSE:
360 +                        data->setDiscDir(dialog);
361 +
362 +                        {
363 +                                SHFILEINFO info;
364 +
365 +                                SHGetFileInfo(data->discDir.c_str(), 0, &info, sizeof(info),
366 +                                        SHGFI_ICONLOCATION);
367 +
368 +                                HICON icon = ExtractAssociatedIcon(gui.instance,
369 +                                        info.szDisplayName, LPWORD(&info.iIcon));
370 +
371 +                                SendDlgItemMessage(dialog, IDC_BEGIN_ICON, STM_SETIMAGE,
372 +                                        IMAGE_ICON, LPARAM(icon));
373 +                        }
374 +
375 +                        {
376 +                                char folder[72];
377 +
378 +                                PathCompactPathEx(folder, data->discDir.c_str(), 72, 0);
379 +                                SetDlgItemText(dialog, IDC_BEGIN_TEXT, folder);
380 +                        }
381 +                        break;
382 +                }
383          }
384  
385          return FALSE;
# Line 212 | Line 395 | INT_PTR DiscBrowse::browse(HWND dialog,
395                  data = which(dialog, l);
396  
397                  {
398 <                        LVCOLUMN number, name, file;
398 >                        LVCOLUMN number, name, file, size;
399  
400 <                        number.mask = LVCF_TEXT | LVCF_WIDTH;
401 <                        number.cx = 64;
400 >                        number.mask = LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH;
401 >                        number.cx = data->numberWidth;
402                          number.pszText = "Number";
403 +                        number.iSubItem = 0;
404                          name.mask = LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH;
405 <                        name.cx = 256;
405 >                        name.cx = data->nameWidth;
406                          name.pszText = "Client Name";
407                          name.iSubItem = 1;
408                          file.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH;
409                          file.fmt = LVCFMT_IMAGE;
410 <                        file.cx = 256;
410 >                        file.cx = data->fileWidth;
411                          file.pszText = "File Name";
412                          file.iSubItem = 2;
413 +                        size.mask = LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH;
414 +                        size.cx = data->sizeWidth;
415 +                        size.pszText = "Size";
416 +                        size.iSubItem = 3;
417  
418                          ListView_InsertColumn(GetDlgItem(dialog, IDC_BROWSE_DISC), 0,
419 +                                &file);
420 +                        ListView_InsertColumn(GetDlgItem(dialog, IDC_BROWSE_DISC), 0,
421                                  &number);
422                          ListView_InsertColumn(GetDlgItem(dialog, IDC_BROWSE_DISC), 1,
423                                  &name);
424 <                        ListView_InsertColumn(GetDlgItem(dialog, IDC_BROWSE_DISC), 2,
425 <                                &file);
424 >                        ListView_InsertColumn(GetDlgItem(dialog, IDC_BROWSE_DISC), 3,
425 >                                &size);
426                  }
427                  break;
428          case WM_NOTIFY:

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines