openmohaa/code/gamespy/Chat/chatty/chattyView.cpp

392 lines
8.1 KiB
C++
Raw Normal View History

2023-02-04 21:00:01 +01:00
// chattyView.cpp : implementation of the CChattyView class
//
#include "stdafx.h"
#include "chatty.h"
#include "chattyDoc.h"
#include "chattyView.h"
#include "TalkDlg.h"
#include "KickReasonDlg.h"
#include "GetUserInfoDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CChattyView
IMPLEMENT_DYNCREATE(CChattyView, CFormView)
BEGIN_MESSAGE_MAP(CChattyView, CFormView)
//{{AFX_MSG_MAP(CChattyView)
ON_WM_CREATE()
ON_WM_TIMER()
ON_BN_CLICKED(IDC_HIDE, OnHide)
ON_LBN_SELCHANGE(IDC_CALLBACKS, OnSelchangeCallbacks)
ON_LBN_DBLCLK(IDC_USERS, OnDblclkUsers)
ON_COMMAND(ID_USER_BAN, OnUserBan)
ON_COMMAND(ID_USER_GETINFO, OnUserGetinfo)
ON_COMMAND(ID_USER_KICK, OnUserKick)
ON_COMMAND(ID_USER_MODE_OP, OnUserModeOp)
ON_COMMAND(ID_USER_MODE_VOICE, OnUserModeVoice)
ON_COMMAND(ID_USER_MODE_NORMAL, OnUserModeNormal)
ON_BN_CLICKED(IDC_SENDBUTT, OnSendbutt)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CChattyView construction/destruction
CChattyView::CChattyView()
: CFormView(CChattyView::IDD)
{
//{{AFX_DATA_INIT(CChattyView)
m_edit = _T("");
m_hide = FALSE;
//}}AFX_DATA_INIT
// TODO: add construction code here
}
CChattyView::~CChattyView()
{
}
void CChattyView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CChattyView)
DDX_Control(pDX, IDC_NUM_USERS, m_numUsers);
DDX_Control(pDX, IDC_CALLBACKS, m_callbacks);
DDX_Control(pDX, IDC_USERS, m_users);
DDX_Control(pDX, IDC_LIST, m_list);
DDX_Text(pDX, IDC_EDIT, m_edit);
DDX_Check(pDX, IDC_HIDE, m_hide);
//}}AFX_DATA_MAP
}
BOOL CChattyView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CFormView::PreCreateWindow(cs);
}
void CChattyView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
ResizeParentToFit();
SetTimer(100, 50, NULL);
}
/////////////////////////////////////////////////////////////////////////////
// CChattyView diagnostics
#ifdef _DEBUG
void CChattyView::AssertValid() const
{
CFormView::AssertValid();
}
void CChattyView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
CChattyDoc* CChattyView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CChattyDoc)));
return (CChattyDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CChattyView message handlers
int CChattyView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFormView::OnCreate(lpCreateStruct) == -1)
return -1;
return 0;
}
void CChattyView::OnTimer(UINT nIDEvent)
{
if(nIDEvent == 100)
{
CChattyDoc * pDoc = GetDocument();
if(pDoc != NULL)
{
CString * str;
while(!pDoc->m_newStuff.IsEmpty())
{
str = pDoc->m_newStuff.GetHead();
pDoc->m_newStuff.RemoveHead();
m_list.InsertString(0, *str);
delete str;
}
while(!pDoc->m_addCallbacks.IsEmpty())
{
str = pDoc->m_addCallbacks.GetHead();
pDoc->m_addCallbacks.RemoveHead();
m_callbacks.InsertString(0, *str);
delete str;
}
CModUsers * mod;
CString name;
CString newName;
UINT index;
while(!pDoc->m_modUsers.IsEmpty())
{
mod = pDoc->m_modUsers.GetHead();
pDoc->m_modUsers.RemoveHead();
if(mod->type == NEW)
{
name = mod->nick;
if(mod->mode & CHAT_OP)
name.Insert(0, '@');
else if(mod->mode & CHAT_VOICE)
name.Insert(0, '?');
m_users.AddString(name);
}
else if(mod->type == DEL)
{
name = mod->nick;
index = m_users.FindStringExact(-1, name);
if(index == LB_ERR)
index = m_users.FindStringExact(-1, '@' + name);
if(index == LB_ERR)
index = m_users.FindStringExact(-1, '?' + name);
if(index == LB_ERR)
ASSERT(0);
m_users.DeleteString(index);
}
else if(mod->type == RENAME)
{
name = mod->nick;
newName = "";
index = m_users.FindStringExact(-1, name);
if(index == LB_ERR)
{
newName = '@';
index = m_users.FindStringExact(-1, '@' + name);
}
if(index == LB_ERR)
{
newName = '?';
index = m_users.FindStringExact(-1, '?' + name);
}
if(index == LB_ERR)
ASSERT(0);
m_users.DeleteString(index);
newName += mod->newNick;
m_users.AddString(newName);
}
else if(mod->type == MODE)
{
name = mod->nick;
index = m_users.FindStringExact(-1, name);
if(index == LB_ERR)
index = m_users.FindStringExact(-1, '@' + name);
if(index == LB_ERR)
index = m_users.FindStringExact(-1, '?' + name);
if(index == LB_ERR)
ASSERT(0);
m_users.DeleteString(index);
if(mod->mode & CHAT_OP)
name.Insert(0, '@');
else if(mod->mode & CHAT_VOICE)
name.Insert(0, '?');
m_users.AddString(name);
}
else
ASSERT(0);
delete mod;
}
char buf[16];
itoa(m_users.GetCount(), buf, 10);
m_numUsers.SetWindowText(buf);
}
SetTimer(100, 50, NULL);
}
CFormView::OnTimer(nIDEvent);
}
void CChattyView::OnHide()
{
UpdateData();
GetDocument()->m_hide = m_hide;
}
void CChattyView::OnSelchangeCallbacks()
{
UpdateData();
m_callbacks.GetText(m_callbacks.GetCurSel(), m_edit);
UpdateData(FALSE);
}
void CChattyView::OnDblclkUsers()
{
if(theApp.m_chat != NULL)
{
int index = m_users.GetCurSel();
if(index != LB_ERR)
{
CString user;
m_users.GetText(index, user);
if((user.Left(1) == "@") || (user.Left(1) == "?"))
user = user.Mid(1);
CTalkDlg dlg;
dlg.m_type = 0;
if(dlg.DoModal() == IDOK)
chatSendUserMessage(theApp.m_chat, user, dlg.m_message, dlg.m_type);
}
}
}
void CChattyView::OnUserBan()
{
if(theApp.m_chat != NULL)
{
int index = m_users.GetCurSel();
if(index != LB_ERR)
{
CString user;
m_users.GetText(index, user);
if((user.Left(1) == "@") || (user.Left(1) == "?"))
user = user.Mid(1);
chatBanUser(theApp.m_chat, GetDocument()->m_channelName, user);
}
}
}
void CChattyView::OnUserGetinfo()
{
if(theApp.m_chat != NULL)
{
int index = m_users.GetCurSel();
if(index != LB_ERR)
{
CString user;
m_users.GetText(index, user);
if((user.Left(1) == "@") || (user.Left(1) == "?"))
user = user.Mid(1);
CGetUserInfoDlg dlg;
dlg.m_user = user;
dlg.DoModal();
}
}
}
void CChattyView::OnUserKick()
{
if(theApp.m_chat != NULL)
{
int index = m_users.GetCurSel();
if(index != LB_ERR)
{
CString user;
m_users.GetText(index, user);
if((user.Left(1) == "@") || (user.Left(1) == "?"))
user = user.Mid(1);
CKickReasonDlg dlg;
if(dlg.DoModal() == IDOK)
{
chatKickUser(theApp.m_chat, GetDocument()->m_channelName, user, dlg.m_reason);
}
}
}
}
void CChattyView::OnUserModeOp()
{
if(theApp.m_chat != NULL)
{
int index = m_users.GetCurSel();
if(index != LB_ERR)
{
CString user;
m_users.GetText(index, user);
if((user.Left(1) == "@") || (user.Left(1) == "?"))
user = user.Mid(1);
chatSetUserMode(theApp.m_chat, GetDocument()->m_channelName, user, CHAT_OP);
}
}
}
void CChattyView::OnUserModeVoice()
{
if(theApp.m_chat != NULL)
{
int index = m_users.GetCurSel();
if(index != LB_ERR)
{
CString user;
m_users.GetText(index, user);
if((user.Left(1) == "@") || (user.Left(1) == "?"))
user = user.Mid(1);
chatSetUserMode(theApp.m_chat, GetDocument()->m_channelName, user, CHAT_VOICE);
}
}
}
void CChattyView::OnUserModeNormal()
{
if(theApp.m_chat != NULL)
{
int index = m_users.GetCurSel();
if(index != LB_ERR)
{
CString user;
m_users.GetText(index, user);
if((user.Left(1) == "@") || (user.Left(1) == "?"))
user = user.Mid(1);
chatSetUserMode(theApp.m_chat, GetDocument()->m_channelName, user, CHAT_NORMAL);
}
}
}
void CChattyView::OnSendbutt()
{
// TODO: Add your control notification handler code here
if(theApp.m_chat != NULL)
{
UpdateData();
chatSendChannelMessage(theApp.m_chat, GetDocument()->m_channelName, (LPCSTR)m_edit,CHAT_MESSAGE);
m_edit.Empty();
UpdateData(FALSE);
}
}