Windows: permit aklog to build with krb4 support and roken
[openafs.git] / src / WINNT / afssvrmgr / set_move.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 <afs/param.h>
15 #include <afs/stds.h>
16 }
17
18 #include "svrmgr.h"
19 #include "set_move.h"
20 #include "columns.h"
21 #include "svr_window.h"
22 #include "display.h"
23
24
25 /*
26  * PROTOTYPES _________________________________________________________________
27  *
28  */
29
30 BOOL CALLBACK Filesets_MoveTo_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
31 void Filesets_MoveTo_OnInitDialog (HWND hDlg, LPSET_MOVE_PARAMS psmp);
32 void Filesets_MoveTo_OnSelectServer (HWND hDlg, LPIDENT *plpiTarget);
33 void Filesets_MoveTo_OnEndTask_InitDialog (HWND hDlg, LPTASKPACKET ptp, LPSET_MOVE_PARAMS psmp);
34 void Filesets_MoveTo_OnEndTask_EnumAggregates (HWND hDlg, LPSET_MOVE_PARAMS psmp);
35 void Filesets_MoveTo_EnableOK (HWND hDlg, LPSET_MOVE_PARAMS psmp);
36 void Filesets_MoveTo_StartDisplay_Aggregates (HWND hDlg, LPIDENT lpiTarget);
37
38
39 /*
40  * ROUTINES ___________________________________________________________________
41  *
42  */
43
44 void Filesets_ShowMoveTo (LPIDENT lpiSource, LPIDENT lpiTarget)
45 {
46    LPSET_MOVE_PARAMS psmp = New (SET_MOVE_PARAMS);
47    psmp->lpiSource = lpiSource;
48    psmp->lpiTarget = lpiTarget;
49
50    INT_PTR rc = ModalDialogParam (IDD_SET_MOVETO, GetActiveWindow(), (DLGPROC)Filesets_MoveTo_DlgProc, (LPARAM)psmp);
51    if (rc != IDOK)
52       {
53       Delete (psmp);
54       }
55    else if (!ASSERT( psmp->lpiTarget && psmp->lpiTarget->fIsAggregate() ))
56       {
57       Delete (psmp);
58       }
59    else
60       {
61       StartTask (taskSET_MOVE, NULL, psmp);
62       }
63 }
64
65
66 BOOL CALLBACK Filesets_MoveTo_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
67 {
68    static LPSET_MOVE_PARAMS psmp = NULL;
69    if (msg == WM_INITDIALOG)
70       psmp = (LPSET_MOVE_PARAMS)lp;
71
72    if (HandleColumnNotify (hDlg, msg, wp, lp, &gr.viewAggMove))
73       return FALSE;
74
75    if (AfsAppLib_HandleHelp (IDD_SET_MOVETO, hDlg, msg, wp, lp))
76       return TRUE;
77
78    if (psmp != NULL)
79       {
80       switch (msg)
81          {
82          case WM_INITDIALOG:
83             FastList_SetTextCallback (GetDlgItem (hDlg, IDC_AGG_LIST), GetItemText, &gr.viewAggMove);
84             Filesets_MoveTo_OnInitDialog (hDlg, psmp);
85             StartTask (taskSET_MOVETO_INIT, hDlg, psmp->lpiSource);
86             break;
87
88          case WM_ENDTASK:
89             LPTASKPACKET ptp;
90             if ((ptp = (LPTASKPACKET)lp) != NULL)
91                {
92                if (ptp->idTask == taskSET_MOVETO_INIT)
93                   Filesets_MoveTo_OnEndTask_InitDialog (hDlg, ptp, psmp);
94                else if (ptp->idTask == taskAGG_ENUM_TO_LISTVIEW)
95                   Filesets_MoveTo_OnEndTask_EnumAggregates (hDlg, psmp);
96                else if (ptp->idTask == taskSVR_ENUM_TO_COMBOBOX)
97                   {
98                   EnableWindow (GetDlgItem (hDlg, IDC_MOVESET_SERVER), TRUE);
99                   Filesets_MoveTo_OnSelectServer (hDlg, &psmp->lpiTarget);
100                   }
101                FreeTaskPacket (ptp);
102                }
103             break; 
104
105          case WM_CONTEXTMENU:
106             HWND hList;
107             hList = GetDlgItem (hDlg, IDC_AGG_LIST);
108
109             POINT ptScreen;
110             POINT ptClient;
111             ptScreen.x = LOWORD(lp);
112             ptScreen.y = HIWORD(lp);
113
114             ptClient = ptScreen;
115             ScreenToClient (hList, &ptClient);
116
117             if (FL_HitTestForHeaderBar (hList, ptClient))
118                {
119                HMENU hm = TaLocale_LoadMenu (MENU_COLUMNS);
120                DisplayContextMenu (hm, ptScreen, hList);
121                }
122             break;
123
124          case WM_COLUMNS_CHANGED:
125             LPARAM lpSel;
126             lpSel = FL_GetSelectedData (GetDlgItem (hDlg, IDC_AGG_LIST));
127             FL_RestoreView (GetDlgItem (hDlg, IDC_AGG_LIST), &gr.viewAggMove);
128             Filesets_MoveTo_OnSelectServer (hDlg, (LPIDENT*)&lpSel);
129             break;
130
131          case WM_COMMAND:
132             switch (LOWORD(wp))
133                {
134                case IDOK:
135                   if (psmp->lpiTarget)
136                      EndDialog (hDlg, LOWORD(wp));
137                   break;
138
139                case IDCANCEL:
140                   EndDialog (hDlg, LOWORD(wp));
141                   break;
142
143                case IDC_MOVESET_SERVER:
144                   if (HIWORD(wp) == CBN_SELCHANGE)
145                      Filesets_MoveTo_OnSelectServer (hDlg, &psmp->lpiTarget);
146                   break;
147                }
148             break;
149
150          case WM_DESTROY:
151             FL_StoreView (GetDlgItem (hDlg, IDC_AGG_LIST), &gr.viewAggMove);
152             psmp = NULL;
153             break;
154
155          case WM_NOTIFY: 
156             switch (((LPNMHDR)lp)->code)
157                { 
158                case FLN_ITEMSELECT:
159                   LPIDENT lpi;
160                   if ((lpi = (LPIDENT)FL_GetSelectedData (GetDlgItem (hDlg, IDC_AGG_LIST))) != NULL)
161                      {
162                      psmp->lpiTarget = lpi;
163                      Filesets_MoveTo_EnableOK (hDlg, psmp);
164                      }
165                   break;
166                }
167             break;
168          }
169       }
170
171    return FALSE;
172 }
173
174
175 static LONG_PTR procFilesetsMoveToList = 0;
176
177 LRESULT CALLBACK Filesets_MoveTo_SubclassListProc (HWND hList, UINT msg, WPARAM wp, LPARAM lp)
178 {
179    LRESULT rc;
180
181    if (procFilesetsMoveToList == 0)
182       rc = DefWindowProc (hList, msg, wp, lp);
183    else
184       rc = (LRESULT) CallWindowProc ((WNDPROC)procFilesetsMoveToList, hList, msg, wp, lp);
185
186    switch (msg)
187       {
188       case WM_DESTROY:
189          if (procFilesetsMoveToList != 0)
190             SetWindowLongPtr (hList, GWLP_WNDPROC, procFilesetsMoveToList);
191          break;
192
193       case WM_COMMAND: 
194          switch (LOWORD(wp))
195             {
196             case M_COLUMNS:
197                ShowColumnsDialog (GetParent (hList), &gr.viewAggMove);
198                break;
199             }
200          break; 
201       }
202
203    return rc;
204 }
205
206
207 void Filesets_MoveTo_OnInitDialog (HWND hDlg, LPSET_MOVE_PARAMS psmp)
208 {
209    HWND hList = GetDlgItem (hDlg, IDC_AGG_LIST);
210    if (procFilesetsMoveToList == 0)
211       procFilesetsMoveToList = GetWindowLongPtr (hList, GWLP_WNDPROC);
212    SetWindowLongPtr (hList, GWLP_WNDPROC, (LONG_PTR)Filesets_MoveTo_SubclassListProc);
213
214    if (gr.viewAggMove.lvsView == 0) // never initialized this?
215       {
216       if (gr.viewAggCreate.lvsView == 0)
217          memcpy (&gr.viewAggMove, &gr.viewAgg, sizeof(VIEWINFO));
218       else
219          memcpy (&gr.viewAggMove, &gr.viewAggCreate, sizeof(VIEWINFO));
220       }
221    FL_RestoreView (GetDlgItem (hDlg, IDC_AGG_LIST), &gr.viewAggMove);
222
223    EnableWindow (GetDlgItem (hDlg, IDOK), FALSE);
224    EnableWindow (GetDlgItem (hDlg, IDC_MOVESET_SERVER), FALSE);
225    EnableWindow (GetDlgItem (hDlg, IDC_AGG_LIST), FALSE);
226 }
227
228
229 void Filesets_MoveTo_OnEndTask_InitDialog (HWND hDlg, LPTASKPACKET ptp, LPSET_MOVE_PARAMS psmp)
230 {
231    TCHAR szServer[ cchNAME ];
232    TCHAR szAggregate[ cchNAME ];
233    TCHAR szFileset[ cchNAME ];
234    psmp->lpiSource->GetServerName (szServer);
235    psmp->lpiSource->GetAggregateName (szAggregate);
236    psmp->lpiSource->GetFilesetName (szFileset);
237
238    if (!ptp->rc)
239       {
240       ErrorDialog (ptp->status, IDS_ERROR_REFRESH_FILESET_STATUS, TEXT("%s%s%s"), szServer, szAggregate, szFileset);
241       EndDialog (hDlg, IDCANCEL);
242       }
243    else
244       {
245       int ids = (TASKDATA(ptp)->fs.Type == ftREADWRITE) ? IDS_MOVESET_READWRITE : IDS_MOVESET_READONLY;
246       LPTSTR pszDesc = FormatString (ids, TEXT("%s%s%s"), szServer, szAggregate, szFileset);
247       SetDlgItemText (hDlg, IDC_MOVESET_DESC, pszDesc);
248       FreeString (pszDesc);
249
250       // Fill in the Servers combobox, and select the default server
251       // (if one was specified).
252       //
253       LPSVR_ENUM_TO_COMBOBOX_PACKET lpp = New (SVR_ENUM_TO_COMBOBOX_PACKET);
254       lpp->hCombo = GetDlgItem (hDlg, IDC_MOVESET_SERVER);
255       lpp->lpiSelect = (psmp->lpiTarget) ? psmp->lpiTarget->GetServer() : NULL;
256       StartTask (taskSVR_ENUM_TO_COMBOBOX, hDlg, lpp);
257       }
258 }
259
260
261 void Filesets_MoveTo_OnSelectServer (HWND hDlg, LPIDENT *plpiTarget)
262 {
263    LPIDENT lpiServerNew = (LPIDENT)CB_GetSelectedData (GetDlgItem (hDlg, IDC_MOVESET_SERVER));
264
265    SetWindowLongPtr (hDlg, DWLP_USER, (LONG_PTR)lpiServerNew);
266
267    if (*plpiTarget && (*plpiTarget)->fIsServer())
268       *plpiTarget = NULL;
269    if (*plpiTarget && ((*plpiTarget)->GetServer() != lpiServerNew))
270       *plpiTarget = NULL;
271
272    Filesets_MoveTo_StartDisplay_Aggregates (hDlg, *plpiTarget);
273 }
274
275
276 void Filesets_MoveTo_OnEndTask_EnumAggregates (HWND hDlg, LPSET_MOVE_PARAMS psmp)
277 {
278    EnableWindow (GetDlgItem (hDlg, IDC_AGG_LIST), TRUE);
279    Filesets_MoveTo_EnableOK (hDlg, psmp);
280 }
281
282
283 void Filesets_MoveTo_EnableOK (HWND hDlg, LPSET_MOVE_PARAMS psmp)
284 {
285    EnableWindow (GetDlgItem (hDlg, IDOK), (psmp->lpiTarget) ? TRUE : FALSE);
286 }
287
288
289 void Filesets_MoveTo_StartDisplay_Aggregates (HWND hDlg, LPIDENT lpiTarget)
290 {
291    EnableWindow (GetDlgItem (hDlg, IDOK), FALSE);
292
293    LPAGG_ENUM_TO_LISTVIEW_PACKET lpp = New (AGG_ENUM_TO_LISTVIEW_PACKET);
294    lpp->lpiServer = NULL;
295    lpp->hList = GetDlgItem (hDlg, IDC_AGG_LIST);
296    lpp->lpiSelect = lpiTarget;
297    lpp->lpvi = &gr.viewAggMove;
298    StartTask (taskAGG_ENUM_TO_LISTVIEW, hDlg, lpp);
299 }
300