LRESULT CClientListCtrl::OnP4ClientList(WPARAM wParam, LPARAM lParam) { CCmd_Clients *pCmd= (CCmd_Clients *) wParam; if(!pCmd->GetError()) { CString msg; CObList const *clients= pCmd->GetList(); int count = clients->GetCount(); SetRedraw(FALSE); int index = 0; CString curclient = GET_P4REGPTR()->GetP4Client(); CString defclient = GET_P4REGPTR()->GetP4Client(TRUE); CString user = GET_P4REGPTR()->GetP4User(); for(int subItem=0; subItem < CLIENT_MAXCOL; subItem++) m_ListAll.column[subItem].SetSize(clients->GetCount(), 100); for(POSITION pos= clients->GetHeadPosition(); pos != NULL; index++) { CP4Client *client=(CP4Client *) clients->GetNext(pos); InsertClient(client, index, &curclient, &defclient, &user); if ((index & 0x1FFF) == 0) { msg.FormatMessage(IDS_INSERTING_CLIENTS, count - index); MainFrame()->UpdateStatus(msg); } } SetRedraw(TRUE); msg.FormatMessage( IDS_NUMBER_OF_CLIENTS_n, index ); AddToStatus( msg, SV_COMPLETION ); ReSort(); // Make sure previous item is re-selected if(clients->GetCount() > 0) { int i = FindInList(m_Active.IsEmpty() ? GET_P4REGPTR()->GetP4Client() : m_Active); if (i < 0) i=0; SetItemState(i, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED); EnsureVisible(i, FALSE); } CP4ListCtrl::SetUpdateDone(); // Notify the mainframe that we have finished getting the clients, // hence the entire set of async command have finished. MainFrame()->ExpandDepotIfNeedBe(); if (m_PostViewUpdateMsg) PostMessage(m_PostViewUpdateMsg, m_PostViewUpdateWParam, m_PostViewUpdateLParam); } else CP4ListCtrl::SetUpdateFailed(); delete pCmd; m_PostViewUpdateMsg = 0; MainFrame()->ClearStatus(); return 0; }
void CClientListCtrl::OnNewClient(WPARAM wParam, LPARAM lParam) { if (!IsClear()) { CString oldclient = wParam ? m_OldDefClient : m_OldCurClient; CString newclient = GET_P4REGPTR()->GetP4Client((BOOL)wParam); CString curclient = GET_P4REGPTR()->GetP4Client(); CString defclient = GET_P4REGPTR()->GetP4Client(TRUE); LV_ITEM lvItem; lvItem.mask = LVIF_IMAGE; lvItem.iSubItem = 0; lvItem.state = lvItem.stateMask = 0; lvItem.iItem = FindInList(oldclient); if(lvItem.iItem > -1) { lvItem.iImage = CP4ViewImageList::GetClientIndex(false, oldclient == defclient); SetItem(&lvItem ); } lvItem.iItem = FindInList(newclient); if(lvItem.iItem > -1) { lvItem.iImage = CP4ViewImageList::GetClientIndex(true, newclient == defclient); SetItem(&lvItem ); } else if (GET_P4REGPTR()->GetClientFilteredFlags()) { int index = FindInListAll(newclient); if (index > -1) { CP4Client * client = new CP4Client; client->Create(m_ListAll.column[CLIENT_NAME].GetAt(index), m_ListAll.column[CLIENT_OWNER].GetAt(index), m_ListAll.column[CLIENT_HOST].GetAt(index), m_ListAll.column[CLIENT_ACCESSDATE].GetAt(index), m_ListAll.column[CLIENT_ROOT].GetAt(index), m_ListAll.column[CLIENT_DESC].GetAt(index)); m_ListAll.column[0].SetAt(index, _T("@@")); // Removes from list of all clients InsertClient(client, GetItemCount(), &curclient, &defclient); ReSort(); } } if (wParam) m_OldDefClient = newclient; else m_OldCurClient = newclient; } }
// --------------------------------------------------------------------------- // // --------------------------------------------------------------------------- // TInt CPolicyClientRequestHandler::RequestPolicy( const RMessage2& aMessage ) { TInt err = KErrNone; CPolicyEventReq* req = NULL; RThread client; err = aMessage.Client( client ); if( err != KErrNone ) { client.Close(); return err; } TThreadId currClient = client.Id(); client.Close(); TInt clientCount = iControlPolicyClients.Count(); for( TInt i = 0; i < clientCount; i++ ) { req = iControlPolicyClients[i]; if(req->iClientId == currClient) { if( req->iAddedPolicies.Count() == 0 && req->iOriginalControlPolicies.Count() == 0 && req->iRemovedPolicies.Count() == 0) { // Check if it's OK to add this request to the list. // This is done by just storing the message. if( req->iMessage.IsNull() ) { req->iMessage = aMessage; return KErrNone; } // If message is not null, something is wrong. return KErrGeneral; } // If we have a stored message, complete it. Should not happen! if( !req->iMessage.IsNull() ) { __ALFFXLOGSTRING("CPolicyEventReq:: Message complete, stored message, should not happen"); req->iMessage.Complete( KErrNone ); // NULLify the message pointer after it has been completed. // If not done, we can't check if the message is valid or not. req->iMessage = RMessagePtr2(); return KErrNone; } // Otherwise complete this message. __ALFFXLOGSTRING("CPolicyEventReq:: Message complete, return policy count"); aMessage.Complete( req->TotalPolicyCount() ); return KErrNone; } } // Client not found. Insert it! err = InsertClient( aMessage ); if( err != KErrNotFound ) { // If failed to insert the client, complete the message so it may try again. // Also, if there are control policies, we report the number of them // If error is KErrNotFound, we have stored the message, and it will be completed // later (as soon as there are policies) __ALFFXLOGSTRING1("CPolicyEventReq:: insert client returned %d", err); aMessage.Complete( err ); } return KErrNone; }
LRESULT CClientListCtrl::OnP4EndSpecEdit( WPARAM wParam, LPARAM lParam ) { CCmd_EditSpec *pCmd= (CCmd_EditSpec *) wParam; BOOL chainedCommand = FALSE; BOOL need2Refresh = FALSE; if (lParam != IDCANCEL && lParam != IDABORT) { // Get the Sync flag int syncAfter = SYNC_DONT; BOOL bHasChgs = TRUE; if (m_PrevNbrCli < 1) { int key= pCmd->HaveServerLock() ? pCmd->GetServerKey() : 0; CCmd_Changes *pCmd2= new CCmd_Changes; pCmd2->Init( m_hWnd, RUN_SYNC, key ? HOLD_LOCK : LOSE_LOCK, key); if( pCmd2->Run(SUBMITTED_CHANGES, FALSE, NULL, 1) ) { if (!pCmd2->GetChanges()->GetCount()) bHasChgs = FALSE; } delete pCmd2; } if (m_isNew && !GET_P4REGPTR()->DontShowYouHaveCr8NewClient() && bHasChgs) { BOOL b; switch(MsgBox(IDS_YOU_HAVE_CREATED_NEW_CLIENT, MB_ICONEXCLAMATION | MB_DEFBUTTON1, 0, this, &b)) { case IDC_BUTTON1: syncAfter = SYNC_HEAD; break; case IDC_BUTTON2: syncAfter = SYNC_DONT; break; } GET_P4REGPTR()->SetDontShowYouHaveCr8NewClient(b); } else if ((pCmd->IsSyncAfter() || pCmd->IsAutoUpdateSpec()) && !GET_P4REGPTR()->DontShowYouHaveChgClientView() && bHasChgs) { BOOL b; switch(MsgBox(pCmd->IsAutoUpdateSpec() ? IDS_DOYOUWANTOTSYNCYOURNEWCLIENT : IDS_YOU_HAVE_CHANGED_CLIENTS_VIEW, MB_ICONQUESTION | MB_DEFBUTTON1, 0, this, pCmd->IsAutoUpdateSpec() ? NULL : &b)) { case IDC_BUTTON1: syncAfter = SYNC_HEAD; break; case IDC_BUTTON2: syncAfter = pCmd->IsAutoUpdateSpec() ? SYNC_DONT : SYNC_HAVE; break; case IDC_BUTTON3: syncAfter = SYNC_DONT; break; } if (!pCmd->IsAutoUpdateSpec()) GET_P4REGPTR()->SetDontShowYouHaveChgClientView(b); } BOOL bDeld = FALSE; if (m_UpdateState == LIST_UPDATED) { // we have to set 'index' again in case client's name got changed int index= FindInList(m_pNewSpec->GetClientName()); int ixAll= FindInListAll(m_pNewSpec->GetClientName()); if (ixAll == -1) // not in either list { ASSERT(index == -1); CString curclient = GET_P4REGPTR()->GetP4Client(); CString defclient = GET_P4REGPTR()->GetP4Client(TRUE); InsertClient(m_pNewSpec, GetItemCount(), &curclient, &defclient); } else if (index > -1) // in both lists { ASSERT(ixAll > -1); if (MainFrame()->IsClientFilteredOut(m_pNewSpec)) // should it no longer be shown? { need2Refresh = TRUE; delete m_pNewSpec; } else { UpdateClient(m_pNewSpec, index); UpdateClientAll(m_pNewSpec, ixAll); } } else // not in visible list; is in list of all { if (MainFrame()->IsClientFilteredOut(m_pNewSpec)) // should it now be shown? need2Refresh = TRUE; else UpdateClientAll(m_pNewSpec, ixAll); if (pCmd->IsAutoUpdateSpec()) m_OldClient = m_pNewSpec->GetClientName(); delete m_pNewSpec; bDeld = TRUE; } ReSort(); if (pCmd->IsAutoUpdateSpec() || pCmd->IsSpecForceSwitch()) { if (bDeld) need2Refresh = TRUE; else { int i = FindInList(m_OldClient = m_pNewSpec->GetClientName()); if (i < 0) i = 0; SetItemState(i, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED); EnsureVisible(i, FALSE); } m_Active = _T("@"); // force switch to new client } } else if ( m_pNewSpec ) delete m_pNewSpec; int key= pCmd->HaveServerLock() ? pCmd->GetServerKey() : 0; if( m_Active == m_saveclientnew ) // active-client == saved new client name m_OldClient = m_saveclientnew; // means they decided to edit the current client if( m_Active != m_OldClient ) // If current client is not now the client when this { // all started, switch to the new current client if (GET_P4REGPTR()->GetExpandFlag() == 1) GET_P4REGPTR()->AddMRUPcuPath(MainFrame()->GetCurrentItemPath()); m_Active = m_OldClient; GET_P4REGPTR()->SetP4Client( m_Active, TRUE, FALSE, FALSE); MainFrame()->UpdateCaption( ); if (syncAfter) chainedCommand = SyncAfter(key, syncAfter); } else if( syncAfter || GET_P4REGPTR()->GetClearAndReload() || AfxMessageBox(IDS_YOU_HAVE_UPDATED_YOUR_CLIENT_WORKSPACE__CLEAR_AND_RELOAD, MB_YESNO |MB_ICONQUESTION ) == IDYES ) { if (syncAfter) chainedCommand = SyncAfter(key, syncAfter); else { int key= pCmd->HaveServerLock() ? pCmd->GetServerKey() : 0; MainFrame()->UpdateDepotandChangeViews(REDRILL, key); chainedCommand=TRUE; } } if (GET_SERVERLEVEL() >= 22) TheApp()->Set_m_ClientSubOpts(TheApp()->GetClientSpecField( _T("SubmitOptions"), pCmd->GetSpecOut())); } else { if ( m_pNewSpec ) delete m_pNewSpec; if (lParam == IDCANCEL && pCmd->GetIsRequestingNew()) { m_Active = pCmd->GetOldClient(); // switch back to the previous client GET_P4REGPTR()->SetP4Client( m_Active, TRUE, FALSE, FALSE); MainFrame()->UpdateCaption( ); } } if (lParam != IDABORT) { MainFrame()->ClearStatus(); if (!chainedCommand && pCmd->HaveServerLock()) pCmd->ReleaseServerLock(); CDialog *dlg = (CDialog *)pCmd->GetSpecSheet(); dlg->DestroyWindow(); } delete pCmd; m_EditInProgress = FALSE; if (need2Refresh && !chainedCommand) OnViewUpdate(); if (TheApp()->m_RunClientWizOnly && !chainedCommand) ::PostMessage(MainFrame()->m_hWnd, WM_COMMAND, ID_APP_EXIT, 0); return 0; }