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

# Content
1 // Vance Thrift and Biller File Utility 2
2 //
3 // Douglas Thrift
4 //
5 // $Id: Chooser.cxx,v 1.6 2003/08/19 04:39:38 douglas Exp $
6
7 #include "Chooser.h"
8
9 Chooser::Chooser()
10 {
11 shortcut = false;
12 choice = none;
13 number = count++;
14 choosers.insert(pair<unsigned, Chooser*>(number, this));
15 }
16
17 Chooser::~Chooser()
18 {
19 choosers.erase(number);
20 }
21
22 Mode Chooser::choose(HWND parent)
23 {
24 DialogBoxParam(gui.instance, MAKEINTRESOURCE(IDD_CHOICE), parent,
25 Chooser::window, number);
26
27 desktop();
28
29 return choice;
30 }
31
32 unsigned Chooser::count = 0;
33 map<unsigned, Chooser*> Chooser::choosers;
34 map<HWND, Chooser*> Chooser::windows;
35
36 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 data->choice = disc;
58 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 data->choice = scan;
64 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 data->shortcut = !data->shortcut;
70 if (debug) cerr << "shortcut = " << data->shortcut << "\n";
71 break;
72 case IDCANCEL:
73 data->choice = none;
74 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 void Chooser::desktop(void)
88 {
89 if (!shortcut || choice == none) return;
90
91 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 delete [] desktop;
132 }