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);
}