ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/proj/trunk/VTBFileUtil2/Chooser.cxx
Revision: 268
Committed: 2003-08-18T21:39:38-07:00 (21 years, 10 months ago) by douglas
File size: 2816 byte(s)
Log Message:
Something.

File Contents

# User Rev Content
1 douglas 263 // Vance Thrift and Biller File Utility 2
2     //
3     // Douglas Thrift
4     //
5 douglas 268 // $Id: Chooser.cxx,v 1.6 2003/08/19 04:39:38 douglas Exp $
6 douglas 263
7     #include "Chooser.h"
8    
9 douglas 266 Chooser::Chooser()
10     {
11     shortcut = false;
12     choice = none;
13     number = count++;
14     choosers.insert(pair<unsigned, Chooser*>(number, this));
15     }
16 douglas 265
17 douglas 266 Chooser::~Chooser()
18 douglas 263 {
19 douglas 266 choosers.erase(number);
20 douglas 263 }
21    
22     Mode Chooser::choose(HWND parent)
23     {
24 douglas 266 DialogBoxParam(gui.instance, MAKEINTRESOURCE(IDD_CHOICE), parent,
25     Chooser::window, number);
26 douglas 263
27     desktop();
28    
29     return choice;
30     }
31    
32 douglas 268 unsigned Chooser::count = 0;
33     map<unsigned, Chooser*> Chooser::choosers;
34     map<HWND, Chooser*> Chooser::windows;
35    
36 douglas 266 INT_PTR CALLBACK Chooser::window(HWND dialog, UINT msg, WPARAM w, LPARAM l)
37     {
38     map<HWND, Chooser*>::iterator itor = windows.find(dialog);
39     Chooser* data = itor->second;
40    
41     switch (msg)
42     {
43     case WM_INITDIALOG:
44     center(dialog);
45     SendMessage(dialog, WM_SETICON, ICON_BIG, LPARAM(gui.icon));
46     SendMessage(dialog, WM_SETTEXT, 0, LPARAM(programName.c_str()));
47     {
48     map<unsigned, Chooser*>::iterator itor = choosers.find(l);
49    
50     windows.insert(pair<HWND, Chooser*>(dialog, itor->second));
51     }
52     break;
53     case WM_COMMAND:
54     switch (LOWORD(w))
55     {
56     case IDC_CHOICE_DISC:
57 douglas 268 data->choice = disc;
58 douglas 266 if (debug) cerr << "choice = disc\n";
59     EnableWindow(GetDlgItem(dialog, IDC_CHOICE_ALWAYS), TRUE);
60     EnableWindow(GetDlgItem(dialog, IDOK), TRUE);
61     break;
62     case IDC_CHOICE_SCAN:
63 douglas 268 data->choice = scan;
64 douglas 266 if (debug) cerr << "choice = scan\n";
65     EnableWindow(GetDlgItem(dialog, IDC_CHOICE_ALWAYS), TRUE);
66     EnableWindow(GetDlgItem(dialog, IDOK), TRUE);
67     break;
68     case IDC_CHOICE_ALWAYS:
69 douglas 268 data->shortcut = !data->shortcut;
70     if (debug) cerr << "shortcut = " << data->shortcut << "\n";
71 douglas 266 break;
72     case IDCANCEL:
73 douglas 268 data->choice = none;
74 douglas 266 case IDOK:
75     windows.erase(dialog);
76     EndDialog(dialog, w);
77     return TRUE;
78     default:
79     break;
80     }
81     break;
82     }
83    
84     return FALSE;
85     }
86    
87 douglas 263 void Chooser::desktop(void)
88     {
89 douglas 264 if (!shortcut || choice == none) return;
90 douglas 263
91 douglas 264 IShellLink* link;
92    
93     CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
94     IID_IShellLink, (LPVOID*)(&link));
95    
96     string name;
97    
98     link->SetPath(program.c_str());
99     link->SetIconLocation(program.c_str(), 0);
100     link->SetDescription(programName.c_str());
101    
102     switch (choice)
103     {
104     case disc:
105     name = "Disc Browse";
106     link->SetArguments("-disc");
107     break;
108     case scan:
109     name = "Scan Utility";
110     link->SetArguments("-scan");
111     break;
112     }
113    
114     IPersistFile* file;
115    
116     link->QueryInterface(IID_IPersistFile, (LPVOID*)(&file));
117    
118     char* desktop = new char[MAX_PATH];
119    
120     SHGetFolderPath(NULL, CSIDL_DESKTOPDIRECTORY, NULL, SHGFP_TYPE_CURRENT,
121     desktop);
122    
123     wstring path = toWide(string(desktop) + "\\" + name + ".lnk");
124    
125     if (debug) cerr << "path = " << toAnsi(path) << "\n";
126    
127     file->Save(path.c_str(), TRUE);
128     file->Release();
129     link->Release();
130    
131 douglas 267 delete [] desktop;
132 douglas 263 }