clang-10: use AFS_FALLTHROUGH for case fallthrough
[openafs.git] / src / WINNT / afssvrmgr / svr_prune.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_prune.h"
21 #include "propcache.h"
22
23 /*
24  * PROTOTYPES _________________________________________________________________
25  *
26  */
27
28 BOOL WINAPI Server_Prune_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
29
30 void Server_Prune_OnInitDialog (HWND hDlg, LPSVR_PRUNE_PARAMS lpp);
31 void Server_Prune_OnEndTask_InitDialog (HWND hDlg, LPTASKPACKET ptp, LPSVR_PRUNE_PARAMS lpp);
32 void Server_Prune_EnableOK (HWND hDlg);
33 void Server_Prune_OnOK (HWND hDlg);
34
35
36 /*
37  * ROUTINES ___________________________________________________________________
38  *
39  */
40
41 void Server_Prune (LPIDENT lpiServer, BOOL fBAK, BOOL fOLD, BOOL fCore)
42 {
43    HWND hCurrent;
44
45    if ((hCurrent = PropCache_Search (pcSVR_PRUNE, NULL)) != NULL)
46       {
47       SetFocus (hCurrent);
48       }
49    else
50       {
51       LPSVR_PRUNE_PARAMS lpp = New (SVR_PRUNE_PARAMS);
52       lpp->lpiServer = lpiServer;
53       lpp->fBAK = fBAK;
54       lpp->fOLD = fOLD;
55       lpp->fCore = fCore;
56
57       HWND hDlg = ModelessDialogParam (IDD_SVR_PRUNE, NULL, (DLGPROC)Server_Prune_DlgProc, (LPARAM)lpp);
58       ShowWindow (hDlg, SW_SHOW);
59       }
60 }
61
62
63 BOOL WINAPI Server_Prune_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
64 {
65    if (AfsAppLib_HandleHelp (IDD_SVR_PRUNE, hDlg, msg, wp, lp))
66       return TRUE;
67
68    LPSVR_PRUNE_PARAMS lpp;
69
70    if (msg == WM_INITDIALOG)
71       SetWindowLongPtr (hDlg, DWLP_USER, lp);
72
73    if ((lpp = (LPSVR_PRUNE_PARAMS)GetWindowLongPtr(hDlg,DWLP_USER)) != NULL)
74       {
75       switch (msg)
76          {
77          case WM_INITDIALOG:
78             PropCache_Add (pcSVR_PRUNE, NULL, hDlg);
79             Server_Prune_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_Prune_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_Prune_OnOK (hDlg);
97                   AFS_FALLTHROUGH;
98
99                case IDCANCEL:
100                   DestroyWindow (hDlg);
101                   break;
102
103                case IDC_OP_DELETE_BAK:
104                case IDC_OP_DELETE_OLD:
105                case IDC_OP_DELETE_CORE:
106                   Server_Prune_EnableOK (hDlg);
107                   break;
108                }
109             break;
110
111          case WM_DESTROY:
112             SetWindowLongPtr (hDlg, DWLP_USER, 0);
113             PropCache_Delete (pcSVR_PRUNE, NULL);
114             Delete (lpp);
115             break;
116          }
117       }
118
119    return FALSE;
120 }
121
122
123 void Server_Prune_OnInitDialog (HWND hDlg, LPSVR_PRUNE_PARAMS lpp)
124 {
125    CheckDlgButton (hDlg, IDC_OP_DELETE_BAK,  lpp->fBAK);
126    CheckDlgButton (hDlg, IDC_OP_DELETE_OLD,  lpp->fOLD);
127    CheckDlgButton (hDlg, IDC_OP_DELETE_CORE, lpp->fCore);
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_Prune_OnEndTask_InitDialog (HWND hDlg, LPTASKPACKET ptp, LPSVR_PRUNE_PARAMS lpp)
140 {
141    EnableWindow (GetDlgItem (hDlg, IDC_SERVER), TRUE);
142
143    Server_Prune_EnableOK (hDlg);
144 }
145
146
147 void Server_Prune_EnableOK (HWND hDlg)
148 {
149    LPIDENT lpiServer = NULL;
150
151    if (IsWindowEnabled (GetDlgItem (hDlg, IDC_SERVER)))
152       {
153       lpiServer = (LPIDENT)CB_GetSelectedData (GetDlgItem (hDlg, IDC_SERVER));
154       }
155
156    BOOL fEnable = (lpiServer != NULL) ? TRUE : FALSE;
157
158    if ( !IsDlgButtonChecked (hDlg, IDC_OP_DELETE_BAK) &&
159         !IsDlgButtonChecked (hDlg, IDC_OP_DELETE_OLD) &&
160         !IsDlgButtonChecked (hDlg, IDC_OP_DELETE_CORE) )
161       {
162       fEnable = FALSE;
163       }
164
165    EnableWindow (GetDlgItem (hDlg, IDOK), fEnable);
166 }
167
168
169 void Server_Prune_OnOK (HWND hDlg)
170 {
171    LPSVR_PRUNE_PARAMS lpp = New (SVR_PRUNE_PARAMS);
172    lpp->lpiServer = (LPIDENT)CB_GetSelectedData (GetDlgItem (hDlg, IDC_SERVER));
173    lpp->fBAK = IsDlgButtonChecked (hDlg, IDC_OP_DELETE_BAK);
174    lpp->fOLD = IsDlgButtonChecked (hDlg, IDC_OP_DELETE_OLD);
175    lpp->fCore = IsDlgButtonChecked (hDlg, IDC_OP_DELETE_CORE);
176
177    StartTask (taskSVR_PRUNE, NULL, lpp);
178 }
179