// // Verify that all assigned configuration parameters are valid. // BOOL ManagerList::InvalidSetup() { int m, w; Manager *mgr; Worker *wkr; BOOL nonidle_worker_with_targets = FALSE; BOOL all_workers_idle = TRUE; // Verify that at least one spec was assigned, even if Idle. if ( !GetMaxAccessSpecCount() ) { ErrorMessage( "You must assign at least one access specification " "to a worker." ); return TRUE; } // We need to loop through all workers of all managers to verify // their assigned specs are valid. for ( m = 0; m < ManagerCount(); m++ ) { mgr = GetManager( m ); if ( mgr->InvalidSetup() ) return TRUE; // Verify that at least one worker has targets assigned with a // non-idle spec or all specs are idle. for ( w = 0; w < mgr->WorkerCount(); w++ ) { wkr = mgr->GetWorker( w ); // Keep track if all workers have only the idle spec. if ( wkr->AccessSpecCount() != wkr->IdleAccessSpecCount() ) { all_workers_idle = FALSE; // Keep track if any non-idle worker has targets. if ( wkr->TargetCount() ) nonidle_worker_with_targets = TRUE; } } } // Verify that at least one worker has targets assigned with a // non-idle spec or all specs are idle. if ( !all_workers_idle && !nonidle_worker_with_targets ) { ErrorMessage( "If no worker has targets selected, then all workers " "must have the idle spec assigned." ); return TRUE; } return FALSE; }
// // This function is called whenever the selection in the WorkerView changes. // If the selection changes to a worker, it displays that worker's access // spec assignment. // void CPageAccess::ShowAssignedAccess() { int m, w, s, mgr_count, wkr_count, spec_count; Manager *mgr; Worker *wkr = NULL; Test_Spec *spec; // Clear the list of assigned access specs. m_LAssignedAccess.DeleteAllItems(); // find out who is selected: All managers, a manager, or a worker. switch ( theApp.pView->m_pWorkerView->GetSelectedType() ) { case ALL_MANAGERS: // Disable the Assigned Access Spec listbox if there are no workers. if ( !theApp.manager_list.WorkerCount() ) { SetAssignedAccess( FALSE ); return; } // Enable the Assigned Access Spec listbox. SetAssignedAccess( TRUE ); // Only display items in the listbox if all the descended workers // have the same access spec list. if ( !theApp.manager_list.AreAccessSpecsIdentical() ) return; // All access specs are the same. Show the specs stored by any worker. // Find a manager with any non-client workers. mgr_count = theApp.manager_list.ManagerCount(); for ( m = 0; m < mgr_count; m++ ) { mgr = theApp.manager_list.GetManager( m ); wkr_count = mgr->WorkerCount(); if ( wkr_count > mgr->WorkerCount( GenericClientType ) ) break; } // Find the manager's first non-client worker. for ( w = 0; w < wkr_count; w++ ) { // Find the first non-client worker. wkr = mgr->GetWorker( w ); if ( !IsType( wkr->Type(), GenericClientType ) ) break; } break; case MANAGER: mgr = theApp.pView->m_pWorkerView->GetSelectedManager(); wkr_count = mgr->WorkerCount(); // Disable the access spec list if there are no non-client workers. if ( wkr_count == mgr->WorkerCount( GenericClientType ) ) { SetAssignedAccess( FALSE ); return; } // Enable the Assigned Access Spec listbox. SetAssignedAccess( TRUE ); // Only display items in the listbox if all the descended workers // have the same access spec list. if ( !mgr->AreAccessSpecsIdentical() ) return; // All the access specs are the same. // Find the first non-client worker. for ( w = 0; w < wkr_count; w++ ) { wkr = mgr->GetWorker( w ); if ( !IsType( wkr->Type(), GenericClientType ) ) break; } break; case WORKER: wkr = theApp.pView->m_pWorkerView->GetSelectedWorker(); if ( IsType( wkr->Type(), GenericClientType ) ) { // Worker is a net client. Display it's net server's spec // assignment, but disable the view. wkr = wkr->net_partner; SetAssignedAccess( FALSE ); } else { SetAssignedAccess( TRUE ); } break; } if ( !wkr ) { ErrorMessage( "No valid worker in CPageAccess::ShowAssignedAccess()." ); return; } // Add the Access Spec to the assigned access spec list view. spec_count = wkr->AccessSpecCount(); for ( s = 0; s < spec_count; s++ ) { spec = wkr->GetAccessSpec( s ); // Set the data portion to pointer to the access spec in the // worker's access spec list. m_LAssignedAccess.InsertItem( LVIF_TEXT | LVIF_PARAM | LVIF_IMAGE, s, spec->name, NULL, LVIS_SELECTED, BLUE, (ULONG_PTR)spec ); } }