void Server_Salvage_OnServer (HWND hDlg, LPIDENT lpi) { LPIDENT lpiServer; if ((lpiServer = (LPIDENT)CB_GetSelectedData (GetDlgItem (hDlg, IDC_SERVER))) != NULL) { LPAGG_ENUM_TO_COMBOBOX_PACKET lpp = New (AGG_ENUM_TO_COMBOBOX_PACKET); memset (lpp, 0x00, sizeof(AGG_ENUM_TO_COMBOBOX_PACKET)); lpp->hCombo = GetDlgItem (hDlg, IDC_AGGREGATE); lpp->lpiServer = lpiServer; lpp->lpiSelect = (lpi && (!lpi->fIsCell()) && (!lpi->fIsServer()) && (lpiServer == lpi->GetServer())) ? (lpi->GetAggregate()) : NULL; StartTask (taskAGG_ENUM_TO_COMBOBOX, hDlg, lpp); } }
void Server_Salvage_OnEndTask_EnumServers (HWND hDlg, LPIDENT lpi, LPTASKPACKET ptp) { // We'll only fill the Servers list once, and that during initialization. // When the filling completes, find out what server is currently selected // (it should already be the one the user chose earlier), and fill the // aggregates list for it. We won't enable anything yet. // LPIDENT lpiServer; if ((lpiServer = (LPIDENT)CB_GetSelectedData (GetDlgItem (hDlg, IDC_SERVER))) != NULL) { LPAGG_ENUM_TO_COMBOBOX_PACKET lpp = New (AGG_ENUM_TO_COMBOBOX_PACKET); memset (lpp, 0x00, sizeof(AGG_ENUM_TO_COMBOBOX_PACKET)); lpp->hCombo = GetDlgItem (hDlg, IDC_AGGREGATE); lpp->lpiServer = lpiServer; lpp->lpiSelect = (lpi && (!lpi->fIsCell()) && (!lpi->fIsServer()) && (lpiServer == lpi->GetServer())) ? (lpi->GetAggregate()) : NULL; StartTask (taskAGG_ENUM_TO_COMBOBOX, hDlg, lpp); } }
void DispatchNotification_MainThread (NOTIFYEVENT evt, PNOTIFYPARAMS pParams) { LPIDENT lpiEvt = pParams->lpi1; // There are several notifications which are sent when beginning or ending // lengthy operations. These "actions" each get a window indicating // progress, and get added to our ongoing list of actions-in-progress. // ActionNotification_MainThread (evt, pParams); // The real reason for this routine is as a dispatcher for the AFSClass's // notifications: various windows throughout the app register themselves // with this dispatcher, and thereby get a message whenever a particular // event of interest to that window happens. Just what notifications // are "of interest" is specified by the window when it registers with // this dispatcher. // for (size_t iDispatch = 0; iDispatch < nDispatchList; ++iDispatch) { if (!aDispatchList[ iDispatch ].hWnd) continue; BOOL fDispatch = FALSE; // WHEN_CELL_OPENED + NULL -> notify if any new cell is opened // WHEN_OBJECT_CHANGES + NULL -> notify if anything at all changes // WHEN_OBJECT_CHANGES + lpi -> notify if this object changes // WHEN_SVCS(etc)_CHANGE + NULL -> notify if any service at all changes // WHEN_SVCS(etc)_CHANGE + lpi -> notify if any svc on this svr changes switch (aDispatchList[ iDispatch ].when) { case WHEN_CELL_OPENED: if (evt == evtCreate && lpiEvt->fIsCell()) fDispatch = TRUE; break; case WHEN_OBJECT_CHANGES: if ( (aDispatchList[ iDispatch ].lpiObject == lpiEvt) || (aDispatchList[ iDispatch ].lpiObject == NULL) ) { if (evt != evtCreate) fDispatch = TRUE; } break; case WHEN_SVRS_CHANGE: switch (evt) { case evtInvalidate: case evtRefreshServersBegin: case evtRefreshServersEnd: if ( (lpiEvt && lpiEvt->fIsCell()) || (aDispatchList[ iDispatch ].lpiObject == lpiEvt) || (aDispatchList[ iDispatch ].lpiObject == NULL) ) { if (lpiEvt && lpiEvt->fIsCell()) fDispatch = TRUE; } break; case evtCreate: case evtDestroy: case evtRefreshStatusBegin: case evtRefreshStatusEnd: case evtAlertsChanged: if (lpiEvt && lpiEvt->fIsServer()) { if (aDispatchList[ iDispatch ].lpiObject == NULL) fDispatch = TRUE; else { LPIDENT lpiEvtCell = lpiEvt->GetCell(); if (aDispatchList[ iDispatch ].lpiObject == lpiEvtCell) fDispatch = TRUE; } } break; } break; case WHEN_SETS_CHANGE: switch (evt) { case evtInvalidate: case evtRefreshFilesetsBegin: case evtRefreshFilesetsEnd: { LPIDENT lpiEvtSvr = NULL; if (lpiEvt && !lpiEvt->fIsCell()) lpiEvtSvr = lpiEvt->GetServer(); if ( (lpiEvt && lpiEvt->fIsCell()) || (aDispatchList[ iDispatch ].lpiObject == lpiEvt) || (aDispatchList[ iDispatch ].lpiObject == lpiEvtSvr) || (aDispatchList[ iDispatch ].lpiObject == NULL) ) { if (lpiEvt && (lpiEvt->fIsCell() || lpiEvt->fIsServer() || lpiEvt->fIsAggregate())) fDispatch = TRUE; } } break; case evtCreate: case evtDestroy: case evtRefreshStatusBegin: case evtRefreshStatusEnd: case evtAlertsChanged: if (lpiEvt && lpiEvt->fIsFileset()) { if (aDispatchList[ iDispatch ].lpiObject == NULL) fDispatch = TRUE; else { LPIDENT lpiEvtAgg = lpiEvt->GetAggregate(); LPIDENT lpiEvtSvr = lpiEvt->GetServer(); if (aDispatchList[ iDispatch ].lpiObject == lpiEvtAgg) fDispatch = TRUE; if (aDispatchList[ iDispatch ].lpiObject == lpiEvtSvr) fDispatch = TRUE; } } break; } break; case WHEN_AGGS_CHANGE: switch (evt) { case evtRefreshAggregatesBegin: case evtRefreshAggregatesEnd: if ( (lpiEvt && lpiEvt->fIsCell()) || (aDispatchList[ iDispatch ].lpiObject == lpiEvt) || (aDispatchList[ iDispatch ].lpiObject == NULL) ) { if (lpiEvt && (lpiEvt->fIsCell() || lpiEvt->fIsServer())) fDispatch = TRUE; } break; case evtCreate: case evtDestroy: case evtRefreshStatusBegin: case evtRefreshStatusEnd: case evtAlertsChanged: if (lpiEvt && lpiEvt->fIsAggregate()) { if (aDispatchList[ iDispatch ].lpiObject == NULL) fDispatch = TRUE; else { LPIDENT lpiEvtSvr = lpiEvt->GetServer(); if (aDispatchList[ iDispatch ].lpiObject == lpiEvtSvr) fDispatch = TRUE; } } break; } break; case WHEN_SVCS_CHANGE: switch (evt) { case evtRefreshServicesBegin: case evtRefreshServicesEnd: if ( (lpiEvt && lpiEvt->fIsCell()) || (aDispatchList[ iDispatch ].lpiObject == lpiEvt) || (aDispatchList[ iDispatch ].lpiObject == NULL) ) { if (lpiEvt && (lpiEvt->fIsCell() || lpiEvt->fIsServer())) fDispatch = TRUE; } break; case evtCreate: case evtDestroy: case evtRefreshStatusBegin: case evtRefreshStatusEnd: case evtAlertsChanged: if (lpiEvt && lpiEvt->fIsService()) { if (aDispatchList[ iDispatch ].lpiObject == NULL) fDispatch = TRUE; else { LPIDENT lpiEvtSvr = lpiEvt->GetServer(); if (aDispatchList[ iDispatch ].lpiObject == lpiEvtSvr) fDispatch = TRUE; } } break; } break; } if (fDispatch) { LPNOTIFYSTRUCT lpns = New (NOTIFYSTRUCT); lpns->hwndTarget = aDispatchList[ iDispatch ].hWnd; lpns->evt = evt; memcpy (&lpns->Params, pParams, sizeof(NOTIFYPARAMS)); lpns->Params.lpUser = aDispatchList[ iDispatch ].lpUser; PostMessage (aDispatchList[ iDispatch ].hWnd, WM_NOTIFY_FROM_DISPATCH, (WPARAM)0, (LPARAM)lpns); } } }
void DispatchNotification_AltThread (NOTIFYEVENT evt, PNOTIFYPARAMS pParams) { LPIDENT lpiEvt = pParams->lpi1; switch (evt) { case evtRefreshStatusEnd: if (lpiEvt && (lpiEvt->fIsService() || lpiEvt->fIsAggregate() || lpiEvt->fIsFileset())) { Alert_RemoveSecondary (lpiEvt); Alert_Scout_QueueCheckServer (lpiEvt); } if (lpiEvt && lpiEvt->fIsServer()) { LPSERVER_PREF lpsp; if ((lpsp = (LPSERVER_PREF)lpiEvt->GetUserParam()) != NULL) { LPSERVER lpServer; if ((lpServer = lpiEvt->OpenServer()) != NULL) { if (lpsp->fIsMonitored != lpServer->fIsMonitored()) { g.sub = Subsets_SetMonitor (g.sub, lpiEvt, lpServer->fIsMonitored()); UpdateDisplay_ServerWindow (FALSE, lpiEvt); } lpsp->fIsMonitored = lpServer->fIsMonitored(); lpServer->Close(); } } Alert_Scout_ServerStatus (lpiEvt, pParams->status); } break; // When we get a create request, use the object's Get/SetUserParam() // methods to attach an allocated structure to the thing--the structure // contains the preferences for the server/fileset/etc (for instance, // its warning threshholds, any current scout problems, etc). // On delete requests, free that structure. // case evtCreate: if (lpiEvt->fIsServer()) { PVOID pPref = Server_LoadPreferences (lpiEvt); lpiEvt->SetUserParam (pPref); // Should this server be monitored? // if (!Subsets_fMonitorServer (g.sub, lpiEvt)) { LPSERVER lpServer; if ((lpServer = lpiEvt->OpenServer()) != NULL) { lpServer->SetMonitor (FALSE); lpServer->Close(); } } Alert_Scout_SetOutOfDate (lpiEvt); } else if (lpiEvt->fIsService()) { PVOID pPref = Services_LoadPreferences (lpiEvt); lpiEvt->SetUserParam (pPref); } else if (lpiEvt->fIsAggregate()) { PVOID pPref = Aggregates_LoadPreferences (lpiEvt); lpiEvt->SetUserParam (pPref); } else if (lpiEvt->fIsFileset()) { PVOID pPref = Filesets_LoadPreferences (lpiEvt); lpiEvt->SetUserParam (pPref); } if (!lpiEvt->fIsCell()) { Alert_Scout_QueueCheckServer (lpiEvt); } break; // When we get a create request, use the object's Get/SetUserParam() // methods to attach an allocated structure to the thing--the structure // contains the preferences for the server/fileset/etc (for instance, // its warning threshholds, any current scout problems, etc). // On delete requests, free that structure. // case evtDestroy: if (lpiEvt->fIsServer()) { PVOID pPref = lpiEvt->GetUserParam(); lpiEvt->SetUserParam (0); if (pPref) Delete (pPref); } else if (lpiEvt->fIsService() || lpiEvt->fIsAggregate() || lpiEvt->fIsFileset()) { Alert_RemoveSecondary (lpiEvt); PVOID pPref = lpiEvt->GetUserParam(); lpiEvt->SetUserParam (0); if (pPref) Delete (pPref); } break; } }
void StartContextCommand (HWND hDialog, LPIDENT lpiRepresentedByWindow, LPIDENT lpiChosenByClick, int cmd) { CHILDTAB iTab = Server_GetDisplayedTab (hDialog); LPIDENT lpi = (lpiChosenByClick) ? lpiChosenByClick : lpiRepresentedByWindow; if (lpi && lpi->fIsCell()) lpi = NULL; switch (cmd) { case M_COLUMNS: if (iTab == tabSERVICES) ShowColumnsDialog (hDialog, &gr.viewSvc); else if (iTab == tabAGGREGATES) ShowColumnsDialog (hDialog, &gr.viewAgg); else if (iTab == tabFILESETS) ShowColumnsDialog (hDialog, &gr.viewSet); else ShowColumnsDialog (hDialog, NULL); break; case M_SVR_VIEW_ONEICON: case M_SVR_VIEW_TWOICONS: case M_SVR_VIEW_STATUS: Command_OnIconView (hDialog, TRUE, iTab, cmd); break; case M_VIEW_ONEICON: case M_VIEW_TWOICONS: case M_VIEW_STATUS: Command_OnIconView (hDialog, FALSE, iTab, cmd); break; case M_PROPERTIES: if (lpi) Command_OnProperties (lpi); break; case M_SUBSET: ShowSubsetsDialog(); break; case M_REFRESHALL: if (g.lpiCell) StartTask (taskREFRESH, NULL, g.lpiCell); break; case M_REFRESH: if (lpi) StartTask (taskREFRESH, NULL, lpi); else if (g.lpiCell) StartTask (taskREFRESH, NULL, g.lpiCell); break; case M_SYNCVLDB: if (lpi) Server_SyncVLDB (lpi); break; case M_SALVAGE: if (lpi) Server_Salvage (lpi); break; case M_SET_CREATE: Filesets_Create (lpi); break; case M_SET_REPLICATION: if (lpi && lpi->fIsFileset()) Filesets_ShowReplication (Server_GetWindowForChild (hDialog), lpi); break; case M_SET_DELETE: if (lpi && lpi->fIsFileset()) Filesets_Delete (lpi); break; case M_SET_CLONE: Filesets_Clone (lpi); break; case M_SET_DUMP: if (lpi && lpi->fIsFileset()) Filesets_Dump (lpi); break; case M_SET_RESTORE: Filesets_Restore (lpi); break; case M_SET_RELEASE: if (lpi && lpi->fIsFileset()) Filesets_Release (lpi); break; case M_SET_MOVETO: if (lpi && lpi->fIsFileset()) Filesets_ShowMoveTo (lpi, NULL); break; case M_SET_SETQUOTA: if (lpi && lpi->fIsFileset()) Filesets_SetQuota (lpi); break; case M_SET_LOCK: if (lpi && lpi->fIsFileset()) StartTask (taskSET_LOCK, NULL, lpi); break; case M_SET_UNLOCK: if (lpi && !lpi->fIsService()) StartTask (taskSET_UNLOCK, NULL, lpi); else if (!lpi && g.lpiCell) StartTask (taskSET_UNLOCK, NULL, g.lpiCell); break; case M_SET_RENAME: if (lpi && lpi->fIsFileset()) Filesets_ShowRename (lpi); break; case M_SVR_OPEN: if (lpi && lpi->fIsServer()) StartTask (taskSVR_GETWINDOWPOS, g.hMain, lpi); break; case M_SVR_CLOSE: if (lpi && lpi->fIsServer()) Server_Close (lpi); break; case M_SVR_CLOSEALL: Server_CloseAll (TRUE); break; case M_SVR_SECURITY: Server_Security (lpi); break; case M_SVR_HOSTS: Server_Hosts (lpi); break; case M_SVR_INSTALL: Server_Install (lpi); break; case M_SVR_UNINSTALL: Server_Uninstall (lpi); break; case M_SVR_PRUNE: Server_Prune (lpi); break; case M_SVR_GETDATES: Server_GetDates (lpi); break; case M_EXECUTE: Server_Execute (lpi); break; case M_VIEWLOG: if (lpi && lpi->fIsService()) Services_ShowServiceLog (lpi); else Services_ShowServerLog (lpi); break; case M_SVR_MONITOR: if (lpi && lpi->fIsServer()) StartTask (taskSVR_MONITOR_ONOFF, NULL, lpi); break; case M_SVC_CREATE: if (!lpi) Services_Create (NULL); else Services_Create (lpi->GetServer()); break; case M_SVC_DELETE: if (lpi && lpi->fIsService()) Services_Delete (lpi); break; case M_SVC_START: if (lpi && lpi->fIsService()) Services_Start (lpi); break; case M_SVC_STOP: if (lpi && lpi->fIsService()) Services_Stop (lpi); break; case M_SVC_RESTART: if (lpi && lpi->fIsService()) Services_Restart (lpi); break; case M_CELL_OPEN: OpenCellDialog(); break; case M_CREDENTIALS: NewCredsDialog(); break; case M_OPTIONS: ShowOptionsDialog(); break; case M_HELP: WinHelp (g.hMain, cszHELPFILENAME, HELP_FINDER, 0); break; case M_HELP_FIND: Help_FindCommand(); break; case M_HELP_XLATE: Help_FindError(); break; case M_ABOUT: Help_About(); break; } }
BOOL CALLBACK Filesets_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { if (HandleColumnNotify (hDlg, msg, wp, lp, &gr.viewSet)) return FALSE; switch (msg) { case WM_INITDIALOG: { RECT rTab; GetClientRect (GetParent(hDlg), &rTab); TabCtrl_AdjustRect (GetParent (hDlg), FALSE, &rTab); ResizeWindow (hDlg, awdFilesets, rwaMoveToHere, &rTab); FL_RestoreView (GetDlgItem (hDlg, IDC_SET_LIST), &gr.viewSet); FastList_SetTextCallback (GetDlgItem (hDlg, IDC_SET_LIST), GetItemText, &gr.viewSet); Filesets_SubclassList (hDlg); Filesets_OnView (hDlg); Filesets_OnSelect (hDlg); } break; case WM_HELP: WinHelp (hDlg, cszHELPFILENAME, HELP_FINDER, 0); break; case WM_DESTROY: FL_StoreView (GetDlgItem (hDlg, IDC_SET_LIST), &gr.viewSet); DontNotifyMeEver (hDlg); break; case WM_SIZE: // if (lp==0), we're minimizing--don't call ResizeWindow(). // if (lp != 0) ResizeWindow (hDlg, awdFilesets, rwaFixupGuts); break; case WM_CONTEXTMENU: { POINT ptScreen; POINT ptClient; ptScreen.x = LOWORD(lp); ptScreen.y = HIWORD(lp); ptClient = ptScreen; ScreenToClient ((HWND)wp, &ptClient); if ((HWND)wp == GetDlgItem (hDlg, IDC_SET_LIST)) Filesets_ShowPopupMenu ((HWND)wp, ptClient, ptScreen); } break; case WM_SERVER_CHANGED: { LPIDENT lpiServer = Server_GetServerForChild (hDlg); DontNotifyMeEver (hDlg); NotifyMe (WHEN_OBJECT_CHANGES, NULL, hDlg, 0); // Fix the text at the top of the Aggregates tab: // TCHAR szName[ cchRESOURCE ]; LPTSTR pszText; if (lpiServer != NULL) { LPSERVER_PREF lpsp = (LPSERVER_PREF)lpiServer->GetUserParam(); lpiServer->GetServerName (szName); if (lpsp && !lpsp->fIsMonitored) pszText = FormatString (IDS_FILESET_UNMON, TEXT("%s"), szName); else pszText = FormatString (IDS_FILESETS_IN_SERVER, TEXT("%s"), szName); } else if (g.lpiCell != NULL) { g.lpiCell->GetCellName (szName); if (g.sub) pszText = FormatString (IDS_FILESET_SOME, TEXT("%s"), szName); else pszText = FormatString (IDS_FILESETS_IN_CELL, TEXT("%s"), szName); } else { pszText = FormatString (IDS_FILESETS_IN_NOTHING); } SetDlgItemText (hDlg, IDC_SET_DESC, pszText); FreeString (pszText); UpdateDisplay_Filesets (FALSE, GetDlgItem (hDlg, IDC_SET_LIST), NULL, 0, NULL, NULL, NULL); } break; case WM_NOTIFY_FROM_DISPATCH: Filesets_OnNotifyFromDispatch ((LPNOTIFYSTRUCT)lp); Delete ((LPNOTIFYSTRUCT)lp); break; case WM_COMMAND: switch (LOWORD(wp)) { case IDC_SET_CREATE: SendMessage (GetDlgItem (hDlg, IDC_SET_LIST), WM_COMMAND, M_SET_CREATE, 0); break; case IDC_SET_DELETE: SendMessage (GetDlgItem (hDlg, IDC_SET_LIST), WM_COMMAND, M_SET_DELETE, 0); break; case IDC_SET_REP: SendMessage (GetDlgItem (hDlg, IDC_SET_LIST), WM_COMMAND, M_SET_REPLICATION, 0); break; case IDC_SET_SETQUOTA: SendMessage (GetDlgItem (hDlg, IDC_SET_LIST), WM_COMMAND, M_SET_SETQUOTA, 0); break; } break; case WM_MOUSEMOVE: Filesets_ContinueDrag (hDlg); break; case WM_LBUTTONDOWN: if (l.fDragging && l.fRightBtn) Filesets_FinishDrag (hDlg, FALSE, FALSE); break; case WM_RBUTTONDOWN: if (l.fDragging && !l.fRightBtn) Filesets_FinishDrag (hDlg, FALSE, FALSE); break; case WM_LBUTTONUP: if (l.fDragging && !l.fRightBtn) Filesets_FinishDrag (hDlg, TRUE, FALSE); break; case WM_RBUTTONUP: if (l.fDragging && l.fRightBtn) Filesets_FinishDrag (hDlg, TRUE, TRUE); break; case WM_ENDTASK: LPTASKPACKET ptp; if ((ptp = (LPTASKPACKET)lp) != NULL) { if (ptp->idTask == taskSET_SELECT) Filesets_OnEndTask_Select (hDlg, ptp); else if (ptp->idTask == taskSET_BEGINDRAG) Filesets_OnEndTask_BeginDrag (hDlg, ptp); else if (ptp->idTask == taskSET_DRAGMENU) Filesets_OnEndTask_DragMenu (hDlg, ptp); else if (ptp->idTask == taskSET_MENU) Filesets_OnEndTask_Menu (hDlg, ptp); FreeTaskPacket (ptp); } break; case WM_NOTIFY: switch (((LPNMHDR)lp)->code) { case FLN_ITEMSELECT: if (((LPNMHDR)lp)->hwndFrom == GetDlgItem (hDlg, IDC_SET_LIST)) { Filesets_OnSelect (hDlg); } break; case FLN_ITEMEXPAND: if (((LPNMHDR)lp)->hwndFrom == GetDlgItem (hDlg, IDC_SET_LIST)) { HLISTITEM hItem = ((LPFLN_ITEMEXPAND_PARAMS)lp)->hItem; LPIDENT lpi = (LPIDENT)FastList_GetItemParam (GetDlgItem (hDlg, IDC_SET_LIST), hItem); BOOL fExpanded = ((LPFLN_ITEMEXPAND_PARAMS)lp)->fExpanded; if (lpi && lpi->fIsServer()) { LPSERVER_PREF lpsp; if ((lpsp = (LPSERVER_PREF)lpi->GetUserParam()) != NULL) { lpsp->fExpandTree = fExpanded; Server_SavePreferences (lpi); } } else if (lpi && lpi->fIsAggregate()) { LPAGGREGATE_PREF lpap; if ((lpap = (LPAGGREGATE_PREF)lpi->GetUserParam()) != NULL) { lpap->fExpandTree = fExpanded; Aggregates_SavePreferences (lpi); } } } break; case FLN_BEGINDRAG: return Filesets_BeginDrag (hDlg, ((LPFLN_DRAG_PARAMS)lp)->fRightButton); case FLN_LDBLCLICK: if (((LPNMHDR)lp)->hwndFrom == GetDlgItem (hDlg, IDC_SET_LIST)) { BOOL fShowProperties = TRUE; HLISTITEM hItem; if ((hItem = FastList_GetFocus (GetDlgItem (hDlg, IDC_SET_LIST))) != NULL) { if (FastList_FindFirstChild (GetDlgItem (hDlg, IDC_SET_LIST), hItem)) fShowProperties = FALSE; } LPIDENT lpi = Filesets_GetFocused (hDlg); if (lpi && !lpi->fIsCell() && fShowProperties) { PostMessage (GetDlgItem (hDlg, IDC_SET_LIST), WM_COMMAND, M_PROPERTIES, 0); return TRUE; } } break; } break; } return FALSE; }