448
|
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 *
|
673
|
15 * Sync'ed with cinstall 2001-10-16
|
448
|
16 */
|
|
17
|
|
18 /* The purpose of this file is to ask the user where they want the
|
|
19 root of the installation to be, and to ask whether the user prefers
|
|
20 text or binary mounts. */
|
|
21
|
|
22 #include "win32.h"
|
|
23 #include <shlobj.h>
|
|
24 #include <stdio.h>
|
|
25 #include <stdlib.h>
|
|
26 #include <ctype.h>
|
673
|
27 #include <io.h>
|
448
|
28
|
673
|
29 #include "mkdir.h"
|
448
|
30 #include "dialog.h"
|
|
31 #include "resource.h"
|
|
32 #include "state.h"
|
|
33 #include "msg.h"
|
|
34 #include "concat.h"
|
|
35 #include "log.h"
|
|
36
|
|
37 static void
|
|
38 check_if_enable_next (HWND h)
|
|
39 {
|
|
40 EnableWindow (GetDlgItem (h, IDOK), local_dir != 0);
|
|
41 }
|
|
42
|
|
43 static void
|
|
44 load_dialog (HWND h)
|
|
45 {
|
|
46 eset (h, IDC_LOCAL_DIR, local_dir);
|
|
47 check_if_enable_next (h);
|
|
48 }
|
|
49
|
|
50 static void
|
|
51 save_dialog (HWND h)
|
|
52 {
|
|
53 local_dir = eget (h, IDC_LOCAL_DIR, local_dir);
|
|
54 }
|
|
55
|
|
56
|
|
57 static int CALLBACK
|
|
58 browse_cb (HWND h, UINT m, LPARAM lp, LPARAM data)
|
|
59 {
|
|
60 switch (m)
|
|
61 {
|
|
62 case BFFM_INITIALIZED:
|
|
63 if (local_dir)
|
|
64 SendMessage (h, BFFM_SETSELECTION, TRUE, (LPARAM)local_dir);
|
|
65 break;
|
|
66 }
|
|
67 return 0;
|
|
68 }
|
|
69
|
|
70 static void
|
|
71 browse (HWND h)
|
|
72 {
|
|
73 BROWSEINFO bi;
|
|
74 CHAR name[MAX_PATH];
|
|
75 LPITEMIDLIST pidl;
|
|
76 memset (&bi, 0, sizeof (bi));
|
|
77 bi.hwndOwner = h;
|
|
78 bi.pszDisplayName = name;
|
|
79 bi.lpszTitle = "Select download directory";
|
|
80 bi.ulFlags = BIF_RETURNONLYFSDIRS;
|
|
81 bi.lpfn = browse_cb;
|
|
82 pidl = SHBrowseForFolder (&bi);
|
|
83 if (pidl)
|
|
84 {
|
|
85 if (SHGetPathFromIDList (pidl, name))
|
|
86 eset (h, IDC_LOCAL_DIR, name);
|
|
87 }
|
|
88 }
|
|
89
|
|
90
|
|
91 static BOOL
|
|
92 dialog_cmd (HWND h, int id, HWND hwndctl, UINT code)
|
|
93 {
|
|
94 switch (id)
|
|
95 {
|
|
96
|
|
97 case IDC_LOCAL_DIR:
|
|
98 save_dialog (h);
|
|
99 check_if_enable_next (h);
|
|
100 break;
|
|
101
|
|
102 case IDC_LOCAL_DIR_BROWSE:
|
|
103 browse (h);
|
|
104 break;
|
|
105
|
|
106 case IDOK:
|
|
107 save_dialog (h);
|
673
|
108 if (_access (local_dir, 0) != 0 && yesno (IDS_CREATE_DIR, local_dir) == IDYES)
|
|
109 {
|
|
110 log (0, "Created install directory %s\n", local_dir);
|
|
111 mkdir_p (1, local_dir);
|
|
112 }
|
448
|
113 if (SetCurrentDirectoryA (local_dir))
|
|
114 {
|
|
115 switch (source)
|
|
116 {
|
|
117 case IDC_SOURCE_DOWNLOAD:
|
|
118 NEXT (IDD_NET);
|
|
119 break;
|
|
120 case IDC_SOURCE_NETINST:
|
|
121 case IDC_SOURCE_CWD:
|
|
122 NEXT (IDD_ROOT);
|
|
123 break;
|
|
124 default:
|
|
125 NEXT (0);
|
|
126 break;
|
|
127 }
|
|
128 }
|
|
129 else
|
|
130 note (IDS_ERR_CHDIR, local_dir);
|
|
131
|
|
132 break;
|
|
133
|
|
134 case IDC_BACK:
|
|
135 save_dialog (h);
|
|
136 NEXT (IDD_SOURCE);
|
|
137 break;
|
|
138
|
|
139 case IDCANCEL:
|
|
140 NEXT (0);
|
|
141 break;
|
|
142 }
|
|
143 }
|
|
144
|
|
145 static BOOL CALLBACK
|
|
146 dialog_proc (HWND h, UINT message, WPARAM wParam, LPARAM lParam)
|
|
147 {
|
|
148 switch (message)
|
|
149 {
|
|
150 case WM_INITDIALOG:
|
|
151 load_dialog (h);
|
|
152 return FALSE;
|
|
153 case WM_COMMAND:
|
|
154 return HANDLE_WM_COMMAND (h, wParam, lParam, dialog_cmd);
|
|
155 }
|
|
156 return FALSE;
|
|
157 }
|
|
158
|
|
159 extern char cwd[_MAX_PATH];
|
|
160
|
|
161 void
|
|
162 do_local_dir (HINSTANCE h)
|
|
163 {
|
|
164 int rv = 0;
|
|
165 rv = DialogBox (h, MAKEINTRESOURCE (IDD_LOCAL_DIR), 0, dialog_proc);
|
|
166 if (rv == -1)
|
|
167 fatal (IDS_DIALOG_FAILED);
|
|
168
|
|
169 log (0, "Selected local directory: %s", local_dir);
|
|
170 }
|
|
171
|