www.pudn.com > fanccMSNr.src.rar > ConnectedView.cpp


// ConnectedView.cpp  
// 
 
#include "stdafx.h" 
#include "messenger/User.hpp" 
#include "DumbMessenger.h" 
#include "ConnectedView.h" 
#include "ScreenNameDialog.h" 
#include "AddUserDialog.h" 
 
// CConnectedView 
 
IMPLEMENT_DYNCREATE(CConnectedView, CTreeView) 
 
CConnectedView::CConnectedView() 
{ 
	model=NULL; 
} 
 
CConnectedView::~CConnectedView() 
{ 
} 
 
BEGIN_MESSAGE_MAP(CConnectedView, CTreeView) 
	ON_COMMAND(ID_USER_CHAT, OnUserChat) 
	ON_UPDATE_COMMAND_UI(ID_USER_CHAT, OnUpdateUserChat) 
	ON_NOTIFY_REFLECT(NM_RCLICK, OnNMRclick) 
	ON_COMMAND(ID_STATUS_AWAY, OnStatusAway) 
	ON_COMMAND(ID_STATUS_BE_RIGHT_BACK, OnStatusBeRightBack) 
	ON_COMMAND(ID_STATUS_BUSY, OnStatusBusy) 
	ON_COMMAND(ID_STATUS_OFFLINE, OnStatusOffline) 
	ON_COMMAND(ID_STATUS_ON_THE_PHONE, OnStatusOnThePhone) 
	ON_COMMAND(ID_STATUS_ONLINE, OnStatusOnline) 
	ON_COMMAND(ID_STATUS_OUT_TO_LUNCH, OnStatusOutToLunch) 
	ON_COMMAND(ID_TOOL_SCREEN_NAME, OnToolScreenName) 
	ON_COMMAND(ID_USER_BLOCK, OnUserBlock) 
	ON_UPDATE_COMMAND_UI(ID_USER_BLOCK, OnUpdateUserBlock) 
	ON_COMMAND(ID_USER_DELETE, OnUserDelete) 
	ON_UPDATE_COMMAND_UI(ID_USER_DELETE, OnUpdateUserDelete) 
	ON_COMMAND(ID_ADD_USER, OnAddUser) 
END_MESSAGE_MAP() 
 
 
// CConnectedView  
 
#ifdef _DEBUG 
void CConnectedView::AssertValid() const 
{ 
	CTreeView::AssertValid(); 
} 
 
void CConnectedView::Dump(CDumpContext& dc) const 
{ 
	CTreeView::Dump(dc); 
} 
#endif //_DEBUG 
 
 
void CConnectedView::OnUserChat() 
{ 
	CTreeCtrl &tree=GetTreeCtrl(); 
	HTREEITEM selected = tree.GetSelectedItem(); 
	ASSERT(selected!=NULL); 
 
	User *user=(User *)tree.GetItemData(selected); 
	ASSERT(model!=NULL); 
	model->startChatWith(user->ID); 
} 
 
 
void CConnectedView::OnUpdateUserChat(CCmdUI *pCmdUI) 
{ 
	CTreeCtrl &tree=GetTreeCtrl(); 
	HTREEITEM selected = tree.GetSelectedItem(); 
	if(selected==NULL) { 
		pCmdUI->Enable(false); 
		return; 
	} 
	User *user=(User *)tree.GetItemData(selected); 
	if(user==NULL) { 
		pCmdUI->Enable(false); 
		return; 
	} 
} 
 
void CConnectedView::OnUserBlock() 
{ 
	CTreeCtrl &tree=GetTreeCtrl(); 
	HTREEITEM selected = tree.GetSelectedItem(); 
	ASSERT(selected!=NULL); 
 
	User *user=(User *)tree.GetItemData(selected); 
	ASSERT(model!=NULL); 
	model->blockUser(!(user->blocked), user->ID); 
} 
 
