7 #include "svr_window.h"
8 #include "svr_general.h"
11 #include "agg_general.h"
13 #include "set_general.h"
15 #include "set_repprop.h"
16 #include "set_createrep.h"
23 * RESIZING WINDOWS ___________________________________________________________
27 rwWindowData awdFilesets[] = {
28 { IDC_SET_DESC, raSizeX },
29 { IDC_SET_LIST, raSizeX | raSizeY },
30 { IDC_SET_CREATE, raMoveX | raMoveY },
31 { IDC_SET_DELETE, raMoveX | raMoveY },
32 { IDC_SET_REP, raMoveX | raMoveY },
33 { IDC_SET_SETQUOTA, raMoveX | raMoveY },
39 * VARIABLES __________________________________________________________________
47 HIMAGELIST hDragImage;
51 HLISTITEM hItemTarget;
56 * PROTOTYPES _________________________________________________________________
60 void Filesets_OnView (HWND hDlg);
61 void Filesets_OnSelect (HWND hDlg);
62 void Filesets_OnEndTask_Select (HWND hDlg, LPTASKPACKET ptp);
63 void Filesets_OnEndTask_BeginDrag (HWND hDlg, LPTASKPACKET ptp);
64 void Filesets_OnEndTask_DragMenu (HWND hDlg, LPTASKPACKET ptp);
65 void Filesets_OnEndTask_Menu (HWND hDlg, LPTASKPACKET ptp);
67 void Filesets_OnNotifyFromDispatch (LPNOTIFYSTRUCT lpns);
69 LPIDENT IdentifyPoint (HWND hTarget, POINT ptClient, HLISTITEM *phItemTarget);
71 void Filesets_SubclassList (HWND hDlg);
72 void Filesets_Subclass_OnCommand (HWND hList, UINT msg, WPARAM wp, LPARAM lp);
74 BOOL Filesets_BeginDrag (HWND hDlg, BOOL fRightBtn);
75 void Filesets_ContinueDrag (HWND hDlg);
76 void Filesets_FinishDrag (HWND hDlg, BOOL fDropped, BOOL fMenu);
77 void Filesets_CancelDrag (HWND hDlg);
79 void Filesets_ShowPopupMenu (HWND hList, POINT ptList, POINT ptScreen);
83 * ROUTINES ___________________________________________________________________
87 BOOL CALLBACK Filesets_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
89 if (HandleColumnNotify (hDlg, msg, wp, lp, &gr.viewSet))
97 GetClientRect (GetParent(hDlg), &rTab);
98 TabCtrl_AdjustRect (GetParent (hDlg), FALSE, &rTab);
99 ResizeWindow (hDlg, awdFilesets, rwaMoveToHere, &rTab);
101 FL_RestoreView (GetDlgItem (hDlg, IDC_SET_LIST), &gr.viewSet);
102 FastList_SetTextCallback (GetDlgItem (hDlg, IDC_SET_LIST), GetItemText, (DWORD)&gr.viewSet);
104 Filesets_SubclassList (hDlg);
106 Filesets_OnView (hDlg);
107 Filesets_OnSelect (hDlg);
112 WinHelp (hDlg, cszHELPFILENAME, HELP_FINDER, 0);
116 FL_StoreView (GetDlgItem (hDlg, IDC_SET_LIST), &gr.viewSet);
117 DontNotifyMeEver (hDlg);
121 // if (lp==0), we're minimizing--don't call ResizeWindow().
124 ResizeWindow (hDlg, awdFilesets, rwaFixupGuts);
131 ptScreen.x = LOWORD(lp);
132 ptScreen.y = HIWORD(lp);
135 ScreenToClient ((HWND)wp, &ptClient);
137 if ((HWND)wp == GetDlgItem (hDlg, IDC_SET_LIST))
138 Filesets_ShowPopupMenu ((HWND)wp, ptClient, ptScreen);
142 case WM_SERVER_CHANGED:
144 LPIDENT lpiServer = Server_GetServerForChild (hDlg);
145 DontNotifyMeEver (hDlg);
146 NotifyMe (WHEN_OBJECT_CHANGES, NULL, hDlg, 0);
148 // Fix the text at the top of the Aggregates tab:
150 TCHAR szName[ cchRESOURCE ];
153 if (lpiServer != NULL)
155 LPSERVER_PREF lpsp = (LPSERVER_PREF)lpiServer->GetUserParam();
156 lpiServer->GetServerName (szName);
157 if (lpsp && !lpsp->fIsMonitored)
158 pszText = FormatString (IDS_FILESET_UNMON, TEXT("%s"), szName);
160 pszText = FormatString (IDS_FILESETS_IN_SERVER, TEXT("%s"), szName);
162 else if (g.lpiCell != NULL)
164 g.lpiCell->GetCellName (szName);
166 pszText = FormatString (IDS_FILESET_SOME, TEXT("%s"), szName);
168 pszText = FormatString (IDS_FILESETS_IN_CELL, TEXT("%s"), szName);
172 pszText = FormatString (IDS_FILESETS_IN_NOTHING);
175 SetDlgItemText (hDlg, IDC_SET_DESC, pszText);
176 FreeString (pszText);
178 UpdateDisplay_Filesets (FALSE, GetDlgItem (hDlg, IDC_SET_LIST), NULL, 0, NULL, NULL, NULL);
182 case WM_NOTIFY_FROM_DISPATCH:
183 Filesets_OnNotifyFromDispatch ((LPNOTIFYSTRUCT)lp);
184 Delete ((LPNOTIFYSTRUCT)lp);
191 SendMessage (GetDlgItem (hDlg, IDC_SET_LIST), WM_COMMAND, M_SET_CREATE, 0);
195 SendMessage (GetDlgItem (hDlg, IDC_SET_LIST), WM_COMMAND, M_SET_DELETE, 0);
199 SendMessage (GetDlgItem (hDlg, IDC_SET_LIST), WM_COMMAND, M_SET_REPLICATION, 0);
202 case IDC_SET_SETQUOTA:
203 SendMessage (GetDlgItem (hDlg, IDC_SET_LIST), WM_COMMAND, M_SET_SETQUOTA, 0);
209 Filesets_ContinueDrag (hDlg);
213 if (l.fDragging && l.fRightBtn)
214 Filesets_FinishDrag (hDlg, FALSE, FALSE);
218 if (l.fDragging && !l.fRightBtn)
219 Filesets_FinishDrag (hDlg, FALSE, FALSE);
223 if (l.fDragging && !l.fRightBtn)
224 Filesets_FinishDrag (hDlg, TRUE, FALSE);
228 if (l.fDragging && l.fRightBtn)
229 Filesets_FinishDrag (hDlg, TRUE, TRUE);
234 if ((ptp = (LPTASKPACKET)lp) != NULL)
236 if (ptp->idTask == taskSET_SELECT)
237 Filesets_OnEndTask_Select (hDlg, ptp);
238 else if (ptp->idTask == taskSET_BEGINDRAG)
239 Filesets_OnEndTask_BeginDrag (hDlg, ptp);
240 else if (ptp->idTask == taskSET_DRAGMENU)
241 Filesets_OnEndTask_DragMenu (hDlg, ptp);
242 else if (ptp->idTask == taskSET_MENU)
243 Filesets_OnEndTask_Menu (hDlg, ptp);
244 FreeTaskPacket (ptp);
249 switch (((LPNMHDR)lp)->code)
252 if (((LPNMHDR)lp)->hwndFrom == GetDlgItem (hDlg, IDC_SET_LIST))
254 Filesets_OnSelect (hDlg);
259 if (((LPNMHDR)lp)->hwndFrom == GetDlgItem (hDlg, IDC_SET_LIST))
261 HLISTITEM hItem = ((LPFLN_ITEMEXPAND_PARAMS)lp)->hItem;
262 LPIDENT lpi = (LPIDENT)FastList_GetItemParam (GetDlgItem (hDlg, IDC_SET_LIST), hItem);
263 BOOL fExpanded = ((LPFLN_ITEMEXPAND_PARAMS)lp)->fExpanded;
265 if (lpi && lpi->fIsServer())
268 if ((lpsp = (LPSERVER_PREF)lpi->GetUserParam()) != NULL)
270 lpsp->fExpandTree = fExpanded;
271 Server_SavePreferences (lpi);
274 else if (lpi && lpi->fIsAggregate())
276 LPAGGREGATE_PREF lpap;
277 if ((lpap = (LPAGGREGATE_PREF)lpi->GetUserParam()) != NULL)
279 lpap->fExpandTree = fExpanded;
280 Aggregates_SavePreferences (lpi);
287 return Filesets_BeginDrag (hDlg, ((LPFLN_DRAG_PARAMS)lp)->fRightButton);
290 if (((LPNMHDR)lp)->hwndFrom == GetDlgItem (hDlg, IDC_SET_LIST))
292 BOOL fShowProperties = TRUE;
295 if ((hItem = FastList_GetFocus (GetDlgItem (hDlg, IDC_SET_LIST))) != NULL)
297 if (FastList_FindFirstChild (GetDlgItem (hDlg, IDC_SET_LIST), hItem))
298 fShowProperties = FALSE;
301 LPIDENT lpi = Filesets_GetFocused (hDlg);
302 if (lpi && !lpi->fIsCell() && fShowProperties)
304 PostMessage (GetDlgItem (hDlg, IDC_SET_LIST), WM_COMMAND, M_PROPERTIES, 0);
317 void Filesets_OnSelect (HWND hDlg)
319 LPIDENT lpi = Filesets_GetSelected (hDlg);
321 if (!lpi || !lpi->fIsFileset())
323 EnableWindow (GetDlgItem (hDlg, IDC_SET_REP), FALSE);
324 EnableWindow (GetDlgItem (hDlg, IDC_SET_DELETE), FALSE);
325 EnableWindow (GetDlgItem (hDlg, IDC_SET_SETQUOTA), FALSE);
329 StartTask (taskSET_SELECT, hDlg, lpi);
334 void Filesets_OnEndTask_Select (HWND hDlg, LPTASKPACKET ptp)
336 LPIDENT lpi = (LPIDENT)(ptp->lpUser);
339 EnableWindow (GetDlgItem (hDlg, IDC_SET_DELETE), FALSE);
341 EnableWindow (GetDlgItem (hDlg, IDC_SET_DELETE), TRUE);
343 if ((!ptp->rc) || (TASKDATA(ptp)->fs.Type == ftCLONE))
344 EnableWindow (GetDlgItem (hDlg, IDC_SET_REP), FALSE);
346 EnableWindow (GetDlgItem (hDlg, IDC_SET_REP), TRUE);
348 if ((!ptp->rc) || (TASKDATA(ptp)->fs.Type != ftREADWRITE))
349 EnableWindow (GetDlgItem (hDlg, IDC_SET_SETQUOTA), FALSE);
351 EnableWindow (GetDlgItem (hDlg, IDC_SET_SETQUOTA), TRUE);
355 void Filesets_OnNotifyFromDispatch (LPNOTIFYSTRUCT lpns)
359 case evtRefreshFilesetsEnd:
360 case evtRefreshStatusEnd:
361 case evtAlertsChanged:
363 if ( (!lpns->Params.lpi1) ||
364 (lpns->Params.lpi1->fIsServer()) ||
365 (lpns->Params.lpi1->fIsAggregate()) ||
366 (lpns->Params.lpi1->fIsFileset()) )
368 UpdateDisplay_Filesets (FALSE, GetDlgItem (lpns->hwndTarget, IDC_SET_LIST), lpns->Params.lpi1, lpns->Params.status, NULL, NULL, NULL);
375 static LONG procFilesetsList = 0;
377 LRESULT CALLBACK Filesets_SubclassListProc (HWND hList, UINT msg, WPARAM wp, LPARAM lp)
381 if (procFilesetsList == 0)
382 rc = DefWindowProc (hList, msg, wp, lp);
384 rc = CallWindowProc ((WNDPROC)procFilesetsList, hList, msg, wp, lp);
389 if (procFilesetsList != 0)
390 SetWindowLong (hList, GWL_WNDPROC, procFilesetsList);
394 Filesets_Subclass_OnCommand (hList, msg, wp, lp);
402 void Filesets_Subclass_OnCommand (HWND hList, UINT msg, WPARAM wp, LPARAM lp)
404 HWND hChild = GetParent (hList);
405 LPIDENT lpi = Filesets_GetSelected (hChild);
410 ShowColumnsDialog (hChild, &gr.viewSet);
413 case M_SET_VIEW_TREELIST:
414 gr.viewSet.lvsView = FLS_VIEW_TREELIST;
415 Filesets_OnView (hChild);
418 case M_SET_VIEW_TREE:
419 gr.viewSet.lvsView = FLS_VIEW_TREE;
420 Filesets_OnView (hChild);
423 case M_SET_VIEW_REPORT:
424 gr.viewSet.lvsView = FLS_VIEW_LIST;
425 Filesets_OnView (hChild);
429 if (l.lpiDrag && l.lpiDrag->fIsFileset() && l.lpiTarget)
430 Filesets_ShowMoveTo (l.lpiDrag, l.lpiTarget);
434 if (l.lpiDrag && l.lpiDrag->fIsFileset() && l.lpiTarget)
436 Filesets_CreateReplica (l.lpiDrag, l.lpiTarget);
441 StartContextCommand (Server_GetWindowForChild (GetParent(hList)),
442 Server_GetServerForChild (GetParent(hList)),
450 void Filesets_SubclassList (HWND hDlg)
452 HWND hList = GetDlgItem (hDlg, IDC_SET_LIST);
453 procFilesetsList = GetWindowLong (hList, GWL_WNDPROC);
454 SetWindowLong (hList, GWL_WNDPROC, (LONG)Filesets_SubclassListProc);
458 void Filesets_OnView (HWND hDlg)
460 HWND hList = GetDlgItem (hDlg, IDC_SET_LIST);
462 DWORD dwStyle = GetWindowLong (hList, GWL_STYLE);
463 dwStyle &= (~FLS_VIEW_MASK);
464 dwStyle |= gr.viewSet.lvsView;
466 SetWindowLong (hList, GWL_STYLE, dwStyle);
470 BOOL Filesets_BeginDrag (HWND hDlg, BOOL fRightBtn)
472 LPIDENT lpi = Filesets_GetFocused (hDlg);
474 if (!lpi || !lpi->fIsFileset()) // can only drag filesets!
477 l.fRightBtn = fRightBtn;
478 StartTask (taskSET_BEGINDRAG, hDlg, lpi);
483 void Filesets_OnEndTask_BeginDrag (HWND hDlg, LPTASKPACKET ptp)
485 LPIDENT lpi = (LPIDENT)(ptp->lpUser);
487 if (ptp->rc && TASKDATA(ptp)->fs.Type != ftCLONE)
489 HWND hList = GetDlgItem (hDlg, IDC_SET_LIST);
490 HLISTITEM hItem = FL_GetSelected (hList);
492 // When creating a drag image, we'll temporarily reset the object's
493 // images so we can be sure it'll draw just the Fileset icon.
495 FastList_Begin (hList);
496 int iImage1 = FastList_GetItemFirstImage (hList, hItem);
497 int iImage2 = FastList_GetItemSecondImage (hList, hItem);
498 FastList_SetItemFirstImage (hList, hItem, imageFILESET);
499 FastList_SetItemSecondImage (hList, hItem, IMAGE_NOIMAGE);
504 l.hDragImage = FastList_CreateDragImage (hList, hItem);
506 FastList_SetItemFirstImage (hList, hItem, iImage1);
507 FastList_SetItemSecondImage (hList, hItem, iImage2);
508 FastList_End (hList);
510 // Now we've got a drag image; start dragging.
515 DWORD dw = GetMessagePos();
516 POINT pt = { LOWORD(dw), HIWORD(dw) };
517 ScreenToClient (NULL, &pt);
519 ImageList_BeginDrag (l.hDragImage, 0, 8, 8);
520 ImageList_DragEnter (NULL, pt.x, pt.y);
525 void Filesets_ContinueDrag (HWND hDlg)
530 HLISTITEM hItemTarget;
532 DWORD dw = GetMessagePos();
533 POINT pt = { LOWORD(dw), HIWORD(dw) };
534 HWND hTarget = WindowFromPoint (pt);
539 ScreenToClient (hTarget, &ptClient);
541 if ((lpi = IdentifyPoint (hTarget, ptClient, &hItemTarget)) != NULL)
543 if (!lpi->fIsServer() && !lpi->fIsAggregate())
548 if (lpi != l.lpiTarget)
550 ImageList_DragLeave (NULL);
554 DWORD dwFlags = FastList_GetItemFlags (l.hwndTarget, l.hItemTarget);
555 FastList_SetItemFlags (l.hwndTarget, l.hItemTarget, dwFlags & (~FLIF_DROPHIGHLIGHT));
556 l.hItemTarget = NULL;
560 if ((l.lpiTarget = lpi) != NULL)
562 l.hwndTarget = hTarget;
563 l.hItemTarget = hItemTarget;
564 DWORD dwFlags = FastList_GetItemFlags (l.hwndTarget, l.hItemTarget);
565 FastList_SetItemFlags (l.hwndTarget, l.hItemTarget, dwFlags | FLIF_DROPHIGHLIGHT);
568 ScreenToClient (NULL, &pt);
569 ImageList_DragEnter (NULL, pt.x, pt.y);
572 ImageList_DragMove (LOWORD(dw), HIWORD(dw));
577 void Filesets_FinishDrag (HWND hDlg, BOOL fDropped, BOOL fMenu)
581 Filesets_ContinueDrag (hDlg);
585 ImageList_EndDrag ();
586 ImageList_DragLeave (NULL);
589 if (l.lpiTarget != NULL)
593 Filesets_CancelDrag (hDlg);
595 else if (fDropped && !fMenu)
597 SendMessage (GetDlgItem (hDlg, IDC_SET_LIST), WM_COMMAND, M_SET_MOVEHERE, 0);
598 Filesets_CancelDrag (hDlg);
600 else // (fDropped && fMenu)
602 DWORD dw = GetMessagePos();
603 POINT pt = { LOWORD(dw), HIWORD(dw) };
605 LPMENUTASK lpp = New (MENUTASK);
606 lpp->hParent = GetDlgItem (hDlg, IDC_SET_LIST);
608 lpp->lpi = l.lpiDrag;
610 StartTask (taskSET_DRAGMENU, hDlg, lpp);
617 void Filesets_OnEndTask_DragMenu (HWND hDlg, LPTASKPACKET ptp)
619 HMENU hm = TaLocale_LoadMenu (MENU_SET_DRAGDROP);
622 EnableMenu (hm, M_SET_MOVEHERE, FALSE);
624 if (!ptp->rc || (TASKDATA(ptp)->fs.Type != ftREADWRITE))
625 EnableMenu (hm, M_SET_REPHERE, FALSE);
627 DisplayContextMenu (hm, TASKDATA(ptp)->mt.ptScreen, TASKDATA(ptp)->mt.hParent);
628 Filesets_CancelDrag (hDlg);
632 void Filesets_CancelDrag (HWND hDlg)
634 if (l.hItemTarget != NULL)
636 DWORD dwFlags = FastList_GetItemFlags (l.hwndTarget, l.hItemTarget);
637 FastList_SetItemFlags (l.hwndTarget, l.hItemTarget, dwFlags & (~FLIF_DROPHIGHLIGHT));
638 l.hItemTarget = NULL;
643 LPIDENT IdentifyPoint (HWND hTarget, POINT ptClient, HLISTITEM *phItemTarget)
645 if ((*phItemTarget = FastList_ItemFromPoint (hTarget, &ptClient, TRUE)) == NULL)
648 return (LPIDENT)FL_GetData (hTarget, *phItemTarget);
652 void Filesets_ShowPopupMenu (HWND hList, POINT ptList, POINT ptScreen)
654 if (!ptScreen.x && !ptScreen.y)
657 GetWindowRect (hList, &rWindow);
658 ptScreen.x = rWindow.left + (rWindow.right -rWindow.left)/2;
659 ptScreen.y = rWindow.top + (rWindow.bottom -rWindow.top)/2;
660 Filesets_ShowParticularPopupMenu (hList, ptScreen, NULL);
662 else if (FL_HitTestForHeaderBar (hList, ptList))
664 HMENU hm = TaLocale_LoadMenu (MENU_COLUMNS);
665 DisplayContextMenu (hm, ptScreen, hList);
669 LPIDENT lpi = Filesets_GetFocused (GetParent (hList), &ptList);
670 if (lpi && (lpi != Filesets_GetSelected (GetParent (hList))))
672 lpi = NULL; // right-click on item other than highlighted one?
675 if (lpi && lpi->fIsFileset())
677 Filesets_ShowParticularPopupMenu (hList, ptScreen, lpi);
679 else if (lpi && lpi->fIsAggregate())
681 Aggregates_ShowParticularPopupMenu (hList, ptScreen, lpi);
683 else if (lpi && lpi->fIsServer())
685 Server_ShowParticularPopupMenu (hList, ptScreen, lpi);
687 else if (!lpi) // display the _NONE menu? (no menu if it's a cell ident)
689 Filesets_ShowParticularPopupMenu (hList, ptScreen, lpi);
695 void Filesets_ShowParticularPopupMenu (HWND hParent, POINT ptScreen, LPIDENT lpiFileset)
698 if ((pmt = New (MENUTASK)) != NULL)
700 pmt->hParent = hParent;
701 pmt->ptScreen = ptScreen;
702 pmt->lpi = lpiFileset;
703 StartTask (taskSET_MENU, GetParent(hParent), pmt);
708 void Filesets_OnEndTask_Menu (HWND hDlg, LPTASKPACKET ptp)
710 LPIDENT lpiFileset = (LPIDENT)(TASKDATA(ptp)->mt.lpi);
713 if (lpiFileset != NULL)
714 hm = TaLocale_LoadMenu (MENU_SET);
716 hm = TaLocale_LoadMenu (MENU_SET_NONE);
720 if (lpiFileset == NULL)
722 HMENU hmView = GetSubMenu (hm, 0);
723 DWORD dwStyle = GetWindowLong (TASKDATA(ptp)->mt.hParent, GWL_STYLE);
725 CheckMenuRadioItem (hmView,
726 M_SET_VIEW_REPORT, M_SET_VIEW_TREE,
727 ((dwStyle & FLS_VIEW_MASK) == FLS_VIEW_TREELIST) ? M_SET_VIEW_TREELIST :
728 ((dwStyle & FLS_VIEW_MASK) == FLS_VIEW_TREE) ? M_SET_VIEW_TREE : M_SET_VIEW_REPORT,
731 CheckMenuRadioItem (hmView,
732 M_VIEW_ONEICON, M_VIEW_STATUS,
733 (gr.ivSet == ivTWOICONS) ? M_VIEW_TWOICONS :
734 (gr.ivSet == ivONEICON) ? M_VIEW_ONEICON : M_VIEW_STATUS,
741 EnableMenu (hm, M_SET_REPLICATION, FALSE);
742 EnableMenu (hm, M_SET_SETQUOTA, FALSE);
743 EnableMenu (hm, M_SET_RELEASE, FALSE);
744 EnableMenu (hm, M_SET_CLONE, FALSE);
745 EnableMenu (hm, M_SET_MOVETO, FALSE);
746 EnableMenu (hm, M_SET_DUMP, FALSE);
747 EnableMenu (hm, M_SET_RESTORE, FALSE);
751 if (TASKDATA(ptp)->fs.Type == ftCLONE)
753 EnableMenu (hm, M_SET_REPLICATION, FALSE);
754 EnableMenu (hm, M_SET_RELEASE, FALSE);
755 EnableMenu (hm, M_SET_CLONE, FALSE);
756 EnableMenu (hm, M_SET_MOVETO, FALSE);
759 if (TASKDATA(ptp)->fs.Type != ftREADWRITE)
761 EnableMenu (hm, M_SET_CLONE, FALSE);
762 EnableMenu (hm, M_SET_RELEASE, FALSE);
763 EnableMenu (hm, M_SET_SETQUOTA, FALSE);
764 EnableMenu (hm, M_SET_RESTORE, FALSE);
769 DisplayContextMenu (hm, TASKDATA(ptp)->mt.ptScreen, TASKDATA(ptp)->mt.hParent);