3fb528b4c96907d3f9235cdd795da656ae8a0f3f
[openafs.git] / src / WINNT / afssvrmgr / svr_install.cpp
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  * 
5  * This software has been released under the terms of the IBM Public
6  * License.  For details, see the LICENSE file in the top-level source
7  * directory or online at http://www.openafs.org/dl/license10.html
8  */
9
10 extern "C" {
11 #include <afs/param.h>
12 #include <afs/stds.h>
13 }
14
15 #include "svrmgr.h"
16 #include "svr_install.h"
17 #include "propcache.h"
18
19 /*
20  * PROTOTYPES _________________________________________________________________
21  *
22  */
23
24 BOOL WINAPI Server_Install_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
25
26 void Server_Install_OnInitDialog (HWND hDlg, LPSVR_INSTALL_PARAMS lpp);
27 void Server_Install_OnEndTask_InitDialog (HWND hDlg, LPTASKPACKET ptp, LPSVR_INSTALL_PARAMS lpp);
28 void Server_Install_OnBrowse (HWND hDlg);
29 void Server_Install_EnableOK (HWND hDlg);
30 void Server_Install_OnOK (HWND hDlg);
31
32
33 /*
34  * ROUTINES ___________________________________________________________________
35  *
36  */
37
38 void Server_Install (LPIDENT lpiServer)
39 {
40    HWND hCurrent;
41
42    if ((hCurrent = PropCache_Search (pcSVR_INSTALL, NULL)) != NULL)
43       {
44       SetFocus (hCurrent);
45       }
46    else
47       {
48       LPSVR_INSTALL_PARAMS lpp = New (SVR_INSTALL_PARAMS);
49       lpp->lpiServer = lpiServer;
50       lpp->szSource[0] = TEXT('\0');
51       lpp->szTarget[0] = TEXT('\0');
52
53       HWND hDlg = ModelessDialogParam (IDD_SVR_INSTALL, NULL, (DLGPROC)Server_Install_DlgProc, (LPARAM)lpp);
54       ShowWindow (hDlg, SW_SHOW);
55       }
56 }
57
58
59 BOOL WINAPI Server_Install_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
60 {
61    if (AfsAppLib_HandleHelp (IDD_SVR_INSTALL, hDlg, msg, wp, lp))
62       return TRUE;
63
64    LPSVR_INSTALL_PARAMS lpp;
65
66    if (msg == WM_INITDIALOG)
67        SetWindowLongPtr (hDlg, DWLP_USER, lp);
68
69    if ((lpp = (LPSVR_INSTALL_PARAMS)GetWindowLongPtr(hDlg,DWLP_USER)) != NULL)
70       {
71       switch (msg)
72          {
73          case WM_INITDIALOG:
74             PropCache_Add (pcSVR_INSTALL, NULL, hDlg);
75             Server_Install_OnInitDialog (hDlg, lpp);
76             break;
77
78          case WM_ENDTASK:
79             LPTASKPACKET ptp;
80             if ((ptp = (LPTASKPACKET)lp) != NULL)
81                {
82                if (ptp->idTask == taskSVR_ENUM_TO_COMBOBOX)
83                   Server_Install_OnEndTask_InitDialog (hDlg, ptp, lpp);
84                FreeTaskPacket (ptp);
85                }
86             break;
87
88          case WM_COMMAND:
89             switch (LOWORD(wp))
90                {
91                case IDOK:
92                   Server_Install_OnOK (hDlg);
93                   // fall through
94
95                case IDCANCEL:
96                   DestroyWindow (hDlg);
97                   break;
98
99                case IDC_BROWSE:
100                   Server_Install_OnBrowse (hDlg);
101                   break;
102
103                case IDC_FILENAME:
104                case IDC_DIRECTORY:
105                case IDC_SERVER:
106                   Server_Install_EnableOK (hDlg);
107                   break;
108                }
109             break;
110
111          case WM_DESTROY:
112             SetWindowLongPtr (hDlg, DWLP_USER, 0);
113             PropCache_Delete (pcSVR_INSTALL, NULL);
114             Delete (lpp);
115             break;
116          }
117       }
118
119    return FALSE;
120 }
121
122
123 void Server_Install_OnInitDialog (HWND hDlg, LPSVR_INSTALL_PARAMS lpp)
124 {
125    LPTSTR pszText = FormatString (IDS_INSTALL_DESC1);
126    SetDlgItemText (hDlg, IDC_INSTALL_DESC, pszText);
127    FreeString (pszText);
128
129    LPSVR_ENUM_TO_COMBOBOX_PACKET lppEnum = New (SVR_ENUM_TO_COMBOBOX_PACKET);
130    lppEnum->hCombo = GetDlgItem (hDlg, IDC_SERVER);
131    lppEnum->lpiSelect = lpp->lpiServer;
132    StartTask (taskSVR_ENUM_TO_COMBOBOX, hDlg, lppEnum);
133
134    EnableWindow (GetDlgItem (hDlg, IDC_SERVER), FALSE);
135    EnableWindow (GetDlgItem (hDlg, IDOK),       FALSE);
136 }
137
138
139 void Server_Install_OnEndTask_InitDialog (HWND hDlg, LPTASKPACKET ptp, LPSVR_INSTALL_PARAMS lpp)
140 {
141    EnableWindow (GetDlgItem (hDlg, IDC_SERVER), TRUE);
142    Server_Install_EnableOK (hDlg);
143 }
144
145
146 void Server_Install_EnableOK (HWND hDlg)
147 {
148    LPIDENT lpiServer = NULL;
149
150    if (IsWindowEnabled (GetDlgItem (hDlg, IDC_SERVER)))
151       lpiServer = (LPIDENT)CB_GetSelectedData (GetDlgItem (hDlg, IDC_SERVER));
152
153    BOOL fEnable = (lpiServer != NULL) ? TRUE : FALSE;
154
155    if (fEnable)
156       {
157       TCHAR szName[ MAX_PATH ];
158       GetDlgItemText (hDlg, IDC_FILENAME, szName, MAX_PATH);
159       if (szName[0] == TEXT('\0'))
160          fEnable = FALSE;
161       }
162
163    if (fEnable)
164       {
165       TCHAR szName[ MAX_PATH ];
166       GetDlgItemText (hDlg, IDC_DIRECTORY, szName, MAX_PATH);
167       if (szName[0] == TEXT('\0'))
168          fEnable = FALSE;
169       }
170
171    EnableWindow (GetDlgItem (hDlg, IDOK), fEnable);
172 }
173
174
175 void Server_Install_OnOK (HWND hDlg)
176 {
177    LPSVR_INSTALL_PARAMS lpp = New (SVR_INSTALL_PARAMS);
178    lpp->lpiServer = (LPIDENT)CB_GetSelectedData (GetDlgItem (hDlg, IDC_SERVER));
179    GetDlgItemText (hDlg, IDC_FILENAME,  lpp->szSource, MAX_PATH);
180    GetDlgItemText (hDlg, IDC_DIRECTORY, lpp->szTarget, MAX_PATH);
181
182    StartTask (taskSVR_INSTALL, NULL, lpp);
183 }
184
185
186 void Server_Install_OnBrowse (HWND hDlg)
187 {
188    TCHAR szFilter[ cchRESOURCE ];
189    GetString (szFilter, IDS_FILTER_ALLFILES);
190    TCHAR chFilter = szFilter[ lstrlen(szFilter)-1 ];
191    for (LPTSTR pszFilter = szFilter;
192         (*pszFilter) && ((pszFilter = (LPTSTR)lstrchr (pszFilter, chFilter)) != NULL);
193         ++pszFilter)
194       {
195       *pszFilter = TEXT('\0');
196       }
197
198    TCHAR szFilename[ MAX_PATH ];
199    GetDlgItemText (hDlg, IDC_FILENAME, szFilename, MAX_PATH);
200
201    OPENFILENAME ofn;
202    memset (&ofn, 0x00, sizeof(ofn));
203    ofn.lStructSize = sizeof(ofn);
204    ofn.hwndOwner = hDlg;
205    ofn.hInstance = THIS_HINST;
206    ofn.lpstrFilter = szFilter;
207    ofn.nFilterIndex = 1;
208    ofn.lpstrFile = szFilename;
209    ofn.nMaxFile = MAX_PATH;
210    ofn.Flags = OFN_HIDEREADONLY | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
211
212    TCHAR szPath[ MAX_PATH ];
213    GetCurrentDirectory (MAX_PATH, szPath);
214
215    BOOL rc = GetOpenFileName (&ofn);
216
217    SetCurrentDirectory (szPath);
218
219    if (rc)
220       SetDlgItemText (hDlg, IDC_FILENAME, szFilename);
221 }
222