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