2 * Copyright 2000, International Business Machines Corporation and others.
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
14 #include <afs/param.h>
21 #include "svr_window.h"
26 * PROTOTYPES _________________________________________________________________
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);
40 * ROUTINES ___________________________________________________________________
44 void Filesets_ShowMoveTo (LPIDENT lpiSource, LPIDENT lpiTarget)
46 LPSET_MOVE_PARAMS psmp = New (SET_MOVE_PARAMS);
47 psmp->lpiSource = lpiSource;
48 psmp->lpiTarget = lpiTarget;
50 INT_PTR rc = ModalDialogParam (IDD_SET_MOVETO, GetActiveWindow(), (DLGPROC)Filesets_MoveTo_DlgProc, (LPARAM)psmp);
55 else if (!ASSERT( psmp->lpiTarget && psmp->lpiTarget->fIsAggregate() ))
61 StartTask (taskSET_MOVE, NULL, psmp);
66 BOOL CALLBACK Filesets_MoveTo_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
68 static LPSET_MOVE_PARAMS psmp = NULL;
69 if (msg == WM_INITDIALOG)
70 psmp = (LPSET_MOVE_PARAMS)lp;
72 if (HandleColumnNotify (hDlg, msg, wp, lp, &gr.viewAggMove))
75 if (AfsAppLib_HandleHelp (IDD_SET_MOVETO, hDlg, msg, wp, lp))
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);
90 if ((ptp = (LPTASKPACKET)lp) != NULL)
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)
98 EnableWindow (GetDlgItem (hDlg, IDC_MOVESET_SERVER), TRUE);
99 Filesets_MoveTo_OnSelectServer (hDlg, &psmp->lpiTarget);
101 FreeTaskPacket (ptp);
107 hList = GetDlgItem (hDlg, IDC_AGG_LIST);
111 ptScreen.x = LOWORD(lp);
112 ptScreen.y = HIWORD(lp);
115 ScreenToClient (hList, &ptClient);
117 if (FL_HitTestForHeaderBar (hList, ptClient))
119 HMENU hm = TaLocale_LoadMenu (MENU_COLUMNS);
120 DisplayContextMenu (hm, ptScreen, hList);
124 case WM_COLUMNS_CHANGED:
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);
136 EndDialog (hDlg, LOWORD(wp));
140 EndDialog (hDlg, LOWORD(wp));
143 case IDC_MOVESET_SERVER:
144 if (HIWORD(wp) == CBN_SELCHANGE)
145 Filesets_MoveTo_OnSelectServer (hDlg, &psmp->lpiTarget);
151 FL_StoreView (GetDlgItem (hDlg, IDC_AGG_LIST), &gr.viewAggMove);
156 switch (((LPNMHDR)lp)->code)
160 if ((lpi = (LPIDENT)FL_GetSelectedData (GetDlgItem (hDlg, IDC_AGG_LIST))) != NULL)
162 psmp->lpiTarget = lpi;
163 Filesets_MoveTo_EnableOK (hDlg, psmp);
175 static LONG_PTR procFilesetsMoveToList = 0;
177 LRESULT CALLBACK Filesets_MoveTo_SubclassListProc (HWND hList, UINT msg, WPARAM wp, LPARAM lp)
181 if (procFilesetsMoveToList == 0)
182 rc = DefWindowProc (hList, msg, wp, lp);
184 rc = (LRESULT) CallWindowProc ((WNDPROC)procFilesetsMoveToList, hList, msg, wp, lp);
189 if (procFilesetsMoveToList != 0)
190 SetWindowLongPtr (hList, GWLP_WNDPROC, procFilesetsMoveToList);
197 ShowColumnsDialog (GetParent (hList), &gr.viewAggMove);
207 void Filesets_MoveTo_OnInitDialog (HWND hDlg, LPSET_MOVE_PARAMS psmp)
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);
214 if (gr.viewAggMove.lvsView == 0) // never initialized this?
216 if (gr.viewAggCreate.lvsView == 0)
217 memcpy (&gr.viewAggMove, &gr.viewAgg, sizeof(VIEWINFO));
219 memcpy (&gr.viewAggMove, &gr.viewAggCreate, sizeof(VIEWINFO));
221 FL_RestoreView (GetDlgItem (hDlg, IDC_AGG_LIST), &gr.viewAggMove);
223 EnableWindow (GetDlgItem (hDlg, IDOK), FALSE);
224 EnableWindow (GetDlgItem (hDlg, IDC_MOVESET_SERVER), FALSE);
225 EnableWindow (GetDlgItem (hDlg, IDC_AGG_LIST), FALSE);
229 void Filesets_MoveTo_OnEndTask_InitDialog (HWND hDlg, LPTASKPACKET ptp, LPSET_MOVE_PARAMS psmp)
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);
240 ErrorDialog (ptp->status, IDS_ERROR_REFRESH_FILESET_STATUS, TEXT("%s%s%s"), szServer, szAggregate, szFileset);
241 EndDialog (hDlg, IDCANCEL);
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);
250 // Fill in the Servers combobox, and select the default server
251 // (if one was specified).
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);
261 void Filesets_MoveTo_OnSelectServer (HWND hDlg, LPIDENT *plpiTarget)
263 LPIDENT lpiServerNew = (LPIDENT)CB_GetSelectedData (GetDlgItem (hDlg, IDC_MOVESET_SERVER));
265 SetWindowLongPtr (hDlg, DWLP_USER, (LONG_PTR)lpiServerNew);
267 if (*plpiTarget && (*plpiTarget)->fIsServer())
269 if (*plpiTarget && ((*plpiTarget)->GetServer() != lpiServerNew))
272 Filesets_MoveTo_StartDisplay_Aggregates (hDlg, *plpiTarget);
276 void Filesets_MoveTo_OnEndTask_EnumAggregates (HWND hDlg, LPSET_MOVE_PARAMS psmp)
278 EnableWindow (GetDlgItem (hDlg, IDC_AGG_LIST), TRUE);
279 Filesets_MoveTo_EnableOK (hDlg, psmp);
283 void Filesets_MoveTo_EnableOK (HWND hDlg, LPSET_MOVE_PARAMS psmp)
285 EnableWindow (GetDlgItem (hDlg, IDOK), (psmp->lpiTarget) ? TRUE : FALSE);
289 void Filesets_MoveTo_StartDisplay_Aggregates (HWND hDlg, LPIDENT lpiTarget)
291 EnableWindow (GetDlgItem (hDlg, IDOK), FALSE);
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);