void CConnectedView::OnUpdateUserBlock(CCmdUI *pCmdUI) 
{ 
	CTreeCtrl &tree=GetTreeCtrl(); 
	HTREEITEM selected = tree.GetSelectedItem(); 
	if(selected==NULL) { 
		pCmdUI->Enable(false); 
		return; 
	} 
 
	User *user=(User *)tree.GetItemData(selected); 
	if(user==NULL) { 
		pCmdUI->Enable(false); 
		return; 
	} 
 
	if(user->blocked) { 
		pCmdUI->SetText(_T("Â÷´Ü ÇØÁ¦(&U)")); 
	} 
} 
 
void CConnectedView::OnUserDelete() 
{ 
	CTreeCtrl &tree=GetTreeCtrl(); 
	HTREEITEM selected = tree.GetSelectedItem(); 
	ASSERT(selected!=NULL); 
 
	int reply=AfxMessageBox(_T("ÊÇ·ñɾ³ýÓû§?"), MB_YESNO); 
	if(reply==IDYES) { 
		User *user=(User *)tree.GetItemData(selected); 
		ASSERT(model!=NULL); 
		model->removeUser(user->ID); 
	} 
} 
 
void CConnectedView::OnUpdateUserDelete(CCmdUI *pCmdUI) 
{ 
	CTreeCtrl &tree=GetTreeCtrl(); 
	HTREEITEM selected = tree.GetSelectedItem(); 
	if(selected==NULL) { 
		pCmdUI->Enable(false); 
		return; 
	} 
	User *user=(User *)tree.GetItemData(selected); 
	if(user==NULL) { 
		pCmdUI->Enable(false); 
		return; 
	} 
} 
 
void CConnectedView::OnNMRclick(NMHDR *pNMHDR, LRESULT *pResult) 
{ 
	CTreeCtrl &tree=GetTreeCtrl(); 
	HTREEITEM selected = tree.GetSelectedItem(); 
	if(selected==NULL) { 
		return; 
	} 
	User *user=(User *)tree.GetItemData(selected); 
	if(user==NULL) { 
		return; 
	} 
 
	  CPoint point; 
    GetCursorPos(&point); 
 
    CMenu mnuTop; 
    mnuTop.LoadMenu(IDR_USER_CONTEXT); 
 
    CMenu* pPopup = mnuTop.GetSubMenu(0); 
    ASSERT_VALID(pPopup); 
 
    pPopup->TrackPopupMenu(TPM_LEFTBUTTON | TPM_RIGHTBUTTON | 
                           TPM_LEFTALIGN, point.x, point.y, AfxGetMainWnd(), NULL); 
 
    *pResult = 0; 
} 
 
void CConnectedView::OnStatusAway() 
{ 
	ASSERT(model!=NULL); 
	model->setStatus("AWY"); 
} 
 
void CConnectedView::OnStatusBeRightBack() 
{ 
	ASSERT(model!=NULL); 
	model->setStatus("BRB"); 
} 
 
void CConnectedView::OnStatusBusy() 
{ 
	ASSERT(model!=NULL); 
	model->setStatus("BSY"); 
} 
 
void CConnectedView::OnStatusOffline() 
{ 
	ASSERT(model!=NULL); 
	model->setStatus("HDN"); 
} 
 
void CConnectedView::OnStatusOnThePhone() 
{ 
	ASSERT(model!=NULL); 
	model->setStatus("PHN"); 
} 
 
void CConnectedView::OnStatusOnline() 
{ 
	ASSERT(model!=NULL); 
	model->setStatus("NLN"); 
} 
 
void CConnectedView::OnStatusOutToLunch() 
{ 
	ASSERT(model!=NULL); 
	model->setStatus("LUN"); 
} 
 
void CConnectedView::OnToolScreenName() 
{ 
	ASSERT(model!=NULL); 
	CScreenNameDialog dialog(model->getMy().screenName); 
	if(dialog.DoModal()!=IDOK) { 
		return; 
	} 
	 
	model->setScreenName((char*)((LPCTSTR)dialog.screenName)); 
} 
 
 
void CConnectedView::OnAddUser() 
{ 
	ASSERT(model!=NULL); 
 
	CAddUserDialog dialog; 
	if(dialog.DoModal()!=IDOK) { 
		return; 
	} 
 
	model->addUser((LPCSTR)dialog.newUser); 
}