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
11 #include <afs/param.h>
18 #include "svr_window.h"
23 * PROTOTYPES _________________________________________________________________
27 BOOL CALLBACK Filesets_MoveTo_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
28 void Filesets_MoveTo_OnInitDialog (HWND hDlg, LPSET_MOVE_PARAMS psmp);
29 void Filesets_MoveTo_OnSelectServer (HWND hDlg, LPIDENT *plpiTarget);
30 void Filesets_MoveTo_OnEndTask_InitDialog (HWND hDlg, LPTASKPACKET ptp, LPSET_MOVE_PARAMS psmp);
31 void Filesets_MoveTo_OnEndTask_EnumAggregates (HWND hDlg, LPSET_MOVE_PARAMS psmp);
32 void Filesets_MoveTo_EnableOK (HWND hDlg, LPSET_MOVE_PARAMS psmp);
33 void Filesets_MoveTo_StartDisplay_Aggregates (HWND hDlg, LPIDENT lpiTarget);
37 * ROUTINES ___________________________________________________________________
41 void Filesets_ShowMoveTo (LPIDENT lpiSource, LPIDENT lpiTarget)
43 LPSET_MOVE_PARAMS psmp = New (SET_MOVE_PARAMS);
44 psmp->lpiSource = lpiSource;
45 psmp->lpiTarget = lpiTarget;
47 int rc = ModalDialogParam (IDD_SET_MOVETO, GetActiveWindow(), (DLGPROC)Filesets_MoveTo_DlgProc, (LPARAM)psmp);
52 else if (!ASSERT( psmp->lpiTarget && psmp->lpiTarget->fIsAggregate() ))
58 StartTask (taskSET_MOVE, NULL, psmp);
63 BOOL CALLBACK Filesets_MoveTo_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
65 static LPSET_MOVE_PARAMS psmp = NULL;
66 if (msg == WM_INITDIALOG)
67 psmp = (LPSET_MOVE_PARAMS)lp;
69 if (HandleColumnNotify (hDlg, msg, wp, lp, &gr.viewAggMove))
72 if (AfsAppLib_HandleHelp (IDD_SET_MOVETO, hDlg, msg, wp, lp))
80 FastList_SetTextCallback (GetDlgItem (hDlg, IDC_AGG_LIST), GetItemText, (DWORD)&gr.viewAggMove);
81 Filesets_MoveTo_OnInitDialog (hDlg, psmp);
82 StartTask (taskSET_MOVETO_INIT, hDlg, psmp->lpiSource);
87 if ((ptp = (LPTASKPACKET)lp) != NULL)
89 if (ptp->idTask == taskSET_MOVETO_INIT)
90 Filesets_MoveTo_OnEndTask_InitDialog (hDlg, ptp, psmp);
91 else if (ptp->idTask == taskAGG_ENUM_TO_LISTVIEW)
92 Filesets_MoveTo_OnEndTask_EnumAggregates (hDlg, psmp);
93 else if (ptp->idTask == taskSVR_ENUM_TO_COMBOBOX)
95 EnableWindow (GetDlgItem (hDlg, IDC_MOVESET_SERVER), TRUE);
96 Filesets_MoveTo_OnSelectServer (hDlg, &psmp->lpiTarget);
104 hList = GetDlgItem (hDlg, IDC_AGG_LIST);
108 ptScreen.x = LOWORD(lp);
109 ptScreen.y = HIWORD(lp);
112 ScreenToClient (hList, &ptClient);
114 if (FL_HitTestForHeaderBar (hList, ptClient))
116 HMENU hm = TaLocale_LoadMenu (MENU_COLUMNS);
117 DisplayContextMenu (hm, ptScreen, hList);
121 case WM_COLUMNS_CHANGED:
123 lpSel = FL_GetSelectedData (GetDlgItem (hDlg, IDC_AGG_LIST));
124 FL_RestoreView (GetDlgItem (hDlg, IDC_AGG_LIST), &gr.viewAggMove);
125 Filesets_MoveTo_OnSelectServer (hDlg, (LPIDENT*)&lpSel);
133 EndDialog (hDlg, LOWORD(wp));
137 EndDialog (hDlg, LOWORD(wp));
140 case IDC_MOVESET_SERVER:
141 if (HIWORD(wp) == CBN_SELCHANGE)
142 Filesets_MoveTo_OnSelectServer (hDlg, &psmp->lpiTarget);
148 FL_StoreView (GetDlgItem (hDlg, IDC_AGG_LIST), &gr.viewAggMove);
153 switch (((LPNMHDR)lp)->code)
157 if ((lpi = (LPIDENT)FL_GetSelectedData (GetDlgItem (hDlg, IDC_AGG_LIST))) != NULL)
159 psmp->lpiTarget = lpi;
160 Filesets_MoveTo_EnableOK (hDlg, psmp);
172 static LONG procFilesetsMoveToList = 0;
174 LRESULT CALLBACK Filesets_MoveTo_SubclassListProc (HWND hList, UINT msg, WPARAM wp, LPARAM lp)
178 if (procFilesetsMoveToList == 0)
179 rc = DefWindowProc (hList, msg, wp, lp);
181 rc = CallWindowProc ((WNDPROC)procFilesetsMoveToList, hList, msg, wp, lp);
186 if (procFilesetsMoveToList != 0)
187 SetWindowLong (hList, GWL_WNDPROC, procFilesetsMoveToList);
194 ShowColumnsDialog (GetParent (hList), &gr.viewAggMove);
204 void Filesets_MoveTo_OnInitDialog (HWND hDlg, LPSET_MOVE_PARAMS psmp)
206 HWND hList = GetDlgItem (hDlg, IDC_AGG_LIST);
207 if (procFilesetsMoveToList == 0)
208 procFilesetsMoveToList = GetWindowLong (hList, GWL_WNDPROC);
209 SetWindowLong (hList, GWL_WNDPROC, (LONG)Filesets_MoveTo_SubclassListProc);
211 if (gr.viewAggMove.lvsView == 0) // never initialized this?
213 if (gr.viewAggCreate.lvsView == 0)
214 memcpy (&gr.viewAggMove, &gr.viewAgg, sizeof(VIEWINFO));
216 memcpy (&gr.viewAggMove, &gr.viewAggCreate, sizeof(VIEWINFO));
218 FL_RestoreView (GetDlgItem (hDlg, IDC_AGG_LIST), &gr.viewAggMove);
220 EnableWindow (GetDlgItem (hDlg, IDOK), FALSE);
221 EnableWindow (GetDlgItem (hDlg, IDC_MOVESET_SERVER), FALSE);
222 EnableWindow (GetDlgItem (hDlg, IDC_AGG_LIST), FALSE);
226 void Filesets_MoveTo_OnEndTask_InitDialog (HWND hDlg, LPTASKPACKET ptp, LPSET_MOVE_PARAMS psmp)
228 TCHAR szServer[ cchNAME ];
229 TCHAR szAggregate[ cchNAME ];
230 TCHAR szFileset[ cchNAME ];
231 psmp->lpiSource->GetServerName (szServer);
232 psmp->lpiSource->GetAggregateName (szAggregate);
233 psmp->lpiSource->GetFilesetName (szFileset);
237 ErrorDialog (ptp->status, IDS_ERROR_REFRESH_FILESET_STATUS, TEXT("%s%s%s"), szServer, szAggregate, szFileset);
238 EndDialog (hDlg, IDCANCEL);
242 int ids = (TASKDATA(ptp)->fs.Type == ftREADWRITE) ? IDS_MOVESET_READWRITE : IDS_MOVESET_READONLY;
243 LPTSTR pszDesc = FormatString (ids, TEXT("%s%s%s"), szServer, szAggregate, szFileset);
244 SetDlgItemText (hDlg, IDC_MOVESET_DESC, pszDesc);
245 FreeString (pszDesc);
247 // Fill in the Servers combobox, and select the default server
248 // (if one was specified).
250 LPSVR_ENUM_TO_COMBOBOX_PACKET lpp = New (SVR_ENUM_TO_COMBOBOX_PACKET);
251 lpp->hCombo = GetDlgItem (hDlg, IDC_MOVESET_SERVER);
252 lpp->lpiSelect = (psmp->lpiTarget) ? psmp->lpiTarget->GetServer() : NULL;
253 StartTask (taskSVR_ENUM_TO_COMBOBOX, hDlg, lpp);
258 void Filesets_MoveTo_OnSelectServer (HWND hDlg, LPIDENT *plpiTarget)
260 LPIDENT lpiServerNew = (LPIDENT)CB_GetSelectedData (GetDlgItem (hDlg, IDC_MOVESET_SERVER));
262 SetWindowLong (hDlg, DWL_USER, (LONG)lpiServerNew);
264 if (*plpiTarget && (*plpiTarget)->fIsServer())
266 if (*plpiTarget && ((*plpiTarget)->GetServer() != lpiServerNew))
269 Filesets_MoveTo_StartDisplay_Aggregates (hDlg, *plpiTarget);
273 void Filesets_MoveTo_OnEndTask_EnumAggregates (HWND hDlg, LPSET_MOVE_PARAMS psmp)
275 EnableWindow (GetDlgItem (hDlg, IDC_AGG_LIST), TRUE);
276 Filesets_MoveTo_EnableOK (hDlg, psmp);
280 void Filesets_MoveTo_EnableOK (HWND hDlg, LPSET_MOVE_PARAMS psmp)
282 EnableWindow (GetDlgItem (hDlg, IDOK), (psmp->lpiTarget) ? TRUE : FALSE);
286 void Filesets_MoveTo_StartDisplay_Aggregates (HWND hDlg, LPIDENT lpiTarget)
288 EnableWindow (GetDlgItem (hDlg, IDOK), FALSE);
290 LPAGG_ENUM_TO_LISTVIEW_PACKET lpp = New (AGG_ENUM_TO_LISTVIEW_PACKET);
291 lpp->lpiServer = NULL;
292 lpp->hList = GetDlgItem (hDlg, IDC_AGG_LIST);
293 lpp->lpiSelect = lpiTarget;
294 lpp->lpvi = &gr.viewAggMove;
295 StartTask (taskAGG_ENUM_TO_LISTVIEW, hDlg, lpp);