Mercurial > hg > xemacs-beta
comparison netinstall/localdir.cc @ 448:3078fd1074e8 r21-2-39
Import from CVS: tag r21-2-39
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:38:25 +0200 |
parents | |
children | 685b588e92d8 |
comparison
equal
deleted
inserted
replaced
447:4fc5f13f3bd3 | 448:3078fd1074e8 |
---|---|
1 /* | |
2 * Copyright (c) 2000, Red Hat, Inc. | |
3 * | |
4 * This program is free software; you can redistribute it and/or modify | |
5 * it under the terms of the GNU General Public License as published by | |
6 * the Free Software Foundation; either version 2 of the License, or | |
7 * (at your option) any later version. | |
8 * | |
9 * A copy of the GNU General Public License can be found at | |
10 * http://www.gnu.org/ | |
11 * | |
12 * Written by Andrej Borsenkow <Andrej.Borsenkow@mow.siemens.ru> | |
13 * based on work and suggestions of DJ Delorie | |
14 * | |
15 */ | |
16 | |
17 /* The purpose of this file is to ask the user where they want the | |
18 root of the installation to be, and to ask whether the user prefers | |
19 text or binary mounts. */ | |
20 | |
21 #include "win32.h" | |
22 #include <shlobj.h> | |
23 #include <stdio.h> | |
24 #include <stdlib.h> | |
25 #include <ctype.h> | |
26 | |
27 #include "dialog.h" | |
28 #include "resource.h" | |
29 #include "state.h" | |
30 #include "msg.h" | |
31 #include "concat.h" | |
32 #include "log.h" | |
33 | |
34 static void | |
35 check_if_enable_next (HWND h) | |
36 { | |
37 EnableWindow (GetDlgItem (h, IDOK), local_dir != 0); | |
38 } | |
39 | |
40 static void | |
41 load_dialog (HWND h) | |
42 { | |
43 eset (h, IDC_LOCAL_DIR, local_dir); | |
44 check_if_enable_next (h); | |
45 } | |
46 | |
47 static void | |
48 save_dialog (HWND h) | |
49 { | |
50 local_dir = eget (h, IDC_LOCAL_DIR, local_dir); | |
51 } | |
52 | |
53 | |
54 static int CALLBACK | |
55 browse_cb (HWND h, UINT m, LPARAM lp, LPARAM data) | |
56 { | |
57 switch (m) | |
58 { | |
59 case BFFM_INITIALIZED: | |
60 if (local_dir) | |
61 SendMessage (h, BFFM_SETSELECTION, TRUE, (LPARAM)local_dir); | |
62 break; | |
63 } | |
64 return 0; | |
65 } | |
66 | |
67 static void | |
68 browse (HWND h) | |
69 { | |
70 BROWSEINFO bi; | |
71 CHAR name[MAX_PATH]; | |
72 LPITEMIDLIST pidl; | |
73 memset (&bi, 0, sizeof (bi)); | |
74 bi.hwndOwner = h; | |
75 bi.pszDisplayName = name; | |
76 bi.lpszTitle = "Select download directory"; | |
77 bi.ulFlags = BIF_RETURNONLYFSDIRS; | |
78 bi.lpfn = browse_cb; | |
79 pidl = SHBrowseForFolder (&bi); | |
80 if (pidl) | |
81 { | |
82 if (SHGetPathFromIDList (pidl, name)) | |
83 eset (h, IDC_LOCAL_DIR, name); | |
84 } | |
85 } | |
86 | |
87 | |
88 static BOOL | |
89 dialog_cmd (HWND h, int id, HWND hwndctl, UINT code) | |
90 { | |
91 switch (id) | |
92 { | |
93 | |
94 case IDC_LOCAL_DIR: | |
95 save_dialog (h); | |
96 check_if_enable_next (h); | |
97 break; | |
98 | |
99 case IDC_LOCAL_DIR_BROWSE: | |
100 browse (h); | |
101 break; | |
102 | |
103 case IDOK: | |
104 save_dialog (h); | |
105 if (SetCurrentDirectoryA (local_dir)) | |
106 { | |
107 switch (source) | |
108 { | |
109 case IDC_SOURCE_DOWNLOAD: | |
110 NEXT (IDD_NET); | |
111 break; | |
112 case IDC_SOURCE_NETINST: | |
113 case IDC_SOURCE_CWD: | |
114 NEXT (IDD_ROOT); | |
115 break; | |
116 default: | |
117 NEXT (0); | |
118 break; | |
119 } | |
120 } | |
121 else | |
122 note (IDS_ERR_CHDIR, local_dir); | |
123 | |
124 break; | |
125 | |
126 case IDC_BACK: | |
127 save_dialog (h); | |
128 NEXT (IDD_SOURCE); | |
129 break; | |
130 | |
131 case IDCANCEL: | |
132 NEXT (0); | |
133 break; | |
134 } | |
135 return FALSE; | |
136 } | |
137 | |
138 static BOOL CALLBACK | |
139 dialog_proc (HWND h, UINT message, WPARAM wParam, LPARAM lParam) | |
140 { | |
141 switch (message) | |
142 { | |
143 case WM_INITDIALOG: | |
144 load_dialog (h); | |
145 return FALSE; | |
146 case WM_COMMAND: | |
147 return HANDLE_WM_COMMAND (h, wParam, lParam, dialog_cmd); | |
148 } | |
149 return FALSE; | |
150 } | |
151 | |
152 extern char cwd[_MAX_PATH]; | |
153 | |
154 void | |
155 do_local_dir (HINSTANCE h) | |
156 { | |
157 int rv = 0; | |
158 rv = DialogBox (h, MAKEINTRESOURCE (IDD_LOCAL_DIR), 0, dialog_proc); | |
159 if (rv == -1) | |
160 fatal (IDS_DIALOG_FAILED); | |
161 | |
162 log (0, "Selected local directory: %s", local_dir); | |
163 } | |
164 |